merge
diff --git a/.hgeol b/.hgeol
index cf6a0f1..aad79c2 100644
--- a/.hgeol
+++ b/.hgeol
@@ -10,6 +10,8 @@
 **.vsprops = BIN
 
 **.aif  = BIN
+**.aifc = BIN
+**.aiff = BIN
 **.au   = BIN
 **.bmp  = BIN
 **.db   = BIN
@@ -23,6 +25,8 @@
 **.png  = BIN
 **.psd  = BIN
 **.tar  = BIN
+**.wav  = BIN
+**.whl  = BIN
 **.xar  = BIN
 **.zip  = BIN
 
diff --git a/.hgignore b/.hgignore
index 73e1e56..6128c2b 100644
--- a/.hgignore
+++ b/.hgignore
@@ -1,6 +1,7 @@
 .gdb_history
 .purify
 .svn/
+^.idea/
 .DS_Store
 Makefile$
 Makefile.pre$
@@ -85,6 +86,9 @@
 PCbuild/Win32-temp-*
 PCbuild/x64-temp-*
 PCbuild/amd64
+PCbuild/ipch
+Tools/unicode/build/
+Tools/unicode/MAPPINGS/
 BuildLog.htm
 __pycache__
 Modules/_freeze_importlib
diff --git a/.hgtags b/.hgtags
index 6368a27..a02c774 100644
--- a/.hgtags
+++ b/.hgtags
@@ -115,6 +115,8 @@
 92c2cfb924055ce68c4f78f836dcfe688437ceb8 v3.3.1rc1
 d9893d13c6289aa03d33559ec67f97dcbf5c9e3c v3.3.1
 d047928ae3f6314a13b6137051315453d0ae89b6 v3.3.2
+fd53c500f8b80f54f3ecedec9da2e8c7e52a6888 v3.3.3rc1
 46535f65e7f3bcdcf176f36d34bc1fed719ffd2b v3.4.0a1
 9265a2168e2cb2a84785d8717792acc661e6b692 v3.4.0a2
 dd9cdf90a5073510877e9dd5112f8e6cf20d5e89 v3.4.0a3
+e245b0d7209bb6d0e19316e1e2af1aa9c2139104 v3.4.0a4
diff --git a/Doc/c-api/codec.rst b/Doc/c-api/codec.rst
index 8207ae0..83252af 100644
--- a/Doc/c-api/codec.rst
+++ b/Doc/c-api/codec.rst
@@ -52,19 +52,19 @@
 
 .. c:function:: PyObject* PyCodec_IncrementalEncoder(const char *encoding, const char *errors)
 
-   Get an :class:`IncrementalEncoder` object for the given *encoding*.
+   Get an :class:`~codecs.IncrementalEncoder` object for the given *encoding*.
 
 .. c:function:: PyObject* PyCodec_IncrementalDecoder(const char *encoding, const char *errors)
 
-   Get an :class:`IncrementalDecoder` object for the given *encoding*.
+   Get an :class:`~codecs.IncrementalDecoder` object for the given *encoding*.
 
 .. c:function:: PyObject* PyCodec_StreamReader(const char *encoding, PyObject *stream, const char *errors)
 
-   Get a :class:`StreamReader` factory function for the given *encoding*.
+   Get a :class:`~codecs.StreamReader` factory function for the given *encoding*.
 
 .. c:function:: PyObject* PyCodec_StreamWriter(const char *encoding, PyObject *stream, const char *errors)
 
-   Get a :class:`StreamWriter` factory function for the given *encoding*.
+   Get a :class:`~codecs.StreamWriter` factory function for the given *encoding*.
 
 
 Registry API for Unicode encoding error handlers
diff --git a/Doc/c-api/concrete.rst b/Doc/c-api/concrete.rst
index 65904ee..2d56386 100644
--- a/Doc/c-api/concrete.rst
+++ b/Doc/c-api/concrete.rst
@@ -74,26 +74,35 @@
 
 .. _mapobjects:
 
-Mapping Objects
-===============
+Container Objects
+=================
 
 .. index:: object: mapping
 
 .. toctree::
 
    dict.rst
+   set.rst
 
 
 .. _otherobjects:
 
+Function Objects
+================
+
+.. toctree::
+
+   function.rst
+   method.rst
+   cell.rst
+   code.rst
+
+
 Other Objects
 =============
 
 .. toctree::
 
-   set.rst
-   function.rst
-   method.rst
    file.rst
    module.rst
    iterator.rst
@@ -102,7 +111,6 @@
    memoryview.rst
    weakref.rst
    capsule.rst
-   cell.rst
    gen.rst
    datetime.rst
-   code.rst
+
diff --git a/Doc/c-api/dict.rst b/Doc/c-api/dict.rst
index 1f599fe..5a9dca2 100644
--- a/Doc/c-api/dict.rst
+++ b/Doc/c-api/dict.rst
@@ -84,7 +84,7 @@
    on failure.
 
 
-.. c:function:: int PyDict_DelItemString(PyObject *p, char *key)
+.. c:function:: int PyDict_DelItemString(PyObject *p, const char *key)
 
    Remove the entry in dictionary *p* which has a key specified by the string
    *key*.  Return ``0`` on success or ``-1`` on failure.
diff --git a/Doc/c-api/file.rst b/Doc/c-api/file.rst
index c5a4a59..6f2ecee 100644
--- a/Doc/c-api/file.rst
+++ b/Doc/c-api/file.rst
@@ -17,7 +17,7 @@
 the :mod:`io` APIs instead.
 
 
-.. c:function:: PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding, char *errors, char *newline, int closefd)
+.. c:function:: PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)
 
    Create a Python file object from the file descriptor of an already
    opened file *fd*.  The arguments *name*, *encoding*, *errors* and *newline*
@@ -40,9 +40,9 @@
 
    Return the file descriptor associated with *p* as an :c:type:`int`.  If the
    object is an integer, its value is returned.  If not, the
-   object's :meth:`fileno` method is called if it exists; the method must return
-   an integer, which is returned as the file descriptor value.  Sets an
-   exception and returns ``-1`` on failure.
+   object's :meth:`~io.IOBase.fileno` method is called if it exists; the
+   method must return an integer, which is returned as the file descriptor
+   value.  Sets an exception and returns ``-1`` on failure.
 
 
 .. c:function:: PyObject* PyFile_GetLine(PyObject *p, int n)
@@ -50,7 +50,8 @@
    .. index:: single: EOFError (built-in exception)
 
    Equivalent to ``p.readline([n])``, this function reads one line from the
-   object *p*.  *p* may be a file object or any object with a :meth:`readline`
+   object *p*.  *p* may be a file object or any object with a
+   :meth:`~io.IOBase.readline`
    method.  If *n* is ``0``, exactly one line is read, regardless of the length of
    the line.  If *n* is greater than ``0``, no more than *n* bytes will be read
    from the file; a partial line can be returned.  In both cases, an empty string
diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst
index 270152e..6cd2b8b 100644
--- a/Doc/c-api/import.rst
+++ b/Doc/c-api/import.rst
@@ -118,7 +118,7 @@
    encoded string instead of a Unicode object.
 
 
-.. c:function:: PyObject* PyImport_ExecCodeModule(char *name, PyObject *co)
+.. c:function:: PyObject* PyImport_ExecCodeModule(const char *name, PyObject *co)
 
    .. index:: builtin: compile
 
@@ -145,7 +145,7 @@
    :c:func:`PyImport_ExecCodeModuleWithPathnames`.
 
 
-.. c:function:: PyObject* PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
+.. c:function:: PyObject* PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)
 
    Like :c:func:`PyImport_ExecCodeModule`, but the :attr:`__file__` attribute of
    the module object is set to *pathname* if it is non-``NULL``.
@@ -162,7 +162,7 @@
    .. versionadded:: 3.3
 
 
-.. c:function:: PyObject* PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname, char *cpathname)
+.. c:function:: PyObject* PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)
 
    Like :c:func:`PyImport_ExecCodeModuleObject`, but *name*, *pathname* and
    *cpathname* are UTF-8 encoded strings. Attempts are also made to figure out
@@ -246,7 +246,7 @@
    .. versionadded:: 3.3
 
 
-.. c:function:: int PyImport_ImportFrozenModule(char *name)
+.. c:function:: int PyImport_ImportFrozenModule(const char *name)
 
    Similar to :c:func:`PyImport_ImportFrozenModuleObject`, but the name is a
    UTF-8 encoded string instead of a Unicode object.
diff --git a/Doc/c-api/index.rst b/Doc/c-api/index.rst
index 591136e..3bfbaf4 100644
--- a/Doc/c-api/index.rst
+++ b/Doc/c-api/index.rst
@@ -13,6 +13,7 @@
    :maxdepth: 2
 
    intro.rst
+   stable.rst
    veryhigh.rst
    refcounting.rst
    exceptions.rst
@@ -22,5 +23,4 @@
    init.rst
    memory.rst
    objimpl.rst
-   stable.rst
    apiabiversion.rst
diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst
index 9ed2a3a..6439d7f 100644
--- a/Doc/c-api/init.rst
+++ b/Doc/c-api/init.rst
@@ -86,6 +86,36 @@
 =======================
 
 
+.. c:function:: int Py_SetStandardStreamEncoding(char *encoding, char *errors)
+
+   .. index::
+      single: Py_Initialize()
+      single: main()
+      triple: stdin; stdout; sdterr
+
+   This function should be called before :c:func:`Py_Initialize`, if it is
+   called at all. It specifies which encoding and error handling to use
+   with standard IO, with the same meanings as in :func:`str.encode`.
+
+   It overrides :envvar:`PYTHONIOENCODING` values, and allows embedding code
+   to control IO encoding when the environment variable does not work.
+
+   ``encoding`` and/or ``errors`` may be NULL to use
+   :envvar:`PYTHONIOENCODING` and/or default values (depending on other
+   settings).
+
+   Note that :data:`sys.stderr` always uses the "backslashreplace" error
+   handler, regardless of this (or any other) setting.
+
+   If :c:func:`Py_Finalize` is called, this function will need to be called
+   again in order to affect subsequent calls to :c:func:`Py_Initialize`.
+
+   Returns 0 if successful, a nonzero value on error (e.g. calling after the
+   interpreter has already been initialized).
+
+   .. versionadded:: 3.4
+
+
 .. c:function:: void Py_SetProgramName(wchar_t *name)
 
    .. index::
diff --git a/Doc/c-api/iter.rst b/Doc/c-api/iter.rst
index 3f0f554..2ba444d 100644
--- a/Doc/c-api/iter.rst
+++ b/Doc/c-api/iter.rst
@@ -5,7 +5,7 @@
 Iterator Protocol
 =================
 
-There are only a couple of functions specifically for working with iterators.
+There are two functions specifically for working with iterators.
 
 .. c:function:: int PyIter_Check(PyObject *o)
 
@@ -14,11 +14,10 @@
 
 .. c:function:: PyObject* PyIter_Next(PyObject *o)
 
-   Return the next value from the iteration *o*.  If the object is an iterator,
-   this retrieves the next value from the iteration, and returns *NULL* with no
-   exception set if there are no remaining items.  If the object is not an
-   iterator, :exc:`TypeError` is raised, or if there is an error in retrieving the
-   item, returns *NULL* and passes along the exception.
+   Return the next value from the iteration *o*.  The object must be an iterator
+   (it is up to the caller to check this).  If there are no remaining values,
+   returns *NULL* with no exception set.  If an error occurs while retrieving
+   the item, returns *NULL* and passes along the exception.
 
 To write a loop which iterates over an iterator, the C code should look
 something like this::
diff --git a/Doc/c-api/long.rst b/Doc/c-api/long.rst
index d5430fd..b348015 100644
--- a/Doc/c-api/long.rst
+++ b/Doc/c-api/long.rst
@@ -80,7 +80,7 @@
    *NULL* on failure.
 
 
-.. c:function:: PyObject* PyLong_FromString(char *str, char **pend, int base)
+.. c:function:: PyObject* PyLong_FromString(const char *str, char **pend, int base)
 
    Return a new :c:type:`PyLongObject` based on the string value in *str*, which
    is interpreted according to the radix in *base*.  If *pend* is non-*NULL*,
diff --git a/Doc/c-api/mapping.rst b/Doc/c-api/mapping.rst
index 0ef2961..2803fd0 100644
--- a/Doc/c-api/mapping.rst
+++ b/Doc/c-api/mapping.rst
@@ -22,7 +22,7 @@
    expression ``len(o)``.
 
 
-.. c:function:: int PyMapping_DelItemString(PyObject *o, char *key)
+.. c:function:: int PyMapping_DelItemString(PyObject *o, const char *key)
 
    Remove the mapping for object *key* from the object *o*. Return ``-1`` on
    failure.  This is equivalent to the Python statement ``del o[key]``.
@@ -67,13 +67,13 @@
    the Python expression ``list(o.items())``.
 
 
-.. c:function:: PyObject* PyMapping_GetItemString(PyObject *o, char *key)
+.. c:function:: PyObject* PyMapping_GetItemString(PyObject *o, const char *key)
 
    Return element of *o* corresponding to the object *key* or *NULL* on failure.
    This is the equivalent of the Python expression ``o[key]``.
 
 
-.. c:function:: int PyMapping_SetItemString(PyObject *o, char *key, PyObject *v)
+.. c:function:: int PyMapping_SetItemString(PyObject *o, const char *key, PyObject *v)
 
    Map the object *key* to the value *v* in object *o*. Returns ``-1`` on failure.
    This is the equivalent of the Python statement ``o[key] = v``.
diff --git a/Doc/c-api/memory.rst b/Doc/c-api/memory.rst
index e4a759b..a82e1c2 100644
--- a/Doc/c-api/memory.rst
+++ b/Doc/c-api/memory.rst
@@ -288,8 +288,8 @@
 Python has a *pymalloc* allocator for allocations smaller than 512 bytes. This
 allocator is optimized for small objects with a short lifetime. It uses memory
 mappings called "arenas" with a fixed size of 256 KB. It falls back to
-:c:func:`PyMem_Malloc` and :c:func:`PyMem_Realloc` for allocations larger than
-512 bytes.  *pymalloc* is the default allocator used by
+:c:func:`PyMem_RawMalloc` and :c:func:`PyMem_RawRealloc` for allocations larger
+than 512 bytes.  *pymalloc* is the default allocator used by
 :c:func:`PyObject_Malloc`.
 
 The default arena allocator uses the following functions:
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst
index 791cdbb..be6d798 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -60,8 +60,8 @@
    Generic attribute getter function that is meant to be put into a type
    object's ``tp_getattro`` slot.  It looks for a descriptor in the dictionary
    of classes in the object's MRO as well as an attribute in the object's
-   :attr:`__dict__` (if present).  As outlined in :ref:`descriptors`, data
-   descriptors take preference over instance attributes, while non-data
+   :attr:`~object.__dict__` (if present).  As outlined in :ref:`descriptors`,
+   data descriptors take preference over instance attributes, while non-data
    descriptors don't.  Otherwise, an :exc:`AttributeError` is raised.
 
 
@@ -85,8 +85,8 @@
    object's ``tp_setattro`` slot.  It looks for a data descriptor in the
    dictionary of classes in the object's MRO, and if found it takes preference
    over setting the attribute in the instance dictionary. Otherwise, the
-   attribute is set in the object's :attr:`__dict__` (if present).  Otherwise,
-   an :exc:`AttributeError` is raised and ``-1`` is returned.
+   attribute is set in the object's :attr:`~object.__dict__` (if present).
+   Otherwise, an :exc:`AttributeError` is raised and ``-1`` is returned.
 
 
 .. c:function:: int PyObject_DelAttr(PyObject *o, PyObject *attr_name)
@@ -189,9 +189,9 @@
    be done against every entry in *cls*. The result will be ``1`` when at least one
    of the checks returns ``1``, otherwise it will be ``0``. If *inst* is not a
    class instance and *cls* is neither a type object, nor a class object, nor a
-   tuple, *inst* must have a :attr:`__class__` attribute --- the class relationship
-   of the value of that attribute with *cls* will be used to determine the result
-   of this function.
+   tuple, *inst* must have a :attr:`~instance.__class__` attribute --- the
+   class relationship of the value of that attribute with *cls* will be used
+   to determine the result of this function.
 
 
 Subclass determination is done in a fairly straightforward way, but includes a
@@ -201,9 +201,9 @@
 either is not a class object, a more general mechanism is used to determine the
 class relationship of the two objects.  When testing if *B* is a subclass of
 *A*, if *A* is *B*, :c:func:`PyObject_IsSubclass` returns true.  If *A* and *B*
-are different objects, *B*'s :attr:`__bases__` attribute is searched in a
-depth-first fashion for *A* --- the presence of the :attr:`__bases__` attribute
-is considered sufficient for this determination.
+are different objects, *B*'s :attr:`~class.__bases__` attribute is searched in
+a depth-first fashion for *A* --- the presence of the :attr:`~class.__bases__`
+attribute is considered sufficient for this determination.
 
 
 .. c:function:: int PyObject_IsSubclass(PyObject *derived, PyObject *cls)
diff --git a/Doc/c-api/set.rst b/Doc/c-api/set.rst
index 5f0ef90..7f4d534 100644
--- a/Doc/c-api/set.rst
+++ b/Doc/c-api/set.rst
@@ -140,7 +140,7 @@
 
    Return 1 if found and removed, 0 if not found (no action taken), and -1 if an
    error is encountered.  Does not raise :exc:`KeyError` for missing keys.  Raise a
-   :exc:`TypeError` if the *key* is unhashable.  Unlike the Python :meth:`discard`
+   :exc:`TypeError` if the *key* is unhashable.  Unlike the Python :meth:`~set.discard`
    method, this function does not automatically convert unhashable sets into
    temporary frozensets. Raise :exc:`PyExc_SystemError` if *set* is an not an
    instance of :class:`set` or its subtype.
diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst
index a7c9ef9..063f856 100644
--- a/Doc/c-api/stable.rst
+++ b/Doc/c-api/stable.rst
@@ -6,36 +6,33 @@
 Stable Application Binary Interface
 ***********************************
 
-Traditionally, the C API of Python will change with every release.
-Most changes will be source-compatible, typically by only adding API,
-rather than changing existing API or removing API (although some
-interfaces do get removed after being deprecated first).
+Traditionally, the C API of Python will change with every release.  Most changes
+will be source-compatible, typically by only adding API, rather than changing
+existing API or removing API (although some interfaces do get removed after
+being deprecated first).
 
-Unfortunately, the API compatibility does not extend to binary
-compatibility (the ABI). The reason is primarily the evolution of
-struct definitions, where addition of a new field, or changing
-the type of a field, might not break the API, but can break the ABI.
-As a consequence, extension modules need to be recompiled for
-every Python release (although an exception is possible on Unix
-when none of the affected interfaces are used). In addition, on
-Windows, extension modules link with a specific pythonXY.dll and
-need to be recompiled to link with a newer one.
+Unfortunately, the API compatibility does not extend to binary compatibility
+(the ABI). The reason is primarily the evolution of struct definitions, where
+addition of a new field, or changing the type of a field, might not break the
+API, but can break the ABI.  As a consequence, extension modules need to be
+recompiled for every Python release (although an exception is possible on Unix
+when none of the affected interfaces are used). In addition, on Windows,
+extension modules link with a specific pythonXY.dll and need to be recompiled to
+link with a newer one.
 
-Since Python 3.2, a subset of the API has been declared to guarantee
-a stable ABI. Extension modules wishing to use this API need to define
-``Py_LIMITED_API``. A number of interpreter details then become hidden
-from the extension module; in return, a module is built that works
-on any 3.x version (x>=2) without recompilation.
+Since Python 3.2, a subset of the API has been declared to guarantee a stable
+ABI. Extension modules wishing to use this API (called "limited API") need to
+define ``Py_LIMITED_API``. A number of interpreter details then become hidden
+from the extension module; in return, a module is built that works on any 3.x
+version (x>=2) without recompilation.
 
 In some cases, the stable ABI needs to be extended with new functions.
-Extension modules wishing to use these new APIs need to set
-``Py_LIMITED_API`` to the ``PY_VERSION_HEX`` value (see
-:ref:`apiabiversion`) of the minimum Python version they want to
-support (e.g. ``0x03030000`` for Python 3.3). Such modules will work
-on all subsequent Python releases, but fail to load (because of
+Extension modules wishing to use these new APIs need to set ``Py_LIMITED_API``
+to the ``PY_VERSION_HEX`` value (see :ref:`apiabiversion`) of the minimum Python
+version they want to support (e.g. ``0x03030000`` for Python 3.3). Such modules
+will work on all subsequent Python releases, but fail to load (because of
 missing symbols) on the older releases.
 
-As of Python 3.2, the set of functions available to the limited API
-is documented in PEP 384.
-
-.. XXX copy exact list here? Into each functions definition?
+As of Python 3.2, the set of functions available to the limited API is
+documented in PEP 384.  In the C API documentation, API elements that are not
+part of the limited API are marked as "Not part of the limited API."
diff --git a/Doc/c-api/tuple.rst b/Doc/c-api/tuple.rst
index 3cbfe5b..184affb 100644
--- a/Doc/c-api/tuple.rst
+++ b/Doc/c-api/tuple.rst
@@ -108,3 +108,103 @@
 .. c:function:: int PyTuple_ClearFreeList()
 
    Clear the free list. Return the total number of freed items.
+
+
+Struct Sequence Objects
+-----------------------
+
+Struct sequence objects are the C equivalent of :func:`~collections.namedtuple`
+objects, i.e. a sequence whose items can also be accessed through attributes.
+To create a struct sequence, you first have to create a specific struct sequence
+type.
+
+.. c:function:: PyTypeObject* PyStructSequence_NewType(PyStructSequence_Desc *desc)
+
+   Create a new struct sequence type from the data in *desc*, described below. Instances
+   of the resulting type can be created with :c:func:`PyStructSequence_New`.
+
+
+.. c:function:: void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
+
+   Initializes a struct sequence type *type* from *desc* in place.
+
+
+.. c:type:: PyStructSequence_Desc
+
+   Contains the meta information of a struct sequence type to create.
+
+   +-------------------+------------------------------+------------------------------------+
+   | Field             | C Type                       | Meaning                            |
+   +===================+==============================+====================================+
+   | ``name``          | ``char *``                   | name of the struct sequence type   |
+   +-------------------+------------------------------+------------------------------------+
+   | ``doc``           | ``char *``                   | pointer to docstring for the type  |
+   |                   |                              | or NULL to omit                    |
+   +-------------------+------------------------------+------------------------------------+
+   | ``fields``        | ``PyStructSequence_Field *`` | pointer to *NULL*-terminated array |
+   |                   |                              | with field names of the new type   |
+   +-------------------+------------------------------+------------------------------------+
+   | ``n_in_sequence`` | ``int``                      | number of fields visible to the    |
+   |                   |                              | Python side (if used as tuple)     |
+   +-------------------+------------------------------+------------------------------------+
+
+
+.. c:type:: PyStructSequence_Field
+
+   Describes a field of a struct sequence. As a struct sequence is modeled as a
+   tuple, all fields are typed as :c:type:`PyObject\*`.  The index in the
+   :attr:`fields` array of the :c:type:`PyStructSequence_Desc` determines which
+   field of the struct sequence is described.
+
+   +-----------+---------------+--------------------------------------+
+   | Field     | C Type        | Meaning                              |
+   +===========+===============+======================================+
+   | ``name``  | ``char *``    | name for the field or *NULL* to end  |
+   |           |               | the list of named fields, set to     |
+   |           |               | PyStructSequence_UnnamedField to     |
+   |           |               | leave unnamed                        |
+   +-----------+---------------+--------------------------------------+
+   | ``doc``   | ``char *``    | field docstring or *NULL* to omit    |
+   +-----------+---------------+--------------------------------------+
+
+
+.. c:var:: char* PyStructSequence_UnnamedField
+
+   Special value for a field name to leave it unnamed.
+
+
+.. c:function:: PyObject* PyStructSequence_New(PyTypeObject *type)
+
+   Creates an instance of *type*, which must have been created with
+   :c:func:`PyStructSequence_NewType`.
+
+
+.. c:function:: PyObject* PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
+
+   Return the object at position *pos* in the struct sequence pointed to by *p*.
+   No bounds checking is performed.
+
+
+.. c:function:: PyObject* PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
+
+   Macro equivalent of :c:func:`PyStructSequence_GetItem`.
+
+
+.. c:function:: void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
+
+   Sets the field at index *pos* of the struct sequence *p* to value *o*.  Like
+   :c:func:`PyTuple_SET_ITEM`, this should only be used to fill in brand new
+   instances.
+
+   .. note::
+
+      This function "steals" a reference to *o*.
+
+
+.. c:function:: PyObject* PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)
+
+   Macro equivalent of :c:func:`PyStructSequence_SetItem`.
+
+   .. note::
+
+      This function "steals" a reference to *o*.
diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst
index 8e8af24..48b13e5 100644
--- a/Doc/c-api/typeobj.rst
+++ b/Doc/c-api/typeobj.rst
@@ -510,7 +510,7 @@
 
    On the other hand, even if you know a member can never be part of a cycle, as a
    debugging aid you may want to visit it anyway just so the :mod:`gc` module's
-   :func:`get_referents` function will include it.
+   :func:`~gc.get_referents` function will include it.
 
    Note that :c:func:`Py_VISIT` requires the *visit* and *arg* parameters to
    :c:func:`local_traverse` to have these specific names; don't name them just
@@ -635,7 +635,7 @@
    reference list head than the base type.  Since the list head is always found via
    :c:member:`~PyTypeObject.tp_weaklistoffset`, this should not be a problem.
 
-   When a type defined by a class statement has no :attr:`__slots__` declaration,
+   When a type defined by a class statement has no :attr:`~object.__slots__` declaration,
    and none of its base types are weakly referenceable, the type is made weakly
    referenceable by adding a weak reference list head slot to the instance layout
    and setting the :c:member:`~PyTypeObject.tp_weaklistoffset` of that slot's offset.
@@ -825,7 +825,7 @@
    dictionary at a difference offset than the base type.  Since the dictionary is
    always found via :c:member:`~PyTypeObject.tp_dictoffset`, this should not be a problem.
 
-   When a type defined by a class statement has no :attr:`__slots__` declaration,
+   When a type defined by a class statement has no :attr:`~object.__slots__` declaration,
    and none of its base types has an instance variable dictionary, a dictionary
    slot is added to the instance layout and the :c:member:`~PyTypeObject.tp_dictoffset` is set to
    that slot's offset.
@@ -833,7 +833,7 @@
    When a type defined by a class statement has a :attr:`__slots__` declaration,
    the type inherits its :c:member:`~PyTypeObject.tp_dictoffset` from its base type.
 
-   (Adding a slot named :attr:`__dict__` to the :attr:`__slots__` declaration does
+   (Adding a slot named :attr:`~object.__dict__` to the :attr:`__slots__` declaration does
    not have the expected effect, it just causes confusion.  Maybe this should be
    added as a feature just like :attr:`__weakref__` though.)
 
diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst
index 216088e..c7ed5e5 100644
--- a/Doc/c-api/unicode.rst
+++ b/Doc/c-api/unicode.rst
@@ -978,7 +978,7 @@
 
    Create a Unicode object by decoding *size* bytes of the encoded string *s*.
    *encoding* and *errors* have the same meaning as the parameters of the same name
-   in the :func:`unicode` built-in function.  The codec to be used is looked up
+   in the :func:`str` built-in function.  The codec to be used is looked up
    using the Python codec registry.  Return *NULL* if an exception was raised by
    the codec.
 
@@ -988,7 +988,7 @@
 
    Encode a Unicode object and return the result as Python bytes object.
    *encoding* and *errors* have the same meaning as the parameters of the same
-   name in the Unicode :meth:`encode` method. The codec to be used is looked up
+   name in the Unicode :meth:`~str.encode` method. The codec to be used is looked up
    using the Python codec registry. Return *NULL* if an exception was raised by
    the codec.
 
@@ -998,7 +998,7 @@
 
    Encode the :c:type:`Py_UNICODE` buffer *s* of the given *size* and return a Python
    bytes object.  *encoding* and *errors* have the same meaning as the
-   parameters of the same name in the Unicode :meth:`encode` method.  The codec
+   parameters of the same name in the Unicode :meth:`~str.encode` method.  The codec
    to be used is looked up using the Python codec registry.  Return *NULL* if an
    exception was raised by the codec.
 
diff --git a/Doc/c-api/veryhigh.rst b/Doc/c-api/veryhigh.rst
index eef7951..9f21b89 100644
--- a/Doc/c-api/veryhigh.rst
+++ b/Doc/c-api/veryhigh.rst
@@ -155,7 +155,7 @@
    Python source code.
 
 
-.. c:var:: char* (*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, char *)
+.. c:var:: char* (*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *)
 
    Can be set to point to a function with the prototype
    ``char *func(FILE *stdin, FILE *stdout, char *prompt)``,
@@ -166,6 +166,14 @@
    resulting string.  For example, The :mod:`readline` module sets
    this hook to provide line-editing and tab-completion features.
 
+   The result must be a string allocated by :c:func:`PyMem_RawMalloc` or
+   :c:func:`PyMem_RawRealloc`, or *NULL* if an error occurred.
+
+   .. versionchanged:: 3.4
+      The result must be allocated by :c:func:`PyMem_RawMalloc` or
+      :c:func:`PyMem_RawRealloc`, instead of being allocated by
+      :c:func:`PyMem_Malloc` or :c:func:`PyMem_Realloc`.
+
 
 .. c:function:: struct _node* PyParser_SimpleParseString(const char *str, int start)
 
@@ -312,7 +320,7 @@
    frame *f* is executed, interpreting bytecode and executing calls as needed.
    The additional *throwflag* parameter can mostly be ignored - if true, then
    it causes an exception to immediately be thrown; this is used for the
-   :meth:`throw` methods of generator objects.
+   :meth:`~generator.throw` methods of generator objects.
 
 
 .. c:function:: int PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
diff --git a/Doc/conf.py b/Doc/conf.py
index 6b085e0..5b63cad 100644
--- a/Doc/conf.py
+++ b/Doc/conf.py
@@ -12,8 +12,8 @@
 # General configuration
 # ---------------------
 
-extensions = ['sphinx.ext.refcounting', 'sphinx.ext.coverage',
-              'sphinx.ext.doctest', 'pyspecific']
+extensions = ['sphinx.ext.coverage', 'sphinx.ext.doctest',
+              'pyspecific', 'c_annotations']
 templates_path = ['tools/sphinxext']
 
 # General substitutions.
diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat
index 83f23eb..814c3b0 100644
--- a/Doc/data/refcounts.dat
+++ b/Doc/data/refcounts.dat
@@ -508,13 +508,13 @@
 PyImport_Cleanup:void:::
 
 PyImport_ExecCodeModule:PyObject*::+1:
-PyImport_ExecCodeModule:char*:name::
+PyImport_ExecCodeModule:const char*:name::
 PyImport_ExecCodeModule:PyObject*:co:0:
 
 PyImport_ExecCodeModuleEx:PyObject*::+1:
-PyImport_ExecCodeModuleEx:char*:name::
+PyImport_ExecCodeModuleEx:const char*:name::
 PyImport_ExecCodeModuleEx:PyObject*:co:0:
-PyImport_ExecCodeModuleEx:char*:pathname::
+PyImport_ExecCodeModuleEx:const char*:pathname::
 
 PyImport_GetMagicNumber:long:::
 
@@ -524,7 +524,7 @@
 PyImport_Import:PyObject*:name:0:
 
 PyImport_ImportFrozenModule:int:::
-PyImport_ImportFrozenModule:char*:::
+PyImport_ImportFrozenModule:const char*:::
 
 PyImport_ImportModule:PyObject*::+1:
 PyImport_ImportModule:const char*:name::
@@ -673,7 +673,7 @@
 PyLong_FromUnsignedLongLong:unsigned long long:v::
 
 PyLong_FromString:PyObject*::+1:
-PyLong_FromString:char*:str::
+PyLong_FromString:const char*:str::
 PyLong_FromString:char**:pend::
 PyLong_FromString:int:base::
 
@@ -701,7 +701,7 @@
 
 PyMapping_GetItemString:PyObject*::+1:
 PyMapping_GetItemString:PyObject*:o:0:
-PyMapping_GetItemString:char*:key::
+PyMapping_GetItemString:const char*:key::
 
 PyMapping_HasKey:int:::
 PyMapping_HasKey:PyObject*:o:0:
@@ -709,7 +709,7 @@
 
 PyMapping_HasKeyString:int:::
 PyMapping_HasKeyString:PyObject*:o:0:
-PyMapping_HasKeyString:char*:key::
+PyMapping_HasKeyString:const char*:key::
 
 PyMapping_Items:PyObject*::+1:
 PyMapping_Items:PyObject*:o:0:
@@ -722,7 +722,7 @@
 
 PyMapping_SetItemString:int:::
 PyMapping_SetItemString:PyObject*:o:0:
-PyMapping_SetItemString:char*:key::
+PyMapping_SetItemString:const char*:key::
 PyMapping_SetItemString:PyObject*:v:+1:
 
 PyMapping_Values:PyObject*::+1:
@@ -735,7 +735,7 @@
 PyMarshal_ReadObjectFromFile:FILE*:file::
 
 PyMarshal_ReadObjectFromString:PyObject*::+1:
-PyMarshal_ReadObjectFromString:char*:string::
+PyMarshal_ReadObjectFromString:const char*:string::
 PyMarshal_ReadObjectFromString:int:len::
 
 PyMarshal_WriteObjectToString:PyObject*::+1:
diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst
index c323775..54f0a4e 100644
--- a/Doc/distutils/apiref.rst
+++ b/Doc/distutils/apiref.rst
@@ -734,7 +734,7 @@
 
    .. method:: CCompiler.execute(func, args[, msg=None, level=1])
 
-      Invokes :func:`distutils.util.execute` This method invokes a  Python function
+      Invokes :func:`distutils.util.execute`. This method invokes a  Python function
       *func* with the given arguments *args*, after  logging and taking into account
       the *dry_run* flag.
 
@@ -994,8 +994,9 @@
    simply the list of all files under *src*, with the names changed to be under
    *dst*.
 
-   *preserve_mode* and *preserve_times* are the same as for :func:`copy_file` in
-   :mod:`distutils.file_util`; note that they only apply to regular files, not to
+   *preserve_mode* and *preserve_times* are the same as for
+   :func:`distutils.file_util.copy_file`; note that they only apply to
+   regular files, not to
    directories.  If *preserve_symlinks* is true, symlinks will be copied as
    symlinks (on platforms that support them!); otherwise (the default), the
    destination of the symlink will be copied.  *update* and *verbose* are the same
@@ -1175,7 +1176,7 @@
    Generate a useful error message from an :exc:`OSError` exception object.
    Handles Python 1.5.1 and later styles, and does what it can to deal with
    exception objects that don't have a filename (which happens when the error
-   is due to a two-file operation, such as :func:`rename` or :func:`link`).
+   is due to a two-file operation, such as :func:`~os.rename` or :func:`~os.link`).
    Returns the error message as a string prefixed with *prefix*.
 
 
@@ -1265,8 +1266,8 @@
               built/installed/distributed
 
 
-This module provides the :class:`Distribution` class, which represents the
-module distribution being built/installed/distributed.
+This module provides the :class:`~distutils.core.Distribution` class, which
+represents the module distribution being built/installed/distributed.
 
 
 :mod:`distutils.extension` --- The Extension class
@@ -1712,8 +1713,8 @@
    options, is the :meth:`run` method, which must also be implemented by every
    command class.
 
-   The class constructor takes a single argument *dist*, a :class:`Distribution`
-   instance.
+   The class constructor takes a single argument *dist*, a
+   :class:`~distutils.core.Distribution` instance.
 
 
 Creating a new Distutils command
diff --git a/Doc/distutils/examples.rst b/Doc/distutils/examples.rst
index b268486..5eb654a 100644
--- a/Doc/distutils/examples.rst
+++ b/Doc/distutils/examples.rst
@@ -284,6 +284,48 @@
     warning: check: Title underline too short. (line 2)
     warning: check: Could not finish the parsing.
 
+Reading the metadata
+=====================
+
+The :func:`distutils.core.setup` function provides a command-line interface
+that allows you to query the metadata fields of a project through the
+`setup.py` script of a given project::
+
+    $ python setup.py --name
+    distribute
+
+This call reads the `name` metadata by running the
+:func:`distutils.core.setup`  function. Although, when a source or binary
+distribution is created with Distutils, the metadata fields are written
+in a static file called :file:`PKG-INFO`. When a Distutils-based project is
+installed in Python, the :file:`PKG-INFO` file is copied alongside the modules
+and packages of the distribution under :file:`NAME-VERSION-pyX.X.egg-info`,
+where `NAME` is the name of the project, `VERSION` its version as defined
+in the Metadata, and `pyX.X` the major and minor version of Python like
+`2.7` or `3.2`.
+
+You can read back this static file, by using the
+:class:`distutils.dist.DistributionMetadata` class and its
+:func:`read_pkg_file` method::
+
+    >>> from distutils.dist import DistributionMetadata
+    >>> metadata = DistributionMetadata()
+    >>> metadata.read_pkg_file(open('distribute-0.6.8-py2.7.egg-info'))
+    >>> metadata.name
+    'distribute'
+    >>> metadata.version
+    '0.6.8'
+    >>> metadata.description
+    'Easily download, build, install, upgrade, and uninstall Python packages'
+
+Notice that the class can also be instanciated with a metadata file path to
+loads its values::
+
+    >>> pkg_info_path = 'distribute-0.6.8-py2.7.egg-info'
+    >>> DistributionMetadata(pkg_info_path).name
+    'distribute'
+
+
 .. % \section{Multiple extension modules}
 .. % \label{multiple-ext}
 
diff --git a/Doc/distutils/setupscript.rst b/Doc/distutils/setupscript.rst
index 6ed6fbf..ee96302 100644
--- a/Doc/distutils/setupscript.rst
+++ b/Doc/distutils/setupscript.rst
@@ -139,7 +139,8 @@
 
 All of this is done through another keyword argument to :func:`setup`, the
 :option:`ext_modules` option.  :option:`ext_modules` is just a list of
-:class:`Extension` instances, each of which describes a single extension module.
+:class:`~distutils.core.Extension` instances, each of which describes a
+single extension module.
 Suppose your distribution includes a single extension, called :mod:`foo` and
 implemented by :file:`foo.c`.  If no additional instructions to the
 compiler/linker are needed, describing this extension is quite simple::
@@ -165,8 +166,8 @@
 Extension names and packages
 ----------------------------
 
-The first argument to the :class:`Extension` constructor is always the name of
-the extension, including any package names.  For example, ::
+The first argument to the :class:`~distutils.core.Extension` constructor is
+always the name of the extension, including any package names.  For example, ::
 
     Extension('foo', ['src/foo1.c', 'src/foo2.c'])
 
@@ -196,7 +197,8 @@
 Extension source files
 ----------------------
 
-The second argument to the :class:`Extension` constructor is a list of source
+The second argument to the :class:`~distutils.core.Extension` constructor is
+a list of source
 files.  Since the Distutils currently only support C, C++, and Objective-C
 extensions, these are normally C/C++/Objective-C source files.  (Be sure to use
 appropriate extensions to distinguish C++\ source files: :file:`.cc` and
@@ -232,9 +234,9 @@
 Preprocessor options
 --------------------
 
-Three optional arguments to :class:`Extension` will help if you need to specify
-include directories to search or preprocessor macros to define/undefine:
-``include_dirs``, ``define_macros``, and ``undef_macros``.
+Three optional arguments to :class:`~distutils.core.Extension` will help if
+you need to specify include directories to search or preprocessor macros to
+define/undefine: ``include_dirs``, ``define_macros``, and ``undef_macros``.
 
 For example, if your extension requires header files in the :file:`include`
 directory under your distribution root, use the ``include_dirs`` option::
diff --git a/Doc/extending/building.rst b/Doc/extending/building.rst
index f4d95b2..08b0cc2 100644
--- a/Doc/extending/building.rst
+++ b/Doc/extending/building.rst
@@ -58,8 +58,9 @@
 It is common to pre-compute arguments to :func:`setup`, to better structure the
 driver script. In the example above, the\ ``ext_modules`` argument to
 :func:`setup` is a list of extension modules, each of which is an instance of
-the :class:`Extension`. In the example, the instance defines an extension named
-``demo`` which is build by compiling a single source file, :file:`demo.c`.
+the :class:`~distutils.extension.Extension`. In the example, the instance
+defines an extension named ``demo`` which is build by compiling a single source
+file, :file:`demo.c`.
 
 In many cases, building an extension is more complex, since additional
 preprocessor defines and libraries may be needed. This is demonstrated in the
diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst
index ef95ac9..a3bf265 100644
--- a/Doc/extending/extending.rst
+++ b/Doc/extending/extending.rst
@@ -384,6 +384,8 @@
           imports it. */
        PyImport_ImportModule("spam");
 
+       ...
+
 .. note::
 
    Removing entries from ``sys.modules`` or importing compiled modules into
@@ -515,7 +517,7 @@
 value of the Python function.  :c:func:`PyObject_CallObject` is
 "reference-count-neutral" with respect to its arguments.  In the example a new
 tuple was created to serve as the argument list, which is :c:func:`Py_DECREF`\
--ed immediately after the call.
+-ed immediately after the :c:func:`PyObject_CallObject` call.
 
 The return value of :c:func:`PyObject_CallObject` is "new": either it is a brand
 new object, or it is an existing object whose reference count has been
@@ -717,9 +719,7 @@
               action, voltage);
        printf("-- Lovely plumage, the %s -- It's %s!\n", type, state);
 
-       Py_INCREF(Py_None);
-
-       return Py_None;
+       Py_RETURN_NONE;
    }
 
    static PyMethodDef keywdarg_methods[] = {
@@ -860,9 +860,9 @@
 The cycle detector is able to detect garbage cycles and can reclaim them so long
 as there are no finalizers implemented in Python (:meth:`__del__` methods).
 When there are such finalizers, the detector exposes the cycles through the
-:mod:`gc` module (specifically, the
-``garbage`` variable in that module).  The :mod:`gc` module also exposes a way
-to run the detector (the :func:`collect` function), as well as configuration
+:mod:`gc` module (specifically, the :attr:`~gc.garbage` variable in that module).
+The :mod:`gc` module also exposes a way to run the detector (the
+:func:`~gc.collect` function), as well as configuration
 interfaces and the ability to disable the detector at runtime.  The cycle
 detector is considered an optional component; though it is included by default,
 it can be disabled at build time using the :option:`--without-cycle-gc` option
diff --git a/Doc/extending/index.rst b/Doc/extending/index.rst
index 75cf4c5..6112943 100644
--- a/Doc/extending/index.rst
+++ b/Doc/extending/index.rst
@@ -5,12 +5,12 @@
 ##################################################
 
 This document describes how to write modules in C or C++ to extend the Python
-interpreter with new modules.  Those modules can define new functions but also
-new object types and their methods.  The document also describes how to embed
-the Python interpreter in another application, for use as an extension language.
-Finally, it shows how to compile and link extension modules so that they can be
-loaded dynamically (at run time) into the interpreter, if the underlying
-operating system supports this feature.
+interpreter with new modules.  Those modules can not only define new functions
+but also new object types and their methods.  The document also describes how
+to embed the Python interpreter in another application, for use as an extension
+language.  Finally, it shows how to compile and link extension modules so that
+they can be loaded dynamically (at run time) into the interpreter, if the
+underlying operating system supports this feature.
 
 This document assumes basic knowledge about Python.  For an informal
 introduction to the language, see :ref:`tutorial-index`.  :ref:`reference-index`
diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst
index f981684..45b5721 100644
--- a/Doc/extending/newtypes.rst
+++ b/Doc/extending/newtypes.rst
@@ -137,7 +137,7 @@
    If you want your type to be subclassable from Python, and your type has the same
    :c:member:`~PyTypeObject.tp_basicsize` as its base type, you may have problems with multiple
    inheritance.  A Python subclass of your type will have to list your type first
-   in its :attr:`__bases__`, or else it will not be able to call your type's
+   in its :attr:`~class.__bases__`, or else it will not be able to call your type's
    :meth:`__new__` method without getting an error.  You can avoid this problem by
    ensuring that your type has a larger value for :c:member:`~PyTypeObject.tp_basicsize` than its
    base type does.  Most of the time, this will be true anyway, because either your
diff --git a/Doc/faq/design.rst b/Doc/faq/design.rst
index 724eecf..49e0c6d 100644
--- a/Doc/faq/design.rst
+++ b/Doc/faq/design.rst
@@ -347,20 +347,20 @@
 which has a completely redesigned interpreter loop that avoids the C stack.
 
 
-Why can't lambda forms contain statements?
-------------------------------------------
+Why can't lambda expressions contain statements?
+------------------------------------------------
 
-Python lambda forms cannot contain statements because Python's syntactic
+Python lambda expressions cannot contain statements because Python's syntactic
 framework can't handle statements nested inside expressions.  However, in
 Python, this is not a serious problem.  Unlike lambda forms in other languages,
 where they add functionality, Python lambdas are only a shorthand notation if
 you're too lazy to define a function.
 
 Functions are already first class objects in Python, and can be declared in a
-local scope.  Therefore the only advantage of using a lambda form instead of a
+local scope.  Therefore the only advantage of using a lambda instead of a
 locally-defined function is that you don't need to invent a name for the
 function -- but that's just a local variable to which the function object (which
-is exactly the same type of object that a lambda form yields) is assigned!
+is exactly the same type of object that a lambda expression yields) is assigned!
 
 
 Can Python be compiled to machine code, C or some other language?
@@ -634,7 +634,8 @@
 (ABCs).  You can then use :func:`isinstance` and :func:`issubclass` to check
 whether an instance or a class implements a particular ABC.  The
 :mod:`collections.abc` module defines a set of useful ABCs such as
-:class:`Iterable`, :class:`Container`, and :class:`MutableMapping`.
+:class:`~collections.abc.Iterable`, :class:`~collections.abc.Container`, and
+:class:`~collections.abc.MutableMapping`.
 
 For Python, many of the advantages of interface specifications can be obtained
 by an appropriate test discipline for components.  There is also a tool,
diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst
index bf73935..12f1a2d 100644
--- a/Doc/faq/programming.rst
+++ b/Doc/faq/programming.rst
@@ -1599,6 +1599,32 @@
 keeping a list of weak references to each instance.
 
 
+Why does the result of ``id()`` appear to be not unique?
+--------------------------------------------------------
+
+The :func:`id` builtin returns an integer that is guaranteed to be unique during
+the lifetime of the object.  Since in CPython, this is the object's memory
+address, it happens frequently that after an object is deleted from memory, the
+next freshly created object is allocated at the same position in memory.  This
+is illustrated by this example:
+
+>>> id(1000)
+13901272
+>>> id(2000)
+13901272
+
+The two ids belong to different integer objects that are created before, and
+deleted immediately after execution of the ``id()`` call.  To be sure that
+objects whose id you want to examine are still alive, create another reference
+to the object:
+
+>>> a = 1000; b = 2000
+>>> id(a)
+13901272
+>>> id(b)
+13891296
+
+
 Modules
 =======
 
diff --git a/Doc/glossary.rst b/Doc/glossary.rst
index 0d3a5f5..5fcaa85 100644
--- a/Doc/glossary.rst
+++ b/Doc/glossary.rst
@@ -529,6 +529,8 @@
       have a namespace containing arbitrary Python objects.  Modules are loaded
       into Python by the process of :term:`importing`.
 
+      See also :term:`package`.
+
    MRO
       See :term:`method resolution order`.
 
@@ -554,9 +556,9 @@
       dictionaries.  There are the local, global and built-in namespaces as well
       as nested namespaces in objects (in methods).  Namespaces support
       modularity by preventing naming conflicts.  For instance, the functions
-      :func:`builtins.open` and :func:`os.open` are distinguished by their
-      namespaces.  Namespaces also aid readability and maintainability by making
-      it clear which module implements a function.  For instance, writing
+      :func:`builtins.open <.open>` and :func:`os.open` are distinguished by
+      their namespaces.  Namespaces also aid readability and maintainability by
+      making it clear which module implements a function.  For instance, writing
       :func:`random.seed` or :func:`itertools.islice` makes it clear that those
       functions are implemented by the :mod:`random` and :mod:`itertools`
       modules, respectively.
@@ -567,6 +569,8 @@
       and specifically are not like a :term:`regular package` because they
       have no ``__init__.py`` file.
 
+      See also :term:`module`.
+
    nested scope
       The ability to refer to a variable in an enclosing definition.  For
       instance, a function defined inside another function can refer to
@@ -579,8 +583,8 @@
    new-style class
       Old name for the flavor of classes now used for all class objects.  In
       earlier Python versions, only new-style classes could use Python's newer,
-      versatile features like :attr:`__slots__`, descriptors, properties,
-      :meth:`__getattribute__`, class methods, and static methods.
+      versatile features like :attr:`~object.__slots__`, descriptors,
+      properties, :meth:`__getattribute__`, class methods, and static methods.
 
    object
       Any data with state (attributes or value) and defined behavior
@@ -588,10 +592,12 @@
       class`.
 
    package
-      A Python module which can contain submodules or recursively,
+      A Python :term:`module` which can contain submodules or recursively,
       subpackages.  Technically, a package is a Python module with an
       ``__path__`` attribute.
 
+      See also :term:`regular package` and :term:`namespace package`.
+
    parameter
       A named entity in a :term:`function` (or method) definition that
       specifies an :term:`argument` (or in some cases, arguments) that the
@@ -664,20 +670,27 @@
    positional argument
       See :term:`argument`.
 
-   provisional package
-      A provisional package is one which has been deliberately excluded from
+   provisional API
+      A provisional API is one which has been deliberately excluded from
       the standard library's backwards compatibility guarantees.  While major
-      changes to such packages are not expected, as long as they are marked
+      changes to such interfaces are not expected, as long as they are marked
       provisional, backwards incompatible changes (up to and including removal
-      of the package) may occur if deemed necessary by core developers.  Such
+      of the interface) may occur if deemed necessary by core developers.  Such
       changes will not be made gratuitously -- they will occur only if serious
-      flaws are uncovered that were missed prior to the inclusion of the
-      package.
+      fundamental flaws are uncovered that were missed prior to the inclusion
+      of the API.
+
+      Even for provisional APIs, backwards incompatible changes are seen as
+      a "solution of last resort" - every attempt will still be made to find
+      a backwards compatible resolution to any identified problems.
 
       This process allows the standard library to continue to evolve over
       time, without locking in problematic design errors for extended periods
       of time.  See :pep:`411` for more details.
 
+   provisional package
+      See :term:`provisional API`.
+
    Python 3000
       Nickname for the Python 3.x release line (coined long ago when the
       release of version 3 was something in the distant future.)  This is also
@@ -737,6 +750,8 @@
       A traditional :term:`package`, such as a directory containing an
       ``__init__.py`` file.
 
+      See also :term:`namespace package`.
+
    __slots__
       A declaration inside a class that saves memory by pre-declaring space for
       instance attributes and eliminating instance dictionaries.  Though
@@ -772,7 +787,7 @@
 
    statement
       A statement is part of a suite (a "block" of code).  A statement is either
-      an :term:`expression` or a one of several constructs with a keyword, such
+      an :term:`expression` or one of several constructs with a keyword, such
       as :keyword:`if`, :keyword:`while` or :keyword:`for`.
 
    struct sequence
@@ -795,7 +810,8 @@
    type
       The type of a Python object determines what kind of object it is; every
       object has a type.  An object's type is accessible as its
-      :attr:`__class__` attribute or can be retrieved with ``type(obj)``.
+      :attr:`~instance.__class__` attribute or can be retrieved with
+      ``type(obj)``.
 
    universal newlines
       A manner of interpreting text streams in which all of the following are
diff --git a/Doc/howto/argparse.rst b/Doc/howto/argparse.rst
index deaee50..510d1d4 100644
--- a/Doc/howto/argparse.rst
+++ b/Doc/howto/argparse.rst
@@ -63,7 +63,7 @@
 
 * That's a snippet of the help text. It's very useful in that you can
   come across a program you have never used before, and can figure out
-  how it works simply by reading it's help text.
+  how it works simply by reading its help text.
 
 
 The basics
diff --git a/Doc/howto/curses.rst b/Doc/howto/curses.rst
index ce1f441..c85b318 100644
--- a/Doc/howto/curses.rst
+++ b/Doc/howto/curses.rst
@@ -122,8 +122,9 @@
    stdscr.keypad(False)
    curses.echo()
 
-to reverse the curses-friendly terminal settings. Then call the :func:`endwin`
-function to restore the terminal to its original operating mode. ::
+to reverse the curses-friendly terminal settings. Then call the
+:func:`~curses.endwin` function to restore the terminal to its original
+operating mode. ::
 
    curses.endwin()
 
@@ -143,7 +144,7 @@
        stdscr.clear()
 
        # This raises ZeroDivisionError when i == 10.
-       for i in range(0, 10):
+       for i in range(0, 11):
            v = i-10
            stdscr.addstr(i, 0, '10 divided by {} is {}'.format(v, 10/v))
 
@@ -152,7 +153,7 @@
 
    wrapper(main)
 
-The :func:`wrapper` function takes a callable object and does the
+The :func:`~curses.wrapper` function takes a callable object and does the
 initializations described above, also initializing colors if color
 support is present.  :func:`wrapper` then runs your provided callable.
 Once the callable returns, :func:`wrapper` will restore the original
@@ -170,15 +171,15 @@
 rectangular area of the screen, and supports methods to display text,
 erase it, allow the user to input strings, and so forth.
 
-The ``stdscr`` object returned by the :func:`initscr` function is a
+The ``stdscr`` object returned by the :func:`~curses.initscr` function is a
 window object that covers the entire screen.  Many programs may need
 only this single window, but you might wish to divide the screen into
 smaller windows, in order to redraw or clear them separately. The
 :func:`~curses.newwin` function creates a new window of a given size,
 returning the new window object. ::
 
-   begin_x = 20 ; begin_y = 7
-   height = 5 ; width = 40
+   begin_x = 20; begin_y = 7
+   height = 5; width = 40
    win = curses.newwin(height, width, begin_y, begin_x)
 
 Note that the coordinate system used in curses is unusual.
@@ -227,7 +228,7 @@
    # explained in the next section
    for y in range(0, 99):
        for x in range(0, 99):
-           pad.addch(y,x, ord('a') + (x*x+y*y) % 26 )
+           pad.addch(y,x, ord('a') + (x*x+y*y) % 26)
 
    # Displays a section of the pad in the middle of the screen.
    # (0,0) : coordinate of upper-left corner of pad area to display.
@@ -267,14 +268,14 @@
 :c:func:`addstr` displays a string at the current cursor location in
 the ``stdscr`` window, while :c:func:`mvaddstr` moves to a given y,x
 coordinate first before displaying the string. :c:func:`waddstr` is just
-like :func:`addstr`, but allows specifying a window to use instead of
+like :c:func:`addstr`, but allows specifying a window to use instead of
 using ``stdscr`` by default. :c:func:`mvwaddstr` allows specifying both
 a window and a coordinate.
 
 Fortunately the Python interface hides all these details.  ``stdscr``
-is a window object like any other, and methods such as :meth:`addstr`
-accept multiple argument forms.  Usually there are four different
-forms.
+is a window object like any other, and methods such as
+:meth:`~curses.window.addstr` accept multiple argument forms.  Usually there
+are four different forms.
 
 +---------------------------------+-----------------------------------------------+
 | Form                            | Description                                   |
@@ -325,7 +326,7 @@
 If your application doesn't need a blinking cursor at all, you can
 call ``curs_set(False)`` to make it invisible.  For compatibility
 with older curses versions, there's a ``leaveok(bool)`` function
-that's a synonym for :func:`curs_set`.  When *bool* is true, the
+that's a synonym for :func:`~curses.curs_set`.  When *bool* is true, the
 curses library will attempt to suppress the flashing cursor, and you
 won't need to worry about leaving it in odd locations.
 
@@ -372,10 +373,11 @@
 most common such terminal is probably the Linux console, followed by color
 xterms.
 
-To use color, you must call the :func:`start_color` function soon after calling
-:func:`initscr`, to initialize the default color set (the
-:func:`curses.wrapper` function does this automatically).  Once that's
-done, the :func:`has_colors` function returns TRUE if the terminal in use can
+To use color, you must call the :func:`~curses.start_color` function soon
+after calling :func:`~curses.initscr`, to initialize the default color set
+(the :func:`curses.wrapper` function does this automatically).  Once that's
+done, the :func:`~curses.has_colors` function returns TRUE if the terminal
+in use can
 actually display color.  (Note: curses uses the American spelling 'color',
 instead of the Canadian/British spelling 'colour'.  If you're used to the
 British spelling, you'll have to resign yourself to misspelling it for the sake
@@ -383,13 +385,14 @@
 
 The curses library maintains a finite number of color pairs, containing a
 foreground (or text) color and a background color.  You can get the attribute
-value corresponding to a color pair with the :func:`color_pair` function; this
-can be bitwise-OR'ed with other attributes such as :const:`A_REVERSE`, but
-again, such combinations are not guaranteed to work on all terminals.
+value corresponding to a color pair with the :func:`~curses.color_pair`
+function; this can be bitwise-OR'ed with other attributes such as
+:const:`A_REVERSE`, but again, such combinations are not guaranteed to work
+on all terminals.
 
 An example, which displays a line of text using color pair 1::
 
-   stdscr.addstr( "Pretty text", curses.color_pair(1) )
+   stdscr.addstr("Pretty text", curses.color_pair(1))
    stdscr.refresh()
 
 As I said before, a color pair consists of a foreground and background color.
@@ -412,15 +415,16 @@
 will change to the new colors.  You can also display new text in this color
 with::
 
-   stdscr.addstr(0,0, "RED ALERT!", curses.color_pair(1) )
+   stdscr.addstr(0,0, "RED ALERT!", curses.color_pair(1))
 
 Very fancy terminals can change the definitions of the actual colors to a given
 RGB value.  This lets you change color 1, which is usually red, to purple or
 blue or any other color you like.  Unfortunately, the Linux console doesn't
 support this, so I'm unable to try it out, and can't provide any examples.  You
-can check if your terminal can do this by calling :func:`can_change_color`,
-which returns True if the capability is there.  If you're lucky enough to have
-such a talented terminal, consult your system's man pages for more information.
+can check if your terminal can do this by calling
+:func:`~curses.can_change_color`, which returns True if the capability is
+there.  If you're lucky enough to have such a talented terminal, consult your
+system's man pages for more information.
 
 
 User Input
@@ -434,7 +438,7 @@
 There are two methods for getting input from a window:
 
 * :meth:`~curses.window.getch` refreshes the screen and then waits for
-  the user to hit a key, displaying the key if :func:`echo` has been
+  the user to hit a key, displaying the key if :func:`~curses.echo` has been
   called earlier.  You can optionally specify a coordinate to which
   the cursor should be moved before pausing.
 
diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst
index cc1b78d..a0c6988 100644
--- a/Doc/howto/descriptor.rst
+++ b/Doc/howto/descriptor.rst
@@ -119,7 +119,7 @@
 The object returned by ``super()`` also has a custom :meth:`__getattribute__`
 method for invoking descriptors.  The call ``super(B, obj).m()`` searches
 ``obj.__class__.__mro__`` for the base class ``A`` immediately following ``B``
-and then returns ``A.__dict__['m'].__get__(obj, A)``.  If not a descriptor,
+and then returns ``A.__dict__['m'].__get__(obj, B)``.  If not a descriptor,
 ``m`` is returned unchanged.  If not in the dictionary, ``m`` reverts to a
 search using :meth:`object.__getattribute__`.
 
diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst
index 1ad3c25..aa5b43e 100644
--- a/Doc/howto/logging-cookbook.rst
+++ b/Doc/howto/logging-cookbook.rst
@@ -1692,3 +1692,138 @@
 Note that the order of items might be different according to the version of
 Python used.
 
+.. currentmodule:: logging.config
+
+Customising handlers with :func:`dictConfig`
+--------------------------------------------
+
+There are times when you want to customise logging handlers in particular ways,
+and if you use :func:`dictConfig` you may be able to do this without
+subclassing. As an example, consider that you may want to set the ownership of a
+log file. On POSIX, this is easily done using :func:`shutil.chown`, but the file
+handlers in the stdlib don't offer built-in support. You can customise handler
+creation using a plain function such as::
+
+    def owned_file_handler(filename, mode='a', encoding=None, owner=None):
+        if owner:
+            if not os.path.exists(filename):
+                open(filename, 'a').close()
+            shutil.chown(filename, *owner)
+        return logging.FileHandler(filename, mode, encoding)
+
+You can then specify, in a logging configuration passed to :func:`dictConfig`,
+that a logging handler be created by calling this function::
+
+    LOGGING = {
+        'version': 1,
+        'disable_existing_loggers': False,
+        'formatters': {
+            'default': {
+                'format': '%(asctime)s %(levelname)s %(name)s %(message)s'
+            },
+        },
+        'handlers': {
+            'file':{
+                # The values below are popped from this dictionary and
+                # used to create the handler, set the handler's level and
+                # its formatter.
+                '()': owned_file_handler,
+                'level':'DEBUG',
+                'formatter': 'default',
+                # The values below are passed to the handler creator callable
+                # as keyword arguments.
+                'owner': ['pulse', 'pulse'],
+                'filename': 'chowntest.log',
+                'mode': 'w',
+                'encoding': 'utf-8',
+            },
+        },
+        'root': {
+            'handlers': ['file'],
+            'level': 'DEBUG',
+        },
+    }
+
+In this example I am setting the ownership using the ``pulse`` user and group,
+just for the purposes of illustration. Putting it together into a working
+script, ``chowntest.py``::
+
+    import logging, logging.config, os, shutil
+
+    def owned_file_handler(filename, mode='a', encoding=None, owner=None):
+        if owner:
+            if not os.path.exists(filename):
+                open(filename, 'a').close()
+            shutil.chown(filename, *owner)
+        return logging.FileHandler(filename, mode, encoding)
+
+    LOGGING = {
+        'version': 1,
+        'disable_existing_loggers': False,
+        'formatters': {
+            'default': {
+                'format': '%(asctime)s %(levelname)s %(name)s %(message)s'
+            },
+        },
+        'handlers': {
+            'file':{
+                # The values below are popped from this dictionary and
+                # used to create the handler, set the handler's level and
+                # its formatter.
+                '()': owned_file_handler,
+                'level':'DEBUG',
+                'formatter': 'default',
+                # The values below are passed to the handler creator callable
+                # as keyword arguments.
+                'owner': ['pulse', 'pulse'],
+                'filename': 'chowntest.log',
+                'mode': 'w',
+                'encoding': 'utf-8',
+            },
+        },
+        'root': {
+            'handlers': ['file'],
+            'level': 'DEBUG',
+        },
+    }
+
+    logging.config.dictConfig(LOGGING)
+    logger = logging.getLogger('mylogger')
+    logger.debug('A debug message')
+
+To run this, you will probably need to run as ``root``::
+
+    $ sudo python3.3 chowntest.py
+    $ cat chowntest.log
+    2013-11-05 09:34:51,128 DEBUG mylogger A debug message
+    $ ls -l chowntest.log
+    -rw-r--r-- 1 pulse pulse 55 2013-11-05 09:34 chowntest.log
+
+Note that this example uses Python 3.3 because that's where :func:`shutil.chown`
+makes an appearance. This approach should work with any Python version that
+supports :func:`dictConfig` - namely, Python 2.7, 3.2 or later. With pre-3.3
+versions, you would need to implement the actual ownership change using e.g.
+:func:`os.chown`.
+
+In practice, the handler-creating function may be in a utility module somewhere
+in your project. Instead of the line in the configuration::
+
+    '()': owned_file_handler,
+
+you could use e.g.::
+
+    '()': 'ext://project.util.owned_file_handler',
+
+where ``project.util`` can be replaced with the actual name of the package
+where the function resides. In the above working script, using
+``'ext://__main__.owned_file_handler'`` should work. Here, the actual callable
+is resolved by :func:`dictConfig` from the ``ext://`` specification.
+
+This example hopefully also points the way to how you could implement other
+types of file change - e.g. setting specific POSIX permission bits - in the
+same way, using :func:`os.chmod`.
+
+Of course, the approach could also be extended to types of handler other than a
+:class:`~logging.FileHandler` - for example, one of the rotating file handlers,
+or a different type of handler altogether.
+
diff --git a/Doc/howto/unicode.rst b/Doc/howto/unicode.rst
index f19cfc3..9d48a78 100644
--- a/Doc/howto/unicode.rst
+++ b/Doc/howto/unicode.rst
@@ -514,7 +514,7 @@
 
 Unicode data is usually converted to a particular encoding before it gets
 written to disk or sent over a socket.  It's possible to do all the work
-yourself: open a file, read an 8-bit bytes object from it, and convert the string
+yourself: open a file, read an 8-bit bytes object from it, and convert the bytes
 with ``bytes.decode(encoding)``.  However, the manual approach is not recommended.
 
 One problem is the multi-byte nature of encodings; one Unicode character can be
@@ -531,13 +531,14 @@
 of partial coding sequences.  The work of implementing this has already been
 done for you: the built-in :func:`open` function can return a file-like object
 that assumes the file's contents are in a specified encoding and accepts Unicode
-parameters for methods such as :meth:`read` and :meth:`write`.  This works through
-:func:`open`\'s *encoding* and *errors* parameters which are interpreted just
-like those in :meth:`str.encode` and :meth:`bytes.decode`.
+parameters for methods such as :meth:`~io.TextIOBase.read` and
+:meth:`~io.TextIOBase.write`.  This works through :func:`open`\'s *encoding* and
+*errors* parameters which are interpreted just like those in :meth:`str.encode`
+and :meth:`bytes.decode`.
 
 Reading Unicode from a file is therefore simple::
 
-    with open('unicode.rst', encoding='utf-8') as f:
+    with open('unicode.txt', encoding='utf-8') as f:
         for line in f:
             print(repr(line))
 
@@ -656,7 +657,8 @@
 and behaving like a stream returning data in encoding #2.
 
 For example, if you have an input file *f* that's in Latin-1, you
-can wrap it with a :class:`StreamRecoder` to return bytes encoded in UTF-8::
+can wrap it with a :class:`~codecs.StreamRecoder` to return bytes encoded in
+UTF-8::
 
     new_f = codecs.StreamRecoder(f,
         # en/decoder: used by read() to encode its results and
diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst
index b683ab6..7b217ea 100644
--- a/Doc/howto/urllib2.rst
+++ b/Doc/howto/urllib2.rst
@@ -57,7 +57,7 @@
     html = response.read()
 
 If you wish to retrieve a resource via URL and store it in a temporary location,
-you can do so via the :func:`urlretrieve` function::
+you can do so via the :func:`~urllib.request.urlretrieve` function::
 
     import urllib.request
     local_filename, headers = urllib.request.urlretrieve('http://python.org/')
diff --git a/Doc/includes/email-dir.py b/Doc/includes/email-dir.py
index cc5529e..3c7c770 100644
--- a/Doc/includes/email-dir.py
+++ b/Doc/includes/email-dir.py
@@ -8,7 +8,7 @@
 # For guessing MIME type based on file name extension
 import mimetypes
 
-from optparse import OptionParser
+from argparse import ArgumentParser
 
 from email import encoders
 from email.message import Message
@@ -22,44 +22,36 @@
 
 
 def main():
-    parser = OptionParser(usage="""\
+    parser = ArgumentParser(description="""\
 Send the contents of a directory as a MIME message.
-
-Usage: %prog [options]
-
 Unless the -o option is given, the email is sent by forwarding to your local
 SMTP server, which then does the normal delivery process.  Your local machine
 must be running an SMTP server.
 """)
-    parser.add_option('-d', '--directory',
-                      type='string', action='store',
-                      help="""Mail the contents of the specified directory,
-                      otherwise use the current directory.  Only the regular
-                      files in the directory are sent, and we don't recurse to
-                      subdirectories.""")
-    parser.add_option('-o', '--output',
-                      type='string', action='store', metavar='FILE',
-                      help="""Print the composed message to FILE instead of
-                      sending the message to the SMTP server.""")
-    parser.add_option('-s', '--sender',
-                      type='string', action='store', metavar='SENDER',
-                      help='The value of the From: header (required)')
-    parser.add_option('-r', '--recipient',
-                      type='string', action='append', metavar='RECIPIENT',
-                      default=[], dest='recipients',
-                      help='A To: header value (at least one required)')
-    opts, args = parser.parse_args()
-    if not opts.sender or not opts.recipients:
-        parser.print_help()
-        sys.exit(1)
-    directory = opts.directory
+    parser.add_argument('-d', '--directory',
+                        help="""Mail the contents of the specified directory,
+                        otherwise use the current directory.  Only the regular
+                        files in the directory are sent, and we don't recurse to
+                        subdirectories.""")
+    parser.add_argument('-o', '--output',
+                        metavar='FILE',
+                        help="""Print the composed message to FILE instead of
+                        sending the message to the SMTP server.""")
+    parser.add_argument('-s', '--sender', required=True,
+                        help='The value of the From: header (required)')
+    parser.add_argument('-r', '--recipient', required=True,
+                        action='append', metavar='RECIPIENT',
+                        default=[], dest='recipients',
+                        help='A To: header value (at least one required)')
+    args = parser.parse_args()
+    directory = args.directory
     if not directory:
         directory = '.'
     # Create the enclosing (outer) message
     outer = MIMEMultipart()
     outer['Subject'] = 'Contents of directory %s' % os.path.abspath(directory)
-    outer['To'] = COMMASPACE.join(opts.recipients)
-    outer['From'] = opts.sender
+    outer['To'] = COMMASPACE.join(args.recipients)
+    outer['From'] = args.sender
     outer.preamble = 'You will not see this in a MIME-aware mail reader.\n'
 
     for filename in os.listdir(directory):
@@ -76,23 +68,19 @@
             ctype = 'application/octet-stream'
         maintype, subtype = ctype.split('/', 1)
         if maintype == 'text':
-            fp = open(path)
-            # Note: we should handle calculating the charset
-            msg = MIMEText(fp.read(), _subtype=subtype)
-            fp.close()
+            with open(path) as fp:
+                # Note: we should handle calculating the charset
+                msg = MIMEText(fp.read(), _subtype=subtype)
         elif maintype == 'image':
-            fp = open(path, 'rb')
-            msg = MIMEImage(fp.read(), _subtype=subtype)
-            fp.close()
+            with open(path, 'rb') as fp:
+                msg = MIMEImage(fp.read(), _subtype=subtype)
         elif maintype == 'audio':
-            fp = open(path, 'rb')
-            msg = MIMEAudio(fp.read(), _subtype=subtype)
-            fp.close()
+            with open(path, 'rb') as fp:
+                msg = MIMEAudio(fp.read(), _subtype=subtype)
         else:
-            fp = open(path, 'rb')
-            msg = MIMEBase(maintype, subtype)
-            msg.set_payload(fp.read())
-            fp.close()
+            with open(path, 'rb') as fp:
+                msg = MIMEBase(maintype, subtype)
+                msg.set_payload(fp.read())
             # Encode the payload using Base64
             encoders.encode_base64(msg)
         # Set the filename parameter
@@ -100,14 +88,12 @@
         outer.attach(msg)
     # Now send or store the message
     composed = outer.as_string()
-    if opts.output:
-        fp = open(opts.output, 'w')
-        fp.write(composed)
-        fp.close()
+    if args.output:
+        with open(args.output, 'w') as fp:
+            fp.write(composed)
     else:
-        s = smtplib.SMTP('localhost')
-        s.sendmail(opts.sender, opts.recipients, composed)
-        s.quit()
+        with smtplib.SMTP('localhost') as s:
+            s.sendmail(args.sender, args.recipients, composed)
 
 
 if __name__ == '__main__':
diff --git a/Doc/includes/email-unpack.py b/Doc/includes/email-unpack.py
index 3653543..574a0b6 100644
--- a/Doc/includes/email-unpack.py
+++ b/Doc/includes/email-unpack.py
@@ -8,41 +8,27 @@
 import errno
 import mimetypes
 
-from optparse import OptionParser
+from argparse import ArgumentParser
 
 
 def main():
-    parser = OptionParser(usage="""\
+    parser = ArgumentParser(description="""\
 Unpack a MIME message into a directory of files.
-
-Usage: %prog [options] msgfile
 """)
-    parser.add_option('-d', '--directory',
-                      type='string', action='store',
-                      help="""Unpack the MIME message into the named
-                      directory, which will be created if it doesn't already
-                      exist.""")
-    opts, args = parser.parse_args()
-    if not opts.directory:
-        parser.print_help()
-        sys.exit(1)
+    parser.add_argument('-d', '--directory', required=True,
+                        help="""Unpack the MIME message into the named
+                        directory, which will be created if it doesn't already
+                        exist.""")
+    parser.add_argument('msgfile')
+    args = parser.parse_args()
+
+    with open(args.msgfile) as fp:
+        msg = email.message_from_file(fp)
 
     try:
-        msgfile = args[0]
-    except IndexError:
-        parser.print_help()
-        sys.exit(1)
-
-    try:
-        os.mkdir(opts.directory)
-    except OSError as e:
-        # Ignore directory exists error
-        if e.errno != errno.EEXIST:
-            raise
-
-    fp = open(msgfile)
-    msg = email.message_from_file(fp)
-    fp.close()
+        os.mkdir(args.directory)
+    except FileExistsError:
+        pass
 
     counter = 1
     for part in msg.walk():
@@ -59,9 +45,8 @@
                 ext = '.bin'
             filename = 'part-%03d%s' % (counter, ext)
         counter += 1
-        fp = open(os.path.join(opts.directory, filename), 'wb')
-        fp.write(part.get_payload(decode=True))
-        fp.close()
+        with open(os.path.join(args.directory, filename), 'wb') as fp:
+            fp.write(part.get_payload(decode=True))
 
 
 if __name__ == '__main__':
diff --git a/Doc/install/index.rst b/Doc/install/index.rst
index e595309..738aaa1 100644
--- a/Doc/install/index.rst
+++ b/Doc/install/index.rst
@@ -1046,7 +1046,7 @@
 for Borland's C++, because there is no program to convert the library.  First
 you have to create a list of symbols which the Python DLL exports. (You can find
 a good program for this task at
-http://www.emmestech.com/software/pexports-0.43/download_pexports.html).
+http://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/).
 
 .. I don't understand what the next line means. --amk
 .. (inclusive the references on data structures.)
diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst
index 158b3be..fda214c 100644
--- a/Doc/library/2to3.rst
+++ b/Doc/library/2to3.rst
@@ -290,11 +290,11 @@
 
    Converts the use of iterator's :meth:`~iterator.next` methods to the
    :func:`next` function.  It also renames :meth:`next` methods to
-   :meth:`~object.__next__`.
+   :meth:`~iterator.__next__`.
 
 .. 2to3fixer:: nonzero
 
-   Renames :meth:`~object.__nonzero__` to :meth:`~object.__bool__`.
+   Renames :meth:`__nonzero__` to :meth:`~object.__bool__`.
 
 .. 2to3fixer:: numliterals
 
diff --git a/Doc/library/_thread.rst b/Doc/library/_thread.rst
index fae2781..2e130c1 100644
--- a/Doc/library/_thread.rst
+++ b/Doc/library/_thread.rst
@@ -177,7 +177,7 @@
   equivalent to calling :func:`_thread.exit`.
 
 * Not all built-in functions that may block waiting for I/O allow other threads
-  to run.  (The most popular ones (:func:`time.sleep`, :meth:`file.read`,
+  to run.  (The most popular ones (:func:`time.sleep`, :meth:`io.FileIO.read`,
   :func:`select.select`) work as expected.)
 
 * It is not possible to interrupt the :meth:`acquire` method on a lock --- the
diff --git a/Doc/library/abc.rst b/Doc/library/abc.rst
index 1f21b57..7853d31 100644
--- a/Doc/library/abc.rst
+++ b/Doc/library/abc.rst
@@ -114,19 +114,19 @@
       MyIterable.register(Foo)
 
    The ABC ``MyIterable`` defines the standard iterable method,
-   :meth:`__iter__`, as an abstract method.  The implementation given here can
-   still be called from subclasses.  The :meth:`get_iterator` method is also
-   part of the ``MyIterable`` abstract base class, but it does not have to be
-   overridden in non-abstract derived classes.
+   :meth:`~iterator.__iter__`, as an abstract method.  The implementation given
+   here can still be called from subclasses.  The :meth:`get_iterator` method
+   is also part of the ``MyIterable`` abstract base class, but it does not have
+   to be overridden in non-abstract derived classes.
 
    The :meth:`__subclasshook__` class method defined here says that any class
-   that has an :meth:`__iter__` method in its :attr:`__dict__` (or in that of
-   one of its base classes, accessed via the :attr:`__mro__` list) is
-   considered a ``MyIterable`` too.
+   that has an :meth:`~iterator.__iter__` method in its
+   :attr:`~object.__dict__` (or in that of one of its base classes, accessed
+   via the :attr:`~class.__mro__` list) is considered a ``MyIterable`` too.
 
    Finally, the last line makes ``Foo`` a virtual subclass of ``MyIterable``,
-   even though it does not define an :meth:`__iter__` method (it uses the
-   old-style iterable protocol, defined in terms of :meth:`__len__` and
+   even though it does not define an :meth:`~iterator.__iter__` method (it uses
+   the old-style iterable protocol, defined in terms of :meth:`__len__` and
    :meth:`__getitem__`).  Note that this will not make ``get_iterator``
    available as a method of ``Foo``, so it is provided separately.
 
diff --git a/Doc/library/aifc.rst b/Doc/library/aifc.rst
index 44a0a24..48c3ea9 100644
--- a/Doc/library/aifc.rst
+++ b/Doc/library/aifc.rst
@@ -30,8 +30,8 @@
 sampled.  The number of channels indicate if the audio is mono, stereo, or
 quadro.  Each frame consists of one sample per channel.  The sample size is the
 size in bytes of each sample.  Thus a frame consists of
-*nchannels*\**samplesize* bytes, and a second's worth of audio consists of
-*nchannels*\**samplesize*\**framerate* bytes.
+``nchannels * samplesize`` bytes, and a second's worth of audio consists of
+``nchannels * samplesize * framerate`` bytes.
 
 For example, CD quality audio has a sample size of two bytes (16 bits), uses two
 channels (stereo) and has a frame rate of 44,100 frames/second.  This gives a
diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst
index f3eb9dd..5b7d016 100644
--- a/Doc/library/argparse.rst
+++ b/Doc/library/argparse.rst
@@ -46,7 +46,7 @@
 Assuming the Python code above is saved into a file called ``prog.py``, it can
 be run at the command line and provides useful help messages::
 
-   $ prog.py -h
+   $ python prog.py -h
    usage: prog.py [-h] [--sum] N [N ...]
 
    Process some integers.
@@ -61,15 +61,15 @@
 When run with the appropriate arguments, it prints either the sum or the max of
 the command-line integers::
 
-   $ prog.py 1 2 3 4
+   $ python prog.py 1 2 3 4
    4
 
-   $ prog.py 1 2 3 4 --sum
+   $ python prog.py 1 2 3 4 --sum
    10
 
 If invalid arguments are passed in, it will issue an error::
 
-   $ prog.py a b c
+   $ python prog.py a b c
    usage: prog.py [-h] [--sum] N [N ...]
    prog.py: error: argument N: invalid int value: 'a'
 
@@ -598,10 +598,10 @@
 
    >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='+/')
    >>> parser.print_help()
-   usage: PROG [-h]
+   usage: PROG [+h]
 
    optional arguments:
-     -h, --help  show this help message and exit
+     +h, ++help  show this help message and exit
 
 
 The add_argument() method
@@ -1452,7 +1452,10 @@
 Sub-commands
 ^^^^^^^^^^^^
 
-.. method:: ArgumentParser.add_subparsers()
+.. method:: ArgumentParser.add_subparsers([title], [description], [prog], \
+                                          [parser_class], [action], \
+                                          [option_string], [dest], [help], \
+                                          [metavar])
 
    Many programs split up their functionality into a number of sub-commands,
    for example, the ``svn`` program can invoke sub-commands like ``svn
@@ -1466,6 +1469,30 @@
    command name and any :class:`ArgumentParser` constructor arguments, and
    returns an :class:`ArgumentParser` object that can be modified as usual.
 
+   Description of parameters:
+
+   * title - title for the sub-parser group in help output; by default
+     "subcommands" if description is provided, otherwise uses title for
+     positional arguments
+
+   * description - description for the sub-parser group in help output, by
+     default None
+
+   * prog - usage information that will be displayed with sub-command help,
+     by default the name of the program and any positional arguments before the
+     subparser argument
+
+   * parser_class - class which will be used to create sub-parser instances, by
+     default the class of the current parser (e.g. ArgumentParser)
+
+   * dest - name of the attribute under which sub-command name will be
+     stored; by default None and no value is stored
+
+   * help - help for sub-parser group in help output, by default None
+
+   * metavar - string presenting available sub-commands in help; by default it
+     is None and presents sub-commands in form {cmd1, cmd2, ..}
+
    Some example usage::
 
      >>> # create the top-level parser
@@ -1698,7 +1725,7 @@
 Mutual exclusion
 ^^^^^^^^^^^^^^^^
 
-.. method:: add_mutually_exclusive_group(required=False)
+.. method:: ArgumentParser.add_mutually_exclusive_group(required=False)
 
    Create a mutually exclusive group. :mod:`argparse` will make sure that only
    one of the arguments in the mutually exclusive group was present on the
diff --git a/Doc/library/asyncore.rst b/Doc/library/asyncore.rst
index 7cacca1..8f494d0 100644
--- a/Doc/library/asyncore.rst
+++ b/Doc/library/asyncore.rst
@@ -53,10 +53,10 @@
    channels have been closed.  All arguments are optional.  The *count*
    parameter defaults to None, resulting in the loop terminating only when all
    channels have been closed.  The *timeout* argument sets the timeout
-   parameter for the appropriate :func:`select` or :func:`poll` call, measured
-   in seconds; the default is 30 seconds.  The *use_poll* parameter, if true,
-   indicates that :func:`poll` should be used in preference to :func:`select`
-   (the default is ``False``).
+   parameter for the appropriate :func:`~select.select` or :func:`~select.poll`
+   call, measured in seconds; the default is 30 seconds.  The *use_poll*
+   parameter, if true, indicates that :func:`~select.poll` should be used in
+   preference to :func:`~select.select` (the default is ``False``).
 
    The *map* parameter is a dictionary whose items are the channels to watch.
    As channels are closed they are deleted from their map.  If *map* is
diff --git a/Doc/library/audioop.rst b/Doc/library/audioop.rst
index d4c0c95..ca6cfb3 100644
--- a/Doc/library/audioop.rst
+++ b/Doc/library/audioop.rst
@@ -6,9 +6,16 @@
 
 
 The :mod:`audioop` module contains some useful operations on sound fragments.
-It operates on sound fragments consisting of signed integer samples 8, 16 or 32
-bits wide, stored in bytes objects.  All scalar items are integers, unless
-specified otherwise.
+It operates on sound fragments consisting of signed integer samples 8, 16, 24
+or 32 bits wide, stored in :term:`bytes-like object`\ s.  All scalar items are
+integers, unless specified otherwise.
+
+.. versionchanged:: 3.4
+   Support for 24-bit samples was added.
+
+.. versionchanged:: 3.4
+   Any :term:`bytes-like object`\ s are now accepted by all functions in this
+   module.  Strings no more supported.
 
 .. index::
    single: Intel/DVI ADPCM
@@ -35,7 +42,7 @@
 .. function:: add(fragment1, fragment2, width)
 
    Return a fragment which is the addition of the two samples passed as parameters.
-   *width* is the sample width in bytes, either ``1``, ``2`` or ``4``.  Both
+   *width* is the sample width in bytes, either ``1``, ``2``, ``3`` or ``4``.  Both
    fragments should have the same length.  Samples are truncated in case of overflow.
 
 
@@ -133,19 +140,19 @@
 
 .. function:: lin2lin(fragment, width, newwidth)
 
-   Convert samples between 1-, 2- and 4-byte formats.
+   Convert samples between 1-, 2-, 3- and 4-byte formats.
 
    .. note::
 
-      In some audio formats, such as .WAV files, 16 and 32 bit samples are
+      In some audio formats, such as .WAV files, 16, 24 and 32 bit samples are
       signed, but 8 bit samples are unsigned.  So when converting to 8 bit wide
       samples for these formats, you need to also add 128 to the result::
 
          new_frames = audioop.lin2lin(frames, old_width, 1)
          new_frames = audioop.bias(new_frames, 1, 128)
 
-      The same, in reverse, has to be applied when converting from 8 to 16 or 32
-      bit width samples.
+      The same, in reverse, has to be applied when converting from 8 to 16, 24
+      or 32 bit width samples.
 
 
 .. function:: lin2ulaw(fragment, width)
@@ -241,7 +248,7 @@
 transmit the data but also the state.  Note that you should send the *initial*
 state (the one you passed to :func:`lin2adpcm`) along to the decoder, not the
 final state (as returned by the coder).  If you want to use
-:func:`struct.struct` to store the state in binary you can code the first
+:class:`struct.Struct` to store the state in binary you can code the first
 element (the predicted value) in 16 bits and the second (the delta index) in 8.
 
 The ADPCM coders have never been tried against other ADPCM coders, only against
diff --git a/Doc/library/binascii.rst b/Doc/library/binascii.rst
index 02ec5d8..c92a8e1 100644
--- a/Doc/library/binascii.rst
+++ b/Doc/library/binascii.rst
@@ -145,7 +145,7 @@
 
    Return the hexadecimal representation of the binary *data*.  Every byte of
    *data* is converted into the corresponding 2-digit hex representation.  The
-   resulting string is therefore twice as long as the length of *data*.
+   returned bytes object is therefore twice as long as the length of *data*.
 
 
 .. function:: a2b_hex(hexstr)
diff --git a/Doc/library/bz2.rst b/Doc/library/bz2.rst
index d06a39a..44e1331 100644
--- a/Doc/library/bz2.rst
+++ b/Doc/library/bz2.rst
@@ -37,8 +37,8 @@
    file object to read from or write to.
 
    The *mode* argument can be any of ``'r'``, ``'rb'``, ``'w'``, ``'wb'``,
-   ``'a'``, or ``'ab'`` for binary mode, or ``'rt'``, ``'wt'``, or ``'at'`` for
-   text mode. The default is ``'rb'``.
+   ``'x'``, ``'xb'``, ``'a'`` or ``'ab'`` for binary mode, or ``'rt'``,
+   ``'wt'``, ``'xt'``, or ``'at'`` for text mode. The default is ``'rb'``.
 
    The *compresslevel* argument is an integer from 1 to 9, as for the
    :class:`BZ2File` constructor.
@@ -54,6 +54,9 @@
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.4
+      The ``'x'`` (exclusive creation) mode was added.
+
 
 .. class:: BZ2File(filename, mode='r', buffering=None, compresslevel=9)
 
@@ -64,8 +67,9 @@
    be used to read or write the compressed data.
 
    The *mode* argument can be either ``'r'`` for reading (default), ``'w'`` for
-   overwriting, or ``'a'`` for appending. These can equivalently be given as
-   ``'rb'``, ``'wb'``, and ``'ab'`` respectively.
+   overwriting, ``'x'`` for exclusive creation, or ``'a'`` for appending. These
+   can equivalently be given as ``'rb'``, ``'wb'``, ``'xb'`` and ``'ab'``
+   respectively.
 
    If *filename* is a file object (rather than an actual file name), a mode of
    ``'w'`` does not truncate the file, and is instead equivalent to ``'a'``.
@@ -108,6 +112,9 @@
       The ``'a'`` (append) mode was added, along with support for reading
       multi-stream files.
 
+   .. versionchanged:: 3.4
+      The ``'x'`` (exclusive creation) mode was added.
+
 
 Incremental (de)compression
 ---------------------------
diff --git a/Doc/library/calendar.rst b/Doc/library/calendar.rst
index f495271..3187c43 100644
--- a/Doc/library/calendar.rst
+++ b/Doc/library/calendar.rst
@@ -272,10 +272,11 @@
 
 .. function:: timegm(tuple)
 
-   An unrelated but handy function that takes a time tuple such as returned by the
-   :func:`gmtime` function in the :mod:`time` module, and returns the corresponding
-   Unix timestamp value, assuming an epoch of 1970, and the POSIX encoding.  In
-   fact, :func:`time.gmtime` and :func:`timegm` are each others' inverse.
+   An unrelated but handy function that takes a time tuple such as returned by
+   the :func:`~time.gmtime` function in the :mod:`time` module, and returns the
+   corresponding Unix timestamp value, assuming an epoch of 1970, and the POSIX
+   encoding.  In fact, :func:`time.gmtime` and :func:`timegm` are each others'
+   inverse.
 
 
 The :mod:`calendar` module exports the following data attributes:
diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst
index 478c95a..c4e7c60 100644
--- a/Doc/library/cgi.rst
+++ b/Doc/library/cgi.rst
@@ -97,7 +97,7 @@
 
 The :class:`FieldStorage` instance can be indexed like a Python dictionary.
 It allows membership testing with the :keyword:`in` operator, and also supports
-the standard dictionary method :meth:`keys` and the built-in function
+the standard dictionary method :meth:`~dict.keys` and the built-in function
 :func:`len`.  Form fields containing empty strings are ignored and do not appear
 in the dictionary; to keep such values, provide a true value for the optional
 *keep_blank_values* keyword parameter when creating the :class:`FieldStorage`
@@ -119,30 +119,32 @@
 
 Here the fields, accessed through ``form[key]``, are themselves instances of
 :class:`FieldStorage` (or :class:`MiniFieldStorage`, depending on the form
-encoding). The :attr:`value` attribute of the instance yields the string value
-of the field.  The :meth:`getvalue` method returns this string value directly;
-it also accepts an optional second argument as a default to return if the
-requested key is not present.
+encoding). The :attr:`~FieldStorage.value` attribute of the instance yields
+the string value of the field.  The :meth:`~FieldStorage.getvalue` method
+returns this string value directly; it also accepts an optional second argument
+as a default to return if the requested key is not present.
 
 If the submitted form data contains more than one field with the same name, the
 object retrieved by ``form[key]`` is not a :class:`FieldStorage` or
 :class:`MiniFieldStorage` instance but a list of such instances.  Similarly, in
 this situation, ``form.getvalue(key)`` would return a list of strings. If you
 expect this possibility (when your HTML form contains multiple fields with the
-same name), use the :func:`getlist` function, which always returns a list of
-values (so that you do not need to special-case the single item case).  For
-example, this code concatenates any number of username fields, separated by
-commas::
+same name), use the :meth:`~FieldStorage.getlist` method, which always returns
+a list of values (so that you do not need to special-case the single item
+case).  For example, this code concatenates any number of username fields,
+separated by commas::
 
    value = form.getlist("username")
    usernames = ",".join(value)
 
 If a field represents an uploaded file, accessing the value via the
-:attr:`value` attribute or the :func:`getvalue` method reads the entire file in
-memory as bytes.  This may not be what you want. You can test for an uploaded
-file by testing either the :attr:`filename` attribute or the :attr:`!file`
+:attr:`~FieldStorage.value` attribute or the :meth:`~FieldStorage.getvalue`
+method reads the entire file in memory as bytes.  This may not be what you
+want.  You can test for an uploaded file by testing either the
+:attr:`~FieldStorage.filename` attribute or the :attr:`~FieldStorage.file`
 attribute.  You can then read the data at leisure from the :attr:`!file`
-attribute (the :func:`read` and :func:`readline` methods will return bytes)::
+attribute (the :func:`~io.RawIOBase.read` and :func:`~io.IOBase.readline`
+methods will return bytes)::
 
    fileitem = form["userfile"]
    if fileitem.file:
@@ -155,8 +157,8 @@
 
 If an error is encountered when obtaining the contents of an uploaded file
 (for example, when the user interrupts the form submission by clicking on
-a Back or Cancel button) the :attr:`done` attribute of the object for the
-field will be set to the value -1.
+a Back or Cancel button) the :attr:`~FieldStorage.done` attribute of the
+object for the field will be set to the value -1.
 
 The file upload draft standard entertains the possibility of uploading multiple
 files from one field (using a recursive :mimetype:`multipart/\*` encoding).
@@ -223,8 +225,8 @@
 code which checks whether the obtained value is a single value or a list of
 values.  That's annoying and leads to less readable scripts.
 
-A more convenient approach is to use the methods :meth:`getfirst` and
-:meth:`getlist` provided by this higher level interface.
+A more convenient approach is to use the methods :meth:`~FieldStorage.getfirst`
+and :meth:`~FieldStorage.getlist` provided by this higher level interface.
 
 
 .. method:: FieldStorage.getfirst(name, default=None)
diff --git a/Doc/library/chunk.rst b/Doc/library/chunk.rst
index c1ba497..ae0a221 100644
--- a/Doc/library/chunk.rst
+++ b/Doc/library/chunk.rst
@@ -54,8 +54,9 @@
 
    Class which represents a chunk.  The *file* argument is expected to be a
    file-like object.  An instance of this class is specifically allowed.  The
-   only method that is needed is :meth:`read`.  If the methods :meth:`seek` and
-   :meth:`tell` are present and don't raise an exception, they are also used.
+   only method that is needed is :meth:`~io.IOBase.read`.  If the methods
+   :meth:`~io.IOBase.seek` and :meth:`~io.IOBase.tell` are present and don't
+   raise an exception, they are also used.
    If these methods are present and raise an exception, they are expected to not
    have altered the object.  If the optional argument *align* is true, chunks
    are assumed to be aligned on 2-byte boundaries.  If *align* is false, no
diff --git a/Doc/library/code.rst b/Doc/library/code.rst
index 56214b9..5b5d7cc 100644
--- a/Doc/library/code.rst
+++ b/Doc/library/code.rst
@@ -29,13 +29,13 @@
 
 .. function:: interact(banner=None, readfunc=None, local=None)
 
-   Convenience function to run a read-eval-print loop.  This creates a new instance
-   of :class:`InteractiveConsole` and sets *readfunc* to be used as the
-   :meth:`raw_input` method, if provided.  If *local* is provided, it is passed to
-   the :class:`InteractiveConsole` constructor for use as the default namespace for
-   the interpreter loop.  The :meth:`interact` method of the instance is then run
-   with *banner* passed as the banner to use, if provided.  The console object is
-   discarded after use.
+   Convenience function to run a read-eval-print loop.  This creates a new
+   instance of :class:`InteractiveConsole` and sets *readfunc* to be used as
+   the :meth:`InteractiveConsole.raw_input` method, if provided.  If *local* is
+   provided, it is passed to the :class:`InteractiveConsole` constructor for
+   use as the default namespace for the interpreter loop.  The :meth:`interact`
+   method of the instance is then run with *banner* passed as the banner to
+   use, if provided.  The console object is discarded after use.
 
 
 .. function:: compile_command(source, filename="<input>", symbol="single")
@@ -132,12 +132,15 @@
 
 .. method:: InteractiveConsole.interact(banner=None)
 
-   Closely emulate the interactive Python console. The optional banner argument
+   Closely emulate the interactive Python console. The optional *banner* argument
    specify the banner to print before the first interaction; by default it prints a
    banner similar to the one printed by the standard Python interpreter, followed
    by the class name of the console object in parentheses (so as not to confuse
    this with the real interpreter -- since it's so close!).
 
+   .. versionchanged:: 3.4
+      To suppress printing any banner, pass an empty string.
+
 
 .. method:: InteractiveConsole.push(line)
 
diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst
index 48c3b24..0925e82 100644
--- a/Doc/library/codecs.rst
+++ b/Doc/library/codecs.rst
@@ -22,6 +22,25 @@
 
 It defines the following functions:
 
+.. function:: encode(obj, encoding='utf-8', errors='strict')
+
+   Encodes *obj* using the codec registered for *encoding*.
+
+   *Errors* may be given to set the desired error handling scheme. The
+   default error handler is ``strict`` meaning that encoding errors raise
+   :exc:`ValueError` (or a more codec specific subclass, such as
+   :exc:`UnicodeEncodeError`). Refer to :ref:`codec-base-classes` for more
+   information on codec error handling.
+
+.. function:: decode(obj, encoding='utf-8', errors='strict')
+
+   Decodes *obj* using the codec registered for *encoding*.
+
+   *Errors* may be given to set the desired error handling scheme. The
+   default error handler is ``strict`` meaning that decoding errors raise
+   :exc:`ValueError` (or a more codec specific subclass, such as
+   :exc:`UnicodeDecodeError`). Refer to :ref:`codec-base-classes` for more
+   information on codec error handling.
 
 .. function:: register(search_function)
 
@@ -46,9 +65,9 @@
    The various functions or classes take the following arguments:
 
    *encode* and *decode*: These must be functions or methods which have the same
-   interface as the :meth:`encode`/:meth:`decode` methods of Codec instances (see
-   Codec Interface). The functions/methods are expected to work in a stateless
-   mode.
+   interface as the :meth:`~Codec.encode`/:meth:`~Codec.decode` methods of Codec
+   instances (see :ref:`Codec Interface <codec-objects>`). The functions/methods
+   are expected to work in a stateless mode.
 
    *incrementalencoder* and *incrementaldecoder*: These have to be factory
    functions providing the following interface:
@@ -65,7 +84,7 @@
       ``factory(stream, errors='strict')``
 
    The factory functions must return objects providing the interfaces defined by
-   the base classes :class:`StreamWriter` and :class:`StreamReader`, respectively.
+   the base classes :class:`StreamReader` and :class:`StreamWriter`, respectively.
    Stream codecs can maintain state.
 
    Possible values for errors are
@@ -314,8 +333,8 @@
 
 The :class:`Codec` class defines the interface for stateless encoders/decoders.
 
-To simplify and standardize error handling, the :meth:`encode` and
-:meth:`decode` methods may implement different error handling schemes by
+To simplify and standardize error handling, the :meth:`~Codec.encode` and
+:meth:`~Codec.decode` methods may implement different error handling schemes by
 providing the *errors* string argument.  The following string values are defined
 and implemented by all standard Python codecs:
 
@@ -409,12 +428,14 @@
 The :class:`IncrementalEncoder` and :class:`IncrementalDecoder` classes provide
 the basic interface for incremental encoding and decoding. Encoding/decoding the
 input isn't done with one call to the stateless encoder/decoder function, but
-with multiple calls to the :meth:`encode`/:meth:`decode` method of the
-incremental encoder/decoder. The incremental encoder/decoder keeps track of the
-encoding/decoding process during method calls.
+with multiple calls to the
+:meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` method of
+the incremental encoder/decoder. The incremental encoder/decoder keeps track of
+the encoding/decoding process during method calls.
 
-The joined output of calls to the :meth:`encode`/:meth:`decode` method is the
-same as if all the single inputs were joined into one, and this input was
+The joined output of calls to the
+:meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` method is
+the same as if all the single inputs were joined into one, and this input was
 encoded/decoded with the stateless encoder/decoder.
 
 
diff --git a/Doc/library/collections.abc.rst b/Doc/library/collections.abc.rst
index 06dfe80..356f473 100644
--- a/Doc/library/collections.abc.rst
+++ b/Doc/library/collections.abc.rst
@@ -15,7 +15,7 @@
    import itertools
    __name__ = '<doctest>'
 
-**Source code:** :source:`Lib/collections/abc.py`
+**Source code:** :source:`Lib/_collections_abc.py`
 
 --------------
 
@@ -98,8 +98,9 @@
 
 .. class:: Iterator
 
-   ABC for classes that provide the :meth:`__iter__` and :meth:`__next__` methods.
-   See also the definition of :term:`iterator`.
+   ABC for classes that provide the :meth:`~iterator.__iter__` and
+   :meth:`~iterator.__next__` methods.  See also the definition of
+   :term:`iterator`.
 
 .. class:: Sequence
            MutableSequence
diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index 96c5aef..80c6c76 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -312,7 +312,7 @@
     dict(c)                         # convert to a regular dictionary
     c.items()                       # convert to a list of (elem, cnt) pairs
     Counter(dict(list_of_pairs))    # convert from a list of (elem, cnt) pairs
-    c.most_common()[:-n:-1]         # n least common elements
+    c.most_common()[:-n-1:-1]       # n least common elements
     +c                              # remove zero and negative counts
 
 Several mathematical operations are provided for combining :class:`Counter`
@@ -374,10 +374,6 @@
 
 .. seealso::
 
-    * `Counter class <http://code.activestate.com/recipes/576611/>`_
-      adapted for Python 2.5 and an early `Bag recipe
-      <http://code.activestate.com/recipes/259174/>`_ for Python 2.4.
-
     * `Bag class <http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html>`_
       in Smalltalk.
 
@@ -920,11 +916,6 @@
     >>> class Status:
         open, pending, closed = range(3)
 
-.. seealso::
-
-    * `Named tuple recipe <http://code.activestate.com/recipes/500261/>`_
-      adapted for Python 2.4.
-
     * `Recipe for named tuple abstract base class with a metaclass mix-in
       <http://code.activestate.com/recipes/577629-namedtupleabc-abstract-base-class-mix-in-for-named/>`_
       by Jan Kaliszewski.  Besides providing an :term:`abstract base class` for
@@ -979,18 +970,14 @@
 Equality tests between :class:`OrderedDict` objects are order-sensitive
 and are implemented as ``list(od1.items())==list(od2.items())``.
 Equality tests between :class:`OrderedDict` objects and other
-:class:`Mapping` objects are order-insensitive like regular dictionaries.
-This allows :class:`OrderedDict` objects to be substituted anywhere a
-regular dictionary is used.
+:class:`~collections.abc.Mapping` objects are order-insensitive like regular
+dictionaries.  This allows :class:`OrderedDict` objects to be substituted
+anywhere a regular dictionary is used.
 
 The :class:`OrderedDict` constructor and :meth:`update` method both accept
 keyword arguments, but their order is lost because Python's function call
 semantics pass-in keyword arguments using a regular unordered dictionary.
 
-.. seealso::
-
-    `Equivalent OrderedDict recipe <http://code.activestate.com/recipes/576693/>`_
-    that runs on Python 2.4 or later.
 
 :class:`OrderedDict` Examples and Recipes
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index c2f92b3..93538e4 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -164,6 +164,9 @@
 allows it to side-step the :term:`Global Interpreter Lock` but also means that
 only picklable objects can be executed and returned.
 
+The ``__main__`` module must be importable by worker subprocesses. This means
+that :class:`ProcessPoolExecutor` will not work in the interactive interpreter.
+
 Calling :class:`Executor` or :class:`Future` methods from a callable submitted
 to a :class:`ProcessPoolExecutor` will result in deadlock.
 
diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst
index f9a87ef..024d27c 100644
--- a/Doc/library/configparser.rst
+++ b/Doc/library/configparser.rst
@@ -371,7 +371,8 @@
 parser.
 
 :mod:`configparser` objects behave as close to actual dictionaries as possible.
-The mapping interface is complete and adheres to the ``MutableMapping`` ABC.
+The mapping interface is complete and adheres to the
+:class:`~collections.abc.MutableMapping` ABC.
 However, there are a few differences that should be taken into account:
 
 * By default, all keys in sections are accessible in a case-insensitive manner
diff --git a/Doc/library/contextlib.rst b/Doc/library/contextlib.rst
index 349b805..82efd0c 100644
--- a/Doc/library/contextlib.rst
+++ b/Doc/library/contextlib.rst
@@ -94,27 +94,84 @@
    without needing to explicitly close ``page``.  Even if an error occurs,
    ``page.close()`` will be called when the :keyword:`with` block is exited.
 
-.. function:: ignored(*exceptions)
 
-   Return a context manager that ignores the specified exceptions if they
-   occur in the body of a with-statement.
+.. function:: suppress(*exceptions)
+
+   Return a context manager that suppresses any of the specified exceptions
+   if they occur in the body of a with statement and then resumes execution
+   with the first statement following the end of the with statement.
+
+   As with any other mechanism that completely suppresses exceptions, this
+   context manager should be used only to cover very specific errors where
+   silently continuing with program execution is known to be the right
+   thing to do.
 
    For example::
 
-       from contextlib import ignored
+       from contextlib import suppress
 
-       with ignored(OSError):
+       with suppress(FileNotFoundError):
            os.remove('somefile.tmp')
 
+       with suppress(FileNotFoundError):
+           os.remove('someotherfile.tmp')
+
    This code is equivalent to::
 
        try:
            os.remove('somefile.tmp')
-       except OSError:
+       except FileNotFoundError:
            pass
 
+       try:
+           os.remove('someotherfile.tmp')
+       except FileNotFoundError:
+           pass
+
+   This context manager is :ref:`reentrant <reentrant-cms>`.
+
    .. versionadded:: 3.4
 
+
+.. function:: redirect_stdout(new_target)
+
+   Context manager for temporarily redirecting :data:`sys.stdout` to
+   another file or file-like object.
+
+   This tool adds flexibility to existing functions or classes whose output
+   is hardwired to stdout.
+
+   For example, the output of :func:`help` normally is sent to *sys.stdout*.
+   You can capture that output in a string by redirecting the output to a
+   :class:`io.StringIO` object::
+
+        f = io.StringIO()
+        with redirect_stdout(f):
+            help(pow)
+        s = f.getvalue()
+
+   To send the output of :func:`help` to a file on disk, redirect the output
+   to a regular file::
+
+        with open('help.txt', 'w') as f:
+            with redirect_stdout(f):
+                help(pow)
+
+   To send the output of :func:`help` to *sys.stderr*::
+
+        with redirect_stdout(sys.stderr):
+            help(pow)
+
+   Note that the global side effect on :data:`sys.stdout` means that this
+   context manager is not suitable for use in library code and most threaded
+   applications. It also has no effect on the output of subprocesses.
+   However, it is still a useful approach for many utility scripts.
+
+   This context manager is :ref:`reusable but not reentrant <reusable-cms>`.
+
+   .. versionadded:: 3.4
+
+
 .. class:: ContextDecorator()
 
    A base class that enables a context manager to also be used as a decorator.
@@ -540,3 +597,153 @@
       The specification, background, and examples for the Python :keyword:`with`
       statement.
 
+.. _single-use-reusable-and-reentrant-cms:
+
+Single use, reusable and reentrant context managers
+---------------------------------------------------
+
+Most context managers are written in a way that means they can only be
+used effectively in a :keyword:`with` statement once. These single use
+context managers must be created afresh each time they're used -
+attempting to use them a second time will trigger an exception or
+otherwise not work correctly.
+
+This common limitation means that it is generally advisable to create
+context managers directly in the header of the :keyword:`with` statement
+where they are used (as shown in all of the usage examples above).
+
+Files are an example of effectively single use context managers, since
+the first :keyword:`with` statement will close the file, preventing any
+further IO operations using that file object.
+
+Context managers created using :func:`contextmanager` are also single use
+context managers, and will complain about the underlying generator failing
+to yield if an attempt is made to use them a second time::
+
+    >>> from contextlib import contextmanager
+    >>> @contextmanager
+    ... def singleuse():
+    ...     print("Before")
+    ...     yield
+    ...     print("After")
+    ...
+    >>> cm = singleuse()
+    >>> with cm:
+    ...     pass
+    ...
+    Before
+    After
+    >>> with cm:
+    ...    pass
+    ...
+    Traceback (most recent call last):
+        ...
+    RuntimeError: generator didn't yield
+
+
+.. _reentrant-cms:
+
+Reentrant context managers
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+More sophisticated context managers may be "reentrant". These context
+managers can not only be used in multiple :keyword:`with` statements,
+but may also be used *inside* a :keyword:`with` statement that is already
+using the same context manager.
+
+:class:`threading.RLock` is an example of a reentrant context manager, as are
+:func:`suppress` and :func:`redirect_stdout`. Here's a very simple example of
+reentrant use::
+
+    >>> from contextlib import redirect_stdout
+    >>> from io import StringIO
+    >>> stream = StringIO()
+    >>> write_to_stream = redirect_stdout(stream)
+    >>> with write_to_stream:
+    ...     print("This is written to the stream rather than stdout")
+    ...     with write_to_stream:
+    ...         print("This is also written to the stream")
+    ...
+    >>> print("This is written directly to stdout")
+    This is written directly to stdout
+    >>> print(stream.getvalue())
+    This is written to the stream rather than stdout
+    This is also written to the stream
+
+Real world examples of reentrancy are more likely to involve multiple
+functions calling each other and hence be far more complicated than this
+example.
+
+Note also that being reentrant is *not* the same thing as being thread safe.
+:func:`redirect_stdout`, for example, is definitely not thread safe, as it
+makes a global modification to the system state by binding :data:`sys.stdout`
+to a different stream.
+
+
+.. _reusable-cms:
+
+Reusable context managers
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Distinct from both single use and reentrant context managers are "reusable"
+context managers (or, to be completely explicit, "reusable, but not
+reentrant" context managers, since reentrant context managers are also
+reusable). These context managers support being used multiple times, but
+will fail (or otherwise not work correctly) if the specific context manager
+instance has already been used in a containing with statement.
+
+:class:`threading.Lock` is an example of a reusable, but not reentrant,
+context manager (for a reentrant lock, it is necessary to use
+:class:`threading.RLock` instead).
+
+Another example of a reusable, but not reentrant, context manager is
+:class:`ExitStack`, as it invokes *all* currently registered callbacks
+when leaving any with statement, regardless of where those callbacks
+were added::
+
+    >>> from contextlib import ExitStack
+    >>> stack = ExitStack()
+    >>> with stack:
+    ...     stack.callback(print, "Callback: from first context")
+    ...     print("Leaving first context")
+    ...
+    Leaving first context
+    Callback: from first context
+    >>> with stack:
+    ...     stack.callback(print, "Callback: from second context")
+    ...     print("Leaving second context")
+    ...
+    Leaving second context
+    Callback: from second context
+    >>> with stack:
+    ...     stack.callback(print, "Callback: from outer context")
+    ...     with stack:
+    ...         stack.callback(print, "Callback: from inner context")
+    ...         print("Leaving inner context")
+    ...     print("Leaving outer context")
+    ...
+    Leaving inner context
+    Callback: from inner context
+    Callback: from outer context
+    Leaving outer context
+
+As the output from the example shows, reusing a single stack object across
+multiple with statements works correctly, but attempting to nest them
+will cause the stack to be cleared at the end of the innermost with
+statement, which is unlikely to be desirable behaviour.
+
+Using separate :class:`ExitStack` instances instead of reusing a single
+instance avoids that problem::
+
+    >>> from contextlib import ExitStack
+    >>> with ExitStack() as outer_stack:
+    ...     outer_stack.callback(print, "Callback: from outer context")
+    ...     with ExitStack() as inner_stack:
+    ...         inner_stack.callback(print, "Callback: from inner context")
+    ...         print("Leaving inner context")
+    ...     print("Leaving outer context")
+    ...
+    Leaving inner context
+    Callback: from inner context
+    Leaving outer context
+    Callback: from outer context
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index 33ff12b..a9dce61 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -198,7 +198,9 @@
    >>>
 
 There are, however, enough ways to crash Python with :mod:`ctypes`, so you
-should be careful anyway.
+should be careful anyway.  The :mod:`faulthandler` module can be helpful in
+debugging crashes (e.g. from segmentation faults produced by erroneous C library
+calls).
 
 ``None``, integers, bytes objects and (unicode) strings are the only native
 Python objects that can directly be used as parameters in these function calls.
@@ -1907,8 +1909,8 @@
 
 .. function:: sizeof(obj_or_type)
 
-   Returns the size in bytes of a ctypes type or instance memory buffer. Does the
-   same as the C ``sizeof()`` function.
+   Returns the size in bytes of a ctypes type or instance memory buffer.
+   Does the same as the C ``sizeof`` operator.
 
 
 .. function:: string_at(address, size=-1)
diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst
index cd1915d..314636e 100644
--- a/Doc/library/curses.rst
+++ b/Doc/library/curses.rst
@@ -377,7 +377,7 @@
    is to be displayed.
 
 
-.. function:: newwin(begin_y, begin_x)
+.. function:: newwin(nlines, ncols)
               newwin(nlines, ncols, begin_y, begin_x)
 
    Return a new window, whose left-upper corner is at  ``(begin_y, begin_x)``, and
diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst
index bb268e1..e4f1eb2 100644
--- a/Doc/library/datetime.rst
+++ b/Doc/library/datetime.rst
@@ -1784,7 +1784,8 @@
 
 The full set of format codes supported varies across platforms, because Python
 calls the platform C library's :func:`strftime` function, and platform
-variations are common.
+variations are common.  To see the full set of format codes supported on your
+platform, consult the :manpage:`strftime(3)` documentation.
 
 The following is a list of all the format codes that the C standard (1989
 version) requires, and these work on all platforms with a standard C
@@ -1897,7 +1898,7 @@
    making assumptions about the output value. Field orderings will vary (for
    example, "month/day/year" versus "day/month/year"), and the output may
    contain Unicode characters encoded using the locale's default encoding (for
-   example, if the current locale is ``js_JP``, the default encoding could be
+   example, if the current locale is ``ja_JP``, the default encoding could be
    any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale`
    to determine the current locale's encoding).
 
diff --git a/Doc/library/dbm.rst b/Doc/library/dbm.rst
index e3d50b9..81a05c7 100644
--- a/Doc/library/dbm.rst
+++ b/Doc/library/dbm.rst
@@ -317,8 +317,9 @@
    database has to be created.  It defaults to octal ``0o666`` (and will be modified
    by the prevailing umask).
 
-   In addition to the methods provided by the :class:`collections.MutableMapping` class,
-   :class:`dumbdbm` objects provide the following method:
+   In addition to the methods provided by the
+   :class:`collections.abc.MutableMapping` class, :class:`dumbdbm` objects
+   provide the following method:
 
    .. method:: dumbdbm.sync()
 
diff --git a/Doc/library/development.rst b/Doc/library/development.rst
index 2368769..06e7048 100644
--- a/Doc/library/development.rst
+++ b/Doc/library/development.rst
@@ -23,4 +23,3 @@
    unittest.mock-examples.rst
    2to3.rst
    test.rst
-   venv.rst
diff --git a/Doc/library/difflib.rst b/Doc/library/difflib.rst
index ad1466e..5ab1a46 100644
--- a/Doc/library/difflib.rst
+++ b/Doc/library/difflib.rst
@@ -143,8 +143,8 @@
 
    By default, the diff control lines (those with ``***`` or ``---``) are created
    with a trailing newline.  This is helpful so that inputs created from
-   :func:`file.readlines` result in diffs that are suitable for use with
-   :func:`file.writelines` since both the inputs and outputs have trailing
+   :func:`io.IOBase.readlines` result in diffs that are suitable for use with
+   :func:`io.IOBase.writelines` since both the inputs and outputs have trailing
    newlines.
 
    For inputs that do not have trailing newlines, set the *lineterm* argument to
@@ -275,8 +275,8 @@
 
    By default, the diff control lines (those with ``---``, ``+++``, or ``@@``) are
    created with a trailing newline.  This is helpful so that inputs created from
-   :func:`file.readlines` result in diffs that are suitable for use with
-   :func:`file.writelines` since both the inputs and outputs have trailing
+   :func:`io.IOBase.readlines` result in diffs that are suitable for use with
+   :func:`io.IOBase.writelines` since both the inputs and outputs have trailing
    newlines.
 
    For inputs that do not have trailing newlines, set the *lineterm* argument to
@@ -629,10 +629,12 @@
 
       Compare two sequences of lines, and generate the delta (a sequence of lines).
 
-      Each sequence must contain individual single-line strings ending with newlines.
-      Such sequences can be obtained from the :meth:`readlines` method of file-like
-      objects.  The delta generated also consists of newline-terminated strings, ready
-      to be printed as-is via the :meth:`writelines` method of a file-like object.
+      Each sequence must contain individual single-line strings ending with
+      newlines.  Such sequences can be obtained from the
+      :meth:`~io.IOBase.readlines` method of file-like objects.  The delta
+      generated also consists of newline-terminated strings, ready to be
+      printed as-is via the :meth:`~io.IOBase.writelines` method of a
+      file-like object.
 
 
 .. _differ-examples:
@@ -642,7 +644,7 @@
 
 This example compares two texts. First we set up the texts, sequences of
 individual single-line strings ending with newlines (such sequences can also be
-obtained from the :meth:`readlines` method of file-like objects):
+obtained from the :meth:`~io.BaseIO.readlines` method of file-like objects):
 
    >>> text1 = '''  1. Beautiful is better than ugly.
    ...   2. Explicit is better than implicit.
diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst
index a546f68..78ddf7e 100644
--- a/Doc/library/dis.rst
+++ b/Doc/library/dis.rst
@@ -44,36 +44,39 @@
 :class:`Bytecode` object that provides easy access to details of the
 compiled code.
 
-.. class:: Bytecode
+.. class:: Bytecode(x, *, first_line=None)
 
-   The bytecode operations of a piece of code
+   Analyse the bytecode corresponding to a function, method, string of
+   source code, or a code object (as returned by :func:`compile`).
 
-   This is a convenient wrapper around many of the functions listed below.
-   Instantiate it with a function, method, string of code, or a code object
-   (as returned by :func:`compile`).
+   This is a convenience wrapper around many of the functions listed below,
+   most notably :func:`get_instructions`, as iterating over a
+   :class:`Bytecode` instance yields the bytecode operations as
+   :class:`Instruction` instances.
 
-   Iterating over this yields the bytecode operations as :class:`Instruction`
-   instances.
+   If *first_line* is not None, it indicates the line number that should
+   be reported for the first source line in the disassembled code.
+   Otherwise, the source line information (if any) is taken directly from
+   the disassembled code object.
 
    .. data:: codeobj
 
       The compiled code object.
 
-   .. method:: display_code(*, file=None)
+   .. data:: first_line
 
-      Print a formatted view of the bytecode operations, like :func:`dis`.
+      The first source line of the code object (if available)
+
+   .. method:: dis()
+
+      Return a formatted view of the bytecode operations (the same as
+      printed by :func:`dis`, but returned as a multi-line string).
 
    .. method:: info()
 
       Return a formatted multi-line string with detailed information about the
       code object, like :func:`code_info`.
 
-   .. method:: show_info(*, file=None)
-
-      Print the information about the code object as returned by :meth:`info`.
-
-   .. versionadded:: 3.4
-
 Example::
 
     >>> bytecode = dis.Bytecode(myfunc)
@@ -176,7 +179,7 @@
       Added ``file`` parameter
 
 
-.. function:: get_instructions(x, *, line_offset=0)
+.. function:: get_instructions(x, *, first_line=None)
 
    Return an iterator over the instructions in the supplied function, method,
    source code string or code object.
@@ -184,8 +187,10 @@
    The iterator generates a series of :class:`Instruction` named tuples
    giving the details of each operation in the supplied code.
 
-   The given *line_offset* is added to the ``starts_line`` attribute of any
-   instructions that start a new line.
+   If *first_line* is not None, it indicates the line number that should
+   be reported for the first source line in the disassembled code.
+   Otherwise, the source line information (if any) is taken directly from
+   the disassembled code object.
 
    .. versionadded:: 3.4
 
@@ -846,10 +851,17 @@
 
 .. opcode:: MAKE_FUNCTION (argc)
 
-   Pushes a new function object on the stack.  TOS is the
-   :term:`qualified name` of the function; TOS1 is the code associated with
-   the function.  The function object is defined to have *argc* default parameters,
-   which are found below TOS1.
+   Pushes a new function object on the stack.  From bottom to top, the consumed
+   stack must consist of
+
+   * ``argc & 0xFF`` default argument objects in positional order
+   * ``(argc >> 8) & 0xFF`` pairs of name and default argument, with the name
+     just below the object on the stack, for keyword-only parameters
+   * ``(argc >> 16) & 0x7FFF`` parameter annotation objects
+   * a tuple listing the parameter names for the annotations (only if there are
+     ony annotation objects)
+   * the code associated with the function (at TOS1)
+   * the :term:`qualified name` of the function (at TOS)
 
 
 .. opcode:: MAKE_CLOSURE (argc)
diff --git a/Doc/library/distribution.rst b/Doc/library/distribution.rst
new file mode 100644
index 0000000..fb3f5df
--- /dev/null
+++ b/Doc/library/distribution.rst
@@ -0,0 +1,14 @@
+***********************************
+Software Packaging and Distribution
+***********************************
+
+These libraries help you with publishing and installing Python software.
+While these modules are designed to work in conjunction with the
+`Python Package Index <https://pypi.python.org>`__, they can also be used
+with a local index server, or without any index server at all.
+
+.. toctree::
+
+   distutils.rst
+   ensurepip.rst
+   venv.rst
diff --git a/Doc/library/distutils.rst b/Doc/library/distutils.rst
index 11a2949..6666a9b 100644
--- a/Doc/library/distutils.rst
+++ b/Doc/library/distutils.rst
@@ -20,6 +20,6 @@
    :ref:`distutils-index`
       The manual for developers and packagers of Python modules.  This describes
       how to prepare :mod:`distutils`\ -based packages so that they may be
-      easily installed into an existing Python installation.  If also contains
+      easily installed into an existing Python installation.  It also contains
       instructions for end-users wanting to install a distutils-based package,
       :ref:`install-index`.
diff --git a/Doc/library/email.contentmanager.rst b/Doc/library/email.contentmanager.rst
new file mode 100644
index 0000000..f3ba794
--- /dev/null
+++ b/Doc/library/email.contentmanager.rst
@@ -0,0 +1,427 @@
+:mod:`email.contentmanager`: Managing MIME Content
+--------------------------------------------------
+
+.. module:: email.contentmanager
+   :synopsis: Storing and Retrieving Content from MIME Parts
+
+.. moduleauthor:: R. David Murray <rdmurray@bitdance.com>
+.. sectionauthor:: R. David Murray <rdmurray@bitdance.com>
+
+
+.. note::
+
+   The contentmanager module has been included in the standard library on a
+   :term:`provisional basis <provisional package>`. Backwards incompatible
+   changes (up to and including removal of the module) may occur if deemed
+   necessary by the core developers.
+
+.. versionadded:: 3.4
+   as a :term:`provisional module <provisional package>`.
+
+The :mod:`~email.message` module provides a class that can represent an
+arbitrary email message.  That basic message model has a useful and flexible
+API, but it provides only a lower-level API for interacting with the generic
+parts of a message (the headers, generic header parameters, and the payload,
+which may be a list of sub-parts).  This module provides classes and tools
+that provide an enhanced and extensible API for dealing with various specific
+types of content, including the ability to retrieve the content of the message
+as a specialized object type rather than as a simple bytes object.  The module
+automatically takes care of the RFC-specified MIME details (required headers
+and parameters, etc.) for the certain common content types content properties,
+and support for additional types can be added by an application using the
+extension mechanisms.
+
+This module defines the eponymous "Content Manager" classes.  The base
+:class:`.ContentManager` class defines an API for registering content
+management functions which extract data from ``Message`` objects or insert data
+and headers into ``Message`` objects, thus providing a way of converting
+between ``Message`` objects containing data and other representations of that
+data (Python data types, specialized Python objects, external files, etc).  The
+module also defines one concrete content manager: :data:`raw_data_manager`
+converts between MIME content types and ``str`` or ``bytes`` data.  It also
+provides a convenient API for managing the MIME parameters when inserting
+content into ``Message``\ s.  It also handles inserting and extracting
+``Message`` objects when dealing with the ``message/rfc822`` content type.
+
+Another part of the enhanced interface is subclasses of
+:class:`~email.message.Message` that provide new convenience API functions,
+including convenience methods for calling the Content Managers derived from
+this module.
+
+.. note::
+
+   Although :class:`.EmailMessage` and :class:`.MIMEPart` are currently
+   documented in this module because of the provisional nature of the code, the
+   implementation lives in the :mod:`email.message` module.
+
+
+.. class:: EmailMessage(policy=default)
+
+   If *policy* is specified (it must be an instance of a :mod:`~email.policy`
+   class) use the rules it specifies to udpate and serialize the representation
+   of the message.  If *policy* is not set, use the
+   :class:`~email.policy.default` policy, which follows the rules of the email
+   RFCs except for line endings (instead of the RFC mandated ``\r\n``, it uses
+   the Python standard ``\n`` line endings).  For more information see the
+   :mod:`~email.policy` documentation.
+
+   This class is a subclass of :class:`~email.message.Message`.  It adds
+   the following methods:
+
+
+   .. attribute:: is_attachment
+
+      Set to ``True`` if there is a :mailheader:`Content-Disposition` header
+      and its (case insensitive) value is ``attachment``, ``False`` otherwise.
+
+
+   .. method:: get_body(preferencelist=('related', 'html', 'plain'))
+
+      Return the MIME part that is the best candidate to be the "body" of the
+      message.
+
+      *preferencelist* must be a sequence of strings from the set ``related``,
+      ``html``, and ``plain``, and indicates the order of preference for the
+      content type of the part returned.
+
+      Start looking for candidate matches with the object on which the
+      ``get_body`` method is called.
+
+      If ``related`` is not included in *preferencelist*, consider the root
+      part (or subpart of the root part) of any related encountered as a
+      candidate if the (sub-)part matches a preference.
+
+      When encountering a ``multipart/related``, check the ``start`` parameter
+      and if a part with a matching :mailheader:`Content-ID` is found, consider
+      only it when looking for candidate matches.  Otherwise consider only the
+      first (default root) part of the ``multipart/related``.
+
+      If a part has a :mailheader:``Content-Disposition`` header, only consider
+      the part a candidate match if the value of the header is ``inline``.
+
+      If none of the candidates matches any of the preferences in
+      *preferneclist*, return ``None``.
+
+      Notes: (1) For most applications the only *preferencelist* combinations
+      that really make sense are ``('plain',)``, ``('html', 'plain')``, and the
+      default, ``('related', 'html', 'plain')``.  (2) Because matching starts
+      with the object on which ``get_body`` is called, calling ``get_body`` on
+      a ``multipart/related`` will return the object itself unless
+      *preferencelist* has a non-default value. (3) Messages (or message parts)
+      that do not specify a :mailheader:`Content-Type` or whose
+      :mailheader:`Content-Type` header is invalid will be treated as if they
+      are of type ``text/plain``, which may occasionally cause ``get_body`` to
+      return unexpected results.
+
+
+   .. method:: iter_attachments()
+
+      Return an iterator over all of the parts of the message that are not
+      candidate "body" parts.  That is, skip the first occurrence of each of
+      ``text/plain``, ``text/html``, ``multipart/related``, or
+      ``multipart/alternative`` (unless they are explicitly marked as
+      attachments via :mailheader:`Content-Disposition: attachment`), and
+      return all remaining parts.  When applied directly to a
+      ``multipart/related``, return an iterator over the all the related parts
+      except the root part (ie: the part pointed to by the ``start`` parameter,
+      or the first part if there is no ``start`` parameter or the ``start``
+      parameter doesn't match the :mailheader:`Content-ID` of any of the
+      parts).  When applied directly to a ``multipart/alternative`` or a
+      non-``multipart``, return an empty iterator.
+
+
+   .. method:: iter_parts()
+
+      Return an iterator over all of the immediate sub-parts of the message,
+      which will be empty for a non-``multipart``.  (See also
+      :meth:``~email.message.walk``.)
+
+
+   .. method:: get_content(*args, content_manager=None, **kw)
+
+      Call the ``get_content`` method of the *content_manager*, passing self
+      as the message object, and passing along any other arguments or keywords
+      as additional arguments.  If *content_manager* is not specified, use
+      the ``content_manager`` specified by the current :mod:`~email.policy`.
+
+
+   .. method:: set_content(*args, content_manager=None, **kw)
+
+      Call the ``set_content`` method of the *content_manager*, passing self
+      as the message object, and passing along any other arguments or keywords
+      as additional arguments.  If *content_manager* is not specified, use
+      the ``content_manager`` specified by the current :mod:`~email.policy`.
+
+
+   .. method:: make_related(boundary=None)
+
+      Convert a non-``multipart`` message into a ``multipart/related`` message,
+      moving any existing :mailheader:`Content-` headers and payload into a
+      (new) first part of the ``multipart``.  If *boundary* is specified, use
+      it as the boundary string in the multipart, otherwise leave the boundary
+      to be automatically created when it is needed (for example, when the
+      message is serialized).
+
+
+   .. method:: make_alternative(boundary=None)
+
+      Convert a non-``multipart`` or a ``multipart/related`` into a
+      ``multipart/alternative``, moving any existing :mailheader:`Content-`
+      headers and payload into a (new) first part of the ``multipart``.  If
+      *boundary* is specified, use it as the boundary string in the multipart,
+      otherwise leave the boundary to be automatically created when it is
+      needed (for example, when the message is serialized).
+
+
+   .. method:: make_mixed(boundary=None)
+
+      Convert a non-``multipart``, a ``multipart/related``, or a
+      ``multipart-alternative`` into a ``multipart/mixed``, moving any existing
+      :mailheader:`Content-` headers and payload into a (new) first part of the
+      ``multipart``.  If *boundary* is specified, use it as the boundary string
+      in the multipart, otherwise leave the boundary to be automatically
+      created when it is needed (for example, when the message is serialized).
+
+
+   .. method:: add_related(*args, content_manager=None, **kw)
+
+      If the message is a ``multipart/related``, create a new message
+      object, pass all of the arguments to its :meth:`set_content` method,
+      and :meth:`~email.message.Message.attach` it to the ``multipart``.  If
+      the message is a non-``multipart``, call :meth:`make_related` and then
+      proceed as above.  If the message is any other type of ``multipart``,
+      raise a :exc:`TypeError`. If *content_manager* is not specified, use
+      the ``content_manager`` specified by the current :mod:`~email.policy`.
+      If the added part has no :mailheader:`Content-Disposition` header,
+      add one with the value ``inline``.
+
+
+   .. method:: add_alternative(*args, content_manager=None, **kw)
+
+      If the message is a ``multipart/alternative``, create a new message
+      object, pass all of the arguments to its :meth:`set_content` method, and
+      :meth:`~email.message.Message.attach` it to the ``multipart``.  If the
+      message is a non-``multipart`` or ``multipart/related``, call
+      :meth:`make_alternative` and then proceed as above.  If the message is
+      any other type of ``multipart``, raise a :exc:`TypeError`. If
+      *content_manager* is not specified, use the ``content_manager`` specified
+      by the current :mod:`~email.policy`.
+
+
+   .. method:: add_attachment(*args, content_manager=None, **kw)
+
+      If the message is a ``multipart/mixed``, create a new message object,
+      pass all of the arguments to its :meth:`set_content` method, and
+      :meth:`~email.message.Message.attach` it to the ``multipart``.  If the
+      message is a non-``multipart``, ``multipart/related``, or
+      ``multipart/alternative``, call :meth:`make_mixed` and then proceed as
+      above. If *content_manager* is not specified, use the ``content_manager``
+      specified by the current :mod:`~email.policy`.  If the added part
+      has no :mailheader:`Content-Disposition` header, add one with the value
+      ``attachment``.  This method can be used both for explicit attachments
+      (:mailheader:`Content-Disposition: attachment` and ``inline`` attachments
+      (:mailheader:`Content-Disposition: inline`), by passing appropriate
+      options to the ``content_manager``.
+
+
+   .. method:: clear()
+
+      Remove the payload and all of the headers.
+
+
+   .. method:: clear_content()
+
+      Remove the payload and all of the :exc:`Content-` headers, leaving
+      all other headers intact and in their original order.
+
+
+.. class:: ContentManager()
+
+   Base class for content managers.  Provides the standard registry mechanisms
+   to register converters between MIME content and other representations, as
+   well as the ``get_content`` and ``set_content`` dispatch methods.
+
+
+   .. method:: get_content(msg, *args, **kw)
+
+      Look up a handler function based on the ``mimetype`` of *msg* (see next
+      paragraph), call it, passing through all arguments, and return the result
+      of the call.  The expectation is that the handler will extract the
+      payload from *msg* and return an object that encodes information about
+      the extracted data.
+
+      To find the handler, look for the following keys in the registry,
+      stopping with the first one found:
+
+            * the string representing the full MIME type (``maintype/subtype``)
+            * the string representing the ``maintype``
+            * the empty string
+
+      If none of these keys produce a handler, raise a :exc:`KeyError` for the
+      full MIME type.
+
+
+   .. method:: set_content(msg, obj, *args, **kw)
+
+      If the ``maintype`` is ``multipart``, raise a :exc:`TypeError`; otherwise
+      look up a handler function based on the type of *obj* (see next
+      paragraph), call :meth:`~email.message.EmailMessage.clear_content` on the
+      *msg*, and call the handler function, passing through all arguments.  The
+      expectation is that the handler will transform and store *obj* into
+      *msg*, possibly making other changes to *msg* as well, such as adding
+      various MIME headers to encode information needed to interpret the stored
+      data.
+
+      To find the handler, obtain the type of *obj* (``typ = type(obj)``), and
+      look for the following keys in the registry, stopping with the first one
+      found:
+
+           * the type itself (``typ``)
+           * the type's fully qualified name (``typ.__module__ + '.' +
+             typ.__qualname__``).
+           * the type's qualname (``typ.__qualname__``)
+           * the type's name (``typ.__name__``).
+
+      If none of the above match, repeat all of the checks above for each of
+      the types in the :term:`MRO` (``typ.__mro__``).  Finally, if no other key
+      yields a handler, check for a handler for the key ``None``.  If there is
+      no handler for ``None``, raise a :exc:`KeyError` for the fully
+      qualified name of the type.
+
+      Also add a :mailheader:`MIME-Version` header if one is not present (see
+      also :class:`.MIMEPart`).
+
+
+   .. method:: add_get_handler(key, handler)
+
+      Record the function *handler* as the handler for *key*.  For the possible
+      values of *key*, see :meth:`get_content`.
+
+
+   .. method:: add_set_handler(typekey, handler)
+
+      Record *handler* as the function to call when an object of a type
+      matching *typekey* is passed to :meth:`set_content`.  For the possible
+      values of *typekey*, see :meth:`set_content`.
+
+
+.. class:: MIMEPart(policy=default)
+
+    This class represents a subpart of a MIME message.  It is identical to
+    :class:`EmailMessage`, except that no :mailheader:`MIME-Version` headers are
+    added when :meth:`~EmailMessage.set_content` is called, since sub-parts do
+    not need their own :mailheader:`MIME-Version` headers.
+
+
+Content Manager Instances
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Currently the email package provides only one concrete content manager,
+:data:`raw_data_manager`, although more may be added in the future.
+:data:`raw_data_manager` is the
+:attr:`~email.policy.EmailPolicy.content_manager` provided by
+:attr:`~email.policy.EmailPolicy` and its derivatives.
+
+
+.. data:: raw_data_manager
+
+   This content manager provides only a minimum interface beyond that provided
+   by :class:`~email.message.Message` itself:  it deals only with text, raw
+   byte strings, and :class:`~email.message.Message` objects.  Nevertheless, it
+   provides significant advantages compared to the base API: ``get_content`` on
+   a text part will return a unicode string without the application needing to
+   manually decode it, ``set_content`` provides a rich set of options for
+   controlling the headers added to a part and controlling the content transfer
+   encoding, and it enables the use of the various ``add_`` methods, thereby
+   simplifying the creation of multipart messages.
+
+   .. method:: get_content(msg, errors='replace')
+
+      Return the payload of the part as either a string (for ``text`` parts), a
+      :class:`~email.message.EmailMessage` object (for ``message/rfc822``
+      parts), or a ``bytes`` object (for all other non-multipart types).  Raise
+      a :exc:`KeyError` if called on a ``multipart``.  If the part is a
+      ``text`` part and *errors* is specified, use it as the error handler when
+      decoding the payload to unicode.  The default error handler is
+      ``replace``.
+
+   .. method:: set_content(msg, <'str'>, subtype="plain", charset='utf-8' \
+                           cte=None, \
+                           disposition=None, filename=None, cid=None, \
+                           params=None, headers=None)
+               set_content(msg, <'bytes'>, maintype, subtype, cte="base64", \
+                           disposition=None, filename=None, cid=None, \
+                           params=None, headers=None)
+               set_content(msg, <'Message'>, cte=None, \
+                           disposition=None, filename=None, cid=None, \
+                           params=None, headers=None)
+               set_content(msg, <'list'>, subtype='mixed', \
+                           disposition=None, filename=None, cid=None, \
+                           params=None, headers=None)
+
+       Add headers and payload to *msg*:
+
+       Add a :mailheader:`Content-Type` header with a ``maintype/subtype``
+       value.
+
+           * For ``str``, set the MIME ``maintype`` to ``text``, and set the
+             subtype to *subtype* if it is specified, or ``plain`` if it is not.
+           * For ``bytes``, use the specified *maintype* and *subtype*, or
+             raise a :exc:`TypeError` if they are not specified.
+           * For :class:`~email.message.Message` objects, set the maintype to
+             ``message``, and set the subtype to *subtype* if it is specified
+             or ``rfc822`` if it is not.  If *subtype* is ``partial``, raise an
+             error (``bytes`` objects must be used to construct
+             ``message/partial`` parts).
+           * For *<'list'>*, which should be a list of
+             :class:`~email.message.Message` objects, set the ``maintype`` to
+             ``multipart``, and the ``subtype`` to *subtype* if it is
+             specified, and ``mixed`` if it is not.  If the message parts in
+             the *<'list'>* have :mailheader:`MIME-Version` headers, remove
+             them.
+
+       If *charset* is provided (which is valid only for ``str``), encode the
+       string to bytes using the specified character set.  The default is
+       ``utf-8``.  If the specified *charset* is a known alias for a standard
+       MIME charset name, use the standard charset instead.
+
+       If *cte* is set, encode the payload using the specified content transfer
+       encoding, and set the :mailheader:`Content-Transfer-Endcoding` header to
+       that value.  For ``str`` objects, if it is not set use heuristics to
+       determine the most compact encoding.  Possible values for *cte* are
+       ``quoted-printable``, ``base64``, ``7bit``, ``8bit``, and ``binary``.
+       If the input cannot be encoded in the specified encoding (eg: ``7bit``),
+       raise a :exc:`ValueError`.  For :class:`~email.message.Message`, per
+       :rfc:`2046`, raise an error if a *cte* of ``quoted-printable`` or
+       ``base64`` is requested for *subtype* ``rfc822``, and for any *cte*
+       other than ``7bit`` for *subtype* ``external-body``.  For
+       ``message/rfc822``, use ``8bit`` if *cte* is not specified.  For all
+       other values of *subtype*, use ``7bit``.
+
+       .. note:: A *cte* of ``binary`` does not actually work correctly yet.
+          The ``Message`` object as modified by ``set_content`` is correct, but
+          :class:`~email.generator.BytesGenerator` does not serialize it
+          correctly.
+
+       If *disposition* is set, use it as the value of the
+       :mailheader:`Content-Disposition` header.  If not specified, and
+       *filename* is specified, add the header with the value ``attachment``.
+       If it is not specified and *filename* is also not specified, do not add
+       the header.  The only valid values for *disposition* are ``attachment``
+       and ``inline``.
+
+       If *filename* is specified, use it as the value of the ``filename``
+       parameter of the :mailheader:`Content-Disposition` header.  There is no
+       default.
+
+       If *cid* is specified, add a :mailheader:`Content-ID` header with
+       *cid* as its value.
+
+       If *params* is specified, iterate its ``items`` method and use the
+       resulting ``(key, value)`` pairs to set additional paramters on the
+       :mailheader:`Content-Type` header.
+
+       If *headers* is specified and is a list of strings of the form
+       ``headername: headervalue`` or a list of ``header`` objects
+       (distinguised from strings by having a ``name`` attribute), add the
+       headers to *msg*.
diff --git a/Doc/library/email.message.rst b/Doc/library/email.message.rst
index 4a34c36..f278a0a 100644
--- a/Doc/library/email.message.rst
+++ b/Doc/library/email.message.rst
@@ -33,10 +33,11 @@
 
 .. class:: Message(policy=compat32)
 
-   The *policy* argument determiens the :mod:`~email.policy` that will be used
-   to update the message model.  The default value, :class:`compat32
-   <email.policy.Compat32>` maintains backward compatibility with the
-   Python 3.2 version of the email package.  For more information see the
+   If *policy* is specified (it must be an instance of a :mod:`~email.policy`
+   class) use the rules it specifies to udpate and serialize the representation
+   of the message.  If *policy* is not set, use the :class`compat32
+   <email.policy.Compat32>` policy, which maintains backward compatibility with
+   the Python 3.2 version of the email package.  For more information see the
    :mod:`~email.policy` documentation.
 
    .. versionchanged:: 3.3 The *policy* keyword argument was added.
@@ -465,7 +466,8 @@
       to ``False``.
 
 
-   .. method:: set_param(param, value, header='Content-Type', requote=True, charset=None, language='')
+   .. method:: set_param(param, value, header='Content-Type', requote=True,
+                         charset=None, language='', replace=False)
 
       Set a parameter in the :mailheader:`Content-Type` header.  If the
       parameter already exists in the header, its value will be replaced with
@@ -482,6 +484,12 @@
       language, defaulting to the empty string.  Both *charset* and *language*
       should be strings.
 
+      If *replace* is ``False`` (the default) the header is moved to the
+      end of the list of headers.  If *replace* is ``True``, the header
+      will be updated in place.
+
+      .. versionchanged: 3.4 ``replace`` keyword was added.
+
 
    .. method:: del_param(param, header='content-type', requote=True)
 
diff --git a/Doc/library/email.policy.rst b/Doc/library/email.policy.rst
index 5856879..c2f9e6a 100644
--- a/Doc/library/email.policy.rst
+++ b/Doc/library/email.policy.rst
@@ -371,7 +371,7 @@
    to) :rfc:`5322`, :rfc:`2047`, and the current MIME RFCs.
 
    This policy adds new header parsing and folding algorithms.  Instead of
-   simple strings, headers are custom objects with custom attributes depending
+   simple strings, headers are ``str`` subclasses with attributes that depend
    on the type of the field.  The parsing and folding algorithm fully implement
    :rfc:`2047` and :rfc:`5322`.
 
@@ -408,6 +408,20 @@
       fields are treated as unstructured.  This list will be completed before
       the extension is marked stable.)
 
+   .. attribute:: content_manager
+
+      An object with at least two methods: get_content and set_content.  When
+      the :meth:`~email.message.Message.get_content` or
+      :meth:`~email.message.Message.set_content` method of a
+      :class:`~email.message.Message` object is called, it calls the
+      corresponding method of this object, passing it the message object as its
+      first argument, and any arguments or keywords that were passed to it as
+      additional arguments.  By default ``content_manager`` is set to
+      :data:`~email.contentmanager.raw_data_manager`.
+
+      .. versionadded 3.4
+
+
    The class provides the following concrete implementations of the abstract
    methods of :class:`Policy`:
 
@@ -427,7 +441,7 @@
       The name is returned unchanged.  If the input value has a ``name``
       attribute and it matches *name* ignoring case, the value is returned
       unchanged.  Otherwise the *name* and *value* are passed to
-      ``header_factory``, and the resulting custom header object is returned as
+      ``header_factory``, and the resulting header object is returned as
       the value.  In this case a ``ValueError`` is raised if the input value
       contains CR or LF characters.
 
@@ -435,7 +449,7 @@
 
       If the value has a ``name`` attribute, it is returned to unmodified.
       Otherwise the *name*, and the *value* with any CR or LF characters
-      removed, are passed to the ``header_factory``, and the resulting custom
+      removed, are passed to the ``header_factory``, and the resulting
       header object is returned.  Any surrogateescaped bytes get turned into
       the unicode unknown-character glyph.
 
@@ -445,9 +459,9 @@
       A value is considered to be a 'source value' if and only if it does not
       have a ``name`` attribute (having a ``name`` attribute means it is a
       header object of some sort).  If a source value needs to be refolded
-      according to the policy, it is converted into a custom header object by
+      according to the policy, it is converted into a header object by
       passing the *name* and the *value* with any CR and LF characters removed
-      to the ``header_factory``.  Folding of a custom header object is done by
+      to the ``header_factory``.  Folding of a header object is done by
       calling its ``fold`` method with the current policy.
 
       Source values are split into lines using :meth:`~str.splitlines`.  If
@@ -502,23 +516,23 @@
 the email package is changed from the Python 3.2 API in the following ways:
 
    * Setting a header on a :class:`~email.message.Message` results in that
-     header being parsed and a custom header object created.
+     header being parsed and a header object created.
 
    * Fetching a header value from a :class:`~email.message.Message` results
-     in that header being parsed and a custom header object created and
+     in that header being parsed and a header object created and
      returned.
 
-   * Any custom header object, or any header that is refolded due to the
+   * Any header object, or any header that is refolded due to the
      policy settings, is folded using an algorithm that fully implements the
      RFC folding algorithms, including knowing where encoded words are required
      and allowed.
 
 From the application view, this means that any header obtained through the
-:class:`~email.message.Message` is a custom header object with custom
+:class:`~email.message.Message` is a header object with extra
 attributes, whose string value is the fully decoded unicode value of the
 header.  Likewise, a header may be assigned a new value, or a new header
 created, using a unicode string, and the policy will take care of converting
 the unicode string into the correct RFC encoded form.
 
-The custom header objects and their attributes are described in
+The header objects and their attributes are described in
 :mod:`~email.headerregistry`.
diff --git a/Doc/library/email.rst b/Doc/library/email.rst
index a6cbbce..331d2ef 100644
--- a/Doc/library/email.rst
+++ b/Doc/library/email.rst
@@ -53,6 +53,7 @@
    email.generator.rst
    email.policy.rst
    email.headerregistry.rst
+   email.contentmanager.rst
    email.mime.rst
    email.header.rst
    email.charset.rst
diff --git a/Doc/library/ensurepip.rst b/Doc/library/ensurepip.rst
new file mode 100644
index 0000000..3756d4f
--- /dev/null
+++ b/Doc/library/ensurepip.rst
@@ -0,0 +1,125 @@
+:mod:`ensurepip` --- Bootstrapping the ``pip`` installer
+========================================================
+
+.. module:: ensurepip
+   :synopsis: Bootstrapping the ``pip`` installer into an existing Python
+              installation or virtual environment.
+
+The :mod:`ensurepip` package provides support for bootstrapping the ``pip``
+installer into an existing Python installation or virtual environment. This
+bootstrapping approach reflects the fact that ``pip`` is an independent
+project with its own release cycle, and the latest available stable version
+is bundled with maintenance and feature releases of the CPython reference
+interpreter.
+
+In most cases, end users of Python shouldn't need to invoke this module
+directly (as ``pip`` should be bootstrapped by default), but it may be
+needed if installing ``pip`` was skipped when installing Python (or
+when creating a virtual environment) or after explicitly uninstalling
+``pip``.
+
+.. versionadded:: 3.4
+
+.. note::
+
+   This module *does not* access the internet. All of the components
+   needed to bootstrap ``pip`` are included as internal parts of the
+   package.
+
+.. seealso::
+
+   :ref:`install-index`
+      The end user guide for installing Python packages
+
+   :pep:`453`: Explicit bootstrapping of pip in Python installations
+      The original rationale and specification for this module.
+
+
+Command line interface
+----------------------
+
+The command line interface is invoked using the interpreter's ``-m`` switch.
+
+The simplest possible invocation is::
+
+    python -m ensurepip
+
+This invocation will install ``pip`` if it is not already installed,
+but otherwise does nothing. To ensure the installed version of ``pip``
+is at least as recent as the one bundled with ``ensurepip``, pass the
+``--upgrade`` option::
+
+    python -m ensurepip --upgrade
+
+By default, ``pip`` is installed into the current virtual environment
+(if one is active) or into the system site packages (if there is no
+active virtual environment). The installation location can be controlled
+through two additional command line options:
+
+* ``--root <dir>``: Installs ``pip`` relative to the given root directory
+  rather than the root of the currently active virtual environment (if any)
+  or the default root for the current Python installation.
+* ``--user``: Installs ``pip`` into the user site packages directory rather
+  than globally for the current Python installation (this option is not
+  permitted inside an active virtual environment).
+
+By default, the scripts ``pipX`` and ``pipX.Y`` will be installed (where
+X.Y stands for the version of Python used to invoke ``ensurepip``). The
+scripts installed can be controlled through two additional command line
+options:
+
+* ``--altinstall``: if an alternate installation is requested, the ``pipX``
+  script will *not* be installed.
+
+* ``--default-pip``: if a "default pip" installation is requested, the
+   ``pip`` script will be installed in addition to the two regular scripts.
+
+Providing both of the script selection options will trigger an exception.
+
+
+Module API
+----------
+
+:mod:`ensurepip` exposes two functions for programmatic use:
+
+.. function:: version()
+
+   Returns a string specifying the bundled version of pip that will be
+   installed when bootstrapping an environment.
+
+.. function:: bootstrap(root=None, upgrade=False, user=False, \
+                        altinstall=False, default_pip=False, \
+                        verbosity=0)
+
+   Bootstraps ``pip`` into the current or designated environment.
+
+   *root* specifies an alternative root directory to install relative to.
+   If *root* is None, then installation uses the default install location
+   for the current environment.
+
+   *upgrade* indicates whether or not to upgrade an existing installation
+   of an earlier version of ``pip`` to the bundled version.
+
+   *user* indicates whether to use the user scheme rather than installing
+   globally.
+
+   By default, the scripts ``pipX`` and ``pipX.Y`` will be installed (where
+   X.Y stands for the current version of Python).
+
+   If *altinstall* is set, then ``pipX`` will *not* be installed.
+
+   If *default_pip* is set, then ``pip`` will be installed in addition to
+   the two regular scripts.
+
+   Setting both *altinstall* and *default_pip* will trigger
+   :exc:`ValueError`.
+
+   *verbosity* controls the level of output to :data:`sys.stdout` from the
+   bootstrapping operation.
+
+   .. note::
+
+      The bootstrapping process may install additional modules required by
+      ``pip``, but other software should not assume those dependencies will
+      always be present by default (as the dependencies may be removed in a
+      future version of ``pip``).
diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst
index 0c46e1c..c2030fa 100644
--- a/Doc/library/enum.rst
+++ b/Doc/library/enum.rst
@@ -250,7 +250,7 @@
     True
 
 Comparisons against non-enumeration values will always compare not equal
-(again, class:`IntEnum` was explicitly designed to behave differently, see
+(again, :class:`IntEnum` was explicitly designed to behave differently, see
 below)::
 
     >>> Color.blue == 2
@@ -371,8 +371,8 @@
     >>> list(Animal)
     [<Animal.ant: 1>, <Animal.bee: 2>, <Animal.cat: 3>, <Animal.dog: 4>]
 
-The semantics of this API resemble :class:`namedtuple`. The first argument
-of the call to :class:`Enum` is the name of the enumeration.
+The semantics of this API resemble :class:`~collections.namedtuple`. The first
+argument of the call to :class:`Enum` is the name of the enumeration.
 
 The second argument is the *source* of enumeration member names.  It can be a
 whitespace-separated string of names, a sequence of names, a sequence of
@@ -594,8 +594,8 @@
 .. note::
 
     This is a useful example for subclassing Enum to add or change other
-    behaviors as well as disallowing aliases.  If the only change desired is
-    no aliases allowed the :func:`unique` decorator can be used instead.
+    behaviors as well as disallowing aliases.  If the only desired change is
+    disallowing aliases, the :func:`unique` decorator can be used instead.
 
 
 Planet
@@ -671,11 +671,11 @@
     ...
     AttributeError: 'Color' object has no attribute 'blue'
 
- Likewise, the :attr:`__members__` is only available on the class.
+Likewise, the :attr:`__members__` is only available on the class.
 
- If you give your :class:`Enum` subclass extra methods, like the `Planet`_
- class above, those methods will show up in a :func:`dir` of the member,
- but not of the class::
+If you give your :class:`Enum` subclass extra methods, like the `Planet`_
+class above, those methods will show up in a :func:`dir` of the member,
+but not of the class::
 
     >>> dir(Planet)
     ['EARTH', 'JUPITER', 'MARS', 'MERCURY', 'NEPTUNE', 'SATURN', 'URANUS', 'VENUS', '__class__', '__doc__', '__members__', '__module__']
diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst
index ece035d..bcaed24 100644
--- a/Doc/library/exceptions.rst
+++ b/Doc/library/exceptions.rst
@@ -146,10 +146,9 @@
 
 .. exception:: EOFError
 
-   Raised when one of the built-in functions (:func:`input` or :func:`raw_input`)
-   hits an end-of-file condition (EOF) without reading any data. (N.B.: the
-   :meth:`file.read` and :meth:`file.readline` methods return an empty string
-   when they hit EOF.)
+   Raised when the :func:`input` function hits an end-of-file condition (EOF)
+   without reading any data. (N.B.: the :meth:`io.IOBase.read` and
+   :meth:`io.IOBase.readline` methods return an empty string when they hit EOF.)
 
 
 .. exception:: FloatingPointError
@@ -356,7 +355,7 @@
    if it has another type (such as a string), the object's value is printed and
    the exit status is one.
 
-   Instances have an attribute :attr:`code` which is set to the proposed exit
+   Instances have an attribute :attr:`!code` which is set to the proposed exit
    status or error message (defaulting to ``None``). Also, this exception derives
    directly from :exc:`BaseException` and not :exc:`Exception`, since it is not
    technically an error.
@@ -366,7 +365,7 @@
    executed, and so that a debugger can execute a script without running the risk
    of losing control.  The :func:`os._exit` function can be used if it is
    absolutely positively necessary to exit immediately (for example, in the child
-   process after a call to :func:`fork`).
+   process after a call to :func:`os.fork`).
 
    The exception inherits from :exc:`BaseException` instead of :exc:`Exception` so
    that it is not accidentally caught by code that catches :exc:`Exception`.  This
@@ -629,7 +628,7 @@
 
 .. exception:: BytesWarning
 
-   Base class for warnings related to :class:`bytes` and :class:`buffer`.
+   Base class for warnings related to :class:`bytes` and :class:`bytearray`.
 
 
 .. exception:: ResourceWarning
diff --git a/Doc/library/faulthandler.rst b/Doc/library/faulthandler.rst
index 3c33621..61bc503 100644
--- a/Doc/library/faulthandler.rst
+++ b/Doc/library/faulthandler.rst
@@ -27,6 +27,7 @@
 * Only the filename, the function name and the line number are
   displayed. (no source code)
 * It is limited to 100 frames and 100 threads.
+* The order is reversed: the most recent call is shown first.
 
 By default, the Python traceback is written to :data:`sys.stderr`. To see
 tracebacks, applications must be run in the terminal. A log file can
@@ -129,7 +130,7 @@
     >>> ctypes.string_at(0)
     Fatal Python error: Segmentation fault
 
-    Current thread 0x00007fb899f39700:
+    Current thread 0x00007fb899f39700 (most recent call first):
       File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_at
       File "<stdin>", line 1 in <module>
     Segmentation fault
diff --git a/Doc/library/fcntl.rst b/Doc/library/fcntl.rst
index 9a9cdc1..8e932fb 100644
--- a/Doc/library/fcntl.rst
+++ b/Doc/library/fcntl.rst
@@ -1,5 +1,5 @@
-:mod:`fcntl` --- The :func:`fcntl` and :func:`ioctl` system calls
-=================================================================
+:mod:`fcntl` --- The ``fcntl`` and ``ioctl`` system calls
+=========================================================
 
 .. module:: fcntl
    :platform: Unix
@@ -17,7 +17,8 @@
 All functions in this module take a file descriptor *fd* as their first
 argument.  This can be an integer file descriptor, such as returned by
 ``sys.stdin.fileno()``, or a :class:`io.IOBase` object, such as ``sys.stdin``
-itself, which provides a :meth:`fileno` that returns a genuine file descriptor.
+itself, which provides a :meth:`~io.IOBase.fileno` that returns a genuine file
+descriptor.
 
 .. versionchanged:: 3.3
    Operations in this module used to raise a :exc:`IOError` where they now
@@ -29,10 +30,11 @@
 
 .. function:: fcntl(fd, op[, arg])
 
-   Perform the requested operation on file descriptor *fd* (file objects providing
-   a :meth:`fileno` method are accepted as well). The operation is defined by *op*
-   and is operating system dependent.  These codes are also found in the
-   :mod:`fcntl` module. The argument *arg* is optional, and defaults to the integer
+   Perform the operation *op* on file descriptor *fd* (file objects providing
+   a :meth:`~io.IOBase.fileno` method are accepted as well).  The values used
+   for *op* are operating system dependent, and are available as constants
+   in the :mod:`fcntl` module, using the same names as used in the relevant C
+   header files.  The argument *arg* is optional, and defaults to the integer
    value ``0``.  When present, it can either be an integer value, or a string.
    With the argument missing or an integer value, the return value of this function
    is the integer return value of the C :c:func:`fcntl` call.  When the argument is
@@ -50,16 +52,20 @@
 
 .. function:: ioctl(fd, op[, arg[, mutate_flag]])
 
-   This function is identical to the :func:`fcntl` function, except that the
-   argument handling is even more complicated.
+   This function is identical to the :func:`~fcntl.fcntl` function, except
+   that the argument handling is even more complicated.
 
    The op parameter is limited to values that can fit in 32-bits.
+   Additional constants of interest for use as the *op* argument can be
+   found in the :mod:`termios` module, under the same names as used in
+   the relevant C header files.
 
    The parameter *arg* can be one of an integer, absent (treated identically to the
    integer ``0``), an object supporting the read-only buffer interface (most likely
    a plain Python string) or an object supporting the read-write buffer interface.
 
-   In all but the last case, behaviour is as for the :func:`fcntl` function.
+   In all but the last case, behaviour is as for the :func:`~fcntl.fcntl`
+   function.
 
    If a mutable buffer is passed, then the behaviour is determined by the value of
    the *mutate_flag* parameter.
@@ -94,16 +100,16 @@
 .. function:: flock(fd, op)
 
    Perform the lock operation *op* on file descriptor *fd* (file objects providing
-   a :meth:`fileno` method are accepted as well). See the Unix manual
+   a :meth:`~io.IOBase.fileno` method are accepted as well). See the Unix manual
    :manpage:`flock(2)` for details.  (On some systems, this function is emulated
    using :c:func:`fcntl`.)
 
 
 .. function:: lockf(fd, operation, [length, [start, [whence]]])
 
-   This is essentially a wrapper around the :func:`fcntl` locking calls.  *fd* is
-   the file descriptor of the file to lock or unlock, and *operation* is one of the
-   following values:
+   This is essentially a wrapper around the :func:`~fcntl.fcntl` locking calls.
+   *fd* is the file descriptor of the file to lock or unlock, and *operation*
+   is one of the following values:
 
    * :const:`LOCK_UN` -- unlock
    * :const:`LOCK_SH` -- acquire a shared lock
@@ -118,13 +124,13 @@
    systems, :const:`LOCK_EX` can only be used if the file descriptor refers to a
    file opened for writing.
 
-   *length* is the number of bytes to lock, *start* is the byte offset at which the
-   lock starts, relative to *whence*, and *whence* is as with :func:`fileobj.seek`,
-   specifically:
+   *length* is the number of bytes to lock, *start* is the byte offset at
+   which the lock starts, relative to *whence*, and *whence* is as with
+   :func:`io.IOBase.seek`, specifically:
 
-   * :const:`0` -- relative to the start of the file (:const:`SEEK_SET`)
-   * :const:`1` -- relative to the current buffer position (:const:`SEEK_CUR`)
-   * :const:`2` -- relative to the end of the file (:const:`SEEK_END`)
+   * :const:`0` -- relative to the start of the file (:data:`os.SEEK_SET`)
+   * :const:`1` -- relative to the current buffer position (:data:`os.SEEK_CUR`)
+   * :const:`2` -- relative to the end of the file (:data:`os.SEEK_END`)
 
    The default for *start* is 0, which means to start at the beginning of the file.
    The default for *length* is 0 which means to lock to the end of the file.  The
@@ -149,7 +155,8 @@
 .. seealso::
 
    Module :mod:`os`
-      If the locking flags :const:`O_SHLOCK` and :const:`O_EXLOCK` are present
-      in the :mod:`os` module (on BSD only), the :func:`os.open` function
-      provides an alternative to the :func:`lockf` and :func:`flock` functions.
+      If the locking flags :data:`~os.O_SHLOCK` and :data:`~os.O_EXLOCK` are
+      present in the :mod:`os` module (on BSD only), the :func:`os.open`
+      function provides an alternative to the :func:`lockf` and :func:`flock`
+      functions.
 
diff --git a/Doc/library/fileinput.rst b/Doc/library/fileinput.rst
index f8ec436..d5a4875 100644
--- a/Doc/library/fileinput.rst
+++ b/Doc/library/fileinput.rst
@@ -136,11 +136,12 @@
 
    Class :class:`FileInput` is the implementation; its methods :meth:`filename`,
    :meth:`fileno`, :meth:`lineno`, :meth:`filelineno`, :meth:`isfirstline`,
-   :meth:`isstdin`, :meth:`nextfile` and :meth:`close` correspond to the functions
-   of the same name in the module. In addition it has a :meth:`readline` method
-   which returns the next input line, and a :meth:`__getitem__` method which
-   implements the sequence behavior.  The sequence must be accessed in strictly
-   sequential order; random access and :meth:`readline` cannot be mixed.
+   :meth:`isstdin`, :meth:`nextfile` and :meth:`close` correspond to the
+   functions of the same name in the module. In addition it has a
+   :meth:`~io.TextIOBase.readline` method which returns the next input line,
+   and a :meth:`__getitem__` method which implements the sequence behavior.
+   The sequence must be accessed in strictly sequential order; random access
+   and :meth:`~io.TextIOBase.readline` cannot be mixed.
 
    With *mode* you can specify which file mode will be passed to :func:`open`. It
    must be one of ``'r'``, ``'rU'``, ``'U'`` and ``'rb'``.
diff --git a/Doc/library/formatter.rst b/Doc/library/formatter.rst
index 88be11c..bdc9e7b 100644
--- a/Doc/library/formatter.rst
+++ b/Doc/library/formatter.rst
@@ -4,6 +4,10 @@
 .. module:: formatter
    :synopsis: Generic output formatter and device interface.
 
+.. deprecated:: 3.4
+   Due to lack of usage, the formatter module has been deprecated and is slated
+   for removal in Python 3.6.
+
 
 This module supports two interface definitions, each with multiple
 implementations: The *formatter* interface, and the *writer* interface which is
diff --git a/Doc/library/ftplib.rst b/Doc/library/ftplib.rst
index abd8480..dcb2ac4 100644
--- a/Doc/library/ftplib.rst
+++ b/Doc/library/ftplib.rst
@@ -23,16 +23,17 @@
 Here's a sample session using the :mod:`ftplib` module::
 
    >>> from ftplib import FTP
-   >>> ftp = FTP('ftp.cwi.nl')   # connect to host, default port
-   >>> ftp.login()               # user anonymous, passwd anonymous@
-   >>> ftp.retrlines('LIST')     # list directory contents
-   total 24418
-   drwxrwsr-x   5 ftp-usr  pdmaint     1536 Mar 20 09:48 .
-   dr-xr-srwt 105 ftp-usr  pdmaint     1536 Mar 21 14:32 ..
-   -rw-r--r--   1 ftp-usr  pdmaint     5305 Mar 20 09:48 INDEX
-    .
-    .
-    .
+   >>> ftp = FTP('ftp.debian.org')     # connect to host, default port
+   >>> ftp.login()                     # user anonymous, passwd anonymous@
+   '230 Login successful.'
+   >>> ftp.cwd('debian')               # change into "debian" directory
+   >>> ftp.retrlines('LIST')           # list directory contents
+   -rw-rw-r--    1 1176     1176         1063 Jun 15 10:18 README
+   ...
+   drwxr-sr-x    5 1176     1176         4096 Dec 19  2000 pool
+   drwxr-sr-x    4 1176     1176         4096 Nov 17  2008 project
+   drwxr-xr-x    3 1176     1176         4096 Oct 10  2012 tools
+   '226 Directory send OK.'
    >>> ftp.retrbinary('RETR README', open('README', 'wb').write)
    '226 Transfer complete.'
    >>> ftp.quit()
@@ -271,7 +272,7 @@
 
    Store a file in binary transfer mode.  *cmd* should be an appropriate
    ``STOR`` command: ``"STOR filename"``. *file* is a :term:`file object`
-   (opened in binary mode) which is read until EOF using its :meth:`read`
+   (opened in binary mode) which is read until EOF using its :meth:`~io.IOBase.read`
    method in blocks of size *blocksize* to provide the data to be stored.
    The *blocksize* argument defaults to 8192.  *callback* is an optional single
    parameter callable that is called on each block of data after it is sent.
@@ -285,7 +286,7 @@
 
    Store a file in ASCII transfer mode.  *cmd* should be an appropriate
    ``STOR`` command (see :meth:`storbinary`).  Lines are read until EOF from the
-   :term:`file object` *file* (opened in binary mode) using its :meth:`readline`
+   :term:`file object` *file* (opened in binary mode) using its :meth:`~io.IOBase.readline`
    method to provide the data to be stored.  *callback* is an optional single
    parameter callable that is called on each line after it is sent.
 
@@ -423,7 +424,8 @@
 
 .. method:: FTP_TLS.auth()
 
-   Set up secure control connection by using TLS or SSL, depending on what specified in :meth:`ssl_version` attribute.
+   Set up secure control connection by using TLS or SSL, depending on what
+   specified in :meth:`ssl_version` attribute.
 
 .. method:: FTP_TLS.ccc()
 
@@ -440,5 +442,3 @@
 .. method:: FTP_TLS.prot_c()
 
    Set up clear text data connection.
-
-
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index 67b77f7..ffee09e 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -219,8 +219,8 @@
 
    Future statements are specified by bits which can be bitwise ORed together to
    specify multiple statements.  The bitfield required to specify a given feature
-   can be found as the :attr:`compiler_flag` attribute on the :class:`_Feature`
-   instance in the :mod:`__future__` module.
+   can be found as the :attr:`~__future__._Feature.compiler_flag` attribute on
+   the :class:`~__future__._Feature` instance in the :mod:`__future__` module.
 
    The argument *optimize* specifies the optimization level of the compiler; the
    default value of ``-1`` selects the optimization level of the interpreter as
@@ -717,7 +717,7 @@
 
    One useful application of the second form of :func:`iter` is to read lines of
    a file until a certain line is reached.  The following example reads a file
-   until the :meth:`readline` method returns an empty string::
+   until the :meth:`~io.TextIOBase.readline` method returns an empty string::
 
       with open('mydata.txt') as fp:
           for line in iter(fp.readline, ''):
@@ -826,8 +826,8 @@
 
    .. note::
 
-      :class:`object` does *not* have a :attr:`__dict__`, so you can't assign
-      arbitrary attributes to an instance of the :class:`object` class.
+      :class:`object` does *not* have a :attr:`~object.__dict__`, so you can't
+      assign arbitrary attributes to an instance of the :class:`object` class.
 
 
 .. function:: oct(x)
@@ -905,9 +905,9 @@
      size" and falling back on :attr:`io.DEFAULT_BUFFER_SIZE`.  On many systems,
      the buffer will typically be 4096 or 8192 bytes long.
 
-   * "Interactive" text files (files for which :meth:`isatty` returns True) use
-     line buffering.  Other text files use the policy described above for binary
-     files.
+   * "Interactive" text files (files for which :meth:`~io.IOBase.isatty`
+     returns True) use line buffering.  Other text files use the policy
+     described above for binary files.
 
    *encoding* is the name of the encoding used to decode or encode the file.
    This should only be used in text mode.  The default encoding is platform
@@ -1115,10 +1115,10 @@
    turns the :meth:`voltage` method into a "getter" for a read-only attribute
    with the same name.
 
-   A property object has :attr:`getter`, :attr:`setter`, and :attr:`deleter`
-   methods usable as decorators that create a copy of the property with the
-   corresponding accessor function set to the decorated function.  This is
-   best explained with an example::
+   A property object has :attr:`~property.getter`, :attr:`~property.setter`,
+   and :attr:`~property.deleter` methods usable as decorators that create a
+   copy of the property with the corresponding accessor function set to the
+   decorated function.  This is best explained with an example::
 
       class C:
           def __init__(self):
@@ -1224,13 +1224,13 @@
 
    Return a :term:`slice` object representing the set of indices specified by
    ``range(start, stop, step)``.  The *start* and *step* arguments default to
-   ``None``.  Slice objects have read-only data attributes :attr:`start`,
-   :attr:`stop` and :attr:`step` which merely return the argument values (or their
-   default).  They have no other explicit functionality; however they are used by
-   Numerical Python and other third party extensions.  Slice objects are also
-   generated when extended indexing syntax is used.  For example:
-   ``a[start:stop:step]`` or ``a[start:stop, i]``.  See :func:`itertools.islice`
-   for an alternate version that returns an iterator.
+   ``None``.  Slice objects have read-only data attributes :attr:`~slice.start`,
+   :attr:`~slice.stop` and :attr:`~slice.step` which merely return the argument
+   values (or their default).  They have no other explicit functionality;
+   however they are used by Numerical Python and other third party extensions.
+   Slice objects are also generated when extended indexing syntax is used.  For
+   example: ``a[start:stop:step]`` or ``a[start:stop, i]``.  See
+   :func:`itertools.islice` for an alternate version that returns an iterator.
 
 
 .. function:: sorted(iterable[, key][, reverse])
@@ -1310,9 +1310,10 @@
    been overridden in a class. The search order is same as that used by
    :func:`getattr` except that the *type* itself is skipped.
 
-   The :attr:`__mro__` attribute of the *type* lists the method resolution
-   search order used by both :func:`getattr` and :func:`super`.  The attribute
-   is dynamic and can change whenever the inheritance hierarchy is updated.
+   The :attr:`~class.__mro__` attribute of the *type* lists the method
+   resolution search order used by both :func:`getattr` and :func:`super`.  The
+   attribute is dynamic and can change whenever the inheritance hierarchy is
+   updated.
 
    If the second argument is omitted, the super object returned is unbound.  If
    the second argument is an object, ``isinstance(obj, type)`` must be true.  If
@@ -1375,7 +1376,8 @@
 
 
    With one argument, return the type of an *object*.  The return value is a
-   type object and generally the same object as returned by ``object.__class__``.
+   type object and generally the same object as returned by
+   :attr:`object.__class__ <instance.__class__>`.
 
    The :func:`isinstance` built-in function is recommended for testing the type
    of an object, because it takes subclasses into account.
@@ -1383,11 +1385,11 @@
 
    With three arguments, return a new type object.  This is essentially a
    dynamic form of the :keyword:`class` statement. The *name* string is the
-   class name and becomes the :attr:`__name__` attribute; the *bases* tuple
-   itemizes the base classes and becomes the :attr:`__bases__` attribute;
-   and the *dict* dictionary is the namespace containing definitions for class
-   body and becomes the :attr:`__dict__` attribute.  For example, the
-   following two statements create identical :class:`type` objects:
+   class name and becomes the :attr:`~class.__name__` attribute; the *bases*
+   tuple itemizes the base classes and becomes the :attr:`~class.__bases__`
+   attribute; and the *dict* dictionary is the namespace containing definitions
+   for class body and becomes the :attr:`~object.__dict__` attribute.  For
+   example, the following two statements create identical :class:`type` objects:
 
       >>> class X:
       ...     a = 1
@@ -1399,7 +1401,7 @@
 
 .. function:: vars([object])
 
-   Return the :attr:`__dict__` attribute for a module, class, instance,
+   Return the :attr:`~object.__dict__` attribute for a module, class, instance,
    or any other object with a :attr:`__dict__` attribute.
 
    Objects such as modules and instances have an updateable :attr:`__dict__`
diff --git a/Doc/library/functools.rst b/Doc/library/functools.rst
index 5eb86ec..77cd838 100644
--- a/Doc/library/functools.rst
+++ b/Doc/library/functools.rst
@@ -194,6 +194,48 @@
       18
 
 
+.. class:: partialmethod(func, *args, **keywords)
+
+   Return a new :class:`partialmethod` descriptor which behaves
+   like :class:`partial` except that it is designed to be used as a method
+   definition rather than being directly callable.
+
+   *func* must be a :term:`descriptor` or a callable (objects which are both,
+   like normal functions, are handled as descriptors).
+
+   When *func* is a descriptor (such as a normal Python function,
+   :func:`classmethod`, :func:`staticmethod`, :func:`abstractmethod` or
+   another instance of :class:`partialmethod`), calls to ``__get__`` are
+   delegated to the underlying descriptor, and an appropriate
+   :class:`partial` object returned as the result.
+
+   When *func* is a non-descriptor callable, an appropriate bound method is
+   created dynamically. This behaves like a normal Python function when
+   used as a method: the *self* argument will be inserted as the first
+   positional argument, even before the *args* and *keywords* supplied to
+   the :class:`partialmethod` constructor.
+
+   Example::
+
+      >>> class Cell(object):
+      ...     @property
+      ...     def alive(self):
+      ...         return self._alive
+      ...     def set_state(self, state):
+      ...         self._alive = bool(state)
+      ...     set_alive = partialmethod(set_state, True)
+      ...     set_dead = partialmethod(set_state, False)
+      ...
+      >>> c = Cell()
+      >>> c.alive
+      False
+      >>> c.set_alive()
+      >>> c.alive
+      True
+
+   .. versionadded:: 3.4
+
+
 .. function:: reduce(function, iterable[, initializer])
 
    Apply *function* of two arguments cumulatively to the items of *sequence*, from
@@ -205,6 +247,18 @@
    a default when the sequence is empty.  If *initializer* is not given and
    *sequence* contains only one item, the first item is returned.
 
+   Equivalent to::
+
+      def reduce(function, iterable, initializer=None):
+          it = iter(iterable)
+          if initializer is None:
+              value = next(it)
+          else:
+              value = initializer
+          for element in it:
+              value = function(value, element)
+          return value
+
 
 .. decorator:: singledispatch(default)
 
@@ -419,4 +473,3 @@
 are not created automatically.  Also, :class:`partial` objects defined in
 classes behave like static methods and do not transform into bound methods
 during instance attribute look-up.
-
diff --git a/Doc/library/gettext.rst b/Doc/library/gettext.rst
index 825311b..1efa54f 100644
--- a/Doc/library/gettext.rst
+++ b/Doc/library/gettext.rst
@@ -3,8 +3,8 @@
 
 .. module:: gettext
    :synopsis: Multilingual internationalization services.
-.. moduleauthor:: Barry A. Warsaw <barry@zope.com>
-.. sectionauthor:: Barry A. Warsaw <barry@zope.com>
+.. moduleauthor:: Barry A. Warsaw <barry@python.org>
+.. sectionauthor:: Barry A. Warsaw <barry@python.org>
 
 **Source code:** :source:`Lib/gettext.py`
 
diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst
index 8a7c928..de5063a 100644
--- a/Doc/library/gzip.rst
+++ b/Doc/library/gzip.rst
@@ -35,8 +35,8 @@
    :class:`bytes` object), or an existing file object to read from or write to.
 
    The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``,
-   ``'w'``, or ``'wb'`` for binary mode, or ``'rt'``, ``'at'``, or ``'wt'`` for
-   text mode. The default is ``'rb'``.
+   ``'w'``, ``'wb'``, ``'x'`` or ``'xb'`` for binary mode, or ``'rt'``,
+   ``'at'``, ``'wt'``, or ``'xt'`` for text mode. The default is ``'rb'``.
 
    The *compresslevel* argument is an integer from 0 to 9, as for the
    :class:`GzipFile` constructor.
@@ -53,6 +53,9 @@
       Added support for *filename* being a file object, support for text mode,
       and the *encoding*, *errors* and *newline* arguments.
 
+   .. versionchanged:: 3.4
+      Added support for the ``'x'``, ``'xb'`` and ``'xt'`` modes.
+
 
 .. class:: GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)
 
@@ -67,14 +70,15 @@
    object.
 
    When *fileobj* is not ``None``, the *filename* argument is only used to be
-   included in the :program:`gzip` file header, which may includes the original
+   included in the :program:`gzip` file header, which may include the original
    filename of the uncompressed file.  It defaults to the filename of *fileobj*, if
    discernible; otherwise, it defaults to the empty string, and in this case the
    original filename is not included in the header.
 
    The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, ``'w'``,
-   or ``'wb'``, depending on whether the file will be read or written.  The default
-   is the mode of *fileobj* if discernible; otherwise, the default is ``'rb'``.
+   ``'wb'``, ``'x'``, or ``'xb'``, depending on whether the file will be read or
+   written.  The default is the mode of *fileobj* if discernible; otherwise, the
+   default is ``'rb'``.
 
    Note that the file is always opened in binary mode. To open a compressed file
    in text mode, use :func:`.open` (or wrap your :class:`GzipFile` with an
@@ -116,17 +120,18 @@
       .. versionadded:: 3.2
 
    .. versionchanged:: 3.1
-      Support for the :keyword:`with` statement was added.
+      Support for the :keyword:`with` statement was added, along with the
+      *mtime* argument.
 
    .. versionchanged:: 3.2
-      Support for zero-padded files was added.
-
-   .. versionchanged:: 3.2
-      Support for unseekable files was added.
+      Support for zero-padded and unseekable files was added.
 
    .. versionchanged:: 3.3
       The :meth:`io.BufferedIOBase.read1` method is now implemented.
 
+   .. versionchanged:: 3.4
+      Added support for the ``'x'`` and ``'xb'`` modes.
+
 
 .. function:: compress(data, compresslevel=9)
 
diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst
index db41db4..b1daba1 100644
--- a/Doc/library/hashlib.rst
+++ b/Doc/library/hashlib.rst
@@ -23,12 +23,18 @@
 digests.  The modern term is secure hash.
 
 .. note::
-   If you want the adler32 or crc32 hash functions they are available in
+
+   If you want the adler32 or crc32 hash functions, they are available in
    the :mod:`zlib` module.
 
 .. warning::
 
-   Some algorithms have known hash collision weaknesses, see the FAQ at the end.
+   Some algorithms have known hash collision weaknesses, refer to the "See
+   also" section at the end.
+
+
+Hash algorithms
+---------------
 
 There is one constructor method named for each type of :dfn:`hash`.  All return
 a hash object with the same simple interface. For example: use :func:`sha1` to
@@ -41,7 +47,7 @@
 .. note::
 
    For better multithreading performance, the Python :term:`GIL` is released for
-   strings of more than 2047 bytes at object creation or on update.
+   data larger than 2047 bytes at object creation or on update.
 
 .. note::
 
@@ -148,7 +154,7 @@
 
    .. versionchanged:: 3.1
       The Python GIL is released to allow other threads to run while hash
-      updates on data larger than 2048 bytes is taking place when using hash
+      updates on data larger than 2047 bytes is taking place when using hash
       algorithms supplied by OpenSSL.
 
 
@@ -172,6 +178,45 @@
    compute the digests of data sharing a common initial substring.
 
 
+Key Derivation Function
+-----------------------
+
+Key derivation and key stretching algorithms are designed for secure password
+hashing. Naive algorithms such as ``sha1(password)`` are not resistant
+against brute-force attacks. A good password hashing function must be tunable,
+slow and include a salt.
+
+
+.. function:: pbkdf2_hmac(name, password, salt, rounds, dklen=None)
+
+   The function provides PKCS#5 password-based key derivation function 2. It
+   uses HMAC as pseudorandom function.
+
+   The string *name* is the desired name of the hash digest algorithm for
+   HMAC, e.g. 'sha1' or 'sha256'. *password* and *salt* are interpreted as
+   buffers of bytes. Applications and libraries should limit *password* to
+   a sensible value (e.g. 1024). *salt* should be about 16 or more bytes from
+   a proper source, e.g. :func:`os.urandom`.
+
+   The number of *rounds* should be chosen based on the hash algorithm and
+   computing power. As of 2013 a value of at least 100,000 rounds of SHA-256
+   have been suggested.
+
+   *dklen* is the length of the derived key. If *dklen* is ``None`` then the
+   digest size of the hash algorithm *name* is used, e.g. 64 for SHA-512.
+
+   >>> import hashlib, binascii
+   >>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
+   >>> binascii.hexlify(dk)
+   b'0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'
+
+   .. versionadded:: 3.4
+
+   .. note:: A fast implementation of *pbkdf2_hmac* is available with OpenSSL.
+      The Python implementation uses an inline version of :mod:`hmac`. It is
+      about three times slower and doesn't release the GIL.
+
+
 .. seealso::
 
    Module :mod:`hmac`
@@ -187,3 +232,5 @@
       Wikipedia article with information on which algorithms have known issues and
       what that means regarding their use.
 
+   http://www.ietf.org/rfc/rfc2898.txt
+      PKCS #5: Password-Based Cryptography Specification Version 2.0
diff --git a/Doc/library/hmac.rst b/Doc/library/hmac.rst
index 4c707e9..1d928ea 100644
--- a/Doc/library/hmac.rst
+++ b/Doc/library/hmac.rst
@@ -19,7 +19,7 @@
    Return a new hmac object.  *key* is a bytes or bytearray object giving the
    secret key.  If *msg* is present, the method call ``update(msg)`` is made.
    *digestmod* is the digest constructor or module for the HMAC object to use.
-   It defaults to the :func:`hashlib.md5` constructor.
+   It defaults to the :data:`hashlib.md5` constructor.
 
    .. versionchanged:: 3.4
       Parameter *key* can be a bytes or bytearray object. Parameter *msg* can
diff --git a/Doc/library/html.parser.rst b/Doc/library/html.parser.rst
index e4154ef..0ea9644 100644
--- a/Doc/library/html.parser.rst
+++ b/Doc/library/html.parser.rst
@@ -74,7 +74,7 @@
        def handle_data(self, data):
            print("Encountered some data  :", data)
 
-   parser = MyHTMLParser(strict=False)
+   parser = MyHTMLParser()
    parser.feed('<html><head><title>Test</title></head>'
                '<body><h1>Parse me!</h1></body></html>')
 
@@ -272,7 +272,7 @@
        def handle_decl(self, data):
            print("Decl     :", data)
 
-   parser = MyHTMLParser(strict=False)
+   parser = MyHTMLParser()
 
 Parsing a doctype::
 
diff --git a/Doc/library/http.client.rst b/Doc/library/http.client.rst
index 0fad566..892e62f 100644
--- a/Doc/library/http.client.rst
+++ b/Doc/library/http.client.rst
@@ -169,8 +169,8 @@
    A subclass of :exc:`HTTPException`.  Raised if a server responds with a HTTP
    status code that we don't understand.
 
-The constants defined in this module are:
 
+The constants defined in this module are:
 
 .. data:: HTTP_PORT
 
@@ -649,7 +649,7 @@
     >>> conn = http.client.HTTPConnection("localhost", 8080)
     >>> conn.request("PUT", "/file", BODY)
     >>> response = conn.getresponse()
-    >>> print(resp.status, response.reason)
+    >>> print(response.status, response.reason)
     200, OK
 
 .. _httpmessage-objects:
diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst
index ca66c40..113ac44 100644
--- a/Doc/library/http.server.rst
+++ b/Doc/library/http.server.rst
@@ -29,8 +29,8 @@
 
 .. class:: HTTPServer(server_address, RequestHandlerClass)
 
-   This class builds on the :class:`TCPServer` class by storing the server
-   address as instance variables named :attr:`server_name` and
+   This class builds on the :class:`~socketserver.TCPServer` class by storing
+   the server address as instance variables named :attr:`server_name` and
    :attr:`server_port`. The server is accessible by the handler, typically
    through the handler's :attr:`server` instance variable.
 
@@ -326,7 +326,7 @@
       file's contents are returned; otherwise a directory listing is generated
       by calling the :meth:`list_directory` method. This method uses
       :func:`os.listdir` to scan the directory, and returns a ``404`` error
-      response if the :func:`listdir` fails.
+      response if the :func:`~os.listdir` fails.
 
       If the request was mapped to a file, it is opened and the contents are
       returned.  Any :exc:`OSError` exception in opening the requested file is
diff --git a/Doc/library/imaplib.rst b/Doc/library/imaplib.rst
index 59a61da..01236fb 100644
--- a/Doc/library/imaplib.rst
+++ b/Doc/library/imaplib.rst
@@ -310,8 +310,9 @@
 
    Opens socket to *port* at *host*.  This method is implicitly called by
    the :class:`IMAP4` constructor.  The connection objects established by this
-   method will be used in the ``read``, ``readline``, ``send``, and ``shutdown``
-   methods.  You may override this method.
+   method will be used in the :meth:`IMAP4.read`, :meth:`IMAP4.readline`,
+   :meth:`IMAP4.send`, and :meth:`IMAP4.shutdown` methods.  You may override
+   this method.
 
 
 .. method:: IMAP4.partial(message_num, message_part, start, length)
diff --git a/Doc/library/imp.rst b/Doc/library/imp.rst
index 5253e69..6647b9e 100644
--- a/Doc/library/imp.rst
+++ b/Doc/library/imp.rst
@@ -179,6 +179,10 @@
    the class does not affect the method definitions of the instances --- they
    continue to use the old class definition.  The same is true for derived classes.
 
+   .. versionchanged:: 3.3
+      Relies on both ``__name__`` and ``__loader__`` being defined on the module
+      being reloaded instead of just ``__name__``.
+
    .. deprecated:: 3.4
       Use :func:`importlib.reload` instead.
 
diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst
index e867a90..50c97b0 100644
--- a/Doc/library/importlib.rst
+++ b/Doc/library/importlib.rst
@@ -121,9 +121,10 @@
    so it must have been successfully imported before.  This is useful if you
    have edited the module source file using an external editor and want to try
    out the new version without leaving the Python interpreter.  The return value
-   is the module object (the same as the *module* argument).
+   is the module object (which can be different if re-importing causes a
+   different object to be placed in :data:`sys.modules`).
 
-   When :func:`.reload` is executed:
+   When :func:`reload` is executed:
 
    * Python modules' code is recompiled and the module-level code re-executed,
      defining a new set of objects which are bound to names in the module's
@@ -165,7 +166,7 @@
 
    It is legal though generally not very useful to reload built-in or
    dynamically loaded modules (this is not true for e.g. :mod:`sys`,
-   :mod:`__main__`, :mod:`__builtin__` and other key modules where reloading is
+   :mod:`__main__`, :mod:`builtins` and other key modules where reloading is
    frowned upon). In many cases, however, extension modules are not designed to
    be initialized more than once, and may fail in arbitrary ways when reloaded.
 
@@ -722,6 +723,10 @@
      Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
      finders stored in :attr:`sys.path_importer_cache`.
 
+  .. versionchanged:: 3.4
+     Calls objects in :data:`sys.path_hooks` with the current working directory
+     for ``''`` (i.e. the empty string).
+
 
 .. class:: FileFinder(path, \*loader_details)
 
@@ -874,6 +879,8 @@
 
       Returns :attr:`path`.
 
+      .. versionadded:: 3.4
+
 
 :mod:`importlib.util` -- Utility code for importers
 ---------------------------------------------------
diff --git a/Doc/library/index.rst b/Doc/library/index.rst
index 1b25c6e..81289a5 100644
--- a/Doc/library/index.rst
+++ b/Doc/library/index.rst
@@ -65,6 +65,7 @@
    tk.rst
    development.rst
    debug.rst
+   distribution.rst
    python.rst
    custominterp.rst
    modules.rst
diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst
index 40e0158..41c61b7 100644
--- a/Doc/library/inspect.rst
+++ b/Doc/library/inspect.rst
@@ -173,9 +173,9 @@
 
    .. note::
 
-      :func:`getmembers` will only return metaclass attributes when the
-      argument is a class and those attributes have been listed in a custom
-      :meth:`__dir__`.
+      :func:`getmembers` will only return class attributes defined in the
+      metaclass when the argument is a class and those attributes have been
+      listed in the metaclass' custom :meth:`__dir__`.
 
 
 .. function:: getmoduleinfo(path)
@@ -928,8 +928,9 @@
    that raise AttributeError). It can also return descriptors objects
    instead of instance members.
 
-   If the instance :attr:`__dict__` is shadowed by another member (for example a
-   property) then this function will be unable to find instance members.
+   If the instance :attr:`~object.__dict__` is shadowed by another member (for
+   example a property) then this function will be unable to find instance
+   members.
 
    .. versionadded:: 3.2
 
@@ -1008,6 +1009,8 @@
    .. versionadded:: 3.3
 
 
+.. _inspect-module-cli:
+
 Command Line Interface
 ----------------------
 
diff --git a/Doc/library/io.rst b/Doc/library/io.rst
index aac913e..7925e33 100644
--- a/Doc/library/io.rst
+++ b/Doc/library/io.rst
@@ -157,7 +157,7 @@
       The abstract base classes also provide default implementations of some
       methods in order to help implementation of concrete stream classes.  For
       example, :class:`BufferedIOBase` provides unoptimized implementations of
-      ``readinto()`` and ``readline()``.
+      :meth:`~IOBase.readinto` and :meth:`~IOBase.readline`.
 
 At the top of the I/O hierarchy is the abstract base class :class:`IOBase`.  It
 defines the basic interface to a stream.  Note, however, that there is no
@@ -228,7 +228,7 @@
 
    The basic type used for binary data read from or written to a file is
    :class:`bytes`.  :class:`bytearray`\s are accepted too, and in some cases
-   (such as :class:`readinto`) required.  Text I/O classes work with
+   (such as :meth:`readinto`) required.  Text I/O classes work with
    :class:`str` data.
 
    Note that calling any method (even inquiries) on a closed stream is
diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst
index ed23217..826e4aa 100644
--- a/Doc/library/ipaddress.rst
+++ b/Doc/library/ipaddress.rst
@@ -161,7 +161,16 @@
    .. attribute:: is_private
 
       ``True`` if the address is allocated for private networks.  See
-      :RFC:`1918` (for IPv4) or :RFC:`4193` (for IPv6).
+      iana-ipv4-special-registry (for IPv4) or iana-ipv6-special-registry
+      (for IPv6).
+
+   .. attribute:: is_global
+
+      ``True`` if the address is allocated for public networks.  See
+      iana-ipv4-special-registry (for IPv4) or iana-ipv6-special-registry
+      (for IPv6).
+
+   .. versionadded:: 3.4
 
    .. attribute:: is_unspecified
 
@@ -282,10 +291,10 @@
 IPv6).
 
 
-Logical operators
-"""""""""""""""""
+Comparison operators
+""""""""""""""""""""
 
-Address objects can be compared with the usual set of logical operators.  Some
+Address objects can be compared with the usual set of comparison operators.  Some
 examples::
 
    >>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst
index 25f34bf..b37af61 100644
--- a/Doc/library/itertools.rst
+++ b/Doc/library/itertools.rst
@@ -88,9 +88,9 @@
 .. function:: accumulate(iterable[, func])
 
     Make an iterator that returns accumulated sums. Elements may be any addable
-    type including :class:`Decimal` or :class:`Fraction`.  If the optional
-    *func* argument is supplied, it should be a function of two arguments
-    and it will be used instead of addition.
+    type including :class:`~decimal.Decimal` or :class:`~fractions.Fraction`.
+    If the optional *func* argument is supplied, it should be a function of two
+    arguments and it will be used instead of addition.
 
     Equivalent to::
 
@@ -135,6 +135,9 @@
        '0.93', '0.25', '0.71', '0.79', '0.63', '0.88', '0.39', '0.91', '0.32',
        '0.83', '0.54', '0.95', '0.20', '0.60', '0.91', '0.30', '0.80', '0.60']
 
+    See :func:`functools.reduce` for a similar function that returns only the
+    final accumulated value.
+
     .. versionadded:: 3.2
 
     .. versionchanged:: 3.3
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index 4521183..fc5f805 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -794,17 +794,18 @@
       (possibly modified) versions of the arguments passed in.
 
 In addition to the above, :class:`LoggerAdapter` supports the following
-methods of :class:`Logger`, i.e. :meth:`debug`, :meth:`info`, :meth:`warning`,
-:meth:`error`, :meth:`exception`, :meth:`critical`, :meth:`log`,
-:meth:`isEnabledFor`, :meth:`getEffectiveLevel`, :meth:`setLevel`,
-:meth:`hasHandlers`. These methods have the same signatures as their
+methods of :class:`Logger`: :meth:`~Logger.debug`, :meth:`~Logger.info`,
+:meth:`~Logger.warning`, :meth:`~Logger.error`, :meth:`~Logger.exception`,
+:meth:`~Logger.critical`, :meth:`~Logger.log`, :meth:`~Logger.isEnabledFor`,
+:meth:`~Logger.getEffectiveLevel`, :meth:`~Logger.setLevel` and
+:meth:`~Logger.hasHandlers`. These methods have the same signatures as their
 counterparts in :class:`Logger`, so you can use the two types of instances
 interchangeably.
 
 .. versionchanged:: 3.2
-   The :meth:`isEnabledFor`, :meth:`getEffectiveLevel`, :meth:`setLevel` and
-   :meth:`hasHandlers` methods were added to :class:`LoggerAdapter`.  These
-   methods delegate to the underlying logger.
+   The :meth:`~Logger.isEnabledFor`, :meth:`~Logger.getEffectiveLevel`,
+   :meth:`~Logger.setLevel` and :meth:`~Logger.hasHandlers` methods were added
+   to :class:`LoggerAdapter`.  These methods delegate to the underlying logger.
 
 
 Thread Safety
diff --git a/Doc/library/lzma.rst b/Doc/library/lzma.rst
index 5fd5039..b201206 100644
--- a/Doc/library/lzma.rst
+++ b/Doc/library/lzma.rst
@@ -39,8 +39,8 @@
    opened, or it can be an existing file object to read from or write to.
 
    The *mode* argument can be any of ``"r"``, ``"rb"``, ``"w"``, ``"wb"``,
-   ``"a"`` or ``"ab"`` for binary mode, or ``"rt"``, ``"wt"``, or ``"at"`` for
-   text mode. The default is ``"rb"``.
+   ``"x"``, ``"xb"``, ``"a"`` or ``"ab"`` for binary mode, or ``"rt"``,
+   ``"wt"``, ``"xt"``, or ``"at"`` for text mode. The default is ``"rb"``.
 
    When opening a file for reading, the *format* and *filters* arguments have
    the same meanings as for :class:`LZMADecompressor`. In this case, the *check*
@@ -57,6 +57,9 @@
    :class:`io.TextIOWrapper` instance with the specified encoding, error
    handling behavior, and line ending(s).
 
+   .. versionchanged:: 3.4
+      Added support for the ``"x"``, ``"xb"`` and ``"xt"`` modes.
+
 
 .. class:: LZMAFile(filename=None, mode="r", \*, format=None, check=-1, preset=None, filters=None)
 
@@ -69,8 +72,9 @@
    file will not be closed when the :class:`LZMAFile` is closed.
 
    The *mode* argument can be either ``"r"`` for reading (default), ``"w"`` for
-   overwriting, or ``"a"`` for appending. These can equivalently be given as
-   ``"rb"``, ``"wb"``, and ``"ab"`` respectively.
+   overwriting, ``"x"`` for exclusive creation, or ``"a"`` for appending. These
+   can equivalently be given as ``"rb"``, ``"wb"``, ``"xb"`` and ``"ab"``
+   respectively.
 
    If *filename* is a file object (rather than an actual file name), a mode of
    ``"w"`` does not truncate the file, and is instead equivalent to ``"a"``.
@@ -98,6 +102,9 @@
       byte of data will be returned, unless EOF has been reached. The exact
       number of bytes returned is unspecified (the *size* argument is ignored).
 
+   .. versionchanged:: 3.4
+      Added support for the ``"x"`` and ``"xb"`` modes.
+
 
 Compressing and decompressing data in memory
 --------------------------------------------
diff --git a/Doc/library/mailbox.rst b/Doc/library/mailbox.rst
index 2d8ba71..d668a6ea 100644
--- a/Doc/library/mailbox.rst
+++ b/Doc/library/mailbox.rst
@@ -1009,7 +1009,7 @@
       Set the "From " line to *from_*, which should be specified without a
       leading "From " or trailing newline. For convenience, *time_* may be
       specified and will be formatted appropriately and appended to *from_*. If
-      *time_* is specified, it should be a :class:`struct_time` instance, a
+      *time_* is specified, it should be a :class:`time.struct_time` instance, a
       tuple suitable for passing to :meth:`time.strftime`, or ``True`` (to use
       :meth:`time.gmtime`).
 
@@ -1380,7 +1380,7 @@
       Set the "From " line to *from_*, which should be specified without a
       leading "From " or trailing newline. For convenience, *time_* may be
       specified and will be formatted appropriately and appended to *from_*. If
-      *time_* is specified, it should be a :class:`struct_time` instance, a
+      *time_* is specified, it should be a :class:`time.struct_time` instance, a
       tuple suitable for passing to :meth:`time.strftime`, or ``True`` (to use
       :meth:`time.gmtime`).
 
diff --git a/Doc/library/math.rst b/Doc/library/math.rst
index b69d6c6..7c3ab59 100644
--- a/Doc/library/math.rst
+++ b/Doc/library/math.rst
@@ -31,7 +31,7 @@
 
    Return the ceiling of *x*, the smallest integer greater than or equal to *x*.
    If *x* is not a float, delegates to ``x.__ceil__()``, which should return an
-   :class:`Integral` value.
+   :class:`~numbers.Integral` value.
 
 
 .. function:: copysign(x, y)
@@ -53,7 +53,7 @@
 
    Return the floor of *x*, the largest integer less than or equal to *x*.
    If *x* is not a float, delegates to ``x.__floor__()``, which should return an
-   :class:`Integral` value.
+   :class:`~numbers.Integral` value.
 
 
 .. function:: fmod(x, y)
@@ -133,8 +133,9 @@
 
 .. function:: trunc(x)
 
-   Return the :class:`Real` value *x* truncated to an :class:`Integral` (usually
-   an integer). Delegates to ``x.__trunc__()``.
+   Return the :class:`~numbers.Real` value *x* truncated to an
+   :class:`~numbers.Integral` (usually an integer). Delegates to
+   ``x.__trunc__()``.
 
 
 Note that :func:`frexp` and :func:`modf` have a different call/return pattern
diff --git a/Doc/library/mimetypes.rst b/Doc/library/mimetypes.rst
index be11c0d..12c9eca 100644
--- a/Doc/library/mimetypes.rst
+++ b/Doc/library/mimetypes.rst
@@ -85,6 +85,9 @@
    :const:`knownfiles` takes precedence over those named before it.  Calling
    :func:`init` repeatedly is allowed.
 
+   Specifying an empty list for *files* will prevent the system defaults from
+   being applied: only the well-known values will be present from a built-in list.
+
    .. versionchanged:: 3.2
       Previously, Windows registry settings were ignored.
 
diff --git a/Doc/library/msilib.rst b/Doc/library/msilib.rst
index efb6667..d3451c8 100644
--- a/Doc/library/msilib.rst
+++ b/Doc/library/msilib.rst
@@ -429,8 +429,9 @@
 -----------
 
 :mod:`msilib` provides several classes that wrap the GUI tables in an MSI
-database. However, no standard user interface is provided; use :mod:`bdist_msi`
-to create MSI files with a user-interface for installing Python packages.
+database. However, no standard user interface is provided; use
+:mod:`~distutils.command.bdist_msi` to create MSI files with a user-interface
+for installing Python packages.
 
 
 .. class:: Control(dlg, name)
diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst
index 0071025..f3197eb 100644
--- a/Doc/library/multiprocessing.rst
+++ b/Doc/library/multiprocessing.rst
@@ -98,8 +98,8 @@
 
 
 
-Start methods
-~~~~~~~~~~~~~
+Contexts and start methods
+~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Depending on the platform, :mod:`multiprocessing` supports three ways
 to start a process.  These *start methods* are
@@ -126,13 +126,13 @@
   *forkserver*
     When the program starts and selects the *forkserver* start method,
     a server process is started.  From then on, whenever a new process
-    is need the parent process connects to the server and requests
+    is needed, the parent process connects to the server and requests
     that it fork a new process.  The fork server process is single
     threaded so it is safe for it to use :func:`os.fork`.  No
     unnecessary resources are inherited.
 
     Available on Unix platforms which support passing file descriptors
-    over unix pipes.
+    over Unix pipes.
 
 Before Python 3.4 *fork* was the only option available on Unix.  Also,
 prior to Python 3.4, child processes would inherit all the parents
@@ -153,18 +153,46 @@
 
        import multiprocessing as mp
 
-       def foo():
-           print('hello')
+       def foo(q):
+           q.put('hello')
 
        if __name__ == '__main__':
            mp.set_start_method('spawn')
-           p = mp.Process(target=foo)
+           q = mp.Queue()
+           p = mp.Process(target=foo, args=(q,))
            p.start()
+           print(q.get())
            p.join()
 
 :func:`set_start_method` should not be used more than once in the
 program.
 
+Alternatively, you can use :func:`get_context` to obtain a context
+object.  Context objects have the same API as the multiprocessing
+module, and allow one to use multiple start methods in the same
+program. ::
+
+       import multiprocessing as mp
+
+       def foo(q):
+           q.put('hello')
+
+       if __name__ == '__main__':
+           ctx = mp.get_context('spawn')
+           q = ctx.Queue()
+           p = ctx.Process(target=foo, args=(q,))
+           p.start()
+           print(q.get())
+           p.join()
+
+Note that objects related to one context may not be compatible with
+processes for a different context.  In particular, locks created using
+the *fork* context cannot be passed to a processes started using the
+*spawn* or *forkserver* start methods.
+
+A library which wants to use a particular start method should probably
+use :func:`get_context` to avoid interfering with the choice of the
+library user.
 
 
 Exchanging objects between processes
@@ -859,11 +887,30 @@
 
    .. versionadded:: 3.4
 
-.. function:: get_start_method()
+.. function:: get_context(method=None)
 
-   Return the current start method.  This can be ``'fork'``,
-   ``'spawn'`` or ``'forkserver'``.  ``'fork'`` is the default on
-   Unix, while ``'spawn'`` is the default on Windows.
+   Return a context object which has the same attributes as the
+   :mod:`multiprocessing` module.
+
+   If *method* is *None* then the default context is returned.
+   Otherwise *method* should be ``'fork'``, ``'spawn'``,
+   ``'forkserver'``.  :exc:`ValueError` is raised if the specified
+   start method is not available.
+
+   .. versionadded:: 3.4
+
+.. function:: get_start_method(allow_none=False)
+
+   Return the name of start method used for starting processes.
+
+   If the start method has not been fixed and *allow_none* is false,
+   then the start method is fixed to the default and the name is
+   returned.  If the start method has not been fixed and *allow_none*
+   is true then *None* is returned.
+
+   The return value can be ``'fork'``, ``'spawn'``, ``'forkserver'``
+   or *None*.  ``'fork'`` is the default on Unix, while ``'spawn'`` is
+   the default on Windows.
 
    .. versionadded:: 3.4
 
@@ -1785,7 +1832,7 @@
 One can create a pool of processes which will carry out tasks submitted to it
 with the :class:`Pool` class.
 
-.. class:: Pool([processes[, initializer[, initargs[, maxtasksperchild]]]])
+.. class:: Pool([processes[, initializer[, initargs[, maxtasksperchild [, context]]]]])
 
    A process pool object which controls a pool of worker processes to which jobs
    can be submitted.  It supports asynchronous results with timeouts and
@@ -1805,6 +1852,13 @@
       unused resources to be freed. The default *maxtasksperchild* is None, which
       means worker processes will live as long as the pool.
 
+   .. versionadded:: 3.4
+      *context* can be used to specify the context used for starting
+      the worker processes.  Usually a pool is created using the
+      function :func:`multiprocessing.Pool` or the :meth:`Pool` method
+      of a context object.  In both cases *context* is set
+      appropriately.
+
    .. note::
 
       Worker processes within a :class:`Pool` typically live for the complete
@@ -1920,7 +1974,7 @@
    .. versionadded:: 3.3
       Pool objects now support the context manager protocol -- see
       :ref:`typecontextmanager`.  :meth:`~contextmanager.__enter__` returns the
-      pool object, and :meth:~contextmanager.`__exit__` calls :meth:`terminate`.
+      pool object, and :meth:`~contextmanager.__exit__` calls :meth:`terminate`.
 
 
 .. class:: AsyncResult
@@ -2093,7 +2147,7 @@
    .. versionadded:: 3.3
       Listener objects now support the context manager protocol -- see
       :ref:`typecontextmanager`.  :meth:`~contextmanager.__enter__` returns the
-      listener object, and :meth:~contextmanager.`__exit__` calls :meth:`close`.
+      listener object, and :meth:`~contextmanager.__exit__` calls :meth:`close`.
 
 .. function:: wait(object_list, timeout=None)
 
diff --git a/Doc/library/nntplib.rst b/Doc/library/nntplib.rst
index 73b51c0..9ab2c94 100644
--- a/Doc/library/nntplib.rst
+++ b/Doc/library/nntplib.rst
@@ -394,18 +394,18 @@
 
 .. method:: NNTP.next()
 
-   Send a ``NEXT`` command.  Return as for :meth:`stat`.
+   Send a ``NEXT`` command.  Return as for :meth:`.stat`.
 
 
 .. method:: NNTP.last()
 
-   Send a ``LAST`` command.  Return as for :meth:`stat`.
+   Send a ``LAST`` command.  Return as for :meth:`.stat`.
 
 
 .. method:: NNTP.article(message_spec=None, *, file=None)
 
    Send an ``ARTICLE`` command, where *message_spec* has the same meaning as
-   for :meth:`stat`.  Return a tuple ``(response, info)`` where *info*
+   for :meth:`.stat`.  Return a tuple ``(response, info)`` where *info*
    is a :class:`~collections.namedtuple` with three attributes *number*,
    *message_id* and *lines* (in that order).  *number* is the article number
    in the group (or 0 if the information is not available), *message_id* the
diff --git a/Doc/library/numeric.rst b/Doc/library/numeric.rst
index 2732a84..7c76a47 100644
--- a/Doc/library/numeric.rst
+++ b/Doc/library/numeric.rst
@@ -23,3 +23,4 @@
    decimal.rst
    fractions.rst
    random.rst
+   statistics.rst
diff --git a/Doc/library/operator.rst b/Doc/library/operator.rst
index d01d33a..80bad71 100644
--- a/Doc/library/operator.rst
+++ b/Doc/library/operator.rst
@@ -278,7 +278,7 @@
                   return resolve_attr(obj, attr)
           else:
               def g(obj):
-                  return tuple(resolve_att(obj, attr) for attr in items)
+                  return tuple(resolve_attr(obj, attr) for attr in items)
           return g
 
       def resolve_attr(obj, attr):
diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst
index a0f006c..25cae6b 100644
--- a/Doc/library/os.path.rst
+++ b/Doc/library/os.path.rst
@@ -149,7 +149,7 @@
 .. function:: getctime(path)
 
    Return the system's ctime which, on some systems (like Unix) is the time of the
-   last change, and, on others (like Windows), is the creation time for *path*.
+   last metadata change, and, on others (like Windows), is the creation time for *path*.
    The return value is a number giving the number of seconds since the epoch (see
    the  :mod:`time` module).  Raise :exc:`OSError` if the file does not exist or
    is inaccessible.
@@ -271,9 +271,9 @@
 .. function:: samestat(stat1, stat2)
 
    Return ``True`` if the stat tuples *stat1* and *stat2* refer to the same file.
-   These structures may have been returned by :func:`fstat`, :func:`lstat`, or
-   :func:`stat`.  This function implements the underlying comparison used by
-   :func:`samefile` and :func:`sameopenfile`.
+   These structures may have been returned by :func:`os.fstat`,
+   :func:`os.lstat`, or :func:`os.stat`.  This function implements the
+   underlying comparison used by :func:`samefile` and :func:`sameopenfile`.
 
    Availability: Unix, Windows.
 
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index 5355168..67f94ac 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -643,7 +643,7 @@
 is slightly deceptive; on Unix platforms, sockets and pipes are also referenced
 by file descriptors.
 
-The :meth:`~file.fileno` method can be used to obtain the file descriptor
+The :meth:`~io.IOBase.fileno` method can be used to obtain the file descriptor
 associated with a :term:`file object` when required.  Note that using the file
 descriptor directly will bypass the file object methods, ignoring aspects such
 as internal buffering of data.
@@ -660,7 +660,7 @@
       This function is intended for low-level I/O and must be applied to a file
       descriptor as returned by :func:`os.open` or :func:`pipe`.  To close a "file
       object" returned by the built-in function :func:`open` or by :func:`popen` or
-      :func:`fdopen`, use its :meth:`~file.close` method.
+      :func:`fdopen`, use its :meth:`~io.IOBase.close` method.
 
 
 .. function:: closerange(fd_low, fd_high)
@@ -834,7 +834,7 @@
    Set the current position of file descriptor *fd* to position *pos*, modified
    by *how*: :const:`SEEK_SET` or ``0`` to set the position relative to the
    beginning of the file; :const:`SEEK_CUR` or ``1`` to set it relative to the
-   current position; :const:`os.SEEK_END` or ``2`` to set it relative to the end of
+   current position; :const:`SEEK_END` or ``2`` to set it relative to the end of
    the file. Return the new cursor position in bytes, starting from the beginning.
 
    Availability: Unix, Windows.
@@ -962,7 +962,7 @@
 .. function:: pipe()
 
    Create a pipe.  Return a pair of file descriptors ``(r, w)`` usable for
-   reading and writing, respectively. The new file descriptor are
+   reading and writing, respectively. The new file descriptor is
    :ref:`non-inheritable <fd_inheritance>`.
 
    Availability: Unix, Windows.
@@ -1217,7 +1217,7 @@
 
 On Windows, non-inheritable handles and file descriptors are closed in child
 processes, except for standard streams (file descriptors 0, 1 and 2: stdin, stdout
-and stderr), which are always inherited.  Using :func:`os.spawn*` functions,
+and stderr), which are always inherited.  Using :func:`spawn\* <spawnl>` functions,
 all inheritable handles and all inheritable file descriptors are inherited.
 Using the :mod:`subprocess` module, all file descriptors except standard
 streams are closed, and inheritable handles are only inherited if the
@@ -1612,8 +1612,8 @@
    The default *mode* is ``0o777`` (octal).  On some systems, *mode* is
    ignored.  Where it is used, the current umask value is first masked out.
 
-   If *exists_ok* is ``False`` (the default), an :exc:`OSError` is raised if
-   the target directory already exists.  If *exists_ok* is ``True`` an
+   If *exist_ok* is ``False`` (the default), an :exc:`OSError` is raised if
+   the target directory already exists.  If *exist_ok* is ``True`` an
    :exc:`OSError` is still raised if the umask-masked *mode* is different from
    the existing mode, on systems where the mode is used.  :exc:`OSError` will
    also be raised if the directory creation fails.
@@ -1868,8 +1868,8 @@
    On some Unix systems (such as Linux), the following attributes may also be
    available:
 
-   * :attr:`st_blocks` - number of blocks allocated for file
-   * :attr:`st_blksize` - filesystem blocksize
+   * :attr:`st_blocks` - number of 512-byte blocks allocated for file
+   * :attr:`st_blksize` - filesystem blocksize for efficient file system I/O
    * :attr:`st_rdev` - type of device if an inode device
    * :attr:`st_flags` - user defined flags for file
 
@@ -1993,7 +1993,7 @@
 
 .. data:: supports_dir_fd
 
-   A :class:`~collections.Set` object indicating which functions in the
+   A :class:`~collections.abc.Set` object indicating which functions in the
    :mod:`os` module permit use of their *dir_fd* parameter.  Different platforms
    provide different functionality, and an option that might work on one might
    be unsupported on another.  For consistency's sakes, functions that support
@@ -2015,7 +2015,7 @@
 
 .. data:: supports_effective_ids
 
-   A :class:`~collections.Set` object indicating which functions in the
+   A :class:`~collections.abc.Set` object indicating which functions in the
    :mod:`os` module permit use of the *effective_ids* parameter for
    :func:`os.access`.  If the local platform supports it, the collection will
    contain :func:`os.access`, otherwise it will be empty.
@@ -2033,7 +2033,7 @@
 
 .. data:: supports_fd
 
-   A :class:`~collections.Set` object indicating which functions in the
+   A :class:`~collections.abc.Set` object indicating which functions in the
    :mod:`os` module permit specifying their *path* parameter as an open file
    descriptor.  Different platforms provide different functionality, and an
    option that might work on one might be unsupported on another.  For
@@ -2054,7 +2054,7 @@
 
 .. data:: supports_follow_symlinks
 
-   A :class:`~collections.Set` object indicating which functions in the
+   A :class:`~collections.abc.Set` object indicating which functions in the
    :mod:`os` module permit use of their *follow_symlinks* parameter.  Different
    platforms provide different functionality, and an option that might work on
    one might be unsupported on another.  For consistency's sakes, functions that
@@ -2159,8 +2159,6 @@
    - If *times* and *ns* are both ``None``,
      this is equivalent to specifying ``ns=(atime_ns, mtime_ns)``
      where both times are the current time.
-     (The effect is similar to running the Unix program
-     :program:`touch` on *path*.)
 
    It is an error to specify tuples for both *times* and *ns*.
 
@@ -2405,7 +2403,7 @@
 
 These functions may be used to create and manage processes.
 
-The various :func:`exec\*` functions take a list of arguments for the new
+The various :func:`exec\* <execl>` functions take a list of arguments for the new
 program loaded into the process.  In each case, the first of these arguments is
 passed to the new program as its own name rather than as an argument a user may
 have typed on a command line.  For the C programmer, this is the ``argv[0]``
@@ -2443,9 +2441,9 @@
    descriptors are not flushed, so if there may be data buffered
    on these open files, you should flush them using
    :func:`sys.stdout.flush` or :func:`os.fsync` before calling an
-   :func:`exec\*` function.
+   :func:`exec\* <execl>` function.
 
-   The "l" and "v" variants of the :func:`exec\*` functions differ in how
+   The "l" and "v" variants of the :func:`exec\* <execl>` functions differ in how
    command-line arguments are passed.  The "l" variants are perhaps the easiest
    to work with if the number of parameters is fixed when the code is written; the
    individual parameters simply become additional parameters to the :func:`execl\*`
@@ -2457,7 +2455,7 @@
    The variants which include a "p" near the end (:func:`execlp`,
    :func:`execlpe`, :func:`execvp`, and :func:`execvpe`) will use the
    :envvar:`PATH` environment variable to locate the program *file*.  When the
-   environment is being replaced (using one of the :func:`exec\*e` variants,
+   environment is being replaced (using one of the :func:`exec\*e <execl>` variants,
    discussed in the next paragraph), the new environment is used as the source of
    the :envvar:`PATH` variable. The other variants, :func:`execl`, :func:`execle`,
    :func:`execv`, and :func:`execve`, will not use the :envvar:`PATH` variable to
@@ -2639,6 +2637,10 @@
    Note that some platforms including FreeBSD <= 6.3, Cygwin and OS/2 EMX have
    known issues when using fork() from a thread.
 
+   .. warning::
+
+      See :mod:`ssl` for applications that use the SSL module with fork().
+
    Availability: Unix.
 
 
@@ -2703,7 +2705,6 @@
 
 
 .. function:: popen(...)
-   :noindex:
 
    Run child processes, returning opened pipes for communications.  These functions
    are described in section :ref:`os-newstreams`.
@@ -2731,7 +2732,7 @@
    process.  On Windows, the process id will actually be the process handle, so can
    be used with the :func:`waitpid` function.
 
-   The "l" and "v" variants of the :func:`spawn\*` functions differ in how
+   The "l" and "v" variants of the :func:`spawn\* <spawnl>` functions differ in how
    command-line arguments are passed.  The "l" variants are perhaps the easiest
    to work with if the number of parameters is fixed when the code is written; the
    individual parameters simply become additional parameters to the
@@ -2743,7 +2744,7 @@
    The variants which include a second "p" near the end (:func:`spawnlp`,
    :func:`spawnlpe`, :func:`spawnvp`, and :func:`spawnvpe`) will use the
    :envvar:`PATH` environment variable to locate the program *file*.  When the
-   environment is being replaced (using one of the :func:`spawn\*e` variants,
+   environment is being replaced (using one of the :func:`spawn\*e <spawnl>` variants,
    discussed in the next paragraph), the new environment is used as the source of
    the :envvar:`PATH` variable.  The other variants, :func:`spawnl`,
    :func:`spawnle`, :func:`spawnv`, and :func:`spawnve`, will not use the
@@ -2777,7 +2778,7 @@
 .. data:: P_NOWAIT
           P_NOWAITO
 
-   Possible values for the *mode* parameter to the :func:`spawn\*` family of
+   Possible values for the *mode* parameter to the :func:`spawn\* <spawnl>` family of
    functions.  If either of these values is given, the :func:`spawn\*` functions
    will return as soon as the new process has been created, with the process id as
    the return value.
@@ -2787,7 +2788,7 @@
 
 .. data:: P_WAIT
 
-   Possible value for the *mode* parameter to the :func:`spawn\*` family of
+   Possible value for the *mode* parameter to the :func:`spawn\* <spawnl>` family of
    functions.  If this is given as *mode*, the :func:`spawn\*` functions will not
    return until the new process has run to completion and will return the exit code
    of the process the run is successful, or ``-signal`` if a signal kills the
@@ -2799,11 +2800,11 @@
 .. data:: P_DETACH
           P_OVERLAY
 
-   Possible values for the *mode* parameter to the :func:`spawn\*` family of
+   Possible values for the *mode* parameter to the :func:`spawn\* <spawnl>` family of
    functions.  These are less portable than those listed above. :const:`P_DETACH`
    is similar to :const:`P_NOWAIT`, but the new process is detached from the
    console of the calling process. If :const:`P_OVERLAY` is used, the current
-   process will be replaced; the :func:`spawn\*` function will not return.
+   process will be replaced; the :func:`spawn\* <spawnl>` function will not return.
 
    Availability: Windows.
 
@@ -2975,8 +2976,8 @@
    (shifting makes cross-platform use of the function easier). A *pid* less than or
    equal to ``0`` has no special meaning on Windows, and raises an exception. The
    value of integer *options* has no effect. *pid* can refer to any process whose
-   id is known, not necessarily a child process. The :func:`spawn` functions called
-   with :const:`P_NOWAIT` return suitable process handles.
+   id is known, not necessarily a child process. The :func:`spawn\* <spawnl>`
+   functions called with :const:`P_NOWAIT` return suitable process handles.
 
 
 .. function:: wait3(options)
@@ -2984,8 +2985,9 @@
    Similar to :func:`waitpid`, except no process id argument is given and a
    3-element tuple containing the child's process id, exit status indication, and
    resource usage information is returned.  Refer to :mod:`resource`.\
-   :func:`getrusage` for details on resource usage information.  The option
-   argument is the same as that provided to :func:`waitpid` and :func:`wait4`.
+   :func:`~resource.getrusage` for details on resource usage information.  The
+   option argument is the same as that provided to :func:`waitpid` and
+   :func:`wait4`.
 
    Availability: Unix.
 
@@ -2994,9 +2996,9 @@
 
    Similar to :func:`waitpid`, except a 3-element tuple, containing the child's
    process id, exit status indication, and resource usage information is returned.
-   Refer to :mod:`resource`.\ :func:`getrusage` for details on resource usage
-   information.  The arguments to :func:`wait4` are the same as those provided to
-   :func:`waitpid`.
+   Refer to :mod:`resource`.\ :func:`~resource.getrusage` for details on
+   resource usage information.  The arguments to :func:`wait4` are the same
+   as those provided to :func:`waitpid`.
 
    Availability: Unix.
 
@@ -3332,8 +3334,9 @@
 
 .. data:: defpath
 
-   The default search path used by :func:`exec\*p\*` and :func:`spawn\*p\*` if the
-   environment doesn't have a ``'PATH'`` key. Also available via :mod:`os.path`.
+   The default search path used by :func:`exec\*p\* <execl>` and
+   :func:`spawn\*p\* <spawnl>` if the environment doesn't have a ``'PATH'``
+   key. Also available via :mod:`os.path`.
 
 
 .. data:: linesep
@@ -3377,8 +3380,9 @@
    This function returns random bytes from an OS-specific randomness source.  The
    returned data should be unpredictable enough for cryptographic applications,
    though its exact quality depends on the OS implementation.  On a Unix-like
-   system this will query /dev/urandom, and on Windows it will use CryptGenRandom.
-   If a randomness source is not found, :exc:`NotImplementedError` will be raised.
+   system this will query ``/dev/urandom``, and on Windows it will use
+   ``CryptGenRandom()``.  If a randomness source is not found,
+   :exc:`NotImplementedError` will be raised.
 
    For an easy-to-use interface to the random number generator
    provided by your platform, please see :class:`random.SystemRandom`.
diff --git a/Doc/library/ossaudiodev.rst b/Doc/library/ossaudiodev.rst
index 3002700..b53e80f 100644
--- a/Doc/library/ossaudiodev.rst
+++ b/Doc/library/ossaudiodev.rst
@@ -169,11 +169,11 @@
    be used in a :keyword:`with` statement.
 
 
-The following methods each map to exactly one :func:`ioctl` system call.  The
+The following methods each map to exactly one :c:func:`ioctl` system call.  The
 correspondence is obvious: for example, :meth:`setfmt` corresponds to the
 ``SNDCTL_DSP_SETFMT`` ioctl, and :meth:`sync` to ``SNDCTL_DSP_SYNC`` (this can
 be useful when consulting the OSS documentation).  If the underlying
-:func:`ioctl` fails, they all raise :exc:`OSError`.
+:c:func:`ioctl` fails, they all raise :exc:`OSError`.
 
 
 .. method:: oss_audio_device.nonblock()
@@ -302,7 +302,7 @@
 
       fmt = dsp.setfmt(fmt)
       channels = dsp.channels(channels)
-      rate = dsp.rate(channels)
+      rate = dsp.rate(rate)
 
 
 .. method:: oss_audio_device.bufsize()
diff --git a/Doc/library/othergui.rst b/Doc/library/othergui.rst
index da66003..eb49b99 100644
--- a/Doc/library/othergui.rst
+++ b/Doc/library/othergui.rst
@@ -19,8 +19,7 @@
       `PyGTK <http://www.pygtk.org/>`_ provides bindings for an older version
       of the library, GTK+ 2.  It provides an object oriented interface that
       is slightly higher level than the C one.  There are also bindings to
-      `GNOME <http://www.gnome.org>`_.  One well known PyGTK application is
-      `PythonCAD <http://www.pythoncad.org/>`_. An online `tutorial
+      `GNOME <http://www.gnome.org>`_.  An online `tutorial
       <http://www.pygtk.org/pygtk2tutorial/index.html>`_ is available.
 
    `PyQt <http://www.riverbankcomputing.co.uk/software/pyqt/>`_
diff --git a/Doc/library/pdb.rst b/Doc/library/pdb.rst
index f4e37ac..48a8a6b 100644
--- a/Doc/library/pdb.rst
+++ b/Doc/library/pdb.rst
@@ -41,7 +41,7 @@
 .. versionchanged:: 3.3
    Tab-completion via the :mod:`readline` module is available for commands and
    command arguments, e.g. the current global and local names are offered as
-   arguments of the ``print`` command.
+   arguments of the ``p`` command.
 
 :file:`pdb.py` can also be invoked as a script to debug other scripts.  For
 example::
@@ -309,7 +309,7 @@
    ``end`` to terminate the commands. An example::
 
       (Pdb) commands 1
-      (com) print some_variable
+      (com) p some_variable
       (com) end
       (Pdb)
 
@@ -403,13 +403,19 @@
 
    Print the argument list of the current function.
 
-.. pdbcommand:: p(rint) expression
+.. pdbcommand:: p expression
 
    Evaluate the *expression* in the current context and print its value.
 
+   .. note::
+
+      ``print()`` can also be used, but is not a debugger command --- this executes the
+      Python :func:`print` function.
+
+
 .. pdbcommand:: pp expression
 
-   Like the :pdbcmd:`print` command, except the value of the expression is
+   Like the :pdbcmd:`p` command, except the value of the expression is
    pretty-printed using the :mod:`pprint` module.
 
 .. pdbcommand:: whatis expression
diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index 168ef56..9404a47 100644
--- a/Doc/library/pickle.rst
+++ b/Doc/library/pickle.rst
@@ -12,7 +12,7 @@
 .. module:: pickle
    :synopsis: Convert Python objects to streams of bytes and back.
 .. sectionauthor:: Jim Kerr <jbkerr@sr.hp.com>.
-.. sectionauthor:: Barry Warsaw <barry@zope.com>
+.. sectionauthor:: Barry Warsaw <barry@python.org>
 
 
 The :mod:`pickle` module implements a fundamental, but powerful algorithm for
@@ -294,7 +294,7 @@
       :func:`copyreg.pickle`.  It is a mapping whose keys are classes
       and whose values are reduction functions.  A reduction function
       takes a single argument of the associated class and should
-      conform to the same interface as a :meth:`~object.__reduce__`
+      conform to the same interface as a :meth:`__reduce__`
       method.
 
       By default, a pickler object will not have a
@@ -384,14 +384,15 @@
 
 * tuples, lists, sets, and dictionaries containing only picklable objects
 
-* functions defined at the top level of a module
+* functions defined at the top level of a module (using :keyword:`def`, not
+  :keyword:`lambda`)
 
 * built-in functions defined at the top level of a module
 
 * classes that are defined at the top level of a module
 
-* instances of such classes whose :attr:`__dict__` or the result of calling
-  :meth:`__getstate__` is picklable  (see section :ref:`pickle-inst` for
+* instances of such classes whose :attr:`~object.__dict__` or the result of
+  calling :meth:`__getstate__` is picklable  (see section :ref:`pickle-inst` for
   details).
 
 Attempts to pickle unpicklable objects will raise the :exc:`PicklingError`
@@ -402,7 +403,7 @@
 :func:`sys.setrecursionlimit`.
 
 Note that functions (built-in and user-defined) are pickled by "fully qualified"
-name reference, not by value.  This means that only the function name is
+name reference, not by value. [#]_  This means that only the function name is
 pickled, along with the name of the module the function is defined in.  Neither
 the function's code, nor any of its function attributes are pickled.  Thus the
 defining module must be importable in the unpickling environment, and the module
@@ -435,6 +436,8 @@
 Pickling Class Instances
 ------------------------
 
+.. currentmodule:: None
+
 In this section, we describe the general mechanisms available to you to define,
 customize, and control how class instances are pickled and unpickled.
 
@@ -470,7 +473,7 @@
    defines the method :meth:`__getstate__`, it is called and the returned object
    is pickled as the contents for the instance, instead of the contents of the
    instance's dictionary.  If the :meth:`__getstate__` method is absent, the
-   instance's :attr:`__dict__` is pickled as usual.
+   instance's :attr:`~object.__dict__` is pickled as usual.
 
 
 .. method:: object.__setstate__(state)
@@ -539,7 +542,7 @@
    * Optionally, the object's state, which will be passed to the object's
      :meth:`__setstate__` method as previously described.  If the object has no
      such method then, the value must be a dictionary and it will be added to
-     the object's :attr:`__dict__` attribute.
+     the object's :attr:`~object.__dict__` attribute.
 
    * Optionally, an iterator (and not a sequence) yielding successive items.
      These items will be appended to the object either using
@@ -565,6 +568,8 @@
    the extended version.  The main use for this method is to provide
    backwards-compatible reduce values for older Python releases.
 
+.. currentmodule:: pickle
+
 .. _pickle-persistent:
 
 Persistence of External Objects
@@ -582,19 +587,19 @@
 
 The resolution of such persistent IDs is not defined by the :mod:`pickle`
 module; it will delegate this resolution to the user defined methods on the
-pickler and unpickler, :meth:`persistent_id` and :meth:`persistent_load`
-respectively.
+pickler and unpickler, :meth:`~Pickler.persistent_id` and
+:meth:`~Unpickler.persistent_load` respectively.
 
 To pickle objects that have an external persistent id, the pickler must have a
-custom :meth:`persistent_id` method that takes an object as an argument and
-returns either ``None`` or the persistent id for that object.  When ``None`` is
-returned, the pickler simply pickles the object as normal.  When a persistent ID
-string is returned, the pickler will pickle that object, along with a marker so
-that the unpickler will recognize it as a persistent ID.
+custom :meth:`~Pickler.persistent_id` method that takes an object as an
+argument and returns either ``None`` or the persistent id for that object.
+When ``None`` is returned, the pickler simply pickles the object as normal.
+When a persistent ID string is returned, the pickler will pickle that object,
+along with a marker so that the unpickler will recognize it as a persistent ID.
 
 To unpickle external objects, the unpickler must have a custom
-:meth:`persistent_load` method that takes a persistent ID object and returns the
-referenced object.
+:meth:`~Unpickler.persistent_load` method that takes a persistent ID object and
+returns the referenced object.
 
 Here is a comprehensive example presenting how persistent ID can be used to
 pickle external objects by reference.
@@ -651,7 +656,7 @@
 
 Here's an example that shows how to modify pickling behavior for a class.
 The :class:`TextReader` class opens a text file, and returns the line number and
-line contents each time its :meth:`readline` method is called. If a
+line contents each time its :meth:`!readline` method is called. If a
 :class:`TextReader` instance is pickled, all attributes *except* the file object
 member are saved. When the instance is unpickled, the file is reopened, and
 reading resumes from the last location. The :meth:`__setstate__` and
@@ -730,9 +735,10 @@
 inoffensive, it is not difficult to imagine one that could damage your system.
 
 For this reason, you may want to control what gets unpickled by customizing
-:meth:`Unpickler.find_class`.  Unlike its name suggests, :meth:`find_class` is
-called whenever a global (i.e., a class or a function) is requested.  Thus it is
-possible to either completely forbid globals or restrict them to a safe subset.
+:meth:`Unpickler.find_class`.  Unlike its name suggests,
+:meth:`Unpickler.find_class` is called whenever a global (i.e., a class or
+a function) is requested.  Thus it is possible to either completely forbid
+globals or restrict them to a safe subset.
 
 Here is an example of an unpickler allowing only few safe classes from the
 :mod:`builtins` module to be loaded::
@@ -845,6 +851,9 @@
 
 .. [#] Don't confuse this with the :mod:`marshal` module
 
+.. [#] This is why :keyword:`lambda` functions cannot be pickled:  all
+    :keyword:`lambda` functions share the same name:  ``<lambda>``.
+
 .. [#] The exception raised will likely be an :exc:`ImportError` or an
    :exc:`AttributeError` but it could be something else.
 
diff --git a/Doc/library/platform.rst b/Doc/library/platform.rst
index a6a98f1..e27f2ad 100644
--- a/Doc/library/platform.rst
+++ b/Doc/library/platform.rst
@@ -194,8 +194,8 @@
 .. function:: win32_ver(release='', version='', csd='', ptype='')
 
    Get additional version information from the Windows Registry and return a tuple
-   ``(version, csd, ptype)`` referring to version number, CSD level
-   (service pack) and OS type (multi/single processor).
+   ``(release, version, csd, ptype)`` referring to OS release, version number,
+   CSD level (service pack) and OS type (multi/single processor).
 
    As a hint: *ptype* is ``'Uniprocessor Free'`` on single processor NT machines
    and ``'Multiprocessor Free'`` on multi processor machines. The *'Free'* refers
diff --git a/Doc/library/posix.rst b/Doc/library/posix.rst
index ba1b4b5..06bab04 100644
--- a/Doc/library/posix.rst
+++ b/Doc/library/posix.rst
@@ -19,7 +19,7 @@
 available through the :mod:`os` interface.  Once :mod:`os` is imported, there is
 *no* performance penalty in using it instead of :mod:`posix`.  In addition,
 :mod:`os` provides some additional functionality, such as automatically calling
-:func:`putenv` when an entry in ``os.environ`` is changed.
+:func:`~os.putenv` when an entry in ``os.environ`` is changed.
 
 Errors are reported as exceptions; the usual exceptions are given for type
 errors, while errors reported by the system calls raise :exc:`OSError`.
@@ -74,9 +74,10 @@
    pathname of your home directory, equivalent to ``getenv("HOME")`` in C.
 
    Modifying this dictionary does not affect the string environment passed on by
-   :func:`execv`, :func:`popen` or :func:`system`; if you need to change the
-   environment, pass ``environ`` to :func:`execve` or add variable assignments and
-   export statements to the command string for :func:`system` or :func:`popen`.
+   :func:`~os.execv`, :func:`~os.popen` or :func:`~os.system`; if you need to
+   change the environment, pass ``environ`` to :func:`~os.execve` or add
+   variable assignments and export statements to the command string for
+   :func:`~os.system` or :func:`~os.popen`.
 
    .. versionchanged:: 3.2
       On Unix, keys and values are bytes.
diff --git a/Doc/library/profile.rst b/Doc/library/profile.rst
index aefc024..f2453f1 100644
--- a/Doc/library/profile.rst
+++ b/Doc/library/profile.rst
@@ -600,8 +600,8 @@
 
 .. _profile-timers:
 
-Using a customer timer
-======================
+Using a custom timer
+====================
 
 If you want to change how current time is determined (for example, to force use
 of wall-clock time or elapsed process time), pass the timing function you want
diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst
index e3b7917..b1543d8 100644
--- a/Doc/library/pyexpat.rst
+++ b/Doc/library/pyexpat.rst
@@ -484,8 +484,8 @@
 .. attribute:: ExpatError.code
 
    Expat's internal error number for the specific error.  The
-   :data:`errors.messages` dictionary maps these error numbers to Expat's error
-   messages.  For example::
+   :data:`errors.messages <xml.parsers.expat.errors.messages>` dictionary maps
+   these error numbers to Expat's error messages.  For example::
 
       from xml.parsers.expat import ParserCreate, ExpatError, errors
 
@@ -495,9 +495,9 @@
       except ExpatError as err:
           print("Error:", errors.messages[err.code])
 
-   The :mod:`errors` module also provides error message constants and a
-   dictionary :data:`~errors.codes` mapping these messages back to the error
-   codes, see below.
+   The :mod:`~xml.parsers.expat.errors` module also provides error message
+   constants and a dictionary :data:`~xml.parsers.expat.errors.codes` mapping
+   these messages back to the error codes, see below.
 
 
 .. attribute:: ExpatError.lineno
diff --git a/Doc/library/python.rst b/Doc/library/python.rst
index b67fbfc..f307d7d 100644
--- a/Doc/library/python.rst
+++ b/Doc/library/python.rst
@@ -25,4 +25,3 @@
    inspect.rst
    site.rst
    fpectl.rst
-   distutils.rst
diff --git a/Doc/library/re.rst b/Doc/library/re.rst
index b0cb870..762ca49 100644
--- a/Doc/library/re.rst
+++ b/Doc/library/re.rst
@@ -242,21 +242,32 @@
 
 ``(?P<name>...)``
    Similar to regular parentheses, but the substring matched by the group is
-   accessible within the rest of the regular expression via the symbolic group
-   name *name*.  Group names must be valid Python identifiers, and each group
-   name must be defined only once within a regular expression.  A symbolic group
-   is also a numbered group, just as if the group were not named.  So the group
-   named ``id`` in the example below can also be referenced as the numbered group
-   ``1``.
+   accessible via the symbolic group name *name*.  Group names must be valid
+   Python identifiers, and each group name must be defined only once within a
+   regular expression.  A symbolic group is also a numbered group, just as if
+   the group were not named.
 
-   For example, if the pattern is ``(?P<id>[a-zA-Z_]\w*)``, the group can be
-   referenced by its name in arguments to methods of match objects, such as
-   ``m.group('id')`` or ``m.end('id')``, and also by name in the regular
-   expression itself (using ``(?P=id)``) and replacement text given to
-   ``.sub()`` (using ``\g<id>``).
+   Named groups can be referenced in three contexts.  If the pattern is
+   ``(?P<quote>['"]).*?(?P=quote)`` (i.e. matching a string quoted with either
+   single or double quotes):
+
+   +---------------------------------------+----------------------------------+
+   | Context of reference to group "quote" | Ways to reference it             |
+   +=======================================+==================================+
+   | in the same pattern itself            | * ``(?P=quote)`` (as shown)      |
+   |                                       | * ``\1``                         |
+   +---------------------------------------+----------------------------------+
+   | when processing match object ``m``    | * ``m.group('quote')``           |
+   |                                       | * ``m.end('quote')`` (etc.)      |
+   +---------------------------------------+----------------------------------+
+   | in a string passed to the ``repl``    | * ``\g<quote>``                  |
+   | argument of ``re.sub()``              | * ``\g<1>``                      |
+   |                                       | * ``\1``                         |
+   +---------------------------------------+----------------------------------+
 
 ``(?P=name)``
-   Matches whatever text was matched by the earlier group named *name*.
+   A backreference to a named group; it matches whatever text was matched by the
+   earlier group named *name*.
 
 ``(?#...)``
    A comment; the contents of the parentheses are simply ignored.
@@ -316,7 +327,7 @@
 ``\number``
    Matches the contents of the group of the same number.  Groups are numbered
    starting from 1.  For example, ``(.+) \1`` matches ``'the the'`` or ``'55 55'``,
-   but not ``'the end'`` (note the space after the group).  This special sequence
+   but not ``'thethe'`` (note the space after the group).  This special sequence
    can only be used to match one of the first 99 groups.  If the first digit of
    *number* is 0, or *number* is 3 octal digits long, it will not be interpreted as
    a group match, but as the character with octal value *number*. Inside the
@@ -667,7 +678,8 @@
    when not adjacent to a previous match, so ``sub('x*', '-', 'abc')`` returns
    ``'-a-b-c-'``.
 
-   In addition to character escapes and backreferences as described above,
+   In string-type *repl* arguments, in addition to the character escapes and
+   backreferences described above,
    ``\g<name>`` will use the substring matched by the group named ``name``, as
    defined by the ``(?P<name>...)`` syntax. ``\g<number>`` uses the corresponding
    group number; ``\g<2>`` is therefore equivalent to ``\2``, but isn't ambiguous
diff --git a/Doc/library/resource.rst b/Doc/library/resource.rst
index ed85850..9bb5848 100644
--- a/Doc/library/resource.rst
+++ b/Doc/library/resource.rst
@@ -74,6 +74,27 @@
    ``setrlimit`` may also raise :exc:`error` if the underlying system call
    fails.
 
+.. function:: prlimit(pid, resource[, limits])
+
+   Combines :func:`setrlimit` and :func:`getrlimit` in one function and
+   supports to get and set the resources limits of an arbitrary process. If
+   *pid* is 0, then the call applies to the current process. *resource* and
+   *limits* have the same meaning as in :func:`setrlimit`, except that
+   *limits* is optional.
+
+   When *limits* is not given the function returns the *resource* limit of the
+   process *pid*. When *limits* is given the *resource* limit of the process is
+   set and the former resource limit is returned.
+
+   Raises :exc:`ProcessLookupError` when *pid* can't be found and
+   :exc:`PermissionError` when the user doesn't have ``CAP_SYS_RESOURCE`` for
+   the process.
+
+   Availability: Linux 2.6.36 or later with glibc 2.13 or later
+
+   .. versionadded:: 3.4
+
+
 These symbols define resources whose consumption can be controlled using the
 :func:`setrlimit` and :func:`getrlimit` functions described below. The values of
 these symbols are exactly the constants used by C programs.
@@ -151,6 +172,52 @@
    The maximum area (in bytes) of address space which may be taken by the process.
 
 
+.. data:: RLIMIT_MSGQUEUE
+
+   The number of bytes that can be allocated for POSIX message queues.
+
+   Availability: Linux 2.6.8 or later.
+
+   .. versionadded:: 3.4
+
+
+.. data:: RLIMIT_NICE
+
+   The ceiling for the process's nice level (calculated as 20 - rlim_cur).
+
+   Availability: Linux 2.6.12 or later.
+
+   .. versionadded:: 3.4
+
+
+.. data:: RLIMIT_RTPRIO
+
+   The ceiling of the real-time priority.
+
+   Availability: Linux 2.6.12 or later.
+
+   .. versionadded:: 3.4
+
+
+.. data:: RLIMIT_RTTIME
+
+   The time limit (in microseconds) on CPU time that a process can spend
+   under real-time scheduling without making a blocking syscall.
+
+   Availability: Linux 2.6.25 or later.
+
+   .. versionadded:: 3.4
+
+
+.. data:: RLIMIT_SIGPENDING
+
+   The number of signals which the process may queue.
+
+   Availability: Linux 2.6.8 or later.
+
+   .. versionadded:: 3.4
+
+
 Resource Usage
 --------------
 
diff --git a/Doc/library/selectors.rst b/Doc/library/selectors.rst
index ece5e7d..e3ebd25 100644
--- a/Doc/library/selectors.rst
+++ b/Doc/library/selectors.rst
@@ -164,6 +164,14 @@
       This returns the :class:`SelectorKey` instance associated to this file
       object, or raises :exc:`KeyError` if the file object is not registered.
 
+   .. method:: get_map()
+
+      Return a mapping of file objects to selector keys.
+
+      This returns a :class:`~collections.abc.Mapping` instance mapping
+      registered file objects to their associated :class:`SelectorKey`
+      instance.
+
 
 .. class:: DefaultSelector()
 
diff --git a/Doc/library/shelve.rst b/Doc/library/shelve.rst
index b60a548..4ba9ddc 100644
--- a/Doc/library/shelve.rst
+++ b/Doc/library/shelve.rst
@@ -106,8 +106,8 @@
 
 .. class:: Shelf(dict, protocol=None, writeback=False, keyencoding='utf-8')
 
-   A subclass of :class:`collections.MutableMapping` which stores pickled values
-   in the *dict* object.
+   A subclass of :class:`collections.abc.MutableMapping` which stores pickled
+   values in the *dict* object.
 
    By default, version 0 pickles are used to serialize values.  The version of the
    pickle protocol can be specified with the *protocol* parameter. See the
diff --git a/Doc/library/shlex.rst b/Doc/library/shlex.rst
index 941e090..e40a10d 100644
--- a/Doc/library/shlex.rst
+++ b/Doc/library/shlex.rst
@@ -12,9 +12,9 @@
 
 --------------
 
-The :class:`shlex` class makes it easy to write lexical analyzers for simple
-syntaxes resembling that of the Unix shell.  This will often be useful for
-writing minilanguages, (for example, in run control files for Python
+The :class:`~shlex.shlex` class makes it easy to write lexical analyzers for
+simple syntaxes resembling that of the Unix shell.  This will often be useful
+for writing minilanguages, (for example, in run control files for Python
 applications) or for parsing quoted strings.
 
 The :mod:`shlex` module defines the following functions:
@@ -24,15 +24,16 @@
 
    Split the string *s* using shell-like syntax. If *comments* is :const:`False`
    (the default), the parsing of comments in the given string will be disabled
-   (setting the :attr:`commenters` attribute of the :class:`shlex` instance to
-   the empty string).  This function operates in POSIX mode by default, but uses
-   non-POSIX mode if the *posix* argument is false.
+   (setting the :attr:`~shlex.commenters` attribute of the
+   :class:`~shlex.shlex` instance to the empty string).  This function operates
+   in POSIX mode by default, but uses non-POSIX mode if the *posix* argument is
+   false.
 
    .. note::
 
-      Since the :func:`split` function instantiates a :class:`shlex` instance,
-      passing ``None`` for *s* will read the string to split from standard
-      input.
+      Since the :func:`split` function instantiates a :class:`~shlex.shlex`
+      instance, passing ``None`` for *s* will read the string to split from
+      standard input.
 
 
 .. function:: quote(s)
@@ -73,17 +74,19 @@
 
 .. class:: shlex(instream=None, infile=None, posix=False)
 
-   A :class:`shlex` instance or subclass instance is a lexical analyzer object.
-   The initialization argument, if present, specifies where to read characters
-   from. It must be a file-/stream-like object with :meth:`read` and
-   :meth:`readline` methods, or a string.  If no argument is given, input will
-   be taken from ``sys.stdin``.  The second optional argument is a filename
-   string, which sets the initial value of the :attr:`infile` attribute.  If the
-   *instream* argument is omitted or equal to ``sys.stdin``, this second
-   argument defaults to "stdin".  The *posix* argument defines the operational
-   mode: when *posix* is not true (default), the :class:`shlex` instance will
-   operate in compatibility mode.  When operating in POSIX mode, :class:`shlex`
-   will try to be as close as possible to the POSIX shell parsing rules.
+   A :class:`~shlex.shlex` instance or subclass instance is a lexical analyzer
+   object.  The initialization argument, if present, specifies where to read
+   characters from. It must be a file-/stream-like object with
+   :meth:`~io.TextIOBase.read` and :meth:`~io.TextIOBase.readline` methods, or
+   a string.  If no argument is given, input will be taken from ``sys.stdin``.
+   The second optional argument is a filename string, which sets the initial
+   value of the :attr:`~shlex.infile` attribute.  If the *instream*
+   argument is omitted or equal to ``sys.stdin``, this second argument
+   defaults to "stdin".  The *posix* argument defines the operational mode:
+   when *posix* is not true (default), the :class:`~shlex.shlex` instance will
+   operate in compatibility mode.  When operating in POSIX mode,
+   :class:`~shlex.shlex` will try to be as close as possible to the POSIX shell
+   parsing rules.
 
 
 .. seealso::
@@ -97,14 +100,14 @@
 shlex Objects
 -------------
 
-A :class:`shlex` instance has the following methods:
+A :class:`~shlex.shlex` instance has the following methods:
 
 
 .. method:: shlex.get_token()
 
    Return a token.  If tokens have been stacked using :meth:`push_token`, pop a
    token off the stack.  Otherwise, read one from the input stream.  If reading
-   encounters an immediate end-of-file, :attr:`self.eof` is returned (the empty
+   encounters an immediate end-of-file, :attr:`eof` is returned (the empty
    string (``''``) in non-POSIX mode, and ``None`` in POSIX mode).
 
 
@@ -122,9 +125,9 @@
 
 .. method:: shlex.sourcehook(filename)
 
-   When :class:`shlex` detects a source request (see :attr:`source` below) this
-   method is given the following token as argument, and expected to return a tuple
-   consisting of a filename and an open file-like object.
+   When :class:`~shlex.shlex` detects a source request (see :attr:`source`
+   below) this method is given the following token as argument, and expected
+   to return a tuple consisting of a filename and an open file-like object.
 
    Normally, this method first strips any quotes off the argument.  If the result
    is an absolute pathname, or there was no previous source request in effect, or
@@ -141,8 +144,9 @@
 
    This hook is exposed so that you can use it to implement directory search paths,
    addition of file extensions, and other namespace hacks. There is no
-   corresponding 'close' hook, but a shlex instance will call the :meth:`close`
-   method of the sourced input stream when it returns EOF.
+   corresponding 'close' hook, but a shlex instance will call the
+   :meth:`~io.IOBase.close` method of the sourced input stream when it returns
+   EOF.
 
    For more explicit control of source stacking, use the :meth:`push_source` and
    :meth:`pop_source` methods.
@@ -172,8 +176,8 @@
    messages in the standard, parseable format understood by Emacs and other Unix
    tools.
 
-Instances of :class:`shlex` subclasses have some public instance variables which
-either control lexical analysis or can be used for debugging:
+Instances of :class:`~shlex.shlex` subclasses have some public instance
+variables which either control lexical analysis or can be used for debugging:
 
 
 .. attribute:: shlex.commenters
@@ -218,8 +222,8 @@
 .. attribute:: shlex.whitespace_split
 
    If ``True``, tokens will only be split in whitespaces. This is useful, for
-   example, for parsing command lines with :class:`shlex`, getting tokens in a
-   similar way to shell arguments.
+   example, for parsing command lines with :class:`~shlex.shlex`, getting
+   tokens in a similar way to shell arguments.
 
 
 .. attribute:: shlex.infile
@@ -231,7 +235,8 @@
 
 .. attribute:: shlex.instream
 
-   The input stream from which this :class:`shlex` instance is reading characters.
+   The input stream from which this :class:`~shlex.shlex` instance is reading
+   characters.
 
 
 .. attribute:: shlex.source
@@ -240,16 +245,16 @@
    string will be recognized as a lexical-level inclusion request similar to the
    ``source`` keyword in various shells.  That is, the immediately following token
    will opened as a filename and input taken from that stream until EOF, at which
-   point the :meth:`close` method of that stream will be called and the input
-   source will again become the original input stream. Source requests may be
-   stacked any number of levels deep.
+   point the :meth:`~io.IOBase.close` method of that stream will be called and
+   the input source will again become the original input stream.  Source
+   requests may be stacked any number of levels deep.
 
 
 .. attribute:: shlex.debug
 
-   If this attribute is numeric and ``1`` or more, a :class:`shlex` instance will
-   print verbose progress output on its behavior.  If you need to use this, you can
-   read the module source code to learn the details.
+   If this attribute is numeric and ``1`` or more, a :class:`~shlex.shlex`
+   instance will print verbose progress output on its behavior.  If you need
+   to use this, you can read the module source code to learn the details.
 
 
 .. attribute:: shlex.lineno
@@ -273,7 +278,7 @@
 Parsing Rules
 -------------
 
-When operating in non-POSIX mode, :class:`shlex` will try to obey to the
+When operating in non-POSIX mode, :class:`~shlex.shlex` will try to obey to the
 following rules.
 
 * Quote characters are not recognized within words (``Do"Not"Separate`` is
@@ -287,16 +292,17 @@
 * Closing quotes separate words (``"Do"Separate`` is parsed as ``"Do"`` and
   ``Separate``);
 
-* If :attr:`whitespace_split` is ``False``, any character not declared to be a
-  word character, whitespace, or a quote will be returned as a single-character
-  token. If it is ``True``, :class:`shlex` will only split words in whitespaces;
+* If :attr:`~shlex.whitespace_split` is ``False``, any character not
+  declared to be a word character, whitespace, or a quote will be returned as
+  a single-character token. If it is ``True``, :class:`~shlex.shlex` will only
+  split words in whitespaces;
 
 * EOF is signaled with an empty string (``''``);
 
 * It's not possible to parse empty strings, even if quoted.
 
-When operating in POSIX mode, :class:`shlex` will try to obey to the following
-parsing rules.
+When operating in POSIX mode, :class:`~shlex.shlex` will try to obey to the
+following parsing rules.
 
 * Quotes are stripped out, and do not separate words (``"Do"Not"Separate"`` is
   parsed as the single word ``DoNotSeparate``);
@@ -304,14 +310,16 @@
 * Non-quoted escape characters (e.g. ``'\'``) preserve the literal value of the
   next character that follows;
 
-* Enclosing characters in quotes which are not part of :attr:`escapedquotes`
-  (e.g. ``"'"``) preserve the literal value of all characters within the quotes;
+* Enclosing characters in quotes which are not part of
+  :attr:`~shlex.escapedquotes` (e.g. ``"'"``) preserve the literal value
+  of all characters within the quotes;
 
-* Enclosing characters in quotes which are part of :attr:`escapedquotes` (e.g.
-  ``'"'``) preserves the literal value of all characters within the quotes, with
-  the exception of the characters mentioned in :attr:`escape`. The escape
-  characters retain its special meaning only when followed by the quote in use, or
-  the escape character itself. Otherwise the escape character will be considered a
+* Enclosing characters in quotes which are part of
+  :attr:`~shlex.escapedquotes` (e.g. ``'"'``) preserves the literal value
+  of all characters within the quotes, with the exception of the characters
+  mentioned in :attr:`~shlex.escape`.  The escape characters retain its
+  special meaning only when followed by the quote in use, or the escape
+  character itself. Otherwise the escape character will be considered a
   normal character.
 
 * EOF is signaled with a :const:`None` value;
diff --git a/Doc/library/signal.rst b/Doc/library/signal.rst
index 2a472fe..84e2836 100644
--- a/Doc/library/signal.rst
+++ b/Doc/library/signal.rst
@@ -36,7 +36,11 @@
 This has consequences:
 
 * It makes little sense to catch synchronous errors like :const:`SIGFPE` or
-  :const:`SIGSEGV`.
+  :const:`SIGSEGV` that are caused by an invalid operation in C code.  Python
+  will return from the signal handler to the C code, which is likely to raise
+  the same signal again, causing Python to apparently hang.  From Python 3.3
+  onwards, you can use the :mod:`faulthandler` module to report on synchronous
+  errors.
 
 * A long-running calculation implemented purely in C (such as regular
   expression matching on a large body of text) may run uninterrupted for an
diff --git a/Doc/library/site.rst b/Doc/library/site.rst
index 2175c3e..d93e938 100644
--- a/Doc/library/site.rst
+++ b/Doc/library/site.rst
@@ -38,6 +38,9 @@
 if it refers to an existing directory, and if so, adds it to ``sys.path`` and
 also inspects the newly added path for configuration files.
 
+.. deprecated:: 3.4
+   Support for the "site-python" directory will be removed in 3.5.
+
 If a file named "pyvenv.cfg" exists one directory above sys.executable,
 sys.prefix and sys.exec_prefix are set to that directory and
 it is also checked for site-packages and site-python (sys.base_prefix and
diff --git a/Doc/library/smtpd.rst b/Doc/library/smtpd.rst
index 2c2df8a..3ebed06 100644
--- a/Doc/library/smtpd.rst
+++ b/Doc/library/smtpd.rst
@@ -4,7 +4,7 @@
 .. module:: smtpd
    :synopsis: A SMTP server implementation in Python.
 
-.. moduleauthor:: Barry Warsaw <barry@zope.com>
+.. moduleauthor:: Barry Warsaw <barry@python.org>
 .. sectionauthor:: Moshe Zadka <moshez@moshez.org>
 
 **Source code:** :source:`Lib/smtpd.py`
@@ -27,7 +27,7 @@
 ------------------
 
 
-.. class:: SMTPServer(localaddr, remoteaddr, data_size_limit=33554432,
+.. class:: SMTPServer(localaddr, remoteaddr, data_size_limit=33554432,\
                       map=None)
 
    Create a new :class:`SMTPServer` object, which binds to local address
@@ -96,7 +96,7 @@
 SMTPChannel Objects
 -------------------
 
-.. class:: SMTPChannel(server, conn, addr, data_size_limit=33554432,
+.. class:: SMTPChannel(server, conn, addr, data_size_limit=33554432,\
                        map=None))
 
    Create a new :class:`SMTPChannel` object which manages the communication
diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index d666ace..b01238c 100644
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -285,7 +285,7 @@
           RCVALL_*
 
    Constants for Windows' WSAIoctl(). The constants are used as arguments to the
-   :meth:`ioctl` method of socket objects.
+   :meth:`~socket.socket.ioctl` method of socket objects.
 
 
 .. data:: TIPC_*
@@ -594,7 +594,7 @@
    both the value of *address_family* and the underlying implementation of
    :c:func:`inet_pton`.
 
-   Availability: Unix (maybe not all platforms).
+   Availability: Unix (maybe not all platforms), Windows.
 
 
 .. function:: inet_ntop(address_family, packed_ip)
@@ -610,7 +610,7 @@
    specified address family, :exc:`ValueError` will be raised.  A
    :exc:`OSError` is raised for errors from the call to :func:`inet_ntop`.
 
-   Availability: Unix (maybe not all platforms).
+   Availability: Unix (maybe not all platforms), Windows.
 
 
 ..
diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst
index 500b3cb..1ec4438 100644
--- a/Doc/library/socketserver.rst
+++ b/Doc/library/socketserver.rst
@@ -111,13 +111,13 @@
 the request handler class :meth:`handle` method.
 
 Another approach to handling multiple simultaneous requests in an environment
-that supports neither threads nor :func:`fork` (or where these are too expensive
-or inappropriate for the service) is to maintain an explicit table of partially
-finished requests and to use :func:`select` to decide which request to work on
-next (or whether to handle a new incoming request).  This is particularly
-important for stream services where each client can potentially be connected for
-a long time (if threads or subprocesses cannot be used).  See :mod:`asyncore`
-for another way to manage this.
+that supports neither threads nor :func:`~os.fork` (or where these are too
+expensive or inappropriate for the service) is to maintain an explicit table of
+partially finished requests and to use :func:`~select.select` to decide which
+request to work on next (or whether to handle a new incoming request).  This is
+particularly important for stream services where each client can potentially be
+connected for a long time (if threads or subprocesses cannot be used).  See
+:mod:`asyncore` for another way to manage this.
 
 .. XXX should data and methods be intermingled, or separate?
    how should the distinction between class and instance variables be drawn?
diff --git a/Doc/library/spwd.rst b/Doc/library/spwd.rst
index add611f..58be78f 100644
--- a/Doc/library/spwd.rst
+++ b/Doc/library/spwd.rst
@@ -19,9 +19,9 @@
 +-------+---------------+---------------------------------+
 | Index | Attribute     | Meaning                         |
 +=======+===============+=================================+
-| 0     | ``sp_nam``    | Login name                      |
+| 0     | ``sp_namp``   | Login name                      |
 +-------+---------------+---------------------------------+
-| 1     | ``sp_pwd``    | Encrypted password              |
+| 1     | ``sp_pwdp``   | Encrypted password              |
 +-------+---------------+---------------------------------+
 | 2     | ``sp_lstchg`` | Date of last change             |
 +-------+---------------+---------------------------------+
@@ -36,15 +36,15 @@
 +-------+---------------+---------------------------------+
 | 6     | ``sp_inact``  | Number of days after password   |
 |       |               | expires until account is        |
-|       |               | blocked                         |
+|       |               | disabled                        |
 +-------+---------------+---------------------------------+
 | 7     | ``sp_expire`` | Number of days since 1970-01-01 |
-|       |               | until account is disabled       |
+|       |               | when account expires            |
 +-------+---------------+---------------------------------+
 | 8     | ``sp_flag``   | Reserved                        |
 +-------+---------------+---------------------------------+
 
-The sp_nam and sp_pwd items are strings, all others are integers.
+The sp_namp and sp_pwdp items are strings, all others are integers.
 :exc:`KeyError` is raised if the entry asked for cannot be found.
 
 The following functions are defined:
diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst
index 529dc94..6d1f76a 100644
--- a/Doc/library/sqlite3.rst
+++ b/Doc/library/sqlite3.rst
@@ -174,7 +174,7 @@
    For the *isolation_level* parameter, please see the
    :attr:`Connection.isolation_level` property of :class:`Connection` objects.
 
-   SQLite natively supports only the types TEXT, INTEGER, FLOAT, BLOB and NULL. If
+   SQLite natively supports only the types TEXT, INTEGER, REAL, BLOB and NULL. If
    you want to use other types you must add support for them yourself. The
    *detect_types* parameter and the using custom **converters** registered with the
    module-level :func:`register_converter` function allow you to easily do that.
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index bb4ceca..5af56f9 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -29,6 +29,14 @@
    cause variations in behavior. For example, TLSv1.1 and TLSv1.2 come with
    openssl version 1.0.1.
 
+.. warning::
+
+   OpenSSL's internal random number generator does not properly handle fork.
+   Applications must change the PRNG state of the parent process if they use
+   any SSL feature with :func:`os.fork`. Any successful call of
+   :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
+   :func:`~ssl.RAND_pseudo_bytes` is sufficient.
+
 This section documents the objects and functions in the ``ssl`` module; for more
 general information about TLS, SSL, and certificates, the reader is referred to
 the documents in the "See Also" section at the bottom.
@@ -286,10 +294,10 @@
    Verify that *cert* (in decoded format as returned by
    :meth:`SSLSocket.getpeercert`) matches the given *hostname*.  The rules
    applied are those for checking the identity of HTTPS servers as outlined
-   in :rfc:`2818`, except that IP addresses are not currently supported.
-   In addition to HTTPS, this function should be suitable for checking the
-   identity of servers in various SSL-based protocols such as FTPS, IMAPS,
-   POPS and others.
+   in :rfc:`2818` and :rfc:`6125`, except that IP addresses are not currently
+   supported. In addition to HTTPS, this function should be suitable for
+   checking the identity of servers in various SSL-based protocols such as
+   FTPS, IMAPS, POPS and others.
 
    :exc:`CertificateError` is raised on failure. On success, the function
    returns nothing::
@@ -304,6 +312,13 @@
 
    .. versionadded:: 3.2
 
+   .. versionchanged:: 3.3.3
+      The function now follows :rfc:`6125`, section 6.4.3 and does neither
+      match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor
+      a wildcard inside an internationalized domain names (IDN) fragment.
+      IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported,
+      but ``x*.python.org`` no longer matches ``xn--tda.python.org``.
+
 .. function:: cert_time_to_seconds(timestring)
 
    Returns a floating-point value containing a normal seconds-after-the-epoch
@@ -1469,10 +1484,10 @@
 .. seealso::
 
    Class :class:`socket.socket`
-            Documentation of underlying :mod:`socket` class
+       Documentation of underlying :mod:`socket` class
 
-   `TLS (Transport Layer Security) and SSL (Secure Socket Layer) <http://www3.rad.com/networks/applications/secure/tls.htm>`_
-      Debby Koren
+   `SSL/TLS Strong Encryption: An Introduction <http://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
+       Intro from the Apache webserver documentation
 
    `RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <http://www.ietf.org/rfc/rfc1422>`_
        Steve Kent
diff --git a/Doc/library/stat.rst b/Doc/library/stat.rst
index a021fe2..24769f6 100644
--- a/Doc/library/stat.rst
+++ b/Doc/library/stat.rst
@@ -1,5 +1,5 @@
-:mod:`stat` --- Interpreting :func:`stat` results
-=================================================
+:mod:`stat` --- Interpreting :func:`~os.stat` results
+=====================================================
 
 .. module:: stat
    :synopsis: Utilities for interpreting the results of os.stat(),
diff --git a/Doc/library/statistics.rst b/Doc/library/statistics.rst
new file mode 100644
index 0000000..e6c5959
--- /dev/null
+++ b/Doc/library/statistics.rst
@@ -0,0 +1,408 @@
+:mod:`statistics` --- Mathematical statistics functions
+=======================================================
+
+.. module:: statistics
+   :synopsis: mathematical statistics functions
+.. moduleauthor:: Steven D'Aprano <steve+python@pearwood.info>
+.. sectionauthor:: Steven D'Aprano <steve+python@pearwood.info>
+
+.. versionadded:: 3.4
+
+.. testsetup:: *
+
+   from statistics import *
+   __name__ = '<doctest>'
+
+**Source code:** :source:`Lib/statistics.py`
+
+--------------
+
+This module provides functions for calculating mathematical statistics of
+numeric (:class:`Real`-valued) data.
+
+Averages and measures of central location
+-----------------------------------------
+
+These functions calculate an average or typical value from a population
+or sample.
+
+=======================  =============================================
+:func:`mean`             Arithmetic mean ("average") of data.
+:func:`median`           Median (middle value) of data.
+:func:`median_low`       Low median of data.
+:func:`median_high`      High median of data.
+:func:`median_grouped`   Median, or 50th percentile, of grouped data.
+:func:`mode`             Mode (most common value) of discrete data.
+=======================  =============================================
+
+Measures of spread
+------------------
+
+These functions calculate a measure of how much the population or sample
+tends to deviate from the typical or average values.
+
+=======================  =============================================
+:func:`pstdev`           Population standard deviation of data.
+:func:`pvariance`        Population variance of data.
+:func:`stdev`            Sample standard deviation of data.
+:func:`variance`         Sample variance of data.
+=======================  =============================================
+
+
+Function details
+----------------
+
+Note: The functions do not require the data given to them to be sorted.
+However, for reading convenience, most of the examples show sorted sequences.
+
+.. function:: mean(data)
+
+   Return the sample arithmetic mean of *data*, a sequence or iterator of
+   real-valued numbers.
+
+   The arithmetic mean is the sum of the data divided by the number of data
+   points.  It is commonly called "the average", although it is only one of many
+   different mathematical averages.  It is a measure of the central location of
+   the data.
+
+   If *data* is empty, :exc:`StatisticsError` will be raised.
+
+   Some examples of use:
+
+   .. doctest::
+
+      >>> mean([1, 2, 3, 4, 4])
+      2.8
+      >>> mean([-1.0, 2.5, 3.25, 5.75])
+      2.625
+
+      >>> from fractions import Fraction as F
+      >>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])
+      Fraction(13, 21)
+
+      >>> from decimal import Decimal as D
+      >>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])
+      Decimal('0.5625')
+
+   .. note::
+
+      The mean is strongly affected by outliers and is not a robust estimator
+      for central location: the mean is not necessarily a typical example of the
+      data points.  For more robust, although less efficient, measures of
+      central location, see :func:`median` and :func:`mode`.  (In this case,
+      "efficient" refers to statistical efficiency rather than computational
+      efficiency.)
+
+      The sample mean gives an unbiased estimate of the true population mean,
+      which means that, taken on average over all the possible samples,
+      ``mean(sample)`` converges on the true mean of the entire population.  If
+      *data* represents the entire population rather than a sample, then
+      ``mean(data)`` is equivalent to calculating the true population mean μ.
+
+
+.. function:: median(data)
+
+   Return the median (middle value) of numeric data, using the common "mean of
+   middle two" method.  If *data* is empty, :exc:`StatisticsError` is raised.
+
+   The median is a robust measure of central location, and is less affected by
+   the presence of outliers in your data.  When the number of data points is
+   odd, the middle data point is returned:
+
+   .. doctest::
+
+      >>> median([1, 3, 5])
+      3
+
+   When the number of data points is even, the median is interpolated by taking
+   the average of the two middle values:
+
+   .. doctest::
+
+      >>> median([1, 3, 5, 7])
+      4.0
+
+   This is suited for when your data is discrete, and you don't mind that the
+   median may not be an actual data point.
+
+   .. seealso:: :func:`median_low`, :func:`median_high`, :func:`median_grouped`
+
+
+.. function:: median_low(data)
+
+   Return the low median of numeric data.  If *data* is empty,
+   :exc:`StatisticsError` is raised.
+
+   The low median is always a member of the data set.  When the number of data
+   points is odd, the middle value is returned.  When it is even, the smaller of
+   the two middle values is returned.
+
+   .. doctest::
+
+      >>> median_low([1, 3, 5])
+      3
+      >>> median_low([1, 3, 5, 7])
+      3
+
+   Use the low median when your data are discrete and you prefer the median to
+   be an actual data point rather than interpolated.
+
+
+.. function:: median_high(data)
+
+   Return the high median of data.  If *data* is empty, :exc:`StatisticsError`
+   is raised.
+
+   The high median is always a member of the data set.  When the number of data
+   points is odd, the middle value is returned.  When it is even, the larger of
+   the two middle values is returned.
+
+   .. doctest::
+
+      >>> median_high([1, 3, 5])
+      3
+      >>> median_high([1, 3, 5, 7])
+      5
+
+   Use the high median when your data are discrete and you prefer the median to
+   be an actual data point rather than interpolated.
+
+
+.. function:: median_grouped(data, interval=1)
+
+   Return the median of grouped continuous data, calculated as the 50th
+   percentile, using interpolation.  If *data* is empty, :exc:`StatisticsError`
+   is raised.
+
+   .. doctest::
+
+      >>> median_grouped([52, 52, 53, 54])
+      52.5
+
+   In the following example, the data are rounded, so that each value represents
+   the midpoint of data classes, e.g. 1 is the midpoint of the class 0.5-1.5, 2
+   is the midpoint of 1.5-2.5, 3 is the midpoint of 2.5-3.5, etc.  With the data
+   given, the middle value falls somewhere in the class 3.5-4.5, and
+   interpolation is used to estimate it:
+
+   .. doctest::
+
+      >>> median_grouped([1, 2, 2, 3, 4, 4, 4, 4, 4, 5])
+      3.7
+
+   Optional argument *interval* represents the class interval, and defaults
+   to 1.  Changing the class interval naturally will change the interpolation:
+
+   .. doctest::
+
+      >>> median_grouped([1, 3, 3, 5, 7], interval=1)
+      3.25
+      >>> median_grouped([1, 3, 3, 5, 7], interval=2)
+      3.5
+
+   This function does not check whether the data points are at least
+   *interval* apart.
+
+   .. impl-detail::
+
+      Under some circumstances, :func:`median_grouped` may coerce data points to
+      floats.  This behaviour is likely to change in the future.
+
+   .. seealso::
+
+      * "Statistics for the Behavioral Sciences", Frederick J Gravetter and
+        Larry B Wallnau (8th Edition).
+
+      * Calculating the `median <http://www.ualberta.ca/~opscan/median.html>`_.
+
+      * The `SSMEDIAN
+        <https://projects.gnome.org/gnumeric/doc/gnumeric-function-SSMEDIAN.shtml>`_
+        function in the Gnome Gnumeric spreadsheet, including `this discussion
+        <https://mail.gnome.org/archives/gnumeric-list/2011-April/msg00018.html>`_.
+
+
+.. function:: mode(data)
+
+   Return the most common data point from discrete or nominal *data*.  The mode
+   (when it exists) is the most typical value, and is a robust measure of
+   central location.
+
+   If *data* is empty, or if there is not exactly one most common value,
+   :exc:`StatisticsError` is raised.
+
+   ``mode`` assumes discrete data, and returns a single value. This is the
+   standard treatment of the mode as commonly taught in schools:
+
+   .. doctest::
+
+      >>> mode([1, 1, 2, 3, 3, 3, 3, 4])
+      3
+
+   The mode is unique in that it is the only statistic which also applies
+   to nominal (non-numeric) data:
+
+   .. doctest::
+
+      >>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
+      'red'
+
+
+.. function:: pstdev(data, mu=None)
+
+   Return the population standard deviation (the square root of the population
+   variance).  See :func:`pvariance` for arguments and other details.
+
+   .. doctest::
+
+      >>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
+      0.986893273527251
+
+
+.. function:: pvariance(data, mu=None)
+
+   Return the population variance of *data*, a non-empty iterable of real-valued
+   numbers.  Variance, or second moment about the mean, is a measure of the
+   variability (spread or dispersion) of data.  A large variance indicates that
+   the data is spread out; a small variance indicates it is clustered closely
+   around the mean.
+
+   If the optional second argument *mu* is given, it should be the mean of
+   *data*.  If it is missing or ``None`` (the default), the mean is
+   automatically calculated.
+
+   Use this function to calculate the variance from the entire population.  To
+   estimate the variance from a sample, the :func:`variance` function is usually
+   a better choice.
+
+   Raises :exc:`StatisticsError` if *data* is empty.
+
+   Examples:
+
+   .. doctest::
+
+      >>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25]
+      >>> pvariance(data)
+      1.25
+
+   If you have already calculated the mean of your data, you can pass it as the
+   optional second argument *mu* to avoid recalculation:
+
+   .. doctest::
+
+      >>> mu = mean(data)
+      >>> pvariance(data, mu)
+      1.25
+
+   This function does not attempt to verify that you have passed the actual mean
+   as *mu*.  Using arbitrary values for *mu* may lead to invalid or impossible
+   results.
+
+   Decimals and Fractions are supported:
+
+   .. doctest::
+
+      >>> from decimal import Decimal as D
+      >>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
+      Decimal('24.815')
+
+      >>> from fractions import Fraction as F
+      >>> pvariance([F(1, 4), F(5, 4), F(1, 2)])
+      Fraction(13, 72)
+
+   .. note::
+
+      When called with the entire population, this gives the population variance
+      σ².  When called on a sample instead, this is the biased sample variance
+      s², also known as variance with N degrees of freedom.
+
+      If you somehow know the true population mean μ, you may use this function
+      to calculate the variance of a sample, giving the known population mean as
+      the second argument.  Provided the data points are representative
+      (e.g. independent and identically distributed), the result will be an
+      unbiased estimate of the population variance.
+
+
+.. function:: stdev(data, xbar=None)
+
+   Return the sample standard deviation (the square root of the sample
+   variance).  See :func:`variance` for arguments and other details.
+
+   .. doctest::
+
+      >>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
+      1.0810874155219827
+
+
+.. function:: variance(data, xbar=None)
+
+   Return the sample variance of *data*, an iterable of at least two real-valued
+   numbers.  Variance, or second moment about the mean, is a measure of the
+   variability (spread or dispersion) of data.  A large variance indicates that
+   the data is spread out; a small variance indicates it is clustered closely
+   around the mean.
+
+   If the optional second argument *xbar* is given, it should be the mean of
+   *data*.  If it is missing or ``None`` (the default), the mean is
+   automatically calculated.
+
+   Use this function when your data is a sample from a population. To calculate
+   the variance from the entire population, see :func:`pvariance`.
+
+   Raises :exc:`StatisticsError` if *data* has fewer than two values.
+
+   Examples:
+
+   .. doctest::
+
+      >>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
+      >>> variance(data)
+      1.3720238095238095
+
+   If you have already calculated the mean of your data, you can pass it as the
+   optional second argument *xbar* to avoid recalculation:
+
+   .. doctest::
+
+      >>> m = mean(data)
+      >>> variance(data, m)
+      1.3720238095238095
+
+   This function does not attempt to verify that you have passed the actual mean
+   as *xbar*.  Using arbitrary values for *xbar* can lead to invalid or
+   impossible results.
+
+   Decimal and Fraction values are supported:
+
+   .. doctest::
+
+      >>> from decimal import Decimal as D
+      >>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
+      Decimal('31.01875')
+
+      >>> from fractions import Fraction as F
+      >>> variance([F(1, 6), F(1, 2), F(5, 3)])
+      Fraction(67, 108)
+
+   .. note::
+
+      This is the sample variance s² with Bessel's correction, also known as
+      variance with N-1 degrees of freedom.  Provided that the data points are
+      representative (e.g. independent and identically distributed), the result
+      should be an unbiased estimate of the true population variance.
+
+      If you somehow know the actual population mean μ you should pass it to the
+      :func:`pvariance` function as the *mu* parameter to get the variance of a
+      sample.
+
+Exceptions
+----------
+
+A single exception is defined:
+
+.. exception:: StatisticsError
+
+   Subclass of :exc:`ValueError` for statistics-related exceptions.
+
+..
+   # This modelines must appear within the last ten lines of the file.
+   kate: indent-width 3; remove-trailing-space on; replace-tabs on; encoding utf-8;
diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
index bd275af..04d01f4 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -339,8 +339,8 @@
       pair: C; language
 
    Conversion from floating point to integer may round or truncate
-   as in C; see functions :func:`floor` and :func:`ceil` in the :mod:`math` module
-   for well-defined conversions.
+   as in C; see functions :func:`math.floor` and :func:`math.ceil` for
+   well-defined conversions.
 
 (4)
    float also accepts the strings "nan" and "inf" with an optional prefix "+"
@@ -631,7 +631,7 @@
 :class:`float`, :class:`decimal.Decimal` and :class:`fractions.Fraction`)
 Python's hash for numeric types is based on a single mathematical function
 that's defined for any rational number, and hence applies to all instances of
-:class:`int` and :class:`fraction.Fraction`, and all finite instances of
+:class:`int` and :class:`fractions.Fraction`, and all finite instances of
 :class:`float` and :class:`decimal.Decimal`.  Essentially, this function is
 given by reduction modulo ``P`` for a fixed prime ``P``.  The value of ``P`` is
 made available to Python as the :attr:`modulus` attribute of
@@ -1303,7 +1303,7 @@
 only stores the ``start``, ``stop`` and ``step`` values, calculating individual
 items and subranges as needed).
 
-Range objects implement the :class:`collections.Sequence` ABC, and provide
+Range objects implement the :class:`collections.abc.Sequence` ABC, and provide
 features such as containment tests, element index lookup, slicing and
 support for negative indices (see :ref:`typesseq`):
 
@@ -1326,9 +1326,9 @@
 Testing range objects for equality with ``==`` and ``!=`` compares
 them as sequences.  That is, two range objects are considered equal if
 they represent the same sequence of values.  (Note that two range
-objects that compare equal might have different :attr:`start`,
-:attr:`stop` and :attr:`step` attributes, for example ``range(0) ==
-range(2, 1, 3)`` or ``range(0, 3, 2) == range(0, 4, 2)``.)
+objects that compare equal might have different :attr:`~range.start`,
+:attr:`~range.stop` and :attr:`~range.step` attributes, for example
+``range(0) == range(2, 1, 3)`` or ``range(0, 3, 2) == range(0, 4, 2)``.)
 
 .. versionchanged:: 3.2
    Implement the Sequence ABC.
@@ -1342,7 +1342,8 @@
    object identity).
 
 .. versionadded:: 3.3
-   The :attr:`start`, :attr:`stop` and :attr:`step` attributes.
+   The :attr:`~range.start`, :attr:`~range.stop` and :attr:`~range.step`
+   attributes.
 
 
 .. index::
@@ -2298,7 +2299,7 @@
    (inclusive) as their first argument.
 
 
-Each bytes and bytearray instance provides a :meth:`decode` convenience
+Each bytes and bytearray instance provides a :meth:`~bytes.decode` convenience
 method that is the inverse of :meth:`str.encode`:
 
 .. method:: bytes.decode(encoding="utf-8", errors="strict")
@@ -2809,11 +2810,11 @@
 
 There are currently two built-in set types, :class:`set` and :class:`frozenset`.
 The :class:`set` type is mutable --- the contents can be changed using methods
-like :meth:`add` and :meth:`remove`.  Since it is mutable, it has no hash value
-and cannot be used as either a dictionary key or as an element of another set.
-The :class:`frozenset` type is immutable and :term:`hashable` --- its contents cannot be
-altered after it is created; it can therefore be used as a dictionary key or as
-an element of another set.
+like :meth:`~set.add` and :meth:`~set.remove`.  Since it is mutable, it has no
+hash value and cannot be used as either a dictionary key or as an element of
+another set.  The :class:`frozenset` type is immutable and :term:`hashable` ---
+its contents cannot be altered after it is created; it can therefore be used as
+a dictionary key or as an element of another set.
 
 Non-empty sets (not frozensets) can be created by placing a comma-separated list
 of elements within braces, for example: ``{'jack', 'sjoerd'}``, in addition to the
@@ -3354,12 +3355,12 @@
 foo`` does not require a module object named *foo* to exist, rather it requires
 an (external) *definition* for a module named *foo* somewhere.)
 
-A special attribute of every module is :attr:`__dict__`. This is the dictionary
-containing the module's symbol table. Modifying this dictionary will actually
-change the module's symbol table, but direct assignment to the :attr:`__dict__`
-attribute is not possible (you can write ``m.__dict__['a'] = 1``, which defines
-``m.a`` to be ``1``, but you can't write ``m.__dict__ = {}``).  Modifying
-:attr:`__dict__` directly is not recommended.
+A special attribute of every module is :attr:`~object.__dict__`. This is the
+dictionary containing the module's symbol table. Modifying this dictionary will
+actually change the module's symbol table, but direct assignment to the
+:attr:`__dict__` attribute is not possible (you can write
+``m.__dict__['a'] = 1``, which defines ``m.a`` to be ``1``, but you can't write
+``m.__dict__ = {}``).  Modifying :attr:`__dict__` directly is not recommended.
 
 Modules built into the interpreter are written like this: ``<module 'sys'
 (built-in)>``.  If loaded from a file, they are written as ``<module 'os' from
@@ -3594,7 +3595,7 @@
 
    This method can be overridden by a metaclass to customize the method
    resolution order for its instances.  It is called at class instantiation, and
-   its result is stored in :attr:`__mro__`.
+   its result is stored in :attr:`~class.__mro__`.
 
 
 .. method:: class.__subclasses__
diff --git a/Doc/library/string.rst b/Doc/library/string.rst
index c92a005..e304c5d 100644
--- a/Doc/library/string.rst
+++ b/Doc/library/string.rst
@@ -293,18 +293,18 @@
 
 .. productionlist:: sf
    format_spec: [[`fill`]`align`][`sign`][#][0][`width`][,][.`precision`][`type`]
-   fill: <a character other than '{' or '}'>
+   fill: <any character>
    align: "<" | ">" | "=" | "^"
    sign: "+" | "-" | " "
    width: `integer`
    precision: `integer`
    type: "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
 
-The *fill* character can be any character other than '{' or '}'.  The presence
-of a fill character is signaled by the character following it, which must be
-one of the alignment options.  If the second character of *format_spec* is not
-a valid alignment option, then it is assumed that both the fill character and
-the alignment option are absent.
+If a valid *align* value is specified, it can be preceeded by a *fill*
+character that can be any character and defaults to a space if omitted.
+Note that it is not possible to use ``{`` and ``}`` as *fill* char while
+using the :meth:`str.format` method; this limitation however doesn't
+affect the :func:`format` function.
 
 The meaning of the various alignment options is as follows:
 
diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst
index 208edd5..2e88319 100644
--- a/Doc/library/subprocess.rst
+++ b/Doc/library/subprocess.rst
@@ -1058,10 +1058,12 @@
 
    Return ``(status, output)`` of executing *cmd* in a shell.
 
-   Execute the string *cmd* in a shell with :func:`os.popen` and return a 2-tuple
-   ``(status, output)``.  *cmd* is actually run as ``{ cmd ; } 2>&1``, so that the
-   returned output will contain output or error messages.  A trailing newline is
-   stripped from the output.  The exit status for the command can be interpreted
+   Execute the string *cmd* in a shell with :meth:`Popen.check_output` and
+   return a 2-tuple ``(status, output)``. Universal newlines mode is used;
+   see the notes on :ref:`frequently-used-arguments` for more details.
+
+   A trailing newline is stripped from the output.
+   The exit status for the command can be interpreted
    according to the rules for the C function :c:func:`wait`.  Example::
 
       >>> subprocess.getstatusoutput('ls /bin/ls')
@@ -1071,7 +1073,8 @@
       >>> subprocess.getstatusoutput('/bin/junk')
       (256, 'sh: /bin/junk: not found')
 
-   Availability: UNIX.
+   .. versionchanged:: 3.3
+      Availability: Unix & Windows
 
 
 .. function:: getoutput(cmd)
@@ -1084,7 +1087,8 @@
       >>> subprocess.getoutput('ls /bin/ls')
       '/bin/ls'
 
-   Availability: UNIX.
+   .. versionchanged:: 3.3
+      Availability: Unix & Windows
 
 
 Notes
diff --git a/Doc/library/sunau.rst b/Doc/library/sunau.rst
index eae710d..6455ed9 100644
--- a/Doc/library/sunau.rst
+++ b/Doc/library/sunau.rst
@@ -212,6 +212,9 @@
 
    Set the sample width (in bytes.)
 
+   .. versionchanged:: 3.4
+      Added support for 24-bit samples.
+
 
 .. method:: AU_write.setframerate(n)
 
diff --git a/Doc/library/telnetlib.rst b/Doc/library/telnetlib.rst
index 9bc79c5..b0e4d1d 100644
--- a/Doc/library/telnetlib.rst
+++ b/Doc/library/telnetlib.rst
@@ -185,7 +185,7 @@
    Read until one from a list of a regular expressions matches.
 
    The first argument is a list of regular expressions, either compiled
-   (:class:`re.RegexObject` instances) or uncompiled (byte strings). The
+   (:ref:`regex objects <re-objects>`) or uncompiled (byte strings). The
    optional second argument is a timeout, in seconds; the default is to block
    indefinitely.
 
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index c1270f4..2c51549 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -442,13 +442,6 @@
    A decorator for running tests that require support for symbolic links.
 
 
-.. function:: suppress_crash_popup()
-
-   A context manager that disables Windows Error Reporting dialogs using
-   `SetErrorMode <http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621%28v=vs.85%29.aspx>`_.
-   On other platforms it's a no-op.
-
-
 .. decorator:: anticipate_failure(condition)
 
    A decorator to conditionally mark tests with
@@ -593,6 +586,21 @@
    Temporarily unset the environment variable ``envvar``.
 
 
+.. class:: SuppressCrashReport()
+
+   A context manager used to try to prevent crash dialog popups on tests that
+   are expected to crash a subprocess.
+
+   On Windows, it disables Windows Error Reporting dialogs using
+   `SetErrorMode <http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621.aspx>`_.
+
+   On UNIX, :func:`resource.setrlimit` is used to set
+   :attr:`resource.RLIMIT_CORE`'s soft limit to 0 to prevent coredump file
+   creation.
+
+   On both platforms, the old value is restored by :meth:`__exit__`.
+
+
 .. class:: WarningsRecorder()
 
    Class used to record warnings for unit tests. See documentation of
diff --git a/Doc/library/textwrap.rst b/Doc/library/textwrap.rst
index 6ac1e77..1ba42a3 100644
--- a/Doc/library/textwrap.rst
+++ b/Doc/library/textwrap.rst
@@ -250,6 +250,22 @@
       was to always allow breaking hyphenated words.
 
 
+   .. attribute:: max_lines
+
+      (default: ``None``) If not ``None``, then the text be will truncated to
+      *max_lines* lines.
+
+      .. versionadded:: 3.4
+
+
+   .. attribute:: placeholder
+
+      (default: ``' [...]'``) String that will be appended to the last line of
+      text if it will be truncated.
+
+      .. versionadded:: 3.4
+
+
    :class:`TextWrapper` also provides some public methods, analogous to the
    module-level convenience functions:
 
@@ -266,15 +282,3 @@
 
       Wraps the single paragraph in *text*, and returns a single string
       containing the wrapped paragraph.
-
-
-   .. function:: shorten(text, *, placeholder=" [...]")
-
-      Collapse and truncate the given text to fit in :attr:`width`
-      characters.
-
-      The text first has its whitespace collapsed.  If it then fits in
-      :attr:`width`, it is returned as-is.  Otherwise, as many words
-      as possible are joined and then the *placeholder* is appended.
-
-      .. versionadded:: 3.4
diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index 9aec63d..4a3b3ea 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -387,7 +387,7 @@
 
       When invoked with the floating-point *timeout* argument set to a positive
       value, block for at most the number of seconds specified by *timeout*
-      and as long as the lock cannot be acquired.  A negative *timeout* argument
+      and as long as the lock cannot be acquired.  A *timeout* argument of ``-1``
       specifies an unbounded wait.  It is forbidden to specify a *timeout*
       when *blocking* is false.
 
diff --git a/Doc/library/time.rst b/Doc/library/time.rst
index 1e21fb6..64b5e04 100644
--- a/Doc/library/time.rst
+++ b/Doc/library/time.rst
@@ -471,8 +471,10 @@
       >>> strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
       'Thu, 28 Jun 2001 14:17:15 +0000'
 
-   Additional directives may be supported on certain platforms, but only the ones
-   listed here have a meaning standardized by ANSI C.
+   Additional directives may be supported on certain platforms, but only the
+   ones listed here have a meaning standardized by ANSI C.  To see the full set
+   of format codes supported on your platform, consult the :manpage:`strftime(3)`
+   documentation.
 
    On some platforms, an optional field width and precision specification can
    immediately follow the initial ``'%'`` of a directive in the following order;
@@ -675,8 +677,8 @@
       of many format specifiers in :func:`strftime` and :func:`strptime`.
 
    Module :mod:`calendar`
-      General calendar-related functions.   :func:`timegm` is the inverse of
-      :func:`gmtime` from this module.
+      General calendar-related functions.   :func:`~calendar.timegm` is the
+      inverse of :func:`gmtime` from this module.
 
 .. rubric:: Footnotes
 
diff --git a/Doc/library/tkinter.rst b/Doc/library/tkinter.rst
index 377694f..83f0ed5 100644
--- a/Doc/library/tkinter.rst
+++ b/Doc/library/tkinter.rst
@@ -37,9 +37,6 @@
    `Modern Tkinter for Busy Python Developers <http://www.amazon.com/Modern-Tkinter-Python-Developers-ebook/dp/B0071QDNLO/>`_
       Book by Mark Rozerman about building attractive and modern graphical user interfaces with Python and Tkinter.
 
-   `An Introduction to Tkinter <http://www.pythonware.com/library/an-introduction-to-tkinter.htm>`_
-      Fredrik Lundh's on-line reference material.
-
    `Python and Tkinter Programming <http://www.amazon.com/exec/obidos/ASIN/1884777813>`_
       The book by John Grayson (ISBN 1-884777-81-3).
 
diff --git a/Doc/library/unicodedata.rst b/Doc/library/unicodedata.rst
index 26eced6..3b3d3a0 100644
--- a/Doc/library/unicodedata.rst
+++ b/Doc/library/unicodedata.rst
@@ -15,8 +15,8 @@
 
 This module provides access to the Unicode Character Database (UCD) which
 defines character properties for all Unicode characters. The data contained in
-this database is compiled from the `UCD version 6.2.0
-<http://www.unicode.org/Public/6.2.0/ucd>`_.
+this database is compiled from the `UCD version 6.3.0
+<http://www.unicode.org/Public/6.3.0/ucd>`_.
 
 The module uses the same names and symbols as defined by Unicode
 Standard Annex #44, `"Unicode Character Database"
@@ -166,6 +166,6 @@
 
 .. rubric:: Footnotes
 
-.. [#] http://www.unicode.org/Public/6.2.0/ucd/NameAliases.txt
+.. [#] http://www.unicode.org/Public/6.3.0/ucd/NameAliases.txt
 
-.. [#] http://www.unicode.org/Public/6.2.0/ucd/NamedSequences.txt
+.. [#] http://www.unicode.org/Public/6.3.0/ucd/NamedSequences.txt
diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst
index 4a7d647..d7efcf4 100644
--- a/Doc/library/unittest.mock.rst
+++ b/Doc/library/unittest.mock.rst
@@ -210,8 +210,8 @@
       Accessing any attribute not in this list will raise an `AttributeError`.
 
       If `spec` is an object (rather than a list of strings) then
-      :attr:`__class__` returns the class of the spec object. This allows mocks
-      to pass `isinstance` tests.
+      :attr:`~instance.__class__` returns the class of the spec object. This
+      allows mocks to pass `isinstance` tests.
 
     * `spec_set`: A stricter variant of `spec`. If used, attempting to *set*
       or get an attribute on the mock that isn't on the object passed as
@@ -1989,7 +1989,8 @@
     default) then a `MagicMock` will be created for you, with the API limited
     to methods or attributes available on standard file handles.
 
-    `read_data` is a string for the `read`, `readline`, and `readlines` methods
+    `read_data` is a string for the :meth:`~io.IOBase.read`,
+    :meth:`~io.IOBase.readline`, and :meth:`~io.IOBase.readlines` methods
     of the file handle to return.  Calls to those methods will take data from
     `read_data` until it is depleted.  The mock of these methods is pretty
     simplistic.  If you need more control over the data that you are feeding to
diff --git a/Doc/library/urllib.error.rst b/Doc/library/urllib.error.rst
index 7bd04b1..9fb58f5 100644
--- a/Doc/library/urllib.error.rst
+++ b/Doc/library/urllib.error.rst
@@ -31,8 +31,9 @@
 
    Though being an exception (a subclass of :exc:`URLError`), an
    :exc:`HTTPError` can also function as a non-exceptional file-like return
-   value (the same thing that :func:`urlopen` returns).  This is useful when
-   handling exotic HTTP errors, such as requests for authentication.
+   value (the same thing that :func:`~urllib.request.urlopen` returns).  This
+   is useful when handling exotic HTTP errors, such as requests for
+   authentication.
 
    .. attribute:: code
 
@@ -54,7 +55,8 @@
 
 .. exception:: ContentTooShortError(msg, content)
 
-   This exception is raised when the :func:`urlretrieve` function detects that
+   This exception is raised when the :func:`~urllib.request.urlretrieve`
+   function detects that
    the amount of the downloaded data is less than the expected amount (given by
    the *Content-Length* header).  The :attr:`content` attribute stores the
    downloaded (and supposedly truncated) data.
diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst
index dac1cd9..b951420 100644
--- a/Doc/library/urllib.parse.rst
+++ b/Doc/library/urllib.parse.rst
@@ -518,8 +518,8 @@
    Convert a mapping object or a sequence of two-element tuples, which may
    either be a :class:`str` or a :class:`bytes`,  to a "percent-encoded"
    string.  If the resultant string is to be used as a *data* for POST
-   operation with :func:`urlopen` function, then it should be properly encoded
-   to bytes, otherwise it would result in a :exc:`TypeError`.
+   operation with :func:`~urllib.request.urlopen` function, then it should be
+   properly encoded to bytes, otherwise it would result in a :exc:`TypeError`.
 
    The resulting string is a series of ``key=value`` pairs separated by ``'&'``
    characters, where both *key* and *value* are quoted using :func:`quote_plus`
diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst
index ef902b1..61b7734 100644
--- a/Doc/library/urllib.request.rst
+++ b/Doc/library/urllib.request.rst
@@ -81,7 +81,7 @@
 
    * :meth:`~urllib.response.addinfourl.getcode` -- return the HTTP status code of the response.
 
-   Raises :exc:`URLError` on errors.
+   Raises :exc:`~urllib.error.URLError` on errors.
 
    Note that ``None`` may be returned if no handler handles the request (though
    the default installed global :class:`OpenerDirector` uses
@@ -144,14 +144,14 @@
 
    Convert the pathname *path* from the local syntax for a path to the form used in
    the path component of a URL.  This does not produce a complete URL.  The return
-   value will already be quoted using the :func:`quote` function.
+   value will already be quoted using the :func:`~urllib.parse.quote` function.
 
 
 .. function:: url2pathname(path)
 
    Convert the path component *path* from a percent-encoded URL to the local syntax for a
-   path.  This does not accept a complete URL.  This function uses :func:`unquote`
-   to decode *path*.
+   path.  This does not accept a complete URL.  This function uses
+   :func:`~urllib.parse.unquote` to decode *path*.
 
 .. function:: getproxies()
 
@@ -245,7 +245,7 @@
 .. class:: HTTPDefaultErrorHandler()
 
    A class which defines a default handler for HTTP error responses; all responses
-   are turned into :exc:`HTTPError` exceptions.
+   are turned into :exc:`~urllib.error.HTTPError` exceptions.
 
 
 .. class:: HTTPRedirectHandler()
@@ -582,8 +582,8 @@
 
 #. Handlers with a method named like :meth:`protocol_open` are called to handle
    the request. This stage ends when a handler either returns a non-\ :const:`None`
-   value (ie. a response), or raises an exception (usually :exc:`URLError`).
-   Exceptions are allowed to propagate.
+   value (ie. a response), or raises an exception (usually
+   :exc:`~urllib.error.URLError`).  Exceptions are allowed to propagate.
 
    In fact, the above algorithm is first tried for methods named
    :meth:`default_open`.  If all such methods return :const:`None`, the algorithm
@@ -642,8 +642,9 @@
    This method, if implemented, will be called by the parent
    :class:`OpenerDirector`.  It should return a file-like object as described in
    the return value of the :meth:`open` of :class:`OpenerDirector`, or ``None``.
-   It should raise :exc:`URLError`, unless a truly exceptional thing happens (for
-   example, :exc:`MemoryError` should not be mapped to :exc:`URLError`).
+   It should raise :exc:`~urllib.error.URLError`, unless a truly exceptional
+   thing happens (for example, :exc:`MemoryError` should not be mapped to
+   :exc:`URLError`).
 
    This method will be called before any protocol-specific open method.
 
@@ -729,8 +730,8 @@
 .. note::
 
    Some HTTP redirections require action from this module's client code.  If this
-   is the case, :exc:`HTTPError` is raised.  See :rfc:`2616` for details of the
-   precise meanings of the various redirection codes.
+   is the case, :exc:`~urllib.error.HTTPError` is raised.  See :rfc:`2616` for
+   details of the precise meanings of the various redirection codes.
 
    An :class:`HTTPError` exception raised as a security consideration if the
    HTTPRedirectHandler is presented with a redirected url which is not an HTTP,
@@ -743,9 +744,9 @@
    by the default implementations of the :meth:`http_error_30\*` methods when a
    redirection is received from the server.  If a redirection should take place,
    return a new :class:`Request` to allow :meth:`http_error_30\*` to perform the
-   redirect to *newurl*.  Otherwise, raise :exc:`HTTPError` if no other handler
-   should try to handle this URL, or return ``None`` if you can't but another
-   handler might.
+   redirect to *newurl*.  Otherwise, raise :exc:`~urllib.error.HTTPError` if
+   no other handler should try to handle this URL, or return ``None`` if you
+   can't but another handler might.
 
    .. note::
 
@@ -947,7 +948,7 @@
 
    .. versionchanged:: 3.2
       This method is applicable only for local hostnames.  When a remote
-      hostname is given, an :exc:`URLError` is raised.
+      hostname is given, an :exc:`~urllib.error.URLError` is raised.
 
 
 .. _data-handler-objects:
@@ -1004,7 +1005,7 @@
 
 .. method:: UnknownHandler.unknown_open()
 
-   Raise a :exc:`URLError` exception.
+   Raise a :exc:`~urllib.error.URLError` exception.
 
 
 .. _http-error-processor-objects:
@@ -1021,7 +1022,7 @@
    For non-200 error codes, this simply passes the job on to the
    :meth:`protocol_error_code` handler methods, via :meth:`OpenerDirector.error`.
    Eventually, :class:`HTTPDefaultErrorHandler` will raise an
-   :exc:`HTTPError` if no other handler handles the error.
+   :exc:`~urllib.error.HTTPError` if no other handler handles the error.
 
 
 .. method:: HTTPErrorProcessor.https_response()
@@ -1234,7 +1235,7 @@
    argument may be given to specify a ``POST`` request (normally the request
    type is ``GET``).  The *data* argument must be a bytes object in standard
    :mimetype:`application/x-www-form-urlencoded` format; see the
-   :func:`urlencode` function below.
+   :func:`urllib.parse.urlencode` function.
 
    :func:`urlretrieve` will raise :exc:`ContentTooShortError` when it detects that
    the amount of data available  was less than the expected amount (which is the
@@ -1316,8 +1317,8 @@
        If the *url* uses the :file:`http:` scheme identifier, the optional *data*
        argument may be given to specify a ``POST`` request (normally the request type
        is ``GET``).  The *data* argument must in standard
-       :mimetype:`application/x-www-form-urlencoded` format; see the :func:`urlencode`
-       function below.
+       :mimetype:`application/x-www-form-urlencoded` format; see the
+       :func:`urllib.parse.urlencode` function.
 
 
     .. attribute:: version
diff --git a/Doc/library/urllib.rst b/Doc/library/urllib.rst
index 9ca74b8..8e308bc 100644
--- a/Doc/library/urllib.rst
+++ b/Doc/library/urllib.rst
@@ -1,6 +1,8 @@
 :mod:`urllib` --- URL handling modules
 ======================================
 
+.. module:: urllib
+
 ``urllib`` is a package that collects several modules for working with URLs:
 
 * :mod:`urllib.request` for opening and reading URLs
diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst
index eda0cb6..042ed8e 100644
--- a/Doc/library/venv.rst
+++ b/Doc/library/venv.rst
@@ -128,13 +128,13 @@
                 env_dir is the target directory to create an environment in.
                 """
                 env_dir = os.path.abspath(env_dir)
-                context = self.create_directories(env_dir)
+                context = self.ensure_directories(env_dir)
                 self.create_configuration(context)
                 self.setup_python(context)
                 self.setup_scripts(context)
                 self.post_setup(context)
 
-        Each of the methods :meth:`create_directories`,
+        Each of the methods :meth:`ensure_directories`,
         :meth:`create_configuration`, :meth:`setup_python`,
         :meth:`setup_scripts` and :meth:`post_setup` can be overridden.
 
diff --git a/Doc/library/warnings.rst b/Doc/library/warnings.rst
index ce69f7b..8a538ad 100644
--- a/Doc/library/warnings.rst
+++ b/Doc/library/warnings.rst
@@ -89,7 +89,7 @@
 |                                  | Unicode.                                      |
 +----------------------------------+-----------------------------------------------+
 | :exc:`BytesWarning`              | Base category for warnings related to         |
-|                                  | :class:`bytes` and :class:`buffer`.           |
+|                                  | :class:`bytes` and :class:`bytearray`.        |
 +----------------------------------+-----------------------------------------------+
 | :exc:`ResourceWarning`           | Base category for warnings related to         |
 |                                  | resource usage.                               |
diff --git a/Doc/library/winsound.rst b/Doc/library/winsound.rst
index 8356062..61f34cd 100644
--- a/Doc/library/winsound.rst
+++ b/Doc/library/winsound.rst
@@ -126,6 +126,10 @@
 
    Return immediately if the sound driver is busy.
 
+   .. note::
+
+      This flag is not supported on modern Windows platforms.
+
 
 .. data:: MB_ICONASTERISK
 
diff --git a/Doc/library/xml.etree.elementtree.rst b/Doc/library/xml.etree.elementtree.rst
index c15041f..4c89dc3 100644
--- a/Doc/library/xml.etree.elementtree.rst
+++ b/Doc/library/xml.etree.elementtree.rst
@@ -160,7 +160,7 @@
 
 :meth:`Element.findall` finds only elements with a tag which are direct
 children of the current element.  :meth:`Element.find` finds the *first* child
-with a particular tag, and :meth:`Element.text` accesses the element's text
+with a particular tag, and :attr:`Element.text` accesses the element's text
 content.  :meth:`Element.get` accesses the element's attributes::
 
    >>> for country in root.findall('country'):
diff --git a/Doc/library/xml.rst b/Doc/library/xml.rst
index d255f7f..d796d82 100644
--- a/Doc/library/xml.rst
+++ b/Doc/library/xml.rst
@@ -53,15 +53,17 @@
 to or circumvent firewalls. The attacks on XML abuse unfamiliar features
 like inline `DTD`_ (document type definition) with entities.
 
+The following table gives an overview of the known attacks and if the various
+modules are vulnerable to them.
 
 =========================  ========  =========  =========  ========  =========
 kind                       sax       etree      minidom    pulldom   xmlrpc
 =========================  ========  =========  =========  ========  =========
-billion laughs             **True**  **True**   **True**   **True**  **True**
-quadratic blowup           **True**  **True**   **True**   **True**  **True**
-external entity expansion  **True**  False (1)  False (2)  **True**  False (3)
-DTD retrieval              **True**  False      False      **True**  False
-decompression bomb         False     False      False      False     **True**
+billion laughs             **Yes**   **Yes**    **Yes**    **Yes**   **Yes**
+quadratic blowup           **Yes**   **Yes**    **Yes**    **Yes**   **Yes**
+external entity expansion  **Yes**   No    (1)  No    (2)  **Yes**   No    (3)
+DTD retrieval              **Yes**   No         No         **Yes**   No
+decompression bomb         No        No         No         No        **Yes**
 =========================  ========  =========  =========  ========  =========
 
 1. :mod:`xml.etree.ElementTree` doesn't expand external entities and raises a
diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst
index 7122120..f7303ea 100644
--- a/Doc/library/zipfile.rst
+++ b/Doc/library/zipfile.rst
@@ -213,8 +213,9 @@
    .. note::
 
       The file-like object is read-only and provides the following methods:
-      :meth:`!read`, :meth:`!readline`, :meth:`!readlines`, :meth:`!__iter__`,
-      :meth:`!__next__`.
+      :meth:`~io.BufferedIOBase.read`, :meth:`~io.IOBase.readline`,
+      :meth:`~io.IOBase.readlines`, :meth:`__iter__`,
+      :meth:`~iterator.__next__`.
 
    .. note::
 
@@ -381,7 +382,7 @@
 
    Instances have one method in addition to those of :class:`ZipFile` objects:
 
-   .. method:: PyZipFile.writepy(pathname, basename='')
+   .. method:: PyZipFile.writepy(pathname, basename='', filterfunc=None)
 
       Search for files :file:`\*.py` and add the corresponding file to the
       archive.
@@ -403,7 +404,10 @@
       package directory, then all :file:`\*.py[co]` are added under the package
       name as a file path, and if any subdirectories are package directories,
       all of these are added recursively.  *basename* is intended for internal
-      use only.  The :meth:`writepy` method makes archives with file names like
+      use only.  When *filterfunc(pathname)* is given, it will be called for every
+      invocation. When it returns a False value, that path and its subpaths will
+      be ignored.
+      The :meth:`writepy` method makes archives with file names like
       this::
 
          string.pyc                   # Top level name
@@ -412,6 +416,9 @@
          test/bogus/__init__.pyc      # Subpackage directory
          test/bogus/myfile.pyc        # Submodule test.bogus.myfile
 
+      .. versionadded:: 3.4
+         The *filterfunc* parameter.
+
 
 .. _zipinfo-objects:
 
diff --git a/Doc/library/zlib.rst b/Doc/library/zlib.rst
index 731023e..d9a29a8 100644
--- a/Doc/library/zlib.rst
+++ b/Doc/library/zlib.rst
@@ -88,8 +88,7 @@
    that are expected to be most common should come at the end of the dictionary.
 
    .. versionchanged:: 3.3
-      Added the *method*, *wbits*, *memlevel*, *strategy* and *zdict*
-      parameters.
+      Added the *zdict* parameter and keyword argument support.
 
 
 .. function:: crc32(data[, value])
diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst
index c25c767..e35aa9f 100644
--- a/Doc/reference/compound_stmts.rst
+++ b/Doc/reference/compound_stmts.rst
@@ -536,17 +536,17 @@
 by the parameters' names in the :attr:`__annotations__` attribute of the
 function object.
 
-.. index:: pair: lambda; form
+.. index:: pair: lambda; expression
 
 It is also possible to create anonymous functions (functions not bound to a
-name), for immediate use in expressions.  This uses lambda forms, described in
-section :ref:`lambda`.  Note that the lambda form is merely a shorthand for a
+name), for immediate use in expressions.  This uses lambda expressions, described in
+section :ref:`lambda`.  Note that the lambda expression is merely a shorthand for a
 simplified function definition; a function defined in a ":keyword:`def`"
 statement can be passed around or assigned to another name just like a function
-defined by a lambda form.  The ":keyword:`def`" form is actually more powerful
+defined by a lambda expression.  The ":keyword:`def`" form is actually more powerful
 since it allows the execution of multiple statements and annotations.
 
-**Programmer's note:** Functions are first-class objects.  A "``def``" form
+**Programmer's note:** Functions are first-class objects.  A "``def``" statement
 executed inside a function definition defines a local function that can be
 returned or passed around.  Free variables used in the nested function can
 access the local variables of the function containing the def.  See section
diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst
index a88d562..0c6a0ab 100644
--- a/Doc/reference/datamodel.rst
+++ b/Doc/reference/datamodel.rst
@@ -316,7 +316,7 @@
          represented by integers in the range 0 <= x < 256.  Bytes literals
          (like ``b'abc'``) and the built-in function :func:`bytes` can be used to
          construct bytes objects.  Also, bytes objects can be decoded to strings
-         via the :meth:`decode` method.
+         via the :meth:`~bytes.decode` method.
 
    Mutable sequences
       .. index::
@@ -378,7 +378,7 @@
 
       These represent a mutable set. They are created by the built-in :func:`set`
       constructor and can be modified afterwards by several methods, such as
-      :meth:`add`.
+      :meth:`~set.add`.
 
    Frozen sets
       .. index:: object: frozenset
@@ -604,7 +604,7 @@
       A function or method which uses the :keyword:`yield` statement (see section
       :ref:`yield`) is called a :dfn:`generator function`.  Such a function, when
       called, always returns an iterator object which can be used to execute the
-      body of the function:  calling the iterator's :meth:`iterator__next__`
+      body of the function:  calling the iterator's :meth:`iterator.__next__`
       method will cause the function to execute until it provides a value
       using the :keyword:`yield` statement.  When the function executes a
       :keyword:`return` statement or falls off the end, a :exc:`StopIteration`
@@ -748,10 +748,10 @@
 
    Special attributes: :attr:`__name__` is the class name; :attr:`__module__` is
    the module name in which the class was defined; :attr:`__dict__` is the
-   dictionary containing the class's namespace; :attr:`__bases__` is a tuple
-   (possibly empty or a singleton) containing the base classes, in the order of
-   their occurrence in the base class list; :attr:`__doc__` is the class's
-   documentation string, or None if undefined.
+   dictionary containing the class's namespace; :attr:`~class.__bases__` is a
+   tuple (possibly empty or a singleton) containing the base classes, in the
+   order of their occurrence in the base class list; :attr:`__doc__` is the
+   class's documentation string, or None if undefined.
 
 Class instances
    .. index::
@@ -793,8 +793,8 @@
       single: __dict__ (instance attribute)
       single: __class__ (instance attribute)
 
-   Special attributes: :attr:`__dict__` is the attribute dictionary;
-   :attr:`__class__` is the instance's class.
+   Special attributes: :attr:`~object.__dict__` is the attribute dictionary;
+   :attr:`~instance.__class__` is the instance's class.
 
 I/O objects (also known as file objects)
    .. index::
@@ -812,9 +812,9 @@
 
    A :term:`file object` represents an open file.  Various shortcuts are
    available to create file objects: the :func:`open` built-in function, and
-   also :func:`os.popen`, :func:`os.fdopen`, and the :meth:`makefile` method
-   of socket objects (and perhaps by other functions or methods provided
-   by extension modules).
+   also :func:`os.popen`, :func:`os.fdopen`, and the
+   :meth:`~socket.socket.makefile` method of socket objects (and perhaps by
+   other functions or methods provided by extension modules).
 
    The objects ``sys.stdin``, ``sys.stdout`` and ``sys.stderr`` are
    initialized to file objects corresponding to the interpreter's standard
@@ -997,9 +997,9 @@
          single: stop (slice object attribute)
          single: step (slice object attribute)
 
-      Special read-only attributes: :attr:`start` is the lower bound; :attr:`stop` is
-      the upper bound; :attr:`step` is the step value; each is ``None`` if omitted.
-      These attributes can have any type.
+      Special read-only attributes: :attr:`~slice.start` is the lower bound;
+      :attr:`~slice.stop` is the upper bound; :attr:`~slice.step` is the step
+      value; each is ``None`` if omitted.  These attributes can have any type.
 
       Slice objects support one method:
 
@@ -1053,7 +1053,8 @@
 the emulation only be implemented to the degree that it makes sense for the
 object being modelled.  For example, some sequences may work well with retrieval
 of individual elements, but extracting a slice may not make sense.  (One example
-of this is the :class:`NodeList` interface in the W3C's Document Object Model.)
+of this is the :class:`~xml.dom.NodeList` interface in the W3C's Document
+Object Model.)
 
 
 .. _customization:
@@ -1775,10 +1776,10 @@
 
    :pep:`3119` - Introducing Abstract Base Classes
       Includes the specification for customizing :func:`isinstance` and
-      :func:`issubclass` behavior through :meth:`__instancecheck__` and
-      :meth:`__subclasscheck__`, with motivation for this functionality in the
-      context of adding Abstract Base Classes (see the :mod:`abc` module) to the
-      language.
+      :func:`issubclass` behavior through :meth:`~class.__instancecheck__` and
+      :meth:`~class.__subclasscheck__`, with motivation for this functionality
+      in the context of adding Abstract Base Classes (see the :mod:`abc`
+      module) to the language.
 
 
 .. _callable-types:
@@ -1808,9 +1809,10 @@
 N`` where *N* is the length of the sequence, or slice objects, which define a
 range of items.  It is also recommended that mappings provide the methods
 :meth:`keys`, :meth:`values`, :meth:`items`, :meth:`get`, :meth:`clear`,
-:meth:`setdefault`, :meth:`pop`, :meth:`popitem`, :meth:`copy`, and
+:meth:`setdefault`, :meth:`pop`, :meth:`popitem`, :meth:`!copy`, and
 :meth:`update` behaving similar to those for Python's standard dictionary
-objects.  The :mod:`collections` module provides a :class:`MutableMapping`
+objects.  The :mod:`collections` module provides a
+:class:`~collections.abc.MutableMapping`
 abstract base class to help create those methods from a base set of
 :meth:`__getitem__`, :meth:`__setitem__`, :meth:`__delitem__`, and :meth:`keys`.
 Mutable sequences should provide methods :meth:`append`, :meth:`count`,
diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst
index c0132bd..66358c8 100644
--- a/Doc/reference/expressions.rst
+++ b/Doc/reference/expressions.rst
@@ -336,10 +336,10 @@
 the generator's methods, the function can proceed exactly as if the
 :keyword:`yield` expression was just another external call.  The value of the
 :keyword:`yield` expression after resuming depends on the method which resumed
-the execution. If :meth:`__next__` is used (typically via either a
+the execution. If :meth:`~generator.__next__` is used (typically via either a
 :keyword:`for` or the :func:`next` builtin) then the result is :const:`None`,
-otherwise, if :meth:`send` is used, then the result will be the value passed
-in to that method.
+otherwise, if :meth:`~generator.send` is used, then the result will be the
+value passed in to that method.
 
 .. index:: single: coroutine
 
@@ -352,16 +352,17 @@
 :keyword:`yield` expressions are allowed in the :keyword:`try` clause of a
 :keyword:`try` ...  :keyword:`finally` construct.  If the generator is not
 resumed before it is finalized (by reaching a zero reference count or by being
-garbage collected), the generator-iterator's :meth:`close` method will be
-called, allowing any pending :keyword:`finally` clauses to execute.
+garbage collected), the generator-iterator's :meth:`~generator.close` method
+will be called, allowing any pending :keyword:`finally` clauses to execute.
 
 When ``yield from <expr>`` is used, it treats the supplied expression as
 a subiterator. All values produced by that subiterator are passed directly
 to the caller of the current generator's methods. Any values passed in with
-:meth:`send` and any exceptions passed in with :meth:`throw` are passed to
-the underlying iterator if it has the appropriate methods. If this is not the
-case, then :meth:`send` will raise :exc:`AttributeError` or :exc:`TypeError`,
-while :meth:`throw` will just raise the passed in exception immediately.
+:meth:`~generator.send` and any exceptions passed in with
+:meth:`~generator.throw` are passed to the underlying iterator if it has the
+appropriate methods.  If this is not the case, then :meth:`~generator.send`
+will raise :exc:`AttributeError` or :exc:`TypeError`, while
+:meth:`~generator.throw` will just raise the passed in exception immediately.
 
 When the underlying iterator is complete, the :attr:`~StopIteration.value`
 attribute of the raised :exc:`StopIteration` instance becomes the value of
@@ -388,6 +389,7 @@
 is already executing raises a :exc:`ValueError` exception.
 
 .. index:: exception: StopIteration
+.. class:: generator
 
 
 .. method:: generator.__next__()
@@ -438,6 +440,7 @@
    other exception, it is propagated to the caller.  :meth:`close` does nothing
    if the generator has already exited due to an exception or normal exit.
 
+.. class:: .
 
 .. index:: single: yield; examples
 
@@ -630,10 +633,10 @@
 containing the conversion of the slice items; otherwise, the conversion of the
 lone slice item is the key.  The conversion of a slice item that is an
 expression is that expression.  The conversion of a proper slice is a slice
-object (see section :ref:`types`) whose :attr:`start`, :attr:`stop` and
-:attr:`step` attributes are the values of the expressions given as lower bound,
-upper bound and stride, respectively, substituting ``None`` for missing
-expressions.
+object (see section :ref:`types`) whose :attr:`~slice.start`,
+:attr:`~slice.stop` and :attr:`~slice.step` attributes are the values of the
+expressions given as lower bound, upper bound and stride, respectively,
+substituting ``None`` for missing expressions.
 
 
 .. index::
@@ -912,7 +915,7 @@
 
 The ``/`` (division) and ``//`` (floor division) operators yield the quotient of
 their arguments.  The numeric arguments are first converted to a common type.
-Integer division yields a float, while floor division of integers results in an
+Division of integers yields a float, while floor division of integers results in an
 integer; the result is that of mathematical division with the 'floor' function
 applied to the result.  Division by zero raises the :exc:`ZeroDivisionError`
 exception.
@@ -972,8 +975,8 @@
 
 .. index:: exception: ValueError
 
-A right shift by *n* bits is defined as division by ``pow(2,n)``.  A left shift
-by *n* bits is defined as multiplication with ``pow(2,n)``.
+A right shift by *n* bits is defined as floor division by ``pow(2,n)``.  A left
+shift by *n* bits is defined as multiplication with ``pow(2,n)``.
 
 .. note::
 
@@ -1218,8 +1221,8 @@
 
 .. productionlist::
    conditional_expression: `or_test` ["if" `or_test` "else" `expression`]
-   expression: `conditional_expression` | `lambda_form`
-   expression_nocond: `or_test` | `lambda_form_nocond`
+   expression: `conditional_expression` | `lambda_expr`
+   expression_nocond: `or_test` | `lambda_expr_nocond`
 
 Conditional expressions (sometimes called a "ternary operator") have the lowest
 priority of all Python operations.
@@ -1243,10 +1246,10 @@
    pair: anonymous; function
 
 .. productionlist::
-   lambda_form: "lambda" [`parameter_list`]: `expression`
-   lambda_form_nocond: "lambda" [`parameter_list`]: `expression_nocond`
+   lambda_expr: "lambda" [`parameter_list`]: `expression`
+   lambda_expr_nocond: "lambda" [`parameter_list`]: `expression_nocond`
 
-Lambda forms (lambda expressions) have the same syntactic position as
+Lambda expressions (sometimes called lambda forms) have the same syntactic position as
 expressions.  They are a shorthand to create anonymous functions; the expression
 ``lambda arguments: expression`` yields a function object.  The unnamed object
 behaves like a function object defined with ::
@@ -1255,7 +1258,8 @@
        return expression
 
 See section :ref:`function` for the syntax of parameter lists.  Note that
-functions created with lambda forms cannot contain statements or annotations.
+functions created with lambda expressions cannot contain statements or
+annotations.
 
 
 .. _exprlists:
diff --git a/Doc/reference/lexical_analysis.rst b/Doc/reference/lexical_analysis.rst
index 94f219b..0ed3d3b 100644
--- a/Doc/reference/lexical_analysis.rst
+++ b/Doc/reference/lexical_analysis.rst
@@ -704,7 +704,7 @@
 The following tokens serve as delimiters in the grammar::
 
    (       )       [       ]       {       }
-   ,       :       .       ;       @       =
+   ,       :       .       ;       @       =       ->
    +=      -=      *=      /=      //=     %=
    &=      |=      ^=      >>=     <<=     **=
 
diff --git a/Doc/tools/sphinx-build.py b/Doc/tools/sphinx-build.py
index 91be6f0..a446dfa 100644
--- a/Doc/tools/sphinx-build.py
+++ b/Doc/tools/sphinx-build.py
@@ -15,7 +15,7 @@
 
 if __name__ == '__main__':
 
-    if sys.version_info[:3] < (2, 4, 0):
+    if sys.version_info[:3] < (2, 4, 0) or sys.version_info[:3] > (3, 0, 0):
         sys.stderr.write("""\
 Error: Sphinx needs to be executed with Python 2.4 or newer (not 3.0 though).
 (If you run this from the Makefile, you can set the PYTHON variable
diff --git a/Doc/tools/sphinxext/c_annotations.py b/Doc/tools/sphinxext/c_annotations.py
new file mode 100644
index 0000000..8b5167a
--- /dev/null
+++ b/Doc/tools/sphinxext/c_annotations.py
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+"""
+    c_annotations.py
+    ~~~~~~~~~~~~~~~~
+
+    Supports annotations for C API elements:
+
+    * reference count annotations for C API functions.  Based on
+      refcount.py and anno-api.py in the old Python documentation tools.
+
+    * stable API annotations
+
+    Usage: Set the `refcount_file` config value to the path to the reference
+    count data file.
+
+    :copyright: Copyright 2007-2013 by Georg Brandl.
+    :license: Python license.
+"""
+
+from os import path
+from docutils import nodes
+from docutils.parsers.rst import directives
+
+from sphinx import addnodes
+from sphinx.domains.c import CObject
+
+
+class RCEntry:
+    def __init__(self, name):
+        self.name = name
+        self.args = []
+        self.result_type = ''
+        self.result_refs = None
+
+
+class Annotations(dict):
+    @classmethod
+    def fromfile(cls, filename):
+        d = cls()
+        fp = open(filename, 'r')
+        try:
+            for line in fp:
+                line = line.strip()
+                if line[:1] in ("", "#"):
+                    # blank lines and comments
+                    continue
+                parts = line.split(":", 4)
+                if len(parts) != 5:
+                    raise ValueError("Wrong field count in %r" % line)
+                function, type, arg, refcount, comment = parts
+                # Get the entry, creating it if needed:
+                try:
+                    entry = d[function]
+                except KeyError:
+                    entry = d[function] = RCEntry(function)
+                if not refcount or refcount == "null":
+                    refcount = None
+                else:
+                    refcount = int(refcount)
+                # Update the entry with the new parameter or the result
+                # information.
+                if arg:
+                    entry.args.append((arg, type, refcount))
+                else:
+                    entry.result_type = type
+                    entry.result_refs = refcount
+        finally:
+            fp.close()
+        return d
+
+    def add_annotations(self, app, doctree):
+        for node in doctree.traverse(addnodes.desc_content):
+            par = node.parent
+            if par['domain'] != 'c':
+                continue
+            if par['stableabi']:
+                node.insert(0, nodes.emphasis(' Part of the stable ABI.',
+                                              ' Part of the stable ABI.',
+                                              classes=['stableabi']))
+            if par['objtype'] != 'function':
+                continue
+            if not par[0].has_key('names') or not par[0]['names']:
+                continue
+            entry = self.get(par[0]['names'][0])
+            if not entry:
+                continue
+            elif entry.result_type not in ("PyObject*", "PyVarObject*"):
+                continue
+            if entry.result_refs is None:
+                rc = 'Return value: Always NULL.'
+            elif entry.result_refs:
+                rc = 'Return value: New reference.'
+            else:
+                rc = 'Return value: Borrowed reference.'
+            node.insert(0, nodes.emphasis(rc, rc, classes=['refcount']))
+
+
+def init_annotations(app):
+    refcounts = Annotations.fromfile(
+        path.join(app.srcdir, app.config.refcount_file))
+    app.connect('doctree-read', refcounts.add_annotations)
+
+
+def setup(app):
+    app.add_config_value('refcount_file', '', True)
+    app.connect('builder-inited', init_annotations)
+
+    # monkey-patch C object...
+    CObject.option_spec = {
+        'noindex': directives.flag,
+        'stableabi': directives.flag,
+    }
+    old_handle_signature = CObject.handle_signature
+    def new_handle_signature(self, sig, signode):
+        signode.parent['stableabi'] = 'stableabi' in self.options
+        return old_handle_signature(self, sig, signode)
+    CObject.handle_signature = new_handle_signature
diff --git a/Doc/tools/sphinxext/pydoctheme/static/pydoctheme.css b/Doc/tools/sphinxext/pydoctheme/static/pydoctheme.css
index 9942ca6..3d995d8 100644
--- a/Doc/tools/sphinxext/pydoctheme/static/pydoctheme.css
+++ b/Doc/tools/sphinxext/pydoctheme/static/pydoctheme.css
@@ -122,7 +122,7 @@
     font-weight: normal;
 }
 
-p.deprecated {
+.deprecated {
     border-radius: 3px;
 }
 
@@ -168,3 +168,11 @@
 div.footer a:hover {
     color: #0095C4;
 }
+
+.refcount {
+    color: #060;
+}
+
+.stableabi {
+    color: #229;
+}
diff --git a/Doc/tools/sphinxext/pyspecific.py b/Doc/tools/sphinxext/pyspecific.py
index df6e48a..2b5de14 100644
--- a/Doc/tools/sphinxext/pyspecific.py
+++ b/Doc/tools/sphinxext/pyspecific.py
@@ -5,7 +5,7 @@
 
     Sphinx extension with Python doc-specific markup.
 
-    :copyright: 2008, 2009, 2010, 2011, 2012 by Georg Brandl.
+    :copyright: 2008-2013 by Georg Brandl.
     :license: Python license.
 """
 
@@ -13,7 +13,12 @@
 SOURCE_URI = 'http://hg.python.org/cpython/file/default/%s'
 
 from docutils import nodes, utils
+
+import sphinx
 from sphinx.util.nodes import split_explicit_title
+from sphinx.writers.html import HTMLTranslator
+from sphinx.writers.latex import LaTeXTranslator
+from sphinx.locale import versionlabels
 
 # monkey-patch reST parser to disable alphabetic and roman enumerated lists
 from docutils.parsers.rst.states import Body
@@ -22,21 +27,17 @@
     Body.enum.converters['lowerroman'] = \
     Body.enum.converters['upperroman'] = lambda x: None
 
-# monkey-patch HTML translator to give versionmodified paragraphs a class
-def new_visit_versionmodified(self, node):
-    self.body.append(self.starttag(node, 'p', CLASS=node['type']))
-    text = versionlabels[node['type']] % node['version']
-    if len(node):
-        text += ':'
-    else:
-        text += '.'
-    self.body.append('<span class="versionmodified">%s</span> ' % text)
-
-from sphinx.writers.html import HTMLTranslator
-from sphinx.writers.latex import LaTeXTranslator
-from sphinx.locale import versionlabels
-HTMLTranslator.visit_versionmodified = new_visit_versionmodified
-HTMLTranslator.visit_versionmodified = new_visit_versionmodified
+if sphinx.__version__[:3] < '1.2':
+    # monkey-patch HTML translator to give versionmodified paragraphs a class
+    def new_visit_versionmodified(self, node):
+        self.body.append(self.starttag(node, 'p', CLASS=node['type']))
+        text = versionlabels[node['type']] % node['version']
+        if len(node):
+            text += ':'
+        else:
+            text += '.'
+        self.body.append('<span class="versionmodified">%s</span> ' % text)
+    HTMLTranslator.visit_versionmodified = new_visit_versionmodified
 
 # monkey-patch HTML and LaTeX translators to keep doctest blocks in the
 # doctest docs themselves
diff --git a/Doc/tools/sphinxext/static/basic.css b/Doc/tools/sphinxext/static/basic.css
index 5708b4d..2058b05 100644
--- a/Doc/tools/sphinxext/static/basic.css
+++ b/Doc/tools/sphinxext/static/basic.css
@@ -38,6 +38,8 @@
 /* -- sidebar --------------------------------------------------------------- */
 
 div.sphinxsidebarwrapper {
+    position: relative;
+    top: 0;
     padding: 10px 5px 0 10px;
     word-wrap: break-word;
 }
@@ -334,10 +336,14 @@
     font-style: italic;
 }
 
-p.deprecated, p.deprecated-removed {
+.deprecated, .deprecated-removed {
     background-color: #ffe4e4;
     border: 1px solid #f66;
-    padding: 7px
+    padding: 7px;
+}
+
+div.deprecated p {
+    margin-bottom: 0;
 }
 
 .system-message {
diff --git a/Doc/tools/sphinxext/static/sidebar.js b/Doc/tools/sphinxext/static/sidebar.js
index 0c410e6..e8d58f4 100644
--- a/Doc/tools/sphinxext/static/sidebar.js
+++ b/Doc/tools/sphinxext/static/sidebar.js
@@ -2,7 +2,8 @@
  * sidebar.js
  * ~~~~~~~~~~
  *
- * This script makes the Sphinx sidebar collapsible.
+ * This script makes the Sphinx sidebar collapsible and implements intelligent
+ * scrolling.
  *
  * .sphinxsidebar contains .sphinxsidebarwrapper.  This script adds in
  * .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton used to
@@ -24,6 +25,8 @@
   // global elements used by the functions.
   // the 'sidebarbutton' element is defined as global after its
   // creation, in the add_sidebar_button function
+  var jwindow = $(window);
+  var jdocument = $(document);
   var bodywrapper = $('.bodywrapper');
   var sidebar = $('.sphinxsidebar');
   var sidebarwrapper = $('.sphinxsidebarwrapper');
@@ -42,6 +45,13 @@
   var dark_color = '#AAAAAA';
   var light_color = '#CCCCCC';
 
+  function get_viewport_height() {
+    if (window.innerHeight)
+      return window.innerHeight;
+    else
+      return jwindow.height();
+  }
+
   function sidebar_is_collapsed() {
     return sidebarwrapper.is(':not(:visible)');
   }
@@ -51,6 +61,8 @@
       expand_sidebar();
     else
       collapse_sidebar();
+    // adjust the scrolling of the sidebar
+    scroll_sidebar();
   }
 
   function collapse_sidebar() {
@@ -95,11 +107,7 @@
     );
     var sidebarbutton = $('#sidebarbutton');
     // find the height of the viewport to center the '<<' in the page
-    var viewport_height;
-    if (window.innerHeight)
- 	  viewport_height = window.innerHeight;
-    else
-	  viewport_height = $(window).height();
+    var viewport_height = get_viewport_height();
     var sidebar_offset = sidebar.offset().top;
     var sidebar_height = Math.max(bodywrapper.height(), sidebar.height());
     sidebarbutton.find('span').css({
@@ -152,4 +160,34 @@
   add_sidebar_button();
   var sidebarbutton = $('#sidebarbutton');
   set_position_from_cookie();
+
+
+  /* intelligent scrolling */
+  function scroll_sidebar() {
+    var sidebar_height = sidebarwrapper.height();
+    var viewport_height = get_viewport_height();
+    var offset = sidebar.position()['top'];
+    var wintop = jwindow.scrollTop();
+    var winbot = wintop + viewport_height;
+    var curtop = sidebarwrapper.position()['top'];
+    var curbot = curtop + sidebar_height;
+    // does sidebar fit in window?
+    if (sidebar_height < viewport_height) {
+      // yes: easy case -- always keep at the top
+      sidebarwrapper.css('top', $u.min([$u.max([0, wintop - offset - 10]),
+                            jdocument.height() - sidebar_height - 200]));
+    }
+    else {
+      // no: only scroll if top/bottom edge of sidebar is at
+      // top/bottom edge of window
+      if (curtop > wintop && curbot > winbot) {
+        sidebarwrapper.css('top', $u.max([wintop - offset - 10, 0]));
+      }
+      else if (curtop < wintop && curbot < winbot) {
+        sidebarwrapper.css('top', $u.min([winbot - sidebar_height - offset - 20,
+                              jdocument.height() - sidebar_height - 200]));
+      }
+    }
+  }
+  jwindow.scroll(scroll_sidebar);
 });
diff --git a/Doc/tools/sphinxext/susp-ignored.csv b/Doc/tools/sphinxext/susp-ignored.csv
index d951dad..57b1f1e 100644
--- a/Doc/tools/sphinxext/susp-ignored.csv
+++ b/Doc/tools/sphinxext/susp-ignored.csv
@@ -18,14 +18,14 @@
 faq/windows,,:bd8afb90ebf2,"Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32"
 howto/cporting,,:encode,"if (!PyArg_ParseTuple(args, ""O:encode_object"", &myobj))"
 howto/cporting,,:say,"if (!PyArg_ParseTuple(args, ""U:say_hello"", &name))"
-howto/curses,,:black,"They are: 0:black, 1:red, 2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and"
-howto/curses,,:blue,"They are: 0:black, 1:red, 2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and"
-howto/curses,,:cyan,"They are: 0:black, 1:red, 2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and"
-howto/curses,,:green,"They are: 0:black, 1:red, 2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and"
-howto/curses,,:magenta,"They are: 0:black, 1:red, 2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and"
-howto/curses,,:red,"They are: 0:black, 1:red, 2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and"
-howto/curses,,:white,"7:white."
-howto/curses,,:yellow,"They are: 0:black, 1:red, 2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and"
+howto/curses,,:black,"colors when it activates color mode.  They are: 0:black, 1:red,"
+howto/curses,,:red,"colors when it activates color mode.  They are: 0:black, 1:red,"
+howto/curses,,:green,"2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.  The"
+howto/curses,,:yellow,"2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.  The"
+howto/curses,,:blue,"2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.  The"
+howto/curses,,:magenta,"2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.  The"
+howto/curses,,:cyan,"2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.  The"
+howto/curses,,:white,"2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.  The"
 howto/ipaddress,,:DB8,>>> ipaddress.ip_address('2001:DB8::1')
 howto/ipaddress,,::,>>> ipaddress.ip_address('2001:DB8::1')
 howto/ipaddress,,:db8,IPv6Address('2001:db8::1')
@@ -88,7 +88,6 @@
 library/audioop,,:ipos,"# factor = audioop.findfactor(in_test[ipos*2:ipos*2+len(out_test)],"
 library/bisect,32,:hi,all(val >= x for val in a[i:hi])
 library/bisect,42,:hi,all(val > x for val in a[i:hi])
-library/concurrent.futures,,:url,"future_to_url = {executor.submit(load_url, url, 60):url for url in URLS}"
 library/configparser,,:home,my_dir: ${Common:home_dir}/twosheds
 library/configparser,,:option,${section:option}
 library/configparser,,:path,python_dir: ${Frameworks:path}/Python/Versions/${Frameworks:Python}
@@ -206,9 +205,9 @@
 library/urllib.request,,:lang,"xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""en"" lang=""en"">\n\n<head>\n"
 library/urllib.request,,:password,"""joe:password@python.org"""
 library/uuid,,:uuid,urn:uuid:12345678-1234-5678-1234-567812345678
-library/venv,,:param,":param nodist: If True, Distribute is not installed into the created"
+library/venv,,:param,":param nodist: If True, setuptools and pip are not installed into the"
+library/venv,,:param,":param progress: If setuptools or pip are installed, the progress of the"
 library/venv,,:param,":param nopip: If True, pip is not installed into the created"
-library/venv,,:param,":param progress: If Distribute or pip are installed, the progress of the"
 library/venv,,:param,:param context: The information for the environment creation request
 library/xmlrpc.client,,:pass,http://user:pass@host:port/path
 library/xmlrpc.client,,:pass,user:pass
@@ -242,6 +241,7 @@
 using/cmdline,,:line,file:line: category: message
 using/cmdline,,:message,action:message:category:module:line
 using/cmdline,,:module,action:message:category:module:line
+using/unix,,:Packaging,http://en.opensuse.org/Portal:Packaging
 whatsnew/2.0,418,:len,
 whatsnew/2.3,,::,
 whatsnew/2.3,,:config,
@@ -276,9 +276,7 @@
 whatsnew/3.2,,:location,zope9-location = ${zope9:location}
 whatsnew/3.2,,:prefix,zope-conf = ${custom:prefix}/etc/zope.conf
 whatsnew/changelog,,:platform,:platform:
-whatsnew/changelog,,:password,: Unquote before b64encoding user:password during Basic
-whatsnew/changelog,,:close,Connection:close header.
 whatsnew/changelog,,:PythonCmd,"With Tk < 8.5 _tkinter.c:PythonCmd() raised UnicodeDecodeError, caused"
-whatsnew/changelog,,:close,: Connection:close header is sent by requests using URLOpener
 whatsnew/changelog,,::,": Fix FTP tests for IPv6, bind to ""::1"" instead of ""localhost""."
-whatsnew/changelog,,:test,: test_subprocess:test_leaking_fds_on_error no longer gives a
+whatsnew/changelog,,::,": Use ""127.0.0.1"" or ""::1"" instead of ""localhost"" as much as"
+whatsnew/changelog,,:password,user:password
diff --git a/Doc/tutorial/classes.rst b/Doc/tutorial/classes.rst
index 3283e54..08072a3 100644
--- a/Doc/tutorial/classes.rst
+++ b/Doc/tutorial/classes.rst
@@ -168,7 +168,6 @@
        def do_global():
            global spam
            spam = "global spam"
-
        spam = "test spam"
        do_local()
        print("After local assignment:", spam)
@@ -653,7 +652,7 @@
 A piece of Python code that expects a particular abstract data type can often be
 passed a class that emulates the methods of that data type instead.  For
 instance, if you have a function that formats some data from a file object, you
-can define a class with methods :meth:`read` and :meth:`readline` that get the
+can define a class with methods :meth:`read` and :meth:`!readline` that get the
 data from a string buffer instead, and pass it as an argument.
 
 .. (Unfortunately, this technique has its limitations: a class can't define
@@ -739,8 +738,8 @@
 calls :func:`iter` on the container object.  The function returns an iterator
 object that defines the method :meth:`~iterator.__next__` which accesses
 elements in the container one at a time.  When there are no more elements,
-:meth:`__next__` raises a :exc:`StopIteration` exception which tells the
-:keyword:`for` loop to terminate.  You can call the :meth:`__next__` method
+:meth:`~iterator.__next__` raises a :exc:`StopIteration` exception which tells the
+:keyword:`for` loop to terminate.  You can call the :meth:`~iterator.__next__` method
 using the :func:`next` built-in function; this example shows how it all works::
 
    >>> s = 'abc'
diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst
index 055f547..52e382e 100644
--- a/Doc/tutorial/controlflow.rst
+++ b/Doc/tutorial/controlflow.rst
@@ -583,17 +583,16 @@
 
 .. _tut-lambda:
 
-Lambda Forms
-------------
+Lambda Expressions
+------------------
 
-By popular demand, a few features commonly found in functional programming
-languages like Lisp have been added to Python.  With the :keyword:`lambda`
-keyword, small anonymous functions can be created. Here's a function that
-returns the sum of its two arguments: ``lambda a, b: a+b``.  Lambda forms can be
-used wherever function objects are required.  They are syntactically restricted
-to a single expression.  Semantically, they are just syntactic sugar for a
-normal function definition.  Like nested function definitions, lambda forms can
-reference variables from the containing scope::
+Small anonymous functions can be created with the :keyword:`lambda` keyword.
+This function returns the sum of its two arguments: ``lambda a, b: a+b``.
+Lambda functions can be used wherever function objects are required.  They are
+syntactically restricted to a single expression.  Semantically, they are just
+syntactic sugar for a normal function definition.  Like nested function
+definitions, lambda functions can reference variables from the containing
+scope::
 
    >>> def make_incrementor(n):
    ...     return lambda x: x + n
@@ -604,6 +603,14 @@
    >>> f(1)
    43
 
+The above example uses a lambda expression to return a function.  Another use
+is to pass a small function as an argument::
+
+   >>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
+   >>> pairs.sort(key=lambda pair: pair[1])
+   >>> pairs
+   [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
+
 
 .. _tut-docstrings:
 
diff --git a/Doc/tutorial/datastructures.rst b/Doc/tutorial/datastructures.rst
index 53077e4..24d2d2e 100644
--- a/Doc/tutorial/datastructures.rst
+++ b/Doc/tutorial/datastructures.rst
@@ -54,6 +54,12 @@
    will see this notation frequently in the Python Library Reference.)
 
 
+.. method:: list.clear()
+   :noindex:
+
+   Remove all items from the list.  Equivalent to ``del a[:]``.
+
+
 .. method:: list.index(x)
    :noindex:
 
@@ -79,6 +85,12 @@
    Reverse the elements of the list in place.
 
 
+.. method:: list.copy()
+   :noindex:
+
+   Return a shallow copy of the list.  Equivalent to ``a[:]``.
+
+
 An example that uses most of the list methods::
 
    >>> a = [66.25, 333, 333, 1, 1234.5]
diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst
index 2b76c32..4282151 100644
--- a/Doc/tutorial/errors.rst
+++ b/Doc/tutorial/errors.rst
@@ -45,7 +45,7 @@
    >>> 10 * (1/0)
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
-   ZeroDivisionError: int division or modulo by zero
+   ZeroDivisionError: division by zero
    >>> 4 + spam*3
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
diff --git a/Doc/tutorial/modules.rst b/Doc/tutorial/modules.rst
index 99e15bc..94a66ac 100644
--- a/Doc/tutorial/modules.rst
+++ b/Doc/tutorial/modules.rst
@@ -183,57 +183,45 @@
 "Compiled" Python files
 -----------------------
 
-As an important speed-up of the start-up time for short programs that use a lot
-of standard modules, if a file called :file:`spam.pyc` exists in the directory
-where :file:`spam.py` is found, this is assumed to contain an
-already-"byte-compiled" version of the module :mod:`spam`. The modification time
-of the version of :file:`spam.py` used to create :file:`spam.pyc` is recorded in
-:file:`spam.pyc`, and the :file:`.pyc` file is ignored if these don't match.
+To speed up loading modules, Python caches the compiled version of each module
+in the ``__pycache__`` directory under the name :file:`module.{version}.pyc`,
+where the version encodes the format of the compiled file; it generally contains
+the Python version number.  For example, in CPython release 3.3 the compiled
+version of spam.py would be cached as ``__pycache__/spam.cpython-33.pyc``.  This
+naming convention allows compiled modules from different releases and different
+versions of Python to coexist.
 
-Normally, you don't need to do anything to create the :file:`spam.pyc` file.
-Whenever :file:`spam.py` is successfully compiled, an attempt is made to write
-the compiled version to :file:`spam.pyc`.  It is not an error if this attempt
-fails; if for any reason the file is not written completely, the resulting
-:file:`spam.pyc` file will be recognized as invalid and thus ignored later.  The
-contents of the :file:`spam.pyc` file are platform independent, so a Python
-module directory can be shared by machines of different architectures.
+Python checks the modification date of the source against the compiled version
+to see if it's out of date and needs to be recompiled.  This is a completely
+automatic process.  Also, the compiled modules are platform-independent, so the
+same library can be shared among systems with different architectures.
+
+Python does not check the cache in two circumstances.  First, it always
+recompiles and does not store the result for the module that's loaded directly
+from the command line.  Second, it does not check the cache if there is no
+source module.  To support a non-source (compiled only) distribution, the
+compiled module must be in the source directory, and there must not be a source
+module.
 
 Some tips for experts:
 
-* When the Python interpreter is invoked with the :option:`-O` flag, optimized
-  code is generated and stored in :file:`.pyo` files.  The optimizer currently
-  doesn't help much; it only removes :keyword:`assert` statements.  When
-  :option:`-O` is used, *all* :term:`bytecode` is optimized; ``.pyc`` files are
-  ignored and ``.py`` files are compiled to optimized bytecode.
+* You can use the :option:`-O` or :option:`-OO` switches on the Python command
+  to reduce the size of a compiled module.  The ``-O`` switch removes assert
+  statements, the ``-OO`` switch removes both assert statements and __doc__
+  strings.  Since some programs may rely on having these available, you should
+  only use this option if you know what you're doing.  "Optimized" modules have
+  a .pyo rather than a .pyc suffix and are usually smaller.  Future releases may
+  change the effects of optimization.
 
-* Passing two :option:`-O` flags to the Python interpreter (:option:`-OO`) will
-  cause the bytecode compiler to perform optimizations that could in some rare
-  cases result in malfunctioning programs.  Currently only ``__doc__`` strings are
-  removed from the bytecode, resulting in more compact :file:`.pyo` files.  Since
-  some programs may rely on having these available, you should only use this
-  option if you know what you're doing.
+* A program doesn't run any faster when it is read from a ``.pyc`` or ``.pyo``
+  file than when it is read from a ``.py`` file; the only thing that's faster
+  about ``.pyc`` or ``.pyo`` files is the speed with which they are loaded.
 
-* A program doesn't run any faster when it is read from a :file:`.pyc` or
-  :file:`.pyo` file than when it is read from a :file:`.py` file; the only thing
-  that's faster about :file:`.pyc` or :file:`.pyo` files is the speed with which
-  they are loaded.
+* The module :mod:`compileall` can create .pyc files (or .pyo files when
+  :option:`-O` is used) for all modules in a directory.
 
-* When a script is run by giving its name on the command line, the bytecode for
-  the script is never written to a :file:`.pyc` or :file:`.pyo` file.  Thus, the
-  startup time of a script may be reduced by moving most of its code to a module
-  and having a small bootstrap script that imports that module.  It is also
-  possible to name a :file:`.pyc` or :file:`.pyo` file directly on the command
-  line.
-
-* It is possible to have a file called :file:`spam.pyc` (or :file:`spam.pyo`
-  when :option:`-O` is used) without a file :file:`spam.py` for the same module.
-  This can be used to distribute a library of Python code in a form that is
-  moderately hard to reverse engineer.
-
-  .. index:: module: compileall
-
-* The module :mod:`compileall` can create :file:`.pyc` files (or :file:`.pyo`
-  files when :option:`-O` is used) for all modules in a directory.
+* There is more detail on this process, including a flow chart of the
+  decisions, in PEP 3147.
 
 
 .. _tut-standardmodules:
@@ -378,7 +366,9 @@
 (such as mixing, adding echo, applying an equalizer function, creating an
 artificial stereo effect), so in addition you will be writing a never-ending
 stream of modules to perform these operations.  Here's a possible structure for
-your package (expressed in terms of a hierarchical filesystem)::
+your package (expressed in terms of a hierarchical filesystem):
+
+.. code-block:: text
 
    sound/                          Top-level package
          __init__.py               Initialize the sound package
@@ -475,7 +465,7 @@
 encountered.  It is up to the package author to keep this list up-to-date when a
 new version of the package is released.  Package authors may also decide not to
 support it, if they don't see a use for importing \* from their package.  For
-example, the file :file:`sounds/effects/__init__.py` could contain the following
+example, the file :file:`sound/effects/__init__.py` could contain the following
 code::
 
    __all__ = ["echo", "surround", "reverse"]
diff --git a/Doc/tutorial/stdlib2.rst b/Doc/tutorial/stdlib2.rst
index 3b9122f..c0197ea 100644
--- a/Doc/tutorial/stdlib2.rst
+++ b/Doc/tutorial/stdlib2.rst
@@ -71,9 +71,9 @@
 Templating
 ==========
 
-The :mod:`string` module includes a versatile :class:`Template` class with a
-simplified syntax suitable for editing by end-users.  This allows users to
-customize their applications without having to alter the application.
+The :mod:`string` module includes a versatile :class:`~string.Template` class
+with a simplified syntax suitable for editing by end-users.  This allows users
+to customize their applications without having to alter the application.
 
 The format uses placeholder names formed by ``$`` with valid Python identifiers
 (alphanumeric characters and underscores).  Surrounding the placeholder with
@@ -85,11 +85,11 @@
    >>> t.substitute(village='Nottingham', cause='the ditch fund')
    'Nottinghamfolk send $10 to the ditch fund.'
 
-The :meth:`substitute` method raises a :exc:`KeyError` when a placeholder is not
-supplied in a dictionary or a keyword argument. For mail-merge style
-applications, user supplied data may be incomplete and the
-:meth:`safe_substitute` method may be more appropriate --- it will leave
-placeholders unchanged if data is missing::
+The :meth:`~string.Template.substitute` method raises a :exc:`KeyError` when a
+placeholder is not supplied in a dictionary or a keyword argument.  For
+mail-merge style applications, user supplied data may be incomplete and the
+:meth:`~string.Template.safe_substitute` method may be more appropriate ---
+it will leave placeholders unchanged if data is missing::
 
    >>> t = Template('Return the $item to $owner.')
    >>> d = dict(item='unladen swallow')
@@ -132,8 +132,9 @@
 Working with Binary Data Record Layouts
 =======================================
 
-The :mod:`struct` module provides :func:`pack` and :func:`unpack` functions for
-working with variable length binary record formats.  The following example shows
+The :mod:`struct` module provides :func:`~struct.pack` and
+:func:`~struct.unpack` functions for working with variable length binary
+record formats.  The following example shows
 how to loop through header information in a ZIP file without using the
 :mod:`zipfile` module.  Pack codes ``"H"`` and ``"I"`` represent two and four
 byte unsigned numbers respectively.  The ``"<"`` indicates that they are
@@ -201,7 +202,7 @@
 are difficult to reproduce.  So, the preferred approach to task coordination is
 to concentrate all access to a resource in a single thread and then use the
 :mod:`queue` module to feed that thread with requests from other threads.
-Applications using :class:`Queue` objects for inter-thread communication and
+Applications using :class:`~queue.Queue` objects for inter-thread communication and
 coordination are easier to design, more readable, and more reliable.
 
 
@@ -231,8 +232,9 @@
 By default, informational and debugging messages are suppressed and the output
 is sent to standard error.  Other output options include routing messages
 through email, datagrams, sockets, or to an HTTP Server.  New filters can select
-different routing based on message priority: :const:`DEBUG`, :const:`INFO`,
-:const:`WARNING`, :const:`ERROR`, and :const:`CRITICAL`.
+different routing based on message priority: :const:`~logging.DEBUG`,
+:const:`~logging.INFO`, :const:`~logging.WARNING`, :const:`~logging.ERROR`,
+and :const:`~logging.CRITICAL`.
 
 The logging system can be configured directly from Python or can be loaded from
 a user editable configuration file for customized logging without altering the
@@ -289,11 +291,11 @@
 sometimes there is a need for alternative implementations with different
 performance trade-offs.
 
-The :mod:`array` module provides an :class:`array()` object that is like a list
-that stores only homogeneous data and stores it more compactly.  The following
-example shows an array of numbers stored as two byte unsigned binary numbers
-(typecode ``"H"``) rather than the usual 16 bytes per entry for regular lists of
-Python int objects::
+The :mod:`array` module provides an :class:`~array.array()` object that is like
+a list that stores only homogeneous data and stores it more compactly.  The
+following example shows an array of numbers stored as two byte unsigned binary
+numbers (typecode ``"H"``) rather than the usual 16 bytes per entry for regular
+lists of Python int objects::
 
    >>> from array import array
    >>> a = array('H', [4000, 10, 700, 22222])
@@ -302,10 +304,10 @@
    >>> a[1:3]
    array('H', [10, 700])
 
-The :mod:`collections` module provides a :class:`deque()` object that is like a
-list with faster appends and pops from the left side but slower lookups in the
-middle. These objects are well suited for implementing queues and breadth first
-tree searches::
+The :mod:`collections` module provides a :class:`~collections.deque()` object
+that is like a list with faster appends and pops from the left side but slower
+lookups in the middle. These objects are well suited for implementing queues
+and breadth first tree searches::
 
    >>> from collections import deque
    >>> d = deque(["task1", "task2", "task3"])
@@ -351,8 +353,8 @@
 Decimal Floating Point Arithmetic
 =================================
 
-The :mod:`decimal` module offers a :class:`Decimal` datatype for decimal
-floating point arithmetic.  Compared to the built-in :class:`float`
+The :mod:`decimal` module offers a :class:`~decimal.Decimal` datatype for
+decimal floating point arithmetic.  Compared to the built-in :class:`float`
 implementation of binary floating point, the class is especially helpful for
 
 * financial applications and other uses which require exact decimal
@@ -373,13 +375,15 @@
    >>> round(.70 * 1.05, 2)
    0.73
 
-The :class:`Decimal` result keeps a trailing zero, automatically inferring four
-place significance from multiplicands with two place significance.  Decimal
-reproduces mathematics as done by hand and avoids issues that can arise when
-binary floating point cannot exactly represent decimal quantities.
+The :class:`~decimal.Decimal` result keeps a trailing zero, automatically
+inferring four place significance from multiplicands with two place
+significance.  Decimal reproduces mathematics as done by hand and avoids
+issues that can arise when binary floating point cannot exactly represent
+decimal quantities.
 
-Exact representation enables the :class:`Decimal` class to perform modulo
-calculations and equality tests that are unsuitable for binary floating point::
+Exact representation enables the :class:`~decimal.Decimal` class to perform
+modulo calculations and equality tests that are unsuitable for binary floating
+point::
 
    >>> Decimal('1.00') % Decimal('.10')
    Decimal('0.00')
diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst
index 2e3cab5..dd992ed 100644
--- a/Doc/whatsnew/3.4.rst
+++ b/Doc/whatsnew/3.4.rst
@@ -75,7 +75,7 @@
 
 .. seealso::
 
-   .. :pep:`4XX` - Python 3.4 Release Schedule
+   :pep:`429` - Python 3.4 Release Schedule
 
 
 Summary -- Release highlights
@@ -86,81 +86,88 @@
 
 New syntax features:
 
-* None yet.
+* No new syntax features are planned for Python 3.4.
 
 New library modules:
 
-* :mod:`enum`: Implementation of the :pep:`435`.
+* :mod:`asyncio`: New provisonal API for asynchronous IO (:pep:`3156`).
+* :mod:`enum`: Support for enumeration types (:pep:`435`).
+* :mod:`ensurepip`: Bootstrapping the pip installer (:pep:`453`).
 * :mod:`selectors`: High-level and efficient I/O multiplexing, built upon the
   :mod:`select` module primitives.
+* :mod:`statistics`: A basic numerically stable statistics library (:pep:`450`).
 
-New built-in features:
+New expected features for Python implementations:
 
-* :ref:`PEP 442: Safe object finalization <pep-442>`.
-* :ref:`PEP 445: Configurable memory allocators <pep-445>`.
 * :ref:`PEP 446: Make newly created file descriptors non-inheritable <pep-446>`.
-
-Implementation improvements:
-
-* A more efficient :mod:`marshal` format (:issue:`16475`).
-* Improve finalization of Python modules to avoid setting their globals
-  to None, in most cases (:issue:`18214`).
+* command line option for :ref:`isolated mode <using-on-misc-options>`,
+  (:issue:`16499`).
 
 Significantly Improved Library Modules:
 
-* Single-dispatch generic functions (:pep:`443`)
+* Single-dispatch generic functions in :mod:`functoools` (:pep:`443`)
 * SHA-3 (Keccak) support for :mod:`hashlib`.
 * TLSv1.1 and TLSv1.2 support for :mod:`ssl`.
 * :mod:`multiprocessing` now has option to avoid using :func:`os.fork`
   on Unix (:issue:`8713`).
 
-Security improvements:
+CPython implementation improvements:
 
-* command line option for :ref:`isolated mode <using-on-misc-options>`,
-  :issue:`16499`.
+* :ref:`PEP 442: Safe object finalization <pep-442>`
+* :ref:`PEP 445: Configurable memory allocators <pep-445>`
+* Improve finalization of Python modules to avoid setting their globals
+  to None, in most cases (:issue:`18214`).
+* A more efficient :mod:`marshal` format (:issue:`16475`).
+* "Argument Clinic", an initial step towards providing improved introspection
+  support for builtin and standard library extension types implemented in C
+  (:pep:`436`)
 
 Please read on for a comprehensive list of user-facing changes.
 
+
+PEP 453: Explicit bootstrapping of pip in Python installations
+==============================================================
+
+The new :mod:`ensurepip` module (defined in :pep:`453`) provides a standard
+cross-platform mechanism to boostrap the pip installer into Python
+installations and virtual environments.
+
+.. note::
+
+   Only the first phase of PEP 453 has been implemented at this point.
+   This section will be fleshed out with additional details once those
+   other changes are implemented.
+
+   Refer to :issue:`19347` for the progress on additional steps:
+
+   * ``make install`` and ``make altinstall`` integration
+   * Windows installer integration
+   * Mac OS X installer integration
+   * :mod:`venv` module and :command:`pyvenv` integration
+
+.. seealso::
+
+   :pep:`453` - Explicit bootstrapping of pip in Python installations
+      PEP written by Donald Stufft and Nick Coghlan, implemented by
+      Donald Stufft, Nick Coghlan (and ...).
+
+
 .. _pep-446:
 
 PEP 446: Make newly created file descriptors non-inheritable
 ============================================================
 
-The :pep:`446` makes newly created file descriptors :ref:`non-inheritable
+:pep:`446` makes newly created file descriptors :ref:`non-inheritable
 <fd_inheritance>`.  New functions and methods:
 
 * :func:`os.get_inheritable`, :func:`os.set_inheritable`
 * :func:`os.get_handle_inheritable`, :func:`os.set_handle_inheritable`
 * :meth:`socket.socket.get_inheritable`, :meth:`socket.socket.set_inheritable`
 
-
-.. _pep-445:
-
-PEP 445: Add new APIs to customize Python memory allocators
-===========================================================
-
-The :pep:`445` adds new Application Programming Interfaces (API) to customize
-Python memory allocators.
-
-
-.. _pep-442:
-
-PEP 442: Safe object finalization
-=================================
-
-This PEP removes the current limitations and quirks of object finalization.
-With it, objects with :meth:`__del__` methods, as well as generators
-with :keyword:`finally` clauses, can be finalized when they are part of a
-reference cycle.
-
-As part of this change, module globals are no longer forcibly set to
-:const:`None` during interpreter shutdown, instead relying on the normal
-operation of the cyclic garbage collector.
-
 .. seealso::
 
-   :pep:`442` - Safe object finalization
-      PEP written and implemented by Antoine Pitrou
+   :pep:`446` - Make newly created file descriptors non-inheritable
+      PEP written and implemented by Victor Stinner.
 
 
 Other Language Changes
@@ -168,7 +175,7 @@
 
 Some smaller changes made to the core Python language are:
 
-* Unicode database updated to UCD version 6.2.
+* Unicode database updated to UCD version 6.3.
 
 * :func:`min` and :func:`max` now accept a *default* argument that can be used
   to specify the value they return if the iterable they are evaluating has no
@@ -176,15 +183,67 @@
 
 * Module objects are now :mod:`weakref`'able.
 
+* Module ``__file__`` attributes (and related values) should now always
+  contain absolute paths by default, with the sole exception of
+  ``__main__.__file__`` when a script has been executed directly using
+  a relative path (Contributed by Brett Cannon in :issue:`18416`).
+
 
 New Modules
 ===========
 
+
+asyncio
+-------
+
+The new :mod:`asyncio` module (defined in :pep:`3156`) provides a standard
+pluggable event loop model for Python, providing solid asynchronous IO
+support in the standard library, and making it easier for other event loop
+implementations to interoperate with the standard library and each other.
+
+For Python 3.4, this module is considered a :term:`provisional API`.
+
+.. seealso::
+
+   :pep:`3156` - Asynchronous IO Support Rebooted: the "asyncio" Module
+      PEP written and implementation led by Guido van Rossum.
+
+enum
+----
+
+The new :mod:`enum` module (defined in :pep:`435`) provides a standard
+implementation of enumeration types, allowing other modules (such as
+:mod:`socket`) to provide more informative error messages and better
+debugging support by replacing opaque integer constants with backwards
+compatible enumeration values.
+
+.. seealso::
+
+   :pep:`435` - Adding an Enum type to the Python standard library
+      PEP written by Barry Warsaw, Eli Bendersky and Ethan Furman,
+      implemented by Ethan Furman.
+
+
 selectors
 ---------
 
-The new :mod:`selectors` module allows high-level and efficient I/O
-multiplexing, built upon the :mod:`select` module primitives.
+The new :mod:`selectors` module (created as part of implementing :pep:`3156`)
+allows high-level and efficient I/O multiplexing, built upon the
+:mod:`select` module primitives.
+
+
+statistics
+----------
+
+The new :mod:`statistics` module (defined in :pep:`450`) offers some core
+statistics functionality directly in the standard library. This module
+supports calculation of the mean, median, mode, variance and standard
+deviation of a data series.
+
+.. seealso::
+
+   :pep:`450` - Adding A Statistics Module To The Standard Library
+      PEP written and implemented by Steven D'Aprano
 
 
 Improved Modules
@@ -197,6 +256,25 @@
 plain tuple.  (Contributed by Claudiu Popa in :issue:`17818`.)
 
 
+audioop
+-------
+
+Added support for 24-bit samples (:issue:`12866`).
+
+
+codecs
+------
+
+The :meth:`codecs.encode` and :meth:`codecs.decode` convenience functions are
+now properly documented. These functions have existed in the :mod:`codecs`
+module since ~2004, but were previously only discoverable through runtime
+introspection.
+
+Unlike the convenience methods on :class:`str`, :class:`bytes` and
+:class:`bytearray`, these convenience functions support arbitrary codecs,
+rather than being limited to Unicode text encodings.
+
+
 colorsys
 --------
 
@@ -205,12 +283,32 @@
 results should be less than 1% and may better match results found elsewhere.
 
 
+contextlib
+----------
+
+The new :class:`contextlib.suppress` context manager helps to clarify the
+intent of code that deliberately suppresses exceptions from a single
+statement. (Contributed by Raymond Hettinger in :issue:`15806` and
+Zero Piraeus in :issue:`19266`)
+
+The new :func:`contextlib.redirect_stdout` context manager makes it easier
+for utility scripts to handle inflexible APIs that don't provide any
+options to retrieve their output as a string or direct it to somewhere
+other than :data:`sys.stdout`. In conjunction with :class:`io.StringIO`,
+this context manager is also useful for checking expected output from
+command line utilities. (Contribute by Raymond Hettinger in :issue:`15805`)
+
+The :mod:`contextlib` documentation has also been updated to include a
+:ref:`discussion <single-use-reusable-and-reentrant-cms>` of the
+differences between single use, reusable and reentrant context managers.
+
+
 dis
 ---
 
-The :mod:`dis` module is now built around an :class:`Instruction` class that
-provides details of individual bytecode operations and a
-:func:`get_instructions` iterator that emits the Instruction stream for a
+The :mod:`dis` module is now built around an :class:`~dis.Instruction` class
+that provides details of individual bytecode operations and a
+:func:`~dis.get_instructions` iterator that emits the Instruction stream for a
 given piece of Python code. The various display tools in the :mod:`dis`
 module have been updated to be based on these new components.
 
@@ -254,24 +352,74 @@
 
 (Contributed by R. David Murray in :issue:`18600`.)
 
+A pair of new subclasses of :class:`~email.message.Message` have been added,
+along with a new sub-module, :mod:`~email.contentmanager`.  All documentation
+is currently in the new module, which is being added as part of the new
+:term:`provisional <provisional package>` email API.  These classes provide a
+number of new methods that make extracting content from and inserting content
+into email messages much easier.  See the :mod:`~email.contentmanager`
+documentation for details.
+
+These API additions complete the bulk of the work that was planned as part of
+the email6 project.  The currently provisional API is scheduled to become final
+in Python 3.5 (possibly with a few minor additions in the area of error
+handling).
+
+(Contributed by R. David Murray in :issue:`18891`.)
+
 
 functools
 ---------
 
-New :func:`functools.singledispatch` decorator: see the :pep:`443`.
+The new :func:`~functools.partialmethod` descriptor bring partial argument
+application to descriptors, just as :func:`~functools.partial` provides
+for normal callables. The new descriptor also makes it easier to get
+arbitrary callables (including :func:`~functools.partial` instances)
+to behave like normal instance methods when included in a class definition.
+
+(Contributed by Alon Horev and Nick Coghlan in :issue:`4331`)
+
+The new :func:`~functools.singledispatch` decorator brings support for
+single-dispatch generic functions to the Python standard library. Where
+object oriented programming focuses on grouping multiple operations on a
+common set of data into a class, a generic function focuses on grouping
+multiple implementations of an operation that allows it to work with
+*different* kinds of data.
+
+.. seealso::
+
+   :pep:`443` - Single-dispatch generic functions
+      PEP written and implemented by Łukasz Langa.
+
+
+hashlib
+-------
+
+New :func:`hashlib.pbkdf2_hmac` function.
+
+(Contributed by Christian Heimes in :issue:`18582`)
 
 
 inspect
 -------
 
 
-The inspect module now offers a basic command line interface to quickly
-display source code and other information for modules, classes and
-functions.
+The inspect module now offers a basic :ref:`command line interface
+<inspect-module-cli>` to quickly display source code and other
+information for modules, classes and functions. (Contributed by Claudiu Popa
+and Nick Coghlan in :issue:`18626`)
 
 :func:`~inspect.unwrap` makes it easy to unravel wrapper function chains
 created by :func:`functools.wraps` (and any other API that sets the
-``__wrapped__`` attribute on a wrapper function).
+``__wrapped__`` attribute on a wrapper function). (Contributed by
+Daniel Urban, Aaron Iles and Nick Coghlan in :issue:`13266`)
+
+As part of the implementation of the new :mod:`enum` module, the
+:mod:`inspect` module now has substantially better support for custom
+``__dir__`` methods and dynamic class attributes provided through
+metaclasses (Contributed by Ethan Furman in :issue:`18929` and
+:issue:`19030`)
+
 
 mmap
 ----
@@ -302,6 +450,22 @@
 * :func:`os.get_handle_inheritable`, :func:`os.set_handle_inheritable`
 
 
+pdb
+---
+
+The ``print`` command has been removed from :mod:`pdb`, restoring access to the
+``print`` function.
+
+Rationale: Python2's ``pdb`` did not have a ``print`` command; instead,
+entering ``print`` executed the ``print`` statement.  In Python3 ``print`` was
+mistakenly made an alias for the pdb :pdbcmd:`p` command.  ``p``, however,
+prints the ``repr`` of its argument, not the ``str`` like the Python2 ``print``
+command did.  Worse, the Python3 ``pdb print`` command shadowed the Python3
+``print`` function, making it inaccessible at the ``pdb`` prompt.
+
+(Contributed by Connor Osborn in :issue:`18764`.)
+
+
 poplib
 ------
 
@@ -317,10 +481,25 @@
 pprint
 ------
 
-The :mod::`pprint` module now supports *compact* mode for formatting long
+The :mod:`pprint` module now supports *compact* mode for formatting long
 sequences (:issue:`19132`).
 
 
+pydoc
+-----
+
+While significant changes have not been made to :mod:`pydoc` directly,
+its handling of custom ``__dir__`` methods and various descriptor
+behaviours has been improved substantially by the underlying changes in
+the :mod:`inspect` module.
+
+
+resource
+--------
+
+New :func:`resource.prlimit` function and Linux specific constants.
+(Contributed by Christian Heimes in :issue:`16595` and :issue:`19324`.)
+
 smtplib
 -------
 
@@ -447,6 +626,16 @@
 
 (Contributed by Antoine Pitrou in :issue:`17741`.)
 
+
+zipfile.PyZipfile
+-----------------
+
+Add a filter function to ignore some packages (tests for instance),
+:meth:`~zipfile.PyZipFile.writepy`.
+
+(Contributed by Christian Tismer in :issue:`19274`.)
+
+
 Other improvements
 ==================
 
@@ -480,15 +669,81 @@
   LINEAR_PROBES to be any value.  Set LINEAR_PROBES=0 to turn-off
   linear probing entirely.
 
-  (Contributed by Raymond Hettinger in :issue"`18771`.)
+  (Contributed by Raymond Hettinger in :issue:`18771`.)
+
+* The interpreter starts about 30% faster. A couple of measures lead to the
+  speedup. The interpreter loads fewer modules on startup, e.g. the :mod:`re`,
+  :mod:`collections` and :mod:`locale` modules and their dependencies are no
+  longer imported by default. The marshal module has been improved to load
+  compiled Python code faster.
+
+  (Contributed by Antoine Pitrou, Christian Heimes and Victor Stinner in
+  :issue:`19219`, :issue:`19218`, :issue:`19209`, :issue:`19205` and
+  :issue:`9548`)
 
 
-Build and C API Changes
-=======================
+CPython Implementation Changes
+==============================
+
+
+.. _pep-445:
+
+PEP 445: Customization of CPython memory allocators
+---------------------------------------------------
+
+:pep:`445` adds new C level interfaces to customize memory allocation in
+the CPython interpreter.
+
+.. seealso::
+
+   :pep:`445` - Add new APIs to customize Python memory allocators
+      PEP written and implemented by Victor Stinner.
+
+
+.. _pep-442:
+
+PEP 442: Safe object finalization
+---------------------------------
+
+:pep:`442` removes the current limitations and quirks of object finalization
+in CPython. With it, objects with :meth:`__del__` methods, as well as
+generators with :keyword:`finally` clauses, can be finalized when they are
+part of a reference cycle.
+
+As part of this change, module globals are no longer forcibly set to
+:const:`None` during interpreter shutdown in most cases, instead relying
+on the normal operation of the cyclic garbage collector.
+
+.. seealso::
+
+   :pep:`442` - Safe object finalization
+      PEP written and implemented by Antoine Pitrou.
+
+
+Other build and C API changes
+-----------------------------
 
 Changes to Python's build process and to the C API include:
 
-* None yet.
+* The new :c:func:`Py_SetStandardStreamEncoding` pre-initialization API
+  allows applications embedding the CPython interpreter to reliably force
+  a particular encoding and error handler for the standard streams
+  (Contributed by Bastien Montagne and Nick Coghlan in :issue:`16129`)
+
+* Most Python C APIs that don't mutate string arguments are now correctly
+  marked as accepting ``const char *`` rather than ``char *`` (Contributed
+  by Serhiy Storchaka in :issue:`1772673`).
+
+* "Argument Clinic" (:pep:`436`) is now part of the CPython build process
+  and can be used to simplify the process of defining and maintaining
+  accurate signatures for builtins and standard library extension modules
+  implemented in C.
+
+  .. note::
+     The Argument Clinic PEP is not fully up to date with the state of the
+     implementation. This has been deemed acceptable by the release manager
+     and core development team in this case, as Argument Clinic will not
+     be made available as a public API for third party use in Python 3.4.
 
 
 Deprecated
@@ -516,17 +771,22 @@
 * The :mod:`imp` module is pending deprecation. To keep compatibility with
   Python 2/3 code bases, the module's removal is currently not scheduled.
 
+* The :mod:`formatter` module is pending deprecation and is slated for removal
+  in Python 3.6.
+
 
 Deprecated functions and types of the C API
 -------------------------------------------
 
-* None yet.
+* The ``PyThreadState.tick_counter`` field has been removed: its value was
+  meaningless since Python 3.2 ("new GIL").
 
 
 Deprecated features
 -------------------
 
-* None yet.
+* The site module adding a "site-python" directory to sys.path, if it
+  exists, is deprecated (:issue:`19375`).
 
 
 Porting to Python 3.4
@@ -554,9 +814,9 @@
 * Import now resets relevant attributes (e.g. ``__name__``, ``__loader__``,
   ``__package__``, ``__file__``, ``__cached__``) unconditionally when reloading.
 
-* Frozen packages no longer set ``__path__`` to a list containg the package name
-  but an empty list instead. Determing if a module is a package should be done
-  using ``hasattr(module, '__path__')``.
+* Frozen packages no longer set ``__path__`` to a list containing the package
+  name but an empty list instead. Determing if a module is a package should be
+  done using ``hasattr(module, '__path__')``.
 
 * :c:func:`PyErr_SetImportError` now sets :exc:`TypeError` when its **msg**
   argument is not set. Previously only ``NULL`` was returned with no exception
@@ -577,9 +837,25 @@
   exceptions now.
 
 * :func:`functools.update_wrapper` and :func:`functools.wraps` now correctly
-  set the ``__wrapped__`` attribute even if the wrapped function had a
-  wrapped attribute set. This means ``__wrapped__`` attributes now correctly
-  link a stack of decorated functions rather than every ``__wrapped__``
-  attribute in the chain referring to the innermost function. Introspection
-  libraries that assumed the previous behaviour was intentional can use
-  :func:`inspect.unwrap` to gain equivalent behaviour.
+  set the ``__wrapped__`` attribute to the function being wrapper, even if
+  that function also had its ``__wrapped__`` attribute set. This means
+  ``__wrapped__`` attributes now correctly link a stack of decorated
+  functions rather than every ``__wrapped__`` attribute in the chain
+  referring to the innermost function. Introspection libraries that
+  assumed the previous behaviour was intentional can use
+  :func:`inspect.unwrap` to access the first function in the chain that has
+  no ``__wrapped__`` attribute.
+
+* (C API) The result of the :c:data:`PyOS_ReadlineFunctionPointer` callback must
+  now be a string allocated by :c:func:`PyMem_RawMalloc` or
+  :c:func:`PyMem_RawRealloc`, or *NULL* if an error occurred, instead of a
+  string allocated by :c:func:`PyMem_Malloc` or :c:func:`PyMem_Realloc`.
+
+* :class:`importlib.machinery.PathFinder` now passes on the current working
+  directory to objects in :data:`sys.path_hooks` for the empty string. This
+  results in :data:`sys.path_importer_cache` never containing ``''``, thus
+  iterating through :data:`sys.path_importer_cache` based on :data:`sys.path`
+  will not find all keys. A module's ``__file__`` when imported in the current
+  working directory will also now have an absolute path, including when using
+  ``-m`` with the interpreter (this does not influence when the path to a file
+  is specified on the command-line).
diff --git a/Include/abstract.h b/Include/abstract.h
index a1f0595..d258ad5 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -144,7 +144,7 @@
 
      /* Implemented elsewhere:
 
-     int PyObject_HasAttrString(PyObject *o, char *attr_name);
+     int PyObject_HasAttrString(PyObject *o, const char *attr_name);
 
      Returns 1 if o has the attribute attr_name, and 0 otherwise.
      This is equivalent to the Python expression:
@@ -156,7 +156,7 @@
 
      /* Implemented elsewhere:
 
-     PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name);
+     PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);
 
      Retrieve an attributed named attr_name form object o.
      Returns the attribute value on success, or NULL on failure.
@@ -189,7 +189,7 @@
 
      /* Implemented elsewhere:
 
-     int PyObject_SetAttrString(PyObject *o, char *attr_name, PyObject *v);
+     int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);
 
      Set the value of the attribute named attr_name, for object o,
      to the value, v. Returns -1 on failure.  This is
@@ -209,7 +209,7 @@
 
      /* implemented as a macro:
 
-     int PyObject_DelAttrString(PyObject *o, char *attr_name);
+     int PyObject_DelAttrString(PyObject *o, const char *attr_name);
 
      Delete attribute named attr_name, for object o. Returns
      -1 on failure.  This is the equivalent of the Python
@@ -434,7 +434,7 @@
      statement: o[key]=v.
        */
 
-     PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, char *key);
+     PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);
 
        /*
      Remove the mapping for object, key, from the object *o.
@@ -1156,7 +1156,7 @@
 
      /* implemented as a macro:
 
-     int PyMapping_DelItemString(PyObject *o, char *key);
+     int PyMapping_DelItemString(PyObject *o, const char *key);
 
      Remove the mapping for object, key, from the object *o.
      Returns -1 on failure.  This is equivalent to
@@ -1174,7 +1174,7 @@
        */
 #define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
 
-     PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, char *key);
+     PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
 
        /*
      On success, return 1 if the mapping object has the key, key,
@@ -1218,7 +1218,8 @@
 
        */
 
-     PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o, char *key);
+     PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
+                                                    const char *key);
 
        /*
      Return element of o corresponding to the object, key, or NULL
@@ -1226,7 +1227,7 @@
      o[key].
        */
 
-     PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, char *key,
+     PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
                                             PyObject *value);
 
        /*
diff --git a/Include/asdl.h b/Include/asdl.h
index 0789ad8..7c3b6d1 100644
--- a/Include/asdl.h
+++ b/Include/asdl.h
@@ -25,8 +25,8 @@
     int elements[1];
 } asdl_int_seq;
 
-asdl_seq *asdl_seq_new(Py_ssize_t size, PyArena *arena);
-asdl_int_seq *asdl_int_seq_new(Py_ssize_t size, PyArena *arena);
+asdl_seq *_Py_asdl_seq_new(Py_ssize_t size, PyArena *arena);
+asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena);
 
 #define asdl_seq_GET(S, I) (S)->elements[(I)]
 #define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size)
diff --git a/Include/bytearrayobject.h b/Include/bytearrayobject.h
index eccd44c..a757b88 100644
--- a/Include/bytearrayobject.h
+++ b/Include/bytearrayobject.h
@@ -22,10 +22,11 @@
 #ifndef Py_LIMITED_API
 typedef struct {
     PyObject_VAR_HEAD
+    Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */
+    char *ob_bytes;      /* Physical backing buffer */
+    char *ob_start;      /* Logical start inside ob_bytes */
     /* XXX(nnorwitz): should ob_exports be Py_ssize_t? */
-    int ob_exports; /* how many buffer exports */
-    Py_ssize_t ob_alloc; /* How many bytes allocated */
-    char *ob_bytes;
+    int ob_exports;      /* How many buffer exports */
 } PyByteArrayObject;
 #endif
 
@@ -49,8 +50,8 @@
 #ifndef Py_LIMITED_API
 #define PyByteArray_AS_STRING(self) \
     (assert(PyByteArray_Check(self)), \
-     Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_bytes : _PyByteArray_empty_string)
-#define PyByteArray_GET_SIZE(self)  (assert(PyByteArray_Check(self)),Py_SIZE(self))
+     Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string)
+#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self))
 
 PyAPI_DATA(char) _PyByteArray_empty_string[];
 #endif
diff --git a/Include/dictobject.h b/Include/dictobject.h
index 16bd1d6..2859669 100644
--- a/Include/dictobject.h
+++ b/Include/dictobject.h
@@ -111,9 +111,11 @@
 PyAPI_FUNC(int) PyDict_DelItemString(PyObject *dp, const char *key);
 
 #ifndef Py_LIMITED_API
+PyAPI_FUNC(int) _PyDict_DelItemId(PyObject *mp, struct _Py_Identifier *key);
+PyAPI_FUNC(void) _PyDict_DebugMallocStats(FILE *out);
+
 int _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, PyObject *name, PyObject *value);
 PyObject *_PyDict_LoadGlobal(PyDictObject *, PyDictObject *, PyObject *);
-PyAPI_FUNC(void) _PyDict_DebugMallocStats(FILE *out);
 #endif
 
 #ifdef __cplusplus
diff --git a/Include/fileobject.h b/Include/fileobject.h
index a99c94d..0939744 100644
--- a/Include/fileobject.h
+++ b/Include/fileobject.h
@@ -8,8 +8,9 @@
 
 #define PY_STDIOTEXTMODE "b"
 
-PyAPI_FUNC(PyObject *) PyFile_FromFd(int, char *, char *, int, char *, char *,
-				     char *, int);
+PyAPI_FUNC(PyObject *) PyFile_FromFd(int, const char *, const char *, int,
+                                     const char *, const char *,
+                                     const char *, int);
 PyAPI_FUNC(PyObject *) PyFile_GetLine(PyObject *, int);
 PyAPI_FUNC(int) PyFile_WriteObject(PyObject *, PyObject *, int);
 PyAPI_FUNC(int) PyFile_WriteString(const char *, PyObject *);
diff --git a/Include/frameobject.h b/Include/frameobject.h
index 18419bf..b41bea6 100644
--- a/Include/frameobject.h
+++ b/Include/frameobject.h
@@ -78,6 +78,8 @@
 /* Conversions between "fast locals" and locals in dictionary */
 
 PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int);
+
+PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f);
 PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *);
 
 PyAPI_FUNC(int) PyFrame_ClearFreeList(void);
diff --git a/Include/grammar.h b/Include/grammar.h
index 862f6a8..ba7d19d 100644
--- a/Include/grammar.h
+++ b/Include/grammar.h
@@ -69,13 +69,13 @@
 /* FUNCTIONS */
 
 grammar *newgrammar(int start);
-dfa *adddfa(grammar *g, int type, char *name);
+dfa *adddfa(grammar *g, int type, const char *name);
 int addstate(dfa *d);
 void addarc(dfa *d, int from, int to, int lbl);
 dfa *PyGrammar_FindDFA(grammar *g, int type);
 
-int addlabel(labellist *ll, int type, char *str);
-int findlabel(labellist *ll, int type, char *str);
+int addlabel(labellist *ll, int type, const char *str);
+int findlabel(labellist *ll, int type, const char *str);
 const char *PyGrammar_LabelRepr(label *lb);
 void translatelabels(grammar *g);
 
diff --git a/Include/import.h b/Include/import.h
index 90049e0..4a515d5 100644
--- a/Include/import.h
+++ b/Include/import.h
@@ -13,19 +13,19 @@
 PyAPI_FUNC(long) PyImport_GetMagicNumber(void);
 PyAPI_FUNC(const char *) PyImport_GetMagicTag(void);
 PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule(
-    char *name,                 /* UTF-8 encoded string */
+    const char *name,           /* UTF-8 encoded string */
     PyObject *co
     );
 PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleEx(
-    char *name,                 /* UTF-8 encoded string */
+    const char *name,           /* UTF-8 encoded string */
     PyObject *co,
-    char *pathname              /* decoded from the filesystem encoding */
+    const char *pathname        /* decoded from the filesystem encoding */
     );
 PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleWithPathnames(
-    char *name,                 /* UTF-8 encoded string */
+    const char *name,           /* UTF-8 encoded string */
     PyObject *co,
-    char *pathname,             /* decoded from the filesystem encoding */
-    char *cpathname             /* decoded from the filesystem encoding */
+    const char *pathname,       /* decoded from the filesystem encoding */
+    const char *cpathname       /* decoded from the filesystem encoding */
     );
 PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleObject(
     PyObject *name,
@@ -72,7 +72,7 @@
     PyObject *name
     );
 PyAPI_FUNC(int) PyImport_ImportFrozenModule(
-    char *name                  /* UTF-8 encoded string */
+    const char *name            /* UTF-8 encoded string */
     );
 
 #ifndef Py_LIMITED_API
@@ -92,12 +92,12 @@
 PyAPI_FUNC(PyObject *)_PyImport_FindExtensionObject(PyObject *, PyObject *);
 PyAPI_FUNC(int)_PyImport_FixupBuiltin(
     PyObject *mod,
-    char *name                  /* UTF-8 encoded string */
+    const char *name            /* UTF-8 encoded string */
     );
 PyAPI_FUNC(int)_PyImport_FixupExtensionObject(PyObject*, PyObject *, PyObject *);
 
 struct _inittab {
-    char *name;                 /* ASCII encoded string */
+    const char *name;           /* ASCII encoded string */
     PyObject* (*initfunc)(void);
 };
 PyAPI_DATA(struct _inittab *) PyImport_Inittab;
diff --git a/Include/longobject.h b/Include/longobject.h
index e62d954..7c3f6d0 100644
--- a/Include/longobject.h
+++ b/Include/longobject.h
@@ -93,7 +93,7 @@
 PyAPI_FUNC(PY_LONG_LONG) PyLong_AsLongLongAndOverflow(PyObject *, int *);
 #endif /* HAVE_LONG_LONG */
 
-PyAPI_FUNC(PyObject *) PyLong_FromString(char *, char **, int);
+PyAPI_FUNC(PyObject *) PyLong_FromString(const char *, char **, int);
 #ifndef Py_LIMITED_API
 PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int);
 PyAPI_FUNC(PyObject *) PyLong_FromUnicodeObject(PyObject *u, int base);
@@ -189,8 +189,8 @@
 /* These aren't really part of the int object, but they're handy. The
    functions are in Python/mystrtoul.c.
  */
-PyAPI_FUNC(unsigned long) PyOS_strtoul(char *, char **, int);
-PyAPI_FUNC(long) PyOS_strtol(char *, char **, int);
+PyAPI_FUNC(unsigned long) PyOS_strtoul(const char *, char **, int);
+PyAPI_FUNC(long) PyOS_strtol(const char *, char **, int);
 
 #ifdef __cplusplus
 }
diff --git a/Include/marshal.h b/Include/marshal.h
index 0c69655..09d9337 100644
--- a/Include/marshal.h
+++ b/Include/marshal.h
@@ -7,7 +7,7 @@
 extern "C" {
 #endif
 
-#define Py_MARSHAL_VERSION 3
+#define Py_MARSHAL_VERSION 4
 
 PyAPI_FUNC(void) PyMarshal_WriteLongToFile(long, FILE *, int);
 PyAPI_FUNC(void) PyMarshal_WriteObjectToFile(PyObject *, FILE *, int);
@@ -19,7 +19,8 @@
 PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromFile(FILE *);
 PyAPI_FUNC(PyObject *) PyMarshal_ReadLastObjectFromFile(FILE *);
 #endif
-PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(char *, Py_ssize_t);
+PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(const char *,
+                                                      Py_ssize_t);
 
 #ifdef __cplusplus
 }
diff --git a/Include/object.h b/Include/object.h
index ef45838..a6130fe 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -143,7 +143,8 @@
     PyObject *object;
 } _Py_Identifier;
 
-#define _Py_static_string(varname, value)  static _Py_Identifier varname = { 0, value, 0 }
+#define _Py_static_string_init(value) { 0, value, 0 }
+#define _Py_static_string(varname, value)  static _Py_Identifier varname = _Py_static_string_init(value)
 #define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname)
 
 /*
@@ -829,7 +830,7 @@
         PyObject *_py_xincref_tmp = (PyObject *)(op); \
         if (_py_xincref_tmp != NULL)                  \
             Py_INCREF(_py_xincref_tmp);               \
-    } while (0)                                    
+    } while (0)
 
 #define Py_XDECREF(op)                                \
     do {                                              \
diff --git a/Include/parsetok.h b/Include/parsetok.h
index 68b59bc..2acb854 100644
--- a/Include/parsetok.h
+++ b/Include/parsetok.h
@@ -38,7 +38,8 @@
 PyAPI_FUNC(node *) PyParser_ParseString(const char *, grammar *, int,
                                               perrdetail *);
 PyAPI_FUNC(node *) PyParser_ParseFile (FILE *, const char *, grammar *, int,
-                                             char *, char *, perrdetail *);
+                                             const char *, const char *,
+                                             perrdetail *);
 
 PyAPI_FUNC(node *) PyParser_ParseStringFlags(const char *, grammar *, int,
                                               perrdetail *, int);
@@ -48,8 +49,8 @@
     const char *enc,
     grammar *g,
     int start,
-    char *ps1,
-    char *ps2,
+    const char *ps1,
+    const char *ps2,
     perrdetail *err_ret,
     int flags);
 PyAPI_FUNC(node *) PyParser_ParseFileFlagsEx(
@@ -58,8 +59,8 @@
     const char *enc,
     grammar *g,
     int start,
-    char *ps1,
-    char *ps2,
+    const char *ps1,
+    const char *ps2,
     perrdetail *err_ret,
     int *flags);
 PyAPI_FUNC(node *) PyParser_ParseFileObject(
@@ -68,8 +69,8 @@
     const char *enc,
     grammar *g,
     int start,
-    char *ps1,
-    char *ps2,
+    const char *ps1,
+    const char *ps2,
     perrdetail *err_ret,
     int *flags);
 
diff --git a/Include/patchlevel.h b/Include/patchlevel.h
index b38c72c..7880d20 100644
--- a/Include/patchlevel.h
+++ b/Include/patchlevel.h
@@ -20,10 +20,10 @@
 #define PY_MINOR_VERSION	4
 #define PY_MICRO_VERSION	0
 #define PY_RELEASE_LEVEL	PY_RELEASE_LEVEL_ALPHA
-#define PY_RELEASE_SERIAL	3
+#define PY_RELEASE_SERIAL	4
 
 /* Version as a string */
-#define PY_VERSION      	"3.4.0a3+"
+#define PY_VERSION      	"3.4.0a4+"
 /*--end constants--*/
 
 /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2.
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
index f89d1ad..224567b 100644
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -101,7 +101,7 @@
 #if defined(Py_DEBUG) || defined(Py_LIMITED_API)
 #define _PyErr_OCCURRED() PyErr_Occurred()
 #else
-#define _PyErr_OCCURRED() (_PyThreadState_Current->curexc_type)
+#define _PyErr_OCCURRED() (PyThreadState_GET()->curexc_type)
 #endif
 
 /* Error testing and normalization */
diff --git a/Include/pystate.h b/Include/pystate.h
index ddc6892..06af808 100644
--- a/Include/pystate.h
+++ b/Include/pystate.h
@@ -100,16 +100,6 @@
 
     PyObject *dict;  /* Stores per-thread state */
 
-    /* XXX doesn't mean anything anymore (the comment below is obsolete)
-       => deprecate or remove? */
-    /* tick_counter is incremented whenever the check_interval ticker
-     * reaches zero. The purpose is to give a useful measure of the number
-     * of interpreted bytecode instructions in a given thread.  This
-     * extremely lightweight statistic collector may be of interest to
-     * profilers (like psyco.jit()), although nothing in the core uses it.
-     */
-    int tick_counter;
-
     int gilstate_counter;
 
     PyObject *async_exc; /* Asynchronous exception to raise */
diff --git a/Include/pythonrun.h b/Include/pythonrun.h
index 8fdb5b5..c364947 100644
--- a/Include/pythonrun.h
+++ b/Include/pythonrun.h
@@ -28,6 +28,14 @@
 PyAPI_FUNC(void) Py_SetPythonHome(wchar_t *);
 PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void);
 
+#ifndef Py_LIMITED_API
+/* Only used by applications that embed the interpreter and need to
+ * override the standard encoding determination mechanism
+ */
+PyAPI_FUNC(int) Py_SetStandardStreamEncoding(const char *encoding,
+                                             const char *errors);
+#endif
+
 PyAPI_FUNC(void) Py_Initialize(void);
 PyAPI_FUNC(void) Py_InitializeEx(int);
 #ifndef Py_LIMITED_API
@@ -55,6 +63,10 @@
     FILE *fp,
     const char *filename,       /* decoded from the filesystem encoding */
     PyCompilerFlags *flags);
+PyAPI_FUNC(int) PyRun_InteractiveOneObject(
+    FILE *fp,
+    PyObject *filename,
+    PyCompilerFlags *flags);
 PyAPI_FUNC(int) PyRun_InteractiveLoopFlags(
     FILE *fp,
     const char *filename,       /* decoded from the filesystem encoding */
@@ -253,10 +265,10 @@
 
 /* Stuff with no proper home (yet) */
 #ifndef Py_LIMITED_API
-PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, char *);
+PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, const char *);
 #endif
 PyAPI_DATA(int) (*PyOS_InputHook)(void);
-PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, char *);
+PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *);
 #ifndef Py_LIMITED_API
 PyAPI_DATA(PyThreadState*) _PyOS_ReadlineTState;
 #endif
diff --git a/Include/sysmodule.h b/Include/sysmodule.h
index 0cabf6f..925c2a3 100644
--- a/Include/sysmodule.h
+++ b/Include/sysmodule.h
@@ -8,7 +8,10 @@
 #endif
 
 PyAPI_FUNC(PyObject *) PySys_GetObject(const char *);
+PyAPI_FUNC(PyObject *) _PySys_GetObjectId(_Py_Identifier *key);
 PyAPI_FUNC(int) PySys_SetObject(const char *, PyObject *);
+PyAPI_FUNC(int) _PySys_SetObjectId(_Py_Identifier *key, PyObject *);
+
 PyAPI_FUNC(void) PySys_SetArgv(int, wchar_t **);
 PyAPI_FUNC(void) PySys_SetArgvEx(int, wchar_t **, int);
 PyAPI_FUNC(void) PySys_SetPath(const wchar_t *);
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index 6d830c0..20ce41d 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -1996,6 +1996,11 @@
     PyObject *right             /* Right string */
     );
 
+PyAPI_FUNC(int) _PyUnicode_CompareWithId(
+    PyObject *left,             /* Left string */
+    _Py_Identifier *right       /* Right identifier */
+    );
+
 PyAPI_FUNC(int) PyUnicode_CompareWithASCIIString(
     PyObject *left,
     const char *right           /* ASCII-encoded string */
diff --git a/Include/weakrefobject.h b/Include/weakrefobject.h
index 537e7eb..1705156 100644
--- a/Include/weakrefobject.h
+++ b/Include/weakrefobject.h
@@ -51,9 +51,6 @@
         ((Py_TYPE(op) == &_PyWeakref_ProxyType) || \
          (Py_TYPE(op) == &_PyWeakref_CallableProxyType))
 
-/* This macro calls PyWeakref_CheckRef() last since that can involve a
-   function call; this makes it more likely that the function call
-   will be avoided. */
 #define PyWeakref_Check(op) \
         (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
 
diff --git a/Lib/_bootlocale.py b/Lib/_bootlocale.py
new file mode 100644
index 0000000..4bccac1
--- /dev/null
+++ b/Lib/_bootlocale.py
@@ -0,0 +1,34 @@
+"""A minimal subset of the locale module used at interpreter startup
+(imported by the _io module), in order to reduce startup time.
+
+Don't import directly from third-party code; use the `locale` module instead!
+"""
+
+import sys
+import _locale
+
+if sys.platform.startswith("win"):
+    def getpreferredencoding(do_setlocale=True):
+        return _locale._getdefaultlocale()[1]
+else:
+    try:
+        _locale.CODESET
+    except AttributeError:
+        def getpreferredencoding(do_setlocale=True):
+            # This path for legacy systems needs the more complex
+            # getdefaultlocale() function, import the full locale module.
+            import locale
+            return locale.getpreferredencoding(do_setlocale)
+    else:
+        def getpreferredencoding(do_setlocale=True):
+            assert not do_setlocale
+            result = _locale.nl_langinfo(_locale.CODESET)
+            if not result and sys.platform == 'darwin':
+                # nl_langinfo can return an empty string
+                # when the setting has an invalid value.
+                # Default to UTF-8 in that case because
+                # UTF-8 is the default charset on OSX and
+                # returning nothing will crash the
+                # interpreter.
+                result = 'UTF-8'
+            return result
diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py
new file mode 100644
index 0000000..faa1ff2
--- /dev/null
+++ b/Lib/_collections_abc.py
@@ -0,0 +1,734 @@
+# Copyright 2007 Google, Inc. All Rights Reserved.
+# Licensed to PSF under a Contributor Agreement.
+
+"""Abstract Base Classes (ABCs) for collections, according to PEP 3119.
+
+Unit tests are in test_collections.
+"""
+
+from abc import ABCMeta, abstractmethod
+import sys
+
+__all__ = ["Hashable", "Iterable", "Iterator",
+           "Sized", "Container", "Callable",
+           "Set", "MutableSet",
+           "Mapping", "MutableMapping",
+           "MappingView", "KeysView", "ItemsView", "ValuesView",
+           "Sequence", "MutableSequence",
+           "ByteString",
+           ]
+
+# This module has been renamed from collections.abc to _collections_abc to
+# speed up interpreter startup. Some of the types such as MutableMapping are
+# required early but collections module imports a lot of other modules.
+# See issue #19218
+__name__ = "collections.abc"
+
+# Private list of types that we want to register with the various ABCs
+# so that they will pass tests like:
+#       it = iter(somebytearray)
+#       assert isinstance(it, Iterable)
+# Note:  in other implementations, these types many not be distinct
+# and they make have their own implementation specific types that
+# are not included on this list.
+bytes_iterator = type(iter(b''))
+bytearray_iterator = type(iter(bytearray()))
+#callable_iterator = ???
+dict_keyiterator = type(iter({}.keys()))
+dict_valueiterator = type(iter({}.values()))
+dict_itemiterator = type(iter({}.items()))
+list_iterator = type(iter([]))
+list_reverseiterator = type(iter(reversed([])))
+range_iterator = type(iter(range(0)))
+set_iterator = type(iter(set()))
+str_iterator = type(iter(""))
+tuple_iterator = type(iter(()))
+zip_iterator = type(iter(zip()))
+## views ##
+dict_keys = type({}.keys())
+dict_values = type({}.values())
+dict_items = type({}.items())
+## misc ##
+mappingproxy = type(type.__dict__)
+
+
+### ONE-TRICK PONIES ###
+
+class Hashable(metaclass=ABCMeta):
+
+    __slots__ = ()
+
+    @abstractmethod
+    def __hash__(self):
+        return 0
+
+    @classmethod
+    def __subclasshook__(cls, C):
+        if cls is Hashable:
+            for B in C.__mro__:
+                if "__hash__" in B.__dict__:
+                    if B.__dict__["__hash__"]:
+                        return True
+                    break
+        return NotImplemented
+
+
+class Iterable(metaclass=ABCMeta):
+
+    __slots__ = ()
+
+    @abstractmethod
+    def __iter__(self):
+        while False:
+            yield None
+
+    @classmethod
+    def __subclasshook__(cls, C):
+        if cls is Iterable:
+            if any("__iter__" in B.__dict__ for B in C.__mro__):
+                return True
+        return NotImplemented
+
+
+class Iterator(Iterable):
+
+    __slots__ = ()
+
+    @abstractmethod
+    def __next__(self):
+        'Return the next item from the iterator. When exhausted, raise StopIteration'
+        raise StopIteration
+
+    def __iter__(self):
+        return self
+
+    @classmethod
+    def __subclasshook__(cls, C):
+        if cls is Iterator:
+            if (any("__next__" in B.__dict__ for B in C.__mro__) and
+                any("__iter__" in B.__dict__ for B in C.__mro__)):
+                return True
+        return NotImplemented
+
+Iterator.register(bytes_iterator)
+Iterator.register(bytearray_iterator)
+#Iterator.register(callable_iterator)
+Iterator.register(dict_keyiterator)
+Iterator.register(dict_valueiterator)
+Iterator.register(dict_itemiterator)
+Iterator.register(list_iterator)
+Iterator.register(list_reverseiterator)
+Iterator.register(range_iterator)
+Iterator.register(set_iterator)
+Iterator.register(str_iterator)
+Iterator.register(tuple_iterator)
+Iterator.register(zip_iterator)
+
+class Sized(metaclass=ABCMeta):
+
+    __slots__ = ()
+
+    @abstractmethod
+    def __len__(self):
+        return 0
+
+    @classmethod
+    def __subclasshook__(cls, C):
+        if cls is Sized:
+            if any("__len__" in B.__dict__ for B in C.__mro__):
+                return True
+        return NotImplemented
+
+
+class Container(metaclass=ABCMeta):
+
+    __slots__ = ()
+
+    @abstractmethod
+    def __contains__(self, x):
+        return False
+
+    @classmethod
+    def __subclasshook__(cls, C):
+        if cls is Container:
+            if any("__contains__" in B.__dict__ for B in C.__mro__):
+                return True
+        return NotImplemented
+
+
+class Callable(metaclass=ABCMeta):
+
+    __slots__ = ()
+
+    @abstractmethod
+    def __call__(self, *args, **kwds):
+        return False
+
+    @classmethod
+    def __subclasshook__(cls, C):
+        if cls is Callable:
+            if any("__call__" in B.__dict__ for B in C.__mro__):
+                return True
+        return NotImplemented
+
+
+### SETS ###
+
+
+class Set(Sized, Iterable, Container):
+
+    """A set is a finite, iterable container.
+
+    This class provides concrete generic implementations of all
+    methods except for __contains__, __iter__ and __len__.
+
+    To override the comparisons (presumably for speed, as the
+    semantics are fixed), all you have to do is redefine __le__ and
+    then the other operations will automatically follow suit.
+    """
+
+    __slots__ = ()
+
+    def __le__(self, other):
+        if not isinstance(other, Set):
+            return NotImplemented
+        if len(self) > len(other):
+            return False
+        for elem in self:
+            if elem not in other:
+                return False
+        return True
+
+    def __lt__(self, other):
+        if not isinstance(other, Set):
+            return NotImplemented
+        return len(self) < len(other) and self.__le__(other)
+
+    def __gt__(self, other):
+        if not isinstance(other, Set):
+            return NotImplemented
+        return other.__lt__(self)
+
+    def __ge__(self, other):
+        if not isinstance(other, Set):
+            return NotImplemented
+        return other.__le__(self)
+
+    def __eq__(self, other):
+        if not isinstance(other, Set):
+            return NotImplemented
+        return len(self) == len(other) and self.__le__(other)
+
+    def __ne__(self, other):
+        return not (self == other)
+
+    @classmethod
+    def _from_iterable(cls, it):
+        '''Construct an instance of the class from any iterable input.
+
+        Must override this method if the class constructor signature
+        does not accept an iterable for an input.
+        '''
+        return cls(it)
+
+    def __and__(self, other):
+        if not isinstance(other, Iterable):
+            return NotImplemented
+        return self._from_iterable(value for value in other if value in self)
+
+    def isdisjoint(self, other):
+        'Return True if two sets have a null intersection.'
+        for value in other:
+            if value in self:
+                return False
+        return True
+
+    def __or__(self, other):
+        if not isinstance(other, Iterable):
+            return NotImplemented
+        chain = (e for s in (self, other) for e in s)
+        return self._from_iterable(chain)
+
+    def __sub__(self, other):
+        if not isinstance(other, Set):
+            if not isinstance(other, Iterable):
+                return NotImplemented
+            other = self._from_iterable(other)
+        return self._from_iterable(value for value in self
+                                   if value not in other)
+
+    def __xor__(self, other):
+        if not isinstance(other, Set):
+            if not isinstance(other, Iterable):
+                return NotImplemented
+            other = self._from_iterable(other)
+        return (self - other) | (other - self)
+
+    def _hash(self):
+        """Compute the hash value of a set.
+
+        Note that we don't define __hash__: not all sets are hashable.
+        But if you define a hashable set type, its __hash__ should
+        call this function.
+
+        This must be compatible __eq__.
+
+        All sets ought to compare equal if they contain the same
+        elements, regardless of how they are implemented, and
+        regardless of the order of the elements; so there's not much
+        freedom for __eq__ or __hash__.  We match the algorithm used
+        by the built-in frozenset type.
+        """
+        MAX = sys.maxsize
+        MASK = 2 * MAX + 1
+        n = len(self)
+        h = 1927868237 * (n + 1)
+        h &= MASK
+        for x in self:
+            hx = hash(x)
+            h ^= (hx ^ (hx << 16) ^ 89869747)  * 3644798167
+            h &= MASK
+        h = h * 69069 + 907133923
+        h &= MASK
+        if h > MAX:
+            h -= MASK + 1
+        if h == -1:
+            h = 590923713
+        return h
+
+Set.register(frozenset)
+
+
+class MutableSet(Set):
+    """A mutable set is a finite, iterable container.
+
+    This class provides concrete generic implementations of all
+    methods except for __contains__, __iter__, __len__,
+    add(), and discard().
+
+    To override the comparisons (presumably for speed, as the
+    semantics are fixed), all you have to do is redefine __le__ and
+    then the other operations will automatically follow suit.
+    """
+
+    __slots__ = ()
+
+    @abstractmethod
+    def add(self, value):
+        """Add an element."""
+        raise NotImplementedError
+
+    @abstractmethod
+    def discard(self, value):
+        """Remove an element.  Do not raise an exception if absent."""
+        raise NotImplementedError
+
+    def remove(self, value):
+        """Remove an element. If not a member, raise a KeyError."""
+        if value not in self:
+            raise KeyError(value)
+        self.discard(value)
+
+    def pop(self):
+        """Return the popped value.  Raise KeyError if empty."""
+        it = iter(self)
+        try:
+            value = next(it)
+        except StopIteration:
+            raise KeyError
+        self.discard(value)
+        return value
+
+    def clear(self):
+        """This is slow (creates N new iterators!) but effective."""
+        try:
+            while True:
+                self.pop()
+        except KeyError:
+            pass
+
+    def __ior__(self, it):
+        for value in it:
+            self.add(value)
+        return self
+
+    def __iand__(self, it):
+        for value in (self - it):
+            self.discard(value)
+        return self
+
+    def __ixor__(self, it):
+        if it is self:
+            self.clear()
+        else:
+            if not isinstance(it, Set):
+                it = self._from_iterable(it)
+            for value in it:
+                if value in self:
+                    self.discard(value)
+                else:
+                    self.add(value)
+        return self
+
+    def __isub__(self, it):
+        if it is self:
+            self.clear()
+        else:
+            for value in it:
+                self.discard(value)
+        return self
+
+MutableSet.register(set)
+
+
+### MAPPINGS ###
+
+
+class Mapping(Sized, Iterable, Container):
+
+    __slots__ = ()
+
+    """A Mapping is a generic container for associating key/value
+    pairs.
+
+    This class provides concrete generic implementations of all
+    methods except for __getitem__, __iter__, and __len__.
+
+    """
+
+    @abstractmethod
+    def __getitem__(self, key):
+        raise KeyError
+
+    def get(self, key, default=None):
+        'D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.'
+        try:
+            return self[key]
+        except KeyError:
+            return default
+
+    def __contains__(self, key):
+        try:
+            self[key]
+        except KeyError:
+            return False
+        else:
+            return True
+
+    def keys(self):
+        "D.keys() -> a set-like object providing a view on D's keys"
+        return KeysView(self)
+
+    def items(self):
+        "D.items() -> a set-like object providing a view on D's items"
+        return ItemsView(self)
+
+    def values(self):
+        "D.values() -> an object providing a view on D's values"
+        return ValuesView(self)
+
+    def __eq__(self, other):
+        if not isinstance(other, Mapping):
+            return NotImplemented
+        return dict(self.items()) == dict(other.items())
+
+    def __ne__(self, other):
+        return not (self == other)
+
+Mapping.register(mappingproxy)
+
+
+class MappingView(Sized):
+
+    def __init__(self, mapping):
+        self._mapping = mapping
+
+    def __len__(self):
+        return len(self._mapping)
+
+    def __repr__(self):
+        return '{0.__class__.__name__}({0._mapping!r})'.format(self)
+
+
+class KeysView(MappingView, Set):
+
+    @classmethod
+    def _from_iterable(self, it):
+        return set(it)
+
+    def __contains__(self, key):
+        return key in self._mapping
+
+    def __iter__(self):
+        yield from self._mapping
+
+KeysView.register(dict_keys)
+
+
+class ItemsView(MappingView, Set):
+
+    @classmethod
+    def _from_iterable(self, it):
+        return set(it)
+
+    def __contains__(self, item):
+        key, value = item
+        try:
+            v = self._mapping[key]
+        except KeyError:
+            return False
+        else:
+            return v == value
+
+    def __iter__(self):
+        for key in self._mapping:
+            yield (key, self._mapping[key])
+
+ItemsView.register(dict_items)
+
+
+class ValuesView(MappingView):
+
+    def __contains__(self, value):
+        for key in self._mapping:
+            if value == self._mapping[key]:
+                return True
+        return False
+
+    def __iter__(self):
+        for key in self._mapping:
+            yield self._mapping[key]
+
+ValuesView.register(dict_values)
+
+
+class MutableMapping(Mapping):
+
+    __slots__ = ()
+
+    """A MutableMapping is a generic container for associating
+    key/value pairs.
+
+    This class provides concrete generic implementations of all
+    methods except for __getitem__, __setitem__, __delitem__,
+    __iter__, and __len__.
+
+    """
+
+    @abstractmethod
+    def __setitem__(self, key, value):
+        raise KeyError
+
+    @abstractmethod
+    def __delitem__(self, key):
+        raise KeyError
+
+    __marker = object()
+
+    def pop(self, key, default=__marker):
+        '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
+          If key is not found, d is returned if given, otherwise KeyError is raised.
+        '''
+        try:
+            value = self[key]
+        except KeyError:
+            if default is self.__marker:
+                raise
+            return default
+        else:
+            del self[key]
+            return value
+
+    def popitem(self):
+        '''D.popitem() -> (k, v), remove and return some (key, value) pair
+           as a 2-tuple; but raise KeyError if D is empty.
+        '''
+        try:
+            key = next(iter(self))
+        except StopIteration:
+            raise KeyError
+        value = self[key]
+        del self[key]
+        return key, value
+
+    def clear(self):
+        'D.clear() -> None.  Remove all items from D.'
+        try:
+            while True:
+                self.popitem()
+        except KeyError:
+            pass
+
+    def update(*args, **kwds):
+        ''' D.update([E, ]**F) -> None.  Update D from mapping/iterable E and F.
+            If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
+            If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
+            In either case, this is followed by: for k, v in F.items(): D[k] = v
+        '''
+        if len(args) > 2:
+            raise TypeError("update() takes at most 2 positional "
+                            "arguments ({} given)".format(len(args)))
+        elif not args:
+            raise TypeError("update() takes at least 1 argument (0 given)")
+        self = args[0]
+        other = args[1] if len(args) >= 2 else ()
+
+        if isinstance(other, Mapping):
+            for key in other:
+                self[key] = other[key]
+        elif hasattr(other, "keys"):
+            for key in other.keys():
+                self[key] = other[key]
+        else:
+            for key, value in other:
+                self[key] = value
+        for key, value in kwds.items():
+            self[key] = value
+
+    def setdefault(self, key, default=None):
+        'D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D'
+        try:
+            return self[key]
+        except KeyError:
+            self[key] = default
+        return default
+
+MutableMapping.register(dict)
+
+
+### SEQUENCES ###
+
+
+class Sequence(Sized, Iterable, Container):
+
+    """All the operations on a read-only sequence.
+
+    Concrete subclasses must override __new__ or __init__,
+    __getitem__, and __len__.
+    """
+
+    __slots__ = ()
+
+    @abstractmethod
+    def __getitem__(self, index):
+        raise IndexError
+
+    def __iter__(self):
+        i = 0
+        try:
+            while True:
+                v = self[i]
+                yield v
+                i += 1
+        except IndexError:
+            return
+
+    def __contains__(self, value):
+        for v in self:
+            if v == value:
+                return True
+        return False
+
+    def __reversed__(self):
+        for i in reversed(range(len(self))):
+            yield self[i]
+
+    def index(self, value):
+        '''S.index(value) -> integer -- return first index of value.
+           Raises ValueError if the value is not present.
+        '''
+        for i, v in enumerate(self):
+            if v == value:
+                return i
+        raise ValueError
+
+    def count(self, value):
+        'S.count(value) -> integer -- return number of occurrences of value'
+        return sum(1 for v in self if v == value)
+
+Sequence.register(tuple)
+Sequence.register(str)
+Sequence.register(range)
+Sequence.register(memoryview)
+
+
+class ByteString(Sequence):
+
+    """This unifies bytes and bytearray.
+
+    XXX Should add all their methods.
+    """
+
+    __slots__ = ()
+
+ByteString.register(bytes)
+ByteString.register(bytearray)
+
+
+class MutableSequence(Sequence):
+
+    __slots__ = ()
+
+    """All the operations on a read-write sequence.
+
+    Concrete subclasses must provide __new__ or __init__,
+    __getitem__, __setitem__, __delitem__, __len__, and insert().
+
+    """
+
+    @abstractmethod
+    def __setitem__(self, index, value):
+        raise IndexError
+
+    @abstractmethod
+    def __delitem__(self, index):
+        raise IndexError
+
+    @abstractmethod
+    def insert(self, index, value):
+        'S.insert(index, value) -- insert value before index'
+        raise IndexError
+
+    def append(self, value):
+        'S.append(value) -- append value to the end of the sequence'
+        self.insert(len(self), value)
+
+    def clear(self):
+        'S.clear() -> None -- remove all items from S'
+        try:
+            while True:
+                self.pop()
+        except IndexError:
+            pass
+
+    def reverse(self):
+        'S.reverse() -- reverse *IN PLACE*'
+        n = len(self)
+        for i in range(n//2):
+            self[i], self[n-i-1] = self[n-i-1], self[i]
+
+    def extend(self, values):
+        'S.extend(iterable) -- extend sequence by appending elements from the iterable'
+        for v in values:
+            self.append(v)
+
+    def pop(self, index=-1):
+        '''S.pop([index]) -> item -- remove and return item at index (default last).
+           Raise IndexError if list is empty or index is out of range.
+        '''
+        v = self[index]
+        del self[index]
+        return v
+
+    def remove(self, value):
+        '''S.remove(value) -- remove first occurrence of value.
+           Raise ValueError if the value is not present.
+        '''
+        del self[self.index(value)]
+
+    def __iadd__(self, values):
+        self.extend(values)
+        return self
+
+MutableSequence.register(list)
+MutableSequence.register(bytearray)  # Multiply inheriting, see ByteString
diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py
index 3c11943..40fc78b 100644
--- a/Lib/_osx_support.py
+++ b/Lib/_osx_support.py
@@ -235,13 +235,19 @@
     if re.search('-arch\s+ppc', _config_vars['CFLAGS']) is not None:
         # NOTE: Cannot use subprocess here because of bootstrap
         # issues when building Python itself
-        status = os.system("'%s' -arch ppc -x c /dev/null 2>/dev/null"%(
-            _config_vars['CC'].replace("'", "'\"'\"'"),))
-        # The Apple compiler drivers return status 255 if no PPC
-        if (status >> 8) == 255:
-            # Compiler doesn't support PPC, remove the related
-            # '-arch' flags if not explicitly overridden by an
-            # environment variable
+        status = os.system(
+            """echo 'int main{};' | """
+            """'%s' -c -arch ppc -x c -o /dev/null /dev/null 2>/dev/null"""
+            %(_config_vars['CC'].replace("'", "'\"'\"'"),))
+        if status:
+            # The compile failed for some reason.  Because of differences
+            # across Xcode and compiler versions, there is no reliable way
+            # to be sure why it failed.  Assume here it was due to lack of
+            # PPC support and remove the related '-arch' flags from each
+            # config variables not explicitly overriden by an environment
+            # variable.  If the error was for some other reason, we hope the
+            # failure will show up again when trying to compile an extension
+            # module.
             for cv in _UNIVERSAL_CONFIG_VARS:
                 if cv in _config_vars and cv not in os.environ:
                     flags = _config_vars[cv]
diff --git a/Lib/aifc.py b/Lib/aifc.py
index b087754..18f236d 100644
--- a/Lib/aifc.py
+++ b/Lib/aifc.py
@@ -468,15 +468,13 @@
             if self._comptype != b'NONE':
                 if self._comptype == b'G722':
                     self._convert = self._adpcm2lin
-                    self._framesize = self._framesize // 4
                 elif self._comptype in (b'ulaw', b'ULAW'):
                     self._convert = self._ulaw2lin
-                    self._framesize = self._framesize // 2
                 elif self._comptype in (b'alaw', b'ALAW'):
                     self._convert = self._alaw2lin
-                    self._framesize = self._framesize // 2
                 else:
                     raise Error('unsupported compression type')
+                self._sampwidth = 2
         else:
             self._comptype = b'NONE'
             self._compname = b'not compressed'
@@ -804,7 +802,10 @@
         _write_short(self._file, self._nchannels)
         self._nframes_pos = self._file.tell()
         _write_ulong(self._file, self._nframes)
-        _write_short(self._file, self._sampwidth * 8)
+        if self._comptype in (b'ULAW', b'ulaw', b'ALAW', b'alaw', b'G722'):
+            _write_short(self._file, 8)
+        else:
+            _write_short(self._file, self._sampwidth * 8)
         _write_float(self._file, self._framerate)
         if self._aifc:
             self._file.write(self._comptype)
diff --git a/Lib/asyncio/__init__.py b/Lib/asyncio/__init__.py
new file mode 100644
index 0000000..0d288d5
--- /dev/null
+++ b/Lib/asyncio/__init__.py
@@ -0,0 +1,41 @@
+"""The asyncio package, tracking PEP 3156."""
+
+import sys
+
+# The selectors module is in the stdlib in Python 3.4 but not in 3.3.
+# Do this first, so the other submodules can use "from . import selectors".
+# Prefer asyncio/selectors.py over the stdlib one, as ours may be newer.
+try:
+    from . import selectors
+except ImportError:
+    import selectors  # Will also be exported.
+
+if sys.platform == 'win32':
+    # Similar thing for _overlapped.
+    try:
+        from . import _overlapped
+    except ImportError:
+        import _overlapped  # Will also be exported.
+
+# This relies on each of the submodules having an __all__ variable.
+from .futures import *
+from .events import *
+from .locks import *
+from .transports import *
+from .protocols import *
+from .streams import *
+from .tasks import *
+
+if sys.platform == 'win32':  # pragma: no cover
+    from .windows_events import *
+else:
+    from .unix_events import *  # pragma: no cover
+
+
+__all__ = (futures.__all__ +
+           events.__all__ +
+           locks.__all__ +
+           transports.__all__ +
+           protocols.__all__ +
+           streams.__all__ +
+           tasks.__all__)
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
new file mode 100644
index 0000000..f2d117b
--- /dev/null
+++ b/Lib/asyncio/base_events.py
@@ -0,0 +1,644 @@
+"""Base implementation of event loop.
+
+The event loop can be broken up into a multiplexer (the part
+responsible for notifying us of IO events) and the event loop proper,
+which wraps a multiplexer with functionality for scheduling callbacks,
+immediately or at a given time in the future.
+
+Whenever a public API takes a callback, subsequent positional
+arguments will be passed to the callback if/when it is called.  This
+avoids the proliferation of trivial lambdas implementing closures.
+Keyword arguments for the callback are not supported; this is a
+conscious design decision, leaving the door open for keyword arguments
+to modify the meaning of the API call itself.
+"""
+
+
+import collections
+import concurrent.futures
+import heapq
+import logging
+import socket
+import subprocess
+import time
+import os
+import sys
+
+from . import events
+from . import futures
+from . import tasks
+from .log import logger
+
+
+__all__ = ['BaseEventLoop', 'Server']
+
+
+# Argument for default thread pool executor creation.
+_MAX_WORKERS = 5
+
+
+class _StopError(BaseException):
+    """Raised to stop the event loop."""
+
+
+def _raise_stop_error(*args):
+    raise _StopError
+
+
+class Server(events.AbstractServer):
+
+    def __init__(self, loop, sockets):
+        self.loop = loop
+        self.sockets = sockets
+        self.active_count = 0
+        self.waiters = []
+
+    def attach(self, transport):
+        assert self.sockets is not None
+        self.active_count += 1
+
+    def detach(self, transport):
+        assert self.active_count > 0
+        self.active_count -= 1
+        if self.active_count == 0 and self.sockets is None:
+            self._wakeup()
+
+    def close(self):
+        sockets = self.sockets
+        if sockets is not None:
+            self.sockets = None
+            for sock in sockets:
+                self.loop._stop_serving(sock)
+            if self.active_count == 0:
+                self._wakeup()
+
+    def _wakeup(self):
+        waiters = self.waiters
+        self.waiters = None
+        for waiter in waiters:
+            if not waiter.done():
+                waiter.set_result(waiter)
+
+    @tasks.coroutine
+    def wait_closed(self):
+        if self.sockets is None or self.waiters is None:
+            return
+        waiter = futures.Future(loop=self.loop)
+        self.waiters.append(waiter)
+        yield from waiter
+
+
+class BaseEventLoop(events.AbstractEventLoop):
+
+    def __init__(self):
+        self._ready = collections.deque()
+        self._scheduled = []
+        self._default_executor = None
+        self._internal_fds = 0
+        self._running = False
+
+    def _make_socket_transport(self, sock, protocol, waiter=None, *,
+                               extra=None, server=None):
+        """Create socket transport."""
+        raise NotImplementedError
+
+    def _make_ssl_transport(self, rawsock, protocol, sslcontext, waiter, *,
+                            server_side=False, server_hostname=None,
+                            extra=None, server=None):
+        """Create SSL transport."""
+        raise NotImplementedError
+
+    def _make_datagram_transport(self, sock, protocol,
+                                 address=None, extra=None):
+        """Create datagram transport."""
+        raise NotImplementedError
+
+    def _make_read_pipe_transport(self, pipe, protocol, waiter=None,
+                                  extra=None):
+        """Create read pipe transport."""
+        raise NotImplementedError
+
+    def _make_write_pipe_transport(self, pipe, protocol, waiter=None,
+                                   extra=None):
+        """Create write pipe transport."""
+        raise NotImplementedError
+
+    @tasks.coroutine
+    def _make_subprocess_transport(self, protocol, args, shell,
+                                   stdin, stdout, stderr, bufsize,
+                                   extra=None, **kwargs):
+        """Create subprocess transport."""
+        raise NotImplementedError
+
+    def _read_from_self(self):
+        """XXX"""
+        raise NotImplementedError
+
+    def _write_to_self(self):
+        """XXX"""
+        raise NotImplementedError
+
+    def _process_events(self, event_list):
+        """Process selector events."""
+        raise NotImplementedError
+
+    def run_forever(self):
+        """Run until stop() is called."""
+        if self._running:
+            raise RuntimeError('Event loop is running.')
+        self._running = True
+        try:
+            while True:
+                try:
+                    self._run_once()
+                except _StopError:
+                    break
+        finally:
+            self._running = False
+
+    def run_until_complete(self, future):
+        """Run until the Future is done.
+
+        If the argument is a coroutine, it is wrapped in a Task.
+
+        XXX TBD: It would be disastrous to call run_until_complete()
+        with the same coroutine twice -- it would wrap it in two
+        different Tasks and that can't be good.
+
+        Return the Future's result, or raise its exception.
+        """
+        future = tasks.async(future, loop=self)
+        future.add_done_callback(_raise_stop_error)
+        self.run_forever()
+        future.remove_done_callback(_raise_stop_error)
+        if not future.done():
+            raise RuntimeError('Event loop stopped before Future completed.')
+
+        return future.result()
+
+    def stop(self):
+        """Stop running the event loop.
+
+        Every callback scheduled before stop() is called will run.
+        Callback scheduled after stop() is called won't.  However,
+        those callbacks will run if run() is called again later.
+        """
+        self.call_soon(_raise_stop_error)
+
+    def close(self):
+        """Close the event loop.
+
+        This clears the queues and shuts down the executor,
+        but does not wait for the executor to finish.
+        """
+        self._ready.clear()
+        self._scheduled.clear()
+        executor = self._default_executor
+        if executor is not None:
+            self._default_executor = None
+            executor.shutdown(wait=False)
+
+    def is_running(self):
+        """Returns running status of event loop."""
+        return self._running
+
+    def time(self):
+        """Return the time according to the event loop's clock."""
+        return time.monotonic()
+
+    def call_later(self, delay, callback, *args):
+        """Arrange for a callback to be called at a given time.
+
+        Return a Handle: an opaque object with a cancel() method that
+        can be used to cancel the call.
+
+        The delay can be an int or float, expressed in seconds.  It is
+        always a relative time.
+
+        Each callback will be called exactly once.  If two callbacks
+        are scheduled for exactly the same time, it undefined which
+        will be called first.
+
+        Any positional arguments after the callback will be passed to
+        the callback when it is called.
+        """
+        return self.call_at(self.time() + delay, callback, *args)
+
+    def call_at(self, when, callback, *args):
+        """Like call_later(), but uses an absolute time."""
+        timer = events.TimerHandle(when, callback, args)
+        heapq.heappush(self._scheduled, timer)
+        return timer
+
+    def call_soon(self, callback, *args):
+        """Arrange for a callback to be called as soon as possible.
+
+        This operates as a FIFO queue, callbacks are called in the
+        order in which they are registered.  Each callback will be
+        called exactly once.
+
+        Any positional arguments after the callback will be passed to
+        the callback when it is called.
+        """
+        handle = events.make_handle(callback, args)
+        self._ready.append(handle)
+        return handle
+
+    def call_soon_threadsafe(self, callback, *args):
+        """XXX"""
+        handle = self.call_soon(callback, *args)
+        self._write_to_self()
+        return handle
+
+    def run_in_executor(self, executor, callback, *args):
+        if isinstance(callback, events.Handle):
+            assert not args
+            assert not isinstance(callback, events.TimerHandle)
+            if callback._cancelled:
+                f = futures.Future(loop=self)
+                f.set_result(None)
+                return f
+            callback, args = callback._callback, callback._args
+        if executor is None:
+            executor = self._default_executor
+            if executor is None:
+                executor = concurrent.futures.ThreadPoolExecutor(_MAX_WORKERS)
+                self._default_executor = executor
+        return futures.wrap_future(executor.submit(callback, *args), loop=self)
+
+    def set_default_executor(self, executor):
+        self._default_executor = executor
+
+    def getaddrinfo(self, host, port, *,
+                    family=0, type=0, proto=0, flags=0):
+        return self.run_in_executor(None, socket.getaddrinfo,
+                                    host, port, family, type, proto, flags)
+
+    def getnameinfo(self, sockaddr, flags=0):
+        return self.run_in_executor(None, socket.getnameinfo, sockaddr, flags)
+
+    @tasks.coroutine
+    def create_connection(self, protocol_factory, host=None, port=None, *,
+                          ssl=None, family=0, proto=0, flags=0, sock=None,
+                          local_addr=None, server_hostname=None):
+        """XXX"""
+        if server_hostname is not None and not ssl:
+            raise ValueError('server_hostname is only meaningful with ssl')
+
+        if server_hostname is None and ssl:
+            # Use host as default for server_hostname.  It is an error
+            # if host is empty or not set, e.g. when an
+            # already-connected socket was passed or when only a port
+            # is given.  To avoid this error, you can pass
+            # server_hostname='' -- this will bypass the hostname
+            # check.  (This also means that if host is a numeric
+            # IP/IPv6 address, we will attempt to verify that exact
+            # address; this will probably fail, but it is possible to
+            # create a certificate for a specific IP address, so we
+            # don't judge it here.)
+            if not host:
+                raise ValueError('You must set server_hostname '
+                                 'when using ssl without a host')
+            server_hostname = host
+
+        if host is not None or port is not None:
+            if sock is not None:
+                raise ValueError(
+                    'host/port and sock can not be specified at the same time')
+
+            f1 = self.getaddrinfo(
+                host, port, family=family,
+                type=socket.SOCK_STREAM, proto=proto, flags=flags)
+            fs = [f1]
+            if local_addr is not None:
+                f2 = self.getaddrinfo(
+                    *local_addr, family=family,
+                    type=socket.SOCK_STREAM, proto=proto, flags=flags)
+                fs.append(f2)
+            else:
+                f2 = None
+
+            yield from tasks.wait(fs, loop=self)
+
+            infos = f1.result()
+            if not infos:
+                raise OSError('getaddrinfo() returned empty list')
+            if f2 is not None:
+                laddr_infos = f2.result()
+                if not laddr_infos:
+                    raise OSError('getaddrinfo() returned empty list')
+
+            exceptions = []
+            for family, type, proto, cname, address in infos:
+                try:
+                    sock = socket.socket(family=family, type=type, proto=proto)
+                    sock.setblocking(False)
+                    if f2 is not None:
+                        for _, _, _, _, laddr in laddr_infos:
+                            try:
+                                sock.bind(laddr)
+                                break
+                            except OSError as exc:
+                                exc = OSError(
+                                    exc.errno, 'error while '
+                                    'attempting to bind on address '
+                                    '{!r}: {}'.format(
+                                        laddr, exc.strerror.lower()))
+                                exceptions.append(exc)
+                        else:
+                            sock.close()
+                            sock = None
+                            continue
+                    yield from self.sock_connect(sock, address)
+                except OSError as exc:
+                    if sock is not None:
+                        sock.close()
+                    exceptions.append(exc)
+                else:
+                    break
+            else:
+                if len(exceptions) == 1:
+                    raise exceptions[0]
+                else:
+                    # If they all have the same str(), raise one.
+                    model = str(exceptions[0])
+                    if all(str(exc) == model for exc in exceptions):
+                        raise exceptions[0]
+                    # Raise a combined exception so the user can see all
+                    # the various error messages.
+                    raise OSError('Multiple exceptions: {}'.format(
+                        ', '.join(str(exc) for exc in exceptions)))
+
+        elif sock is None:
+            raise ValueError(
+                'host and port was not specified and no sock specified')
+
+        sock.setblocking(False)
+
+        protocol = protocol_factory()
+        waiter = futures.Future(loop=self)
+        if ssl:
+            sslcontext = None if isinstance(ssl, bool) else ssl
+            transport = self._make_ssl_transport(
+                sock, protocol, sslcontext, waiter,
+                server_side=False, server_hostname=server_hostname)
+        else:
+            transport = self._make_socket_transport(sock, protocol, waiter)
+
+        yield from waiter
+        return transport, protocol
+
+    @tasks.coroutine
+    def create_datagram_endpoint(self, protocol_factory,
+                                 local_addr=None, remote_addr=None, *,
+                                 family=0, proto=0, flags=0):
+        """Create datagram connection."""
+        if not (local_addr or remote_addr):
+            if family == 0:
+                raise ValueError('unexpected address family')
+            addr_pairs_info = (((family, proto), (None, None)),)
+        else:
+            # join addresss by (family, protocol)
+            addr_infos = collections.OrderedDict()
+            for idx, addr in ((0, local_addr), (1, remote_addr)):
+                if addr is not None:
+                    assert isinstance(addr, tuple) and len(addr) == 2, (
+                        '2-tuple is expected')
+
+                    infos = yield from self.getaddrinfo(
+                        *addr, family=family, type=socket.SOCK_DGRAM,
+                        proto=proto, flags=flags)
+                    if not infos:
+                        raise OSError('getaddrinfo() returned empty list')
+
+                    for fam, _, pro, _, address in infos:
+                        key = (fam, pro)
+                        if key not in addr_infos:
+                            addr_infos[key] = [None, None]
+                        addr_infos[key][idx] = address
+
+            # each addr has to have info for each (family, proto) pair
+            addr_pairs_info = [
+                (key, addr_pair) for key, addr_pair in addr_infos.items()
+                if not ((local_addr and addr_pair[0] is None) or
+                        (remote_addr and addr_pair[1] is None))]
+
+            if not addr_pairs_info:
+                raise ValueError('can not get address information')
+
+        exceptions = []
+
+        for ((family, proto),
+             (local_address, remote_address)) in addr_pairs_info:
+            sock = None
+            r_addr = None
+            try:
+                sock = socket.socket(
+                    family=family, type=socket.SOCK_DGRAM, proto=proto)
+                sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+                sock.setblocking(False)
+
+                if local_addr:
+                    sock.bind(local_address)
+                if remote_addr:
+                    yield from self.sock_connect(sock, remote_address)
+                    r_addr = remote_address
+            except OSError as exc:
+                if sock is not None:
+                    sock.close()
+                exceptions.append(exc)
+            else:
+                break
+        else:
+            raise exceptions[0]
+
+        protocol = protocol_factory()
+        transport = self._make_datagram_transport(sock, protocol, r_addr)
+        return transport, protocol
+
+    @tasks.coroutine
+    def create_server(self, protocol_factory, host=None, port=None,
+                      *,
+                      family=socket.AF_UNSPEC,
+                      flags=socket.AI_PASSIVE,
+                      sock=None,
+                      backlog=100,
+                      ssl=None,
+                      reuse_address=None):
+        """XXX"""
+        if isinstance(ssl, bool):
+            raise TypeError('ssl argument must be an SSLContext or None')
+        if host is not None or port is not None:
+            if sock is not None:
+                raise ValueError(
+                    'host/port and sock can not be specified at the same time')
+
+            AF_INET6 = getattr(socket, 'AF_INET6', 0)
+            if reuse_address is None:
+                reuse_address = os.name == 'posix' and sys.platform != 'cygwin'
+            sockets = []
+            if host == '':
+                host = None
+
+            infos = yield from self.getaddrinfo(
+                host, port, family=family,
+                type=socket.SOCK_STREAM, proto=0, flags=flags)
+            if not infos:
+                raise OSError('getaddrinfo() returned empty list')
+
+            completed = False
+            try:
+                for res in infos:
+                    af, socktype, proto, canonname, sa = res
+                    try:
+                        sock = socket.socket(af, socktype, proto)
+                    except socket.error:
+                        # Assume it's a bad family/type/protocol combination.
+                        continue
+                    sockets.append(sock)
+                    if reuse_address:
+                        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,
+                                        True)
+                    # Disable IPv4/IPv6 dual stack support (enabled by
+                    # default on Linux) which makes a single socket
+                    # listen on both address families.
+                    if af == AF_INET6 and hasattr(socket, 'IPPROTO_IPV6'):
+                        sock.setsockopt(socket.IPPROTO_IPV6,
+                                        socket.IPV6_V6ONLY,
+                                        True)
+                    try:
+                        sock.bind(sa)
+                    except OSError as err:
+                        raise OSError(err.errno, 'error while attempting '
+                                      'to bind on address %r: %s'
+                                      % (sa, err.strerror.lower()))
+                completed = True
+            finally:
+                if not completed:
+                    for sock in sockets:
+                        sock.close()
+        else:
+            if sock is None:
+                raise ValueError(
+                    'host and port was not specified and no sock specified')
+            sockets = [sock]
+
+        server = Server(self, sockets)
+        for sock in sockets:
+            sock.listen(backlog)
+            sock.setblocking(False)
+            self._start_serving(protocol_factory, sock, ssl, server)
+        return server
+
+    @tasks.coroutine
+    def connect_read_pipe(self, protocol_factory, pipe):
+        protocol = protocol_factory()
+        waiter = futures.Future(loop=self)
+        transport = self._make_read_pipe_transport(pipe, protocol, waiter)
+        yield from waiter
+        return transport, protocol
+
+    @tasks.coroutine
+    def connect_write_pipe(self, protocol_factory, pipe):
+        protocol = protocol_factory()
+        waiter = futures.Future(loop=self)
+        transport = self._make_write_pipe_transport(pipe, protocol, waiter)
+        yield from waiter
+        return transport, protocol
+
+    @tasks.coroutine
+    def subprocess_shell(self, protocol_factory, cmd, *, stdin=subprocess.PIPE,
+                         stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                         universal_newlines=False, shell=True, bufsize=0,
+                         **kwargs):
+        assert not universal_newlines, "universal_newlines must be False"
+        assert shell, "shell must be True"
+        assert isinstance(cmd, str), cmd
+        protocol = protocol_factory()
+        transport = yield from self._make_subprocess_transport(
+            protocol, cmd, True, stdin, stdout, stderr, bufsize, **kwargs)
+        return transport, protocol
+
+    @tasks.coroutine
+    def subprocess_exec(self, protocol_factory, *args, stdin=subprocess.PIPE,
+                        stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                        universal_newlines=False, shell=False, bufsize=0,
+                        **kwargs):
+        assert not universal_newlines, "universal_newlines must be False"
+        assert not shell, "shell must be False"
+        protocol = protocol_factory()
+        transport = yield from self._make_subprocess_transport(
+            protocol, args, False, stdin, stdout, stderr, bufsize, **kwargs)
+        return transport, protocol
+
+    def _add_callback(self, handle):
+        """Add a Handle to ready or scheduled."""
+        assert isinstance(handle, events.Handle), 'A Handle is required here'
+        if handle._cancelled:
+            return
+        if isinstance(handle, events.TimerHandle):
+            heapq.heappush(self._scheduled, handle)
+        else:
+            self._ready.append(handle)
+
+    def _add_callback_signalsafe(self, handle):
+        """Like _add_callback() but called from a signal handler."""
+        self._add_callback(handle)
+        self._write_to_self()
+
+    def _run_once(self):
+        """Run one full iteration of the event loop.
+
+        This calls all currently ready callbacks, polls for I/O,
+        schedules the resulting callbacks, and finally schedules
+        'call_later' callbacks.
+        """
+        # Remove delayed calls that were cancelled from head of queue.
+        while self._scheduled and self._scheduled[0]._cancelled:
+            heapq.heappop(self._scheduled)
+
+        timeout = None
+        if self._ready:
+            timeout = 0
+        elif self._scheduled:
+            # Compute the desired timeout.
+            when = self._scheduled[0]._when
+            deadline = max(0, when - self.time())
+            if timeout is None:
+                timeout = deadline
+            else:
+                timeout = min(timeout, deadline)
+
+        # TODO: Instrumentation only in debug mode?
+        t0 = self.time()
+        event_list = self._selector.select(timeout)
+        t1 = self.time()
+        argstr = '' if timeout is None else '{:.3f}'.format(timeout)
+        if t1-t0 >= 1:
+            level = logging.INFO
+        else:
+            level = logging.DEBUG
+        logger.log(level, 'poll%s took %.3f seconds', argstr, t1-t0)
+        self._process_events(event_list)
+
+        # Handle 'later' callbacks that are ready.
+        now = self.time()
+        while self._scheduled:
+            handle = self._scheduled[0]
+            if handle._when > now:
+                break
+            handle = heapq.heappop(self._scheduled)
+            self._ready.append(handle)
+
+        # This is the only place where callbacks are actually *called*.
+        # All other places just add them to ready.
+        # Note: We run all currently scheduled callbacks, but not any
+        # callbacks scheduled by callbacks run this time around --
+        # they will be run the next time (after another I/O poll).
+        # Use an idiom that is threadsafe without using locks.
+        ntodo = len(self._ready)
+        for i in range(ntodo):
+            handle = self._ready.popleft()
+            if not handle._cancelled:
+                handle._run()
+        handle = None  # Needed to break cycles when an exception occurs.
diff --git a/Lib/asyncio/base_subprocess.py b/Lib/asyncio/base_subprocess.py
new file mode 100644
index 0000000..d15fb15
--- /dev/null
+++ b/Lib/asyncio/base_subprocess.py
@@ -0,0 +1,166 @@
+import collections
+import subprocess
+
+from . import protocols
+from . import tasks
+from . import transports
+
+
+STDIN = 0
+STDOUT = 1
+STDERR = 2
+
+
+class BaseSubprocessTransport(transports.SubprocessTransport):
+
+    def __init__(self, loop, protocol, args, shell,
+                 stdin, stdout, stderr, bufsize,
+                 extra=None, **kwargs):
+        super().__init__(extra)
+        self._protocol = protocol
+        self._loop = loop
+
+        self._pipes = {}
+        if stdin == subprocess.PIPE:
+            self._pipes[STDIN] = None
+        if stdout == subprocess.PIPE:
+            self._pipes[STDOUT] = None
+        if stderr == subprocess.PIPE:
+            self._pipes[STDERR] = None
+        self._pending_calls = collections.deque()
+        self._finished = False
+        self._returncode = None
+        self._start(args=args, shell=shell, stdin=stdin, stdout=stdout,
+                    stderr=stderr, bufsize=bufsize, **kwargs)
+        self._extra['subprocess'] = self._proc
+
+    def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs):
+        raise NotImplementedError
+
+    def _make_write_subprocess_pipe_proto(self, fd):
+        raise NotImplementedError
+
+    def _make_read_subprocess_pipe_proto(self, fd):
+        raise NotImplementedError
+
+    def close(self):
+        for proto in self._pipes.values():
+            proto.pipe.close()
+        if self._returncode is None:
+            self.terminate()
+
+    def get_pid(self):
+        return self._proc.pid
+
+    def get_returncode(self):
+        return self._returncode
+
+    def get_pipe_transport(self, fd):
+        if fd in self._pipes:
+            return self._pipes[fd].pipe
+        else:
+            return None
+
+    def send_signal(self, signal):
+        self._proc.send_signal(signal)
+
+    def terminate(self):
+        self._proc.terminate()
+
+    def kill(self):
+        self._proc.kill()
+
+    @tasks.coroutine
+    def _post_init(self):
+        proc = self._proc
+        loop = self._loop
+        if proc.stdin is not None:
+            transp, proto = yield from loop.connect_write_pipe(
+                lambda: WriteSubprocessPipeProto(self, STDIN),
+                proc.stdin)
+        if proc.stdout is not None:
+            transp, proto = yield from loop.connect_read_pipe(
+                lambda: ReadSubprocessPipeProto(self, STDOUT),
+                proc.stdout)
+        if proc.stderr is not None:
+            transp, proto = yield from loop.connect_read_pipe(
+                lambda: ReadSubprocessPipeProto(self, STDERR),
+                proc.stderr)
+        if not self._pipes:
+            self._try_connected()
+
+    def _call(self, cb, *data):
+        if self._pending_calls is not None:
+            self._pending_calls.append((cb, data))
+        else:
+            self._loop.call_soon(cb, *data)
+
+    def _try_connected(self):
+        assert self._pending_calls is not None
+        if all(p is not None and p.connected for p in self._pipes.values()):
+            self._loop.call_soon(self._protocol.connection_made, self)
+            for callback, data in self._pending_calls:
+                self._loop.call_soon(callback, *data)
+            self._pending_calls = None
+
+    def _pipe_connection_lost(self, fd, exc):
+        self._call(self._protocol.pipe_connection_lost, fd, exc)
+        self._try_finish()
+
+    def _pipe_data_received(self, fd, data):
+        self._call(self._protocol.pipe_data_received, fd, data)
+
+    def _process_exited(self, returncode):
+        assert returncode is not None, returncode
+        assert self._returncode is None, self._returncode
+        self._returncode = returncode
+        self._loop._subprocess_closed(self)
+        self._call(self._protocol.process_exited)
+        self._try_finish()
+
+    def _try_finish(self):
+        assert not self._finished
+        if self._returncode is None:
+            return
+        if all(p is not None and p.disconnected
+               for p in self._pipes.values()):
+            self._finished = True
+            self._loop.call_soon(self._call_connection_lost, None)
+
+    def _call_connection_lost(self, exc):
+        try:
+            self._protocol.connection_lost(exc)
+        finally:
+            self._proc = None
+            self._protocol = None
+            self._loop = None
+
+
+class WriteSubprocessPipeProto(protocols.BaseProtocol):
+    pipe = None
+
+    def __init__(self, proc, fd):
+        self.proc = proc
+        self.fd = fd
+        self.connected = False
+        self.disconnected = False
+        proc._pipes[fd] = self
+
+    def connection_made(self, transport):
+        self.connected = True
+        self.pipe = transport
+        self.proc._try_connected()
+
+    def connection_lost(self, exc):
+        self.disconnected = True
+        self.proc._pipe_connection_lost(self.fd, exc)
+
+    def eof_received(self):
+        pass
+
+
+class ReadSubprocessPipeProto(WriteSubprocessPipeProto,
+                              protocols.Protocol):
+
+    def data_received(self, data):
+        self.proc._pipe_data_received(self.fd, data)
diff --git a/Lib/asyncio/constants.py b/Lib/asyncio/constants.py
new file mode 100644
index 0000000..f9e1232
--- /dev/null
+++ b/Lib/asyncio/constants.py
@@ -0,0 +1,7 @@
+"""Constants."""
+
+# After the connection is lost, log warnings after this many write()s.
+LOG_THRESHOLD_FOR_CONNLOST_WRITES = 5
+
+# Seconds to wait before retrying accept().
+ACCEPT_RETRY_DELAY = 1
diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py
new file mode 100644
index 0000000..36ae312
--- /dev/null
+++ b/Lib/asyncio/events.py
@@ -0,0 +1,438 @@
+"""Event loop and event loop policy."""
+
+__all__ = ['AbstractEventLoopPolicy',
+           'AbstractEventLoop', 'AbstractServer',
+           'Handle', 'TimerHandle',
+           'get_event_loop_policy', 'set_event_loop_policy',
+           'get_event_loop', 'set_event_loop', 'new_event_loop',
+           'get_child_watcher', 'set_child_watcher',
+           ]
+
+import subprocess
+import sys
+import threading
+import socket
+
+from .log import logger
+
+
+class Handle:
+    """Object returned by callback registration methods."""
+
+    def __init__(self, callback, args):
+        self._callback = callback
+        self._args = args
+        self._cancelled = False
+
+    def __repr__(self):
+        res = 'Handle({}, {})'.format(self._callback, self._args)
+        if self._cancelled:
+            res += '<cancelled>'
+        return res
+
+    def cancel(self):
+        self._cancelled = True
+
+    def _run(self):
+        try:
+            self._callback(*self._args)
+        except Exception:
+            logger.exception('Exception in callback %s %r',
+                             self._callback, self._args)
+        self = None  # Needed to break cycles when an exception occurs.
+
+
+def make_handle(callback, args):
+    # TODO: Inline this?  Or make it a private EventLoop method?
+    assert not isinstance(callback, Handle), 'A Handle is not a callback'
+    return Handle(callback, args)
+
+
+class TimerHandle(Handle):
+    """Object returned by timed callback registration methods."""
+
+    def __init__(self, when, callback, args):
+        assert when is not None
+        super().__init__(callback, args)
+
+        self._when = when
+
+    def __repr__(self):
+        res = 'TimerHandle({}, {}, {})'.format(self._when,
+                                               self._callback,
+                                               self._args)
+        if self._cancelled:
+            res += '<cancelled>'
+
+        return res
+
+    def __hash__(self):
+        return hash(self._when)
+
+    def __lt__(self, other):
+        return self._when < other._when
+
+    def __le__(self, other):
+        if self._when < other._when:
+            return True
+        return self.__eq__(other)
+
+    def __gt__(self, other):
+        return self._when > other._when
+
+    def __ge__(self, other):
+        if self._when > other._when:
+            return True
+        return self.__eq__(other)
+
+    def __eq__(self, other):
+        if isinstance(other, TimerHandle):
+            return (self._when == other._when and
+                    self._callback == other._callback and
+                    self._args == other._args and
+                    self._cancelled == other._cancelled)
+        return NotImplemented
+
+    def __ne__(self, other):
+        equal = self.__eq__(other)
+        return NotImplemented if equal is NotImplemented else not equal
+
+
+class AbstractServer:
+    """Abstract server returned by create_service()."""
+
+    def close(self):
+        """Stop serving.  This leaves existing connections open."""
+        return NotImplemented
+
+    def wait_closed(self):
+        """Coroutine to wait until service is closed."""
+        return NotImplemented
+
+
+class AbstractEventLoop:
+    """Abstract event loop."""
+
+    # Running and stopping the event loop.
+
+    def run_forever(self):
+        """Run the event loop until stop() is called."""
+        raise NotImplementedError
+
+    def run_until_complete(self, future):
+        """Run the event loop until a Future is done.
+
+        Return the Future's result, or raise its exception.
+        """
+        raise NotImplementedError
+
+    def stop(self):
+        """Stop the event loop as soon as reasonable.
+
+        Exactly how soon that is may depend on the implementation, but
+        no more I/O callbacks should be scheduled.
+        """
+        raise NotImplementedError
+
+    def is_running(self):
+        """Return whether the event loop is currently running."""
+        raise NotImplementedError
+
+    def close(self):
+        """Close the loop.
+
+        The loop should not be running.
+
+        This is idempotent and irreversible.
+
+        No other methods should be called after this one.
+        """
+        raise NotImplementedError
+
+    # Methods scheduling callbacks.  All these return Handles.
+
+    def call_soon(self, callback, *args):
+        return self.call_later(0, callback, *args)
+
+    def call_later(self, delay, callback, *args):
+        raise NotImplementedError
+
+    def call_at(self, when, callback, *args):
+        raise NotImplementedError
+
+    def time(self):
+        raise NotImplementedError
+
+    # Methods for interacting with threads.
+
+    def call_soon_threadsafe(self, callback, *args):
+        raise NotImplementedError
+
+    def run_in_executor(self, executor, callback, *args):
+        raise NotImplementedError
+
+    def set_default_executor(self, executor):
+        raise NotImplementedError
+
+    # Network I/O methods returning Futures.
+
+    def getaddrinfo(self, host, port, *, family=0, type=0, proto=0, flags=0):
+        raise NotImplementedError
+
+    def getnameinfo(self, sockaddr, flags=0):
+        raise NotImplementedError
+
+    def create_connection(self, protocol_factory, host=None, port=None, *,
+                          ssl=None, family=0, proto=0, flags=0, sock=None,
+                          local_addr=None, server_hostname=None):
+        raise NotImplementedError
+
+    def create_server(self, protocol_factory, host=None, port=None, *,
+                      family=socket.AF_UNSPEC, flags=socket.AI_PASSIVE,
+                      sock=None, backlog=100, ssl=None, reuse_address=None):
+        """A coroutine which creates a TCP server bound to host and port.
+
+        The return value is a Server object which can be used to stop
+        the service.
+
+        If host is an empty string or None all interfaces are assumed
+        and a list of multiple sockets will be returned (most likely
+        one for IPv4 and another one for IPv6).
+
+        family can be set to either AF_INET or AF_INET6 to force the
+        socket to use IPv4 or IPv6. If not set it will be determined
+        from host (defaults to AF_UNSPEC).
+
+        flags is a bitmask for getaddrinfo().
+
+        sock can optionally be specified in order to use a preexisting
+        socket object.
+
+        backlog is the maximum number of queued connections passed to
+        listen() (defaults to 100).
+
+        ssl can be set to an SSLContext to enable SSL over the
+        accepted connections.
+
+        reuse_address tells the kernel to reuse a local socket in
+        TIME_WAIT state, without waiting for its natural timeout to
+        expire. If not specified will automatically be set to True on
+        UNIX.
+        """
+        raise NotImplementedError
+
+    def create_datagram_endpoint(self, protocol_factory,
+                                 local_addr=None, remote_addr=None, *,
+                                 family=0, proto=0, flags=0):
+        raise NotImplementedError
+
+    # Pipes and subprocesses.
+
+    def connect_read_pipe(self, protocol_factory, pipe):
+        """Register read pipe in eventloop.
+
+        protocol_factory should instantiate object with Protocol interface.
+        pipe is file-like object already switched to nonblocking.
+        Return pair (transport, protocol), where transport support
+        ReadTransport ABC"""
+        # The reason to accept file-like object instead of just file descriptor
+        # is: we need to own pipe and close it at transport finishing
+        # Can got complicated errors if pass f.fileno(),
+        # close fd in pipe transport then close f and vise versa.
+        raise NotImplementedError
+
+    def connect_write_pipe(self, protocol_factory, pipe):
+        """Register write pipe in eventloop.
+
+        protocol_factory should instantiate object with BaseProtocol interface.
+        Pipe is file-like object already switched to nonblocking.
+        Return pair (transport, protocol), where transport support
+        WriteTransport ABC"""
+        # The reason to accept file-like object instead of just file descriptor
+        # is: we need to own pipe and close it at transport finishing
+        # Can got complicated errors if pass f.fileno(),
+        # close fd in pipe transport then close f and vise versa.
+        raise NotImplementedError
+
+    def subprocess_shell(self, protocol_factory, cmd, *, stdin=subprocess.PIPE,
+                         stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                         **kwargs):
+        raise NotImplementedError
+
+    def subprocess_exec(self, protocol_factory, *args, stdin=subprocess.PIPE,
+                        stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                        **kwargs):
+        raise NotImplementedError
+
+    # Ready-based callback registration methods.
+    # The add_*() methods return None.
+    # The remove_*() methods return True if something was removed,
+    # False if there was nothing to delete.
+
+    def add_reader(self, fd, callback, *args):
+        raise NotImplementedError
+
+    def remove_reader(self, fd):
+        raise NotImplementedError
+
+    def add_writer(self, fd, callback, *args):
+        raise NotImplementedError
+
+    def remove_writer(self, fd):
+        raise NotImplementedError
+
+    # Completion based I/O methods returning Futures.
+
+    def sock_recv(self, sock, nbytes):
+        raise NotImplementedError
+
+    def sock_sendall(self, sock, data):
+        raise NotImplementedError
+
+    def sock_connect(self, sock, address):
+        raise NotImplementedError
+
+    def sock_accept(self, sock):
+        raise NotImplementedError
+
+    # Signal handling.
+
+    def add_signal_handler(self, sig, callback, *args):
+        raise NotImplementedError
+
+    def remove_signal_handler(self, sig):
+        raise NotImplementedError
+
+
+class AbstractEventLoopPolicy:
+    """Abstract policy for accessing the event loop."""
+
+    def get_event_loop(self):
+        """XXX"""
+        raise NotImplementedError
+
+    def set_event_loop(self, loop):
+        """XXX"""
+        raise NotImplementedError
+
+    def new_event_loop(self):
+        """XXX"""
+        raise NotImplementedError
+
+    # Child processes handling (Unix only).
+
+    def get_child_watcher(self):
+        """XXX"""
+        raise NotImplementedError
+
+    def set_child_watcher(self, watcher):
+        """XXX"""
+        raise NotImplementedError
+
+
+class BaseDefaultEventLoopPolicy(AbstractEventLoopPolicy):
+    """Default policy implementation for accessing the event loop.
+
+    In this policy, each thread has its own event loop.  However, we
+    only automatically create an event loop by default for the main
+    thread; other threads by default have no event loop.
+
+    Other policies may have different rules (e.g. a single global
+    event loop, or automatically creating an event loop per thread, or
+    using some other notion of context to which an event loop is
+    associated).
+    """
+
+    _loop_factory = None
+
+    class _Local(threading.local):
+        _loop = None
+        _set_called = False
+
+    def __init__(self):
+        self._local = self._Local()
+
+    def get_event_loop(self):
+        """Get the event loop.
+
+        This may be None or an instance of EventLoop.
+        """
+        if (self._local._loop is None and
+            not self._local._set_called and
+            isinstance(threading.current_thread(), threading._MainThread)):
+            self._local._loop = self.new_event_loop()
+        assert self._local._loop is not None, \
+               ('There is no current event loop in thread %r.' %
+                threading.current_thread().name)
+        return self._local._loop
+
+    def set_event_loop(self, loop):
+        """Set the event loop."""
+        self._local._set_called = True
+        assert loop is None or isinstance(loop, AbstractEventLoop)
+        self._local._loop = loop
+
+    def new_event_loop(self):
+        """Create a new event loop.
+
+        You must call set_event_loop() to make this the current event
+        loop.
+        """
+        return self._loop_factory()
+
+
+# Event loop policy.  The policy itself is always global, even if the
+# policy's rules say that there is an event loop per thread (or other
+# notion of context).  The default policy is installed by the first
+# call to get_event_loop_policy().
+_event_loop_policy = None
+
+# Lock for protecting the on-the-fly creation of the event loop policy.
+_lock = threading.Lock()
+
+
+def _init_event_loop_policy():
+    global _event_loop_policy
+    with _lock:
+        if _event_loop_policy is None:  # pragma: no branch
+            from . import DefaultEventLoopPolicy
+            _event_loop_policy = DefaultEventLoopPolicy()
+
+
+def get_event_loop_policy():
+    """XXX"""
+    if _event_loop_policy is None:
+        _init_event_loop_policy()
+    return _event_loop_policy
+
+
+def set_event_loop_policy(policy):
+    """XXX"""
+    global _event_loop_policy
+    assert policy is None or isinstance(policy, AbstractEventLoopPolicy)
+    _event_loop_policy = policy
+
+
+def get_event_loop():
+    """XXX"""
+    return get_event_loop_policy().get_event_loop()
+
+
+def set_event_loop(loop):
+    """XXX"""
+    get_event_loop_policy().set_event_loop(loop)
+
+
+def new_event_loop():
+    """XXX"""
+    return get_event_loop_policy().new_event_loop()
+
+
+def get_child_watcher():
+    """XXX"""
+    return get_event_loop_policy().get_child_watcher()
+
+
+def set_child_watcher(watcher):
+    """XXX"""
+    return get_event_loop_policy().set_child_watcher(watcher)
diff --git a/Lib/asyncio/futures.py b/Lib/asyncio/futures.py
new file mode 100644
index 0000000..db27838
--- /dev/null
+++ b/Lib/asyncio/futures.py
@@ -0,0 +1,338 @@
+"""A Future class similar to the one in PEP 3148."""
+
+__all__ = ['CancelledError', 'TimeoutError',
+           'InvalidStateError',
+           'Future', 'wrap_future',
+           ]
+
+import concurrent.futures._base
+import logging
+import traceback
+
+from . import events
+from .log import logger
+
+# States for Future.
+_PENDING = 'PENDING'
+_CANCELLED = 'CANCELLED'
+_FINISHED = 'FINISHED'
+
+# TODO: Do we really want to depend on concurrent.futures internals?
+Error = concurrent.futures._base.Error
+CancelledError = concurrent.futures.CancelledError
+TimeoutError = concurrent.futures.TimeoutError
+
+STACK_DEBUG = logging.DEBUG - 1  # heavy-duty debugging
+
+
+class InvalidStateError(Error):
+    """The operation is not allowed in this state."""
+    # TODO: Show the future, its state, the method, and the required state.
+
+
+class _TracebackLogger:
+    """Helper to log a traceback upon destruction if not cleared.
+
+    This solves a nasty problem with Futures and Tasks that have an
+    exception set: if nobody asks for the exception, the exception is
+    never logged.  This violates the Zen of Python: 'Errors should
+    never pass silently.  Unless explicitly silenced.'
+
+    However, we don't want to log the exception as soon as
+    set_exception() is called: if the calling code is written
+    properly, it will get the exception and handle it properly.  But
+    we *do* want to log it if result() or exception() was never called
+    -- otherwise developers waste a lot of time wondering why their
+    buggy code fails silently.
+
+    An earlier attempt added a __del__() method to the Future class
+    itself, but this backfired because the presence of __del__()
+    prevents garbage collection from breaking cycles.  A way out of
+    this catch-22 is to avoid having a __del__() method on the Future
+    class itself, but instead to have a reference to a helper object
+    with a __del__() method that logs the traceback, where we ensure
+    that the helper object doesn't participate in cycles, and only the
+    Future has a reference to it.
+
+    The helper object is added when set_exception() is called.  When
+    the Future is collected, and the helper is present, the helper
+    object is also collected, and its __del__() method will log the
+    traceback.  When the Future's result() or exception() method is
+    called (and a helper object is present), it removes the the helper
+    object, after calling its clear() method to prevent it from
+    logging.
+
+    One downside is that we do a fair amount of work to extract the
+    traceback from the exception, even when it is never logged.  It
+    would seem cheaper to just store the exception object, but that
+    references the traceback, which references stack frames, which may
+    reference the Future, which references the _TracebackLogger, and
+    then the _TracebackLogger would be included in a cycle, which is
+    what we're trying to avoid!  As an optimization, we don't
+    immediately format the exception; we only do the work when
+    activate() is called, which call is delayed until after all the
+    Future's callbacks have run.  Since usually a Future has at least
+    one callback (typically set by 'yield from') and usually that
+    callback extracts the callback, thereby removing the need to
+    format the exception.
+
+    PS. I don't claim credit for this solution.  I first heard of it
+    in a discussion about closing files when they are collected.
+    """
+
+    __slots__ = ['exc', 'tb']
+
+    def __init__(self, exc):
+        self.exc = exc
+        self.tb = None
+
+    def activate(self):
+        exc = self.exc
+        if exc is not None:
+            self.exc = None
+            self.tb = traceback.format_exception(exc.__class__, exc,
+                                                 exc.__traceback__)
+
+    def clear(self):
+        self.exc = None
+        self.tb = None
+
+    def __del__(self):
+        if self.tb:
+            logger.error('Future/Task exception was never retrieved:\n%s',
+                         ''.join(self.tb))
+
+
+class Future:
+    """This class is *almost* compatible with concurrent.futures.Future.
+
+    Differences:
+
+    - result() and exception() do not take a timeout argument and
+      raise an exception when the future isn't done yet.
+
+    - Callbacks registered with add_done_callback() are always called
+      via the event loop's call_soon_threadsafe().
+
+    - This class is not compatible with the wait() and as_completed()
+      methods in the concurrent.futures package.
+
+    (In Python 3.4 or later we may be able to unify the implementations.)
+    """
+
+    # Class variables serving as defaults for instance variables.
+    _state = _PENDING
+    _result = None
+    _exception = None
+    _loop = None
+
+    _blocking = False  # proper use of future (yield vs yield from)
+
+    _tb_logger = None
+
+    def __init__(self, *, loop=None):
+        """Initialize the future.
+
+        The optional event_loop argument allows to explicitly set the event
+        loop object used by the future. If it's not provided, the future uses
+        the default event loop.
+        """
+        if loop is None:
+            self._loop = events.get_event_loop()
+        else:
+            self._loop = loop
+        self._callbacks = []
+
+    def __repr__(self):
+        res = self.__class__.__name__
+        if self._state == _FINISHED:
+            if self._exception is not None:
+                res += '<exception={!r}>'.format(self._exception)
+            else:
+                res += '<result={!r}>'.format(self._result)
+        elif self._callbacks:
+            size = len(self._callbacks)
+            if size > 2:
+                res += '<{}, [{}, <{} more>, {}]>'.format(
+                    self._state, self._callbacks[0],
+                    size-2, self._callbacks[-1])
+            else:
+                res += '<{}, {}>'.format(self._state, self._callbacks)
+        else:
+            res += '<{}>'.format(self._state)
+        return res
+
+    def cancel(self):
+        """Cancel the future and schedule callbacks.
+
+        If the future is already done or cancelled, return False.  Otherwise,
+        change the future's state to cancelled, schedule the callbacks and
+        return True.
+        """
+        if self._state != _PENDING:
+            return False
+        self._state = _CANCELLED
+        self._schedule_callbacks()
+        return True
+
+    def _schedule_callbacks(self):
+        """Internal: Ask the event loop to call all callbacks.
+
+        The callbacks are scheduled to be called as soon as possible. Also
+        clears the callback list.
+        """
+        callbacks = self._callbacks[:]
+        if not callbacks:
+            return
+
+        self._callbacks[:] = []
+        for callback in callbacks:
+            self._loop.call_soon(callback, self)
+
+    def cancelled(self):
+        """Return True if the future was cancelled."""
+        return self._state == _CANCELLED
+
+    # Don't implement running(); see http://bugs.python.org/issue18699
+
+    def done(self):
+        """Return True if the future is done.
+
+        Done means either that a result / exception are available, or that the
+        future was cancelled.
+        """
+        return self._state != _PENDING
+
+    def result(self):
+        """Return the result this future represents.
+
+        If the future has been cancelled, raises CancelledError.  If the
+        future's result isn't yet available, raises InvalidStateError.  If
+        the future is done and has an exception set, this exception is raised.
+        """
+        if self._state == _CANCELLED:
+            raise CancelledError
+        if self._state != _FINISHED:
+            raise InvalidStateError('Result is not ready.')
+        if self._tb_logger is not None:
+            self._tb_logger.clear()
+            self._tb_logger = None
+        if self._exception is not None:
+            raise self._exception
+        return self._result
+
+    def exception(self):
+        """Return the exception that was set on this future.
+
+        The exception (or None if no exception was set) is returned only if
+        the future is done.  If the future has been cancelled, raises
+        CancelledError.  If the future isn't done yet, raises
+        InvalidStateError.
+        """
+        if self._state == _CANCELLED:
+            raise CancelledError
+        if self._state != _FINISHED:
+            raise InvalidStateError('Exception is not set.')
+        if self._tb_logger is not None:
+            self._tb_logger.clear()
+            self._tb_logger = None
+        return self._exception
+
+    def add_done_callback(self, fn):
+        """Add a callback to be run when the future becomes done.
+
+        The callback is called with a single argument - the future object. If
+        the future is already done when this is called, the callback is
+        scheduled with call_soon.
+        """
+        if self._state != _PENDING:
+            self._loop.call_soon(fn, self)
+        else:
+            self._callbacks.append(fn)
+
+    # New method not in PEP 3148.
+
+    def remove_done_callback(self, fn):
+        """Remove all instances of a callback from the "call when done" list.
+
+        Returns the number of callbacks removed.
+        """
+        filtered_callbacks = [f for f in self._callbacks if f != fn]
+        removed_count = len(self._callbacks) - len(filtered_callbacks)
+        if removed_count:
+            self._callbacks[:] = filtered_callbacks
+        return removed_count
+
+    # So-called internal methods (note: no set_running_or_notify_cancel()).
+
+    def set_result(self, result):
+        """Mark the future done and set its result.
+
+        If the future is already done when this method is called, raises
+        InvalidStateError.
+        """
+        if self._state != _PENDING:
+            raise InvalidStateError('{}: {!r}'.format(self._state, self))
+        self._result = result
+        self._state = _FINISHED
+        self._schedule_callbacks()
+
+    def set_exception(self, exception):
+        """Mark the future done and set an exception.
+
+        If the future is already done when this method is called, raises
+        InvalidStateError.
+        """
+        if self._state != _PENDING:
+            raise InvalidStateError('{}: {!r}'.format(self._state, self))
+        self._exception = exception
+        self._tb_logger = _TracebackLogger(exception)
+        self._state = _FINISHED
+        self._schedule_callbacks()
+        # Arrange for the logger to be activated after all callbacks
+        # have had a chance to call result() or exception().
+        self._loop.call_soon(self._tb_logger.activate)
+
+    # Truly internal methods.
+
+    def _copy_state(self, other):
+        """Internal helper to copy state from another Future.
+
+        The other Future may be a concurrent.futures.Future.
+        """
+        assert other.done()
+        assert not self.done()
+        if other.cancelled():
+            self.cancel()
+        else:
+            exception = other.exception()
+            if exception is not None:
+                self.set_exception(exception)
+            else:
+                result = other.result()
+                self.set_result(result)
+
+    def __iter__(self):
+        if not self.done():
+            self._blocking = True
+            yield self  # This tells Task to wait for completion.
+        assert self.done(), "yield from wasn't used with future"
+        return self.result()  # May raise too.
+
+
+def wrap_future(fut, *, loop=None):
+    """Wrap concurrent.futures.Future object."""
+    if isinstance(fut, Future):
+        return fut
+
+    assert isinstance(fut, concurrent.futures.Future), \
+        'concurrent.futures.Future is expected, got {!r}'.format(fut)
+
+    if loop is None:
+        loop = events.get_event_loop()
+
+    new_future = Future(loop=loop)
+    fut.add_done_callback(
+        lambda future: loop.call_soon_threadsafe(
+            new_future._copy_state, fut))
+    return new_future
diff --git a/Lib/asyncio/locks.py b/Lib/asyncio/locks.py
new file mode 100644
index 0000000..ac851e5
--- /dev/null
+++ b/Lib/asyncio/locks.py
@@ -0,0 +1,431 @@
+"""Synchronization primitives."""
+
+__all__ = ['Lock', 'Event', 'Condition', 'Semaphore']
+
+import collections
+
+from . import events
+from . import futures
+from . import tasks
+
+
+class Lock:
+    """Primitive lock objects.
+
+    A primitive lock is a synchronization primitive that is not owned
+    by a particular coroutine when locked.  A primitive lock is in one
+    of two states, 'locked' or 'unlocked'.
+
+    It is created in the unlocked state.  It has two basic methods,
+    acquire() and release().  When the state is unlocked, acquire()
+    changes the state to locked and returns immediately.  When the
+    state is locked, acquire() blocks until a call to release() in
+    another coroutine changes it to unlocked, then the acquire() call
+    resets it to locked and returns.  The release() method should only
+    be called in the locked state; it changes the state to unlocked
+    and returns immediately.  If an attempt is made to release an
+    unlocked lock, a RuntimeError will be raised.
+
+    When more than one coroutine is blocked in acquire() waiting for
+    the state to turn to unlocked, only one coroutine proceeds when a
+    release() call resets the state to unlocked; first coroutine which
+    is blocked in acquire() is being processed.
+
+    acquire() is a coroutine and should be called with 'yield from'.
+
+    Locks also support the context manager protocol.  '(yield from lock)'
+    should be used as context manager expression.
+
+    Usage:
+
+        lock = Lock()
+        ...
+        yield from lock
+        try:
+            ...
+        finally:
+            lock.release()
+
+    Context manager usage:
+
+        lock = Lock()
+        ...
+        with (yield from lock):
+             ...
+
+    Lock objects can be tested for locking state:
+
+        if not lock.locked():
+           yield from lock
+        else:
+           # lock is acquired
+           ...
+
+    """
+
+    def __init__(self, *, loop=None):
+        self._waiters = collections.deque()
+        self._locked = False
+        if loop is not None:
+            self._loop = loop
+        else:
+            self._loop = events.get_event_loop()
+
+    def __repr__(self):
+        res = super().__repr__()
+        extra = 'locked' if self._locked else 'unlocked'
+        if self._waiters:
+            extra = '{},waiters:{}'.format(extra, len(self._waiters))
+        return '<{} [{}]>'.format(res[1:-1], extra)
+
+    def locked(self):
+        """Return true if lock is acquired."""
+        return self._locked
+
+    @tasks.coroutine
+    def acquire(self):
+        """Acquire a lock.
+
+        This method blocks until the lock is unlocked, then sets it to
+        locked and returns True.
+        """
+        if not self._waiters and not self._locked:
+            self._locked = True
+            return True
+
+        fut = futures.Future(loop=self._loop)
+        self._waiters.append(fut)
+        try:
+            yield from fut
+            self._locked = True
+            return True
+        finally:
+            self._waiters.remove(fut)
+
+    def release(self):
+        """Release a lock.
+
+        When the lock is locked, reset it to unlocked, and return.
+        If any other coroutines are blocked waiting for the lock to become
+        unlocked, allow exactly one of them to proceed.
+
+        When invoked on an unlocked lock, a RuntimeError is raised.
+
+        There is no return value.
+        """
+        if self._locked:
+            self._locked = False
+            # Wake up the first waiter who isn't cancelled.
+            for fut in self._waiters:
+                if not fut.done():
+                    fut.set_result(True)
+                    break
+        else:
+            raise RuntimeError('Lock is not acquired.')
+
+    def __enter__(self):
+        if not self._locked:
+            raise RuntimeError(
+                '"yield from" should be used as context manager expression')
+        return True
+
+    def __exit__(self, *args):
+        self.release()
+
+    def __iter__(self):
+        yield from self.acquire()
+        return self
+
+
+class Event:
+    """An Event implementation, our equivalent to threading.Event.
+
+    Class implementing event objects. An event manages a flag that can be set
+    to true with the set() method and reset to false with the clear() method.
+    The wait() method blocks until the flag is true. The flag is initially
+    false.
+    """
+
+    def __init__(self, *, loop=None):
+        self._waiters = collections.deque()
+        self._value = False
+        if loop is not None:
+            self._loop = loop
+        else:
+            self._loop = events.get_event_loop()
+
+    def __repr__(self):
+        res = super().__repr__()
+        extra = 'set' if self._value else 'unset'
+        if self._waiters:
+            extra = '{},waiters:{}'.format(extra, len(self._waiters))
+        return '<{} [{}]>'.format(res[1:-1], extra)
+
+    def is_set(self):
+        """Return true if and only if the internal flag is true."""
+        return self._value
+
+    def set(self):
+        """Set the internal flag to true. All coroutines waiting for it to
+        become true are awakened. Coroutine that call wait() once the flag is
+        true will not block at all.
+        """
+        if not self._value:
+            self._value = True
+
+            for fut in self._waiters:
+                if not fut.done():
+                    fut.set_result(True)
+
+    def clear(self):
+        """Reset the internal flag to false. Subsequently, coroutines calling
+        wait() will block until set() is called to set the internal flag
+        to true again."""
+        self._value = False
+
+    @tasks.coroutine
+    def wait(self):
+        """Block until the internal flag is true.
+
+        If the internal flag is true on entry, return True
+        immediately.  Otherwise, block until another coroutine calls
+        set() to set the flag to true, then return True.
+        """
+        if self._value:
+            return True
+
+        fut = futures.Future(loop=self._loop)
+        self._waiters.append(fut)
+        try:
+            yield from fut
+            return True
+        finally:
+            self._waiters.remove(fut)
+
+
+class Condition:
+    """A Condition implementation, our equivalent to threading.Condition.
+
+    This class implements condition variable objects. A condition variable
+    allows one or more coroutines to wait until they are notified by another
+    coroutine.
+
+    A new Lock object is created and used as the underlying lock.
+    """
+
+    def __init__(self, *, loop=None):
+        if loop is not None:
+            self._loop = loop
+        else:
+            self._loop = events.get_event_loop()
+
+        # Lock as an attribute as in threading.Condition.
+        lock = Lock(loop=self._loop)
+        self._lock = lock
+        # Export the lock's locked(), acquire() and release() methods.
+        self.locked = lock.locked
+        self.acquire = lock.acquire
+        self.release = lock.release
+
+        self._waiters = collections.deque()
+
+    def __repr__(self):
+        res = super().__repr__()
+        extra = 'locked' if self.locked() else 'unlocked'
+        if self._waiters:
+            extra = '{},waiters:{}'.format(extra, len(self._waiters))
+        return '<{} [{}]>'.format(res[1:-1], extra)
+
+    @tasks.coroutine
+    def wait(self):
+        """Wait until notified.
+
+        If the calling coroutine has not acquired the lock when this
+        method is called, a RuntimeError is raised.
+
+        This method releases the underlying lock, and then blocks
+        until it is awakened by a notify() or notify_all() call for
+        the same condition variable in another coroutine.  Once
+        awakened, it re-acquires the lock and returns True.
+        """
+        if not self.locked():
+            raise RuntimeError('cannot wait on un-acquired lock')
+
+        keep_lock = True
+        self.release()
+        try:
+            fut = futures.Future(loop=self._loop)
+            self._waiters.append(fut)
+            try:
+                yield from fut
+                return True
+            finally:
+                self._waiters.remove(fut)
+
+        except GeneratorExit:
+            keep_lock = False  # Prevent yield in finally clause.
+            raise
+        finally:
+            if keep_lock:
+                yield from self.acquire()
+
+    @tasks.coroutine
+    def wait_for(self, predicate):
+        """Wait until a predicate becomes true.
+
+        The predicate should be a callable which result will be
+        interpreted as a boolean value.  The final predicate value is
+        the return value.
+        """
+        result = predicate()
+        while not result:
+            yield from self.wait()
+            result = predicate()
+        return result
+
+    def notify(self, n=1):
+        """By default, wake up one coroutine waiting on this condition, if any.
+        If the calling coroutine has not acquired the lock when this method
+        is called, a RuntimeError is raised.
+
+        This method wakes up at most n of the coroutines waiting for the
+        condition variable; it is a no-op if no coroutines are waiting.
+
+        Note: an awakened coroutine does not actually return from its
+        wait() call until it can reacquire the lock. Since notify() does
+        not release the lock, its caller should.
+        """
+        if not self.locked():
+            raise RuntimeError('cannot notify on un-acquired lock')
+
+        idx = 0
+        for fut in self._waiters:
+            if idx >= n:
+                break
+
+            if not fut.done():
+                idx += 1
+                fut.set_result(False)
+
+    def notify_all(self):
+        """Wake up all threads waiting on this condition. This method acts
+        like notify(), but wakes up all waiting threads instead of one. If the
+        calling thread has not acquired the lock when this method is called,
+        a RuntimeError is raised.
+        """
+        self.notify(len(self._waiters))
+
+    def __enter__(self):
+        return self._lock.__enter__()
+
+    def __exit__(self, *args):
+        return self._lock.__exit__(*args)
+
+    def __iter__(self):
+        yield from self.acquire()
+        return self
+
+
+class Semaphore:
+    """A Semaphore implementation.
+
+    A semaphore manages an internal counter which is decremented by each
+    acquire() call and incremented by each release() call. The counter
+    can never go below zero; when acquire() finds that it is zero, it blocks,
+    waiting until some other thread calls release().
+
+    Semaphores also support the context manager protocol.
+
+    The first optional argument gives the initial value for the internal
+    counter; it defaults to 1. If the value given is less than 0,
+    ValueError is raised.
+
+    The second optional argument determines if the semaphore can be released
+    more than initial internal counter value; it defaults to False. If the
+    value given is True and number of release() is more than number of
+    successful acquire() calls ValueError is raised.
+    """
+
+    def __init__(self, value=1, bound=False, *, loop=None):
+        if value < 0:
+            raise ValueError("Semaphore initial value must be > 0")
+        self._value = value
+        self._bound = bound
+        self._bound_value = value
+        self._waiters = collections.deque()
+        self._locked = False
+        if loop is not None:
+            self._loop = loop
+        else:
+            self._loop = events.get_event_loop()
+
+    def __repr__(self):
+        res = super().__repr__()
+        extra = 'locked' if self._locked else 'unlocked,value:{}'.format(
+            self._value)
+        if self._waiters:
+            extra = '{},waiters:{}'.format(extra, len(self._waiters))
+        return '<{} [{}]>'.format(res[1:-1], extra)
+
+    def locked(self):
+        """Returns True if semaphore can not be acquired immediately."""
+        return self._locked
+
+    @tasks.coroutine
+    def acquire(self):
+        """Acquire a semaphore.
+
+        If the internal counter is larger than zero on entry,
+        decrement it by one and return True immediately.  If it is
+        zero on entry, block, waiting until some other coroutine has
+        called release() to make it larger than 0, and then return
+        True.
+        """
+        if not self._waiters and self._value > 0:
+            self._value -= 1
+            if self._value == 0:
+                self._locked = True
+            return True
+
+        fut = futures.Future(loop=self._loop)
+        self._waiters.append(fut)
+        try:
+            yield from fut
+            self._value -= 1
+            if self._value == 0:
+                self._locked = True
+            return True
+        finally:
+            self._waiters.remove(fut)
+
+    def release(self):
+        """Release a semaphore, incrementing the internal counter by one.
+        When it was zero on entry and another coroutine is waiting for it to
+        become larger than zero again, wake up that coroutine.
+
+        If Semaphore is created with "bound" parameter equals true, then
+        release() method checks to make sure its current value doesn't exceed
+        its initial value. If it does, ValueError is raised.
+        """
+        if self._bound and self._value >= self._bound_value:
+            raise ValueError('Semaphore released too many times')
+
+        self._value += 1
+        self._locked = False
+
+        for waiter in self._waiters:
+            if not waiter.done():
+                waiter.set_result(True)
+                break
+
+    def __enter__(self):
+        # TODO: This is questionable.  How do we know the user actually
+        # wrote "with (yield from sema)" instead of "with sema"?
+        return True
+
+    def __exit__(self, *args):
+        self.release()
+
+    def __iter__(self):
+        yield from self.acquire()
+        return self
diff --git a/Lib/asyncio/log.py b/Lib/asyncio/log.py
new file mode 100644
index 0000000..23a7074
--- /dev/null
+++ b/Lib/asyncio/log.py
@@ -0,0 +1,7 @@
+"""Logging configuration."""
+
+import logging
+
+
+# Name the logger after the package.
+logger = logging.getLogger(__package__)
diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py
new file mode 100644
index 0000000..ce226b9
--- /dev/null
+++ b/Lib/asyncio/proactor_events.py
@@ -0,0 +1,360 @@
+"""Event loop using a proactor and related classes.
+
+A proactor is a "notify-on-completion" multiplexer.  Currently a
+proactor is only implemented on Windows with IOCP.
+"""
+
+import socket
+
+from . import base_events
+from . import constants
+from . import futures
+from . import transports
+from .log import logger
+
+
+class _ProactorBasePipeTransport(transports.BaseTransport):
+    """Base class for pipe and socket transports."""
+
+    def __init__(self, loop, sock, protocol, waiter=None,
+                 extra=None, server=None):
+        super().__init__(extra)
+        self._set_extra(sock)
+        self._loop = loop
+        self._sock = sock
+        self._protocol = protocol
+        self._server = server
+        self._buffer = []
+        self._read_fut = None
+        self._write_fut = None
+        self._conn_lost = 0
+        self._closing = False  # Set when close() called.
+        self._eof_written = False
+        if self._server is not None:
+            self._server.attach(self)
+        self._loop.call_soon(self._protocol.connection_made, self)
+        if waiter is not None:
+            self._loop.call_soon(waiter.set_result, None)
+
+    def _set_extra(self, sock):
+        self._extra['pipe'] = sock
+
+    def close(self):
+        if self._closing:
+            return
+        self._closing = True
+        self._conn_lost += 1
+        if not self._buffer and self._write_fut is None:
+            self._loop.call_soon(self._call_connection_lost, None)
+        if self._read_fut is not None:
+            self._read_fut.cancel()
+
+    def _fatal_error(self, exc):
+        logger.exception('Fatal error for %s', self)
+        self._force_close(exc)
+
+    def _force_close(self, exc):
+        if self._closing:
+            return
+        self._closing = True
+        self._conn_lost += 1
+        if self._write_fut:
+            self._write_fut.cancel()
+        if self._read_fut:
+            self._read_fut.cancel()
+        self._write_fut = self._read_fut = None
+        self._buffer = []
+        self._loop.call_soon(self._call_connection_lost, exc)
+
+    def _call_connection_lost(self, exc):
+        try:
+            self._protocol.connection_lost(exc)
+        finally:
+            # XXX If there is a pending overlapped read on the other
+            # end then it may fail with ERROR_NETNAME_DELETED if we
+            # just close our end.  First calling shutdown() seems to
+            # cure it, but maybe using DisconnectEx() would be better.
+            if hasattr(self._sock, 'shutdown'):
+                self._sock.shutdown(socket.SHUT_RDWR)
+            self._sock.close()
+            server = self._server
+            if server is not None:
+                server.detach(self)
+                self._server = None
+
+
+class _ProactorReadPipeTransport(_ProactorBasePipeTransport,
+                                 transports.ReadTransport):
+    """Transport for read pipes."""
+
+    def __init__(self, loop, sock, protocol, waiter=None,
+                 extra=None, server=None):
+        super().__init__(loop, sock, protocol, waiter, extra, server)
+        self._read_fut = None
+        self._paused = False
+        self._loop.call_soon(self._loop_reading)
+
+    def pause_reading(self):
+        assert not self._closing, 'Cannot pause_reading() when closing'
+        assert not self._paused, 'Already paused'
+        self._paused = True
+
+    def resume_reading(self):
+        assert self._paused, 'Not paused'
+        self._paused = False
+        if self._closing:
+            return
+        self._loop.call_soon(self._loop_reading, self._read_fut)
+
+    def _loop_reading(self, fut=None):
+        if self._paused:
+            return
+        data = None
+
+        try:
+            if fut is not None:
+                assert self._read_fut is fut or (self._read_fut is None and
+                                                 self._closing)
+                self._read_fut = None
+                data = fut.result()  # deliver data later in "finally" clause
+
+            if self._closing:
+                # since close() has been called we ignore any read data
+                data = None
+                return
+
+            if data == b'':
+                # we got end-of-file so no need to reschedule a new read
+                return
+
+            # reschedule a new read
+            self._read_fut = self._loop._proactor.recv(self._sock, 4096)
+        except ConnectionAbortedError as exc:
+            if not self._closing:
+                self._fatal_error(exc)
+        except ConnectionResetError as exc:
+            self._force_close(exc)
+        except OSError as exc:
+            self._fatal_error(exc)
+        except futures.CancelledError:
+            if not self._closing:
+                raise
+        else:
+            self._read_fut.add_done_callback(self._loop_reading)
+        finally:
+            if data:
+                self._protocol.data_received(data)
+            elif data is not None:
+                keep_open = self._protocol.eof_received()
+                if not keep_open:
+                    self.close()
+
+
+class _ProactorWritePipeTransport(_ProactorBasePipeTransport,
+                                  transports.WriteTransport):
+    """Transport for write pipes."""
+
+    def write(self, data):
+        assert isinstance(data, bytes), repr(data)
+        if self._eof_written:
+            raise IOError('write_eof() already called')
+
+        if not data:
+            return
+
+        if self._conn_lost:
+            if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES:
+                logger.warning('socket.send() raised exception.')
+            self._conn_lost += 1
+            return
+        self._buffer.append(data)
+        if self._write_fut is None:
+            self._loop_writing()
+
+    def _loop_writing(self, f=None):
+        try:
+            assert f is self._write_fut
+            self._write_fut = None
+            if f:
+                f.result()
+            data = b''.join(self._buffer)
+            self._buffer = []
+            if not data:
+                if self._closing:
+                    self._loop.call_soon(self._call_connection_lost, None)
+                if self._eof_written:
+                    self._sock.shutdown(socket.SHUT_WR)
+                return
+            self._write_fut = self._loop._proactor.send(self._sock, data)
+            self._write_fut.add_done_callback(self._loop_writing)
+        except ConnectionResetError as exc:
+            self._force_close(exc)
+        except OSError as exc:
+            self._fatal_error(exc)
+
+    def can_write_eof(self):
+        return True
+
+    def write_eof(self):
+        self.close()
+
+    def abort(self):
+        self._force_close(None)
+
+
+class _ProactorDuplexPipeTransport(_ProactorReadPipeTransport,
+                                   _ProactorWritePipeTransport,
+                                   transports.Transport):
+    """Transport for duplex pipes."""
+
+    def can_write_eof(self):
+        return False
+
+    def write_eof(self):
+        raise NotImplementedError
+
+
+class _ProactorSocketTransport(_ProactorReadPipeTransport,
+                               _ProactorWritePipeTransport,
+                               transports.Transport):
+    """Transport for connected sockets."""
+
+    def _set_extra(self, sock):
+        self._extra['socket'] = sock
+        try:
+            self._extra['sockname'] = sock.getsockname()
+        except (socket.error, AttributeError):
+            pass
+        if 'peername' not in self._extra:
+            try:
+                self._extra['peername'] = sock.getpeername()
+            except (socket.error, AttributeError):
+                pass
+
+    def can_write_eof(self):
+        return True
+
+    def write_eof(self):
+        if self._closing or self._eof_written:
+            return
+        self._eof_written = True
+        if self._write_fut is None:
+            self._sock.shutdown(socket.SHUT_WR)
+
+
+class BaseProactorEventLoop(base_events.BaseEventLoop):
+
+    def __init__(self, proactor):
+        super().__init__()
+        logger.debug('Using proactor: %s', proactor.__class__.__name__)
+        self._proactor = proactor
+        self._selector = proactor   # convenient alias
+        proactor.set_loop(self)
+        self._make_self_pipe()
+
+    def _make_socket_transport(self, sock, protocol, waiter=None,
+                               extra=None, server=None):
+        return _ProactorSocketTransport(self, sock, protocol, waiter,
+                                        extra, server)
+
+    def _make_duplex_pipe_transport(self, sock, protocol, waiter=None,
+                                    extra=None):
+        return _ProactorDuplexPipeTransport(self,
+                                            sock, protocol, waiter, extra)
+
+    def _make_read_pipe_transport(self, sock, protocol, waiter=None,
+                                  extra=None):
+        return _ProactorReadPipeTransport(self, sock, protocol, waiter, extra)
+
+    def _make_write_pipe_transport(self, sock, protocol, waiter=None,
+                                   extra=None, check_for_hangup=True):
+        if check_for_hangup:
+            # We want connection_lost() to be called when other end closes
+            return _ProactorDuplexPipeTransport(self,
+                                                sock, protocol, waiter, extra)
+        else:
+            # If other end closes we may not notice for a long time
+            return _ProactorWritePipeTransport(self, sock, protocol, waiter,
+                                               extra)
+
+    def close(self):
+        if self._proactor is not None:
+            self._close_self_pipe()
+            self._proactor.close()
+            self._proactor = None
+            self._selector = None
+            super().close()
+
+    def sock_recv(self, sock, n):
+        return self._proactor.recv(sock, n)
+
+    def sock_sendall(self, sock, data):
+        return self._proactor.send(sock, data)
+
+    def sock_connect(self, sock, address):
+        return self._proactor.connect(sock, address)
+
+    def sock_accept(self, sock):
+        return self._proactor.accept(sock)
+
+    def _socketpair(self):
+        raise NotImplementedError
+
+    def _close_self_pipe(self):
+        self._ssock.close()
+        self._ssock = None
+        self._csock.close()
+        self._csock = None
+        self._internal_fds -= 1
+
+    def _make_self_pipe(self):
+        # A self-socket, really. :-)
+        self._ssock, self._csock = self._socketpair()
+        self._ssock.setblocking(False)
+        self._csock.setblocking(False)
+        self._internal_fds += 1
+        self.call_soon(self._loop_self_reading)
+
+    def _loop_self_reading(self, f=None):
+        try:
+            if f is not None:
+                f.result()  # may raise
+            f = self._proactor.recv(self._ssock, 4096)
+        except:
+            self.close()
+            raise
+        else:
+            f.add_done_callback(self._loop_self_reading)
+
+    def _write_to_self(self):
+        self._csock.send(b'x')
+
+    def _start_serving(self, protocol_factory, sock, ssl=None, server=None):
+        assert not ssl, 'IocpEventLoop is incompatible with SSL.'
+
+        def loop(f=None):
+            try:
+                if f is not None:
+                    conn, addr = f.result()
+                    protocol = protocol_factory()
+                    self._make_socket_transport(
+                        conn, protocol,
+                        extra={'peername': addr}, server=server)
+                f = self._proactor.accept(sock)
+            except OSError:
+                if sock.fileno() != -1:
+                    logger.exception('Accept failed')
+                    sock.close()
+            except futures.CancelledError:
+                sock.close()
+            else:
+                f.add_done_callback(loop)
+
+        self.call_soon(loop)
+
+    def _process_events(self, event_list):
+        pass    # XXX hard work currently done in poll
+
+    def _stop_serving(self, sock):
+        self._proactor._stop_serving(sock)
+        sock.close()
diff --git a/Lib/asyncio/protocols.py b/Lib/asyncio/protocols.py
new file mode 100644
index 0000000..d3a8685
--- /dev/null
+++ b/Lib/asyncio/protocols.py
@@ -0,0 +1,126 @@
+"""Abstract Protocol class."""
+
+__all__ = ['Protocol', 'DatagramProtocol']
+
+
+class BaseProtocol:
+    """ABC for base protocol class.
+
+    Usually user implements protocols that derived from BaseProtocol
+    like Protocol or ProcessProtocol.
+
+    The only case when BaseProtocol should be implemented directly is
+    write-only transport like write pipe
+    """
+
+    def connection_made(self, transport):
+        """Called when a connection is made.
+
+        The argument is the transport representing the pipe connection.
+        To receive data, wait for data_received() calls.
+        When the connection is closed, connection_lost() is called.
+        """
+
+    def connection_lost(self, exc):
+        """Called when the connection is lost or closed.
+
+        The argument is an exception object or None (the latter
+        meaning a regular EOF is received or the connection was
+        aborted or closed).
+        """
+
+    def pause_writing(self):
+        """Called when the transport's buffer goes over the high-water mark.
+
+        Pause and resume calls are paired -- pause_writing() is called
+        once when the buffer goes strictly over the high-water mark
+        (even if subsequent writes increases the buffer size even
+        more), and eventually resume_writing() is called once when the
+        buffer size reaches the low-water mark.
+
+        Note that if the buffer size equals the high-water mark,
+        pause_writing() is not called -- it must go strictly over.
+        Conversely, resume_writing() is called when the buffer size is
+        equal or lower than the low-water mark.  These end conditions
+        are important to ensure that things go as expected when either
+        mark is zero.
+
+        NOTE: This is the only Protocol callback that is not called
+        through EventLoop.call_soon() -- if it were, it would have no
+        effect when it's most needed (when the app keeps writing
+        without yielding until pause_writing() is called).
+        """
+
+    def resume_writing(self):
+        """Called when the transport's buffer drains below the low-water mark.
+
+        See pause_writing() for details.
+        """
+
+
+class Protocol(BaseProtocol):
+    """ABC representing a protocol.
+
+    The user should implement this interface.  They can inherit from
+    this class but don't need to.  The implementations here do
+    nothing (they don't raise exceptions).
+
+    When the user wants to requests a transport, they pass a protocol
+    factory to a utility function (e.g., EventLoop.create_connection()).
+
+    When the connection is made successfully, connection_made() is
+    called with a suitable transport object.  Then data_received()
+    will be called 0 or more times with data (bytes) received from the
+    transport; finally, connection_lost() will be called exactly once
+    with either an exception object or None as an argument.
+
+    State machine of calls:
+
+      start -> CM [-> DR*] [-> ER?] -> CL -> end
+    """
+
+    def data_received(self, data):
+        """Called when some data is received.
+
+        The argument is a bytes object.
+        """
+
+    def eof_received(self):
+        """Called when the other end calls write_eof() or equivalent.
+
+        If this returns a false value (including None), the transport
+        will close itself.  If it returns a true value, closing the
+        transport is up to the protocol.
+        """
+
+
+class DatagramProtocol(BaseProtocol):
+    """ABC representing a datagram protocol."""
+
+    def datagram_received(self, data, addr):
+        """Called when some datagram is received."""
+
+    def connection_refused(self, exc):
+        """Connection is refused."""
+
+
+class SubprocessProtocol(BaseProtocol):
+    """ABC representing a protocol for subprocess calls."""
+
+    def pipe_data_received(self, fd, data):
+        """Called when subprocess write a data into stdout/stderr pipes.
+
+        fd is int file dascriptor.
+        data is bytes object.
+        """
+
+    def pipe_connection_lost(self, fd, exc):
+        """Called when a file descriptor associated with the child process is
+        closed.
+
+        fd is the int file descriptor that was closed.
+        """
+
+    def process_exited(self):
+        """Called when subprocess has exited.
+        """
diff --git a/Lib/asyncio/queues.py b/Lib/asyncio/queues.py
new file mode 100644
index 0000000..536de1c
--- /dev/null
+++ b/Lib/asyncio/queues.py
@@ -0,0 +1,284 @@
+"""Queues"""
+
+__all__ = ['Queue', 'PriorityQueue', 'LifoQueue', 'JoinableQueue',
+           'Full', 'Empty']
+
+import collections
+import heapq
+import queue
+
+from . import events
+from . import futures
+from . import locks
+from .tasks import coroutine
+
+
+# Re-export queue.Full and .Empty exceptions.
+Full = queue.Full
+Empty = queue.Empty
+
+
+class Queue:
+    """A queue, useful for coordinating producer and consumer coroutines.
+
+    If maxsize is less than or equal to zero, the queue size is infinite. If it
+    is an integer greater than 0, then "yield from put()" will block when the
+    queue reaches maxsize, until an item is removed by get().
+
+    Unlike the standard library Queue, you can reliably know this Queue's size
+    with qsize(), since your single-threaded Tulip application won't be
+    interrupted between calling qsize() and doing an operation on the Queue.
+    """
+
+    def __init__(self, maxsize=0, *, loop=None):
+        if loop is None:
+            self._loop = events.get_event_loop()
+        else:
+            self._loop = loop
+        self._maxsize = maxsize
+
+        # Futures.
+        self._getters = collections.deque()
+        # Pairs of (item, Future).
+        self._putters = collections.deque()
+        self._init(maxsize)
+
+    def _init(self, maxsize):
+        self._queue = collections.deque()
+
+    def _get(self):
+        return self._queue.popleft()
+
+    def _put(self, item):
+        self._queue.append(item)
+
+    def __repr__(self):
+        return '<{} at {:#x} {}>'.format(
+            type(self).__name__, id(self), self._format())
+
+    def __str__(self):
+        return '<{} {}>'.format(type(self).__name__, self._format())
+
+    def _format(self):
+        result = 'maxsize={!r}'.format(self._maxsize)
+        if getattr(self, '_queue', None):
+            result += ' _queue={!r}'.format(list(self._queue))
+        if self._getters:
+            result += ' _getters[{}]'.format(len(self._getters))
+        if self._putters:
+            result += ' _putters[{}]'.format(len(self._putters))
+        return result
+
+    def _consume_done_getters(self):
+        # Delete waiters at the head of the get() queue who've timed out.
+        while self._getters and self._getters[0].done():
+            self._getters.popleft()
+
+    def _consume_done_putters(self):
+        # Delete waiters at the head of the put() queue who've timed out.
+        while self._putters and self._putters[0][1].done():
+            self._putters.popleft()
+
+    def qsize(self):
+        """Number of items in the queue."""
+        return len(self._queue)
+
+    @property
+    def maxsize(self):
+        """Number of items allowed in the queue."""
+        return self._maxsize
+
+    def empty(self):
+        """Return True if the queue is empty, False otherwise."""
+        return not self._queue
+
+    def full(self):
+        """Return True if there are maxsize items in the queue.
+
+        Note: if the Queue was initialized with maxsize=0 (the default),
+        then full() is never True.
+        """
+        if self._maxsize <= 0:
+            return False
+        else:
+            return self.qsize() == self._maxsize
+
+    @coroutine
+    def put(self, item):
+        """Put an item into the queue.
+
+        If you yield from put(), wait until a free slot is available
+        before adding item.
+        """
+        self._consume_done_getters()
+        if self._getters:
+            assert not self._queue, (
+                'queue non-empty, why are getters waiting?')
+
+            getter = self._getters.popleft()
+
+            # Use _put and _get instead of passing item straight to getter, in
+            # case a subclass has logic that must run (e.g. JoinableQueue).
+            self._put(item)
+            getter.set_result(self._get())
+
+        elif self._maxsize > 0 and self._maxsize == self.qsize():
+            waiter = futures.Future(loop=self._loop)
+
+            self._putters.append((item, waiter))
+            yield from waiter
+
+        else:
+            self._put(item)
+
+    def put_nowait(self, item):
+        """Put an item into the queue without blocking.
+
+        If no free slot is immediately available, raise Full.
+        """
+        self._consume_done_getters()
+        if self._getters:
+            assert not self._queue, (
+                'queue non-empty, why are getters waiting?')
+
+            getter = self._getters.popleft()
+
+            # Use _put and _get instead of passing item straight to getter, in
+            # case a subclass has logic that must run (e.g. JoinableQueue).
+            self._put(item)
+            getter.set_result(self._get())
+
+        elif self._maxsize > 0 and self._maxsize == self.qsize():
+            raise Full
+        else:
+            self._put(item)
+
+    @coroutine
+    def get(self):
+        """Remove and return an item from the queue.
+
+        If you yield from get(), wait until a item is available.
+        """
+        self._consume_done_putters()
+        if self._putters:
+            assert self.full(), 'queue not full, why are putters waiting?'
+            item, putter = self._putters.popleft()
+            self._put(item)
+
+            # When a getter runs and frees up a slot so this putter can
+            # run, we need to defer the put for a tick to ensure that
+            # getters and putters alternate perfectly. See
+            # ChannelTest.test_wait.
+            self._loop.call_soon(putter.set_result, None)
+
+            return self._get()
+
+        elif self.qsize():
+            return self._get()
+        else:
+            waiter = futures.Future(loop=self._loop)
+
+            self._getters.append(waiter)
+            return (yield from waiter)
+
+    def get_nowait(self):
+        """Remove and return an item from the queue.
+
+        Return an item if one is immediately available, else raise Full.
+        """
+        self._consume_done_putters()
+        if self._putters:
+            assert self.full(), 'queue not full, why are putters waiting?'
+            item, putter = self._putters.popleft()
+            self._put(item)
+            # Wake putter on next tick.
+            putter.set_result(None)
+
+            return self._get()
+
+        elif self.qsize():
+            return self._get()
+        else:
+            raise Empty
+
+
+class PriorityQueue(Queue):
+    """A subclass of Queue; retrieves entries in priority order (lowest first).
+
+    Entries are typically tuples of the form: (priority number, data).
+    """
+
+    def _init(self, maxsize):
+        self._queue = []
+
+    def _put(self, item, heappush=heapq.heappush):
+        heappush(self._queue, item)
+
+    def _get(self, heappop=heapq.heappop):
+        return heappop(self._queue)
+
+
+class LifoQueue(Queue):
+    """A subclass of Queue that retrieves most recently added entries first."""
+
+    def _init(self, maxsize):
+        self._queue = []
+
+    def _put(self, item):
+        self._queue.append(item)
+
+    def _get(self):
+        return self._queue.pop()
+
+
+class JoinableQueue(Queue):
+    """A subclass of Queue with task_done() and join() methods."""
+
+    def __init__(self, maxsize=0, *, loop=None):
+        super().__init__(maxsize=maxsize, loop=loop)
+        self._unfinished_tasks = 0
+        self._finished = locks.Event(loop=self._loop)
+        self._finished.set()
+
+    def _format(self):
+        result = Queue._format(self)
+        if self._unfinished_tasks:
+            result += ' tasks={}'.format(self._unfinished_tasks)
+        return result
+
+    def _put(self, item):
+        super()._put(item)
+        self._unfinished_tasks += 1
+        self._finished.clear()
+
+    def task_done(self):
+        """Indicate that a formerly enqueued task is complete.
+
+        Used by queue consumers. For each get() used to fetch a task,
+        a subsequent call to task_done() tells the queue that the processing
+        on the task is complete.
+
+        If a join() is currently blocking, it will resume when all items have
+        been processed (meaning that a task_done() call was received for every
+        item that had been put() into the queue).
+
+        Raises ValueError if called more times than there were items placed in
+        the queue.
+        """
+        if self._unfinished_tasks <= 0:
+            raise ValueError('task_done() called too many times')
+        self._unfinished_tasks -= 1
+        if self._unfinished_tasks == 0:
+            self._finished.set()
+
+    @coroutine
+    def join(self):
+        """Block until all items in the queue have been gotten and processed.
+
+        The count of unfinished tasks goes up whenever an item is added to the
+        queue. The count goes down whenever a consumer thread calls task_done()
+        to indicate that the item was retrieved and all work on it is complete.
+        When the count of unfinished tasks drops to zero, join() unblocks.
+        """
+        if self._unfinished_tasks > 0:
+            yield from self._finished.wait()
diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py
new file mode 100644
index 0000000..3bad198
--- /dev/null
+++ b/Lib/asyncio/selector_events.py
@@ -0,0 +1,842 @@
+"""Event loop using a selector and related classes.
+
+A selector is a "notify-when-ready" multiplexer.  For a subclass which
+also includes support for signal handling, see the unix_events sub-module.
+"""
+
+import collections
+import errno
+import socket
+try:
+    import ssl
+except ImportError:  # pragma: no cover
+    ssl = None
+
+from . import base_events
+from . import constants
+from . import events
+from . import futures
+from . import selectors
+from . import transports
+from .log import logger
+
+
+class BaseSelectorEventLoop(base_events.BaseEventLoop):
+    """Selector event loop.
+
+    See events.EventLoop for API specification.
+    """
+
+    def __init__(self, selector=None):
+        super().__init__()
+
+        if selector is None:
+            selector = selectors.DefaultSelector()
+        logger.debug('Using selector: %s', selector.__class__.__name__)
+        self._selector = selector
+        self._make_self_pipe()
+
+    def _make_socket_transport(self, sock, protocol, waiter=None, *,
+                               extra=None, server=None):
+        return _SelectorSocketTransport(self, sock, protocol, waiter,
+                                        extra, server)
+
+    def _make_ssl_transport(self, rawsock, protocol, sslcontext, waiter, *,
+                            server_side=False, server_hostname=None,
+                            extra=None, server=None):
+        return _SelectorSslTransport(
+            self, rawsock, protocol, sslcontext, waiter,
+            server_side, server_hostname, extra, server)
+
+    def _make_datagram_transport(self, sock, protocol,
+                                 address=None, extra=None):
+        return _SelectorDatagramTransport(self, sock, protocol, address, extra)
+
+    def close(self):
+        if self._selector is not None:
+            self._close_self_pipe()
+            self._selector.close()
+            self._selector = None
+            super().close()
+
+    def _socketpair(self):
+        raise NotImplementedError
+
+    def _close_self_pipe(self):
+        self.remove_reader(self._ssock.fileno())
+        self._ssock.close()
+        self._ssock = None
+        self._csock.close()
+        self._csock = None
+        self._internal_fds -= 1
+
+    def _make_self_pipe(self):
+        # A self-socket, really. :-)
+        self._ssock, self._csock = self._socketpair()
+        self._ssock.setblocking(False)
+        self._csock.setblocking(False)
+        self._internal_fds += 1
+        self.add_reader(self._ssock.fileno(), self._read_from_self)
+
+    def _read_from_self(self):
+        try:
+            self._ssock.recv(1)
+        except (BlockingIOError, InterruptedError):
+            pass
+
+    def _write_to_self(self):
+        try:
+            self._csock.send(b'x')
+        except (BlockingIOError, InterruptedError):
+            pass
+
+    def _start_serving(self, protocol_factory, sock,
+                       sslcontext=None, server=None):
+        self.add_reader(sock.fileno(), self._accept_connection,
+                        protocol_factory, sock, sslcontext, server)
+
+    def _accept_connection(self, protocol_factory, sock,
+                           sslcontext=None, server=None):
+        try:
+            conn, addr = sock.accept()
+            conn.setblocking(False)
+        except (BlockingIOError, InterruptedError, ConnectionAbortedError):
+            pass  # False alarm.
+        except OSError as exc:
+            # There's nowhere to send the error, so just log it.
+            # TODO: Someone will want an error handler for this.
+            if exc.errno in (errno.EMFILE, errno.ENFILE,
+                             errno.ENOBUFS, errno.ENOMEM):
+                # Some platforms (e.g. Linux keep reporting the FD as
+                # ready, so we remove the read handler temporarily.
+                # We'll try again in a while.
+                logger.exception('Accept out of system resource (%s)', exc)
+                self.remove_reader(sock.fileno())
+                self.call_later(constants.ACCEPT_RETRY_DELAY,
+                                self._start_serving,
+                                protocol_factory, sock, sslcontext, server)
+            else:
+                raise  # The event loop will catch, log and ignore it.
+        else:
+            if sslcontext:
+                self._make_ssl_transport(
+                    conn, protocol_factory(), sslcontext, None,
+                    server_side=True, extra={'peername': addr}, server=server)
+            else:
+                self._make_socket_transport(
+                    conn, protocol_factory(), extra={'peername': addr},
+                    server=server)
+        # It's now up to the protocol to handle the connection.
+
+    def add_reader(self, fd, callback, *args):
+        """Add a reader callback."""
+        handle = events.make_handle(callback, args)
+        try:
+            key = self._selector.get_key(fd)
+        except KeyError:
+            self._selector.register(fd, selectors.EVENT_READ,
+                                    (handle, None))
+        else:
+            mask, (reader, writer) = key.events, key.data
+            self._selector.modify(fd, mask | selectors.EVENT_READ,
+                                  (handle, writer))
+            if reader is not None:
+                reader.cancel()
+
+    def remove_reader(self, fd):
+        """Remove a reader callback."""
+        try:
+            key = self._selector.get_key(fd)
+        except KeyError:
+            return False
+        else:
+            mask, (reader, writer) = key.events, key.data
+            mask &= ~selectors.EVENT_READ
+            if not mask:
+                self._selector.unregister(fd)
+            else:
+                self._selector.modify(fd, mask, (None, writer))
+
+            if reader is not None:
+                reader.cancel()
+                return True
+            else:
+                return False
+
+    def add_writer(self, fd, callback, *args):
+        """Add a writer callback.."""
+        handle = events.make_handle(callback, args)
+        try:
+            key = self._selector.get_key(fd)
+        except KeyError:
+            self._selector.register(fd, selectors.EVENT_WRITE,
+                                    (None, handle))
+        else:
+            mask, (reader, writer) = key.events, key.data
+            self._selector.modify(fd, mask | selectors.EVENT_WRITE,
+                                  (reader, handle))
+            if writer is not None:
+                writer.cancel()
+
+    def remove_writer(self, fd):
+        """Remove a writer callback."""
+        try:
+            key = self._selector.get_key(fd)
+        except KeyError:
+            return False
+        else:
+            mask, (reader, writer) = key.events, key.data
+            # Remove both writer and connector.
+            mask &= ~selectors.EVENT_WRITE
+            if not mask:
+                self._selector.unregister(fd)
+            else:
+                self._selector.modify(fd, mask, (reader, None))
+
+            if writer is not None:
+                writer.cancel()
+                return True
+            else:
+                return False
+
+    def sock_recv(self, sock, n):
+        """XXX"""
+        fut = futures.Future(loop=self)
+        self._sock_recv(fut, False, sock, n)
+        return fut
+
+    def _sock_recv(self, fut, registered, sock, n):
+        fd = sock.fileno()
+        if registered:
+            # Remove the callback early.  It should be rare that the
+            # selector says the fd is ready but the call still returns
+            # EAGAIN, and I am willing to take a hit in that case in
+            # order to simplify the common case.
+            self.remove_reader(fd)
+        if fut.cancelled():
+            return
+        try:
+            data = sock.recv(n)
+        except (BlockingIOError, InterruptedError):
+            self.add_reader(fd, self._sock_recv, fut, True, sock, n)
+        except Exception as exc:
+            fut.set_exception(exc)
+        else:
+            fut.set_result(data)
+
+    def sock_sendall(self, sock, data):
+        """XXX"""
+        fut = futures.Future(loop=self)
+        if data:
+            self._sock_sendall(fut, False, sock, data)
+        else:
+            fut.set_result(None)
+        return fut
+
+    def _sock_sendall(self, fut, registered, sock, data):
+        fd = sock.fileno()
+
+        if registered:
+            self.remove_writer(fd)
+        if fut.cancelled():
+            return
+
+        try:
+            n = sock.send(data)
+        except (BlockingIOError, InterruptedError):
+            n = 0
+        except Exception as exc:
+            fut.set_exception(exc)
+            return
+
+        if n == len(data):
+            fut.set_result(None)
+        else:
+            if n:
+                data = data[n:]
+            self.add_writer(fd, self._sock_sendall, fut, True, sock, data)
+
+    def sock_connect(self, sock, address):
+        """XXX"""
+        # That address better not require a lookup!  We're not calling
+        # self.getaddrinfo() for you here.  But verifying this is
+        # complicated; the socket module doesn't have a pattern for
+        # IPv6 addresses (there are too many forms, apparently).
+        fut = futures.Future(loop=self)
+        self._sock_connect(fut, False, sock, address)
+        return fut
+
+    def _sock_connect(self, fut, registered, sock, address):
+        # TODO: Use getaddrinfo() to look up the address, to avoid the
+        # trap of hanging the entire event loop when the address
+        # requires doing a DNS lookup.  (OTOH, the caller should
+        # already have done this, so it would be nice if we could
+        # easily tell whether the address needs looking up or not.  I
+        # know how to do this for IPv4, but IPv6 addresses have many
+        # syntaxes.)
+        fd = sock.fileno()
+        if registered:
+            self.remove_writer(fd)
+        if fut.cancelled():
+            return
+        try:
+            if not registered:
+                # First time around.
+                sock.connect(address)
+            else:
+                err = sock.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
+                if err != 0:
+                    # Jump to the except clause below.
+                    raise OSError(err, 'Connect call failed %s' % (address,))
+        except (BlockingIOError, InterruptedError):
+            self.add_writer(fd, self._sock_connect, fut, True, sock, address)
+        except Exception as exc:
+            fut.set_exception(exc)
+        else:
+            fut.set_result(None)
+
+    def sock_accept(self, sock):
+        """XXX"""
+        fut = futures.Future(loop=self)
+        self._sock_accept(fut, False, sock)
+        return fut
+
+    def _sock_accept(self, fut, registered, sock):
+        fd = sock.fileno()
+        if registered:
+            self.remove_reader(fd)
+        if fut.cancelled():
+            return
+        try:
+            conn, address = sock.accept()
+            conn.setblocking(False)
+        except (BlockingIOError, InterruptedError):
+            self.add_reader(fd, self._sock_accept, fut, True, sock)
+        except Exception as exc:
+            fut.set_exception(exc)
+        else:
+            fut.set_result((conn, address))
+
+    def _process_events(self, event_list):
+        for key, mask in event_list:
+            fileobj, (reader, writer) = key.fileobj, key.data
+            if mask & selectors.EVENT_READ and reader is not None:
+                if reader._cancelled:
+                    self.remove_reader(fileobj)
+                else:
+                    self._add_callback(reader)
+            if mask & selectors.EVENT_WRITE and writer is not None:
+                if writer._cancelled:
+                    self.remove_writer(fileobj)
+                else:
+                    self._add_callback(writer)
+
+    def _stop_serving(self, sock):
+        self.remove_reader(sock.fileno())
+        sock.close()
+
+
+class _SelectorTransport(transports.Transport):
+
+    max_size = 256 * 1024  # Buffer size passed to recv().
+
+    def __init__(self, loop, sock, protocol, extra, server=None):
+        super().__init__(extra)
+        self._extra['socket'] = sock
+        self._extra['sockname'] = sock.getsockname()
+        if 'peername' not in self._extra:
+            try:
+                self._extra['peername'] = sock.getpeername()
+            except socket.error:
+                self._extra['peername'] = None
+        self._loop = loop
+        self._sock = sock
+        self._sock_fd = sock.fileno()
+        self._protocol = protocol
+        self._server = server
+        self._buffer = collections.deque()
+        self._conn_lost = 0  # Set when call to connection_lost scheduled.
+        self._closing = False  # Set when close() called.
+        self._protocol_paused = False
+        self.set_write_buffer_limits()
+        if self._server is not None:
+            self._server.attach(self)
+
+    def abort(self):
+        self._force_close(None)
+
+    def close(self):
+        if self._closing:
+            return
+        self._closing = True
+        self._loop.remove_reader(self._sock_fd)
+        if not self._buffer:
+            self._conn_lost += 1
+            self._loop.call_soon(self._call_connection_lost, None)
+
+    def _fatal_error(self, exc):
+        # Should be called from exception handler only.
+        if not isinstance(exc, (BrokenPipeError, ConnectionResetError)):
+            logger.exception('Fatal error for %s', self)
+        self._force_close(exc)
+
+    def _force_close(self, exc):
+        if self._conn_lost:
+            return
+        if self._buffer:
+            self._buffer.clear()
+            self._loop.remove_writer(self._sock_fd)
+        if not self._closing:
+            self._closing = True
+            self._loop.remove_reader(self._sock_fd)
+        self._conn_lost += 1
+        self._loop.call_soon(self._call_connection_lost, exc)
+
+    def _call_connection_lost(self, exc):
+        try:
+            self._protocol.connection_lost(exc)
+        finally:
+            self._sock.close()
+            self._sock = None
+            self._protocol = None
+            self._loop = None
+            server = self._server
+            if server is not None:
+                server.detach(self)
+                self._server = None
+
+    def _maybe_pause_protocol(self):
+        size = self.get_write_buffer_size()
+        if size <= self._high_water:
+            return
+        if not self._protocol_paused:
+            self._protocol_paused = True
+            try:
+                self._protocol.pause_writing()
+            except Exception:
+                logger.exception('pause_writing() failed')
+
+    def _maybe_resume_protocol(self):
+        if (self._protocol_paused and
+            self.get_write_buffer_size() <= self._low_water):
+            self._protocol_paused = False
+            try:
+                self._protocol.resume_writing()
+            except Exception:
+                logger.exception('resume_writing() failed')
+
+    def set_write_buffer_limits(self, high=None, low=None):
+        if high is None:
+            if low is None:
+                high = 64*1024
+            else:
+                high = 4*low
+        if low is None:
+            low = high // 4
+        assert 0 <= low <= high, repr((low, high))
+        self._high_water = high
+        self._low_water = low
+
+    def get_write_buffer_size(self):
+        return sum(len(data) for data in self._buffer)
+
+
+class _SelectorSocketTransport(_SelectorTransport):
+
+    def __init__(self, loop, sock, protocol, waiter=None,
+                 extra=None, server=None):
+        super().__init__(loop, sock, protocol, extra, server)
+        self._eof = False
+        self._paused = False
+
+        self._loop.add_reader(self._sock_fd, self._read_ready)
+        self._loop.call_soon(self._protocol.connection_made, self)
+        if waiter is not None:
+            self._loop.call_soon(waiter.set_result, None)
+
+    def pause_reading(self):
+        assert not self._closing, 'Cannot pause_reading() when closing'
+        assert not self._paused, 'Already paused'
+        self._paused = True
+        self._loop.remove_reader(self._sock_fd)
+
+    def resume_reading(self):
+        assert self._paused, 'Not paused'
+        self._paused = False
+        if self._closing:
+            return
+        self._loop.add_reader(self._sock_fd, self._read_ready)
+
+    def _read_ready(self):
+        try:
+            data = self._sock.recv(self.max_size)
+        except (BlockingIOError, InterruptedError):
+            pass
+        except Exception as exc:
+            self._fatal_error(exc)
+        else:
+            if data:
+                self._protocol.data_received(data)
+            else:
+                keep_open = self._protocol.eof_received()
+                if keep_open:
+                    # We're keeping the connection open so the
+                    # protocol can write more, but we still can't
+                    # receive more, so remove the reader callback.
+                    self._loop.remove_reader(self._sock_fd)
+                else:
+                    self.close()
+
+    def write(self, data):
+        assert isinstance(data, bytes), repr(type(data))
+        assert not self._eof, 'Cannot call write() after write_eof()'
+        if not data:
+            return
+
+        if self._conn_lost:
+            if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES:
+                logger.warning('socket.send() raised exception.')
+            self._conn_lost += 1
+            return
+
+        if not self._buffer:
+            # Optimization: try to send now.
+            try:
+                n = self._sock.send(data)
+            except (BlockingIOError, InterruptedError):
+                pass
+            except Exception as exc:
+                self._fatal_error(exc)
+                return
+            else:
+                data = data[n:]
+                if not data:
+                    return
+            # Not all was written; register write handler.
+            self._loop.add_writer(self._sock_fd, self._write_ready)
+
+        # Add it to the buffer.
+        self._buffer.append(data)
+        self._maybe_pause_protocol()
+
+    def _write_ready(self):
+        data = b''.join(self._buffer)
+        assert data, 'Data should not be empty'
+
+        self._buffer.clear()  # Optimistically; may have to put it back later.
+        try:
+            n = self._sock.send(data)
+        except (BlockingIOError, InterruptedError):
+            self._buffer.append(data)  # Still need to write this.
+        except Exception as exc:
+            self._loop.remove_writer(self._sock_fd)
+            self._fatal_error(exc)
+        else:
+            data = data[n:]
+            if data:
+                self._buffer.append(data)  # Still need to write this.
+            self._maybe_resume_protocol()  # May append to buffer.
+            if not self._buffer:
+                self._loop.remove_writer(self._sock_fd)
+                if self._closing:
+                    self._call_connection_lost(None)
+                elif self._eof:
+                    self._sock.shutdown(socket.SHUT_WR)
+
+    def write_eof(self):
+        if self._eof:
+            return
+        self._eof = True
+        if not self._buffer:
+            self._sock.shutdown(socket.SHUT_WR)
+
+    def can_write_eof(self):
+        return True
+
+
+class _SelectorSslTransport(_SelectorTransport):
+
+    def __init__(self, loop, rawsock, protocol, sslcontext, waiter=None,
+                 server_side=False, server_hostname=None,
+                 extra=None, server=None):
+        if ssl is None:
+            raise RuntimeError('stdlib ssl module not available')
+
+        if server_side:
+            if not sslcontext:
+                raise ValueError('Server side ssl needs a valid SSLContext')
+        else:
+            if not sslcontext:
+                # Client side may pass ssl=True to use a default
+                # context; in that case the sslcontext passed is None.
+                # The default is the same as used by urllib with
+                # cadefault=True.
+                sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
+                sslcontext.options |= ssl.OP_NO_SSLv2
+                sslcontext.set_default_verify_paths()
+                sslcontext.verify_mode = ssl.CERT_REQUIRED
+
+        wrap_kwargs = {
+            'server_side': server_side,
+            'do_handshake_on_connect': False,
+        }
+        if server_hostname and not server_side and ssl.HAS_SNI:
+            wrap_kwargs['server_hostname'] = server_hostname
+        sslsock = sslcontext.wrap_socket(rawsock, **wrap_kwargs)
+
+        super().__init__(loop, sslsock, protocol, extra, server)
+
+        self._server_hostname = server_hostname
+        self._waiter = waiter
+        self._rawsock = rawsock
+        self._sslcontext = sslcontext
+        self._paused = False
+
+        # SSL-specific extra info.  (peercert is set later)
+        self._extra.update(sslcontext=sslcontext)
+
+        self._on_handshake()
+
+    def _on_handshake(self):
+        try:
+            self._sock.do_handshake()
+        except ssl.SSLWantReadError:
+            self._loop.add_reader(self._sock_fd, self._on_handshake)
+            return
+        except ssl.SSLWantWriteError:
+            self._loop.add_writer(self._sock_fd, self._on_handshake)
+            return
+        except Exception as exc:
+            self._loop.remove_reader(self._sock_fd)
+            self._loop.remove_writer(self._sock_fd)
+            self._sock.close()
+            if self._waiter is not None:
+                self._waiter.set_exception(exc)
+            return
+        except BaseException as exc:
+            self._loop.remove_reader(self._sock_fd)
+            self._loop.remove_writer(self._sock_fd)
+            self._sock.close()
+            if self._waiter is not None:
+                self._waiter.set_exception(exc)
+            raise
+
+        self._loop.remove_reader(self._sock_fd)
+        self._loop.remove_writer(self._sock_fd)
+
+        # Verify hostname if requested.
+        peercert = self._sock.getpeercert()
+        if (self._server_hostname and
+            self._sslcontext.verify_mode != ssl.CERT_NONE):
+            try:
+                ssl.match_hostname(peercert, self._server_hostname)
+            except Exception as exc:
+                self._sock.close()
+                if self._waiter is not None:
+                    self._waiter.set_exception(exc)
+                return
+
+        # Add extra info that becomes available after handshake.
+        self._extra.update(peercert=peercert,
+                           cipher=self._sock.cipher(),
+                           compression=self._sock.compression(),
+                           )
+
+        self._read_wants_write = False
+        self._write_wants_read = False
+        self._loop.add_reader(self._sock_fd, self._read_ready)
+        self._loop.call_soon(self._protocol.connection_made, self)
+        if self._waiter is not None:
+            self._loop.call_soon(self._waiter.set_result, None)
+
+    def pause_reading(self):
+        # XXX This is a bit icky, given the comment at the top of
+        # _read_ready().  Is it possible to evoke a deadlock?  I don't
+        # know, although it doesn't look like it; write() will still
+        # accept more data for the buffer and eventually the app will
+        # call resume_reading() again, and things will flow again.
+
+        assert not self._closing, 'Cannot pause_reading() when closing'
+        assert not self._paused, 'Already paused'
+        self._paused = True
+        self._loop.remove_reader(self._sock_fd)
+
+    def resume_reading(self):
+        assert self._paused, 'Not paused'
+        self._paused = False
+        if self._closing:
+            return
+        self._loop.add_reader(self._sock_fd, self._read_ready)
+
+    def _read_ready(self):
+        if self._write_wants_read:
+            self._write_wants_read = False
+            self._write_ready()
+
+            if self._buffer:
+                self._loop.add_writer(self._sock_fd, self._write_ready)
+
+        try:
+            data = self._sock.recv(self.max_size)
+        except (BlockingIOError, InterruptedError, ssl.SSLWantReadError):
+            pass
+        except ssl.SSLWantWriteError:
+            self._read_wants_write = True
+            self._loop.remove_reader(self._sock_fd)
+            self._loop.add_writer(self._sock_fd, self._write_ready)
+        except Exception as exc:
+            self._fatal_error(exc)
+        else:
+            if data:
+                self._protocol.data_received(data)
+            else:
+                try:
+                    keep_open = self._protocol.eof_received()
+                    if keep_open:
+                        logger.warning('returning true from eof_received() '
+                                       'has no effect when using ssl')
+                finally:
+                    self.close()
+
+    def _write_ready(self):
+        if self._read_wants_write:
+            self._read_wants_write = False
+            self._read_ready()
+
+            if not (self._paused or self._closing):
+                self._loop.add_reader(self._sock_fd, self._read_ready)
+
+        if self._buffer:
+            data = b''.join(self._buffer)
+            self._buffer.clear()
+            try:
+                n = self._sock.send(data)
+            except (BlockingIOError, InterruptedError,
+                    ssl.SSLWantWriteError):
+                n = 0
+            except ssl.SSLWantReadError:
+                n = 0
+                self._loop.remove_writer(self._sock_fd)
+                self._write_wants_read = True
+            except Exception as exc:
+                self._loop.remove_writer(self._sock_fd)
+                self._fatal_error(exc)
+                return
+
+            if n < len(data):
+                self._buffer.append(data[n:])
+
+        self._maybe_resume_protocol()  # May append to buffer.
+
+        if not self._buffer:
+            self._loop.remove_writer(self._sock_fd)
+            if self._closing:
+                self._call_connection_lost(None)
+
+    def write(self, data):
+        assert isinstance(data, bytes), repr(type(data))
+        if not data:
+            return
+
+        if self._conn_lost:
+            if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES:
+                logger.warning('socket.send() raised exception.')
+            self._conn_lost += 1
+            return
+
+        if not self._buffer:
+            self._loop.add_writer(self._sock_fd, self._write_ready)
+
+        # Add it to the buffer.
+        self._buffer.append(data)
+        self._maybe_pause_protocol()
+
+    def can_write_eof(self):
+        return False
+
+
+class _SelectorDatagramTransport(_SelectorTransport):
+
+    def __init__(self, loop, sock, protocol, address=None, extra=None):
+        super().__init__(loop, sock, protocol, extra)
+        self._address = address
+        self._loop.add_reader(self._sock_fd, self._read_ready)
+        self._loop.call_soon(self._protocol.connection_made, self)
+
+    def get_write_buffer_size(self):
+        return sum(len(data) for data, _ in self._buffer)
+
+    def _read_ready(self):
+        try:
+            data, addr = self._sock.recvfrom(self.max_size)
+        except (BlockingIOError, InterruptedError):
+            pass
+        except Exception as exc:
+            self._fatal_error(exc)
+        else:
+            self._protocol.datagram_received(data, addr)
+
+    def sendto(self, data, addr=None):
+        assert isinstance(data, bytes), repr(type(data))
+        if not data:
+            return
+
+        if self._address:
+            assert addr in (None, self._address)
+
+        if self._conn_lost and self._address:
+            if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES:
+                logger.warning('socket.send() raised exception.')
+            self._conn_lost += 1
+            return
+
+        if not self._buffer:
+            # Attempt to send it right away first.
+            try:
+                if self._address:
+                    self._sock.send(data)
+                else:
+                    self._sock.sendto(data, addr)
+                return
+            except (BlockingIOError, InterruptedError):
+                self._loop.add_writer(self._sock_fd, self._sendto_ready)
+            except ConnectionRefusedError as exc:
+                if self._address:
+                    self._fatal_error(exc)
+                return
+            except Exception as exc:
+                self._fatal_error(exc)
+                return
+
+        self._buffer.append((data, addr))
+        self._maybe_pause_protocol()
+
+    def _sendto_ready(self):
+        while self._buffer:
+            data, addr = self._buffer.popleft()
+            try:
+                if self._address:
+                    self._sock.send(data)
+                else:
+                    self._sock.sendto(data, addr)
+            except (BlockingIOError, InterruptedError):
+                self._buffer.appendleft((data, addr))  # Try again later.
+                break
+            except ConnectionRefusedError as exc:
+                if self._address:
+                    self._fatal_error(exc)
+                return
+            except Exception as exc:
+                self._fatal_error(exc)
+                return
+
+        self._maybe_resume_protocol()  # May append to buffer.
+        if not self._buffer:
+            self._loop.remove_writer(self._sock_fd)
+            if self._closing:
+                self._call_connection_lost(None)
+
+    def _force_close(self, exc):
+        if self._address and isinstance(exc, ConnectionRefusedError):
+            self._protocol.connection_refused(exc)
+        super()._force_close(exc)
diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py
new file mode 100644
index 0000000..e995368
--- /dev/null
+++ b/Lib/asyncio/streams.py
@@ -0,0 +1,349 @@
+"""Stream-related things."""
+
+__all__ = ['StreamReader', 'StreamReaderProtocol', 'open_connection']
+
+import collections
+
+from . import events
+from . import futures
+from . import protocols
+from . import tasks
+
+
+_DEFAULT_LIMIT = 2**16
+
+
+@tasks.coroutine
+def open_connection(host=None, port=None, *,
+                    loop=None, limit=_DEFAULT_LIMIT, **kwds):
+    """A wrapper for create_connection() returning a (reader, writer) pair.
+
+    The reader returned is a StreamReader instance; the writer is a
+    Transport.
+
+    The arguments are all the usual arguments to create_connection()
+    except protocol_factory; most common are positional host and port,
+    with various optional keyword arguments following.
+
+    Additional optional keyword arguments are loop (to set the event loop
+    instance to use) and limit (to set the buffer limit passed to the
+    StreamReader).
+
+    (If you want to customize the StreamReader and/or
+    StreamReaderProtocol classes, just copy the code -- there's
+    really nothing special here except some convenience.)
+    """
+    if loop is None:
+        loop = events.get_event_loop()
+    reader = StreamReader(limit=limit, loop=loop)
+    protocol = StreamReaderProtocol(reader)
+    transport, _ = yield from loop.create_connection(
+        lambda: protocol, host, port, **kwds)
+    writer = StreamWriter(transport, protocol, reader, loop)
+    return reader, writer
+
+
+class StreamReaderProtocol(protocols.Protocol):
+    """Trivial helper class to adapt between Protocol and StreamReader.
+
+    (This is a helper class instead of making StreamReader itself a
+    Protocol subclass, because the StreamReader has other potential
+    uses, and to prevent the user of the StreamReader to accidentally
+    call inappropriate methods of the protocol.)
+    """
+
+    def __init__(self, stream_reader):
+        self._stream_reader = stream_reader
+        self._drain_waiter = None
+        self._paused = False
+
+    def connection_made(self, transport):
+        self._stream_reader.set_transport(transport)
+
+    def connection_lost(self, exc):
+        if exc is None:
+            self._stream_reader.feed_eof()
+        else:
+            self._stream_reader.set_exception(exc)
+        # Also wake up the writing side.
+        if self._paused:
+            waiter = self._drain_waiter
+            if waiter is not None:
+                self._drain_waiter = None
+                if not waiter.done():
+                    if exc is None:
+                        waiter.set_result(None)
+                    else:
+                        waiter.set_exception(exc)
+
+    def data_received(self, data):
+        self._stream_reader.feed_data(data)
+
+    def eof_received(self):
+        self._stream_reader.feed_eof()
+
+    def pause_writing(self):
+        assert not self._paused
+        self._paused = True
+
+    def resume_writing(self):
+        assert self._paused
+        self._paused = False
+        waiter = self._drain_waiter
+        if waiter is not None:
+            self._drain_waiter = None
+            if not waiter.done():
+                waiter.set_result(None)
+
+
+class StreamWriter:
+    """Wraps a Transport.
+
+    This exposes write(), writelines(), [can_]write_eof(),
+    get_extra_info() and close().  It adds drain() which returns an
+    optional Future on which you can wait for flow control.  It also
+    adds a transport attribute which references the Transport
+    directly.
+    """
+
+    def __init__(self, transport, protocol, reader, loop):
+        self._transport = transport
+        self._protocol = protocol
+        self._reader = reader
+        self._loop = loop
+
+    @property
+    def transport(self):
+        return self._transport
+
+    def write(self, data):
+        self._transport.write(data)
+
+    def writelines(self, data):
+        self._transport.writelines(data)
+
+    def write_eof(self):
+        return self._transport.write_eof()
+
+    def can_write_eof(self):
+        return self._transport.can_write_eof()
+
+    def close(self):
+        return self._transport.close()
+
+    def get_extra_info(self, name, default=None):
+        return self._transport.get_extra_info(name, default)
+
+    def drain(self):
+        """This method has an unusual return value.
+
+        The intended use is to write
+
+          w.write(data)
+          yield from w.drain()
+
+        When there's nothing to wait for, drain() returns (), and the
+        yield-from continues immediately.  When the transport buffer
+        is full (the protocol is paused), drain() creates and returns
+        a Future and the yield-from will block until that Future is
+        completed, which will happen when the buffer is (partially)
+        drained and the protocol is resumed.
+        """
+        if self._reader._exception is not None:
+            raise self._writer._exception
+        if self._transport._conn_lost:  # Uses private variable.
+            raise ConnectionResetError('Connection lost')
+        if not self._protocol._paused:
+            return ()
+        waiter = self._protocol._drain_waiter
+        assert waiter is None or waiter.cancelled()
+        waiter = futures.Future(loop=self._loop)
+        self._protocol._drain_waiter = waiter
+        return waiter
+
+
+class StreamReader:
+
+    def __init__(self, limit=_DEFAULT_LIMIT, loop=None):
+        # The line length limit is  a security feature;
+        # it also doubles as half the buffer limit.
+        self._limit = limit
+        if loop is None:
+            loop = events.get_event_loop()
+        self._loop = loop
+        self._buffer = collections.deque()  # Deque of bytes objects.
+        self._byte_count = 0  # Bytes in buffer.
+        self._eof = False  # Whether we're done.
+        self._waiter = None  # A future.
+        self._exception = None
+        self._transport = None
+        self._paused = False
+
+    def exception(self):
+        return self._exception
+
+    def set_exception(self, exc):
+        self._exception = exc
+
+        waiter = self._waiter
+        if waiter is not None:
+            self._waiter = None
+            if not waiter.cancelled():
+                waiter.set_exception(exc)
+
+    def set_transport(self, transport):
+        assert self._transport is None, 'Transport already set'
+        self._transport = transport
+
+    def _maybe_resume_transport(self):
+        if self._paused and self._byte_count <= self._limit:
+            self._paused = False
+            self._transport.resume_reading()
+
+    def feed_eof(self):
+        self._eof = True
+        waiter = self._waiter
+        if waiter is not None:
+            self._waiter = None
+            if not waiter.cancelled():
+                waiter.set_result(True)
+
+    def feed_data(self, data):
+        if not data:
+            return
+
+        self._buffer.append(data)
+        self._byte_count += len(data)
+
+        waiter = self._waiter
+        if waiter is not None:
+            self._waiter = None
+            if not waiter.cancelled():
+                waiter.set_result(False)
+
+        if (self._transport is not None and
+            not self._paused and
+            self._byte_count > 2*self._limit):
+            try:
+                self._transport.pause_reading()
+            except NotImplementedError:
+                # The transport can't be paused.
+                # We'll just have to buffer all data.
+                # Forget the transport so we don't keep trying.
+                self._transport = None
+            else:
+                self._paused = True
+
+    @tasks.coroutine
+    def readline(self):
+        if self._exception is not None:
+            raise self._exception
+
+        parts = []
+        parts_size = 0
+        not_enough = True
+
+        while not_enough:
+            while self._buffer and not_enough:
+                data = self._buffer.popleft()
+                ichar = data.find(b'\n')
+                if ichar < 0:
+                    parts.append(data)
+                    parts_size += len(data)
+                else:
+                    ichar += 1
+                    head, tail = data[:ichar], data[ichar:]
+                    if tail:
+                        self._buffer.appendleft(tail)
+                    not_enough = False
+                    parts.append(head)
+                    parts_size += len(head)
+
+                if parts_size > self._limit:
+                    self._byte_count -= parts_size
+                    self._maybe_resume_transport()
+                    raise ValueError('Line is too long')
+
+            if self._eof:
+                break
+
+            if not_enough:
+                assert self._waiter is None
+                self._waiter = futures.Future(loop=self._loop)
+                try:
+                    yield from self._waiter
+                finally:
+                    self._waiter = None
+
+        line = b''.join(parts)
+        self._byte_count -= parts_size
+        self._maybe_resume_transport()
+
+        return line
+
+    @tasks.coroutine
+    def read(self, n=-1):
+        if self._exception is not None:
+            raise self._exception
+
+        if not n:
+            return b''
+
+        if n < 0:
+            while not self._eof:
+                assert not self._waiter
+                self._waiter = futures.Future(loop=self._loop)
+                try:
+                    yield from self._waiter
+                finally:
+                    self._waiter = None
+        else:
+            if not self._byte_count and not self._eof:
+                assert not self._waiter
+                self._waiter = futures.Future(loop=self._loop)
+                try:
+                    yield from self._waiter
+                finally:
+                    self._waiter = None
+
+        if n < 0 or self._byte_count <= n:
+            data = b''.join(self._buffer)
+            self._buffer.clear()
+            self._byte_count = 0
+            self._maybe_resume_transport()
+            return data
+
+        parts = []
+        parts_bytes = 0
+        while self._buffer and parts_bytes < n:
+            data = self._buffer.popleft()
+            data_bytes = len(data)
+            if n < parts_bytes + data_bytes:
+                data_bytes = n - parts_bytes
+                data, rest = data[:data_bytes], data[data_bytes:]
+                self._buffer.appendleft(rest)
+
+            parts.append(data)
+            parts_bytes += data_bytes
+            self._byte_count -= data_bytes
+            self._maybe_resume_transport()
+
+        return b''.join(parts)
+
+    @tasks.coroutine
+    def readexactly(self, n):
+        if self._exception is not None:
+            raise self._exception
+
+        if n <= 0:
+            return b''
+
+        while self._byte_count < n and not self._eof:
+            assert not self._waiter
+            self._waiter = futures.Future(loop=self._loop)
+            try:
+                yield from self._waiter
+            finally:
+                self._waiter = None
+
+        return (yield from self.read(n))
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
new file mode 100644
index 0000000..2a21a4b
--- /dev/null
+++ b/Lib/asyncio/tasks.py
@@ -0,0 +1,637 @@
+"""Support for tasks, coroutines and the scheduler."""
+
+__all__ = ['coroutine', 'Task',
+           'FIRST_COMPLETED', 'FIRST_EXCEPTION', 'ALL_COMPLETED',
+           'wait', 'wait_for', 'as_completed', 'sleep', 'async',
+           'gather',
+           ]
+
+import collections
+import concurrent.futures
+import functools
+import inspect
+import linecache
+import traceback
+import weakref
+
+from . import events
+from . import futures
+from .log import logger
+
+# If you set _DEBUG to true, @coroutine will wrap the resulting
+# generator objects in a CoroWrapper instance (defined below).  That
+# instance will log a message when the generator is never iterated
+# over, which may happen when you forget to use "yield from" with a
+# coroutine call.  Note that the value of the _DEBUG flag is taken
+# when the decorator is used, so to be of any use it must be set
+# before you define your coroutines.  A downside of using this feature
+# is that tracebacks show entries for the CoroWrapper.__next__ method
+# when _DEBUG is true.
+_DEBUG = False
+
+
+class CoroWrapper:
+    """Wrapper for coroutine in _DEBUG mode."""
+
+    __slot__ = ['gen', 'func']
+
+    def __init__(self, gen, func):
+        assert inspect.isgenerator(gen), gen
+        self.gen = gen
+        self.func = func
+
+    def __iter__(self):
+        return self
+
+    def __next__(self):
+        return next(self.gen)
+
+    def send(self, value):
+        return self.gen.send(value)
+
+    def throw(self, exc):
+        return self.gen.throw(exc)
+
+    def close(self):
+        return self.gen.close()
+
+    def __del__(self):
+        frame = self.gen.gi_frame
+        if frame is not None and frame.f_lasti == -1:
+            func = self.func
+            code = func.__code__
+            filename = code.co_filename
+            lineno = code.co_firstlineno
+            logger.error(
+                'Coroutine %r defined at %s:%s was never yielded from',
+                func.__name__, filename, lineno)
+
+
+def coroutine(func):
+    """Decorator to mark coroutines.
+
+    If the coroutine is not yielded from before it is destroyed,
+    an error message is logged.
+    """
+    if inspect.isgeneratorfunction(func):
+        coro = func
+    else:
+        @functools.wraps(func)
+        def coro(*args, **kw):
+            res = func(*args, **kw)
+            if isinstance(res, futures.Future) or inspect.isgenerator(res):
+                res = yield from res
+            return res
+
+    if not _DEBUG:
+        wrapper = coro
+    else:
+        @functools.wraps(func)
+        def wrapper(*args, **kwds):
+            w = CoroWrapper(coro(*args, **kwds), func)
+            w.__name__ = coro.__name__
+            w.__doc__ = coro.__doc__
+            return w
+
+    wrapper._is_coroutine = True  # For iscoroutinefunction().
+    return wrapper
+
+
+def iscoroutinefunction(func):
+    """Return True if func is a decorated coroutine function."""
+    return getattr(func, '_is_coroutine', False)
+
+
+def iscoroutine(obj):
+    """Return True if obj is a coroutine object."""
+    return isinstance(obj, CoroWrapper) or inspect.isgenerator(obj)
+
+
+class Task(futures.Future):
+    """A coroutine wrapped in a Future."""
+
+    # An important invariant maintained while a Task not done:
+    #
+    # - Either _fut_waiter is None, and _step() is scheduled;
+    # - or _fut_waiter is some Future, and _step() is *not* scheduled.
+    #
+    # The only transition from the latter to the former is through
+    # _wakeup().  When _fut_waiter is not None, one of its callbacks
+    # must be _wakeup().
+
+    # Weak set containing all tasks alive.
+    _all_tasks = weakref.WeakSet()
+
+    @classmethod
+    def all_tasks(cls, loop=None):
+        """Return a set of all tasks for an event loop.
+
+        By default all tasks for the current event loop are returned.
+        """
+        if loop is None:
+            loop = events.get_event_loop()
+        return {t for t in cls._all_tasks if t._loop is loop}
+
+    def __init__(self, coro, *, loop=None):
+        assert iscoroutine(coro), repr(coro)  # Not a coroutine function!
+        super().__init__(loop=loop)
+        self._coro = iter(coro)  # Use the iterator just in case.
+        self._fut_waiter = None
+        self._must_cancel = False
+        self._loop.call_soon(self._step)
+        self.__class__._all_tasks.add(self)
+
+    def __repr__(self):
+        res = super().__repr__()
+        if (self._must_cancel and
+            self._state == futures._PENDING and
+            '<PENDING' in res):
+            res = res.replace('<PENDING', '<CANCELLING', 1)
+        i = res.find('<')
+        if i < 0:
+            i = len(res)
+        res = res[:i] + '(<{}>)'.format(self._coro.__name__) + res[i:]
+        return res
+
+    def get_stack(self, *, limit=None):
+        """Return the list of stack frames for this task's coroutine.
+
+        If the coroutine is active, this returns the stack where it is
+        suspended.  If the coroutine has completed successfully or was
+        cancelled, this returns an empty list.  If the coroutine was
+        terminated by an exception, this returns the list of traceback
+        frames.
+
+        The frames are always ordered from oldest to newest.
+
+        The optional limit gives the maximum nummber of frames to
+        return; by default all available frames are returned.  Its
+        meaning differs depending on whether a stack or a traceback is
+        returned: the newest frames of a stack are returned, but the
+        oldest frames of a traceback are returned.  (This matches the
+        behavior of the traceback module.)
+
+        For reasons beyond our control, only one stack frame is
+        returned for a suspended coroutine.
+        """
+        frames = []
+        f = self._coro.gi_frame
+        if f is not None:
+            while f is not None:
+                if limit is not None:
+                    if limit <= 0:
+                        break
+                    limit -= 1
+                frames.append(f)
+                f = f.f_back
+            frames.reverse()
+        elif self._exception is not None:
+            tb = self._exception.__traceback__
+            while tb is not None:
+                if limit is not None:
+                    if limit <= 0:
+                        break
+                    limit -= 1
+                frames.append(tb.tb_frame)
+                tb = tb.tb_next
+        return frames
+
+    def print_stack(self, *, limit=None, file=None):
+        """Print the stack or traceback for this task's coroutine.
+
+        This produces output similar to that of the traceback module,
+        for the frames retrieved by get_stack().  The limit argument
+        is passed to get_stack().  The file argument is an I/O stream
+        to which the output goes; by default it goes to sys.stderr.
+        """
+        extracted_list = []
+        checked = set()
+        for f in self.get_stack(limit=limit):
+            lineno = f.f_lineno
+            co = f.f_code
+            filename = co.co_filename
+            name = co.co_name
+            if filename not in checked:
+                checked.add(filename)
+                linecache.checkcache(filename)
+            line = linecache.getline(filename, lineno, f.f_globals)
+            extracted_list.append((filename, lineno, name, line))
+        exc = self._exception
+        if not extracted_list:
+            print('No stack for %r' % self, file=file)
+        elif exc is not None:
+            print('Traceback for %r (most recent call last):' % self,
+                  file=file)
+        else:
+            print('Stack for %r (most recent call last):' % self,
+                  file=file)
+        traceback.print_list(extracted_list, file=file)
+        if exc is not None:
+            for line in traceback.format_exception_only(exc.__class__, exc):
+                print(line, file=file, end='')
+
+    def cancel(self):
+        if self.done():
+            return False
+        if self._fut_waiter is not None:
+            if self._fut_waiter.cancel():
+                # Leave self._fut_waiter; it may be a Task that
+                # catches and ignores the cancellation so we may have
+                # to cancel it again later.
+                return True
+        # It must be the case that self._step is already scheduled.
+        self._must_cancel = True
+        return True
+
+    def _step(self, value=None, exc=None):
+        assert not self.done(), \
+            '_step(): already done: {!r}, {!r}, {!r}'.format(self, value, exc)
+        if self._must_cancel:
+            if not isinstance(exc, futures.CancelledError):
+                exc = futures.CancelledError()
+            self._must_cancel = False
+        coro = self._coro
+        self._fut_waiter = None
+        # Call either coro.throw(exc) or coro.send(value).
+        try:
+            if exc is not None:
+                result = coro.throw(exc)
+            elif value is not None:
+                result = coro.send(value)
+            else:
+                result = next(coro)
+        except StopIteration as exc:
+            self.set_result(exc.value)
+        except futures.CancelledError as exc:
+            super().cancel()  # I.e., Future.cancel(self).
+        except Exception as exc:
+            self.set_exception(exc)
+        except BaseException as exc:
+            self.set_exception(exc)
+            raise
+        else:
+            if isinstance(result, futures.Future):
+                # Yielded Future must come from Future.__iter__().
+                if result._blocking:
+                    result._blocking = False
+                    result.add_done_callback(self._wakeup)
+                    self._fut_waiter = result
+                    if self._must_cancel:
+                        if self._fut_waiter.cancel():
+                            self._must_cancel = False
+                else:
+                    self._loop.call_soon(
+                        self._step, None,
+                        RuntimeError(
+                            'yield was used instead of yield from '
+                            'in task {!r} with {!r}'.format(self, result)))
+            elif result is None:
+                # Bare yield relinquishes control for one event loop iteration.
+                self._loop.call_soon(self._step)
+            elif inspect.isgenerator(result):
+                # Yielding a generator is just wrong.
+                self._loop.call_soon(
+                    self._step, None,
+                    RuntimeError(
+                        'yield was used instead of yield from for '
+                        'generator in task {!r} with {}'.format(
+                            self, result)))
+            else:
+                # Yielding something else is an error.
+                self._loop.call_soon(
+                    self._step, None,
+                    RuntimeError(
+                        'Task got bad yield: {!r}'.format(result)))
+        self = None
+
+    def _wakeup(self, future):
+        try:
+            value = future.result()
+        except Exception as exc:
+            # This may also be a cancellation.
+            self._step(None, exc)
+        else:
+            self._step(value, None)
+        self = None  # Needed to break cycles when an exception occurs.
+
+
+# wait() and as_completed() similar to those in PEP 3148.
+
+FIRST_COMPLETED = concurrent.futures.FIRST_COMPLETED
+FIRST_EXCEPTION = concurrent.futures.FIRST_EXCEPTION
+ALL_COMPLETED = concurrent.futures.ALL_COMPLETED
+
+
+@coroutine
+def wait(fs, *, loop=None, timeout=None, return_when=ALL_COMPLETED):
+    """Wait for the Futures and coroutines given by fs to complete.
+
+    Coroutines will be wrapped in Tasks.
+
+    Returns two sets of Future: (done, pending).
+
+    Usage:
+
+        done, pending = yield from asyncio.wait(fs)
+
+    Note: This does not raise TimeoutError! Futures that aren't done
+    when the timeout occurs are returned in the second set.
+    """
+    if not fs:
+        raise ValueError('Set of coroutines/Futures is empty.')
+
+    if loop is None:
+        loop = events.get_event_loop()
+
+    fs = set(async(f, loop=loop) for f in fs)
+
+    if return_when not in (FIRST_COMPLETED, FIRST_EXCEPTION, ALL_COMPLETED):
+        raise ValueError('Invalid return_when value: {}'.format(return_when))
+    return (yield from _wait(fs, timeout, return_when, loop))
+
+
+def _release_waiter(waiter, value=True, *args):
+    if not waiter.done():
+        waiter.set_result(value)
+
+
+@coroutine
+def wait_for(fut, timeout, *, loop=None):
+    """Wait for the single Future or coroutine to complete, with timeout.
+
+    Coroutine will be wrapped in Task.
+
+    Returns result of the Future or coroutine.  Raises TimeoutError when
+    timeout occurs.
+
+    Usage:
+
+        result = yield from asyncio.wait_for(fut, 10.0)
+
+    """
+    if loop is None:
+        loop = events.get_event_loop()
+
+    waiter = futures.Future(loop=loop)
+    timeout_handle = loop.call_later(timeout, _release_waiter, waiter, False)
+    cb = functools.partial(_release_waiter, waiter, True)
+
+    fut = async(fut, loop=loop)
+    fut.add_done_callback(cb)
+
+    try:
+        if (yield from waiter):
+            return fut.result()
+        else:
+            fut.remove_done_callback(cb)
+            raise futures.TimeoutError()
+    finally:
+        timeout_handle.cancel()
+
+
+@coroutine
+def _wait(fs, timeout, return_when, loop):
+    """Internal helper for wait() and _wait_for().
+
+    The fs argument must be a collection of Futures.
+    """
+    assert fs, 'Set of Futures is empty.'
+    waiter = futures.Future(loop=loop)
+    timeout_handle = None
+    if timeout is not None:
+        timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
+    counter = len(fs)
+
+    def _on_completion(f):
+        nonlocal counter
+        counter -= 1
+        if (counter <= 0 or
+            return_when == FIRST_COMPLETED or
+            return_when == FIRST_EXCEPTION and (not f.cancelled() and
+                                                f.exception() is not None)):
+            if timeout_handle is not None:
+                timeout_handle.cancel()
+            if not waiter.done():
+                waiter.set_result(False)
+
+    for f in fs:
+        f.add_done_callback(_on_completion)
+
+    try:
+        yield from waiter
+    finally:
+        if timeout_handle is not None:
+            timeout_handle.cancel()
+
+    done, pending = set(), set()
+    for f in fs:
+        f.remove_done_callback(_on_completion)
+        if f.done():
+            done.add(f)
+        else:
+            pending.add(f)
+    return done, pending
+
+
+# This is *not* a @coroutine!  It is just an iterator (yielding Futures).
+def as_completed(fs, *, loop=None, timeout=None):
+    """Return an iterator whose values, when waited for, are Futures.
+
+    This differs from PEP 3148; the proper way to use this is:
+
+        for f in as_completed(fs):
+            result = yield from f  # The 'yield from' may raise.
+            # Use result.
+
+    Raises TimeoutError if the timeout occurs before all Futures are
+    done.
+
+    Note: The futures 'f' are not necessarily members of fs.
+    """
+    loop = loop if loop is not None else events.get_event_loop()
+    deadline = None if timeout is None else loop.time() + timeout
+    todo = set(async(f, loop=loop) for f in fs)
+    completed = collections.deque()
+
+    @coroutine
+    def _wait_for_one():
+        while not completed:
+            timeout = None
+            if deadline is not None:
+                timeout = deadline - loop.time()
+                if timeout < 0:
+                    raise futures.TimeoutError()
+            done, pending = yield from _wait(
+                todo, timeout, FIRST_COMPLETED, loop)
+            # Multiple callers might be waiting for the same events
+            # and getting the same outcome.  Dedupe by updating todo.
+            for f in done:
+                if f in todo:
+                    todo.remove(f)
+                    completed.append(f)
+        f = completed.popleft()
+        return f.result()  # May raise.
+
+    for _ in range(len(todo)):
+        yield _wait_for_one()
+
+
+@coroutine
+def sleep(delay, result=None, *, loop=None):
+    """Coroutine that completes after a given time (in seconds)."""
+    future = futures.Future(loop=loop)
+    h = future._loop.call_later(delay, future.set_result, result)
+    try:
+        return (yield from future)
+    finally:
+        h.cancel()
+
+
+def async(coro_or_future, *, loop=None):
+    """Wrap a coroutine in a future.
+
+    If the argument is a Future, it is returned directly.
+    """
+    if isinstance(coro_or_future, futures.Future):
+        if loop is not None and loop is not coro_or_future._loop:
+            raise ValueError('loop argument must agree with Future')
+        return coro_or_future
+    elif iscoroutine(coro_or_future):
+        return Task(coro_or_future, loop=loop)
+    else:
+        raise TypeError('A Future or coroutine is required')
+
+
+class _GatheringFuture(futures.Future):
+    """Helper for gather().
+
+    This overrides cancel() to cancel all the children and act more
+    like Task.cancel(), which doesn't immediately mark itself as
+    cancelled.
+    """
+
+    def __init__(self, children, *, loop=None):
+        super().__init__(loop=loop)
+        self._children = children
+
+    def cancel(self):
+        if self.done():
+            return False
+        for child in self._children:
+            child.cancel()
+        return True
+
+
+def gather(*coros_or_futures, loop=None, return_exceptions=False):
+    """Return a future aggregating results from the given coroutines
+    or futures.
+
+    All futures must share the same event loop.  If all the tasks are
+    done successfully, the returned future's result is the list of
+    results (in the order of the original sequence, not necessarily
+    the order of results arrival).  If *result_exception* is True,
+    exceptions in the tasks are treated the same as successful
+    results, and gathered in the result list; otherwise, the first
+    raised exception will be immediately propagated to the returned
+    future.
+
+    Cancellation: if the outer Future is cancelled, all children (that
+    have not completed yet) are also cancelled.  If any child is
+    cancelled, this is treated as if it raised CancelledError --
+    the outer Future is *not* cancelled in this case.  (This is to
+    prevent the cancellation of one child to cause other children to
+    be cancelled.)
+    """
+    children = [async(fut, loop=loop) for fut in coros_or_futures]
+    n = len(children)
+    if n == 0:
+        outer = futures.Future(loop=loop)
+        outer.set_result([])
+        return outer
+    if loop is None:
+        loop = children[0]._loop
+    for fut in children:
+        if fut._loop is not loop:
+            raise ValueError("futures are tied to different event loops")
+    outer = _GatheringFuture(children, loop=loop)
+    nfinished = 0
+    results = [None] * n
+
+    def _done_callback(i, fut):
+        nonlocal nfinished
+        if outer._state != futures._PENDING:
+            if fut._exception is not None:
+                # Mark exception retrieved.
+                fut.exception()
+            return
+        if fut._state == futures._CANCELLED:
+            res = futures.CancelledError()
+            if not return_exceptions:
+                outer.set_exception(res)
+                return
+        elif fut._exception is not None:
+            res = fut.exception()  # Mark exception retrieved.
+            if not return_exceptions:
+                outer.set_exception(res)
+                return
+        else:
+            res = fut._result
+        results[i] = res
+        nfinished += 1
+        if nfinished == n:
+            outer.set_result(results)
+
+    for i, fut in enumerate(children):
+        fut.add_done_callback(functools.partial(_done_callback, i))
+    return outer
+
+
+def shield(arg, *, loop=None):
+    """Wait for a future, shielding it from cancellation.
+
+    The statement
+
+        res = yield from shield(something())
+
+    is exactly equivalent to the statement
+
+        res = yield from something()
+
+    *except* that if the coroutine containing it is cancelled, the
+    task running in something() is not cancelled.  From the POV of
+    something(), the cancellation did not happen.  But its caller is
+    still cancelled, so the yield-from expression still raises
+    CancelledError.  Note: If something() is cancelled by other means
+    this will still cancel shield().
+
+    If you want to completely ignore cancellation (not recommended)
+    you can combine shield() with a try/except clause, as follows:
+
+        try:
+            res = yield from shield(something())
+        except CancelledError:
+            res = None
+    """
+    inner = async(arg, loop=loop)
+    if inner.done():
+        # Shortcut.
+        return inner
+    loop = inner._loop
+    outer = futures.Future(loop=loop)
+
+    def _done_callback(inner):
+        if outer.cancelled():
+            # Mark inner's result as retrieved.
+            inner.cancelled() or inner.exception()
+            return
+        if inner.cancelled():
+            outer.cancel()
+        else:
+            exc = inner.exception()
+            if exc is not None:
+                outer.set_exception(exc)
+            else:
+                outer.set_result(inner.result())
+
+    inner.add_done_callback(_done_callback)
+    return outer
diff --git a/Lib/asyncio/test_utils.py b/Lib/asyncio/test_utils.py
new file mode 100644
index 0000000..c278dd1
--- /dev/null
+++ b/Lib/asyncio/test_utils.py
@@ -0,0 +1,262 @@
+"""Utilities shared by tests."""
+
+import collections
+import contextlib
+import io
+import unittest.mock
+import os
+import sys
+import threading
+import time
+import unittest
+import unittest.mock
+from wsgiref.simple_server import make_server, WSGIRequestHandler, WSGIServer
+try:
+    import ssl
+except ImportError:  # pragma: no cover
+    ssl = None
+
+from . import tasks
+from . import base_events
+from . import events
+from . import selectors
+
+
+if sys.platform == 'win32':  # pragma: no cover
+    from .windows_utils import socketpair
+else:
+    from socket import socketpair  # pragma: no cover
+
+
+def dummy_ssl_context():
+    if ssl is None:
+        return None
+    else:
+        return ssl.SSLContext(ssl.PROTOCOL_SSLv23)
+
+
+def run_briefly(loop):
+    @tasks.coroutine
+    def once():
+        pass
+    gen = once()
+    t = tasks.Task(gen, loop=loop)
+    try:
+        loop.run_until_complete(t)
+    finally:
+        gen.close()
+
+
+def run_until(loop, pred, timeout=None):
+    if timeout is not None:
+        deadline = time.time() + timeout
+    while not pred():
+        if timeout is not None:
+            timeout = deadline - time.time()
+            if timeout <= 0:
+                return False
+            loop.run_until_complete(tasks.sleep(timeout, loop=loop))
+        else:
+            run_briefly(loop)
+    return True
+
+
+def run_once(loop):
+    """loop.stop() schedules _raise_stop_error()
+    and run_forever() runs until _raise_stop_error() callback.
+    this wont work if test waits for some IO events, because
+    _raise_stop_error() runs before any of io events callbacks.
+    """
+    loop.stop()
+    loop.run_forever()
+
+
+@contextlib.contextmanager
+def run_test_server(*, host='127.0.0.1', port=0, use_ssl=False):
+
+    class SilentWSGIRequestHandler(WSGIRequestHandler):
+        def get_stderr(self):
+            return io.StringIO()
+
+        def log_message(self, format, *args):
+            pass
+
+    class SilentWSGIServer(WSGIServer):
+        def handle_error(self, request, client_address):
+            pass
+
+    class SSLWSGIServer(SilentWSGIServer):
+        def finish_request(self, request, client_address):
+            # The relative location of our test directory (which
+            # contains the sample key and certificate files) differs
+            # between the stdlib and stand-alone Tulip/asyncio.
+            # Prefer our own if we can find it.
+            here = os.path.join(os.path.dirname(__file__), '..', 'tests')
+            if not os.path.isdir(here):
+                here = os.path.join(os.path.dirname(os.__file__),
+                                    'test', 'test_asyncio')
+            keyfile = os.path.join(here, 'sample.key')
+            certfile = os.path.join(here, 'sample.crt')
+            ssock = ssl.wrap_socket(request,
+                                    keyfile=keyfile,
+                                    certfile=certfile,
+                                    server_side=True)
+            try:
+                self.RequestHandlerClass(ssock, client_address, self)
+                ssock.close()
+            except OSError:
+                # maybe socket has been closed by peer
+                pass
+
+    def app(environ, start_response):
+        status = '200 OK'
+        headers = [('Content-type', 'text/plain')]
+        start_response(status, headers)
+        return [b'Test message']
+
+    # Run the test WSGI server in a separate thread in order not to
+    # interfere with event handling in the main thread
+    server_class = SSLWSGIServer if use_ssl else SilentWSGIServer
+    httpd = make_server(host, port, app,
+                        server_class, SilentWSGIRequestHandler)
+    httpd.address = httpd.server_address
+    server_thread = threading.Thread(target=httpd.serve_forever)
+    server_thread.start()
+    try:
+        yield httpd
+    finally:
+        httpd.shutdown()
+        httpd.server_close()
+        server_thread.join()
+
+
+def make_test_protocol(base):
+    dct = {}
+    for name in dir(base):
+        if name.startswith('__') and name.endswith('__'):
+            # skip magic names
+            continue
+        dct[name] = unittest.mock.Mock(return_value=None)
+    return type('TestProtocol', (base,) + base.__bases__, dct)()
+
+
+class TestSelector(selectors.BaseSelector):
+
+    def select(self, timeout):
+        return []
+
+
+class TestLoop(base_events.BaseEventLoop):
+    """Loop for unittests.
+
+    It manages self time directly.
+    If something scheduled to be executed later then
+    on next loop iteration after all ready handlers done
+    generator passed to __init__ is calling.
+
+    Generator should be like this:
+
+        def gen():
+            ...
+            when = yield ...
+            ... = yield time_advance
+
+    Value retuned by yield is absolute time of next scheduled handler.
+    Value passed to yield is time advance to move loop's time forward.
+    """
+
+    def __init__(self, gen=None):
+        super().__init__()
+
+        if gen is None:
+            def gen():
+                yield
+            self._check_on_close = False
+        else:
+            self._check_on_close = True
+
+        self._gen = gen()
+        next(self._gen)
+        self._time = 0
+        self._timers = []
+        self._selector = TestSelector()
+
+        self.readers = {}
+        self.writers = {}
+        self.reset_counters()
+
+    def time(self):
+        return self._time
+
+    def advance_time(self, advance):
+        """Move test time forward."""
+        if advance:
+            self._time += advance
+
+    def close(self):
+        if self._check_on_close:
+            try:
+                self._gen.send(0)
+            except StopIteration:
+                pass
+            else:  # pragma: no cover
+                raise AssertionError("Time generator is not finished")
+
+    def add_reader(self, fd, callback, *args):
+        self.readers[fd] = events.make_handle(callback, args)
+
+    def remove_reader(self, fd):
+        self.remove_reader_count[fd] += 1
+        if fd in self.readers:
+            del self.readers[fd]
+            return True
+        else:
+            return False
+
+    def assert_reader(self, fd, callback, *args):
+        assert fd in self.readers, 'fd {} is not registered'.format(fd)
+        handle = self.readers[fd]
+        assert handle._callback == callback, '{!r} != {!r}'.format(
+            handle._callback, callback)
+        assert handle._args == args, '{!r} != {!r}'.format(
+            handle._args, args)
+
+    def add_writer(self, fd, callback, *args):
+        self.writers[fd] = events.make_handle(callback, args)
+
+    def remove_writer(self, fd):
+        self.remove_writer_count[fd] += 1
+        if fd in self.writers:
+            del self.writers[fd]
+            return True
+        else:
+            return False
+
+    def assert_writer(self, fd, callback, *args):
+        assert fd in self.writers, 'fd {} is not registered'.format(fd)
+        handle = self.writers[fd]
+        assert handle._callback == callback, '{!r} != {!r}'.format(
+            handle._callback, callback)
+        assert handle._args == args, '{!r} != {!r}'.format(
+            handle._args, args)
+
+    def reset_counters(self):
+        self.remove_reader_count = collections.defaultdict(int)
+        self.remove_writer_count = collections.defaultdict(int)
+
+    def _run_once(self):
+        super()._run_once()
+        for when in self._timers:
+            advance = self._gen.send(when)
+            self.advance_time(advance)
+        self._timers = []
+
+    def call_at(self, when, callback, *args):
+        self._timers.append(when)
+        return super().call_at(when, callback, *args)
+
+    def _process_events(self, event_list):
+        return
+
+    def _write_to_self(self):
+        pass
diff --git a/Lib/asyncio/transports.py b/Lib/asyncio/transports.py
new file mode 100644
index 0000000..8c6b189
--- /dev/null
+++ b/Lib/asyncio/transports.py
@@ -0,0 +1,211 @@
+"""Abstract Transport class."""
+
+__all__ = ['ReadTransport', 'WriteTransport', 'Transport']
+
+
+class BaseTransport:
+    """Base ABC for transports."""
+
+    def __init__(self, extra=None):
+        if extra is None:
+            extra = {}
+        self._extra = extra
+
+    def get_extra_info(self, name, default=None):
+        """Get optional transport information."""
+        return self._extra.get(name, default)
+
+    def close(self):
+        """Closes the transport.
+
+        Buffered data will be flushed asynchronously.  No more data
+        will be received.  After all buffered data is flushed, the
+        protocol's connection_lost() method will (eventually) called
+        with None as its argument.
+        """
+        raise NotImplementedError
+
+
+class ReadTransport(BaseTransport):
+    """ABC for read-only transports."""
+
+    def pause_reading(self):
+        """Pause the receiving end.
+
+        No data will be passed to the protocol's data_received()
+        method until resume_reading() is called.
+        """
+        raise NotImplementedError
+
+    def resume_reading(self):
+        """Resume the receiving end.
+
+        Data received will once again be passed to the protocol's
+        data_received() method.
+        """
+        raise NotImplementedError
+
+
+class WriteTransport(BaseTransport):
+    """ABC for write-only transports."""
+
+    def set_write_buffer_limits(self, high=None, low=None):
+        """Set the high- and low-water limits for write flow control.
+
+        These two values control when to call the protocol's
+        pause_writing() and resume_writing() methods.  If specified,
+        the low-water limit must be less than or equal to the
+        high-water limit.  Neither value can be negative.
+
+        The defaults are implementation-specific.  If only the
+        high-water limit is given, the low-water limit defaults to a
+        implementation-specific value less than or equal to the
+        high-water limit.  Setting high to zero forces low to zero as
+        well, and causes pause_writing() to be called whenever the
+        buffer becomes non-empty.  Setting low to zero causes
+        resume_writing() to be called only once the buffer is empty.
+        Use of zero for either limit is generally sub-optimal as it
+        reduces opportunities for doing I/O and computation
+        concurrently.
+        """
+        raise NotImplementedError
+
+    def get_write_buffer_size(self):
+        """Return the current size of the write buffer."""
+        raise NotImplementedError
+
+    def write(self, data):
+        """Write some data bytes to the transport.
+
+        This does not block; it buffers the data and arranges for it
+        to be sent out asynchronously.
+        """
+        raise NotImplementedError
+
+    def writelines(self, list_of_data):
+        """Write a list (or any iterable) of data bytes to the transport.
+
+        The default implementation just calls write() for each item in
+        the list/iterable.
+        """
+        for data in list_of_data:
+            self.write(data)
+
+    def write_eof(self):
+        """Closes the write end after flushing buffered data.
+
+        (This is like typing ^D into a UNIX program reading from stdin.)
+
+        Data may still be received.
+        """
+        raise NotImplementedError
+
+    def can_write_eof(self):
+        """Return True if this protocol supports write_eof(), False if not."""
+        raise NotImplementedError
+
+    def abort(self):
+        """Closes the transport immediately.
+
+        Buffered data will be lost.  No more data will be received.
+        The protocol's connection_lost() method will (eventually) be
+        called with None as its argument.
+        """
+        raise NotImplementedError
+
+
+class Transport(ReadTransport, WriteTransport):
+    """ABC representing a bidirectional transport.
+
+    There may be several implementations, but typically, the user does
+    not implement new transports; rather, the platform provides some
+    useful transports that are implemented using the platform's best
+    practices.
+
+    The user never instantiates a transport directly; they call a
+    utility function, passing it a protocol factory and other
+    information necessary to create the transport and protocol.  (E.g.
+    EventLoop.create_connection() or EventLoop.create_server().)
+
+    The utility function will asynchronously create a transport and a
+    protocol and hook them up by calling the protocol's
+    connection_made() method, passing it the transport.
+
+    The implementation here raises NotImplemented for every method
+    except writelines(), which calls write() in a loop.
+    """
+
+
+class DatagramTransport(BaseTransport):
+    """ABC for datagram (UDP) transports."""
+
+    def sendto(self, data, addr=None):
+        """Send data to the transport.
+
+        This does not block; it buffers the data and arranges for it
+        to be sent out asynchronously.
+        addr is target socket address.
+        If addr is None use target address pointed on transport creation.
+        """
+        raise NotImplementedError
+
+    def abort(self):
+        """Closes the transport immediately.
+
+        Buffered data will be lost.  No more data will be received.
+        The protocol's connection_lost() method will (eventually) be
+        called with None as its argument.
+        """
+        raise NotImplementedError
+
+
+class SubprocessTransport(BaseTransport):
+
+    def get_pid(self):
+        """Get subprocess id."""
+        raise NotImplementedError
+
+    def get_returncode(self):
+        """Get subprocess returncode.
+
+        See also
+        http://docs.python.org/3/library/subprocess#subprocess.Popen.returncode
+        """
+        raise NotImplementedError
+
+    def get_pipe_transport(self, fd):
+        """Get transport for pipe with number fd."""
+        raise NotImplementedError
+
+    def send_signal(self, signal):
+        """Send signal to subprocess.
+
+        See also:
+        docs.python.org/3/library/subprocess#subprocess.Popen.send_signal
+        """
+        raise NotImplementedError
+
+    def terminate(self):
+        """Stop the subprocess.
+
+        Alias for close() method.
+
+        On Posix OSs the method sends SIGTERM to the subprocess.
+        On Windows the Win32 API function TerminateProcess()
+         is called to stop the subprocess.
+
+        See also:
+        http://docs.python.org/3/library/subprocess#subprocess.Popen.terminate
+        """
+        raise NotImplementedError
+
+    def kill(self):
+        """Kill the subprocess.
+
+        On Posix OSs the function sends SIGKILL to the subprocess.
+        On Windows kill() is an alias for terminate().
+
+        See also:
+        http://docs.python.org/3/library/subprocess#subprocess.Popen.kill
+        """
+        raise NotImplementedError
diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
new file mode 100644
index 0000000..f4cf6e7
--- /dev/null
+++ b/Lib/asyncio/unix_events.py
@@ -0,0 +1,730 @@
+"""Selector eventloop for Unix with signal handling."""
+
+import errno
+import fcntl
+import os
+import signal
+import socket
+import stat
+import subprocess
+import sys
+import threading
+
+
+from . import base_subprocess
+from . import constants
+from . import events
+from . import protocols
+from . import selector_events
+from . import tasks
+from . import transports
+from .log import logger
+
+
+__all__ = ['SelectorEventLoop', 'STDIN', 'STDOUT', 'STDERR',
+           'AbstractChildWatcher', 'SafeChildWatcher',
+           'FastChildWatcher', 'DefaultEventLoopPolicy',
+           ]
+
+STDIN = 0
+STDOUT = 1
+STDERR = 2
+
+
+if sys.platform == 'win32':  # pragma: no cover
+    raise ImportError('Signals are not really supported on Windows')
+
+
+class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
+    """Unix event loop
+
+    Adds signal handling to SelectorEventLoop
+    """
+
+    def __init__(self, selector=None):
+        super().__init__(selector)
+        self._signal_handlers = {}
+
+    def _socketpair(self):
+        return socket.socketpair()
+
+    def close(self):
+        for sig in list(self._signal_handlers):
+            self.remove_signal_handler(sig)
+        super().close()
+
+    def add_signal_handler(self, sig, callback, *args):
+        """Add a handler for a signal.  UNIX only.
+
+        Raise ValueError if the signal number is invalid or uncatchable.
+        Raise RuntimeError if there is a problem setting up the handler.
+        """
+        self._check_signal(sig)
+        try:
+            # set_wakeup_fd() raises ValueError if this is not the
+            # main thread.  By calling it early we ensure that an
+            # event loop running in another thread cannot add a signal
+            # handler.
+            signal.set_wakeup_fd(self._csock.fileno())
+        except ValueError as exc:
+            raise RuntimeError(str(exc))
+
+        handle = events.make_handle(callback, args)
+        self._signal_handlers[sig] = handle
+
+        try:
+            signal.signal(sig, self._handle_signal)
+        except OSError as exc:
+            del self._signal_handlers[sig]
+            if not self._signal_handlers:
+                try:
+                    signal.set_wakeup_fd(-1)
+                except ValueError as nexc:
+                    logger.info('set_wakeup_fd(-1) failed: %s', nexc)
+
+            if exc.errno == errno.EINVAL:
+                raise RuntimeError('sig {} cannot be caught'.format(sig))
+            else:
+                raise
+
+    def _handle_signal(self, sig, arg):
+        """Internal helper that is the actual signal handler."""
+        handle = self._signal_handlers.get(sig)
+        if handle is None:
+            return  # Assume it's some race condition.
+        if handle._cancelled:
+            self.remove_signal_handler(sig)  # Remove it properly.
+        else:
+            self._add_callback_signalsafe(handle)
+
+    def remove_signal_handler(self, sig):
+        """Remove a handler for a signal.  UNIX only.
+
+        Return True if a signal handler was removed, False if not.
+        """
+        self._check_signal(sig)
+        try:
+            del self._signal_handlers[sig]
+        except KeyError:
+            return False
+
+        if sig == signal.SIGINT:
+            handler = signal.default_int_handler
+        else:
+            handler = signal.SIG_DFL
+
+        try:
+            signal.signal(sig, handler)
+        except OSError as exc:
+            if exc.errno == errno.EINVAL:
+                raise RuntimeError('sig {} cannot be caught'.format(sig))
+            else:
+                raise
+
+        if not self._signal_handlers:
+            try:
+                signal.set_wakeup_fd(-1)
+            except ValueError as exc:
+                logger.info('set_wakeup_fd(-1) failed: %s', exc)
+
+        return True
+
+    def _check_signal(self, sig):
+        """Internal helper to validate a signal.
+
+        Raise ValueError if the signal number is invalid or uncatchable.
+        Raise RuntimeError if there is a problem setting up the handler.
+        """
+        if not isinstance(sig, int):
+            raise TypeError('sig must be an int, not {!r}'.format(sig))
+
+        if not (1 <= sig < signal.NSIG):
+            raise ValueError(
+                'sig {} out of range(1, {})'.format(sig, signal.NSIG))
+
+    def _make_read_pipe_transport(self, pipe, protocol, waiter=None,
+                                  extra=None):
+        return _UnixReadPipeTransport(self, pipe, protocol, waiter, extra)
+
+    def _make_write_pipe_transport(self, pipe, protocol, waiter=None,
+                                   extra=None):
+        return _UnixWritePipeTransport(self, pipe, protocol, waiter, extra)
+
+    @tasks.coroutine
+    def _make_subprocess_transport(self, protocol, args, shell,
+                                   stdin, stdout, stderr, bufsize,
+                                   extra=None, **kwargs):
+        with events.get_child_watcher() as watcher:
+            transp = _UnixSubprocessTransport(self, protocol, args, shell,
+                                              stdin, stdout, stderr, bufsize,
+                                              extra=None, **kwargs)
+            watcher.add_child_handler(transp.get_pid(),
+                                      self._child_watcher_callback, transp)
+        yield from transp._post_init()
+        return transp
+
+    def _child_watcher_callback(self, pid, returncode, transp):
+        self.call_soon_threadsafe(transp._process_exited, returncode)
+
+    def _subprocess_closed(self, transp):
+        pass
+
+
+def _set_nonblocking(fd):
+    flags = fcntl.fcntl(fd, fcntl.F_GETFL)
+    flags = flags | os.O_NONBLOCK
+    fcntl.fcntl(fd, fcntl.F_SETFL, flags)
+
+
+class _UnixReadPipeTransport(transports.ReadTransport):
+
+    max_size = 256 * 1024  # max bytes we read in one eventloop iteration
+
+    def __init__(self, loop, pipe, protocol, waiter=None, extra=None):
+        super().__init__(extra)
+        self._extra['pipe'] = pipe
+        self._loop = loop
+        self._pipe = pipe
+        self._fileno = pipe.fileno()
+        mode = os.fstat(self._fileno).st_mode
+        if not (stat.S_ISFIFO(mode) or stat.S_ISSOCK(mode)):
+            raise ValueError("Pipe transport is for pipes/sockets only.")
+        _set_nonblocking(self._fileno)
+        self._protocol = protocol
+        self._closing = False
+        self._loop.add_reader(self._fileno, self._read_ready)
+        self._loop.call_soon(self._protocol.connection_made, self)
+        if waiter is not None:
+            self._loop.call_soon(waiter.set_result, None)
+
+    def _read_ready(self):
+        try:
+            data = os.read(self._fileno, self.max_size)
+        except (BlockingIOError, InterruptedError):
+            pass
+        except OSError as exc:
+            self._fatal_error(exc)
+        else:
+            if data:
+                self._protocol.data_received(data)
+            else:
+                self._closing = True
+                self._loop.remove_reader(self._fileno)
+                self._loop.call_soon(self._protocol.eof_received)
+                self._loop.call_soon(self._call_connection_lost, None)
+
+    def pause_reading(self):
+        self._loop.remove_reader(self._fileno)
+
+    def resume_reading(self):
+        self._loop.add_reader(self._fileno, self._read_ready)
+
+    def close(self):
+        if not self._closing:
+            self._close(None)
+
+    def _fatal_error(self, exc):
+        # should be called by exception handler only
+        logger.exception('Fatal error for %s', self)
+        self._close(exc)
+
+    def _close(self, exc):
+        self._closing = True
+        self._loop.remove_reader(self._fileno)
+        self._loop.call_soon(self._call_connection_lost, exc)
+
+    def _call_connection_lost(self, exc):
+        try:
+            self._protocol.connection_lost(exc)
+        finally:
+            self._pipe.close()
+            self._pipe = None
+            self._protocol = None
+            self._loop = None
+
+
+class _UnixWritePipeTransport(transports.WriteTransport):
+
+    def __init__(self, loop, pipe, protocol, waiter=None, extra=None):
+        super().__init__(extra)
+        self._extra['pipe'] = pipe
+        self._loop = loop
+        self._pipe = pipe
+        self._fileno = pipe.fileno()
+        mode = os.fstat(self._fileno).st_mode
+        is_socket = stat.S_ISSOCK(mode)
+        is_pipe = stat.S_ISFIFO(mode)
+        if not (is_socket or is_pipe):
+            raise ValueError("Pipe transport is for pipes/sockets only.")
+        _set_nonblocking(self._fileno)
+        self._protocol = protocol
+        self._buffer = []
+        self._conn_lost = 0
+        self._closing = False  # Set when close() or write_eof() called.
+
+        # On AIX, the reader trick only works for sockets.
+        # On other platforms it works for pipes and sockets.
+        # (Exception: OS X 10.4?  Issue #19294.)
+        if is_socket or not sys.platform.startswith("aix"):
+            self._loop.add_reader(self._fileno, self._read_ready)
+
+        self._loop.call_soon(self._protocol.connection_made, self)
+        if waiter is not None:
+            self._loop.call_soon(waiter.set_result, None)
+
+    def _read_ready(self):
+        # Pipe was closed by peer.
+        self._close()
+
+    def write(self, data):
+        assert isinstance(data, bytes), repr(data)
+        if not data:
+            return
+
+        if self._conn_lost or self._closing:
+            if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES:
+                logger.warning('pipe closed by peer or '
+                               'os.write(pipe, data) raised exception.')
+            self._conn_lost += 1
+            return
+
+        if not self._buffer:
+            # Attempt to send it right away first.
+            try:
+                n = os.write(self._fileno, data)
+            except (BlockingIOError, InterruptedError):
+                n = 0
+            except Exception as exc:
+                self._conn_lost += 1
+                self._fatal_error(exc)
+                return
+            if n == len(data):
+                return
+            elif n > 0:
+                data = data[n:]
+            self._loop.add_writer(self._fileno, self._write_ready)
+
+        self._buffer.append(data)
+
+    def _write_ready(self):
+        data = b''.join(self._buffer)
+        assert data, 'Data should not be empty'
+
+        self._buffer.clear()
+        try:
+            n = os.write(self._fileno, data)
+        except (BlockingIOError, InterruptedError):
+            self._buffer.append(data)
+        except Exception as exc:
+            self._conn_lost += 1
+            # Remove writer here, _fatal_error() doesn't it
+            # because _buffer is empty.
+            self._loop.remove_writer(self._fileno)
+            self._fatal_error(exc)
+        else:
+            if n == len(data):
+                self._loop.remove_writer(self._fileno)
+                if self._closing:
+                    self._loop.remove_reader(self._fileno)
+                    self._call_connection_lost(None)
+                return
+            elif n > 0:
+                data = data[n:]
+
+            self._buffer.append(data)  # Try again later.
+
+    def can_write_eof(self):
+        return True
+
+    # TODO: Make the relationships between write_eof(), close(),
+    # abort(), _fatal_error() and _close() more straightforward.
+
+    def write_eof(self):
+        if self._closing:
+            return
+        assert self._pipe
+        self._closing = True
+        if not self._buffer:
+            self._loop.remove_reader(self._fileno)
+            self._loop.call_soon(self._call_connection_lost, None)
+
+    def close(self):
+        if not self._closing:
+            # write_eof is all what we needed to close the write pipe
+            self.write_eof()
+
+    def abort(self):
+        self._close(None)
+
+    def _fatal_error(self, exc):
+        # should be called by exception handler only
+        logger.exception('Fatal error for %s', self)
+        self._close(exc)
+
+    def _close(self, exc=None):
+        self._closing = True
+        if self._buffer:
+            self._loop.remove_writer(self._fileno)
+        self._buffer.clear()
+        self._loop.remove_reader(self._fileno)
+        self._loop.call_soon(self._call_connection_lost, exc)
+
+    def _call_connection_lost(self, exc):
+        try:
+            self._protocol.connection_lost(exc)
+        finally:
+            self._pipe.close()
+            self._pipe = None
+            self._protocol = None
+            self._loop = None
+
+
+class _UnixSubprocessTransport(base_subprocess.BaseSubprocessTransport):
+
+    def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs):
+        stdin_w = None
+        if stdin == subprocess.PIPE:
+            # Use a socket pair for stdin, since not all platforms
+            # support selecting read events on the write end of a
+            # socket (which we use in order to detect closing of the
+            # other end).  Notably this is needed on AIX, and works
+            # just fine on other platforms.
+            stdin, stdin_w = self._loop._socketpair()
+        self._proc = subprocess.Popen(
+            args, shell=shell, stdin=stdin, stdout=stdout, stderr=stderr,
+            universal_newlines=False, bufsize=bufsize, **kwargs)
+        if stdin_w is not None:
+            stdin.close()
+            self._proc.stdin = open(stdin_w.detach(), 'rb', buffering=bufsize)
+
+
+class AbstractChildWatcher:
+    """Abstract base class for monitoring child processes.
+
+    Objects derived from this class monitor a collection of subprocesses and
+    report their termination or interruption by a signal.
+
+    New callbacks are registered with .add_child_handler(). Starting a new
+    process must be done within a 'with' block to allow the watcher to suspend
+    its activity until the new process if fully registered (this is needed to
+    prevent a race condition in some implementations).
+
+    Example:
+        with watcher:
+            proc = subprocess.Popen("sleep 1")
+            watcher.add_child_handler(proc.pid, callback)
+
+    Notes:
+        Implementations of this class must be thread-safe.
+
+        Since child watcher objects may catch the SIGCHLD signal and call
+        waitpid(-1), there should be only one active object per process.
+    """
+
+    def add_child_handler(self, pid, callback, *args):
+        """Register a new child handler.
+
+        Arrange for callback(pid, returncode, *args) to be called when
+        process 'pid' terminates. Specifying another callback for the same
+        process replaces the previous handler.
+
+        Note: callback() must be thread-safe
+        """
+        raise NotImplementedError()
+
+    def remove_child_handler(self, pid):
+        """Removes the handler for process 'pid'.
+
+        The function returns True if the handler was successfully removed,
+        False if there was nothing to remove."""
+
+        raise NotImplementedError()
+
+    def set_loop(self, loop):
+        """Reattach the watcher to another event loop.
+
+        Note: loop may be None
+        """
+        raise NotImplementedError()
+
+    def close(self):
+        """Close the watcher.
+
+        This must be called to make sure that any underlying resource is freed.
+        """
+        raise NotImplementedError()
+
+    def __enter__(self):
+        """Enter the watcher's context and allow starting new processes
+
+        This function must return self"""
+        raise NotImplementedError()
+
+    def __exit__(self, a, b, c):
+        """Exit the watcher's context"""
+        raise NotImplementedError()
+
+
+class BaseChildWatcher(AbstractChildWatcher):
+
+    def __init__(self, loop):
+        self._loop = None
+        self._callbacks = {}
+
+        self.set_loop(loop)
+
+    def close(self):
+        self.set_loop(None)
+        self._callbacks.clear()
+
+    def _do_waitpid(self, expected_pid):
+        raise NotImplementedError()
+
+    def _do_waitpid_all(self):
+        raise NotImplementedError()
+
+    def set_loop(self, loop):
+        assert loop is None or isinstance(loop, events.AbstractEventLoop)
+
+        if self._loop is not None:
+            self._loop.remove_signal_handler(signal.SIGCHLD)
+
+        self._loop = loop
+        if loop is not None:
+            loop.add_signal_handler(signal.SIGCHLD, self._sig_chld)
+
+            # Prevent a race condition in case a child terminated
+            # during the switch.
+            self._do_waitpid_all()
+
+    def remove_child_handler(self, pid):
+        try:
+            del self._callbacks[pid]
+            return True
+        except KeyError:
+            return False
+
+    def _sig_chld(self):
+        try:
+            self._do_waitpid_all()
+        except Exception:
+            logger.exception('Unknown exception in SIGCHLD handler')
+
+    def _compute_returncode(self, status):
+        if os.WIFSIGNALED(status):
+            # The child process died because of a signal.
+            return -os.WTERMSIG(status)
+        elif os.WIFEXITED(status):
+            # The child process exited (e.g sys.exit()).
+            return os.WEXITSTATUS(status)
+        else:
+            # The child exited, but we don't understand its status.
+            # This shouldn't happen, but if it does, let's just
+            # return that status; perhaps that helps debug it.
+            return status
+
+
+class SafeChildWatcher(BaseChildWatcher):
+    """'Safe' child watcher implementation.
+
+    This implementation avoids disrupting other code spawning processes by
+    polling explicitly each process in the SIGCHLD handler instead of calling
+    os.waitpid(-1).
+
+    This is a safe solution but it has a significant overhead when handling a
+    big number of children (O(n) each time SIGCHLD is raised)
+    """
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, a, b, c):
+        pass
+
+    def add_child_handler(self, pid, callback, *args):
+        self._callbacks[pid] = callback, args
+
+        # Prevent a race condition in case the child is already terminated.
+        self._do_waitpid(pid)
+
+    def _do_waitpid_all(self):
+
+        for pid in list(self._callbacks):
+            self._do_waitpid(pid)
+
+    def _do_waitpid(self, expected_pid):
+        assert expected_pid > 0
+
+        try:
+            pid, status = os.waitpid(expected_pid, os.WNOHANG)
+        except ChildProcessError:
+            # The child process is already reaped
+            # (may happen if waitpid() is called elsewhere).
+            pid = expected_pid
+            returncode = 255
+            logger.warning(
+                "Unknown child process pid %d, will report returncode 255",
+                pid)
+        else:
+            if pid == 0:
+                # The child process is still alive.
+                return
+
+            returncode = self._compute_returncode(status)
+
+        try:
+            callback, args = self._callbacks.pop(pid)
+        except KeyError:  # pragma: no cover
+            # May happen if .remove_child_handler() is called
+            # after os.waitpid() returns.
+            pass
+        else:
+            callback(pid, returncode, *args)
+
+
+class FastChildWatcher(BaseChildWatcher):
+    """'Fast' child watcher implementation.
+
+    This implementation reaps every terminated processes by calling
+    os.waitpid(-1) directly, possibly breaking other code spawning processes
+    and waiting for their termination.
+
+    There is no noticeable overhead when handling a big number of children
+    (O(1) each time a child terminates).
+    """
+    def __init__(self, loop):
+        super().__init__(loop)
+
+        self._lock = threading.Lock()
+        self._zombies = {}
+        self._forks = 0
+
+    def close(self):
+        super().close()
+        self._zombies.clear()
+
+    def __enter__(self):
+        with self._lock:
+            self._forks += 1
+
+            return self
+
+    def __exit__(self, a, b, c):
+        with self._lock:
+            self._forks -= 1
+
+            if self._forks or not self._zombies:
+                return
+
+            collateral_victims = str(self._zombies)
+            self._zombies.clear()
+
+        logger.warning(
+            "Caught subprocesses termination from unknown pids: %s",
+            collateral_victims)
+
+    def add_child_handler(self, pid, callback, *args):
+        assert self._forks, "Must use the context manager"
+
+        self._callbacks[pid] = callback, args
+
+        try:
+            # Ensure that the child is not already terminated.
+            # (raise KeyError if still alive)
+            returncode = self._zombies.pop(pid)
+
+            # Child is dead, therefore we can fire the callback immediately.
+            # First we remove it from the dict.
+            # (raise KeyError if .remove_child_handler() was called in-between)
+            del self._callbacks[pid]
+        except KeyError:
+            pass
+        else:
+            callback(pid, returncode, *args)
+
+    def _do_waitpid_all(self):
+        # Because of signal coalescing, we must keep calling waitpid() as
+        # long as we're able to reap a child.
+        while True:
+            try:
+                pid, status = os.waitpid(-1, os.WNOHANG)
+            except ChildProcessError:
+                # No more child processes exist.
+                return
+            else:
+                if pid == 0:
+                    # A child process is still alive.
+                    return
+
+                returncode = self._compute_returncode(status)
+
+            try:
+                callback, args = self._callbacks.pop(pid)
+            except KeyError:
+                # unknown child
+                with self._lock:
+                    if self._forks:
+                        # It may not be registered yet.
+                        self._zombies[pid] = returncode
+                        continue
+
+                logger.warning(
+                    "Caught subprocess termination from unknown pid: "
+                    "%d -> %d", pid, returncode)
+            else:
+                callback(pid, returncode, *args)
+
+
+class _UnixDefaultEventLoopPolicy(events.BaseDefaultEventLoopPolicy):
+    """XXX"""
+    _loop_factory = _UnixSelectorEventLoop
+
+    def __init__(self):
+        super().__init__()
+        self._watcher = None
+
+    def _init_watcher(self):
+        with events._lock:
+            if self._watcher is None:  # pragma: no branch
+                if isinstance(threading.current_thread(),
+                              threading._MainThread):
+                    self._watcher = SafeChildWatcher(self._local._loop)
+                else:
+                    self._watcher = SafeChildWatcher(None)
+
+    def set_event_loop(self, loop):
+        """Set the event loop.
+
+        As a side effect, if a child watcher was set before, then calling
+        .set_event_loop() from the main thread will call .set_loop(loop) on the
+        child watcher.
+        """
+
+        super().set_event_loop(loop)
+
+        if self._watcher is not None and \
+            isinstance(threading.current_thread(), threading._MainThread):
+            self._watcher.set_loop(loop)
+
+    def get_child_watcher(self):
+        """Get the child watcher
+
+        If not yet set, a SafeChildWatcher object is automatically created.
+        """
+        if self._watcher is None:
+            self._init_watcher()
+
+        return self._watcher
+
+    def set_child_watcher(self, watcher):
+        """Set the child watcher"""
+
+        assert watcher is None or isinstance(watcher, AbstractChildWatcher)
+
+        if self._watcher is not None:
+            self._watcher.close()
+
+        self._watcher = watcher
+
+SelectorEventLoop = _UnixSelectorEventLoop
+DefaultEventLoopPolicy = _UnixDefaultEventLoopPolicy
diff --git a/Lib/asyncio/windows_events.py b/Lib/asyncio/windows_events.py
new file mode 100644
index 0000000..64fe386
--- /dev/null
+++ b/Lib/asyncio/windows_events.py
@@ -0,0 +1,468 @@
+"""Selector and proactor eventloops for Windows."""
+
+import errno
+import socket
+import subprocess
+import weakref
+import struct
+import _winapi
+
+from . import events
+from . import base_subprocess
+from . import futures
+from . import proactor_events
+from . import selector_events
+from . import tasks
+from . import windows_utils
+from .log import logger
+from . import _overlapped
+
+
+__all__ = ['SelectorEventLoop', 'ProactorEventLoop', 'IocpProactor',
+           'DefaultEventLoopPolicy',
+           ]
+
+
+NULL = 0
+INFINITE = 0xffffffff
+ERROR_CONNECTION_REFUSED = 1225
+ERROR_CONNECTION_ABORTED = 1236
+
+
+class _OverlappedFuture(futures.Future):
+    """Subclass of Future which represents an overlapped operation.
+
+    Cancelling it will immediately cancel the overlapped operation.
+    """
+
+    def __init__(self, ov, *, loop=None):
+        super().__init__(loop=loop)
+        self.ov = ov
+
+    def cancel(self):
+        try:
+            self.ov.cancel()
+        except OSError:
+            pass
+        return super().cancel()
+
+
+class _WaitHandleFuture(futures.Future):
+    """Subclass of Future which represents a wait handle."""
+
+    def __init__(self, wait_handle, *, loop=None):
+        super().__init__(loop=loop)
+        self._wait_handle = wait_handle
+
+    def cancel(self):
+        super().cancel()
+        try:
+            _overlapped.UnregisterWait(self._wait_handle)
+        except OSError as e:
+            if e.winerror != _overlapped.ERROR_IO_PENDING:
+                raise
+
+
+class PipeServer(object):
+    """Class representing a pipe server.
+
+    This is much like a bound, listening socket.
+    """
+    def __init__(self, address):
+        self._address = address
+        self._free_instances = weakref.WeakSet()
+        self._pipe = self._server_pipe_handle(True)
+
+    def _get_unconnected_pipe(self):
+        # Create new instance and return previous one.  This ensures
+        # that (until the server is closed) there is always at least
+        # one pipe handle for address.  Therefore if a client attempt
+        # to connect it will not fail with FileNotFoundError.
+        tmp, self._pipe = self._pipe, self._server_pipe_handle(False)
+        return tmp
+
+    def _server_pipe_handle(self, first):
+        # Return a wrapper for a new pipe handle.
+        if self._address is None:
+            return None
+        flags = _winapi.PIPE_ACCESS_DUPLEX | _winapi.FILE_FLAG_OVERLAPPED
+        if first:
+            flags |= _winapi.FILE_FLAG_FIRST_PIPE_INSTANCE
+        h = _winapi.CreateNamedPipe(
+            self._address, flags,
+            _winapi.PIPE_TYPE_MESSAGE | _winapi.PIPE_READMODE_MESSAGE |
+            _winapi.PIPE_WAIT,
+            _winapi.PIPE_UNLIMITED_INSTANCES,
+            windows_utils.BUFSIZE, windows_utils.BUFSIZE,
+            _winapi.NMPWAIT_WAIT_FOREVER, _winapi.NULL)
+        pipe = windows_utils.PipeHandle(h)
+        self._free_instances.add(pipe)
+        return pipe
+
+    def close(self):
+        # Close all instances which have not been connected to by a client.
+        if self._address is not None:
+            for pipe in self._free_instances:
+                pipe.close()
+            self._pipe = None
+            self._address = None
+            self._free_instances.clear()
+
+    __del__ = close
+
+
+class _WindowsSelectorEventLoop(selector_events.BaseSelectorEventLoop):
+    """Windows version of selector event loop."""
+
+    def _socketpair(self):
+        return windows_utils.socketpair()
+
+
+class ProactorEventLoop(proactor_events.BaseProactorEventLoop):
+    """Windows version of proactor event loop using IOCP."""
+
+    def __init__(self, proactor=None):
+        if proactor is None:
+            proactor = IocpProactor()
+        super().__init__(proactor)
+
+    def _socketpair(self):
+        return windows_utils.socketpair()
+
+    @tasks.coroutine
+    def create_pipe_connection(self, protocol_factory, address):
+        f = self._proactor.connect_pipe(address)
+        pipe = yield from f
+        protocol = protocol_factory()
+        trans = self._make_duplex_pipe_transport(pipe, protocol,
+                                                 extra={'addr': address})
+        return trans, protocol
+
+    @tasks.coroutine
+    def start_serving_pipe(self, protocol_factory, address):
+        server = PipeServer(address)
+
+        def loop(f=None):
+            pipe = None
+            try:
+                if f:
+                    pipe = f.result()
+                    server._free_instances.discard(pipe)
+                    protocol = protocol_factory()
+                    self._make_duplex_pipe_transport(
+                        pipe, protocol, extra={'addr': address})
+                pipe = server._get_unconnected_pipe()
+                if pipe is None:
+                    return
+                f = self._proactor.accept_pipe(pipe)
+            except OSError:
+                if pipe and pipe.fileno() != -1:
+                    logger.exception('Pipe accept failed')
+                    pipe.close()
+            except futures.CancelledError:
+                if pipe:
+                    pipe.close()
+            else:
+                f.add_done_callback(loop)
+
+        self.call_soon(loop)
+        return [server]
+
+    def _stop_serving(self, server):
+        server.close()
+
+    @tasks.coroutine
+    def _make_subprocess_transport(self, protocol, args, shell,
+                                   stdin, stdout, stderr, bufsize,
+                                   extra=None, **kwargs):
+        transp = _WindowsSubprocessTransport(self, protocol, args, shell,
+                                             stdin, stdout, stderr, bufsize,
+                                             extra=None, **kwargs)
+        yield from transp._post_init()
+        return transp
+
+    def _subprocess_closed(self, transport):
+        pass
+
+
+class IocpProactor:
+    """Proactor implementation using IOCP."""
+
+    def __init__(self, concurrency=0xffffffff):
+        self._loop = None
+        self._results = []
+        self._iocp = _overlapped.CreateIoCompletionPort(
+            _overlapped.INVALID_HANDLE_VALUE, NULL, 0, concurrency)
+        self._cache = {}
+        self._registered = weakref.WeakSet()
+        self._stopped_serving = weakref.WeakSet()
+
+    def set_loop(self, loop):
+        self._loop = loop
+
+    def select(self, timeout=None):
+        if not self._results:
+            self._poll(timeout)
+        tmp = self._results
+        self._results = []
+        return tmp
+
+    def recv(self, conn, nbytes, flags=0):
+        self._register_with_iocp(conn)
+        ov = _overlapped.Overlapped(NULL)
+        if isinstance(conn, socket.socket):
+            ov.WSARecv(conn.fileno(), nbytes, flags)
+        else:
+            ov.ReadFile(conn.fileno(), nbytes)
+
+        def finish(trans, key, ov):
+            try:
+                return ov.getresult()
+            except OSError as exc:
+                if exc.winerror == _overlapped.ERROR_NETNAME_DELETED:
+                    raise ConnectionResetError(*exc.args)
+                else:
+                    raise
+
+        return self._register(ov, conn, finish)
+
+    def send(self, conn, buf, flags=0):
+        self._register_with_iocp(conn)
+        ov = _overlapped.Overlapped(NULL)
+        if isinstance(conn, socket.socket):
+            ov.WSASend(conn.fileno(), buf, flags)
+        else:
+            ov.WriteFile(conn.fileno(), buf)
+
+        def finish(trans, key, ov):
+            try:
+                return ov.getresult()
+            except OSError as exc:
+                if exc.winerror == _overlapped.ERROR_NETNAME_DELETED:
+                    raise ConnectionResetError(*exc.args)
+                else:
+                    raise
+
+        return self._register(ov, conn, finish)
+
+    def accept(self, listener):
+        self._register_with_iocp(listener)
+        conn = self._get_accept_socket(listener.family)
+        ov = _overlapped.Overlapped(NULL)
+        ov.AcceptEx(listener.fileno(), conn.fileno())
+
+        def finish_accept(trans, key, ov):
+            ov.getresult()
+            # Use SO_UPDATE_ACCEPT_CONTEXT so getsockname() etc work.
+            buf = struct.pack('@P', listener.fileno())
+            conn.setsockopt(socket.SOL_SOCKET,
+                            _overlapped.SO_UPDATE_ACCEPT_CONTEXT, buf)
+            conn.settimeout(listener.gettimeout())
+            return conn, conn.getpeername()
+
+        return self._register(ov, listener, finish_accept)
+
+    def connect(self, conn, address):
+        self._register_with_iocp(conn)
+        # The socket needs to be locally bound before we call ConnectEx().
+        try:
+            _overlapped.BindLocal(conn.fileno(), conn.family)
+        except OSError as e:
+            if e.winerror != errno.WSAEINVAL:
+                raise
+            # Probably already locally bound; check using getsockname().
+            if conn.getsockname()[1] == 0:
+                raise
+        ov = _overlapped.Overlapped(NULL)
+        ov.ConnectEx(conn.fileno(), address)
+
+        def finish_connect(trans, key, ov):
+            ov.getresult()
+            # Use SO_UPDATE_CONNECT_CONTEXT so getsockname() etc work.
+            conn.setsockopt(socket.SOL_SOCKET,
+                            _overlapped.SO_UPDATE_CONNECT_CONTEXT, 0)
+            return conn
+
+        return self._register(ov, conn, finish_connect)
+
+    def accept_pipe(self, pipe):
+        self._register_with_iocp(pipe)
+        ov = _overlapped.Overlapped(NULL)
+        ov.ConnectNamedPipe(pipe.fileno())
+
+        def finish(trans, key, ov):
+            ov.getresult()
+            return pipe
+
+        return self._register(ov, pipe, finish)
+
+    def connect_pipe(self, address):
+        ov = _overlapped.Overlapped(NULL)
+        ov.WaitNamedPipeAndConnect(address, self._iocp, ov.address)
+
+        def finish(err, handle, ov):
+            # err, handle were arguments passed to PostQueuedCompletionStatus()
+            # in a function run in a thread pool.
+            if err == _overlapped.ERROR_SEM_TIMEOUT:
+                # Connection did not succeed within time limit.
+                msg = _overlapped.FormatMessage(err)
+                raise ConnectionRefusedError(0, msg, None, err)
+            elif err != 0:
+                msg = _overlapped.FormatMessage(err)
+                raise OSError(0, msg, None, err)
+            else:
+                return windows_utils.PipeHandle(handle)
+
+        return self._register(ov, None, finish, wait_for_post=True)
+
+    def wait_for_handle(self, handle, timeout=None):
+        if timeout is None:
+            ms = _winapi.INFINITE
+        else:
+            ms = int(timeout * 1000 + 0.5)
+
+        # We only create ov so we can use ov.address as a key for the cache.
+        ov = _overlapped.Overlapped(NULL)
+        wh = _overlapped.RegisterWaitWithQueue(
+            handle, self._iocp, ov.address, ms)
+        f = _WaitHandleFuture(wh, loop=self._loop)
+
+        def finish(timed_out, _, ov):
+            if not f.cancelled():
+                try:
+                    _overlapped.UnregisterWait(wh)
+                except OSError as e:
+                    if e.winerror != _overlapped.ERROR_IO_PENDING:
+                        raise
+            return not timed_out
+
+        self._cache[ov.address] = (f, ov, None, finish)
+        return f
+
+    def _register_with_iocp(self, obj):
+        # To get notifications of finished ops on this objects sent to the
+        # completion port, were must register the handle.
+        if obj not in self._registered:
+            self._registered.add(obj)
+            _overlapped.CreateIoCompletionPort(obj.fileno(), self._iocp, 0, 0)
+            # XXX We could also use SetFileCompletionNotificationModes()
+            # to avoid sending notifications to completion port of ops
+            # that succeed immediately.
+
+    def _register(self, ov, obj, callback, wait_for_post=False):
+        # Return a future which will be set with the result of the
+        # operation when it completes.  The future's value is actually
+        # the value returned by callback().
+        f = _OverlappedFuture(ov, loop=self._loop)
+        if ov.pending or wait_for_post:
+            # Register the overlapped operation for later.  Note that
+            # we only store obj to prevent it from being garbage
+            # collected too early.
+            self._cache[ov.address] = (f, ov, obj, callback)
+        else:
+            # The operation has completed, so no need to postpone the
+            # work.  We cannot take this short cut if we need the
+            # NumberOfBytes, CompletionKey values returned by
+            # PostQueuedCompletionStatus().
+            try:
+                value = callback(None, None, ov)
+            except OSError as e:
+                f.set_exception(e)
+            else:
+                f.set_result(value)
+        return f
+
+    def _get_accept_socket(self, family):
+        s = socket.socket(family)
+        s.settimeout(0)
+        return s
+
+    def _poll(self, timeout=None):
+        if timeout is None:
+            ms = INFINITE
+        elif timeout < 0:
+            raise ValueError("negative timeout")
+        else:
+            ms = int(timeout * 1000 + 0.5)
+            if ms >= INFINITE:
+                raise ValueError("timeout too big")
+        while True:
+            status = _overlapped.GetQueuedCompletionStatus(self._iocp, ms)
+            if status is None:
+                return
+            err, transferred, key, address = status
+            try:
+                f, ov, obj, callback = self._cache.pop(address)
+            except KeyError:
+                # key is either zero, or it is used to return a pipe
+                # handle which should be closed to avoid a leak.
+                if key not in (0, _overlapped.INVALID_HANDLE_VALUE):
+                    _winapi.CloseHandle(key)
+                ms = 0
+                continue
+            if obj in self._stopped_serving:
+                f.cancel()
+            elif not f.cancelled():
+                try:
+                    value = callback(transferred, key, ov)
+                except OSError as e:
+                    f.set_exception(e)
+                    self._results.append(f)
+                else:
+                    f.set_result(value)
+                    self._results.append(f)
+            ms = 0
+
+    def _stop_serving(self, obj):
+        # obj is a socket or pipe handle.  It will be closed in
+        # BaseProactorEventLoop._stop_serving() which will make any
+        # pending operations fail quickly.
+        self._stopped_serving.add(obj)
+
+    def close(self):
+        # Cancel remaining registered operations.
+        for address, (f, ov, obj, callback) in list(self._cache.items()):
+            if obj is None:
+                # The operation was started with connect_pipe() which
+                # queues a task to Windows' thread pool.  This cannot
+                # be cancelled, so just forget it.
+                del self._cache[address]
+            else:
+                try:
+                    ov.cancel()
+                except OSError:
+                    pass
+
+        while self._cache:
+            if not self._poll(1):
+                logger.debug('taking long time to close proactor')
+
+        self._results = []
+        if self._iocp is not None:
+            _winapi.CloseHandle(self._iocp)
+            self._iocp = None
+
+
+class _WindowsSubprocessTransport(base_subprocess.BaseSubprocessTransport):
+
+    def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs):
+        self._proc = windows_utils.Popen(
+            args, shell=shell, stdin=stdin, stdout=stdout, stderr=stderr,
+            bufsize=bufsize, **kwargs)
+
+        def callback(f):
+            returncode = self._proc.poll()
+            self._process_exited(returncode)
+
+        f = self._loop._proactor.wait_for_handle(int(self._proc._handle))
+        f.add_done_callback(callback)
+
+
+SelectorEventLoop = _WindowsSelectorEventLoop
+
+
+class _WindowsDefaultEventLoopPolicy(events.BaseDefaultEventLoopPolicy):
+    _loop_factory = SelectorEventLoop
+
+
+DefaultEventLoopPolicy = _WindowsDefaultEventLoopPolicy
diff --git a/Lib/asyncio/windows_utils.py b/Lib/asyncio/windows_utils.py
new file mode 100644
index 0000000..aa1c064
--- /dev/null
+++ b/Lib/asyncio/windows_utils.py
@@ -0,0 +1,192 @@
+"""
+Various Windows specific bits and pieces
+"""
+
+import sys
+
+if sys.platform != 'win32':  # pragma: no cover
+    raise ImportError('win32 only')
+
+import socket
+import itertools
+import msvcrt
+import os
+import subprocess
+import tempfile
+import _winapi
+
+
+__all__ = ['socketpair', 'pipe', 'Popen', 'PIPE', 'PipeHandle']
+
+
+# Constants/globals
+
+
+BUFSIZE = 8192
+PIPE = subprocess.PIPE
+STDOUT = subprocess.STDOUT
+_mmap_counter = itertools.count()
+
+
+# Replacement for socket.socketpair()
+
+
+def socketpair(family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0):
+    """A socket pair usable as a self-pipe, for Windows.
+
+    Origin: https://gist.github.com/4325783, by Geert Jansen.  Public domain.
+    """
+    # We create a connected TCP socket. Note the trick with setblocking(0)
+    # that prevents us from having to create a thread.
+    lsock = socket.socket(family, type, proto)
+    lsock.bind(('localhost', 0))
+    lsock.listen(1)
+    addr, port = lsock.getsockname()
+    csock = socket.socket(family, type, proto)
+    csock.setblocking(False)
+    try:
+        csock.connect((addr, port))
+    except (BlockingIOError, InterruptedError):
+        pass
+    except Exception:
+        lsock.close()
+        csock.close()
+        raise
+    ssock, _ = lsock.accept()
+    csock.setblocking(True)
+    lsock.close()
+    return (ssock, csock)
+
+
+# Replacement for os.pipe() using handles instead of fds
+
+
+def pipe(*, duplex=False, overlapped=(True, True), bufsize=BUFSIZE):
+    """Like os.pipe() but with overlapped support and using handles not fds."""
+    address = tempfile.mktemp(prefix=r'\\.\pipe\python-pipe-%d-%d-' %
+                              (os.getpid(), next(_mmap_counter)))
+
+    if duplex:
+        openmode = _winapi.PIPE_ACCESS_DUPLEX
+        access = _winapi.GENERIC_READ | _winapi.GENERIC_WRITE
+        obsize, ibsize = bufsize, bufsize
+    else:
+        openmode = _winapi.PIPE_ACCESS_INBOUND
+        access = _winapi.GENERIC_WRITE
+        obsize, ibsize = 0, bufsize
+
+    openmode |= _winapi.FILE_FLAG_FIRST_PIPE_INSTANCE
+
+    if overlapped[0]:
+        openmode |= _winapi.FILE_FLAG_OVERLAPPED
+
+    if overlapped[1]:
+        flags_and_attribs = _winapi.FILE_FLAG_OVERLAPPED
+    else:
+        flags_and_attribs = 0
+
+    h1 = h2 = None
+    try:
+        h1 = _winapi.CreateNamedPipe(
+            address, openmode, _winapi.PIPE_WAIT,
+            1, obsize, ibsize, _winapi.NMPWAIT_WAIT_FOREVER, _winapi.NULL)
+
+        h2 = _winapi.CreateFile(
+            address, access, 0, _winapi.NULL, _winapi.OPEN_EXISTING,
+            flags_and_attribs, _winapi.NULL)
+
+        ov = _winapi.ConnectNamedPipe(h1, overlapped=True)
+        ov.GetOverlappedResult(True)
+        return h1, h2
+    except:
+        if h1 is not None:
+            _winapi.CloseHandle(h1)
+        if h2 is not None:
+            _winapi.CloseHandle(h2)
+        raise
+
+
+# Wrapper for a pipe handle
+
+
+class PipeHandle:
+    """Wrapper for an overlapped pipe handle which is vaguely file-object like.
+
+    The IOCP event loop can use these instead of socket objects.
+    """
+    def __init__(self, handle):
+        self._handle = handle
+
+    @property
+    def handle(self):
+        return self._handle
+
+    def fileno(self):
+        return self._handle
+
+    def close(self, *, CloseHandle=_winapi.CloseHandle):
+        if self._handle != -1:
+            CloseHandle(self._handle)
+            self._handle = -1
+
+    __del__ = close
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, t, v, tb):
+        self.close()
+
+
+# Replacement for subprocess.Popen using overlapped pipe handles
+
+
+class Popen(subprocess.Popen):
+    """Replacement for subprocess.Popen using overlapped pipe handles.
+
+    The stdin, stdout, stderr are None or instances of PipeHandle.
+    """
+    def __init__(self, args, stdin=None, stdout=None, stderr=None, **kwds):
+        assert not kwds.get('universal_newlines')
+        assert kwds.get('bufsize', 0) == 0
+        stdin_rfd = stdout_wfd = stderr_wfd = None
+        stdin_wh = stdout_rh = stderr_rh = None
+        if stdin == PIPE:
+            stdin_rh, stdin_wh = pipe(overlapped=(False, True), duplex=True)
+            stdin_rfd = msvcrt.open_osfhandle(stdin_rh, os.O_RDONLY)
+        else:
+            stdin_rfd = stdin
+        if stdout == PIPE:
+            stdout_rh, stdout_wh = pipe(overlapped=(True, False))
+            stdout_wfd = msvcrt.open_osfhandle(stdout_wh, 0)
+        else:
+            stdout_wfd = stdout
+        if stderr == PIPE:
+            stderr_rh, stderr_wh = pipe(overlapped=(True, False))
+            stderr_wfd = msvcrt.open_osfhandle(stderr_wh, 0)
+        elif stderr == STDOUT:
+            stderr_wfd = stdout_wfd
+        else:
+            stderr_wfd = stderr
+        try:
+            super().__init__(args, stdin=stdin_rfd, stdout=stdout_wfd,
+                             stderr=stderr_wfd, **kwds)
+        except:
+            for h in (stdin_wh, stdout_rh, stderr_rh):
+                if h is not None:
+                    _winapi.CloseHandle(h)
+            raise
+        else:
+            if stdin_wh is not None:
+                self.stdin = PipeHandle(stdin_wh)
+            if stdout_rh is not None:
+                self.stdout = PipeHandle(stdout_rh)
+            if stderr_rh is not None:
+                self.stderr = PipeHandle(stderr_rh)
+        finally:
+            if stdin == PIPE:
+                os.close(stdin_rfd)
+            if stdout == PIPE:
+                os.close(stdout_wfd)
+            if stderr == PIPE:
+                os.close(stderr_wfd)
diff --git a/Lib/bz2.py b/Lib/bz2.py
index 6e6a2b9..6bc611e 100644
--- a/Lib/bz2.py
+++ b/Lib/bz2.py
@@ -49,12 +49,12 @@
         which will be used to read or write the compressed data.
 
         mode can be 'r' for reading (default), 'w' for (over)writing,
-        or 'a' for appending. These can equivalently be given as 'rb',
-        'wb', and 'ab'.
+        'x' for creating exclusively, or 'a' for appending. These can
+        equivalently be given as 'rb', 'wb', 'xb', and 'ab'.
 
         buffering is ignored. Its use is deprecated.
 
-        If mode is 'w' or 'a', compresslevel can be a number between 1
+        If mode is 'w', 'x' or 'a', compresslevel can be a number between 1
         and 9 specifying the level of compression: 1 produces the least
         compression, and 9 (default) produces the most compression.
 
@@ -87,6 +87,10 @@
             mode = "wb"
             mode_code = _MODE_WRITE
             self._compressor = BZ2Compressor(compresslevel)
+        elif mode in ("x", "xb"):
+            mode = "xb"
+            mode_code = _MODE_WRITE
+            self._compressor = BZ2Compressor(compresslevel)
         elif mode in ("a", "ab"):
             mode = "ab"
             mode_code = _MODE_WRITE
@@ -443,9 +447,9 @@
     The filename argument can be an actual filename (a str or bytes
     object), or an existing file object to read from or write to.
 
-    The mode argument can be "r", "rb", "w", "wb", "a" or "ab" for
-    binary mode, or "rt", "wt" or "at" for text mode. The default mode
-    is "rb", and the default compresslevel is 9.
+    The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or
+    "ab" for binary mode, or "rt", "wt", "xt" or "at" for text mode.
+    The default mode is "rb", and the default compresslevel is 9.
 
     For binary mode, this function is equivalent to the BZ2File
     constructor: BZ2File(filename, mode, compresslevel). In this case,
diff --git a/Lib/cgi.py b/Lib/cgi.py
index b6fd407..1d8040c 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -676,7 +676,6 @@
                 encoding=self.encoding, errors=self.errors)
             for key, value in query:
                 self.list.append(MiniFieldStorage(key, value))
-            FieldStorageClass = None
 
         klass = self.FieldStorageClass or self.__class__
         first_line = self.fp.readline() # bytes
diff --git a/Lib/code.py b/Lib/code.py
index 9020aab..f8184b6 100644
--- a/Lib/code.py
+++ b/Lib/code.py
@@ -216,7 +216,7 @@
             self.write("Python %s on %s\n%s\n(%s)\n" %
                        (sys.version, sys.platform, cprt,
                         self.__class__.__name__))
-        else:
+        elif banner:
             self.write("%s\n" % str(banner))
         more = 0
         while 1:
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index 0f19f30..02bdc57 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -3,9 +3,9 @@
 
 # For backwards compatibility, continue to make the collections ABCs
 # available through the collections module.
-from collections.abc import *
-import collections.abc
-__all__ += collections.abc.__all__
+from _collections_abc import *
+import _collections_abc
+__all__ += _collections_abc.__all__
 
 from _collections import deque, defaultdict
 from operator import itemgetter as _itemgetter, eq as _eq
diff --git a/Lib/collections/abc.py b/Lib/collections/abc.py
index d19e592..891600d 100644
--- a/Lib/collections/abc.py
+++ b/Lib/collections/abc.py
@@ -1,728 +1,2 @@
-# Copyright 2007 Google, Inc. All Rights Reserved.
-# Licensed to PSF under a Contributor Agreement.
-
-"""Abstract Base Classes (ABCs) for collections, according to PEP 3119.
-
-Unit tests are in test_collections.
-"""
-
-from abc import ABCMeta, abstractmethod
-import sys
-
-__all__ = ["Hashable", "Iterable", "Iterator",
-           "Sized", "Container", "Callable",
-           "Set", "MutableSet",
-           "Mapping", "MutableMapping",
-           "MappingView", "KeysView", "ItemsView", "ValuesView",
-           "Sequence", "MutableSequence",
-           "ByteString",
-           ]
-
-# Private list of types that we want to register with the various ABCs
-# so that they will pass tests like:
-#       it = iter(somebytearray)
-#       assert isinstance(it, Iterable)
-# Note:  in other implementations, these types many not be distinct
-# and they make have their own implementation specific types that
-# are not included on this list.
-bytes_iterator = type(iter(b''))
-bytearray_iterator = type(iter(bytearray()))
-#callable_iterator = ???
-dict_keyiterator = type(iter({}.keys()))
-dict_valueiterator = type(iter({}.values()))
-dict_itemiterator = type(iter({}.items()))
-list_iterator = type(iter([]))
-list_reverseiterator = type(iter(reversed([])))
-range_iterator = type(iter(range(0)))
-set_iterator = type(iter(set()))
-str_iterator = type(iter(""))
-tuple_iterator = type(iter(()))
-zip_iterator = type(iter(zip()))
-## views ##
-dict_keys = type({}.keys())
-dict_values = type({}.values())
-dict_items = type({}.items())
-## misc ##
-mappingproxy = type(type.__dict__)
-
-
-### ONE-TRICK PONIES ###
-
-class Hashable(metaclass=ABCMeta):
-
-    __slots__ = ()
-
-    @abstractmethod
-    def __hash__(self):
-        return 0
-
-    @classmethod
-    def __subclasshook__(cls, C):
-        if cls is Hashable:
-            for B in C.__mro__:
-                if "__hash__" in B.__dict__:
-                    if B.__dict__["__hash__"]:
-                        return True
-                    break
-        return NotImplemented
-
-
-class Iterable(metaclass=ABCMeta):
-
-    __slots__ = ()
-
-    @abstractmethod
-    def __iter__(self):
-        while False:
-            yield None
-
-    @classmethod
-    def __subclasshook__(cls, C):
-        if cls is Iterable:
-            if any("__iter__" in B.__dict__ for B in C.__mro__):
-                return True
-        return NotImplemented
-
-
-class Iterator(Iterable):
-
-    __slots__ = ()
-
-    @abstractmethod
-    def __next__(self):
-        'Return the next item from the iterator. When exhausted, raise StopIteration'
-        raise StopIteration
-
-    def __iter__(self):
-        return self
-
-    @classmethod
-    def __subclasshook__(cls, C):
-        if cls is Iterator:
-            if (any("__next__" in B.__dict__ for B in C.__mro__) and
-                any("__iter__" in B.__dict__ for B in C.__mro__)):
-                return True
-        return NotImplemented
-
-Iterator.register(bytes_iterator)
-Iterator.register(bytearray_iterator)
-#Iterator.register(callable_iterator)
-Iterator.register(dict_keyiterator)
-Iterator.register(dict_valueiterator)
-Iterator.register(dict_itemiterator)
-Iterator.register(list_iterator)
-Iterator.register(list_reverseiterator)
-Iterator.register(range_iterator)
-Iterator.register(set_iterator)
-Iterator.register(str_iterator)
-Iterator.register(tuple_iterator)
-Iterator.register(zip_iterator)
-
-class Sized(metaclass=ABCMeta):
-
-    __slots__ = ()
-
-    @abstractmethod
-    def __len__(self):
-        return 0
-
-    @classmethod
-    def __subclasshook__(cls, C):
-        if cls is Sized:
-            if any("__len__" in B.__dict__ for B in C.__mro__):
-                return True
-        return NotImplemented
-
-
-class Container(metaclass=ABCMeta):
-
-    __slots__ = ()
-
-    @abstractmethod
-    def __contains__(self, x):
-        return False
-
-    @classmethod
-    def __subclasshook__(cls, C):
-        if cls is Container:
-            if any("__contains__" in B.__dict__ for B in C.__mro__):
-                return True
-        return NotImplemented
-
-
-class Callable(metaclass=ABCMeta):
-
-    __slots__ = ()
-
-    @abstractmethod
-    def __call__(self, *args, **kwds):
-        return False
-
-    @classmethod
-    def __subclasshook__(cls, C):
-        if cls is Callable:
-            if any("__call__" in B.__dict__ for B in C.__mro__):
-                return True
-        return NotImplemented
-
-
-### SETS ###
-
-
-class Set(Sized, Iterable, Container):
-
-    """A set is a finite, iterable container.
-
-    This class provides concrete generic implementations of all
-    methods except for __contains__, __iter__ and __len__.
-
-    To override the comparisons (presumably for speed, as the
-    semantics are fixed), all you have to do is redefine __le__ and
-    then the other operations will automatically follow suit.
-    """
-
-    __slots__ = ()
-
-    def __le__(self, other):
-        if not isinstance(other, Set):
-            return NotImplemented
-        if len(self) > len(other):
-            return False
-        for elem in self:
-            if elem not in other:
-                return False
-        return True
-
-    def __lt__(self, other):
-        if not isinstance(other, Set):
-            return NotImplemented
-        return len(self) < len(other) and self.__le__(other)
-
-    def __gt__(self, other):
-        if not isinstance(other, Set):
-            return NotImplemented
-        return other.__lt__(self)
-
-    def __ge__(self, other):
-        if not isinstance(other, Set):
-            return NotImplemented
-        return other.__le__(self)
-
-    def __eq__(self, other):
-        if not isinstance(other, Set):
-            return NotImplemented
-        return len(self) == len(other) and self.__le__(other)
-
-    def __ne__(self, other):
-        return not (self == other)
-
-    @classmethod
-    def _from_iterable(cls, it):
-        '''Construct an instance of the class from any iterable input.
-
-        Must override this method if the class constructor signature
-        does not accept an iterable for an input.
-        '''
-        return cls(it)
-
-    def __and__(self, other):
-        if not isinstance(other, Iterable):
-            return NotImplemented
-        return self._from_iterable(value for value in other if value in self)
-
-    def isdisjoint(self, other):
-        'Return True if two sets have a null intersection.'
-        for value in other:
-            if value in self:
-                return False
-        return True
-
-    def __or__(self, other):
-        if not isinstance(other, Iterable):
-            return NotImplemented
-        chain = (e for s in (self, other) for e in s)
-        return self._from_iterable(chain)
-
-    def __sub__(self, other):
-        if not isinstance(other, Set):
-            if not isinstance(other, Iterable):
-                return NotImplemented
-            other = self._from_iterable(other)
-        return self._from_iterable(value for value in self
-                                   if value not in other)
-
-    def __xor__(self, other):
-        if not isinstance(other, Set):
-            if not isinstance(other, Iterable):
-                return NotImplemented
-            other = self._from_iterable(other)
-        return (self - other) | (other - self)
-
-    def _hash(self):
-        """Compute the hash value of a set.
-
-        Note that we don't define __hash__: not all sets are hashable.
-        But if you define a hashable set type, its __hash__ should
-        call this function.
-
-        This must be compatible __eq__.
-
-        All sets ought to compare equal if they contain the same
-        elements, regardless of how they are implemented, and
-        regardless of the order of the elements; so there's not much
-        freedom for __eq__ or __hash__.  We match the algorithm used
-        by the built-in frozenset type.
-        """
-        MAX = sys.maxsize
-        MASK = 2 * MAX + 1
-        n = len(self)
-        h = 1927868237 * (n + 1)
-        h &= MASK
-        for x in self:
-            hx = hash(x)
-            h ^= (hx ^ (hx << 16) ^ 89869747)  * 3644798167
-            h &= MASK
-        h = h * 69069 + 907133923
-        h &= MASK
-        if h > MAX:
-            h -= MASK + 1
-        if h == -1:
-            h = 590923713
-        return h
-
-Set.register(frozenset)
-
-
-class MutableSet(Set):
-    """A mutable set is a finite, iterable container.
-
-    This class provides concrete generic implementations of all
-    methods except for __contains__, __iter__, __len__,
-    add(), and discard().
-
-    To override the comparisons (presumably for speed, as the
-    semantics are fixed), all you have to do is redefine __le__ and
-    then the other operations will automatically follow suit.
-    """
-
-    __slots__ = ()
-
-    @abstractmethod
-    def add(self, value):
-        """Add an element."""
-        raise NotImplementedError
-
-    @abstractmethod
-    def discard(self, value):
-        """Remove an element.  Do not raise an exception if absent."""
-        raise NotImplementedError
-
-    def remove(self, value):
-        """Remove an element. If not a member, raise a KeyError."""
-        if value not in self:
-            raise KeyError(value)
-        self.discard(value)
-
-    def pop(self):
-        """Return the popped value.  Raise KeyError if empty."""
-        it = iter(self)
-        try:
-            value = next(it)
-        except StopIteration:
-            raise KeyError
-        self.discard(value)
-        return value
-
-    def clear(self):
-        """This is slow (creates N new iterators!) but effective."""
-        try:
-            while True:
-                self.pop()
-        except KeyError:
-            pass
-
-    def __ior__(self, it):
-        for value in it:
-            self.add(value)
-        return self
-
-    def __iand__(self, it):
-        for value in (self - it):
-            self.discard(value)
-        return self
-
-    def __ixor__(self, it):
-        if it is self:
-            self.clear()
-        else:
-            if not isinstance(it, Set):
-                it = self._from_iterable(it)
-            for value in it:
-                if value in self:
-                    self.discard(value)
-                else:
-                    self.add(value)
-        return self
-
-    def __isub__(self, it):
-        if it is self:
-            self.clear()
-        else:
-            for value in it:
-                self.discard(value)
-        return self
-
-MutableSet.register(set)
-
-
-### MAPPINGS ###
-
-
-class Mapping(Sized, Iterable, Container):
-
-    __slots__ = ()
-
-    """A Mapping is a generic container for associating key/value
-    pairs.
-
-    This class provides concrete generic implementations of all
-    methods except for __getitem__, __iter__, and __len__.
-
-    """
-
-    @abstractmethod
-    def __getitem__(self, key):
-        raise KeyError
-
-    def get(self, key, default=None):
-        'D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.'
-        try:
-            return self[key]
-        except KeyError:
-            return default
-
-    def __contains__(self, key):
-        try:
-            self[key]
-        except KeyError:
-            return False
-        else:
-            return True
-
-    def keys(self):
-        "D.keys() -> a set-like object providing a view on D's keys"
-        return KeysView(self)
-
-    def items(self):
-        "D.items() -> a set-like object providing a view on D's items"
-        return ItemsView(self)
-
-    def values(self):
-        "D.values() -> an object providing a view on D's values"
-        return ValuesView(self)
-
-    def __eq__(self, other):
-        if not isinstance(other, Mapping):
-            return NotImplemented
-        return dict(self.items()) == dict(other.items())
-
-    def __ne__(self, other):
-        return not (self == other)
-
-Mapping.register(mappingproxy)
-
-
-class MappingView(Sized):
-
-    def __init__(self, mapping):
-        self._mapping = mapping
-
-    def __len__(self):
-        return len(self._mapping)
-
-    def __repr__(self):
-        return '{0.__class__.__name__}({0._mapping!r})'.format(self)
-
-
-class KeysView(MappingView, Set):
-
-    @classmethod
-    def _from_iterable(self, it):
-        return set(it)
-
-    def __contains__(self, key):
-        return key in self._mapping
-
-    def __iter__(self):
-        yield from self._mapping
-
-KeysView.register(dict_keys)
-
-
-class ItemsView(MappingView, Set):
-
-    @classmethod
-    def _from_iterable(self, it):
-        return set(it)
-
-    def __contains__(self, item):
-        key, value = item
-        try:
-            v = self._mapping[key]
-        except KeyError:
-            return False
-        else:
-            return v == value
-
-    def __iter__(self):
-        for key in self._mapping:
-            yield (key, self._mapping[key])
-
-ItemsView.register(dict_items)
-
-
-class ValuesView(MappingView):
-
-    def __contains__(self, value):
-        for key in self._mapping:
-            if value == self._mapping[key]:
-                return True
-        return False
-
-    def __iter__(self):
-        for key in self._mapping:
-            yield self._mapping[key]
-
-ValuesView.register(dict_values)
-
-
-class MutableMapping(Mapping):
-
-    __slots__ = ()
-
-    """A MutableMapping is a generic container for associating
-    key/value pairs.
-
-    This class provides concrete generic implementations of all
-    methods except for __getitem__, __setitem__, __delitem__,
-    __iter__, and __len__.
-
-    """
-
-    @abstractmethod
-    def __setitem__(self, key, value):
-        raise KeyError
-
-    @abstractmethod
-    def __delitem__(self, key):
-        raise KeyError
-
-    __marker = object()
-
-    def pop(self, key, default=__marker):
-        '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
-          If key is not found, d is returned if given, otherwise KeyError is raised.
-        '''
-        try:
-            value = self[key]
-        except KeyError:
-            if default is self.__marker:
-                raise
-            return default
-        else:
-            del self[key]
-            return value
-
-    def popitem(self):
-        '''D.popitem() -> (k, v), remove and return some (key, value) pair
-           as a 2-tuple; but raise KeyError if D is empty.
-        '''
-        try:
-            key = next(iter(self))
-        except StopIteration:
-            raise KeyError
-        value = self[key]
-        del self[key]
-        return key, value
-
-    def clear(self):
-        'D.clear() -> None.  Remove all items from D.'
-        try:
-            while True:
-                self.popitem()
-        except KeyError:
-            pass
-
-    def update(*args, **kwds):
-        ''' D.update([E, ]**F) -> None.  Update D from mapping/iterable E and F.
-            If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
-            If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
-            In either case, this is followed by: for k, v in F.items(): D[k] = v
-        '''
-        if len(args) > 2:
-            raise TypeError("update() takes at most 2 positional "
-                            "arguments ({} given)".format(len(args)))
-        elif not args:
-            raise TypeError("update() takes at least 1 argument (0 given)")
-        self = args[0]
-        other = args[1] if len(args) >= 2 else ()
-
-        if isinstance(other, Mapping):
-            for key in other:
-                self[key] = other[key]
-        elif hasattr(other, "keys"):
-            for key in other.keys():
-                self[key] = other[key]
-        else:
-            for key, value in other:
-                self[key] = value
-        for key, value in kwds.items():
-            self[key] = value
-
-    def setdefault(self, key, default=None):
-        'D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D'
-        try:
-            return self[key]
-        except KeyError:
-            self[key] = default
-        return default
-
-MutableMapping.register(dict)
-
-
-### SEQUENCES ###
-
-
-class Sequence(Sized, Iterable, Container):
-
-    """All the operations on a read-only sequence.
-
-    Concrete subclasses must override __new__ or __init__,
-    __getitem__, and __len__.
-    """
-
-    __slots__ = ()
-
-    @abstractmethod
-    def __getitem__(self, index):
-        raise IndexError
-
-    def __iter__(self):
-        i = 0
-        try:
-            while True:
-                v = self[i]
-                yield v
-                i += 1
-        except IndexError:
-            return
-
-    def __contains__(self, value):
-        for v in self:
-            if v == value:
-                return True
-        return False
-
-    def __reversed__(self):
-        for i in reversed(range(len(self))):
-            yield self[i]
-
-    def index(self, value):
-        '''S.index(value) -> integer -- return first index of value.
-           Raises ValueError if the value is not present.
-        '''
-        for i, v in enumerate(self):
-            if v == value:
-                return i
-        raise ValueError
-
-    def count(self, value):
-        'S.count(value) -> integer -- return number of occurrences of value'
-        return sum(1 for v in self if v == value)
-
-Sequence.register(tuple)
-Sequence.register(str)
-Sequence.register(range)
-Sequence.register(memoryview)
-
-
-class ByteString(Sequence):
-
-    """This unifies bytes and bytearray.
-
-    XXX Should add all their methods.
-    """
-
-    __slots__ = ()
-
-ByteString.register(bytes)
-ByteString.register(bytearray)
-
-
-class MutableSequence(Sequence):
-
-    __slots__ = ()
-
-    """All the operations on a read-write sequence.
-
-    Concrete subclasses must provide __new__ or __init__,
-    __getitem__, __setitem__, __delitem__, __len__, and insert().
-
-    """
-
-    @abstractmethod
-    def __setitem__(self, index, value):
-        raise IndexError
-
-    @abstractmethod
-    def __delitem__(self, index):
-        raise IndexError
-
-    @abstractmethod
-    def insert(self, index, value):
-        'S.insert(index, value) -- insert value before index'
-        raise IndexError
-
-    def append(self, value):
-        'S.append(value) -- append value to the end of the sequence'
-        self.insert(len(self), value)
-
-    def clear(self):
-        'S.clear() -> None -- remove all items from S'
-        try:
-            while True:
-                self.pop()
-        except IndexError:
-            pass
-
-    def reverse(self):
-        'S.reverse() -- reverse *IN PLACE*'
-        n = len(self)
-        for i in range(n//2):
-            self[i], self[n-i-1] = self[n-i-1], self[i]
-
-    def extend(self, values):
-        'S.extend(iterable) -- extend sequence by appending elements from the iterable'
-        for v in values:
-            self.append(v)
-
-    def pop(self, index=-1):
-        '''S.pop([index]) -> item -- remove and return item at index (default last).
-           Raise IndexError if list is empty or index is out of range.
-        '''
-        v = self[index]
-        del self[index]
-        return v
-
-    def remove(self, value):
-        '''S.remove(value) -- remove first occurrence of value.
-           Raise ValueError if the value is not present.
-        '''
-        del self[self.index(value)]
-
-    def __iadd__(self, values):
-        self.extend(values)
-        return self
-
-MutableSequence.register(list)
-MutableSequence.register(bytearray)  # Multiply inheriting, see ByteString
+from _collections_abc import *
+from _collections_abc import __all__
diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py
index 6298c65..07b5225 100644
--- a/Lib/concurrent/futures/process.py
+++ b/Lib/concurrent/futures/process.py
@@ -49,8 +49,9 @@
 import os
 from concurrent.futures import _base
 import queue
+from queue import Full
 import multiprocessing
-from multiprocessing.queues import SimpleQueue, Full
+from multiprocessing import SimpleQueue
 from multiprocessing.connection import wait
 import threading
 import weakref
diff --git a/Lib/contextlib.py b/Lib/contextlib.py
index aaab095..d3219f6 100644
--- a/Lib/contextlib.py
+++ b/Lib/contextlib.py
@@ -4,7 +4,8 @@
 from collections import deque
 from functools import wraps
 
-__all__ = ["contextmanager", "closing", "ContextDecorator", "ExitStack", "ignored"]
+__all__ = ["contextmanager", "closing", "ContextDecorator", "ExitStack",
+           "redirect_stdout", "suppress"]
 
 
 class ContextDecorator(object):
@@ -36,6 +37,16 @@
     def __init__(self, func, *args, **kwds):
         self.gen = func(*args, **kwds)
         self.func, self.args, self.kwds = func, args, kwds
+        # Issue 19330: ensure context manager instances have good docstrings
+        doc = getattr(func, "__doc__", None)
+        if doc is None:
+            doc = type(self).__doc__
+        self.__doc__ = doc
+        # Unfortunately, this still doesn't provide good help output when
+        # inspecting the created context manager instances, since pydoc
+        # currently bypasses the instance docstring and shows the docstring
+        # for the class instead.
+        # See http://bugs.python.org/issue19404 for more details.
 
     def _recreate_cm(self):
         # _GCM instances are one-shot context managers, so the
@@ -47,7 +58,7 @@
         try:
             return next(self.gen)
         except StopIteration:
-            raise RuntimeError("generator didn't yield")
+            raise RuntimeError("generator didn't yield") from None
 
     def __exit__(self, type, value, traceback):
         if type is None:
@@ -140,19 +151,63 @@
     def __exit__(self, *exc_info):
         self.thing.close()
 
-@contextmanager
-def ignored(*exceptions):
-    """Context manager to ignore specified exceptions
+class redirect_stdout:
+    """Context manager for temporarily redirecting stdout to another file
 
-         with ignored(OSError):
-             os.remove(somefile)
+        # How to send help() to stderr
+        with redirect_stdout(sys.stderr):
+            help(dir)
 
+        # How to write help() to a file
+        with open('help.txt', 'w') as f:
+            with redirect_stdout(f):
+                help(pow)
     """
-    try:
-        yield
-    except exceptions:
+
+    def __init__(self, new_target):
+        self._new_target = new_target
+        # We use a list of old targets to make this CM re-entrant
+        self._old_targets = []
+
+    def __enter__(self):
+        self._old_targets.append(sys.stdout)
+        sys.stdout = self._new_target
+        return self._new_target
+
+    def __exit__(self, exctype, excinst, exctb):
+        sys.stdout = self._old_targets.pop()
+
+
+class suppress:
+    """Context manager to suppress specified exceptions
+
+    After the exception is suppressed, execution proceeds with the next
+    statement following the with statement.
+
+         with suppress(FileNotFoundError):
+             os.remove(somefile)
+         # Execution still resumes here if the file was already removed
+    """
+
+    def __init__(self, *exceptions):
+        self._exceptions = exceptions
+
+    def __enter__(self):
         pass
 
+    def __exit__(self, exctype, excinst, exctb):
+        # Unlike isinstance and issubclass, CPython exception handling
+        # currently only looks at the concrete type hierarchy (ignoring
+        # the instance and subclass checking hooks). While Guido considers
+        # that a bug rather than a feature, it's a fairly hard one to fix
+        # due to various internal implementation details. suppress provides
+        # the simpler issubclass based semantics, rather than trying to
+        # exactly reproduce the limitations of the CPython interpreter.
+        #
+        # See http://bugs.python.org/issue12029 for more details
+        return exctype is not None and issubclass(exctype, self._exceptions)
+
+
 # Inspired by discussions on http://bugs.python.org/issue13585
 class ExitStack(object):
     """Context manager for dynamic management of a stack of exit callbacks
diff --git a/Lib/dis.py b/Lib/dis.py
index 2631f46..1fafcc5 100644
--- a/Lib/dis.py
+++ b/Lib/dis.py
@@ -3,6 +3,7 @@
 import sys
 import types
 import collections
+import io
 
 from opcode import *
 from opcode import __all__ as _opcodes_all
@@ -34,7 +35,7 @@
 
     """
     if x is None:
-        distb()
+        distb(file=file)
         return
     if hasattr(x, '__func__'):  # Method
         x = x.__func__
@@ -46,7 +47,7 @@
             if isinstance(x1, _have_code):
                 print("Disassembly of %s:" % name, file=file)
                 try:
-                    dis(x1)
+                    dis(x1, file=file)
                 except TypeError as msg:
                     print("Sorry:", msg, file=file)
                 print(file=file)
@@ -203,21 +204,27 @@
             # Column: Opcode argument details
             if self.argrepr:
                 fields.append('(' + self.argrepr + ')')
-        return ' '.join(fields)
+        return ' '.join(fields).rstrip()
 
 
-def get_instructions(x, *, line_offset=0):
+def get_instructions(x, *, first_line=None):
     """Iterator for the opcodes in methods, functions or code
 
     Generates a series of Instruction named tuples giving the details of
     each operations in the supplied code.
 
-    The given line offset is added to the 'starts_line' attribute of any
-    instructions that start a new line.
+    If *first_line* is not None, it indicates the line number that should
+    be reported for the first source line in the disassembled code.
+    Otherwise, the source line information (if any) is taken directly from
+    the disassembled code object.
     """
     co = _get_code_object(x)
     cell_names = co.co_cellvars + co.co_freevars
     linestarts = dict(findlinestarts(co))
+    if first_line is not None:
+        line_offset = first_line - co.co_firstlineno
+    else:
+        line_offset = 0
     return _get_instructions_bytes(co.co_code, co.co_varnames, co.co_names,
                                    co.co_consts, cell_names, linestarts,
                                    line_offset)
@@ -320,13 +327,14 @@
 
 def _disassemble_bytes(code, lasti=-1, varnames=None, names=None,
                        constants=None, cells=None, linestarts=None,
-                       *, file=None):
+                       *, file=None, line_offset=0):
     # Omit the line number column entirely if we have no line number info
     show_lineno = linestarts is not None
     # TODO?: Adjust width upwards if max(linestarts.values()) >= 1000?
     lineno_width = 3 if show_lineno else 0
     for instr in _get_instructions_bytes(code, varnames, names,
-                                         constants, cells, linestarts):
+                                         constants, cells, linestarts,
+                                         line_offset=line_offset):
         new_source_line = (show_lineno and
                            instr.starts_line is not None and
                            instr.offset > 0)
@@ -398,40 +406,44 @@
 
     Iterating over this yields the bytecode operations as Instruction instances.
     """
-    def __init__(self, x):
-        self.codeobj = _get_code_object(x)
-        self.cell_names = self.codeobj.co_cellvars + self.codeobj.co_freevars
-        self.linestarts = dict(findlinestarts(self.codeobj))
-        self.line_offset = 0
-        self.original_object = x
+    def __init__(self, x, *, first_line=None):
+        self.codeobj = co = _get_code_object(x)
+        if first_line is None:
+            self.first_line = co.co_firstlineno
+            self._line_offset = 0
+        else:
+            self.first_line = first_line
+            self._line_offset = first_line - co.co_firstlineno
+        self._cell_names = co.co_cellvars + co.co_freevars
+        self._linestarts = dict(findlinestarts(co))
+        self._original_object = x
 
     def __iter__(self):
         co = self.codeobj
         return _get_instructions_bytes(co.co_code, co.co_varnames, co.co_names,
-                                   co.co_consts, self.cell_names,
-                                   self.linestarts, self.line_offset)
+                                       co.co_consts, self._cell_names,
+                                       self._linestarts,
+                                       line_offset=self._line_offset)
 
     def __repr__(self):
-        return "{}({!r})".format(self.__class__.__name__, self.original_object)
+        return "{}({!r})".format(self.__class__.__name__,
+                                 self._original_object)
 
     def info(self):
         """Return formatted information about the code object."""
         return _format_code_info(self.codeobj)
 
-    def show_info(self, *, file=None):
-        """Print the information about the code object as returned by info()."""
-        print(self.info(), file=file)
-
-    def display_code(self, *, file=None):
-        """Print a formatted view of the bytecode operations.
-        """
+    def dis(self):
+        """Return a formatted view of the bytecode operations."""
         co = self.codeobj
-        return _disassemble_bytes(co.co_code, varnames=co.co_varnames,
-                                  names=co.co_names, constants=co.co_consts,
-                                  cells=self.cell_names,
-                                  linestarts=self.linestarts,
-                                  file=file
-                                 )
+        with io.StringIO() as output:
+            _disassemble_bytes(co.co_code, varnames=co.co_varnames,
+                               names=co.co_names, constants=co.co_consts,
+                               cells=self._cell_names,
+                               linestarts=self._linestarts,
+                               line_offset=self._line_offset,
+                               file=output)
+            return output.getvalue()
 
 
 def _test():
diff --git a/Lib/distutils/__init__.py b/Lib/distutils/__init__.py
index cc18893..355542e 100644
--- a/Lib/distutils/__init__.py
+++ b/Lib/distutils/__init__.py
@@ -13,5 +13,5 @@
 # Updated automatically by the Python release process.
 #
 #--start constants--
-__version__ = "3.4.0a3"
+__version__ = "3.4.0a4"
 #--end constants--
diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py
index 677723f..9100b96 100644
--- a/Lib/distutils/command/build_py.py
+++ b/Lib/distutils/command/build_py.py
@@ -127,7 +127,8 @@
             # Each pattern has to be converted to a platform-specific path
             filelist = glob(os.path.join(src_dir, convert_path(pattern)))
             # Files that match more than one pattern are only added once
-            files.extend([fn for fn in filelist if fn not in files])
+            files.extend([fn for fn in filelist if fn not in files
+                and os.path.isfile(fn)])
         return files
 
     def build_package_data(self):
diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py
index 88990b2..2871583 100644
--- a/Lib/distutils/command/upload.py
+++ b/Lib/distutils/command/upload.py
@@ -10,10 +10,9 @@
 import os, io
 import socket
 import platform
-import configparser
-import http.client as httpclient
 from base64 import standard_b64encode
-import urllib.parse
+from urllib.request import urlopen, Request, HTTPError
+from urllib.parse import urlparse
 
 # this keeps compatibility for 2.3 and 2.4
 if sys.version < "2.5":
@@ -66,6 +65,15 @@
             self.upload_file(command, pyversion, filename)
 
     def upload_file(self, command, pyversion, filename):
+        # Makes sure the repository URL is compliant
+        schema, netloc, url, params, query, fragments = \
+            urlparse(self.repository)
+        if params or query or fragments:
+            raise AssertionError("Incompatible url %s" % self.repository)
+
+        if schema not in ('http', 'https'):
+            raise AssertionError("unsupported schema " + schema)
+
         # Sign if requested
         if self.sign:
             gpg_args = ["gpg", "--detach-sign", "-a", filename]
@@ -162,41 +170,31 @@
         self.announce("Submitting %s to %s" % (filename, self.repository), log.INFO)
 
         # build the Request
-        # We can't use urllib since we need to send the Basic
-        # auth right with the first request
-        # TODO(jhylton): Can we fix urllib?
-        schema, netloc, url, params, query, fragments = \
-            urllib.parse.urlparse(self.repository)
-        assert not params and not query and not fragments
-        if schema == 'http':
-            http = httpclient.HTTPConnection(netloc)
-        elif schema == 'https':
-            http = httpclient.HTTPSConnection(netloc)
-        else:
-            raise AssertionError("unsupported schema "+schema)
+        headers = {'Content-type':
+                        'multipart/form-data; boundary=%s' % boundary,
+                   'Content-length': str(len(body)),
+                   'Authorization': auth}
 
-        data = ''
-        loglevel = log.INFO
+        request = Request(self.repository, data=body,
+                          headers=headers)
+        # send the data
         try:
-            http.connect()
-            http.putrequest("POST", url)
-            http.putheader('Content-type',
-                           'multipart/form-data; boundary=%s'%boundary)
-            http.putheader('Content-length', str(len(body)))
-            http.putheader('Authorization', auth)
-            http.endheaders()
-            http.send(body)
+            result = urlopen(request)
+            status = result.getcode()
+            reason = result.msg
         except OSError as e:
             self.announce(str(e), log.ERROR)
             return
+        except HTTPError as e:
+            status = e.code
+            reason = e.msg
 
-        r = http.getresponse()
-        if r.status == 200:
-            self.announce('Server response (%s): %s' % (r.status, r.reason),
+        if status == 200:
+            self.announce('Server response (%s): %s' % (status, reason),
                           log.INFO)
         else:
-            self.announce('Upload failed (%s): %s' % (r.status, r.reason),
+            self.announce('Upload failed (%s): %s' % (status, reason),
                           log.ERROR)
         if self.show_response:
-            msg = '\n'.join(('-' * 75, r.read(), '-' * 75))
+            msg = '\n'.join(('-' * 75, result.read(), '-' * 75))
             self.announce(msg, log.INFO)
diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py
index f7fac08..11a2102 100644
--- a/Lib/distutils/dist.py
+++ b/Lib/distutils/dist.py
@@ -5,6 +5,7 @@
 """
 
 import sys, os, re
+from email import message_from_file
 
 try:
     import warnings
@@ -999,25 +1000,80 @@
                          "provides", "requires", "obsoletes",
                          )
 
-    def __init__ (self):
-        self.name = None
-        self.version = None
-        self.author = None
-        self.author_email = None
+    def __init__(self, path=None):
+        if path is not None:
+            self.read_pkg_file(open(path))
+        else:
+            self.name = None
+            self.version = None
+            self.author = None
+            self.author_email = None
+            self.maintainer = None
+            self.maintainer_email = None
+            self.url = None
+            self.license = None
+            self.description = None
+            self.long_description = None
+            self.keywords = None
+            self.platforms = None
+            self.classifiers = None
+            self.download_url = None
+            # PEP 314
+            self.provides = None
+            self.requires = None
+            self.obsoletes = None
+
+    def read_pkg_file(self, file):
+        """Reads the metadata values from a file object."""
+        msg = message_from_file(file)
+
+        def _read_field(name):
+            value = msg[name]
+            if value == 'UNKNOWN':
+                return None
+            return value
+
+        def _read_list(name):
+            values = msg.get_all(name, None)
+            if values == []:
+                return None
+            return values
+
+        metadata_version = msg['metadata-version']
+        self.name = _read_field('name')
+        self.version = _read_field('version')
+        self.description = _read_field('summary')
+        # we are filling author only.
+        self.author = _read_field('author')
         self.maintainer = None
+        self.author_email = _read_field('author-email')
         self.maintainer_email = None
-        self.url = None
-        self.license = None
-        self.description = None
-        self.long_description = None
-        self.keywords = None
-        self.platforms = None
-        self.classifiers = None
-        self.download_url = None
-        # PEP 314
-        self.provides = None
-        self.requires = None
-        self.obsoletes = None
+        self.url = _read_field('home-page')
+        self.license = _read_field('license')
+
+        if 'download-url' in msg:
+            self.download_url = _read_field('download-url')
+        else:
+            self.download_url = None
+
+        self.long_description = _read_field('description')
+        self.description = _read_field('summary')
+
+        if 'keywords' in msg:
+            self.keywords = _read_field('keywords').split(',')
+
+        self.platforms = _read_list('platform')
+        self.classifiers = _read_list('classifier')
+
+        # PEP 314 - these fields only exist in 1.1
+        if metadata_version == '1.1':
+            self.requires = _read_list('requires')
+            self.provides = _read_list('provides')
+            self.obsoletes = _read_list('obsoletes')
+        else:
+            self.requires = None
+            self.provides = None
+            self.obsoletes = None
 
     def write_pkg_info(self, base_dir):
         """Write the PKG-INFO file into the release tree.
diff --git a/Lib/distutils/tests/test_build_py.py b/Lib/distutils/tests/test_build_py.py
index 1b410c3..c8f6b89 100644
--- a/Lib/distutils/tests/test_build_py.py
+++ b/Lib/distutils/tests/test_build_py.py
@@ -123,6 +123,37 @@
         self.assertEqual(sorted(found),
                          ['boiledeggs.%s.pyo' % sys.implementation.cache_tag])
 
+    def test_dir_in_package_data(self):
+        """
+        A directory in package_data should not be added to the filelist.
+        """
+        # See bug 19286
+        sources = self.mkdtemp()
+        pkg_dir = os.path.join(sources, "pkg")
+
+        os.mkdir(pkg_dir)
+        open(os.path.join(pkg_dir, "__init__.py"), "w").close()
+
+        docdir = os.path.join(pkg_dir, "doc")
+        os.mkdir(docdir)
+        open(os.path.join(docdir, "testfile"), "w").close()
+
+        # create the directory that could be incorrectly detected as a file
+        os.mkdir(os.path.join(docdir, 'otherdir'))
+
+        os.chdir(sources)
+        dist = Distribution({"packages": ["pkg"],
+                             "package_data": {"pkg": ["doc/*"]}})
+        # script_name need not exist, it just need to be initialized
+        dist.script_name = os.path.join(sources, "setup.py")
+        dist.script_args = ["build"]
+        dist.parse_command_line()
+
+        try:
+            dist.run_commands()
+        except DistutilsFileError:
+            self.fail("failed package_data when data dir includes a dir")
+
     def test_dont_write_bytecode(self):
         # makes sure byte_compile is not used
         dist = self.create_dist()[1]
diff --git a/Lib/distutils/tests/test_dist.py b/Lib/distutils/tests/test_dist.py
index 66c20e2..9a8ca19 100644
--- a/Lib/distutils/tests/test_dist.py
+++ b/Lib/distutils/tests/test_dist.py
@@ -8,7 +8,7 @@
 
 from unittest import mock
 
-from distutils.dist import Distribution, fix_help_options
+from distutils.dist import Distribution, fix_help_options, DistributionMetadata
 from distutils.cmd import Command
 
 from test.support import TESTFN, captured_stdout, run_unittest
@@ -388,6 +388,33 @@
         self.assertTrue(output)
 
 
+    def test_read_metadata(self):
+        attrs = {"name": "package",
+                 "version": "1.0",
+                 "long_description": "desc",
+                 "description": "xxx",
+                 "download_url": "http://example.com",
+                 "keywords": ['one', 'two'],
+                 "requires": ['foo']}
+
+        dist = Distribution(attrs)
+        metadata = dist.metadata
+
+        # write it then reloads it
+        PKG_INFO = io.StringIO()
+        metadata.write_pkg_file(PKG_INFO)
+        PKG_INFO.seek(0)
+        metadata.read_pkg_file(PKG_INFO)
+
+        self.assertEquals(metadata.name, "package")
+        self.assertEquals(metadata.version, "1.0")
+        self.assertEquals(metadata.description, "xxx")
+        self.assertEquals(metadata.download_url, 'http://example.com')
+        self.assertEquals(metadata.keywords, ['one', 'two'])
+        self.assertEquals(metadata.platforms, ['UNKNOWN'])
+        self.assertEquals(metadata.obsoletes, None)
+        self.assertEquals(metadata.requires, ['foo'])
+
 def test_suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(DistributionTestCase))
diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py
index 4a71ca4..7d704cf 100644
--- a/Lib/distutils/tests/test_upload.py
+++ b/Lib/distutils/tests/test_upload.py
@@ -1,9 +1,9 @@
 """Tests for distutils.command.upload."""
 import os
 import unittest
-import http.client as httpclient
 from test.support import run_unittest
 
+from distutils.command import upload as upload_mod
 from distutils.command.upload import upload
 from distutils.core import Distribution
 
@@ -37,47 +37,36 @@
 [server1]
 username:me
 """
-class Response(object):
-    def __init__(self, status=200, reason='OK'):
-        self.status = status
-        self.reason = reason
 
-class FakeConnection(object):
+class FakeOpen(object):
 
-    def __init__(self):
-        self.requests = []
-        self.headers = []
-        self.body = ''
+    def __init__(self, url):
+        self.url = url
+        if not isinstance(url, str):
+            self.req = url
+        else:
+            self.req = None
+        self.msg = 'OK'
 
-    def __call__(self, netloc):
-        return self
+    def getcode(self):
+        return 200
 
-    def connect(self):
-        pass
-    endheaders = connect
-
-    def putrequest(self, method, url):
-        self.requests.append((method, url))
-
-    def putheader(self, name, value):
-        self.headers.append((name, value))
-
-    def send(self, body):
-        self.body = body
-
-    def getresponse(self):
-        return Response()
 
 class uploadTestCase(PyPIRCCommandTestCase):
 
     def setUp(self):
         super(uploadTestCase, self).setUp()
-        if hasattr(httpclient, 'HTTPSConnection'):
-            self.addCleanup(setattr, httpclient, 'HTTPSConnection',
-                            httpclient.HTTPSConnection)
-        else:
-            self.addCleanup(delattr, httpclient, 'HTTPSConnection')
-        self.conn = httpclient.HTTPSConnection = FakeConnection()
+        self.old_open = upload_mod.urlopen
+        upload_mod.urlopen = self._urlopen
+        self.last_open = None
+
+    def tearDown(self):
+        upload_mod.urlopen = self.old_open
+        super(uploadTestCase, self).tearDown()
+
+    def _urlopen(self, url):
+        self.last_open = FakeOpen(url)
+        return self.last_open
 
     def test_finalize_options(self):
 
@@ -122,14 +111,14 @@
         cmd.ensure_finalized()
         cmd.run()
 
-        # what did we send ?
-        headers = dict(self.conn.headers)
+         # what did we send ?
+        headers = dict(self.last_open.req.headers)
         self.assertEqual(headers['Content-length'], '2087')
-        self.assertTrue(headers['Content-type'].startswith('multipart/form-data'))
-        self.assertFalse('\n' in headers['Authorization'])
-
-        self.assertEqual(self.conn.requests, [('POST', '/pypi')])
-        self.assertTrue((b'xxx') in self.conn.body)
+        self.assert_(headers['Content-type'].startswith('multipart/form-data'))
+        self.assertEquals(self.last_open.req.get_method(), 'POST')
+        self.assertEquals(self.last_open.req.get_full_url(),
+                          'https://pypi.python.org/pypi')
+        self.assert_(b'xxx' in self.last_open.req.data)
 
 def test_suite():
     return unittest.makeSuite(uploadTestCase)
diff --git a/Lib/email/contentmanager.py b/Lib/email/contentmanager.py
new file mode 100644
index 0000000..d363652
--- /dev/null
+++ b/Lib/email/contentmanager.py
@@ -0,0 +1,249 @@
+import binascii
+import email.charset
+import email.message
+import email.errors
+from email import quoprimime
+
+class ContentManager:
+
+    def __init__(self):
+        self.get_handlers = {}
+        self.set_handlers = {}
+
+    def add_get_handler(self, key, handler):
+        self.get_handlers[key] = handler
+
+    def get_content(self, msg, *args, **kw):
+        content_type = msg.get_content_type()
+        if content_type in self.get_handlers:
+            return self.get_handlers[content_type](msg, *args, **kw)
+        maintype = msg.get_content_maintype()
+        if maintype in self.get_handlers:
+            return self.get_handlers[maintype](msg, *args, **kw)
+        if '' in self.get_handlers:
+            return self.get_handlers[''](msg, *args, **kw)
+        raise KeyError(content_type)
+
+    def add_set_handler(self, typekey, handler):
+        self.set_handlers[typekey] = handler
+
+    def set_content(self, msg, obj, *args, **kw):
+        if msg.get_content_maintype() == 'multipart':
+            # XXX: is this error a good idea or not?  We can remove it later,
+            # but we can't add it later, so do it for now.
+            raise TypeError("set_content not valid on multipart")
+        handler = self._find_set_handler(msg, obj)
+        msg.clear_content()
+        handler(msg, obj, *args, **kw)
+
+    def _find_set_handler(self, msg, obj):
+        full_path_for_error = None
+        for typ in type(obj).__mro__:
+            if typ in self.set_handlers:
+                return self.set_handlers[typ]
+            qname = typ.__qualname__
+            modname = getattr(typ, '__module__', '')
+            full_path = '.'.join((modname, qname)) if modname else qname
+            if full_path_for_error is None:
+                full_path_for_error = full_path
+            if full_path in self.set_handlers:
+                return self.set_handlers[full_path]
+            if qname in self.set_handlers:
+                return self.set_handlers[qname]
+            name = typ.__name__
+            if name in self.set_handlers:
+                return self.set_handlers[name]
+        if None in self.set_handlers:
+            return self.set_handlers[None]
+        raise KeyError(full_path_for_error)
+
+
+raw_data_manager = ContentManager()
+
+
+def get_text_content(msg, errors='replace'):
+    content = msg.get_payload(decode=True)
+    charset = msg.get_param('charset', 'ASCII')
+    return content.decode(charset, errors=errors)
+raw_data_manager.add_get_handler('text', get_text_content)
+
+
+def get_non_text_content(msg):
+    return msg.get_payload(decode=True)
+for maintype in 'audio image video application'.split():
+    raw_data_manager.add_get_handler(maintype, get_non_text_content)
+
+
+def get_message_content(msg):
+    return msg.get_payload(0)
+for subtype in 'rfc822 external-body'.split():
+    raw_data_manager.add_get_handler('message/'+subtype, get_message_content)
+
+
+def get_and_fixup_unknown_message_content(msg):
+    # If we don't understand a message subtype, we are supposed to treat it as
+    # if it were application/octet-stream, per
+    # tools.ietf.org/html/rfc2046#section-5.2.4.  Feedparser doesn't do that,
+    # so do our best to fix things up.  Note that it is *not* appropriate to
+    # model message/partial content as Message objects, so they are handled
+    # here as well.  (How to reassemble them is out of scope for this comment :)
+    return bytes(msg.get_payload(0))
+raw_data_manager.add_get_handler('message',
+                                 get_and_fixup_unknown_message_content)
+
+
+def _prepare_set(msg, maintype, subtype, headers):
+    msg['Content-Type'] = '/'.join((maintype, subtype))
+    if headers:
+        if not hasattr(headers[0], 'name'):
+            mp = msg.policy
+            headers = [mp.header_factory(*mp.header_source_parse([header]))
+                       for header in headers]
+        try:
+            for header in headers:
+                if header.defects:
+                    raise header.defects[0]
+                msg[header.name] = header
+        except email.errors.HeaderDefect as exc:
+            raise ValueError("Invalid header: {}".format(
+                                header.fold(policy=msg.policy))) from exc
+
+
+def _finalize_set(msg, disposition, filename, cid, params):
+    if disposition is None and filename is not None:
+        disposition = 'attachment'
+    if disposition is not None:
+        msg['Content-Disposition'] = disposition
+    if filename is not None:
+        msg.set_param('filename',
+                      filename,
+                      header='Content-Disposition',
+                      replace=True)
+    if cid is not None:
+        msg['Content-ID'] = cid
+    if params is not None:
+        for key, value in params.items():
+            msg.set_param(key, value)
+
+
+# XXX: This is a cleaned-up version of base64mime.body_encode.  It would
+# be nice to drop both this and quoprimime.body_encode in favor of
+# enhanced binascii routines that accepted a max_line_length parameter.
+def _encode_base64(data, max_line_length):
+    encoded_lines = []
+    unencoded_bytes_per_line = max_line_length * 3 // 4
+    for i in range(0, len(data), unencoded_bytes_per_line):
+        thisline = data[i:i+unencoded_bytes_per_line]
+        encoded_lines.append(binascii.b2a_base64(thisline).decode('ascii'))
+    return ''.join(encoded_lines)
+
+
+def _encode_text(string, charset, cte, policy):
+    lines = string.encode(charset).splitlines()
+    linesep = policy.linesep.encode('ascii')
+    def embeded_body(lines): return linesep.join(lines) + linesep
+    def normal_body(lines): return b'\n'.join(lines) + b'\n'
+    if cte==None:
+        # Use heuristics to decide on the "best" encoding.
+        try:
+            return '7bit', normal_body(lines).decode('ascii')
+        except UnicodeDecodeError:
+            pass
+        if (policy.cte_type == '8bit' and
+                max(len(x) for x in lines) <= policy.max_line_length):
+            return '8bit', normal_body(lines).decode('ascii', 'surrogateescape')
+        sniff = embeded_body(lines[:10])
+        sniff_qp = quoprimime.body_encode(sniff.decode('latin-1'),
+                                          policy.max_line_length)
+        sniff_base64 = binascii.b2a_base64(sniff)
+        # This is a little unfair to qp; it includes lineseps, base64 doesn't.
+        if len(sniff_qp) > len(sniff_base64):
+            cte = 'base64'
+        else:
+            cte = 'quoted-printable'
+            if len(lines) <= 10:
+                return cte, sniff_qp
+    if cte == '7bit':
+        data = normal_body(lines).decode('ascii')
+    elif cte == '8bit':
+        data = normal_body(lines).decode('ascii', 'surrogateescape')
+    elif cte == 'quoted-printable':
+        data = quoprimime.body_encode(normal_body(lines).decode('latin-1'),
+                                      policy.max_line_length)
+    elif cte == 'base64':
+        data = _encode_base64(embeded_body(lines), policy.max_line_length)
+    else:
+        raise ValueError("Unknown content transfer encoding {}".format(cte))
+    return cte, data
+
+
+def set_text_content(msg, string, subtype="plain", charset='utf-8', cte=None,
+                     disposition=None, filename=None, cid=None,
+                     params=None, headers=None):
+    _prepare_set(msg, 'text', subtype, headers)
+    cte, payload = _encode_text(string, charset, cte, msg.policy)
+    msg.set_payload(payload)
+    msg.set_param('charset',
+                  email.charset.ALIASES.get(charset, charset),
+                  replace=True)
+    msg['Content-Transfer-Encoding'] = cte
+    _finalize_set(msg, disposition, filename, cid, params)
+raw_data_manager.add_set_handler(str, set_text_content)
+
+
+def set_message_content(msg, message, subtype="rfc822", cte=None,
+                       disposition=None, filename=None, cid=None,
+                       params=None, headers=None):
+    if subtype == 'partial':
+        raise ValueError("message/partial is not supported for Message objects")
+    if subtype == 'rfc822':
+        if cte not in (None, '7bit', '8bit', 'binary'):
+            # http://tools.ietf.org/html/rfc2046#section-5.2.1 mandate.
+            raise ValueError(
+                "message/rfc822 parts do not support cte={}".format(cte))
+        # 8bit will get coerced on serialization if policy.cte_type='7bit'.  We
+        # may end up claiming 8bit when it isn't needed, but the only negative
+        # result of that should be a gateway that needs to coerce to 7bit
+        # having to look through the whole embedded message to discover whether
+        # or not it actually has to do anything.
+        cte = '8bit' if cte is None else cte
+    elif subtype == 'external-body':
+        if cte not in (None, '7bit'):
+            # http://tools.ietf.org/html/rfc2046#section-5.2.3 mandate.
+            raise ValueError(
+                "message/external-body parts do not support cte={}".format(cte))
+        cte = '7bit'
+    elif cte is None:
+        # http://tools.ietf.org/html/rfc2046#section-5.2.4 says all future
+        # subtypes should be restricted to 7bit, so assume that.
+        cte = '7bit'
+    _prepare_set(msg, 'message', subtype, headers)
+    msg.set_payload([message])
+    msg['Content-Transfer-Encoding'] = cte
+    _finalize_set(msg, disposition, filename, cid, params)
+raw_data_manager.add_set_handler(email.message.Message, set_message_content)
+
+
+def set_bytes_content(msg, data, maintype, subtype, cte='base64',
+                     disposition=None, filename=None, cid=None,
+                     params=None, headers=None):
+    _prepare_set(msg, maintype, subtype, headers)
+    if cte == 'base64':
+        data = _encode_base64(data, max_line_length=msg.policy.max_line_length)
+    elif cte == 'quoted-printable':
+        # XXX: quoprimime.body_encode won't encode newline characters in data,
+        # so we can't use it.  This means max_line_length is ignored.  Another
+        # bug to fix later.  (Note: encoders.quopri is broken on line ends.)
+        data = binascii.b2a_qp(data, istext=False, header=False, quotetabs=True)
+        data = data.decode('ascii')
+    elif cte == '7bit':
+        # Make sure it really is only ASCII.  The early warning here seems
+        # worth the overhead...if you care write your own content manager :).
+        data.encode('ascii')
+    elif cte in ('8bit', 'binary'):
+        data = data.decode('ascii', 'surrogateescape')
+    msg.set_payload(data)
+    msg['Content-Transfer-Encoding'] = cte
+    _finalize_set(msg, disposition, filename, cid, params)
+for typ in (bytes, bytearray, memoryview):
+    raw_data_manager.add_set_handler(typ, set_bytes_content)
diff --git a/Lib/email/message.py b/Lib/email/message.py
index ebaf1c1..ce673b0 100644
--- a/Lib/email/message.py
+++ b/Lib/email/message.py
@@ -8,8 +8,6 @@
 
 import re
 import uu
-import base64
-import binascii
 from io import BytesIO, StringIO
 
 # Intrapackage imports
@@ -664,7 +662,7 @@
         If your application doesn't care whether the parameter was RFC 2231
         encoded, it can turn the return value into a string as follows:
 
-            param = msg.get_param('foo')
+            rawparam = msg.get_param('foo')
             param = email.utils.collapse_rfc2231_value(rawparam)
 
         """
@@ -679,7 +677,7 @@
         return failobj
 
     def set_param(self, param, value, header='Content-Type', requote=True,
-                  charset=None, language=''):
+                  charset=None, language='', replace=False):
         """Set a parameter in the Content-Type header.
 
         If the parameter already exists in the header, its value will be
@@ -723,8 +721,11 @@
                 else:
                     ctype = SEMISPACE.join([ctype, append_param])
         if ctype != self.get(header):
-            del self[header]
-            self[header] = ctype
+            if replace:
+                self.replace_header(header, ctype)
+            else:
+                del self[header]
+                self[header] = ctype
 
     def del_param(self, param, header='content-type', requote=True):
         """Remove the given parameter completely from the Content-Type header.
@@ -905,3 +906,208 @@
 
     # I.e. def walk(self): ...
     from email.iterators import walk
+
+
+class MIMEPart(Message):
+
+    def __init__(self, policy=None):
+        if policy is None:
+            from email.policy import default
+            policy = default
+        Message.__init__(self, policy)
+
+    @property
+    def is_attachment(self):
+        c_d = self.get('content-disposition')
+        if c_d is None:
+            return False
+        return c_d.lower() == 'attachment'
+
+    def _find_body(self, part, preferencelist):
+        if part.is_attachment:
+            return
+        maintype, subtype = part.get_content_type().split('/')
+        if maintype == 'text':
+            if subtype in preferencelist:
+                yield (preferencelist.index(subtype), part)
+            return
+        if maintype != 'multipart':
+            return
+        if subtype != 'related':
+            for subpart in part.iter_parts():
+                yield from self._find_body(subpart, preferencelist)
+            return
+        if 'related' in preferencelist:
+            yield (preferencelist.index('related'), part)
+        candidate = None
+        start = part.get_param('start')
+        if start:
+            for subpart in part.iter_parts():
+                if subpart['content-id'] == start:
+                    candidate = subpart
+                    break
+        if candidate is None:
+            subparts = part.get_payload()
+            candidate = subparts[0] if subparts else None
+        if candidate is not None:
+            yield from self._find_body(candidate, preferencelist)
+
+    def get_body(self, preferencelist=('related', 'html', 'plain')):
+        """Return best candidate mime part for display as 'body' of message.
+
+        Do a depth first search, starting with self, looking for the first part
+        matching each of the items in preferencelist, and return the part
+        corresponding to the first item that has a match, or None if no items
+        have a match.  If 'related' is not included in preferencelist, consider
+        the root part of any multipart/related encountered as a candidate
+        match.  Ignore parts with 'Content-Disposition: attachment'.
+        """
+        best_prio = len(preferencelist)
+        body = None
+        for prio, part in self._find_body(self, preferencelist):
+            if prio < best_prio:
+                best_prio = prio
+                body = part
+                if prio == 0:
+                    break
+        return body
+
+    _body_types = {('text', 'plain'),
+                   ('text', 'html'),
+                   ('multipart', 'related'),
+                   ('multipart', 'alternative')}
+    def iter_attachments(self):
+        """Return an iterator over the non-main parts of a multipart.
+
+        Skip the first of each occurrence of text/plain, text/html,
+        multipart/related, or multipart/alternative in the multipart (unless
+        they have a 'Content-Disposition: attachment' header) and include all
+        remaining subparts in the returned iterator.  When applied to a
+        multipart/related, return all parts except the root part.  Return an
+        empty iterator when applied to a multipart/alternative or a
+        non-multipart.
+        """
+        maintype, subtype = self.get_content_type().split('/')
+        if maintype != 'multipart' or subtype == 'alternative':
+            return
+        parts = self.get_payload()
+        if maintype == 'multipart' and subtype == 'related':
+            # For related, we treat everything but the root as an attachment.
+            # The root may be indicated by 'start'; if there's no start or we
+            # can't find the named start, treat the first subpart as the root.
+            start = self.get_param('start')
+            if start:
+                found = False
+                attachments = []
+                for part in parts:
+                    if part.get('content-id') == start:
+                        found = True
+                    else:
+                        attachments.append(part)
+                if found:
+                    yield from attachments
+                    return
+            parts.pop(0)
+            yield from parts
+            return
+        # Otherwise we more or less invert the remaining logic in get_body.
+        # This only really works in edge cases (ex: non-text relateds or
+        # alternatives) if the sending agent sets content-disposition.
+        seen = []   # Only skip the first example of each candidate type.
+        for part in parts:
+            maintype, subtype = part.get_content_type().split('/')
+            if ((maintype, subtype) in self._body_types and
+                    not part.is_attachment and subtype not in seen):
+                seen.append(subtype)
+                continue
+            yield part
+
+    def iter_parts(self):
+        """Return an iterator over all immediate subparts of a multipart.
+
+        Return an empty iterator for a non-multipart.
+        """
+        if self.get_content_maintype() == 'multipart':
+            yield from self.get_payload()
+
+    def get_content(self, *args, content_manager=None, **kw):
+        if content_manager is None:
+            content_manager = self.policy.content_manager
+        return content_manager.get_content(self, *args, **kw)
+
+    def set_content(self, *args, content_manager=None, **kw):
+        if content_manager is None:
+            content_manager = self.policy.content_manager
+        content_manager.set_content(self, *args, **kw)
+
+    def _make_multipart(self, subtype, disallowed_subtypes, boundary):
+        if self.get_content_maintype() == 'multipart':
+            existing_subtype = self.get_content_subtype()
+            disallowed_subtypes = disallowed_subtypes + (subtype,)
+            if existing_subtype in disallowed_subtypes:
+                raise ValueError("Cannot convert {} to {}".format(
+                    existing_subtype, subtype))
+        keep_headers = []
+        part_headers = []
+        for name, value in self._headers:
+            if name.lower().startswith('content-'):
+                part_headers.append((name, value))
+            else:
+                keep_headers.append((name, value))
+        if part_headers:
+            # There is existing content, move it to the first subpart.
+            part = type(self)(policy=self.policy)
+            part._headers = part_headers
+            part._payload = self._payload
+            self._payload = [part]
+        else:
+            self._payload = []
+        self._headers = keep_headers
+        self['Content-Type'] = 'multipart/' + subtype
+        if boundary is not None:
+            self.set_param('boundary', boundary)
+
+    def make_related(self, boundary=None):
+        self._make_multipart('related', ('alternative', 'mixed'), boundary)
+
+    def make_alternative(self, boundary=None):
+        self._make_multipart('alternative', ('mixed',), boundary)
+
+    def make_mixed(self, boundary=None):
+        self._make_multipart('mixed', (), boundary)
+
+    def _add_multipart(self, _subtype, *args, _disp=None, **kw):
+        if (self.get_content_maintype() != 'multipart' or
+                self.get_content_subtype() != _subtype):
+            getattr(self, 'make_' + _subtype)()
+        part = type(self)(policy=self.policy)
+        part.set_content(*args, **kw)
+        if _disp and 'content-disposition' not in part:
+            part['Content-Disposition'] = _disp
+        self.attach(part)
+
+    def add_related(self, *args, **kw):
+        self._add_multipart('related', *args, _disp='inline', **kw)
+
+    def add_alternative(self, *args, **kw):
+        self._add_multipart('alternative', *args, **kw)
+
+    def add_attachment(self, *args, **kw):
+        self._add_multipart('mixed', *args, _disp='attachment', **kw)
+
+    def clear(self):
+        self._headers = []
+        self._payload = None
+
+    def clear_content(self):
+        self._headers = [(n, v) for n, v in self._headers
+                         if not n.lower().startswith('content-')]
+        self._payload = None
+
+
+class EmailMessage(MIMEPart):
+
+    def set_content(self, *args, **kw):
+        super().set_content(*args, **kw)
+        if 'MIME-Version' not in self:
+            self['MIME-Version'] = '1.0'
diff --git a/Lib/email/policy.py b/Lib/email/policy.py
index 38e88af..f0b20f4 100644
--- a/Lib/email/policy.py
+++ b/Lib/email/policy.py
@@ -5,6 +5,7 @@
 from email._policybase import Policy, Compat32, compat32, _extend_docstrings
 from email.utils import _has_surrogates
 from email.headerregistry import HeaderRegistry as HeaderRegistry
+from email.contentmanager import raw_data_manager
 
 __all__ = [
     'Compat32',
@@ -58,10 +59,22 @@
                            special treatment, while all other fields are
                            treated as unstructured.  This list will be
                            completed before the extension is marked stable.)
+
+    content_manager     -- an object with at least two methods: get_content
+                           and set_content.  When the get_content or
+                           set_content method of a Message object is called,
+                           it calls the corresponding method of this object,
+                           passing it the message object as its first argument,
+                           and any arguments or keywords that were passed to
+                           it as additional arguments.  The default
+                           content_manager is
+                           :data:`~email.contentmanager.raw_data_manager`.
+
     """
 
     refold_source = 'long'
     header_factory = HeaderRegistry()
+    content_manager = raw_data_manager
 
     def __init__(self, **kw):
         # Ensure that each new instance gets a unique header factory
diff --git a/Lib/email/utils.py b/Lib/email/utils.py
index b3b42bb..25b0d56 100644
--- a/Lib/email/utils.py
+++ b/Lib/email/utils.py
@@ -68,9 +68,13 @@
 # How to deal with a string containing bytes before handing it to the
 # application through the 'normal' interface.
 def _sanitize(string):
-    # Turn any escaped bytes into unicode 'unknown' char.
-    original_bytes = string.encode('ascii', 'surrogateescape')
-    return original_bytes.decode('ascii', 'replace')
+    # Turn any escaped bytes into unicode 'unknown' char.  If the escaped
+    # bytes happen to be utf-8 they will instead get decoded, even if they
+    # were invalid in the charset the source was supposed to be in.  This
+    # seems like it is not a bad thing; a defect was still registered.
+    original_bytes = string.encode('utf-8', 'surrogateescape')
+    return original_bytes.decode('utf-8', 'replace')
+
 
 
 # Helpers
diff --git a/Lib/encodings/cp273.py b/Lib/encodings/cp273.py
new file mode 100644
index 0000000..69c6d77
--- /dev/null
+++ b/Lib/encodings/cp273.py
@@ -0,0 +1,307 @@
+""" Python Character Mapping Codec cp273 generated from 'python-mappings/CP273.TXT' with gencodec.py.
+
+"""#"
+
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+        return codecs.charmap_encode(input,errors,encoding_table)
+
+    def decode(self,input,errors='strict'):
+        return codecs.charmap_decode(input,errors,decoding_table)
+
+class IncrementalEncoder(codecs.IncrementalEncoder):
+    def encode(self, input, final=False):
+        return codecs.charmap_encode(input,self.errors,encoding_table)[0]
+
+class IncrementalDecoder(codecs.IncrementalDecoder):
+    def decode(self, input, final=False):
+        return codecs.charmap_decode(input,self.errors,decoding_table)[0]
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+    return codecs.CodecInfo(
+        name='cp273',
+        encode=Codec().encode,
+        decode=Codec().decode,
+        incrementalencoder=IncrementalEncoder,
+        incrementaldecoder=IncrementalDecoder,
+        streamreader=StreamReader,
+        streamwriter=StreamWriter,
+    )
+
+
+### Decoding Table
+
+decoding_table = (
+    '\x00'      #  0x00 -> NULL (NUL)
+    '\x01'      #  0x01 -> START OF HEADING (SOH)
+    '\x02'      #  0x02 -> START OF TEXT (STX)
+    '\x03'      #  0x03 -> END OF TEXT (ETX)
+    '\x9c'      #  0x04 -> STRING TERMINATOR (ST)
+    '\t'        #  0x05 -> CHARACTER TABULATION (HT)
+    '\x86'      #  0x06 -> START OF SELECTED AREA (SSA)
+    '\x7f'      #  0x07 -> DELETE (DEL)
+    '\x97'      #  0x08 -> END OF GUARDED AREA (EPA)
+    '\x8d'      #  0x09 -> REVERSE LINE FEED (RI)
+    '\x8e'      #  0x0A -> SINGLE-SHIFT TWO (SS2)
+    '\x0b'      #  0x0B -> LINE TABULATION (VT)
+    '\x0c'      #  0x0C -> FORM FEED (FF)
+    '\r'        #  0x0D -> CARRIAGE RETURN (CR)
+    '\x0e'      #  0x0E -> SHIFT OUT (SO)
+    '\x0f'      #  0x0F -> SHIFT IN (SI)
+    '\x10'      #  0x10 -> DATALINK ESCAPE (DLE)
+    '\x11'      #  0x11 -> DEVICE CONTROL ONE (DC1)
+    '\x12'      #  0x12 -> DEVICE CONTROL TWO (DC2)
+    '\x13'      #  0x13 -> DEVICE CONTROL THREE (DC3)
+    '\x9d'      #  0x14 -> OPERATING SYSTEM COMMAND (OSC)
+    '\x85'      #  0x15 -> NEXT LINE (NEL)
+    '\x08'      #  0x16 -> BACKSPACE (BS)
+    '\x87'      #  0x17 -> END OF SELECTED AREA (ESA)
+    '\x18'      #  0x18 -> CANCEL (CAN)
+    '\x19'      #  0x19 -> END OF MEDIUM (EM)
+    '\x92'      #  0x1A -> PRIVATE USE TWO (PU2)
+    '\x8f'      #  0x1B -> SINGLE-SHIFT THREE (SS3)
+    '\x1c'      #  0x1C -> FILE SEPARATOR (IS4)
+    '\x1d'      #  0x1D -> GROUP SEPARATOR (IS3)
+    '\x1e'      #  0x1E -> RECORD SEPARATOR (IS2)
+    '\x1f'      #  0x1F -> UNIT SEPARATOR (IS1)
+    '\x80'      #  0x20 -> PADDING CHARACTER (PAD)
+    '\x81'      #  0x21 -> HIGH OCTET PRESET (HOP)
+    '\x82'      #  0x22 -> BREAK PERMITTED HERE (BPH)
+    '\x83'      #  0x23 -> NO BREAK HERE (NBH)
+    '\x84'      #  0x24 -> INDEX (IND)
+    '\n'        #  0x25 -> LINE FEED (LF)
+    '\x17'      #  0x26 -> END OF TRANSMISSION BLOCK (ETB)
+    '\x1b'      #  0x27 -> ESCAPE (ESC)
+    '\x88'      #  0x28 -> CHARACTER TABULATION SET (HTS)
+    '\x89'      #  0x29 -> CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
+    '\x8a'      #  0x2A -> LINE TABULATION SET (VTS)
+    '\x8b'      #  0x2B -> PARTIAL LINE FORWARD (PLD)
+    '\x8c'      #  0x2C -> PARTIAL LINE BACKWARD (PLU)
+    '\x05'      #  0x2D -> ENQUIRY (ENQ)
+    '\x06'      #  0x2E -> ACKNOWLEDGE (ACK)
+    '\x07'      #  0x2F -> BELL (BEL)
+    '\x90'      #  0x30 -> DEVICE CONTROL STRING (DCS)
+    '\x91'      #  0x31 -> PRIVATE USE ONE (PU1)
+    '\x16'      #  0x32 -> SYNCHRONOUS IDLE (SYN)
+    '\x93'      #  0x33 -> SET TRANSMIT STATE (STS)
+    '\x94'      #  0x34 -> CANCEL CHARACTER (CCH)
+    '\x95'      #  0x35 -> MESSAGE WAITING (MW)
+    '\x96'      #  0x36 -> START OF GUARDED AREA (SPA)
+    '\x04'      #  0x37 -> END OF TRANSMISSION (EOT)
+    '\x98'      #  0x38 -> START OF STRING (SOS)
+    '\x99'      #  0x39 -> SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
+    '\x9a'      #  0x3A -> SINGLE CHARACTER INTRODUCER (SCI)
+    '\x9b'      #  0x3B -> CONTROL SEQUENCE INTRODUCER (CSI)
+    '\x14'      #  0x3C -> DEVICE CONTROL FOUR (DC4)
+    '\x15'      #  0x3D -> NEGATIVE ACKNOWLEDGE (NAK)
+    '\x9e'      #  0x3E -> PRIVACY MESSAGE (PM)
+    '\x1a'      #  0x3F -> SUBSTITUTE (SUB)
+    ' '         #  0x40 -> SPACE
+    '\xa0'      #  0x41 -> NO-BREAK SPACE
+    '\xe2'      #  0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    '{'         #  0x43 -> LEFT CURLY BRACKET
+    '\xe0'      #  0x44 -> LATIN SMALL LETTER A WITH GRAVE
+    '\xe1'      #  0x45 -> LATIN SMALL LETTER A WITH ACUTE
+    '\xe3'      #  0x46 -> LATIN SMALL LETTER A WITH TILDE
+    '\xe5'      #  0x47 -> LATIN SMALL LETTER A WITH RING ABOVE
+    '\xe7'      #  0x48 -> LATIN SMALL LETTER C WITH CEDILLA
+    '\xf1'      #  0x49 -> LATIN SMALL LETTER N WITH TILDE
+    '\xc4'      #  0x4A -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    '.'         #  0x4B -> FULL STOP
+    '<'         #  0x4C -> LESS-THAN SIGN
+    '('         #  0x4D -> LEFT PARENTHESIS
+    '+'         #  0x4E -> PLUS SIGN
+    '!'         #  0x4F -> EXCLAMATION MARK
+    '&'         #  0x50 -> AMPERSAND
+    '\xe9'      #  0x51 -> LATIN SMALL LETTER E WITH ACUTE
+    '\xea'      #  0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    '\xeb'      #  0x53 -> LATIN SMALL LETTER E WITH DIAERESIS
+    '\xe8'      #  0x54 -> LATIN SMALL LETTER E WITH GRAVE
+    '\xed'      #  0x55 -> LATIN SMALL LETTER I WITH ACUTE
+    '\xee'      #  0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    '\xef'      #  0x57 -> LATIN SMALL LETTER I WITH DIAERESIS
+    '\xec'      #  0x58 -> LATIN SMALL LETTER I WITH GRAVE
+    '~'         #  0x59 -> TILDE
+    '\xdc'      #  0x5A -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    '$'         #  0x5B -> DOLLAR SIGN
+    '*'         #  0x5C -> ASTERISK
+    ')'         #  0x5D -> RIGHT PARENTHESIS
+    ';'         #  0x5E -> SEMICOLON
+    '^'         #  0x5F -> CIRCUMFLEX ACCENT
+    '-'         #  0x60 -> HYPHEN-MINUS
+    '/'         #  0x61 -> SOLIDUS
+    '\xc2'      #  0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    '['         #  0x63 -> LEFT SQUARE BRACKET
+    '\xc0'      #  0x64 -> LATIN CAPITAL LETTER A WITH GRAVE
+    '\xc1'      #  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
+    '\xc3'      #  0x66 -> LATIN CAPITAL LETTER A WITH TILDE
+    '\xc5'      #  0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    '\xc7'      #  0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    '\xd1'      #  0x69 -> LATIN CAPITAL LETTER N WITH TILDE
+    '\xf6'      #  0x6A -> LATIN SMALL LETTER O WITH DIAERESIS
+    ','         #  0x6B -> COMMA
+    '%'         #  0x6C -> PERCENT SIGN
+    '_'         #  0x6D -> LOW LINE
+    '>'         #  0x6E -> GREATER-THAN SIGN
+    '?'         #  0x6F -> QUESTION MARK
+    '\xf8'      #  0x70 -> LATIN SMALL LETTER O WITH STROKE
+    '\xc9'      #  0x71 -> LATIN CAPITAL LETTER E WITH ACUTE
+    '\xca'      #  0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    '\xcb'      #  0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    '\xc8'      #  0x74 -> LATIN CAPITAL LETTER E WITH GRAVE
+    '\xcd'      #  0x75 -> LATIN CAPITAL LETTER I WITH ACUTE
+    '\xce'      #  0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    '\xcf'      #  0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    '\xcc'      #  0x78 -> LATIN CAPITAL LETTER I WITH GRAVE
+    '`'         #  0x79 -> GRAVE ACCENT
+    ':'         #  0x7A -> COLON
+    '#'         #  0x7B -> NUMBER SIGN
+    '\xa7'      #  0x7C -> SECTION SIGN
+    "'"         #  0x7D -> APOSTROPHE
+    '='         #  0x7E -> EQUALS SIGN
+    '"'         #  0x7F -> QUOTATION MARK
+    '\xd8'      #  0x80 -> LATIN CAPITAL LETTER O WITH STROKE
+    'a'         #  0x81 -> LATIN SMALL LETTER A
+    'b'         #  0x82 -> LATIN SMALL LETTER B
+    'c'         #  0x83 -> LATIN SMALL LETTER C
+    'd'         #  0x84 -> LATIN SMALL LETTER D
+    'e'         #  0x85 -> LATIN SMALL LETTER E
+    'f'         #  0x86 -> LATIN SMALL LETTER F
+    'g'         #  0x87 -> LATIN SMALL LETTER G
+    'h'         #  0x88 -> LATIN SMALL LETTER H
+    'i'         #  0x89 -> LATIN SMALL LETTER I
+    '\xab'      #  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    '\xbb'      #  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    '\xf0'      #  0x8C -> LATIN SMALL LETTER ETH (Icelandic)
+    '\xfd'      #  0x8D -> LATIN SMALL LETTER Y WITH ACUTE
+    '\xfe'      #  0x8E -> LATIN SMALL LETTER THORN (Icelandic)
+    '\xb1'      #  0x8F -> PLUS-MINUS SIGN
+    '\xb0'      #  0x90 -> DEGREE SIGN
+    'j'         #  0x91 -> LATIN SMALL LETTER J
+    'k'         #  0x92 -> LATIN SMALL LETTER K
+    'l'         #  0x93 -> LATIN SMALL LETTER L
+    'm'         #  0x94 -> LATIN SMALL LETTER M
+    'n'         #  0x95 -> LATIN SMALL LETTER N
+    'o'         #  0x96 -> LATIN SMALL LETTER O
+    'p'         #  0x97 -> LATIN SMALL LETTER P
+    'q'         #  0x98 -> LATIN SMALL LETTER Q
+    'r'         #  0x99 -> LATIN SMALL LETTER R
+    '\xaa'      #  0x9A -> FEMININE ORDINAL INDICATOR
+    '\xba'      #  0x9B -> MASCULINE ORDINAL INDICATOR
+    '\xe6'      #  0x9C -> LATIN SMALL LETTER AE
+    '\xb8'      #  0x9D -> CEDILLA
+    '\xc6'      #  0x9E -> LATIN CAPITAL LETTER AE
+    '\xa4'      #  0x9F -> CURRENCY SIGN
+    '\xb5'      #  0xA0 -> MICRO SIGN
+    '\xdf'      #  0xA1 -> LATIN SMALL LETTER SHARP S (German)
+    's'         #  0xA2 -> LATIN SMALL LETTER S
+    't'         #  0xA3 -> LATIN SMALL LETTER T
+    'u'         #  0xA4 -> LATIN SMALL LETTER U
+    'v'         #  0xA5 -> LATIN SMALL LETTER V
+    'w'         #  0xA6 -> LATIN SMALL LETTER W
+    'x'         #  0xA7 -> LATIN SMALL LETTER X
+    'y'         #  0xA8 -> LATIN SMALL LETTER Y
+    'z'         #  0xA9 -> LATIN SMALL LETTER Z
+    '\xa1'      #  0xAA -> INVERTED EXCLAMATION MARK
+    '\xbf'      #  0xAB -> INVERTED QUESTION MARK
+    '\xd0'      #  0xAC -> LATIN CAPITAL LETTER ETH (Icelandic)
+    '\xdd'      #  0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    '\xde'      #  0xAE -> LATIN CAPITAL LETTER THORN (Icelandic)
+    '\xae'      #  0xAF -> REGISTERED SIGN
+    '\xa2'      #  0xB0 -> CENT SIGN
+    '\xa3'      #  0xB1 -> POUND SIGN
+    '\xa5'      #  0xB2 -> YEN SIGN
+    '\xb7'      #  0xB3 -> MIDDLE DOT
+    '\xa9'      #  0xB4 -> COPYRIGHT SIGN
+    '@'         #  0xB5 -> COMMERCIAL AT
+    '\xb6'      #  0xB6 -> PILCROW SIGN
+    '\xbc'      #  0xB7 -> VULGAR FRACTION ONE QUARTER
+    '\xbd'      #  0xB8 -> VULGAR FRACTION ONE HALF
+    '\xbe'      #  0xB9 -> VULGAR FRACTION THREE QUARTERS
+    '\xac'      #  0xBA -> NOT SIGN
+    '|'         #  0xBB -> VERTICAL LINE
+    '\u203e'    #  0xBC -> OVERLINE
+    '\xa8'      #  0xBD -> DIAERESIS
+    '\xb4'      #  0xBE -> ACUTE ACCENT
+    '\xd7'      #  0xBF -> MULTIPLICATION SIGN
+    '\xe4'      #  0xC0 -> LATIN SMALL LETTER A WITH DIAERESIS
+    'A'         #  0xC1 -> LATIN CAPITAL LETTER A
+    'B'         #  0xC2 -> LATIN CAPITAL LETTER B
+    'C'         #  0xC3 -> LATIN CAPITAL LETTER C
+    'D'         #  0xC4 -> LATIN CAPITAL LETTER D
+    'E'         #  0xC5 -> LATIN CAPITAL LETTER E
+    'F'         #  0xC6 -> LATIN CAPITAL LETTER F
+    'G'         #  0xC7 -> LATIN CAPITAL LETTER G
+    'H'         #  0xC8 -> LATIN CAPITAL LETTER H
+    'I'         #  0xC9 -> LATIN CAPITAL LETTER I
+    '\xad'      #  0xCA -> SOFT HYPHEN
+    '\xf4'      #  0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    '\xa6'      #  0xCC -> BROKEN BAR
+    '\xf2'      #  0xCD -> LATIN SMALL LETTER O WITH GRAVE
+    '\xf3'      #  0xCE -> LATIN SMALL LETTER O WITH ACUTE
+    '\xf5'      #  0xCF -> LATIN SMALL LETTER O WITH TILDE
+    '\xfc'      #  0xD0 -> LATIN SMALL LETTER U WITH DIAERESIS
+    'J'         #  0xD1 -> LATIN CAPITAL LETTER J
+    'K'         #  0xD2 -> LATIN CAPITAL LETTER K
+    'L'         #  0xD3 -> LATIN CAPITAL LETTER L
+    'M'         #  0xD4 -> LATIN CAPITAL LETTER M
+    'N'         #  0xD5 -> LATIN CAPITAL LETTER N
+    'O'         #  0xD6 -> LATIN CAPITAL LETTER O
+    'P'         #  0xD7 -> LATIN CAPITAL LETTER P
+    'Q'         #  0xD8 -> LATIN CAPITAL LETTER Q
+    'R'         #  0xD9 -> LATIN CAPITAL LETTER R
+    '\xb9'      #  0xDA -> SUPERSCRIPT ONE
+    '\xfb'      #  0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    '}'         #  0xDC -> RIGHT CURLY BRACKET
+    '\xf9'      #  0xDD -> LATIN SMALL LETTER U WITH GRAVE
+    '\xfa'      #  0xDE -> LATIN SMALL LETTER U WITH ACUTE
+    '\xff'      #  0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    '\xd6'      #  0xE0 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    '\xf7'      #  0xE1 -> DIVISION SIGN
+    'S'         #  0xE2 -> LATIN CAPITAL LETTER S
+    'T'         #  0xE3 -> LATIN CAPITAL LETTER T
+    'U'         #  0xE4 -> LATIN CAPITAL LETTER U
+    'V'         #  0xE5 -> LATIN CAPITAL LETTER V
+    'W'         #  0xE6 -> LATIN CAPITAL LETTER W
+    'X'         #  0xE7 -> LATIN CAPITAL LETTER X
+    'Y'         #  0xE8 -> LATIN CAPITAL LETTER Y
+    'Z'         #  0xE9 -> LATIN CAPITAL LETTER Z
+    '\xb2'      #  0xEA -> SUPERSCRIPT TWO
+    '\xd4'      #  0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    '\\'        #  0xEC -> REVERSE SOLIDUS
+    '\xd2'      #  0xED -> LATIN CAPITAL LETTER O WITH GRAVE
+    '\xd3'      #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    '\xd5'      #  0xEF -> LATIN CAPITAL LETTER O WITH TILDE
+    '0'         #  0xF0 -> DIGIT ZERO
+    '1'         #  0xF1 -> DIGIT ONE
+    '2'         #  0xF2 -> DIGIT TWO
+    '3'         #  0xF3 -> DIGIT THREE
+    '4'         #  0xF4 -> DIGIT FOUR
+    '5'         #  0xF5 -> DIGIT FIVE
+    '6'         #  0xF6 -> DIGIT SIX
+    '7'         #  0xF7 -> DIGIT SEVEN
+    '8'         #  0xF8 -> DIGIT EIGHT
+    '9'         #  0xF9 -> DIGIT NINE
+    '\xb3'      #  0xFA -> SUPERSCRIPT THREE
+    '\xdb'      #  0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    ']'         #  0xFC -> RIGHT SQUARE BRACKET
+    '\xd9'      #  0xFD -> LATIN CAPITAL LETTER U WITH GRAVE
+    '\xda'      #  0xFE -> LATIN CAPITAL LETTER U WITH ACUTE
+    '\x9f'      #  0xFF -> APPLICATION PROGRAM COMMAND (APC)
+)
+
+### Encoding table
+encoding_table=codecs.charmap_build(decoding_table)
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
new file mode 100644
index 0000000..bfc5bee
--- /dev/null
+++ b/Lib/ensurepip/__init__.py
@@ -0,0 +1,92 @@
+import os
+import os.path
+import pkgutil
+import sys
+import tempfile
+
+# TODO: Remove the --pre flag when a pip 1.5 final copy is available
+
+
+__all__ = ["version", "bootstrap"]
+
+
+_SETUPTOOLS_VERSION = "1.3.2"
+
+_PIP_VERSION = "1.5.dev1"
+
+_PROJECTS = [
+    ("setuptools", _SETUPTOOLS_VERSION),
+    ("pip", _PIP_VERSION),
+]
+
+
+def _run_pip(args, additional_paths):
+    # Add our bundled software to the sys.path so we can import it
+    sys.path = additional_paths + sys.path
+
+    # Install the bundled software
+    import pip
+    pip.main(args)
+
+
+def version():
+    """
+    Returns a string specifying the bundled version of pip.
+    """
+    return _PIP_VERSION
+
+
+def bootstrap(*, root=None, upgrade=False, user=False,
+              altinstall=False, default_pip=False,
+              verbosity=0):
+    """
+    Bootstrap pip into the current Python installation (or the given root
+    directory).
+    """
+    if altinstall and default_pip:
+        raise ValueError("Cannot use altinstall and default_pip together")
+
+    # By default, installing pip and setuptools installs all of the
+    # following scripts (X.Y == running Python version):
+    #
+    #   pip, pipX, pipX.Y, easy_install, easy_install-X.Y
+    #
+    # pip 1.5+ allows ensurepip to request that some of those be left out
+    if altinstall:
+        # omit pip, pipX and easy_install
+        os.environ["ENSUREPIP_OPTIONS"] = "altinstall"
+    elif not default_pip:
+        # omit pip and easy_install
+        os.environ["ENSUREPIP_OPTIONS"] = "install"
+
+    with tempfile.TemporaryDirectory() as tmpdir:
+        # Put our bundled wheels into a temporary directory and construct the
+        # additional paths that need added to sys.path
+        additional_paths = []
+        for project, version in _PROJECTS:
+            wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+            whl = pkgutil.get_data(
+                "ensurepip",
+                "_bundled/{}".format(wheel_name),
+            )
+            with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+                fp.write(whl)
+
+            additional_paths.append(os.path.join(tmpdir, wheel_name))
+
+        # Construct the arguments to be passed to the pip command
+        args = [
+            "install", "--no-index", "--find-links", tmpdir,
+            # Temporary until pip 1.5 is final
+            "--pre",
+        ]
+        if root:
+            args += ["--root", root]
+        if upgrade:
+            args += ["--upgrade"]
+        if user:
+            args += ["--user"]
+        if verbosity:
+            args += ["-" + "v" * verbosity]
+
+        _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
diff --git a/Lib/ensurepip/__main__.py b/Lib/ensurepip/__main__.py
new file mode 100644
index 0000000..53e8459
--- /dev/null
+++ b/Lib/ensurepip/__main__.py
@@ -0,0 +1,66 @@
+import argparse
+import ensurepip
+
+
+def main():
+    parser = argparse.ArgumentParser(prog="python -m ensurepip")
+    parser.add_argument(
+        "--version",
+        action="version",
+        version="pip {}".format(ensurepip.version()),
+        help="Show the version of pip that is bundled with this Python.",
+    )
+    parser.add_argument(
+        "-v", "--verbose",
+        action="count",
+        default=0,
+        dest="verbosity",
+        help=("Give more output. Option is additive, and can be used up to 3 "
+              "times."),
+    )
+    parser.add_argument(
+        "-U", "--upgrade",
+        action="store_true",
+        default=False,
+        help="Upgrade pip and dependencies, even if already installed.",
+    )
+    parser.add_argument(
+        "--user",
+        action="store_true",
+        default=False,
+        help="Install using the user scheme.",
+    )
+    parser.add_argument(
+        "--root",
+        default=None,
+        help="Install everything relative to this alternate root directory.",
+    )
+    parser.add_argument(
+        "--altinstall",
+        action="store_true",
+        default=False,
+        help=("Make an alternate install, installing only the X.Y versioned"
+              "scripts (Default: pipX, pipX.Y, easy_install-X.Y)"),
+    )
+    parser.add_argument(
+        "--default-pip",
+        action="store_true",
+        default=False,
+        help=("Make a default pip install, installing the unqualified pip "
+              "and easy_install in addition to the versioned scripts"),
+    )
+
+    args = parser.parse_args()
+
+    ensurepip.bootstrap(
+        root=args.root,
+        upgrade=args.upgrade,
+        user=args.user,
+        verbosity=args.verbosity,
+        altinstall=args.altinstall,
+        default_pip=args.default_pip,
+    )
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Lib/ensurepip/_bundled/pip-1.5.dev1-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/pip-1.5.dev1-py2.py3-none-any.whl
new file mode 100644
index 0000000..65e3548
--- /dev/null
+++ b/Lib/ensurepip/_bundled/pip-1.5.dev1-py2.py3-none-any.whl
Binary files differ
diff --git a/Lib/ensurepip/_bundled/setuptools-1.3.2-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/setuptools-1.3.2-py2.py3-none-any.whl
new file mode 100644
index 0000000..81962b1
--- /dev/null
+++ b/Lib/ensurepip/_bundled/setuptools-1.3.2-py2.py3-none-any.whl
Binary files differ
diff --git a/Lib/enum.py b/Lib/enum.py
index 921d00c..7ca8503 100644
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -17,14 +17,16 @@
     """Returns True if a __dunder__ name, False otherwise."""
     return (name[:2] == name[-2:] == '__' and
             name[2:3] != '_' and
-            name[-3:-2] != '_')
+            name[-3:-2] != '_' and
+            len(name) > 4)
 
 
 def _is_sunder(name):
     """Returns True if a _sunder_ name, False otherwise."""
     return (name[0] == name[-1] == '_' and
             name[1:2] != '_' and
-            name[-2:-1] != '_')
+            name[-2:-1] != '_' and
+            len(name) > 2)
 
 
 def _make_class_unpicklable(cls):
diff --git a/Lib/formatter.py b/Lib/formatter.py
index 60e60f1..d8cca52 100644
--- a/Lib/formatter.py
+++ b/Lib/formatter.py
@@ -19,6 +19,9 @@
 """
 
 import sys
+import warnings
+warnings.warn('the formatter module is deprecated and will be removed in '
+              'Python 3.6', PendingDeprecationWarning)
 
 
 AS_IS = None
diff --git a/Lib/ftplib.py b/Lib/ftplib.py
index fcd4b14..9538fec 100644
--- a/Lib/ftplib.py
+++ b/Lib/ftplib.py
@@ -50,6 +50,8 @@
 
 # The standard FTP server control port
 FTP_PORT = 21
+# The sizehint parameter passed to readline() calls
+MAXLINE = 8192
 
 
 # Exception raised when an error or invalid response is received
@@ -97,6 +99,7 @@
     debugging = 0
     host = ''
     port = FTP_PORT
+    maxline = MAXLINE
     sock = None
     file = None
     welcome = None
@@ -197,7 +200,9 @@
     # Internal: return one line from the server, stripping CRLF.
     # Raise EOFError if the connection is closed
     def getline(self):
-        line = self.file.readline()
+        line = self.file.readline(self.maxline + 1)
+        if len(line) > self.maxline:
+            raise Error("got more than %d bytes" % self.maxline)
         if self.debugging > 1:
             print('*get*', self.sanitize(line))
         if not line:
@@ -463,7 +468,9 @@
         with self.transfercmd(cmd) as conn, \
                  conn.makefile('r', encoding=self.encoding) as fp:
             while 1:
-                line = fp.readline()
+                line = fp.readline(self.maxline + 1)
+                if len(line) > self.maxline:
+                    raise Error("got more than %d bytes" % self.maxline)
                 if self.debugging > 2:
                     print('*retr*', repr(line))
                 if not line:
@@ -522,7 +529,9 @@
         self.voidcmd('TYPE A')
         with self.transfercmd(cmd) as conn:
             while 1:
-                buf = fp.readline()
+                buf = fp.readline(self.maxline + 1)
+                if len(buf) > self.maxline:
+                    raise Error("got more than %d bytes" % self.maxline)
                 if not buf:
                     break
                 if buf[-2:] != B_CRLF:
diff --git a/Lib/functools.py b/Lib/functools.py
index 6a6974f..1e79b31 100644
--- a/Lib/functools.py
+++ b/Lib/functools.py
@@ -11,7 +11,7 @@
 
 __all__ = ['update_wrapper', 'wraps', 'WRAPPER_ASSIGNMENTS', 'WRAPPER_UPDATES',
            'total_ordering', 'cmp_to_key', 'lru_cache', 'reduce', 'partial',
-           'singledispatch']
+           'partialmethod', 'singledispatch']
 
 try:
     from _functools import reduce
@@ -19,7 +19,7 @@
     pass
 from abc import get_cache_token
 from collections import namedtuple
-from types import MappingProxyType
+from types import MappingProxyType, MethodType
 from weakref import WeakKeyDictionary
 try:
     from _thread import RLock
@@ -223,8 +223,9 @@
 ### partial() argument application
 ################################################################################
 
+# Purely functional, no descriptor behaviour
 def partial(func, *args, **keywords):
-    """new function with partial application of the given arguments
+    """New function with partial application of the given arguments
     and keywords.
     """
     def newfunc(*fargs, **fkeywords):
@@ -241,6 +242,79 @@
 except ImportError:
     pass
 
+# Descriptor version
+class partialmethod(object):
+    """Method descriptor with partial application of the given arguments
+    and keywords.
+
+    Supports wrapping existing descriptors and handles non-descriptor
+    callables as instance methods.
+    """
+
+    def __init__(self, func, *args, **keywords):
+        if not callable(func) and not hasattr(func, "__get__"):
+            raise TypeError("{!r} is not callable or a descriptor"
+                                 .format(func))
+
+        # func could be a descriptor like classmethod which isn't callable,
+        # so we can't inherit from partial (it verifies func is callable)
+        if isinstance(func, partialmethod):
+            # flattening is mandatory in order to place cls/self before all
+            # other arguments
+            # it's also more efficient since only one function will be called
+            self.func = func.func
+            self.args = func.args + args
+            self.keywords = func.keywords.copy()
+            self.keywords.update(keywords)
+        else:
+            self.func = func
+            self.args = args
+            self.keywords = keywords
+
+    def __repr__(self):
+        args = ", ".join(map(repr, self.args))
+        keywords = ", ".join("{}={!r}".format(k, v)
+                                 for k, v in self.keywords.items())
+        format_string = "{module}.{cls}({func}, {args}, {keywords})"
+        return format_string.format(module=self.__class__.__module__,
+                                    cls=self.__class__.__name__,
+                                    func=self.func,
+                                    args=args,
+                                    keywords=keywords)
+
+    def _make_unbound_method(self):
+        def _method(*args, **keywords):
+            call_keywords = self.keywords.copy()
+            call_keywords.update(keywords)
+            cls_or_self, *rest = args
+            call_args = (cls_or_self,) + self.args + tuple(rest)
+            return self.func(*call_args, **call_keywords)
+        _method.__isabstractmethod__ = self.__isabstractmethod__
+        return _method
+
+    def __get__(self, obj, cls):
+        get = getattr(self.func, "__get__", None)
+        result = None
+        if get is not None:
+            new_func = get(obj, cls)
+            if new_func is not self.func:
+                # Assume __get__ returning something new indicates the
+                # creation of an appropriate callable
+                result = partial(new_func, *self.args, **self.keywords)
+                try:
+                    result.__self__ = new_func.__self__
+                except AttributeError:
+                    pass
+        if result is None:
+            # If the underlying descriptor didn't do anything, treat this
+            # like an instance method
+            result = self._make_unbound_method().__get__(obj, cls)
+        return result
+
+    @property
+    def __isabstractmethod__(self):
+        return getattr(self.func, "__isabstractmethod__", False)
+
 
 ################################################################################
 ### LRU Cache function decorator
diff --git a/Lib/gzip.py b/Lib/gzip.py
index b073a66..8d21fe4 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -23,9 +23,9 @@
     The filename argument can be an actual filename (a str or bytes object), or
     an existing file object to read from or write to.
 
-    The mode argument can be "r", "rb", "w", "wb", "a" or "ab" for binary mode,
-    or "rt", "wt" or "at" for text mode. The default mode is "rb", and the
-    default compresslevel is 9.
+    The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or "ab" for
+    binary mode, or "rt", "wt", "xt" or "at" for text mode. The default mode is
+    "rb", and the default compresslevel is 9.
 
     For binary mode, this function is equivalent to the GzipFile constructor:
     GzipFile(filename, mode, compresslevel). In this case, the encoding, errors
@@ -151,11 +151,11 @@
         fileobj, if discernible; otherwise, it defaults to the empty string,
         and in this case the original filename is not included in the header.
 
-        The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', or 'wb',
-        depending on whether the file will be read or written.  The default
+        The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', or
+        'xb' depending on whether the file will be read or written.  The default
         is the mode of fileobj if discernible; otherwise, the default is 'rb'.
         A mode of 'r' is equivalent to one of 'rb', and similarly for 'w' and
-        'wb', and 'a' and 'ab'.
+        'wb', 'a' and 'ab', and 'x' and 'xb'.
 
         The compresslevel argument is an integer from 0 to 9 controlling the
         level of compression; 1 is fastest and produces the least compression,
@@ -201,7 +201,7 @@
             self.min_readsize = 100
             fileobj = _PaddedFile(fileobj)
 
-        elif mode.startswith(('w', 'a')):
+        elif mode.startswith(('w', 'a', 'x')):
             self.mode = WRITE
             self._init_write(filename)
             self.compress = zlib.compressobj(compresslevel,
diff --git a/Lib/hashlib.py b/Lib/hashlib.py
index a1bd8b2..77673f0 100644
--- a/Lib/hashlib.py
+++ b/Lib/hashlib.py
@@ -1,4 +1,4 @@
-#  Copyright (C) 2005-2010   Gregory P. Smith (greg@krypto.org)
+#.  Copyright (C) 2005-2010   Gregory P. Smith (greg@krypto.org)
 #  Licensed to PSF under a Contributor Agreement.
 #
 
@@ -61,46 +61,45 @@
 algorithms_available = set(__always_supported)
 
 __all__ = __always_supported + ('new', 'algorithms_guaranteed',
-                                'algorithms_available')
+                                'algorithms_available', 'pbkdf2_hmac')
 
 
+__builtin_constructor_cache = {}
+
 def __get_builtin_constructor(name):
+    cache = __builtin_constructor_cache
+    constructor = cache.get(name)
+    if constructor is not None:
+        return constructor
     try:
         if name in ('SHA1', 'sha1'):
             import _sha1
-            return _sha1.sha1
+            cache['SHA1'] = cache['sha1'] = _sha1.sha1
         elif name in ('MD5', 'md5'):
             import _md5
-            return _md5.md5
+            cache['MD5'] = cache['md5'] = _md5.md5
         elif name in ('SHA256', 'sha256', 'SHA224', 'sha224'):
             import _sha256
-            bs = name[3:]
-            if bs == '256':
-                return _sha256.sha256
-            elif bs == '224':
-                return _sha256.sha224
+            cache['SHA224'] = cache['sha224'] = _sha256.sha224
+            cache['SHA256'] = cache['sha256'] = _sha256.sha256
         elif name in ('SHA512', 'sha512', 'SHA384', 'sha384'):
             import _sha512
-            bs = name[3:]
-            if bs == '512':
-                return _sha512.sha512
-            elif bs == '384':
-                return _sha512.sha384
+            cache['SHA384'] = cache['sha384'] = _sha512.sha384
+            cache['SHA512'] = cache['sha512'] = _sha512.sha512
         elif name in {'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512',
                       'SHA3_224', 'SHA3_256', 'SHA3_384', 'SHA3_512'}:
             import _sha3
-            bs = name[5:]
-            if bs == '224':
-                return _sha3.sha3_224
-            elif bs == '256':
-                return _sha3.sha3_256
-            elif bs == '384':
-                return _sha3.sha3_384
-            elif bs == '512':
-                return _sha3.sha3_512
+            cache['SHA3_224'] = cache['sha3_224'] = _sha3.sha3_224
+            cache['SHA3_256'] = cache['sha3_256'] = _sha3.sha3_256
+            cache['SHA3_384'] = cache['sha3_384'] = _sha3.sha3_384
+            cache['SHA3_512'] = cache['sha3_512'] = _sha3.sha3_512
     except ImportError:
         pass  # no extension module, this hash is unsupported.
 
+    constructor = cache.get(name)
+    if constructor is not None:
+        return constructor
+
     raise ValueError('unsupported hash type ' + name)
 
 
@@ -147,6 +146,71 @@
     new = __py_new
     __get_hash = __get_builtin_constructor
 
+try:
+    # OpenSSL's PKCS5_PBKDF2_HMAC requires OpenSSL 1.0+ with HMAC and SHA
+    from _hashlib import pbkdf2_hmac
+except ImportError:
+    _trans_5C = bytes((x ^ 0x5C) for x in range(256))
+    _trans_36 = bytes((x ^ 0x36) for x in range(256))
+
+    def pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None):
+        """Password based key derivation function 2 (PKCS #5 v2.0)
+
+        This Python implementations based on the hmac module about as fast
+        as OpenSSL's PKCS5_PBKDF2_HMAC for short passwords and much faster
+        for long passwords.
+        """
+        if not isinstance(hash_name, str):
+            raise TypeError(hash_name)
+
+        if not isinstance(password, (bytes, bytearray)):
+            password = bytes(memoryview(password))
+        if not isinstance(salt, (bytes, bytearray)):
+            salt = bytes(memoryview(salt))
+
+        # Fast inline HMAC implementation
+        inner = new(hash_name)
+        outer = new(hash_name)
+        blocksize = getattr(inner, 'block_size', 64)
+        if len(password) > blocksize:
+            password = new(hash_name, password).digest()
+        password = password + b'\x00' * (blocksize - len(password))
+        inner.update(password.translate(_trans_36))
+        outer.update(password.translate(_trans_5C))
+
+        def prf(msg, inner=inner, outer=outer):
+            # PBKDF2_HMAC uses the password as key. We can re-use the same
+            # digest objects and and just update copies to skip initialization.
+            icpy = inner.copy()
+            ocpy = outer.copy()
+            icpy.update(msg)
+            ocpy.update(icpy.digest())
+            return ocpy.digest()
+
+        if iterations < 1:
+            raise ValueError(iterations)
+        if dklen is None:
+            dklen = outer.digest_size
+        if dklen < 1:
+            raise ValueError(dklen)
+
+        dkey = b''
+        loop = 1
+        from_bytes = int.from_bytes
+        while len(dkey) < dklen:
+            prev = prf(salt + loop.to_bytes(4, 'big'))
+            # endianess doesn't matter here as long to / from use the same
+            rkey = int.from_bytes(prev, 'big')
+            for i in range(iterations - 1):
+                prev = prf(prev)
+                # rkey = rkey ^ prev
+                rkey ^= from_bytes(prev, 'big')
+            loop += 1
+            dkey += rkey.to_bytes(inner.digest_size, 'big')
+
+        return dkey[:dklen]
+
+
 for __func_name in __always_supported:
     # try them all, some may not work due to the OpenSSL
     # version not supporting that algorithm.
diff --git a/Lib/html/parser.py b/Lib/html/parser.py
index 18f3115..22498db 100644
--- a/Lib/html/parser.py
+++ b/Lib/html/parser.py
@@ -25,16 +25,16 @@
 starttagopen = re.compile('<[a-zA-Z]')
 piclose = re.compile('>')
 commentclose = re.compile(r'--\s*>')
-tagfind = re.compile('([a-zA-Z][-.a-zA-Z0-9:_]*)(?:\s|/(?!>))*')
-# see http://www.w3.org/TR/html5/tokenization.html#tag-open-state
-# and http://www.w3.org/TR/html5/tokenization.html#tag-name-state
-tagfind_tolerant = re.compile('[a-zA-Z][^\t\n\r\f />\x00]*')
 # Note:
 #  1) the strict attrfind isn't really strict, but we can't make it
 #     correctly strict without breaking backward compatibility;
-#  2) if you change attrfind remember to update locatestarttagend too;
-#  3) if you change attrfind and/or locatestarttagend the parser will
+#  2) if you change tagfind/attrfind remember to update locatestarttagend too;
+#  3) if you change tagfind/attrfind and/or locatestarttagend the parser will
 #     explode, so don't do it.
+tagfind = re.compile('([a-zA-Z][-.a-zA-Z0-9:_]*)(?:\s|/(?!>))*')
+# see http://www.w3.org/TR/html5/tokenization.html#tag-open-state
+# and http://www.w3.org/TR/html5/tokenization.html#tag-name-state
+tagfind_tolerant = re.compile('([a-zA-Z][^\t\n\r\f />\x00]*)(?:\s|/(?!>))*')
 attrfind = re.compile(
     r'\s*([a-zA-Z_][-.:a-zA-Z_0-9]*)(\s*=\s*'
     r'(\'[^\']*\'|"[^"]*"|[^\s"\'=<>`]*))?')
@@ -56,7 +56,7 @@
   \s*                                # trailing whitespace
 """, re.VERBOSE)
 locatestarttagend_tolerant = re.compile(r"""
-  <[a-zA-Z][-.a-zA-Z0-9:_]*          # tag name
+  <[a-zA-Z][^\t\n\r\f />\x00]*       # tag name
   (?:[\s/]*                          # optional whitespace before attribute name
     (?:(?<=['"\s/])[^\s/>][^\s/=>]*  # attribute name
       (?:\s*=+\s*                    # value indicator
@@ -94,6 +94,8 @@
         return result
 
 
+_strict_sentinel = object()
+
 class HTMLParser(_markupbase.ParserBase):
     """Find tags and other markup and call handler functions.
 
@@ -116,16 +118,18 @@
 
     CDATA_CONTENT_ELEMENTS = ("script", "style")
 
-    def __init__(self, strict=False):
+    def __init__(self, strict=_strict_sentinel):
         """Initialize and reset this instance.
 
         If strict is set to False (the default) the parser will parse invalid
         markup, otherwise it will raise an error.  Note that the strict mode
-        is deprecated.
+        and argument are deprecated.
         """
-        if strict:
-            warnings.warn("The strict mode is deprecated.",
+        if strict is not _strict_sentinel:
+            warnings.warn("The strict argument and mode are deprecated.",
                           DeprecationWarning, stacklevel=2)
+        else:
+            strict = False  # default
         self.strict = strict
         self.reset()
 
@@ -151,6 +155,8 @@
         self.goahead(1)
 
     def error(self, message):
+        warnings.warn("The 'error' method is deprecated.",
+                      DeprecationWarning, stacklevel=2)
         raise HTMLParseError(message, self.getpos())
 
     __starttag_text = None
@@ -330,7 +336,10 @@
 
         # Now parse the data between i+1 and j into a tag and attrs
         attrs = []
-        match = tagfind.match(rawdata, i+1)
+        if self.strict:
+            match = tagfind.match(rawdata, i+1)
+        else:
+            match = tagfind_tolerant.match(rawdata, i+1)
         assert match, 'unexpected call to parse_starttag()'
         k = match.end()
         self.lasttag = tag = match.group(1).lower()
@@ -442,7 +451,7 @@
                     return i+3
                 else:
                     return self.parse_bogus_comment(i)
-            tagname = namematch.group().lower()
+            tagname = namematch.group(1).lower()
             # consume and ignore other stuff between the name and the >
             # Note: this is not 100% correct, since we might have things like
             # </tag attr=">">, but looking for > after tha name should cover
diff --git a/Lib/http/client.py b/Lib/http/client.py
index 939615b..6e32c7b 100644
--- a/Lib/http/client.py
+++ b/Lib/http/client.py
@@ -214,6 +214,8 @@
 
 # maximal line length when calling readline().
 _MAXLINE = 65536
+_MAXHEADERS = 100
+
 
 class HTTPMessage(email.message.Message):
     # XXX The only usage of this method is in
@@ -261,6 +263,8 @@
         if len(line) > _MAXLINE:
             raise LineTooLong("header line")
         headers.append(line)
+        if len(headers) > _MAXHEADERS:
+            raise HTTPException("got more than %d headers" % _MAXHEADERS)
         if line in (b'\r\n', b'\n', b''):
             break
     hstring = b''.join(headers).decode('iso-8859-1')
diff --git a/Lib/http/server.py b/Lib/http/server.py
index 4b249de..7b577b4 100644
--- a/Lib/http/server.py
+++ b/Lib/http/server.py
@@ -995,18 +995,17 @@
 
     def run_cgi(self):
         """Execute a CGI script."""
-        path = self.path
         dir, rest = self.cgi_info
 
-        i = path.find('/', len(dir) + 1)
+        i = rest.find('/')
         while i >= 0:
-            nextdir = path[:i]
-            nextrest = path[i+1:]
+            nextdir = rest[:i]
+            nextrest = rest[i+1:]
 
             scriptdir = self.translate_path(nextdir)
             if os.path.isdir(scriptdir):
                 dir, rest = nextdir, nextrest
-                i = path.find('/', len(dir) + 1)
+                i = rest.find('/')
             else:
                 break
 
diff --git a/Lib/idlelib/idlever.py b/Lib/idlelib/idlever.py
index e15a0a2..fed9779 100644
--- a/Lib/idlelib/idlever.py
+++ b/Lib/idlelib/idlever.py
@@ -1 +1 @@
-IDLE_VERSION = "3.4.0a3"
+IDLE_VERSION = "3.4.0a4"
diff --git a/Lib/imaplib.py b/Lib/imaplib.py
index 42353bb..0994f2b 100644
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -43,6 +43,15 @@
 IMAP4_SSL_PORT = 993
 AllowedVersions = ('IMAP4REV1', 'IMAP4')        # Most recent first
 
+# Maximal line length when calling readline(). This is to prevent
+# reading arbitrary length lines. RFC 3501 and 2060 (IMAP 4rev1)
+# don't specify a line length. RFC 2683 however suggests limiting client
+# command lines to 1000 octets and server command lines to 8000 octets.
+# We have selected 10000 for some extra margin and since that is supposedly
+# also what UW and Panda IMAP does.
+_MAXLINE = 10000
+
+
 #       Commands
 
 Commands = {
@@ -256,7 +265,10 @@
 
     def readline(self):
         """Read line from remote."""
-        return self.file.readline()
+        line = self.file.readline(_MAXLINE + 1)
+        if len(line) > _MAXLINE:
+            raise self.error("got more than %d bytes" % _MAXLINE)
+        return line
 
 
     def send(self, data):
diff --git a/Lib/importlib/__init__.py b/Lib/importlib/__init__.py
index 69ca9ce..e56e9c3 100644
--- a/Lib/importlib/__init__.py
+++ b/Lib/importlib/__init__.py
@@ -107,7 +107,7 @@
     if not module or not isinstance(module, types.ModuleType):
         raise TypeError("reload() argument must be module")
     name = module.__name__
-    if name not in sys.modules:
+    if sys.modules.get(name) is not module:
         msg = "module {} not in sys.modules"
         raise ImportError(msg.format(name), name=name)
     if name in _RELOADING:
@@ -118,7 +118,11 @@
         if parent_name and parent_name not in sys.modules:
             msg = "parent {!r} not in sys.modules"
             raise ImportError(msg.format(parent_name), name=parent_name)
-        module.__loader__.load_module(name)
+        loader = _bootstrap._find_module(name, None)
+        if loader is None:
+            raise ImportError(_bootstrap._ERR_MSG.format(name), name=name)
+        module.__loader__ = loader
+        loader.load_module(name)
         # The module may have replaced itself in sys.modules!
         return sys.modules[module.__name__]
     finally:
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index a95d8b6..77fae0a 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -65,10 +65,20 @@
     return '', path
 
 
+def _path_stat(path):
+    """Stat the path.
+
+    Made a separate function to make it easier to override in experiments
+    (e.g. cache stat results).
+
+    """
+    return _os.stat(path)
+
+
 def _path_is_mode_type(path, mode):
     """Test whether the path is the specified mode type."""
     try:
-        stat_info = _os.stat(path)
+        stat_info = _path_stat(path)
     except OSError:
         return False
     return (stat_info.st_mode & 0o170000) == mode
@@ -369,12 +379,14 @@
 #                        free vars)
 #     Python 3.4a1  3270 (various tweaks to the __class__ closure)
 #     Python 3.4a1  3280 (remove implicit class argument)
+#     Python 3.4a4  3290 (changes to __qualname__ computation)
+#     Python 3.4a4  3300 (more changes to __qualname__ computation)
 #
 # MAGIC must change whenever the bytecode emitted by the compiler may no
 # longer be understood by older implementations of the eval loop (usually
 # due to the addition of new opcodes).
 
-MAGIC_NUMBER = (3280).to_bytes(2, 'little') + b'\r\n'
+MAGIC_NUMBER = (3300).to_bytes(2, 'little') + b'\r\n'
 _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little')  # For import.c
 
 _PYCACHE = '__pycache__'
@@ -456,7 +468,7 @@
 def _calc_mode(path):
     """Calculate the mode permissions for a bytecode file."""
     try:
-        mode = _os.stat(path).st_mode
+        mode = _path_stat(path).st_mode
     except OSError:
         mode = 0o666
     # We always ensure write access so we can update cached files
@@ -878,7 +890,7 @@
         if filepath is None:
             return None
         try:
-            _os.stat(filepath)
+            _path_stat(filepath)
         except OSError:
             return None
         for loader, suffixes in _get_supported_file_loaders():
@@ -1072,7 +1084,7 @@
 
     def path_stats(self, path):
         """Return the metadata for the path."""
-        st = _os.stat(path)
+        st = _path_stat(path)
         return {'mtime': st.st_mtime, 'size': st.st_size}
 
     def _cache_bytecode(self, source_path, bytecode_path, data):
@@ -1302,7 +1314,7 @@
 
         """
         if path == '':
-            path = '.'
+            path = _os.getcwd()
         try:
             finder = sys.path_importer_cache[path]
         except KeyError:
@@ -1390,7 +1402,7 @@
         is_namespace = False
         tail_module = fullname.rpartition('.')[2]
         try:
-            mtime = _os.stat(self.path).st_mtime
+            mtime = _path_stat(self.path or _os.getcwd()).st_mtime
         except OSError:
             mtime = -1
         if mtime != self._path_mtime:
@@ -1406,16 +1418,15 @@
         # Check if the module is the name of a directory (and thus a package).
         if cache_module in cache:
             base_path = _path_join(self.path, tail_module)
-            if _path_isdir(base_path):
-                for suffix, loader in self._loaders:
-                    init_filename = '__init__' + suffix
-                    full_path = _path_join(base_path, init_filename)
-                    if _path_isfile(full_path):
-                        return (loader(fullname, full_path), [base_path])
-                else:
-                    # A namespace package, return the path if we don't also
-                    #  find a module in the next section.
-                    is_namespace = True
+            for suffix, loader in self._loaders:
+                init_filename = '__init__' + suffix
+                full_path = _path_join(base_path, init_filename)
+                if _path_isfile(full_path):
+                    return (loader(fullname, full_path), [base_path])
+            else:
+                # If a namespace package, return the path if we don't
+                #  find a module in the next section.
+                is_namespace = _path_isdir(base_path)
         # Check for a file w/ a proper suffix exists.
         for suffix, loader in self._loaders:
             full_path = _path_join(self.path, tail_module + suffix)
@@ -1432,7 +1443,7 @@
         """Fill the cache of potential modules and packages for this directory."""
         path = self.path
         try:
-            contents = _os.listdir(path)
+            contents = _os.listdir(path or _os.getcwd())
         except (FileNotFoundError, PermissionError, NotADirectoryError):
             # Directory has either been removed, turned into a file, or made
             # unreadable.
@@ -1509,15 +1520,19 @@
     """Find a module's loader."""
     if not sys.meta_path:
         _warnings.warn('sys.meta_path is empty', ImportWarning)
+    is_reload = name in sys.modules
     for finder in sys.meta_path:
         with _ImportLockContext():
             loader = finder.find_module(name, path)
         if loader is not None:
             # The parent import may have already imported this module.
-            if name not in sys.modules:
+            if is_reload or name not in sys.modules:
                 return loader
             else:
-                return sys.modules[name].__loader__
+                try:
+                    return sys.modules[name].__loader__
+                except AttributeError:
+                    return loader
     else:
         return None
 
diff --git a/Lib/importlib/abc.py b/Lib/importlib/abc.py
index dcbe010..01de67d 100644
--- a/Lib/importlib/abc.py
+++ b/Lib/importlib/abc.py
@@ -188,7 +188,7 @@
     load_module = _bootstrap._LoaderBasics.load_module
 
 _register(InspectLoader, machinery.BuiltinImporter, machinery.FrozenImporter,
-            machinery.ExtensionFileLoader, _bootstrap.NamespaceLoader)
+          _bootstrap.NamespaceLoader)
 
 
 class ExecutionLoader(InspectLoader):
@@ -237,7 +237,7 @@
         super().init_module_attrs(module)
         _bootstrap._init_file_attrs(self, module)
 
-_register(machinery.ExtensionFileLoader)
+_register(ExecutionLoader, machinery.ExtensionFileLoader)
 
 
 class FileLoader(_bootstrap.FileLoader, ResourceLoader, ExecutionLoader):
diff --git a/Lib/inspect.py b/Lib/inspect.py
index d03edd9..edbf927 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -269,9 +269,9 @@
     results = []
     processed = set()
     names = dir(object)
-    # add any virtual attributes to the list of names if object is a class
+    # :dd any DynamicClassAttributes to the list of names if object is a class;
     # this may result in duplicate entries if, for example, a virtual
-    # attribute with the same name as a member property exists
+    # attribute with the same name as a DynamicClassAttribute exists
     try:
         for base in object.__bases__:
             for k, v in base.__dict__.items():
@@ -280,18 +280,22 @@
     except AttributeError:
         pass
     for key in names:
-        # First try to get the value via __dict__. Some descriptors don't
-        # like calling their __get__ (see bug #1785).
-        for base in mro:
-            if key in base.__dict__ and key not in processed:
-                # handle the normal case first; if duplicate entries exist
-                # they will be handled second
-                value = base.__dict__[key]
-                break
-        else:
-            try:
-                value = getattr(object, key)
-            except AttributeError:
+        # First try to get the value via getattr.  Some descriptors don't
+        # like calling their __get__ (see bug #1785), so fall back to
+        # looking in the __dict__.
+        try:
+            value = getattr(object, key)
+            # handle the duplicate key
+            if key in processed:
+                raise AttributeError
+        except AttributeError:
+            for base in mro:
+                if key in base.__dict__:
+                    value = base.__dict__[key]
+                    break
+            else:
+                # could be a (currently) missing slot member, or a buggy
+                # __dir__; discard and move on
                 continue
         if not predicate or predicate(value):
             results.append((key, value))
@@ -325,78 +329,94 @@
 
     If one of the items in dir(cls) is stored in the metaclass it will now
     be discovered and not have None be listed as the class in which it was
-    defined.
+    defined.  Any items whose home class cannot be discovered are skipped.
     """
 
     mro = getmro(cls)
     metamro = getmro(type(cls)) # for attributes stored in the metaclass
     metamro = tuple([cls for cls in metamro if cls not in (type, object)])
-    possible_bases = (cls,) + mro + metamro
+    class_bases = (cls,) + mro
+    all_bases = class_bases + metamro
     names = dir(cls)
-    # add any virtual attributes to the list of names
+    # :dd any DynamicClassAttributes to the list of names;
     # this may result in duplicate entries if, for example, a virtual
-    # attribute with the same name as a member property exists
-    for base in cls.__bases__:
+    # attribute with the same name as a DynamicClassAttribute exists.
+    for base in mro:
         for k, v in base.__dict__.items():
             if isinstance(v, types.DynamicClassAttribute):
                 names.append(k)
     result = []
     processed = set()
-    sentinel = object()
+
     for name in names:
         # Get the object associated with the name, and where it was defined.
         # Normal objects will be looked up with both getattr and directly in
         # its class' dict (in case getattr fails [bug #1785], and also to look
         # for a docstring).
-        # For VirtualAttributes on the second pass we only look in the
+        # For DynamicClassAttributes on the second pass we only look in the
         # class's dict.
         #
         # Getting an obj from the __dict__ sometimes reveals more than
         # using getattr.  Static and class methods are dramatic examples.
         homecls = None
-        get_obj = sentinel
-        dict_obj = sentinel
-
-
+        get_obj = None
+        dict_obj = None
         if name not in processed:
             try:
+                if name == '__dict__':
+                    raise Exception("__dict__ is special, don't want the proxy")
                 get_obj = getattr(cls, name)
             except Exception as exc:
                 pass
             else:
-                homecls = getattr(get_obj, "__class__")
                 homecls = getattr(get_obj, "__objclass__", homecls)
-                if homecls not in possible_bases:
+                if homecls not in class_bases:
                     # if the resulting object does not live somewhere in the
-                    # mro, drop it and go with the dict_obj version only
+                    # mro, drop it and search the mro manually
                     homecls = None
-                    get_obj = sentinel
-
-        for base in possible_bases:
+                    last_cls = None
+                    # first look in the classes
+                    for srch_cls in class_bases:
+                        srch_obj = getattr(srch_cls, name, None)
+                        if srch_obj == get_obj:
+                            last_cls = srch_cls
+                    # then check the metaclasses
+                    for srch_cls in metamro:
+                        try:
+                            srch_obj = srch_cls.__getattr__(cls, name)
+                        except AttributeError:
+                            continue
+                        if srch_obj == get_obj:
+                            last_cls = srch_cls
+                    if last_cls is not None:
+                        homecls = last_cls
+        for base in all_bases:
             if name in base.__dict__:
                 dict_obj = base.__dict__[name]
-                homecls = homecls or base
+                if homecls not in metamro:
+                    homecls = base
                 break
-
+        if homecls is None:
+            # unable to locate the attribute anywhere, most likely due to
+            # buggy custom __dir__; discard and move on
+            continue
+        obj = get_obj or dict_obj
         # Classify the object or its descriptor.
-        if get_obj is not sentinel:
-            obj = get_obj
-        else:
-            obj = dict_obj
-        if isinstance(obj, staticmethod):
+        if isinstance(dict_obj, staticmethod):
             kind = "static method"
-        elif isinstance(obj, classmethod):
+            obj = dict_obj
+        elif isinstance(dict_obj, classmethod):
             kind = "class method"
-        elif isinstance(obj, property):
+            obj = dict_obj
+        elif isinstance(dict_obj, property):
             kind = "property"
+            obj = dict_obj
         elif isfunction(obj) or ismethoddescriptor(obj):
             kind = "method"
         else:
             kind = "data"
-
         result.append(Attribute(name, kind, homecls, obj))
         processed.add(name)
-
     return result
 
 # ----------------------------------------------------------- class helpers
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
index eabfd6f..97ff13d 100644
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -975,13 +975,25 @@
         """Test if this address is allocated for private networks.
 
         Returns:
-            A boolean, True if the address is reserved per RFC 4193.
+            A boolean, True if the address is reserved per
+            iana-ipv4-special-registry or iana-ipv6-special-registry.
 
         """
         return (self.network_address.is_private and
                 self.broadcast_address.is_private)
 
     @property
+    def is_global(self):
+        """Test if this address is allocated for public networks.
+
+        Returns:
+            A boolean, True if the address is not reserved per
+            iana-ipv4-special-registry or iana-ipv6-special-registry.
+
+        """
+        return not self.is_private
+
+    @property
     def is_unspecified(self):
         """Test if the address is unspecified.
 
@@ -1221,19 +1233,30 @@
         return self in reserved_network
 
     @property
+    @functools.lru_cache()
     def is_private(self):
         """Test if this address is allocated for private networks.
 
         Returns:
-            A boolean, True if the address is reserved per RFC 1918.
+            A boolean, True if the address is reserved per
+            iana-ipv4-special-registry.
 
         """
-        private_10 = IPv4Network('10.0.0.0/8')
-        private_172 = IPv4Network('172.16.0.0/12')
-        private_192 = IPv4Network('192.168.0.0/16')
-        return (self in private_10 or
-                self in private_172 or
-                self in private_192)
+        return (self in IPv4Network('0.0.0.0/8') or
+                self in IPv4Network('10.0.0.0/8') or
+                self in IPv4Network('127.0.0.0/8') or
+                self in IPv4Network('169.254.0.0/16') or
+                self in IPv4Network('172.16.0.0/12') or
+                self in IPv4Network('192.0.0.0/29') or
+                self in IPv4Network('192.0.0.170/31') or
+                self in IPv4Network('192.0.2.0/24') or
+                self in IPv4Network('192.168.0.0/16') or
+                self in IPv4Network('198.18.0.0/15') or
+                self in IPv4Network('198.51.100.0/24') or
+                self in IPv4Network('203.0.113.0/24') or
+                self in IPv4Network('240.0.0.0/4') or
+                self in IPv4Network('255.255.255.255/32'))
+
 
     @property
     def is_multicast(self):
@@ -1466,6 +1489,21 @@
         if self._prefixlen == (self._max_prefixlen - 1):
             self.hosts = self.__iter__
 
+    @property
+    @functools.lru_cache()
+    def is_global(self):
+        """Test if this address is allocated for public networks.
+
+        Returns:
+            A boolean, True if the address is not reserved per
+            iana-ipv4-special-registry.
+
+        """
+        return (not (self.network_address in IPv4Network('100.64.0.0/10') and
+                    self.broadcast_address in IPv4Network('100.64.0.0/10')) and
+                not self.is_private)
+
+
 
 class _BaseV6:
 
@@ -1822,15 +1860,36 @@
         return self in sitelocal_network
 
     @property
+    @functools.lru_cache()
     def is_private(self):
         """Test if this address is allocated for private networks.
 
         Returns:
-            A boolean, True if the address is reserved per RFC 4193.
+            A boolean, True if the address is reserved per
+            iana-ipv6-special-registry.
 
         """
-        private_network = IPv6Network('fc00::/7')
-        return self in private_network
+        return (self in IPv6Network('::1/128') or
+                self in IPv6Network('::/128') or
+                self in IPv6Network('::ffff:0:0/96') or
+                self in IPv6Network('100::/64') or
+                self in IPv6Network('2001::/23') or
+                self in IPv6Network('2001:2::/48') or
+                self in IPv6Network('2001:db8::/32') or
+                self in IPv6Network('2001:10::/28') or
+                self in IPv6Network('fc00::/7') or
+                self in IPv6Network('fe80::/10'))
+
+    @property
+    def is_global(self):
+        """Test if this address is allocated for public networks.
+
+        Returns:
+            A boolean, true if the address is not reserved per
+            iana-ipv6-special-registry.
+
+        """
+        return not self.is_private
 
     @property
     def is_unspecified(self):
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index 3f95cc3..a459f77 100644
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -310,6 +310,11 @@
     The ``encoding`` argument is ignored and deprecated.
 
     """
+    if not isinstance(s, str):
+        raise TypeError('the JSON object must be str, not {!r}'.format(
+                            s.__class__.__name__))
+    if s.startswith(u'\ufeff'):
+        raise ValueError("Unexpected UTF-8 BOM (decode using utf-8-sig)")
     if (cls is None and object_hook is None and
             parse_int is None and parse_float is None and
             parse_constant is None and object_pairs_hook is None and not kw):
diff --git a/Lib/lib2to3/fixes/fix_unicode.py b/Lib/lib2to3/fixes/fix_unicode.py
index 6555397..c7982c2 100644
--- a/Lib/lib2to3/fixes/fix_unicode.py
+++ b/Lib/lib2to3/fixes/fix_unicode.py
@@ -28,8 +28,7 @@
             return new
         elif node.type == token.STRING:
             val = node.value
-            if (not self.unicode_literals and val[0] in 'rR\'"' and
-                '\\' in val):
+            if not self.unicode_literals and val[0] in '\'"' and '\\' in val:
                 val = r'\\'.join([
                     v.replace('\\u', r'\\u').replace('\\U', r'\\U')
                     for v in val.split(r'\\')
diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py
index 912bd4c..5b16bc3 100644
--- a/Lib/lib2to3/tests/test_fixers.py
+++ b/Lib/lib2to3/tests/test_fixers.py
@@ -2889,7 +2889,7 @@
         self.check(b, a)
 
         b = r"""r'\\\u20ac\U0001d121\\u20ac'"""
-        a = r"""r'\\\\u20ac\\U0001d121\\u20ac'"""
+        a = r"""r'\\\u20ac\U0001d121\\u20ac'"""
         self.check(b, a)
 
     def test_bytes_literal_escape_u(self):
diff --git a/Lib/locale.py b/Lib/locale.py
index d2a885d..2e82c95 100644
--- a/Lib/locale.py
+++ b/Lib/locale.py
@@ -554,8 +554,8 @@
     # On Win32, this will return the ANSI code page
     def getpreferredencoding(do_setlocale = True):
         """Return the charset that the user is likely using."""
-        import _locale
-        return _locale._getdefaultlocale()[1]
+        import _bootlocale
+        return _bootlocale.getpreferredencoding(False)
 else:
     # On Unix, if CODESET is available, use that.
     try:
@@ -574,27 +574,16 @@
         def getpreferredencoding(do_setlocale = True):
             """Return the charset that the user is likely using,
             according to the system configuration."""
+            import _bootlocale
             if do_setlocale:
                 oldloc = setlocale(LC_CTYPE)
                 try:
                     setlocale(LC_CTYPE, "")
                 except Error:
                     pass
-                result = nl_langinfo(CODESET)
-                if not result and sys.platform == 'darwin':
-                    # nl_langinfo can return an empty string
-                    # when the setting has an invalid value.
-                    # Default to UTF-8 in that case because
-                    # UTF-8 is the default charset on OSX and
-                    # returning nothing will crash the
-                    # interpreter.
-                    result = 'UTF-8'
+            result = _bootlocale.getpreferredencoding(False)
+            if do_setlocale:
                 setlocale(LC_CTYPE, oldloc)
-            else:
-                result = nl_langinfo(CODESET)
-                if not result and sys.platform == 'darwin':
-                    # See above for explanation
-                    result = 'UTF-8'
             return result
 
 
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index b0b0a16..b2e7d44 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -518,7 +518,11 @@
         else:
             result = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
             result.settimeout(timeout)
-            result.connect(self.address)
+            try:
+                result.connect(self.address)
+            except OSError:
+                result.close()  # Issue 19182
+                raise
         return result
 
     def createSocket(self):
diff --git a/Lib/lzma.py b/Lib/lzma.py
index b2e2f7e..011ad27 100644
--- a/Lib/lzma.py
+++ b/Lib/lzma.py
@@ -54,9 +54,9 @@
         bytes object), in which case the named file is opened, or it can
         be an existing file object to read from or write to.
 
-        mode can be "r" for reading (default), "w" for (over)writing, or
-        "a" for appending. These can equivalently be given as "rb", "wb"
-        and "ab" respectively.
+        mode can be "r" for reading (default), "w" for (over)writing,
+        "x" for creating exclusively, or "a" for appending. These can
+        equivalently be given as "rb", "wb", "xb" and "ab" respectively.
 
         format specifies the container format to use for the file.
         If mode is "r", this defaults to FORMAT_AUTO. Otherwise, the
@@ -112,7 +112,7 @@
             self._decompressor = LZMADecompressor(**self._init_args)
             self._buffer = b""
             self._buffer_offset = 0
-        elif mode in ("w", "wb", "a", "ab"):
+        elif mode in ("w", "wb", "a", "ab", "x", "xb"):
             if format is None:
                 format = FORMAT_XZ
             mode_code = _MODE_WRITE
@@ -426,8 +426,9 @@
     object), in which case the named file is opened, or it can be an
     existing file object to read from or write to.
 
-    The mode argument can be "r", "rb" (default), "w", "wb", "a" or "ab"
-    for binary mode, or "rt", "wt" or "at" for text mode.
+    The mode argument can be "r", "rb" (default), "w", "wb", "x", "xb",
+    "a", or "ab" for binary mode, or "rt", "wt", "xt", or "at" for text
+    mode.
 
     The format, check, preset and filters arguments specify the
     compression settings, as for LZMACompressor, LZMADecompressor and
diff --git a/Lib/macurl2path.py b/Lib/macurl2path.py
index f22fb20..a68821d 100644
--- a/Lib/macurl2path.py
+++ b/Lib/macurl2path.py
@@ -75,23 +75,3 @@
 def _pncomp2url(component):
     # We want to quote slashes
     return urllib.parse.quote(component[:31], safe='')
-
-def test():
-    for url in ["index.html",
-                "bar/index.html",
-                "/foo/bar/index.html",
-                "/foo/bar/",
-                "/"]:
-        print('%r -> %r' % (url, url2pathname(url)))
-    for path in ["drive:",
-                 "drive:dir:",
-                 "drive:dir:file",
-                 "drive:file",
-                 "file",
-                 ":file",
-                 ":dir:",
-                 ":dir:file"]:
-        print('%r -> %r' % (path, pathname2url(path)))
-
-if __name__ == '__main__':
-    test()
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py
index 5aaa908..d7161f8 100644
--- a/Lib/mimetypes.py
+++ b/Lib/mimetypes.py
@@ -243,25 +243,27 @@
             while True:
                 try:
                     ctype = _winreg.EnumKey(mimedb, i)
-                except OSError:
+                except EnvironmentError:
                     break
                 else:
                     yield ctype
                 i += 1
 
-        with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT,
-                             r'MIME\Database\Content Type') as mimedb:
-            for ctype in enum_types(mimedb):
+        with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr:
+            for subkeyname in enum_types(hkcr):
                 try:
-                    with _winreg.OpenKey(mimedb, ctype) as key:
-                        suffix, datatype = _winreg.QueryValueEx(key,
-                                                                'Extension')
-                except OSError:
+                    with _winreg.OpenKey(hkcr, subkeyname) as subkey:
+                        # Only check file extensions
+                        if not subkeyname.startswith("."):
+                            continue
+                        # raises EnvironmentError if no 'Content Type' value
+                        mimetype, datatype = _winreg.QueryValueEx(
+                            subkey, 'Content Type')
+                        if datatype != _winreg.REG_SZ:
+                            continue
+                        self.add_type(mimetype, subkeyname, strict)
+                except EnvironmentError:
                     continue
-                if datatype != _winreg.REG_SZ:
-                    continue
-                self.add_type(ctype, suffix, strict)
-
 
 def guess_type(url, strict=True):
     """Guess the type of a file based on its URL.
diff --git a/Lib/multiprocessing/__init__.py b/Lib/multiprocessing/__init__.py
index fd75839..86df638 100644
--- a/Lib/multiprocessing/__init__.py
+++ b/Lib/multiprocessing/__init__.py
@@ -12,27 +12,16 @@
 # Licensed to PSF under a Contributor Agreement.
 #
 
-__version__ = '0.70a1'
-
-__all__ = [
-    'Process', 'current_process', 'active_children', 'freeze_support',
-    'Manager', 'Pipe', 'cpu_count', 'log_to_stderr', 'get_logger',
-    'allow_connection_pickling', 'BufferTooShort', 'TimeoutError',
-    'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition',
-    'Event', 'Barrier', 'Queue', 'SimpleQueue', 'JoinableQueue', 'Pool',
-    'Value', 'Array', 'RawValue', 'RawArray', 'SUBDEBUG', 'SUBWARNING',
-    'set_executable', 'set_start_method', 'get_start_method',
-    'get_all_start_methods', 'set_forkserver_preload'
-    ]
-
-#
-# Imports
-#
-
-import os
 import sys
+from . import context
 
-from .process import Process, current_process, active_children
+#
+# Copy stuff from default context
+#
+
+globals().update((name, getattr(context._default_context, name))
+                 for name in context._default_context.__all__)
+__all__ = context._default_context.__all__
 
 #
 # XXX These should not really be documented or public.
@@ -47,240 +36,3 @@
 
 if '__main__' in sys.modules:
     sys.modules['__mp_main__'] = sys.modules['__main__']
-
-#
-# Exceptions
-#
-
-class ProcessError(Exception):
-    pass
-
-class BufferTooShort(ProcessError):
-    pass
-
-class TimeoutError(ProcessError):
-    pass
-
-class AuthenticationError(ProcessError):
-    pass
-
-#
-# Definitions not depending on native semaphores
-#
-
-def Manager():
-    '''
-    Returns a manager associated with a running server process
-
-    The managers methods such as `Lock()`, `Condition()` and `Queue()`
-    can be used to create shared objects.
-    '''
-    from .managers import SyncManager
-    m = SyncManager()
-    m.start()
-    return m
-
-def Pipe(duplex=True):
-    '''
-    Returns two connection object connected by a pipe
-    '''
-    from .connection import Pipe
-    return Pipe(duplex)
-
-def cpu_count():
-    '''
-    Returns the number of CPUs in the system
-    '''
-    num = os.cpu_count()
-    if num is None:
-        raise NotImplementedError('cannot determine number of cpus')
-    else:
-        return num
-
-def freeze_support():
-    '''
-    Check whether this is a fake forked process in a frozen executable.
-    If so then run code specified by commandline and exit.
-    '''
-    if sys.platform == 'win32' and getattr(sys, 'frozen', False):
-        from .spawn import freeze_support
-        freeze_support()
-
-def get_logger():
-    '''
-    Return package logger -- if it does not already exist then it is created
-    '''
-    from .util import get_logger
-    return get_logger()
-
-def log_to_stderr(level=None):
-    '''
-    Turn on logging and add a handler which prints to stderr
-    '''
-    from .util import log_to_stderr
-    return log_to_stderr(level)
-
-def allow_connection_pickling():
-    '''
-    Install support for sending connections and sockets between processes
-    '''
-    # This is undocumented.  In previous versions of multiprocessing
-    # its only effect was to make socket objects inheritable on Windows.
-    from . import connection
-
-#
-# Definitions depending on native semaphores
-#
-
-def Lock():
-    '''
-    Returns a non-recursive lock object
-    '''
-    from .synchronize import Lock
-    return Lock()
-
-def RLock():
-    '''
-    Returns a recursive lock object
-    '''
-    from .synchronize import RLock
-    return RLock()
-
-def Condition(lock=None):
-    '''
-    Returns a condition object
-    '''
-    from .synchronize import Condition
-    return Condition(lock)
-
-def Semaphore(value=1):
-    '''
-    Returns a semaphore object
-    '''
-    from .synchronize import Semaphore
-    return Semaphore(value)
-
-def BoundedSemaphore(value=1):
-    '''
-    Returns a bounded semaphore object
-    '''
-    from .synchronize import BoundedSemaphore
-    return BoundedSemaphore(value)
-
-def Event():
-    '''
-    Returns an event object
-    '''
-    from .synchronize import Event
-    return Event()
-
-def Barrier(parties, action=None, timeout=None):
-    '''
-    Returns a barrier object
-    '''
-    from .synchronize import Barrier
-    return Barrier(parties, action, timeout)
-
-def Queue(maxsize=0):
-    '''
-    Returns a queue object
-    '''
-    from .queues import Queue
-    return Queue(maxsize)
-
-def JoinableQueue(maxsize=0):
-    '''
-    Returns a queue object
-    '''
-    from .queues import JoinableQueue
-    return JoinableQueue(maxsize)
-
-def SimpleQueue():
-    '''
-    Returns a queue object
-    '''
-    from .queues import SimpleQueue
-    return SimpleQueue()
-
-def Pool(processes=None, initializer=None, initargs=(), maxtasksperchild=None):
-    '''
-    Returns a process pool object
-    '''
-    from .pool import Pool
-    return Pool(processes, initializer, initargs, maxtasksperchild)
-
-def RawValue(typecode_or_type, *args):
-    '''
-    Returns a shared object
-    '''
-    from .sharedctypes import RawValue
-    return RawValue(typecode_or_type, *args)
-
-def RawArray(typecode_or_type, size_or_initializer):
-    '''
-    Returns a shared array
-    '''
-    from .sharedctypes import RawArray
-    return RawArray(typecode_or_type, size_or_initializer)
-
-def Value(typecode_or_type, *args, lock=True):
-    '''
-    Returns a synchronized shared object
-    '''
-    from .sharedctypes import Value
-    return Value(typecode_or_type, *args, lock=lock)
-
-def Array(typecode_or_type, size_or_initializer, *, lock=True):
-    '''
-    Returns a synchronized shared array
-    '''
-    from .sharedctypes import Array
-    return Array(typecode_or_type, size_or_initializer, lock=lock)
-
-#
-#
-#
-
-def set_executable(executable):
-    '''
-    Sets the path to a python.exe or pythonw.exe binary used to run
-    child processes instead of sys.executable when using the 'spawn'
-    start method.  Useful for people embedding Python.
-    '''
-    from .spawn import set_executable
-    set_executable(executable)
-
-def set_start_method(method):
-    '''
-    Set method for starting processes: 'fork', 'spawn' or 'forkserver'.
-    '''
-    from .popen import set_start_method
-    set_start_method(method)
-
-def get_start_method():
-    '''
-    Get method for starting processes: 'fork', 'spawn' or 'forkserver'.
-    '''
-    from .popen import get_start_method
-    return get_start_method()
-
-def get_all_start_methods():
-    '''
-    Get list of availables start methods, default first.
-    '''
-    from .popen import get_all_start_methods
-    return get_all_start_methods()
-
-def set_forkserver_preload(module_names):
-    '''
-    Set list of module names to try to load in the forkserver process
-    when it is started.  Properly chosen this can significantly reduce
-    the cost of starting a new process using the forkserver method.
-    The default list is ['__main__'].
-    '''
-    try:
-        from .forkserver import set_forkserver_preload
-    except ImportError:
-        pass
-    else:
-        set_forkserver_preload(module_names)
diff --git a/Lib/multiprocessing/context.py b/Lib/multiprocessing/context.py
new file mode 100644
index 0000000..63849f9
--- /dev/null
+++ b/Lib/multiprocessing/context.py
@@ -0,0 +1,348 @@
+import os
+import sys
+import threading
+
+from . import process
+
+__all__ = []            # things are copied from here to __init__.py
+
+#
+# Exceptions
+#
+
+class ProcessError(Exception):
+    pass
+
+class BufferTooShort(ProcessError):
+    pass
+
+class TimeoutError(ProcessError):
+    pass
+
+class AuthenticationError(ProcessError):
+    pass
+
+#
+# Base type for contexts
+#
+
+class BaseContext(object):
+
+    ProcessError = ProcessError
+    BufferTooShort = BufferTooShort
+    TimeoutError = TimeoutError
+    AuthenticationError = AuthenticationError
+
+    current_process = staticmethod(process.current_process)
+    active_children = staticmethod(process.active_children)
+
+    def cpu_count(self):
+        '''Returns the number of CPUs in the system'''
+        num = os.cpu_count()
+        if num is None:
+            raise NotImplementedError('cannot determine number of cpus')
+        else:
+            return num
+
+    def Manager(self):
+        '''Returns a manager associated with a running server process
+
+        The managers methods such as `Lock()`, `Condition()` and `Queue()`
+        can be used to create shared objects.
+        '''
+        from .managers import SyncManager
+        m = SyncManager(ctx=self.get_context())
+        m.start()
+        return m
+
+    def Pipe(self, duplex=True):
+        '''Returns two connection object connected by a pipe'''
+        from .connection import Pipe
+        return Pipe(duplex)
+
+    def Lock(self):
+        '''Returns a non-recursive lock object'''
+        from .synchronize import Lock
+        return Lock(ctx=self.get_context())
+
+    def RLock(self):
+        '''Returns a recursive lock object'''
+        from .synchronize import RLock
+        return RLock(ctx=self.get_context())
+
+    def Condition(self, lock=None):
+        '''Returns a condition object'''
+        from .synchronize import Condition
+        return Condition(lock, ctx=self.get_context())
+
+    def Semaphore(self, value=1):
+        '''Returns a semaphore object'''
+        from .synchronize import Semaphore
+        return Semaphore(value, ctx=self.get_context())
+
+    def BoundedSemaphore(self, value=1):
+        '''Returns a bounded semaphore object'''
+        from .synchronize import BoundedSemaphore
+        return BoundedSemaphore(value, ctx=self.get_context())
+
+    def Event(self):
+        '''Returns an event object'''
+        from .synchronize import Event
+        return Event(ctx=self.get_context())
+
+    def Barrier(self, parties, action=None, timeout=None):
+        '''Returns a barrier object'''
+        from .synchronize import Barrier
+        return Barrier(parties, action, timeout, ctx=self.get_context())
+
+    def Queue(self, maxsize=0):
+        '''Returns a queue object'''
+        from .queues import Queue
+        return Queue(maxsize, ctx=self.get_context())
+
+    def JoinableQueue(self, maxsize=0):
+        '''Returns a queue object'''
+        from .queues import JoinableQueue
+        return JoinableQueue(maxsize, ctx=self.get_context())
+
+    def SimpleQueue(self):
+        '''Returns a queue object'''
+        from .queues import SimpleQueue
+        return SimpleQueue(ctx=self.get_context())
+
+    def Pool(self, processes=None, initializer=None, initargs=(),
+             maxtasksperchild=None):
+        '''Returns a process pool object'''
+        from .pool import Pool
+        return Pool(processes, initializer, initargs, maxtasksperchild,
+                    context=self.get_context())
+
+    def RawValue(self, typecode_or_type, *args):
+        '''Returns a shared object'''
+        from .sharedctypes import RawValue
+        return RawValue(typecode_or_type, *args)
+
+    def RawArray(self, typecode_or_type, size_or_initializer):
+        '''Returns a shared array'''
+        from .sharedctypes import RawArray
+        return RawArray(typecode_or_type, size_or_initializer)
+
+    def Value(self, typecode_or_type, *args, lock=True):
+        '''Returns a synchronized shared object'''
+        from .sharedctypes import Value
+        return Value(typecode_or_type, *args, lock=lock,
+                     ctx=self.get_context())
+
+    def Array(self, typecode_or_type, size_or_initializer, *, lock=True):
+        '''Returns a synchronized shared array'''
+        from .sharedctypes import Array
+        return Array(typecode_or_type, size_or_initializer, lock=lock,
+                     ctx=self.get_context())
+
+    def freeze_support(self):
+        '''Check whether this is a fake forked process in a frozen executable.
+        If so then run code specified by commandline and exit.
+        '''
+        if sys.platform == 'win32' and getattr(sys, 'frozen', False):
+            from .spawn import freeze_support
+            freeze_support()
+
+    def get_logger(self):
+        '''Return package logger -- if it does not already exist then
+        it is created.
+        '''
+        from .util import get_logger
+        return get_logger()
+
+    def log_to_stderr(self, level=None):
+        '''Turn on logging and add a handler which prints to stderr'''
+        from .util import log_to_stderr
+        return log_to_stderr(level)
+
+    def allow_connection_pickling(self):
+        '''Install support for sending connections and sockets
+        between processes
+        '''
+        # This is undocumented.  In previous versions of multiprocessing
+        # its only effect was to make socket objects inheritable on Windows.
+        from . import connection
+
+    def set_executable(self, executable):
+        '''Sets the path to a python.exe or pythonw.exe binary used to run
+        child processes instead of sys.executable when using the 'spawn'
+        start method.  Useful for people embedding Python.
+        '''
+        from .spawn import set_executable
+        set_executable(executable)
+
+    def set_forkserver_preload(self, module_names):
+        '''Set list of module names to try to load in forkserver process.
+        This is really just a hint.
+        '''
+        from .forkserver import set_forkserver_preload
+        set_forkserver_preload(module_names)
+
+    def get_context(self, method=None):
+        if method is None:
+            return self
+        try:
+            ctx = _concrete_contexts[method]
+        except KeyError:
+            raise ValueError('cannot find context for %r' % method)
+        ctx._check_available()
+        return ctx
+
+    def get_start_method(self, allow_none=False):
+        return self._name
+
+    def set_start_method(self, method=None):
+        raise ValueError('cannot set start method of concrete context')
+
+    def _check_available(self):
+        pass
+
+#
+# Type of default context -- underlying context can be set at most once
+#
+
+class Process(process.BaseProcess):
+    _start_method = None
+    @staticmethod
+    def _Popen(process_obj):
+        return _default_context.get_context().Process._Popen(process_obj)
+
+class DefaultContext(BaseContext):
+    Process = Process
+
+    def __init__(self, context):
+        self._default_context = context
+        self._actual_context = None
+
+    def get_context(self, method=None):
+        if method is None:
+            if self._actual_context is None:
+                self._actual_context = self._default_context
+            return self._actual_context
+        else:
+            return super().get_context(method)
+
+    def set_start_method(self, method, force=False):
+        if self._actual_context is not None and not force:
+            raise RuntimeError('context has already been set')
+        if method is None and force:
+            self._actual_context = None
+            return
+        self._actual_context = self.get_context(method)
+
+    def get_start_method(self, allow_none=False):
+        if self._actual_context is None:
+            if allow_none:
+                return None
+            self._actual_context = self._default_context
+        return self._actual_context._name
+
+    def get_all_start_methods(self):
+        if sys.platform == 'win32':
+            return ['spawn']
+        else:
+            from . import reduction
+            if reduction.HAVE_SEND_HANDLE:
+                return ['fork', 'spawn', 'forkserver']
+            else:
+                return ['fork', 'spawn']
+
+DefaultContext.__all__ = list(x for x in dir(DefaultContext) if x[0] != '_')
+
+#
+# Context types for fixed start method
+#
+
+if sys.platform != 'win32':
+
+    class ForkProcess(process.BaseProcess):
+        _start_method = 'fork'
+        @staticmethod
+        def _Popen(process_obj):
+            from .popen_fork import Popen
+            return Popen(process_obj)
+
+    class SpawnProcess(process.BaseProcess):
+        _start_method = 'spawn'
+        @staticmethod
+        def _Popen(process_obj):
+            from .popen_spawn_posix import Popen
+            return Popen(process_obj)
+
+    class ForkServerProcess(process.BaseProcess):
+        _start_method = 'forkserver'
+        @staticmethod
+        def _Popen(process_obj):
+            from .popen_forkserver import Popen
+            return Popen(process_obj)
+
+    class ForkContext(BaseContext):
+        _name = 'fork'
+        Process = ForkProcess
+
+    class SpawnContext(BaseContext):
+        _name = 'spawn'
+        Process = SpawnProcess
+
+    class ForkServerContext(BaseContext):
+        _name = 'forkserver'
+        Process = ForkServerProcess
+        def _check_available(self):
+            from . import reduction
+            if not reduction.HAVE_SEND_HANDLE:
+                raise ValueError('forkserver start method not available')
+
+    _concrete_contexts = {
+        'fork': ForkContext(),
+        'spawn': SpawnContext(),
+        'forkserver': ForkServerContext(),
+    }
+    _default_context = DefaultContext(_concrete_contexts['fork'])
+
+else:
+
+    class SpawnProcess(process.BaseProcess):
+        _start_method = 'spawn'
+        @staticmethod
+        def _Popen(process_obj):
+            from .popen_spawn_win32 import Popen
+            return Popen(process_obj)
+
+    class SpawnContext(BaseContext):
+        _name = 'spawn'
+        Process = SpawnProcess
+
+    _concrete_contexts = {
+        'spawn': SpawnContext(),
+    }
+    _default_context = DefaultContext(_concrete_contexts['spawn'])
+
+#
+# Force the start method
+#
+
+def _force_start_method(method):
+    _default_context._actual_context = _concrete_contexts[method]
+
+#
+# Check that the current thread is spawning a child process
+#
+
+_tls = threading.local()
+
+def get_spawning_popen():
+    return getattr(_tls, 'spawning_popen', None)
+
+def set_spawning_popen(popen):
+    _tls.spawning_popen = popen
+
+def assert_spawning(obj):
+    if get_spawning_popen() is None:
+        raise RuntimeError(
+            '%s objects should only be shared between processes'
+            ' through inheritance' % type(obj).__name__
+            )
diff --git a/Lib/multiprocessing/forkserver.py b/Lib/multiprocessing/forkserver.py
index 0a23707..387517e 100644
--- a/Lib/multiprocessing/forkserver.py
+++ b/Lib/multiprocessing/forkserver.py
@@ -24,105 +24,113 @@
 MAXFDS_TO_SEND = 256
 UNSIGNED_STRUCT = struct.Struct('Q')     # large enough for pid_t
 
-_forkserver_address = None
-_forkserver_alive_fd = None
-_inherited_fds = None
-_lock = threading.Lock()
-_preload_modules = ['__main__']
-
 #
-# Public function
+# Forkserver class
 #
 
-def set_forkserver_preload(modules_names):
-    '''Set list of module names to try to load in forkserver process.'''
-    global _preload_modules
-    _preload_modules = modules_names
+class ForkServer(object):
 
+    def __init__(self):
+        self._forkserver_address = None
+        self._forkserver_alive_fd = None
+        self._inherited_fds = None
+        self._lock = threading.Lock()
+        self._preload_modules = ['__main__']
 
-def get_inherited_fds():
-    '''Return list of fds inherited from parent process.
+    def set_forkserver_preload(self, modules_names):
+        '''Set list of module names to try to load in forkserver process.'''
+        if not all(type(mod) is str for mod in self._preload_modules):
+            raise TypeError('module_names must be a list of strings')
+        self._preload_modules = modules_names
 
-    This returns None if the current process was not started by fork server.
-    '''
-    return _inherited_fds
+    def get_inherited_fds(self):
+        '''Return list of fds inherited from parent process.
 
+        This returns None if the current process was not started by fork
+        server.
+        '''
+        return self._inherited_fds
 
-def connect_to_new_process(fds):
-    '''Request forkserver to create a child process.
+    def connect_to_new_process(self, fds):
+        '''Request forkserver to create a child process.
 
-    Returns a pair of fds (status_r, data_w).  The calling process can read
-    the child process's pid and (eventually) its returncode from status_r.
-    The calling process should write to data_w the pickled preparation and
-    process data.
-    '''
-    if len(fds) + 4 >= MAXFDS_TO_SEND:
-        raise ValueError('too many fds')
-    with socket.socket(socket.AF_UNIX) as client:
-        client.connect(_forkserver_address)
-        parent_r, child_w = os.pipe()
-        child_r, parent_w = os.pipe()
-        allfds = [child_r, child_w, _forkserver_alive_fd,
-                  semaphore_tracker._semaphore_tracker_fd]
-        allfds += fds
-        try:
-            reduction.sendfds(client, allfds)
-            return parent_r, parent_w
-        except:
-            os.close(parent_r)
-            os.close(parent_w)
-            raise
-        finally:
-            os.close(child_r)
-            os.close(child_w)
-
-
-def ensure_running():
-    '''Make sure that a fork server is running.
-
-    This can be called from any process.  Note that usually a child
-    process will just reuse the forkserver started by its parent, so
-    ensure_running() will do nothing.
-    '''
-    global _forkserver_address, _forkserver_alive_fd
-    with _lock:
-        if _forkserver_alive_fd is not None:
-            return
-
-        assert all(type(mod) is str for mod in _preload_modules)
-        cmd = ('from multiprocessing.forkserver import main; ' +
-               'main(%d, %d, %r, **%r)')
-
-        if _preload_modules:
-            desired_keys = {'main_path', 'sys_path'}
-            data = spawn.get_preparation_data('ignore')
-            data = dict((x,y) for (x,y) in data.items() if x in desired_keys)
-        else:
-            data = {}
-
-        with socket.socket(socket.AF_UNIX) as listener:
-            address = connection.arbitrary_address('AF_UNIX')
-            listener.bind(address)
-            os.chmod(address, 0o600)
-            listener.listen(100)
-
-            # all client processes own the write end of the "alive" pipe;
-            # when they all terminate the read end becomes ready.
-            alive_r, alive_w = os.pipe()
+        Returns a pair of fds (status_r, data_w).  The calling process can read
+        the child process's pid and (eventually) its returncode from status_r.
+        The calling process should write to data_w the pickled preparation and
+        process data.
+        '''
+        self.ensure_running()
+        if len(fds) + 4 >= MAXFDS_TO_SEND:
+            raise ValueError('too many fds')
+        with socket.socket(socket.AF_UNIX) as client:
+            client.connect(self._forkserver_address)
+            parent_r, child_w = os.pipe()
+            child_r, parent_w = os.pipe()
+            allfds = [child_r, child_w, self._forkserver_alive_fd,
+                      semaphore_tracker.getfd()]
+            allfds += fds
             try:
-                fds_to_pass = [listener.fileno(), alive_r]
-                cmd %= (listener.fileno(), alive_r, _preload_modules, data)
-                exe = spawn.get_executable()
-                args = [exe] + util._args_from_interpreter_flags() + ['-c', cmd]
-                pid = util.spawnv_passfds(exe, args, fds_to_pass)
+                reduction.sendfds(client, allfds)
+                return parent_r, parent_w
             except:
-                os.close(alive_w)
+                os.close(parent_r)
+                os.close(parent_w)
                 raise
             finally:
-                os.close(alive_r)
-            _forkserver_address = address
-            _forkserver_alive_fd = alive_w
+                os.close(child_r)
+                os.close(child_w)
 
+    def ensure_running(self):
+        '''Make sure that a fork server is running.
+
+        This can be called from any process.  Note that usually a child
+        process will just reuse the forkserver started by its parent, so
+        ensure_running() will do nothing.
+        '''
+        with self._lock:
+            semaphore_tracker.ensure_running()
+            if self._forkserver_alive_fd is not None:
+                return
+
+            cmd = ('from multiprocessing.forkserver import main; ' +
+                   'main(%d, %d, %r, **%r)')
+
+            if self._preload_modules:
+                desired_keys = {'main_path', 'sys_path'}
+                data = spawn.get_preparation_data('ignore')
+                data = dict((x,y) for (x,y) in data.items()
+                            if x in desired_keys)
+            else:
+                data = {}
+
+            with socket.socket(socket.AF_UNIX) as listener:
+                address = connection.arbitrary_address('AF_UNIX')
+                listener.bind(address)
+                os.chmod(address, 0o600)
+                listener.listen(100)
+
+                # all client processes own the write end of the "alive" pipe;
+                # when they all terminate the read end becomes ready.
+                alive_r, alive_w = os.pipe()
+                try:
+                    fds_to_pass = [listener.fileno(), alive_r]
+                    cmd %= (listener.fileno(), alive_r, self._preload_modules,
+                            data)
+                    exe = spawn.get_executable()
+                    args = [exe] + util._args_from_interpreter_flags()
+                    args += ['-c', cmd]
+                    pid = util.spawnv_passfds(exe, args, fds_to_pass)
+                except:
+                    os.close(alive_w)
+                    raise
+                finally:
+                    os.close(alive_r)
+                self._forkserver_address = address
+                self._forkserver_alive_fd = alive_w
+
+#
+#
+#
 
 def main(listener_fd, alive_r, preload, main_path=None, sys_path=None):
     '''Run forkserver.'''
@@ -151,8 +159,7 @@
     handler = signal.signal(signal.SIGCHLD, signal.SIG_IGN)
     with socket.socket(socket.AF_UNIX, fileno=listener_fd) as listener, \
          selectors.DefaultSelector() as selector:
-        global _forkserver_address
-        _forkserver_address = listener.getsockname()
+        _forkserver._forkserver_address = listener.getsockname()
 
         selector.register(listener, selectors.EVENT_READ)
         selector.register(alive_r, selectors.EVENT_READ)
@@ -187,13 +194,7 @@
                 if e.errno != errno.ECONNABORTED:
                     raise
 
-#
-# Code to bootstrap new process
-#
-
 def _serve_one(s, listener, alive_r, handler):
-    global _inherited_fds, _forkserver_alive_fd
-
     # close unnecessary stuff and reset SIGCHLD handler
     listener.close()
     os.close(alive_r)
@@ -203,8 +204,9 @@
     fds = reduction.recvfds(s, MAXFDS_TO_SEND + 1)
     s.close()
     assert len(fds) <= MAXFDS_TO_SEND
-    child_r, child_w, _forkserver_alive_fd, stfd, *_inherited_fds = fds
-    semaphore_tracker._semaphore_tracker_fd = stfd
+    (child_r, child_w, _forkserver._forkserver_alive_fd,
+     stfd, *_forkserver._inherited_fds) = fds
+    semaphore_tracker._semaphore_tracker._fd = stfd
 
     # send pid to client processes
     write_unsigned(child_w, os.getpid())
@@ -253,3 +255,13 @@
         if nbytes == 0:
             raise RuntimeError('should not get here')
         msg = msg[nbytes:]
+
+#
+#
+#
+
+_forkserver = ForkServer()
+ensure_running = _forkserver.ensure_running
+get_inherited_fds = _forkserver.get_inherited_fds
+connect_to_new_process = _forkserver.connect_to_new_process
+set_forkserver_preload = _forkserver.set_forkserver_preload
diff --git a/Lib/multiprocessing/heap.py b/Lib/multiprocessing/heap.py
index b95f90f..98bfdc8 100644
--- a/Lib/multiprocessing/heap.py
+++ b/Lib/multiprocessing/heap.py
@@ -16,7 +16,7 @@
 import threading
 import _multiprocessing
 
-from . import popen
+from . import context
 from . import reduction
 from . import util
 
@@ -50,7 +50,7 @@
             self._state = (self.size, self.name)
 
         def __getstate__(self):
-            popen.assert_spawning(self)
+            context.assert_spawning(self)
             return self._state
 
         def __setstate__(self, state):
diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py
index f580e9e..cc87d36 100644
--- a/Lib/multiprocessing/managers.py
+++ b/Lib/multiprocessing/managers.py
@@ -23,11 +23,12 @@
 from traceback import format_exc
 
 from . import connection
+from . import context
 from . import pool
 from . import process
-from . import popen
 from . import reduction
 from . import util
+from . import get_context
 
 #
 # Register some things for pickling
@@ -438,7 +439,8 @@
     _registry = {}
     _Server = Server
 
-    def __init__(self, address=None, authkey=None, serializer='pickle'):
+    def __init__(self, address=None, authkey=None, serializer='pickle',
+                 ctx=None):
         if authkey is None:
             authkey = process.current_process().authkey
         self._address = address     # XXX not final address if eg ('', 0)
@@ -447,6 +449,7 @@
         self._state.value = State.INITIAL
         self._serializer = serializer
         self._Listener, self._Client = listener_client[serializer]
+        self._ctx = ctx or get_context()
 
     def get_server(self):
         '''
@@ -478,7 +481,7 @@
         reader, writer = connection.Pipe(duplex=False)
 
         # spawn process which runs a server
-        self._process = process.Process(
+        self._process = self._ctx.Process(
             target=type(self)._run_server,
             args=(self._registry, self._address, self._authkey,
                   self._serializer, writer, initializer, initargs),
@@ -800,7 +803,7 @@
 
     def __reduce__(self):
         kwds = {}
-        if popen.get_spawning_popen() is not None:
+        if context.get_spawning_popen() is not None:
             kwds['authkey'] = self._authkey
 
         if getattr(self, '_isauto', False):
diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py
index 1cecd09..1cb2d95 100644
--- a/Lib/multiprocessing/pool.py
+++ b/Lib/multiprocessing/pool.py
@@ -24,7 +24,7 @@
 # If threading is available then ThreadPool should be provided.  Therefore
 # we avoid top-level imports which are liable to fail on some systems.
 from . import util
-from . import Process, cpu_count, TimeoutError, SimpleQueue
+from . import get_context, cpu_count, TimeoutError
 
 #
 # Constants representing the state of a pool
@@ -137,10 +137,12 @@
     '''
     Class which supports an async version of applying functions to arguments.
     '''
-    Process = Process
+    def Process(self, *args, **kwds):
+        return self._ctx.Process(*args, **kwds)
 
     def __init__(self, processes=None, initializer=None, initargs=(),
-                 maxtasksperchild=None):
+                 maxtasksperchild=None, context=None):
+        self._ctx = context or get_context()
         self._setup_queues()
         self._taskqueue = queue.Queue()
         self._cache = {}
@@ -172,7 +174,8 @@
 
         self._task_handler = threading.Thread(
             target=Pool._handle_tasks,
-            args=(self._taskqueue, self._quick_put, self._outqueue, self._pool)
+            args=(self._taskqueue, self._quick_put, self._outqueue,
+                  self._pool, self._cache)
             )
         self._task_handler.daemon = True
         self._task_handler._state = RUN
@@ -232,8 +235,8 @@
             self._repopulate_pool()
 
     def _setup_queues(self):
-        self._inqueue = SimpleQueue()
-        self._outqueue = SimpleQueue()
+        self._inqueue = self._ctx.SimpleQueue()
+        self._outqueue = self._ctx.SimpleQueue()
         self._quick_put = self._inqueue._writer.send
         self._quick_get = self._outqueue._reader.recv
 
@@ -362,7 +365,7 @@
         util.debug('worker handler exiting')
 
     @staticmethod
-    def _handle_tasks(taskqueue, put, outqueue, pool):
+    def _handle_tasks(taskqueue, put, outqueue, pool, cache):
         thread = threading.current_thread()
 
         for taskseq, set_length in iter(taskqueue.get, None):
@@ -373,9 +376,12 @@
                     break
                 try:
                     put(task)
-                except OSError:
-                    util.debug('could not put task on queue')
-                    break
+                except Exception as e:
+                    job, ind = task[:2]
+                    try:
+                        cache[job]._set(ind, (False, e))
+                    except KeyError:
+                        pass
             else:
                 if set_length:
                     util.debug('doing set_length()')
diff --git a/Lib/multiprocessing/popen.py b/Lib/multiprocessing/popen.py
deleted file mode 100644
index b0c80d5..0000000
--- a/Lib/multiprocessing/popen.py
+++ /dev/null
@@ -1,78 +0,0 @@
-import sys
-import threading
-
-__all__ = ['Popen', 'get_spawning_popen', 'set_spawning_popen',
-           'assert_spawning']
-
-#
-# Check that the current thread is spawning a child process
-#
-
-_tls = threading.local()
-
-def get_spawning_popen():
-    return getattr(_tls, 'spawning_popen', None)
-
-def set_spawning_popen(popen):
-    _tls.spawning_popen = popen
-
-def assert_spawning(obj):
-    if get_spawning_popen() is None:
-        raise RuntimeError(
-            '%s objects should only be shared between processes'
-            ' through inheritance' % type(obj).__name__
-            )
-
-#
-#
-#
-
-_Popen = None
-
-def Popen(process_obj):
-    if _Popen is None:
-        set_start_method()
-    return _Popen(process_obj)
-
-def get_start_method():
-    if _Popen is None:
-        set_start_method()
-    return _Popen.method
-
-def set_start_method(meth=None, *, start_helpers=True):
-    global _Popen
-    try:
-        modname = _method_to_module[meth]
-        __import__(modname)
-    except (KeyError, ImportError):
-        raise ValueError('could not use start method %r' % meth)
-    module = sys.modules[modname]
-    if start_helpers:
-        module.Popen.ensure_helpers_running()
-    _Popen = module.Popen
-
-
-if sys.platform == 'win32':
-
-    _method_to_module = {
-        None: 'multiprocessing.popen_spawn_win32',
-        'spawn': 'multiprocessing.popen_spawn_win32',
-        }
-
-    def get_all_start_methods():
-        return ['spawn']
-
-else:
-    _method_to_module = {
-        None: 'multiprocessing.popen_fork',
-        'fork': 'multiprocessing.popen_fork',
-        'spawn': 'multiprocessing.popen_spawn_posix',
-        'forkserver': 'multiprocessing.popen_forkserver',
-        }
-
-    def get_all_start_methods():
-        from . import reduction
-        if reduction.HAVE_SEND_HANDLE:
-            return ['fork', 'spawn', 'forkserver']
-        else:
-            return ['fork', 'spawn']
diff --git a/Lib/multiprocessing/popen_fork.py b/Lib/multiprocessing/popen_fork.py
index c9f3aae..463cc18 100644
--- a/Lib/multiprocessing/popen_fork.py
+++ b/Lib/multiprocessing/popen_fork.py
@@ -81,7 +81,3 @@
             os.close(child_w)
             util.Finalize(self, os.close, (parent_r,))
             self.sentinel = parent_r
-
-    @staticmethod
-    def ensure_helpers_running():
-        pass
diff --git a/Lib/multiprocessing/popen_forkserver.py b/Lib/multiprocessing/popen_forkserver.py
index f1c4b57..b115f81 100644
--- a/Lib/multiprocessing/popen_forkserver.py
+++ b/Lib/multiprocessing/popen_forkserver.py
@@ -4,8 +4,8 @@
 from . import reduction
 if not reduction.HAVE_SEND_HANDLE:
     raise ImportError('No support for sending fds between processes')
+from . import context
 from . import forkserver
-from . import popen
 from . import popen_fork
 from . import spawn
 from . import util
@@ -42,12 +42,12 @@
     def _launch(self, process_obj):
         prep_data = spawn.get_preparation_data(process_obj._name)
         buf = io.BytesIO()
-        popen.set_spawning_popen(self)
+        context.set_spawning_popen(self)
         try:
             reduction.dump(prep_data, buf)
             reduction.dump(process_obj, buf)
         finally:
-            popen.set_spawning_popen(None)
+            context.set_spawning_popen(None)
 
         self.sentinel, w = forkserver.connect_to_new_process(self._fds)
         util.Finalize(self, os.close, (self.sentinel,))
@@ -67,9 +67,3 @@
                 # The process ended abnormally perhaps because of a signal
                 self.returncode = 255
         return self.returncode
-
-    @staticmethod
-    def ensure_helpers_running():
-        from . import semaphore_tracker
-        semaphore_tracker.ensure_running()
-        forkserver.ensure_running()
diff --git a/Lib/multiprocessing/popen_spawn_posix.py b/Lib/multiprocessing/popen_spawn_posix.py
index 751bf22..8b5dc42 100644
--- a/Lib/multiprocessing/popen_spawn_posix.py
+++ b/Lib/multiprocessing/popen_spawn_posix.py
@@ -2,7 +2,7 @@
 import io
 import os
 
-from . import popen
+from . import context
 from . import popen_fork
 from . import reduction
 from . import spawn
@@ -41,16 +41,16 @@
 
     def _launch(self, process_obj):
         from . import semaphore_tracker
-        tracker_fd = semaphore_tracker._semaphore_tracker_fd
+        tracker_fd = semaphore_tracker.getfd()
         self._fds.append(tracker_fd)
         prep_data = spawn.get_preparation_data(process_obj._name)
         fp = io.BytesIO()
-        popen.set_spawning_popen(self)
+        context.set_spawning_popen(self)
         try:
             reduction.dump(prep_data, fp)
             reduction.dump(process_obj, fp)
         finally:
-            popen.set_spawning_popen(None)
+            context.set_spawning_popen(None)
 
         parent_r = child_w = child_r = parent_w = None
         try:
@@ -70,8 +70,3 @@
             for fd in (child_r, child_w, parent_w):
                 if fd is not None:
                     os.close(fd)
-
-    @staticmethod
-    def ensure_helpers_running():
-        from . import semaphore_tracker
-        semaphore_tracker.ensure_running()
diff --git a/Lib/multiprocessing/popen_spawn_win32.py b/Lib/multiprocessing/popen_spawn_win32.py
index f1e9aae..3b53068 100644
--- a/Lib/multiprocessing/popen_spawn_win32.py
+++ b/Lib/multiprocessing/popen_spawn_win32.py
@@ -4,8 +4,8 @@
 import sys
 import _winapi
 
+from . import context
 from . import spawn
-from . import popen
 from . import reduction
 from . import util
 
@@ -60,15 +60,15 @@
             util.Finalize(self, _winapi.CloseHandle, (self.sentinel,))
 
             # send information to child
-            popen.set_spawning_popen(self)
+            context.set_spawning_popen(self)
             try:
                 reduction.dump(prep_data, to_child)
                 reduction.dump(process_obj, to_child)
             finally:
-                popen.set_spawning_popen(None)
+                context.set_spawning_popen(None)
 
     def duplicate_for_child(self, handle):
-        assert self is popen.get_spawning_popen()
+        assert self is context.get_spawning_popen()
         return reduction.duplicate(handle, self.sentinel)
 
     def wait(self, timeout=None):
@@ -97,7 +97,3 @@
             except OSError:
                 if self.wait(timeout=1.0) is None:
                     raise
-
-    @staticmethod
-    def ensure_helpers_running():
-        pass
diff --git a/Lib/multiprocessing/process.py b/Lib/multiprocessing/process.py
index c1cb36f..cd52736 100644
--- a/Lib/multiprocessing/process.py
+++ b/Lib/multiprocessing/process.py
@@ -7,7 +7,7 @@
 # Licensed to PSF under a Contributor Agreement.
 #
 
-__all__ = ['Process', 'current_process', 'active_children']
+__all__ = ['BaseProcess', 'current_process', 'active_children']
 
 #
 # Imports
@@ -59,13 +59,14 @@
 # The `Process` class
 #
 
-class Process(object):
+class BaseProcess(object):
     '''
     Process objects represent activity that is run in a separate process
 
     The class is analogous to `threading.Thread`
     '''
-    _Popen = None
+    def _Popen(self):
+        raise NotImplementedError
 
     def __init__(self, group=None, target=None, name=None, args=(), kwargs={},
                  *, daemon=None):
@@ -101,11 +102,7 @@
         assert not _current_process._config.get('daemon'), \
                'daemonic processes are not allowed to have children'
         _cleanup()
-        if self._Popen is not None:
-            Popen = self._Popen
-        else:
-            from .popen import Popen
-        self._popen = Popen(self)
+        self._popen = self._Popen(self)
         self._sentinel = self._popen.sentinel
         _children.add(self)
 
@@ -229,10 +226,12 @@
     ##
 
     def _bootstrap(self):
-        from . import util
+        from . import util, context
         global _current_process, _process_counter, _children
 
         try:
+            if self._start_method is not None:
+                context._force_start_method(self._start_method)
             _process_counter = itertools.count(1)
             _children = set()
             if sys.stdin is not None:
@@ -282,7 +281,7 @@
 
 class AuthenticationString(bytes):
     def __reduce__(self):
-        from .popen import get_spawning_popen
+        from .context import get_spawning_popen
         if get_spawning_popen() is None:
             raise TypeError(
                 'Pickling an AuthenticationString object is '
@@ -294,7 +293,7 @@
 # Create object representing the main process
 #
 
-class _MainProcess(Process):
+class _MainProcess(BaseProcess):
 
     def __init__(self):
         self._identity = ()
@@ -302,10 +301,16 @@
         self._parent_pid = None
         self._popen = None
         self._config = {'authkey': AuthenticationString(os.urandom(32)),
-                        'semprefix': 'mp'}
+                        'semprefix': '/mp'}
         # Note that some versions of FreeBSD only allow named
-        # semaphores to have names of up to 14 characters.  Therfore
+        # semaphores to have names of up to 14 characters.  Therefore
         # we choose a short prefix.
+        #
+        # On MacOSX in a sandbox it may be necessary to use a
+        # different prefix -- see #19478.
+        #
+        # Everything in self._config will be inherited by descendant
+        # processes.
 
 
 _current_process = _MainProcess()
diff --git a/Lib/multiprocessing/queues.py b/Lib/multiprocessing/queues.py
index 10e40a5..f650771 100644
--- a/Lib/multiprocessing/queues.py
+++ b/Lib/multiprocessing/queues.py
@@ -22,8 +22,7 @@
 import _multiprocessing
 
 from . import connection
-from . import popen
-from . import synchronize
+from . import context
 
 from .util import debug, info, Finalize, register_after_fork, is_exiting
 from .reduction import ForkingPickler
@@ -34,18 +33,18 @@
 
 class Queue(object):
 
-    def __init__(self, maxsize=0):
+    def __init__(self, maxsize=0, *, ctx):
         if maxsize <= 0:
             maxsize = _multiprocessing.SemLock.SEM_VALUE_MAX
         self._maxsize = maxsize
         self._reader, self._writer = connection.Pipe(duplex=False)
-        self._rlock = synchronize.Lock()
+        self._rlock = ctx.Lock()
         self._opid = os.getpid()
         if sys.platform == 'win32':
             self._wlock = None
         else:
-            self._wlock = synchronize.Lock()
-        self._sem = synchronize.BoundedSemaphore(maxsize)
+            self._wlock = ctx.Lock()
+        self._sem = ctx.BoundedSemaphore(maxsize)
         # For use by concurrent.futures
         self._ignore_epipe = False
 
@@ -55,7 +54,7 @@
             register_after_fork(self, Queue._after_fork)
 
     def __getstate__(self):
-        popen.assert_spawning(self)
+        context.assert_spawning(self)
         return (self._ignore_epipe, self._maxsize, self._reader, self._writer,
                 self._rlock, self._wlock, self._sem, self._opid)
 
@@ -279,10 +278,10 @@
 
 class JoinableQueue(Queue):
 
-    def __init__(self, maxsize=0):
-        Queue.__init__(self, maxsize)
-        self._unfinished_tasks = synchronize.Semaphore(0)
-        self._cond = synchronize.Condition()
+    def __init__(self, maxsize=0, *, ctx):
+        Queue.__init__(self, maxsize, ctx=ctx)
+        self._unfinished_tasks = ctx.Semaphore(0)
+        self._cond = ctx.Condition()
 
     def __getstate__(self):
         return Queue.__getstate__(self) + (self._cond, self._unfinished_tasks)
@@ -332,20 +331,20 @@
 
 class SimpleQueue(object):
 
-    def __init__(self):
+    def __init__(self, *, ctx):
         self._reader, self._writer = connection.Pipe(duplex=False)
-        self._rlock = synchronize.Lock()
+        self._rlock = ctx.Lock()
         self._poll = self._reader.poll
         if sys.platform == 'win32':
             self._wlock = None
         else:
-            self._wlock = synchronize.Lock()
+            self._wlock = ctx.Lock()
 
     def empty(self):
         return not self._poll()
 
     def __getstate__(self):
-        popen.assert_spawning(self)
+        context.assert_spawning(self)
         return (self._reader, self._writer, self._rlock, self._wlock)
 
     def __setstate__(self, state):
diff --git a/Lib/multiprocessing/reduction.py b/Lib/multiprocessing/reduction.py
index 5bbbcf4..01e6de2 100644
--- a/Lib/multiprocessing/reduction.py
+++ b/Lib/multiprocessing/reduction.py
@@ -15,7 +15,7 @@
 import socket
 import sys
 
-from . import popen
+from . import context
 from . import util
 
 __all__ = ['send_handle', 'recv_handle', 'ForkingPickler', 'register', 'dump']
@@ -183,7 +183,7 @@
 
     def DupFd(fd):
         '''Return a wrapper for an fd.'''
-        popen_obj = popen.get_spawning_popen()
+        popen_obj = context.get_spawning_popen()
         if popen_obj is not None:
             return popen_obj.DupFd(popen_obj.duplicate_for_child(fd))
         elif HAVE_SEND_HANDLE:
diff --git a/Lib/multiprocessing/semaphore_tracker.py b/Lib/multiprocessing/semaphore_tracker.py
index 6c9e4a5..ddb2b52 100644
--- a/Lib/multiprocessing/semaphore_tracker.py
+++ b/Lib/multiprocessing/semaphore_tracker.py
@@ -26,60 +26,70 @@
 __all__ = ['ensure_running', 'register', 'unregister']
 
 
-_semaphore_tracker_fd = None
-_lock = threading.Lock()
+class SemaphoreTracker(object):
+
+    def __init__(self):
+        self._lock = threading.Lock()
+        self._fd = None
+
+    def getfd(self):
+        self.ensure_running()
+        return self._fd
+
+    def ensure_running(self):
+        '''Make sure that semaphore tracker process is running.
+
+        This can be run from any process.  Usually a child process will use
+        the semaphore created by its parent.'''
+        with self._lock:
+            if self._fd is not None:
+                return
+            fds_to_pass = []
+            try:
+                fds_to_pass.append(sys.stderr.fileno())
+            except Exception:
+                pass
+            cmd = 'from multiprocessing.semaphore_tracker import main;main(%d)'
+            r, w = os.pipe()
+            try:
+                fds_to_pass.append(r)
+                # process will out live us, so no need to wait on pid
+                exe = spawn.get_executable()
+                args = [exe] + util._args_from_interpreter_flags()
+                args += ['-c', cmd % r]
+                util.spawnv_passfds(exe, args, fds_to_pass)
+            except:
+                os.close(w)
+                raise
+            else:
+                self._fd = w
+            finally:
+                os.close(r)
+
+    def register(self, name):
+        '''Register name of semaphore with semaphore tracker.'''
+        self._send('REGISTER', name)
+
+    def unregister(self, name):
+        '''Unregister name of semaphore with semaphore tracker.'''
+        self._send('UNREGISTER', name)
+
+    def _send(self, cmd, name):
+        self.ensure_running()
+        msg = '{0}:{1}\n'.format(cmd, name).encode('ascii')
+        if len(name) > 512:
+            # posix guarantees that writes to a pipe of less than PIPE_BUF
+            # bytes are atomic, and that PIPE_BUF >= 512
+            raise ValueError('name too long')
+        nbytes = os.write(self._fd, msg)
+        assert nbytes == len(msg)
 
 
-def ensure_running():
-    '''Make sure that semaphore tracker process is running.
-
-    This can be run from any process.  Usually a child process will use
-    the semaphore created by its parent.'''
-    global _semaphore_tracker_fd
-    with _lock:
-        if _semaphore_tracker_fd is not None:
-            return
-        fds_to_pass = []
-        try:
-            fds_to_pass.append(sys.stderr.fileno())
-        except Exception:
-            pass
-        cmd = 'from multiprocessing.semaphore_tracker import main; main(%d)'
-        r, w = os.pipe()
-        try:
-            fds_to_pass.append(r)
-            # process will out live us, so no need to wait on pid
-            exe = spawn.get_executable()
-            args = [exe] + util._args_from_interpreter_flags()
-            args += ['-c', cmd % r]
-            util.spawnv_passfds(exe, args, fds_to_pass)
-        except:
-            os.close(w)
-            raise
-        else:
-            _semaphore_tracker_fd = w
-        finally:
-            os.close(r)
-
-
-def register(name):
-    '''Register name of semaphore with semaphore tracker.'''
-    _send('REGISTER', name)
-
-
-def unregister(name):
-    '''Unregister name of semaphore with semaphore tracker.'''
-    _send('UNREGISTER', name)
-
-
-def _send(cmd, name):
-    msg = '{0}:{1}\n'.format(cmd, name).encode('ascii')
-    if len(name) > 512:
-        # posix guarantees that writes to a pipe of less than PIPE_BUF
-        # bytes are atomic, and that PIPE_BUF >= 512
-        raise ValueError('name too long')
-    nbytes = os.write(_semaphore_tracker_fd, msg)
-    assert nbytes == len(msg)
+_semaphore_tracker = SemaphoreTracker()
+ensure_running = _semaphore_tracker.ensure_running
+register = _semaphore_tracker.register
+unregister = _semaphore_tracker.unregister
+getfd = _semaphore_tracker.getfd
 
 
 def main(fd):
diff --git a/Lib/multiprocessing/sharedctypes.py b/Lib/multiprocessing/sharedctypes.py
index a97dadf..0c17825 100644
--- a/Lib/multiprocessing/sharedctypes.py
+++ b/Lib/multiprocessing/sharedctypes.py
@@ -11,10 +11,10 @@
 import weakref
 
 from . import heap
+from . import get_context
 
-from .synchronize import RLock
+from .context import assert_spawning
 from .reduction import ForkingPickler
-from .popen import assert_spawning
 
 __all__ = ['RawValue', 'RawArray', 'Value', 'Array', 'copy', 'synchronized']
 
@@ -66,7 +66,7 @@
         result.__init__(*size_or_initializer)
         return result
 
-def Value(typecode_or_type, *args, lock=True):
+def Value(typecode_or_type, *args, lock=True, ctx=None):
     '''
     Return a synchronization wrapper for a Value
     '''
@@ -74,12 +74,13 @@
     if lock is False:
         return obj
     if lock in (True, None):
-        lock = RLock()
+        ctx = ctx or get_context()
+        lock = ctx.RLock()
     if not hasattr(lock, 'acquire'):
         raise AttributeError("'%r' has no method 'acquire'" % lock)
-    return synchronized(obj, lock)
+    return synchronized(obj, lock, ctx=ctx)
 
-def Array(typecode_or_type, size_or_initializer, *, lock=True):
+def Array(typecode_or_type, size_or_initializer, *, lock=True, ctx=None):
     '''
     Return a synchronization wrapper for a RawArray
     '''
@@ -87,25 +88,27 @@
     if lock is False:
         return obj
     if lock in (True, None):
-        lock = RLock()
+        ctx = ctx or get_context()
+        lock = ctx.RLock()
     if not hasattr(lock, 'acquire'):
         raise AttributeError("'%r' has no method 'acquire'" % lock)
-    return synchronized(obj, lock)
+    return synchronized(obj, lock, ctx=ctx)
 
 def copy(obj):
     new_obj = _new_value(type(obj))
     ctypes.pointer(new_obj)[0] = obj
     return new_obj
 
-def synchronized(obj, lock=None):
+def synchronized(obj, lock=None, ctx=None):
     assert not isinstance(obj, SynchronizedBase), 'object already synchronized'
+    ctx = ctx or get_context()
 
     if isinstance(obj, ctypes._SimpleCData):
-        return Synchronized(obj, lock)
+        return Synchronized(obj, lock, ctx)
     elif isinstance(obj, ctypes.Array):
         if obj._type_ is ctypes.c_char:
-            return SynchronizedString(obj, lock)
-        return SynchronizedArray(obj, lock)
+            return SynchronizedString(obj, lock, ctx)
+        return SynchronizedArray(obj, lock, ctx)
     else:
         cls = type(obj)
         try:
@@ -115,7 +118,7 @@
             d = dict((name, make_property(name)) for name in names)
             classname = 'Synchronized' + cls.__name__
             scls = class_cache[cls] = type(classname, (SynchronizedBase,), d)
-        return scls(obj, lock)
+        return scls(obj, lock, ctx)
 
 #
 # Functions for pickling/unpickling
@@ -175,9 +178,13 @@
 
 class SynchronizedBase(object):
 
-    def __init__(self, obj, lock=None):
+    def __init__(self, obj, lock=None, ctx=None):
         self._obj = obj
-        self._lock = lock or RLock()
+        if lock:
+            self._lock = lock
+        else:
+            ctx = ctx or get_context(force=True)
+            self._lock = ctx.RLock()
         self.acquire = self._lock.acquire
         self.release = self._lock.release
 
diff --git a/Lib/multiprocessing/spawn.py b/Lib/multiprocessing/spawn.py
index 9c4acee..8167454 100644
--- a/Lib/multiprocessing/spawn.py
+++ b/Lib/multiprocessing/spawn.py
@@ -12,9 +12,9 @@
 import pickle
 import sys
 
+from . import get_start_method, set_start_method
 from . import process
 from . import util
-from . import popen
 
 __all__ = ['_main', 'freeze_support', 'set_executable', 'get_executable',
            'get_preparation_data', 'get_command_line', 'import_main_path']
@@ -91,7 +91,7 @@
         fd = msvcrt.open_osfhandle(new_handle, os.O_RDONLY)
     else:
         from . import semaphore_tracker
-        semaphore_tracker._semaphore_tracker_fd = tracker_fd
+        semaphore_tracker._semaphore_tracker._fd = tracker_fd
         fd = pipe_handle
     exitcode = _main(fd)
     sys.exit(exitcode)
@@ -154,7 +154,7 @@
         sys_argv=sys.argv,
         orig_dir=process.ORIGINAL_DIR,
         dir=os.getcwd(),
-        start_method=popen.get_start_method(),
+        start_method=get_start_method(),
         )
 
     if sys.platform != 'win32' or (not WINEXE and not WINSERVICE):
@@ -204,7 +204,7 @@
         process.ORIGINAL_DIR = data['orig_dir']
 
     if 'start_method' in data:
-        popen.set_start_method(data['start_method'], start_helpers=False)
+        set_start_method(data['start_method'])
 
     if 'main_path' in data:
         import_main_path(data['main_path'])
diff --git a/Lib/multiprocessing/synchronize.py b/Lib/multiprocessing/synchronize.py
index 09736ef..9d8e282 100644
--- a/Lib/multiprocessing/synchronize.py
+++ b/Lib/multiprocessing/synchronize.py
@@ -20,7 +20,7 @@
 
 from time import time as _time
 
-from . import popen
+from . import context
 from . import process
 from . import util
 
@@ -50,14 +50,15 @@
 
     _rand = tempfile._RandomNameSequence()
 
-    def __init__(self, kind, value, maxvalue):
-        unlink_immediately = (sys.platform == 'win32' or
-                              popen.get_start_method() == 'fork')
+    def __init__(self, kind, value, maxvalue, *, ctx):
+        ctx = ctx or get_context()
+        ctx = ctx.get_context()
+        unlink_now = sys.platform == 'win32' or ctx._name == 'fork'
         for i in range(100):
             try:
                 sl = self._semlock = _multiprocessing.SemLock(
                     kind, value, maxvalue, self._make_name(),
-                    unlink_immediately)
+                    unlink_now)
             except FileExistsError:
                 pass
             else:
@@ -99,10 +100,10 @@
         return self._semlock.__exit__(*args)
 
     def __getstate__(self):
-        popen.assert_spawning(self)
+        context.assert_spawning(self)
         sl = self._semlock
         if sys.platform == 'win32':
-            h = popen.get_spawning_popen().duplicate_for_child(sl.handle)
+            h = context.get_spawning_popen().duplicate_for_child(sl.handle)
         else:
             h = sl.handle
         return (h, sl.kind, sl.maxvalue, sl.name)
@@ -114,8 +115,8 @@
 
     @staticmethod
     def _make_name():
-        return '/%s-%s' % (process.current_process()._config['semprefix'],
-                           next(SemLock._rand))
+        return '%s-%s' % (process.current_process()._config['semprefix'],
+                          next(SemLock._rand))
 
 #
 # Semaphore
@@ -123,8 +124,8 @@
 
 class Semaphore(SemLock):
 
-    def __init__(self, value=1):
-        SemLock.__init__(self, SEMAPHORE, value, SEM_VALUE_MAX)
+    def __init__(self, value=1, *, ctx):
+        SemLock.__init__(self, SEMAPHORE, value, SEM_VALUE_MAX, ctx=ctx)
 
     def get_value(self):
         return self._semlock._get_value()
@@ -142,8 +143,8 @@
 
 class BoundedSemaphore(Semaphore):
 
-    def __init__(self, value=1):
-        SemLock.__init__(self, SEMAPHORE, value, value)
+    def __init__(self, value=1, *, ctx):
+        SemLock.__init__(self, SEMAPHORE, value, value, ctx=ctx)
 
     def __repr__(self):
         try:
@@ -159,8 +160,8 @@
 
 class Lock(SemLock):
 
-    def __init__(self):
-        SemLock.__init__(self, SEMAPHORE, 1, 1)
+    def __init__(self, *, ctx):
+        SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx)
 
     def __repr__(self):
         try:
@@ -184,8 +185,8 @@
 
 class RLock(SemLock):
 
-    def __init__(self):
-        SemLock.__init__(self, RECURSIVE_MUTEX, 1, 1)
+    def __init__(self, *, ctx):
+        SemLock.__init__(self, RECURSIVE_MUTEX, 1, 1, ctx=ctx)
 
     def __repr__(self):
         try:
@@ -210,15 +211,15 @@
 
 class Condition(object):
 
-    def __init__(self, lock=None):
-        self._lock = lock or RLock()
-        self._sleeping_count = Semaphore(0)
-        self._woken_count = Semaphore(0)
-        self._wait_semaphore = Semaphore(0)
+    def __init__(self, lock=None, *, ctx):
+        self._lock = lock or ctx.RLock()
+        self._sleeping_count = ctx.Semaphore(0)
+        self._woken_count = ctx.Semaphore(0)
+        self._wait_semaphore = ctx.Semaphore(0)
         self._make_methods()
 
     def __getstate__(self):
-        popen.assert_spawning(self)
+        context.assert_spawning(self)
         return (self._lock, self._sleeping_count,
                 self._woken_count, self._wait_semaphore)
 
@@ -332,9 +333,9 @@
 
 class Event(object):
 
-    def __init__(self):
-        self._cond = Condition(Lock())
-        self._flag = Semaphore(0)
+    def __init__(self, *, ctx):
+        self._cond = ctx.Condition(ctx.Lock())
+        self._flag = ctx.Semaphore(0)
 
     def is_set(self):
         self._cond.acquire()
@@ -383,11 +384,11 @@
 
 class Barrier(threading.Barrier):
 
-    def __init__(self, parties, action=None, timeout=None):
+    def __init__(self, parties, action=None, timeout=None, *, ctx):
         import struct
         from .heap import BufferWrapper
         wrapper = BufferWrapper(struct.calcsize('i') * 2)
-        cond = Condition()
+        cond = ctx.Condition()
         self.__setstate__((parties, action, timeout, cond, wrapper))
         self._state = 0
         self._count = 0
diff --git a/Lib/nntplib.py b/Lib/nntplib.py
index 01d4303..9766be3 100644
--- a/Lib/nntplib.py
+++ b/Lib/nntplib.py
@@ -85,6 +85,13 @@
            "decode_header",
            ]
 
+# maximal line length when calling readline(). This is to prevent
+# reading arbitrary lenght lines. RFC 3977 limits NNTP line length to
+# 512 characters, including CRLF. We have selected 2048 just to be on
+# the safe side.
+_MAXLINE = 2048
+
+
 # Exceptions raised when an error or invalid response is received
 class NNTPError(Exception):
     """Base class for all nntplib exceptions"""
@@ -424,7 +431,9 @@
         """Internal: return one line from the server, stripping _CRLF.
         Raise EOFError if the connection is closed.
         Returns a bytes object."""
-        line = self.file.readline()
+        line = self.file.readline(_MAXLINE +1)
+        if len(line) > _MAXLINE:
+            raise NNTPDataError('line too long')
         if self.debugging > 1:
             print('*get*', repr(line))
         if not line: raise EOFError
diff --git a/Lib/os.py b/Lib/os.py
index 5fde360..e9880a1 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -631,7 +631,7 @@
 
 
 # Change environ to automatically call putenv(), unsetenv if they exist.
-from collections.abc import MutableMapping
+from _collections_abc import MutableMapping
 
 class _Environ(MutableMapping):
     def __init__(self, data, encodekey, decodekey, encodevalue, decodevalue, putenv, unsetenv):
@@ -945,33 +945,6 @@
     __all__.extend(["spawnlp", "spawnlpe"])
 
 
-import copyreg as _copyreg
-
-def _make_stat_result(tup, dict):
-    return stat_result(tup, dict)
-
-def _pickle_stat_result(sr):
-    (type, args) = sr.__reduce__()
-    return (_make_stat_result, args)
-
-try:
-    _copyreg.pickle(stat_result, _pickle_stat_result, _make_stat_result)
-except NameError: # stat_result may not exist
-    pass
-
-def _make_statvfs_result(tup, dict):
-    return statvfs_result(tup, dict)
-
-def _pickle_statvfs_result(sr):
-    (type, args) = sr.__reduce__()
-    return (_make_statvfs_result, args)
-
-try:
-    _copyreg.pickle(statvfs_result, _pickle_statvfs_result,
-                     _make_statvfs_result)
-except NameError: # statvfs_result may not exist
-    pass
-
 # Supply os.popen()
 def popen(cmd, mode="r", buffering=-1):
     if not isinstance(cmd, str):
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 45fe477..2268d30 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -95,18 +95,11 @@
     except OSError:
         return None
     # consumer of this info expects the first line to be 1
-    lineno = 1
-    answer = None
-    while True:
-        line = fp.readline()
-        if line == '':
-            break
-        if cre.match(line):
-            answer = funcname, filename, lineno
-            break
-        lineno += 1
-    fp.close()
-    return answer
+    with fp:
+        for lineno, line in enumerate(fp, start=1):
+            if cre.match(line):
+                return funcname, filename, lineno
+    return None
 
 def getsourcelines(obj):
     lines, lineno = inspect.findsource(obj)
@@ -805,6 +798,8 @@
             cond = None
         try:
             bp = self.get_bpbynumber(args[0].strip())
+        except IndexError:
+            self.error('Breakpoint number expected')
         except ValueError as err:
             self.error(err)
         else:
@@ -832,6 +827,8 @@
             count = 0
         try:
             bp = self.get_bpbynumber(args[0].strip())
+        except IndexError:
+            self.error('Breakpoint number expected')
         except ValueError as err:
             self.error(err)
         else:
@@ -1159,15 +1156,13 @@
             return _rstr('** raised %s **' % err)
 
     def do_p(self, arg):
-        """p(rint) expression
+        """p expression
         Print the value of the expression.
         """
         try:
             self.message(repr(self._getval(arg)))
         except:
             pass
-    # make "print" an alias of "p" since print isn't a Python statement anymore
-    do_print = do_p
 
     def do_pp(self, arg):
         """pp expression
@@ -1388,7 +1383,7 @@
         placed in the .pdbrc file):
 
         # Print instance variables (usage "pi classInst")
-        alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
+        alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k])
         # Print instance variables in self
         alias ps pi self
         """
@@ -1546,7 +1541,7 @@
         'help', 'where', 'down', 'up', 'break', 'tbreak', 'clear', 'disable',
         'enable', 'ignore', 'condition', 'commands', 'step', 'next', 'until',
         'jump', 'return', 'retval', 'run', 'continue', 'list', 'longlist',
-        'args', 'print', 'pp', 'whatis', 'source', 'display', 'undisplay',
+        'args', 'p', 'pp', 'whatis', 'source', 'display', 'undisplay',
         'interact', 'alias', 'unalias', 'debug', 'quit',
     ]
 
diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py
index 4678bb8..fb9e56e 100644
--- a/Lib/pkgutil.py
+++ b/Lib/pkgutil.py
@@ -3,6 +3,7 @@
 from functools import singledispatch as simplegeneric
 import importlib
 import importlib.util
+import importlib.machinery
 import os
 import os.path
 import sys
diff --git a/Lib/platform.py b/Lib/platform.py
index cbbe6d8..c3c4b32 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -1183,6 +1183,14 @@
     '(?: \(([\d\.]+)\))?'
     ' on (.NET [\d\.]+)', re.ASCII)
 
+# IronPython covering 2.6 and 2.7
+_ironpython26_sys_version_parser = re.compile(
+    r'([\d.]+)\s*'
+    '\(IronPython\s*'
+    '[\d.]+\s*'
+    '\(([\d.]+)\) on ([\w.]+ [\d.]+(?: \(\d+-bit\))?)\)'
+)
+
 _pypy_sys_version_parser = re.compile(
     r'([\w.+]+)\s*'
     '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
@@ -1220,19 +1228,24 @@
         return result
 
     # Parse it
-    if sys_version[:10] == 'IronPython':
+    if 'IronPython' in sys_version:
         # IronPython
         name = 'IronPython'
-        match = _ironpython_sys_version_parser.match(sys_version)
+        if sys_version.startswith('IronPython'):
+            match = _ironpython_sys_version_parser.match(sys_version)
+        else:
+            match = _ironpython26_sys_version_parser.match(sys_version)
+
         if match is None:
             raise ValueError(
                 'failed to parse IronPython sys.version: %s' %
                 repr(sys_version))
+
         version, alt_version, compiler = match.groups()
         buildno = ''
         builddate = ''
 
-    elif sys.platform[:4] == 'java':
+    elif sys.platform.startswith('java'):
         # Jython
         name = 'Jython'
         match = _sys_version_parser.match(sys_version)
diff --git a/Lib/poplib.py b/Lib/poplib.py
index be98a7d..d68f169 100644
--- a/Lib/poplib.py
+++ b/Lib/poplib.py
@@ -40,6 +40,12 @@
 LF = b'\n'
 CRLF = CR+LF
 
+# maximal line length when calling readline(). This is to prevent
+# reading arbitrary lenght lines. RFC 1939 limits POP3 line length to
+# 512 characters, including CRLF. We have selected 2048 just to be on
+# the safe side.
+_MAXLINE = 2048
+
 
 class POP3:
 
@@ -118,7 +124,10 @@
     # Raise error_proto('-ERR EOF') if the connection is closed.
 
     def _getline(self):
-        line = self.file.readline()
+        line = self.file.readline(_MAXLINE + 1)
+        if len(line) > _MAXLINE:
+            raise error_proto('line too long')
+
         if self._debugging > 1: print('*get*', repr(line))
         if not line: raise error_proto('-ERR EOF')
         octets = len(line)
diff --git a/Lib/pprint.py b/Lib/pprint.py
index 6155fb2..3be9c36 100644
--- a/Lib/pprint.py
+++ b/Lib/pprint.py
@@ -42,12 +42,6 @@
 __all__ = ["pprint","pformat","isreadable","isrecursive","saferepr",
            "PrettyPrinter"]
 
-# cache these for faster access:
-_commajoin = ", ".join
-_id = id
-_len = len
-_type = type
-
 
 def pprint(object, stream=None, indent=1, width=80, depth=None, *,
            compact=False):
@@ -96,8 +90,8 @@
             rv = NotImplemented
 
         if rv is NotImplemented:
-            rv = (str(_type(self.obj)), _id(self.obj)) < \
-                 (str(_type(other.obj)), _id(other.obj))
+            rv = (str(type(self.obj)), id(self.obj)) < \
+                 (str(type(other.obj)), id(other.obj))
         return rv
 
 def _safe_tuple(t):
@@ -159,16 +153,16 @@
 
     def _format(self, object, stream, indent, allowance, context, level):
         level = level + 1
-        objid = _id(object)
+        objid = id(object)
         if objid in context:
             stream.write(_recursion(object))
             self._recursive = True
             self._readable = False
             return
         rep = self._repr(object, context, level - 1)
-        typ = _type(object)
+        typ = type(object)
         max_width = self._width - 1 - indent - allowance
-        sepLines = _len(rep) > max_width
+        sepLines = len(rep) > max_width
         write = stream.write
 
         if sepLines:
@@ -177,7 +171,7 @@
                 write('{')
                 if self._indent_per_level > 1:
                     write((self._indent_per_level - 1) * ' ')
-                length = _len(object)
+                length = len(object)
                 if length:
                     context[objid] = 1
                     indent = indent + self._indent_per_level
@@ -189,13 +183,13 @@
                     rep = self._repr(key, context, level)
                     write(rep)
                     write(': ')
-                    self._format(ent, stream, indent + _len(rep) + 2,
+                    self._format(ent, stream, indent + len(rep) + 2,
                                   allowance + 1, context, level)
                     if length > 1:
                         for key, ent in items[1:]:
                             rep = self._repr(key, context, level)
                             write(',\n%s%s: ' % (' '*indent, rep))
-                            self._format(ent, stream, indent + _len(rep) + 2,
+                            self._format(ent, stream, indent + len(rep) + 2,
                                           allowance + 1, context, level)
                     indent = indent - self._indent_per_level
                     del context[objid]
@@ -207,7 +201,7 @@
                 (issubclass(typ, set) and r is set.__repr__) or
                 (issubclass(typ, frozenset) and r is frozenset.__repr__)
                ):
-                length = _len(object)
+                length = len(object)
                 if issubclass(typ, list):
                     write('[')
                     endchar = ']'
@@ -225,7 +219,7 @@
                         write(typ.__name__)
                         write('({')
                         endchar = '})'
-                        indent += _len(typ.__name__) + 1
+                        indent += len(typ.__name__) + 1
                     object = sorted(object, key=_safe_key)
                 if self._indent_per_level > 1:
                     write((self._indent_per_level - 1) * ' ')
@@ -240,7 +234,7 @@
                 write(endchar)
                 return
 
-            if issubclass(typ, str) and _len(object) > 0 and r is str.__repr__:
+            if issubclass(typ, str) and len(object) > 0 and r is str.__repr__:
                 def _str_parts(s):
                     """
                     Return a list of string literals comprising the repr()
@@ -249,16 +243,16 @@
                     lines = s.splitlines(True)
                     for i, line in enumerate(lines):
                         rep = repr(line)
-                        if _len(rep) <= max_width:
+                        if len(rep) <= max_width:
                             yield rep
                         else:
                             # A list of alternating (non-space, space) strings
                             parts = re.split(r'(\s+)', line) + ['']
                             current = ''
-                            for i in range(0, _len(parts), 2):
+                            for i in range(0, len(parts), 2):
                                 part = parts[i] + parts[i+1]
                                 candidate = current + part
-                                if _len(repr(candidate)) > max_width:
+                                if len(repr(candidate)) > max_width:
                                     if current:
                                         yield repr(current)
                                     current = part
@@ -281,7 +275,7 @@
         for ent in items:
             if self._compact:
                 rep = self._repr(ent, context, level)
-                w = _len(rep) + 2
+                w = len(rep) + 2
                 if width < w:
                     width = max_width
                     if delim:
@@ -316,7 +310,7 @@
 # Return triple (repr_string, isreadable, isrecursive).
 
 def _safe_repr(object, context, maxlevels, level):
-    typ = _type(object)
+    typ = type(object)
     if typ is str:
         if 'locale' not in _sys.modules:
             return repr(object), True, False
@@ -340,7 +334,7 @@
     if issubclass(typ, dict) and r is dict.__repr__:
         if not object:
             return "{}", True, False
-        objid = _id(object)
+        objid = id(object)
         if maxlevels and level >= maxlevels:
             return "{...}", False, objid in context
         if objid in context:
@@ -361,7 +355,7 @@
             if krecur or vrecur:
                 recursive = True
         del context[objid]
-        return "{%s}" % _commajoin(components), readable, recursive
+        return "{%s}" % ", ".join(components), readable, recursive
 
     if (issubclass(typ, list) and r is list.__repr__) or \
        (issubclass(typ, tuple) and r is tuple.__repr__):
@@ -369,13 +363,13 @@
             if not object:
                 return "[]", True, False
             format = "[%s]"
-        elif _len(object) == 1:
+        elif len(object) == 1:
             format = "(%s,)"
         else:
             if not object:
                 return "()", True, False
             format = "(%s)"
-        objid = _id(object)
+        objid = id(object)
         if maxlevels and level >= maxlevels:
             return format % "...", False, objid in context
         if objid in context:
@@ -394,7 +388,7 @@
             if orecur:
                 recursive = True
         del context[objid]
-        return format % _commajoin(components), readable, recursive
+        return format % ", ".join(components), readable, recursive
 
     rep = repr(object)
     return rep, (rep and not rep.startswith('<')), False
@@ -402,7 +396,7 @@
 
 def _recursion(object):
     return ("<Recursion on %s with id=%s>"
-            % (_type(object).__name__, _id(object)))
+            % (type(object).__name__, id(object)))
 
 
 def _perfcheck(object=None):
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index bc64407..d0240ff 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1235,8 +1235,9 @@
                         doc = getdoc(value)
                     else:
                         doc = None
-                    push(self.docother(getattr(object, name),
-                                       name, mod, maxlen=70, doc=doc) + '\n')
+                    push(self.docother(
+                        getattr(object, name, None) or homecls.__dict__[name],
+                        name, mod, maxlen=70, doc=doc) + '\n')
             return attrs
 
         attrs = [(name, kind, cls, value)
@@ -1258,7 +1259,6 @@
             else:
                 tag = "inherited from %s" % classname(thisclass,
                                                       object.__module__)
-
             # Sort attrs by name.
             attrs.sort()
 
@@ -1273,6 +1273,7 @@
                                      lambda t: t[1] == 'data descriptor')
             attrs = spilldata("Data and other attributes %s:\n" % tag, attrs,
                               lambda t: t[1] == 'data')
+
             assert attrs == []
             attrs = inherited
 
@@ -1915,11 +1916,10 @@
         if more_xrefs:
             xrefs = (xrefs or '') + ' ' + more_xrefs
         if xrefs:
-            import formatter
-            buffer = io.StringIO()
-            formatter.DumbWriter(buffer).send_flowing_data(
-                'Related help topics: ' + ', '.join(xrefs.split()) + '\n')
-            self.output.write('\n%s\n' % buffer.getvalue())
+            import textwrap
+            text = 'Related help topics: ' + ', '.join(xrefs.split()) + '\n'
+            wrapped_text = textwrap.wrap(text, 72)
+            self.output.write('\n%s\n' % ''.join(wrapped_text))
 
     def _gettopic(self, topic, more_xrefs=''):
         """Return unbuffered tuple of (topic, xrefs).
diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py
index c6793bf..ebefd27 100644
--- a/Lib/pydoc_data/topics.py
+++ b/Lib/pydoc_data/topics.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Autogenerated by Sphinx on Sat Sep 28 23:37:53 2013
+# Autogenerated by Sphinx on Sun Oct 20 01:58:36 2013
 topics = {'assert': '\nThe ``assert`` statement\n************************\n\nAssert statements are a convenient way to insert debugging assertions\ninto a program:\n\n   assert_stmt ::= "assert" expression ["," expression]\n\nThe simple form, ``assert expression``, is equivalent to\n\n   if __debug__:\n      if not expression: raise AssertionError\n\nThe extended form, ``assert expression1, expression2``, is equivalent\nto\n\n   if __debug__:\n      if not expression1: raise AssertionError(expression2)\n\nThese equivalences assume that ``__debug__`` and ``AssertionError``\nrefer to the built-in variables with those names.  In the current\nimplementation, the built-in variable ``__debug__`` is ``True`` under\nnormal circumstances, ``False`` when optimization is requested\n(command line option -O).  The current code generator emits no code\nfor an assert statement when optimization is requested at compile\ntime.  Note that it is unnecessary to include the source code for the\nexpression that failed in the error message; it will be displayed as\npart of the stack trace.\n\nAssignments to ``__debug__`` are illegal.  The value for the built-in\nvariable is determined when the interpreter starts.\n',
  'assignment': '\nAssignment statements\n*********************\n\nAssignment statements are used to (re)bind names to values and to\nmodify attributes or items of mutable objects:\n\n   assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)\n   target_list     ::= target ("," target)* [","]\n   target          ::= identifier\n              | "(" target_list ")"\n              | "[" target_list "]"\n              | attributeref\n              | subscription\n              | slicing\n              | "*" target\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn assignment statement evaluates the expression list (remember that\nthis can be a single expression or a comma-separated list, the latter\nyielding a tuple) and assigns the single resulting object to each of\nthe target lists, from left to right.\n\nAssignment is defined recursively depending on the form of the target\n(list). When a target is part of a mutable object (an attribute\nreference, subscription or slicing), the mutable object must\nultimately perform the assignment and decide about its validity, and\nmay raise an exception if the assignment is unacceptable.  The rules\nobserved by various types and the exceptions raised are given with the\ndefinition of the object types (see section *The standard type\nhierarchy*).\n\nAssignment of an object to a target list, optionally enclosed in\nparentheses or square brackets, is recursively defined as follows.\n\n* If the target list is a single target: The object is assigned to\n  that target.\n\n* If the target list is a comma-separated list of targets: The object\n  must be an iterable with the same number of items as there are\n  targets in the target list, and the items are assigned, from left to\n  right, to the corresponding targets.\n\n  * If the target list contains one target prefixed with an asterisk,\n    called a "starred" target: The object must be a sequence with at\n    least as many items as there are targets in the target list, minus\n    one.  The first items of the sequence are assigned, from left to\n    right, to the targets before the starred target.  The final items\n    of the sequence are assigned to the targets after the starred\n    target.  A list of the remaining items in the sequence is then\n    assigned to the starred target (the list can be empty).\n\n  * Else: The object must be a sequence with the same number of items\n    as there are targets in the target list, and the items are\n    assigned, from left to right, to the corresponding targets.\n\nAssignment of an object to a single target is recursively defined as\nfollows.\n\n* If the target is an identifier (name):\n\n  * If the name does not occur in a ``global`` or ``nonlocal``\n    statement in the current code block: the name is bound to the\n    object in the current local namespace.\n\n  * Otherwise: the name is bound to the object in the global namespace\n    or the outer namespace determined by ``nonlocal``, respectively.\n\n  The name is rebound if it was already bound.  This may cause the\n  reference count for the object previously bound to the name to reach\n  zero, causing the object to be deallocated and its destructor (if it\n  has one) to be called.\n\n* If the target is a target list enclosed in parentheses or in square\n  brackets: The object must be an iterable with the same number of\n  items as there are targets in the target list, and its items are\n  assigned, from left to right, to the corresponding targets.\n\n* If the target is an attribute reference: The primary expression in\n  the reference is evaluated.  It should yield an object with\n  assignable attributes; if this is not the case, ``TypeError`` is\n  raised.  That object is then asked to assign the assigned object to\n  the given attribute; if it cannot perform the assignment, it raises\n  an exception (usually but not necessarily ``AttributeError``).\n\n  Note: If the object is a class instance and the attribute reference\n  occurs on both sides of the assignment operator, the RHS expression,\n  ``a.x`` can access either an instance attribute or (if no instance\n  attribute exists) a class attribute.  The LHS target ``a.x`` is\n  always set as an instance attribute, creating it if necessary.\n  Thus, the two occurrences of ``a.x`` do not necessarily refer to the\n  same attribute: if the RHS expression refers to a class attribute,\n  the LHS creates a new instance attribute as the target of the\n  assignment:\n\n     class Cls:\n         x = 3             # class variable\n     inst = Cls()\n     inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3\n\n  This description does not necessarily apply to descriptor\n  attributes, such as properties created with ``property()``.\n\n* If the target is a subscription: The primary expression in the\n  reference is evaluated.  It should yield either a mutable sequence\n  object (such as a list) or a mapping object (such as a dictionary).\n  Next, the subscript expression is evaluated.\n\n  If the primary is a mutable sequence object (such as a list), the\n  subscript must yield an integer.  If it is negative, the sequence\'s\n  length is added to it.  The resulting value must be a nonnegative\n  integer less than the sequence\'s length, and the sequence is asked\n  to assign the assigned object to its item with that index.  If the\n  index is out of range, ``IndexError`` is raised (assignment to a\n  subscripted sequence cannot add new items to a list).\n\n  If the primary is a mapping object (such as a dictionary), the\n  subscript must have a type compatible with the mapping\'s key type,\n  and the mapping is then asked to create a key/datum pair which maps\n  the subscript to the assigned object.  This can either replace an\n  existing key/value pair with the same key value, or insert a new\n  key/value pair (if no key with the same value existed).\n\n  For user-defined objects, the ``__setitem__()`` method is called\n  with appropriate arguments.\n\n* If the target is a slicing: The primary expression in the reference\n  is evaluated.  It should yield a mutable sequence object (such as a\n  list).  The assigned object should be a sequence object of the same\n  type.  Next, the lower and upper bound expressions are evaluated,\n  insofar they are present; defaults are zero and the sequence\'s\n  length.  The bounds should evaluate to integers. If either bound is\n  negative, the sequence\'s length is added to it.  The resulting\n  bounds are clipped to lie between zero and the sequence\'s length,\n  inclusive.  Finally, the sequence object is asked to replace the\n  slice with the items of the assigned sequence.  The length of the\n  slice may be different from the length of the assigned sequence,\n  thus changing the length of the target sequence, if the object\n  allows it.\n\n**CPython implementation detail:** In the current implementation, the\nsyntax for targets is taken to be the same as for expressions, and\ninvalid syntax is rejected during the code generation phase, causing\nless detailed error messages.\n\nWARNING: Although the definition of assignment implies that overlaps\nbetween the left-hand side and the right-hand side are \'safe\' (for\nexample ``a, b = b, a`` swaps two variables), overlaps *within* the\ncollection of assigned-to variables are not safe!  For instance, the\nfollowing program prints ``[0, 2]``:\n\n   x = [0, 1]\n   i = 0\n   i, x[i] = 1, 2\n   print(x)\n\nSee also:\n\n   **PEP 3132** - Extended Iterable Unpacking\n      The specification for the ``*target`` feature.\n\n\nAugmented assignment statements\n===============================\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n   augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n   augtarget                 ::= identifier | attributeref | subscription | slicing\n   augop                     ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n             | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n',
  'atom-identifiers': '\nIdentifiers (Names)\n*******************\n\nAn identifier occurring as an atom is a name.  See section\n*Identifiers and keywords* for lexical definition and section *Naming\nand binding* for documentation of naming and binding.\n\nWhen the name is bound to an object, evaluation of the atom yields\nthat object. When a name is not bound, an attempt to evaluate it\nraises a ``NameError`` exception.\n\n**Private name mangling:** When an identifier that textually occurs in\na class definition begins with two or more underscore characters and\ndoes not end in two or more underscores, it is considered a *private\nname* of that class. Private names are transformed to a longer form\nbefore code is generated for them.  The transformation inserts the\nclass name, with leading underscores removed and a single underscore\ninserted, in front of the name.  For example, the identifier\n``__spam`` occurring in a class named ``Ham`` will be transformed to\n``_Ham__spam``.  This transformation is independent of the syntactical\ncontext in which the identifier is used.  If the transformed name is\nextremely long (longer than 255 characters), implementation defined\ntruncation may happen. If the class name consists only of underscores,\nno transformation is done.\n',
@@ -7,7 +7,7 @@
  'attribute-access': '\nCustomizing attribute access\n****************************\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of ``x.name``)\nfor class instances.\n\nobject.__getattr__(self, name)\n\n   Called when an attribute lookup has not found the attribute in the\n   usual places (i.e. it is not an instance attribute nor is it found\n   in the class tree for ``self``).  ``name`` is the attribute name.\n   This method should return the (computed) attribute value or raise\n   an ``AttributeError`` exception.\n\n   Note that if the attribute is found through the normal mechanism,\n   ``__getattr__()`` is not called.  (This is an intentional asymmetry\n   between ``__getattr__()`` and ``__setattr__()``.) This is done both\n   for efficiency reasons and because otherwise ``__getattr__()``\n   would have no way to access other attributes of the instance.  Note\n   that at least for instance variables, you can fake total control by\n   not inserting any values in the instance attribute dictionary (but\n   instead inserting them in another object).  See the\n   ``__getattribute__()`` method below for a way to actually get total\n   control over attribute access.\n\nobject.__getattribute__(self, name)\n\n   Called unconditionally to implement attribute accesses for\n   instances of the class. If the class also defines\n   ``__getattr__()``, the latter will not be called unless\n   ``__getattribute__()`` either calls it explicitly or raises an\n   ``AttributeError``. This method should return the (computed)\n   attribute value or raise an ``AttributeError`` exception. In order\n   to avoid infinite recursion in this method, its implementation\n   should always call the base class method with the same name to\n   access any attributes it needs, for example,\n   ``object.__getattribute__(self, name)``.\n\n   Note: This method may still be bypassed when looking up special methods\n     as the result of implicit invocation via language syntax or\n     built-in functions. See *Special method lookup*.\n\nobject.__setattr__(self, name, value)\n\n   Called when an attribute assignment is attempted.  This is called\n   instead of the normal mechanism (i.e. store the value in the\n   instance dictionary). *name* is the attribute name, *value* is the\n   value to be assigned to it.\n\n   If ``__setattr__()`` wants to assign to an instance attribute, it\n   should call the base class method with the same name, for example,\n   ``object.__setattr__(self, name, value)``.\n\nobject.__delattr__(self, name)\n\n   Like ``__setattr__()`` but for attribute deletion instead of\n   assignment.  This should only be implemented if ``del obj.name`` is\n   meaningful for the object.\n\nobject.__dir__(self)\n\n   Called when ``dir()`` is called on the object. A sequence must be\n   returned. ``dir()`` converts the returned sequence to a list and\n   sorts it.\n\n\nImplementing Descriptors\n========================\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents).  In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' ``__dict__``.\n\nobject.__get__(self, instance, owner)\n\n   Called to get the attribute of the owner class (class attribute\n   access) or of an instance of that class (instance attribute\n   access). *owner* is always the owner class, while *instance* is the\n   instance that the attribute was accessed through, or ``None`` when\n   the attribute is accessed through the *owner*.  This method should\n   return the (computed) attribute value or raise an\n   ``AttributeError`` exception.\n\nobject.__set__(self, instance, value)\n\n   Called to set the attribute on an instance *instance* of the owner\n   class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n   Called to delete the attribute on an instance *instance* of the\n   owner class.\n\n\nInvoking Descriptors\n====================\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol:  ``__get__()``, ``__set__()``, and\n``__delete__()``. If any of those methods are defined for an object,\nit is said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, ``a.x`` has a\nlookup chain starting with ``a.__dict__[\'x\']``, then\n``type(a).__dict__[\'x\']``, and continuing through the base classes of\n``type(a)`` excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead.  Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called.\n\nThe starting point for descriptor invocation is a binding, ``a.x``.\nHow the arguments are assembled depends on ``a``:\n\nDirect Call\n   The simplest and least common call is when user code directly\n   invokes a descriptor method:    ``x.__get__(a)``.\n\nInstance Binding\n   If binding to an object instance, ``a.x`` is transformed into the\n   call: ``type(a).__dict__[\'x\'].__get__(a, type(a))``.\n\nClass Binding\n   If binding to a class, ``A.x`` is transformed into the call:\n   ``A.__dict__[\'x\'].__get__(None, A)``.\n\nSuper Binding\n   If ``a`` is an instance of ``super``, then the binding ``super(B,\n   obj).m()`` searches ``obj.__class__.__mro__`` for the base class\n   ``A`` immediately preceding ``B`` and then invokes the descriptor\n   with the call: ``A.__dict__[\'m\'].__get__(obj, obj.__class__)``.\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined.  A descriptor can define\nany combination of ``__get__()``, ``__set__()`` and ``__delete__()``.\nIf it does not define ``__get__()``, then accessing the attribute will\nreturn the descriptor object itself unless there is a value in the\nobject\'s instance dictionary.  If the descriptor defines ``__set__()``\nand/or ``__delete__()``, it is a data descriptor; if it defines\nneither, it is a non-data descriptor.  Normally, data descriptors\ndefine both ``__get__()`` and ``__set__()``, while non-data\ndescriptors have just the ``__get__()`` method.  Data descriptors with\n``__set__()`` and ``__get__()`` defined always override a redefinition\nin an instance dictionary.  In contrast, non-data descriptors can be\noverridden by instances.\n\nPython methods (including ``staticmethod()`` and ``classmethod()``)\nare implemented as non-data descriptors.  Accordingly, instances can\nredefine and override methods.  This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe ``property()`` function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n=========\n\nBy default, instances of classes have a dictionary for attribute\nstorage.  This wastes space for objects having very few instance\nvariables.  The space consumption can become acute when creating large\nnumbers of instances.\n\nThe default can be overridden by defining *__slots__* in a class\ndefinition. The *__slots__* declaration takes a sequence of instance\nvariables and reserves just enough space in each instance to hold a\nvalue for each variable.  Space is saved because *__dict__* is not\ncreated for each instance.\n\nobject.__slots__\n\n   This class variable can be assigned a string, iterable, or sequence\n   of strings with variable names used by instances.  If defined in a\n   class, *__slots__* reserves space for the declared variables and\n   prevents the automatic creation of *__dict__* and *__weakref__* for\n   each instance.\n\n\nNotes on using *__slots__*\n--------------------------\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n  attribute of that class will always be accessible, so a *__slots__*\n  definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n  variables not listed in the *__slots__* definition.  Attempts to\n  assign to an unlisted variable name raises ``AttributeError``. If\n  dynamic assignment of new variables is desired, then add\n  ``\'__dict__\'`` to the sequence of strings in the *__slots__*\n  declaration.\n\n* Without a *__weakref__* variable for each instance, classes defining\n  *__slots__* do not support weak references to its instances. If weak\n  reference support is needed, then add ``\'__weakref__\'`` to the\n  sequence of strings in the *__slots__* declaration.\n\n* *__slots__* are implemented at the class level by creating\n  descriptors (*Implementing Descriptors*) for each variable name.  As\n  a result, class attributes cannot be used to set default values for\n  instance variables defined by *__slots__*; otherwise, the class\n  attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n  where it is defined.  As a result, subclasses will have a *__dict__*\n  unless they also define *__slots__* (which must only contain names\n  of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the instance\n  variable defined by the base class slot is inaccessible (except by\n  retrieving its descriptor directly from the base class). This\n  renders the meaning of the program undefined.  In the future, a\n  check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n  "variable-length" built-in types such as ``int``, ``str`` and\n  ``tuple``.\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\n  also be used; however, in the future, special meaning may be\n  assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n  *__slots__*.\n',
  'attribute-references': '\nAttribute references\n********************\n\nAn attribute reference is a primary followed by a period and a name:\n\n   attributeref ::= primary "." identifier\n\nThe primary must evaluate to an object of a type that supports\nattribute references, which most objects do.  This object is then\nasked to produce the attribute whose name is the identifier (which can\nbe customized by overriding the ``__getattr__()`` method).  If this\nattribute is not available, the exception ``AttributeError`` is\nraised.  Otherwise, the type and value of the object produced is\ndetermined by the object.  Multiple evaluations of the same attribute\nreference may yield different objects.\n',
  'augassign': '\nAugmented assignment statements\n*******************************\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n   augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n   augtarget                 ::= identifier | attributeref | subscription | slicing\n   augop                     ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n             | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n',
- 'binary': '\nBinary arithmetic operations\n****************************\n\nThe binary arithmetic operations have the conventional priority\nlevels.  Note that some of these operations also apply to certain non-\nnumeric types.  Apart from the power operator, there are only two\nlevels, one for multiplicative operators and one for additive\noperators:\n\n   m_expr ::= u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" u_expr\n              | m_expr "%" u_expr\n   a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr\n\nThe ``*`` (multiplication) operator yields the product of its\narguments.  The arguments must either both be numbers, or one argument\nmust be an integer and the other must be a sequence. In the former\ncase, the numbers are converted to a common type and then multiplied\ntogether.  In the latter case, sequence repetition is performed; a\nnegative repetition factor yields an empty sequence.\n\nThe ``/`` (division) and ``//`` (floor division) operators yield the\nquotient of their arguments.  The numeric arguments are first\nconverted to a common type. Integer division yields a float, while\nfloor division of integers results in an integer; the result is that\nof mathematical division with the \'floor\' function applied to the\nresult.  Division by zero raises the ``ZeroDivisionError`` exception.\n\nThe ``%`` (modulo) operator yields the remainder from the division of\nthe first argument by the second.  The numeric arguments are first\nconverted to a common type.  A zero right argument raises the\n``ZeroDivisionError`` exception.  The arguments may be floating point\nnumbers, e.g., ``3.14%0.7`` equals ``0.34`` (since ``3.14`` equals\n``4*0.7 + 0.34``.)  The modulo operator always yields a result with\nthe same sign as its second operand (or zero); the absolute value of\nthe result is strictly smaller than the absolute value of the second\noperand [1].\n\nThe floor division and modulo operators are connected by the following\nidentity: ``x == (x//y)*y + (x%y)``.  Floor division and modulo are\nalso connected with the built-in function ``divmod()``: ``divmod(x, y)\n== (x//y, x%y)``. [2].\n\nIn addition to performing the modulo operation on numbers, the ``%``\noperator is also overloaded by string objects to perform old-style\nstring formatting (also known as interpolation).  The syntax for\nstring formatting is described in the Python Library Reference,\nsection *printf-style String Formatting*.\n\nThe floor division operator, the modulo operator, and the ``divmod()``\nfunction are not defined for complex numbers.  Instead, convert to a\nfloating point number using the ``abs()`` function if appropriate.\n\nThe ``+`` (addition) operator yields the sum of its arguments.  The\narguments must either both be numbers or both sequences of the same\ntype.  In the former case, the numbers are converted to a common type\nand then added together.  In the latter case, the sequences are\nconcatenated.\n\nThe ``-`` (subtraction) operator yields the difference of its\narguments.  The numeric arguments are first converted to a common\ntype.\n',
+ 'binary': '\nBinary arithmetic operations\n****************************\n\nThe binary arithmetic operations have the conventional priority\nlevels.  Note that some of these operations also apply to certain non-\nnumeric types.  Apart from the power operator, there are only two\nlevels, one for multiplicative operators and one for additive\noperators:\n\n   m_expr ::= u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" u_expr\n              | m_expr "%" u_expr\n   a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr\n\nThe ``*`` (multiplication) operator yields the product of its\narguments.  The arguments must either both be numbers, or one argument\nmust be an integer and the other must be a sequence. In the former\ncase, the numbers are converted to a common type and then multiplied\ntogether.  In the latter case, sequence repetition is performed; a\nnegative repetition factor yields an empty sequence.\n\nThe ``/`` (division) and ``//`` (floor division) operators yield the\nquotient of their arguments.  The numeric arguments are first\nconverted to a common type. Division of integers yields a float, while\nfloor division of integers results in an integer; the result is that\nof mathematical division with the \'floor\' function applied to the\nresult.  Division by zero raises the ``ZeroDivisionError`` exception.\n\nThe ``%`` (modulo) operator yields the remainder from the division of\nthe first argument by the second.  The numeric arguments are first\nconverted to a common type.  A zero right argument raises the\n``ZeroDivisionError`` exception.  The arguments may be floating point\nnumbers, e.g., ``3.14%0.7`` equals ``0.34`` (since ``3.14`` equals\n``4*0.7 + 0.34``.)  The modulo operator always yields a result with\nthe same sign as its second operand (or zero); the absolute value of\nthe result is strictly smaller than the absolute value of the second\noperand [1].\n\nThe floor division and modulo operators are connected by the following\nidentity: ``x == (x//y)*y + (x%y)``.  Floor division and modulo are\nalso connected with the built-in function ``divmod()``: ``divmod(x, y)\n== (x//y, x%y)``. [2].\n\nIn addition to performing the modulo operation on numbers, the ``%``\noperator is also overloaded by string objects to perform old-style\nstring formatting (also known as interpolation).  The syntax for\nstring formatting is described in the Python Library Reference,\nsection *printf-style String Formatting*.\n\nThe floor division operator, the modulo operator, and the ``divmod()``\nfunction are not defined for complex numbers.  Instead, convert to a\nfloating point number using the ``abs()`` function if appropriate.\n\nThe ``+`` (addition) operator yields the sum of its arguments.  The\narguments must either both be numbers or both sequences of the same\ntype.  In the former case, the numbers are converted to a common type\nand then added together.  In the latter case, the sequences are\nconcatenated.\n\nThe ``-`` (subtraction) operator yields the difference of its\narguments.  The numeric arguments are first converted to a common\ntype.\n',
  'bitwise': '\nBinary bitwise operations\n*************************\n\nEach of the three bitwise operations has a different priority level:\n\n   and_expr ::= shift_expr | and_expr "&" shift_expr\n   xor_expr ::= and_expr | xor_expr "^" and_expr\n   or_expr  ::= xor_expr | or_expr "|" xor_expr\n\nThe ``&`` operator yields the bitwise AND of its arguments, which must\nbe integers.\n\nThe ``^`` operator yields the bitwise XOR (exclusive OR) of its\narguments, which must be integers.\n\nThe ``|`` operator yields the bitwise (inclusive) OR of its arguments,\nwhich must be integers.\n',
  'bltin-code-objects': '\nCode Objects\n************\n\nCode objects are used by the implementation to represent "pseudo-\ncompiled" executable Python code such as a function body. They differ\nfrom function objects because they don\'t contain a reference to their\nglobal execution environment.  Code objects are returned by the built-\nin ``compile()`` function and can be extracted from function objects\nthrough their ``__code__`` attribute. See also the ``code`` module.\n\nA code object can be executed or evaluated by passing it (instead of a\nsource string) to the ``exec()`` or ``eval()``  built-in functions.\n\nSee *The standard type hierarchy* for more information.\n',
  'bltin-ellipsis-object': '\nThe Ellipsis Object\n*******************\n\nThis object is commonly used by slicing (see *Slicings*).  It supports\nno special operations.  There is exactly one ellipsis object, named\n``Ellipsis`` (a built-in name).  ``type(Ellipsis)()`` produces the\n``Ellipsis`` singleton.\n\nIt is written as ``Ellipsis`` or ``...``.\n',
@@ -19,12 +19,12 @@
  'calls': '\nCalls\n*****\n\nA call calls a callable object (e.g., a *function*) with a possibly\nempty series of *arguments*:\n\n   call                 ::= primary "(" [argument_list [","] | comprehension] ")"\n   argument_list        ::= positional_arguments ["," keyword_arguments]\n                       ["," "*" expression] ["," keyword_arguments]\n                       ["," "**" expression]\n                     | keyword_arguments ["," "*" expression]\n                       ["," keyword_arguments] ["," "**" expression]\n                     | "*" expression ["," keyword_arguments] ["," "**" expression]\n                     | "**" expression\n   positional_arguments ::= expression ("," expression)*\n   keyword_arguments    ::= keyword_item ("," keyword_item)*\n   keyword_item         ::= identifier "=" expression\n\nA trailing comma may be present after the positional and keyword\narguments but does not affect the semantics.\n\nThe primary must evaluate to a callable object (user-defined\nfunctions, built-in functions, methods of built-in objects, class\nobjects, methods of class instances, and all objects having a\n``__call__()`` method are callable).  All argument expressions are\nevaluated before the call is attempted.  Please refer to section\n*Function definitions* for the syntax of formal *parameter* lists.\n\nIf keyword arguments are present, they are first converted to\npositional arguments, as follows.  First, a list of unfilled slots is\ncreated for the formal parameters.  If there are N positional\narguments, they are placed in the first N slots.  Next, for each\nkeyword argument, the identifier is used to determine the\ncorresponding slot (if the identifier is the same as the first formal\nparameter name, the first slot is used, and so on).  If the slot is\nalready filled, a ``TypeError`` exception is raised. Otherwise, the\nvalue of the argument is placed in the slot, filling it (even if the\nexpression is ``None``, it fills the slot).  When all arguments have\nbeen processed, the slots that are still unfilled are filled with the\ncorresponding default value from the function definition.  (Default\nvalues are calculated, once, when the function is defined; thus, a\nmutable object such as a list or dictionary used as default value will\nbe shared by all calls that don\'t specify an argument value for the\ncorresponding slot; this should usually be avoided.)  If there are any\nunfilled slots for which no default value is specified, a\n``TypeError`` exception is raised.  Otherwise, the list of filled\nslots is used as the argument list for the call.\n\n**CPython implementation detail:** An implementation may provide\nbuilt-in functions whose positional parameters do not have names, even\nif they are \'named\' for the purpose of documentation, and which\ntherefore cannot be supplied by keyword.  In CPython, this is the case\nfor functions implemented in C that use ``PyArg_ParseTuple()`` to\nparse their arguments.\n\nIf there are more positional arguments than there are formal parameter\nslots, a ``TypeError`` exception is raised, unless a formal parameter\nusing the syntax ``*identifier`` is present; in this case, that formal\nparameter receives a tuple containing the excess positional arguments\n(or an empty tuple if there were no excess positional arguments).\n\nIf any keyword argument does not correspond to a formal parameter\nname, a ``TypeError`` exception is raised, unless a formal parameter\nusing the syntax ``**identifier`` is present; in this case, that\nformal parameter receives a dictionary containing the excess keyword\narguments (using the keywords as keys and the argument values as\ncorresponding values), or a (new) empty dictionary if there were no\nexcess keyword arguments.\n\nIf the syntax ``*expression`` appears in the function call,\n``expression`` must evaluate to an iterable.  Elements from this\niterable are treated as if they were additional positional arguments;\nif there are positional arguments *x1*, ..., *xN*, and ``expression``\nevaluates to a sequence *y1*, ..., *yM*, this is equivalent to a call\nwith M+N positional arguments *x1*, ..., *xN*, *y1*, ..., *yM*.\n\nA consequence of this is that although the ``*expression`` syntax may\nappear *after* some keyword arguments, it is processed *before* the\nkeyword arguments (and the ``**expression`` argument, if any -- see\nbelow).  So:\n\n   >>> def f(a, b):\n   ...  print(a, b)\n   ...\n   >>> f(b=1, *(2,))\n   2 1\n   >>> f(a=1, *(2,))\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in ?\n   TypeError: f() got multiple values for keyword argument \'a\'\n   >>> f(1, *(2,))\n   1 2\n\nIt is unusual for both keyword arguments and the ``*expression``\nsyntax to be used in the same call, so in practice this confusion does\nnot arise.\n\nIf the syntax ``**expression`` appears in the function call,\n``expression`` must evaluate to a mapping, the contents of which are\ntreated as additional keyword arguments.  In the case of a keyword\nappearing in both ``expression`` and as an explicit keyword argument,\na ``TypeError`` exception is raised.\n\nFormal parameters using the syntax ``*identifier`` or ``**identifier``\ncannot be used as positional argument slots or as keyword argument\nnames.\n\nA call always returns some value, possibly ``None``, unless it raises\nan exception.  How this value is computed depends on the type of the\ncallable object.\n\nIf it is---\n\na user-defined function:\n   The code block for the function is executed, passing it the\n   argument list.  The first thing the code block will do is bind the\n   formal parameters to the arguments; this is described in section\n   *Function definitions*.  When the code block executes a ``return``\n   statement, this specifies the return value of the function call.\n\na built-in function or method:\n   The result is up to the interpreter; see *Built-in Functions* for\n   the descriptions of built-in functions and methods.\n\na class object:\n   A new instance of that class is returned.\n\na class instance method:\n   The corresponding user-defined function is called, with an argument\n   list that is one longer than the argument list of the call: the\n   instance becomes the first argument.\n\na class instance:\n   The class must define a ``__call__()`` method; the effect is then\n   the same as if that method was called.\n',
  'class': '\nClass definitions\n*****************\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n   classdef    ::= [decorators] "class" classname [inheritance] ":" suite\n   inheritance ::= "(" [parameter_list] ")"\n   classname   ::= identifier\n\nA class definition is an executable statement.  The inheritance list\nusually gives a list of base classes (see *Customizing class creation*\nfor more advanced uses), so each item in the list should evaluate to a\nclass object which allows subclassing.  Classes without an inheritance\nlist inherit, by default, from the base class ``object``; hence,\n\n   class Foo:\n       pass\n\nis equivalent to\n\n   class Foo(object):\n       pass\n\nThe class\'s suite is then executed in a new execution frame (see\n*Naming and binding*), using a newly created local namespace and the\noriginal global namespace. (Usually, the suite contains mostly\nfunction definitions.)  When the class\'s suite finishes execution, its\nexecution frame is discarded but its local namespace is saved. [4] A\nclass object is then created using the inheritance list for the base\nclasses and the saved local namespace for the attribute dictionary.\nThe class name is bound to this class object in the original local\nnamespace.\n\nClass creation can be customized heavily using *metaclasses*.\n\nClasses can also be decorated: just like when decorating functions,\n\n   @f1(arg)\n   @f2\n   class Foo: pass\n\nis equivalent to\n\n   class Foo: pass\n   Foo = f1(arg)(f2(Foo))\n\nThe evaluation rules for the decorator expressions are the same as for\nfunction decorators.  The result must be a class object, which is then\nbound to the class name.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass attributes; they are shared by instances.  Instance attributes\ncan be set in a method with ``self.name = value``.  Both class and\ninstance attributes are accessible through the notation\n"``self.name``", and an instance attribute hides a class attribute\nwith the same name when accessed in this way.  Class attributes can be\nused as defaults for instance attributes, but using mutable values\nthere can lead to unexpected results.  *Descriptors* can be used to\ncreate instance variables with different implementation details.\n\nSee also:\n\n   **PEP 3115** - Metaclasses in Python 3 **PEP 3129** - Class\n   Decorators\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless there\n    is a ``finally`` clause which happens to raise another exception.\n    That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of an\n    exception or the execution of a ``return``, ``continue``, or\n    ``break`` statement.\n\n[3] A string literal appearing as the first statement in the function\n    body is transformed into the function\'s ``__doc__`` attribute and\n    therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n    body is transformed into the namespace\'s ``__doc__`` item and\n    therefore the class\'s *docstring*.\n',
  'comparisons': '\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation.  Also unlike C, expressions like ``a < b < c`` have the\ninterpretation that is conventional in mathematics:\n\n   comparison    ::= or_expr ( comp_operator or_expr )*\n   comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="\n                     | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: ``True`` or ``False``.\n\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\ny`` is found to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\nexcept that each expression is evaluated at most once.\n\nNote that ``a op1 b op2 c`` doesn\'t imply any kind of comparison\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\n(though perhaps not pretty).\n\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\nthe values of two objects.  The objects need not have the same type.\nIf both are numbers, they are converted to a common type.  Otherwise,\nthe ``==`` and ``!=`` operators *always* consider objects of different\ntypes to be unequal, while the ``<``, ``>``, ``>=`` and ``<=``\noperators raise a ``TypeError`` when comparing objects of different\ntypes that do not implement these operators for the given pair of\ntypes.  You can control comparison behavior of objects of non-built-in\ntypes by defining rich comparison methods like ``__gt__()``, described\nin section *Basic customization*.\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* The values ``float(\'NaN\')`` and ``Decimal(\'NaN\')`` are special. The\n  are identical to themselves, ``x is x`` but are not equal to\n  themselves, ``x != x``.  Additionally, comparing any value to a\n  not-a-number value will return ``False``.  For example, both ``3 <\n  float(\'NaN\')`` and ``float(\'NaN\') < 3`` will return ``False``.\n\n* Bytes objects are compared lexicographically using the numeric\n  values of their elements.\n\n* Strings are compared lexicographically using the numeric equivalents\n  (the result of the built-in function ``ord()``) of their characters.\n  [3] String and bytes object can\'t be compared!\n\n* Tuples and lists are compared lexicographically using comparison of\n  corresponding elements.  This means that to compare equal, each\n  element must compare equal and the two sequences must be of the same\n  type and have the same length.\n\n  If not equal, the sequences are ordered the same as their first\n  differing elements.  For example, ``[1,2,x] <= [1,2,y]`` has the\n  same value as ``x <= y``.  If the corresponding element does not\n  exist, the shorter sequence is ordered first (for example, ``[1,2] <\n  [1,2,3]``).\n\n* Mappings (dictionaries) compare equal if and only if they have the\n  same ``(key, value)`` pairs. Order comparisons ``(\'<\', \'<=\', \'>=\',\n  \'>\')`` raise ``TypeError``.\n\n* Sets and frozensets define comparison operators to mean subset and\n  superset tests.  Those relations do not define total orderings (the\n  two sets ``{1,2}`` and {2,3} are not equal, nor subsets of one\n  another, nor supersets of one another).  Accordingly, sets are not\n  appropriate arguments for functions which depend on total ordering.\n  For example, ``min()``, ``max()``, and ``sorted()`` produce\n  undefined results given a list of sets as inputs.\n\n* Most other objects of built-in types compare unequal unless they are\n  the same object; the choice whether one object is considered smaller\n  or larger than another one is made arbitrarily but consistently\n  within one execution of a program.\n\nComparison of objects of the differing types depends on whether either\nof the types provide explicit support for the comparison.  Most\nnumeric types can be compared with one another.  When cross-type\ncomparison is not supported, the comparison method returns\n``NotImplemented``.\n\nThe operators ``in`` and ``not in`` test for membership.  ``x in s``\nevaluates to true if *x* is a member of *s*, and false otherwise.  ``x\nnot in s`` returns the negation of ``x in s``.  All built-in sequences\nand set types support this as well as dictionary, for which ``in``\ntests whether a the dictionary has a given key. For container types\nsuch as list, tuple, set, frozenset, dict, or collections.deque, the\nexpression ``x in y`` is equivalent to ``any(x is e or x == e for e in\ny)``.\n\nFor the string and bytes types, ``x in y`` is true if and only if *x*\nis a substring of *y*.  An equivalent test is ``y.find(x) != -1``.\nEmpty strings are always considered to be a substring of any other\nstring, so ``"" in "abc"`` will return ``True``.\n\nFor user-defined classes which define the ``__contains__()`` method,\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\n\nFor user-defined classes which do not define ``__contains__()`` but do\ndefine ``__iter__()``, ``x in y`` is true if some value ``z`` with ``x\n== z`` is produced while iterating over ``y``.  If an exception is\nraised during the iteration, it is as if ``in`` raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n``__getitem__()``, ``x in y`` is true if and only if there is a non-\nnegative integer index *i* such that ``x == y[i]``, and all lower\ninteger indices do not raise ``IndexError`` exception.  (If any other\nexception is raised, it is as if ``in`` raised that exception).\n\nThe operator ``not in`` is defined to have the inverse true value of\n``in``.\n\nThe operators ``is`` and ``is not`` test for object identity: ``x is\ny`` is true if and only if *x* and *y* are the same object.  ``x is\nnot y`` yields the inverse truth value. [4]\n',
- 'compound': '\nCompound statements\n*******************\n\nCompound statements contain (groups of) other statements; they affect\nor control the execution of those other statements in some way.  In\ngeneral, compound statements span multiple lines, although in simple\nincarnations a whole compound statement may be contained in one line.\n\nThe ``if``, ``while`` and ``for`` statements implement traditional\ncontrol flow constructs.  ``try`` specifies exception handlers and/or\ncleanup code for a group of statements, while the ``with`` statement\nallows the execution of initialization and finalization code around a\nblock of code.  Function and class definitions are also syntactically\ncompound statements.\n\nCompound statements consist of one or more \'clauses.\'  A clause\nconsists of a header and a \'suite.\'  The clause headers of a\nparticular compound statement are all at the same indentation level.\nEach clause header begins with a uniquely identifying keyword and ends\nwith a colon.  A suite is a group of statements controlled by a\nclause.  A suite can be one or more semicolon-separated simple\nstatements on the same line as the header, following the header\'s\ncolon, or it can be one or more indented statements on subsequent\nlines.  Only the latter form of suite can contain nested compound\nstatements; the following is illegal, mostly because it wouldn\'t be\nclear to which ``if`` clause a following ``else`` clause would belong:\n\n   if test1: if test2: print(x)\n\nAlso note that the semicolon binds tighter than the colon in this\ncontext, so that in the following example, either all or none of the\n``print()`` calls are executed:\n\n   if x < y < z: print(x); print(y); print(z)\n\nSummarizing:\n\n   compound_stmt ::= if_stmt\n                     | while_stmt\n                     | for_stmt\n                     | try_stmt\n                     | with_stmt\n                     | funcdef\n                     | classdef\n   suite         ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\n   statement     ::= stmt_list NEWLINE | compound_stmt\n   stmt_list     ::= simple_stmt (";" simple_stmt)* [";"]\n\nNote that statements always end in a ``NEWLINE`` possibly followed by\na ``DEDENT``.  Also note that optional continuation clauses always\nbegin with a keyword that cannot start a statement, thus there are no\nambiguities (the \'dangling ``else``\' problem is solved in Python by\nrequiring nested ``if`` statements to be indented).\n\nThe formatting of the grammar rules in the following sections places\neach clause on a separate line for clarity.\n\n\nThe ``if`` statement\n====================\n\nThe ``if`` statement is used for conditional execution:\n\n   if_stmt ::= "if" expression ":" suite\n               ( "elif" expression ":" suite )*\n               ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the ``if`` statement is executed or evaluated).\nIf all expressions are false, the suite of the ``else`` clause, if\npresent, is executed.\n\n\nThe ``while`` statement\n=======================\n\nThe ``while`` statement is used for repeated execution as long as an\nexpression is true:\n\n   while_stmt ::= "while" expression ":" suite\n                  ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the ``else`` clause, if present, is\nexecuted and the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite.  A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ngoes back to testing the expression.\n\n\nThe ``for`` statement\n=====================\n\nThe ``for`` statement is used to iterate over the elements of a\nsequence (such as a string, tuple or list) or other iterable object:\n\n   for_stmt ::= "for" target_list "in" expression_list ":" suite\n                ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject.  An iterator is created for the result of the\n``expression_list``.  The suite is then executed once for each item\nprovided by the iterator, in the order of ascending indices.  Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments (see *Assignment statements*), and then the suite is\nexecuted.  When the items are exhausted (which is immediately when the\nsequence is empty or an iterator raises a ``StopIteration``\nexception), the suite in the ``else`` clause, if present, is executed,\nand the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite.  A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ncontinues with the next item, or with the ``else`` clause if there was\nno next item.\n\nThe suite may assign to the variable(s) in the target list; this does\nnot affect the next item assigned to it.\n\nNames in the target list are not deleted when the loop is finished,\nbut if the sequence is empty, it will not have been assigned to at all\nby the loop.  Hint: the built-in function ``range()`` returns an\niterator of integers suitable to emulate the effect of Pascal\'s ``for\ni := a to b do``; e.g., ``list(range(3))`` returns the list ``[0, 1,\n2]``.\n\nNote: There is a subtlety when the sequence is being modified by the loop\n  (this can only occur for mutable sequences, i.e. lists).  An\n  internal counter is used to keep track of which item is used next,\n  and this is incremented on each iteration.  When this counter has\n  reached the length of the sequence the loop terminates.  This means\n  that if the suite deletes the current (or a previous) item from the\n  sequence, the next item will be skipped (since it gets the index of\n  the current item which has already been treated).  Likewise, if the\n  suite inserts an item in the sequence before the current item, the\n  current item will be treated again the next time through the loop.\n  This can lead to nasty bugs that can be avoided by making a\n  temporary copy using a slice of the whole sequence, e.g.,\n\n     for x in a[:]:\n         if x < 0: a.remove(x)\n\n\nThe ``try`` statement\n=====================\n\nThe ``try`` statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n   try_stmt  ::= try1_stmt | try2_stmt\n   try1_stmt ::= "try" ":" suite\n                 ("except" [expression ["as" target]] ":" suite)+\n                 ["else" ":" suite]\n                 ["finally" ":" suite]\n   try2_stmt ::= "try" ":" suite\n                 "finally" ":" suite\n\nThe ``except`` clause(s) specify one or more exception handlers. When\nno exception occurs in the ``try`` clause, no exception handler is\nexecuted. When an exception occurs in the ``try`` suite, a search for\nan exception handler is started.  This search inspects the except\nclauses in turn until one is found that matches the exception.  An\nexpression-less except clause, if present, must be last; it matches\nany exception.  For an except clause with an expression, that\nexpression is evaluated, and the clause matches the exception if the\nresulting object is "compatible" with the exception.  An object is\ncompatible with an exception if it is the class or a base class of the\nexception object or a tuple containing an item compatible with the\nexception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire ``try`` statement\nraised the exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified after the ``as`` keyword in that except clause,\nif present, and the except clause\'s suite is executed.  All except\nclauses must have an executable block.  When the end of this block is\nreached, execution continues normally after the entire try statement.\n(This means that if two nested handlers exist for the same exception,\nand the exception occurs in the try clause of the inner handler, the\nouter handler will not handle the exception.)\n\nWhen an exception has been assigned using ``as target``, it is cleared\nat the end of the except clause.  This is as if\n\n   except E as N:\n       foo\n\nwas translated to\n\n   except E as N:\n       try:\n           foo\n       finally:\n           del N\n\nThis means the exception must be assigned to a different name to be\nable to refer to it after the except clause.  Exceptions are cleared\nbecause with the traceback attached to them, they form a reference\ncycle with the stack frame, keeping all locals in that frame alive\nuntil the next garbage collection occurs.\n\nBefore an except clause\'s suite is executed, details about the\nexception are stored in the ``sys`` module and can be access via\n``sys.exc_info()``. ``sys.exc_info()`` returns a 3-tuple consisting of\nthe exception class, the exception instance and a traceback object\n(see section *The standard type hierarchy*) identifying the point in\nthe program where the exception occurred.  ``sys.exc_info()`` values\nare restored to their previous values (before the call) when returning\nfrom a function that handled an exception.\n\nThe optional ``else`` clause is executed if and when control flows off\nthe end of the ``try`` clause. [2] Exceptions in the ``else`` clause\nare not handled by the preceding ``except`` clauses.\n\nIf ``finally`` is present, it specifies a \'cleanup\' handler.  The\n``try`` clause is executed, including any ``except`` and ``else``\nclauses.  If an exception occurs in any of the clauses and is not\nhandled, the exception is temporarily saved. The ``finally`` clause is\nexecuted.  If there is a saved exception it is re-raised at the end of\nthe ``finally`` clause.  If the ``finally`` clause raises another\nexception, the saved exception is set as the context of the new\nexception. If the ``finally`` clause executes a ``return`` or\n``break`` statement, the saved exception is discarded:\n\n   def f():\n       try:\n           1/0\n       finally:\n           return 42\n\n   >>> f()\n   42\n\nThe exception information is not available to the program during\nexecution of the ``finally`` clause.\n\nWhen a ``return``, ``break`` or ``continue`` statement is executed in\nthe ``try`` suite of a ``try``...``finally`` statement, the\n``finally`` clause is also executed \'on the way out.\' A ``continue``\nstatement is illegal in the ``finally`` clause. (The reason is a\nproblem with the current implementation --- this restriction may be\nlifted in the future).\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the ``raise`` statement to\ngenerate exceptions may be found in section *The raise statement*.\n\n\nThe ``with`` statement\n======================\n\nThe ``with`` statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common\n``try``...``except``...``finally`` usage patterns to be encapsulated\nfor convenient reuse.\n\n   with_stmt ::= "with" with_item ("," with_item)* ":" suite\n   with_item ::= expression ["as" target]\n\nThe execution of the ``with`` statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the ``with_item``)\n   is evaluated to obtain a context manager.\n\n2. The context manager\'s ``__exit__()`` is loaded for later use.\n\n3. The context manager\'s ``__enter__()`` method is invoked.\n\n4. If a target was included in the ``with`` statement, the return\n   value from ``__enter__()`` is assigned to it.\n\n   Note: The ``with`` statement guarantees that if the ``__enter__()``\n     method returns without an error, then ``__exit__()`` will always\n     be called. Thus, if an error occurs during the assignment to the\n     target list, it will be treated the same as an error occurring\n     within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s ``__exit__()`` method is invoked.  If an\n   exception caused the suite to be exited, its type, value, and\n   traceback are passed as arguments to ``__exit__()``. Otherwise,\n   three ``None`` arguments are supplied.\n\n   If the suite was exited due to an exception, and the return value\n   from the ``__exit__()`` method was false, the exception is\n   reraised.  If the return value was true, the exception is\n   suppressed, and execution continues with the statement following\n   the ``with`` statement.\n\n   If the suite was exited for any reason other than an exception, the\n   return value from ``__exit__()`` is ignored, and execution proceeds\n   at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple ``with`` statements were nested:\n\n   with A() as a, B() as b:\n       suite\n\nis equivalent to\n\n   with A() as a:\n       with B() as b:\n           suite\n\nChanged in version 3.1: Support for multiple context expressions.\n\nSee also:\n\n   **PEP 0343** - The "with" statement\n      The specification, background, and examples for the Python\n      ``with`` statement.\n\n\nFunction definitions\n====================\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n   funcdef        ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n   decorators     ::= decorator+\n   decorator      ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE\n   dotted_name    ::= identifier ("." identifier)*\n   parameter_list ::= (defparameter ",")*\n                      ( "*" [parameter] ("," defparameter)* ["," "**" parameter]\n                      | "**" parameter\n                      | defparameter [","] )\n   parameter      ::= identifier [":" expression]\n   defparameter   ::= parameter ["=" expression]\n   funcname       ::= identifier\n\nA function definition is an executable statement.  Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function).  This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition.  The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object.  Multiple decorators are applied in\nnested fashion. For example, the following code\n\n   @f1(arg)\n   @f2\n   def func(): pass\n\nis equivalent to\n\n   def func(): pass\n   func = f1(arg)(f2(func))\n\nWhen one or more *parameters* have the form *parameter* ``=``\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted.  If a parameter has a default value, all following\nparameters up until the "``*``" must also have a default value ---\nthis is a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call.  This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended.  A way around this is to use\n``None`` as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n   def whats_on_the_telly(penguin=None):\n       if penguin is None:\n           penguin = []\n       penguin.append("property of the zoo")\n       return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values.  If the form\n"``*identifier``" is present, it is initialized to a tuple receiving\nany excess positional parameters, defaulting to the empty tuple.  If\nthe form "``**identifier``" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after "``*``" or "``*identifier``" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "``: expression``"\nfollowing the parameter name.  Any parameter may have an annotation\neven those of the form ``*identifier`` or ``**identifier``.  Functions\nmay have "return" annotation of the form "``-> expression``" after the\nparameter list.  These annotations can be any valid Python expression\nand are evaluated when the function definition is executed.\nAnnotations may be evaluated in a different order than they appear in\nthe source code.  The presence of annotations does not change the\nsemantics of a function.  The annotation values are available as\nvalues of a dictionary keyed by the parameters\' names in the\n``__annotations__`` attribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions.  This uses lambda forms,\ndescribed in section *Lambdas*.  Note that the lambda form is merely a\nshorthand for a simplified function definition; a function defined in\na "``def``" statement can be passed around or assigned to another name\njust like a function defined by a lambda form.  The "``def``" form is\nactually more powerful since it allows the execution of multiple\nstatements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects.  A "``def``"\nform executed inside a function definition defines a local function\nthat can be returned or passed around.  Free variables used in the\nnested function can access the local variables of the function\ncontaining the def.  See section *Naming and binding* for details.\n\nSee also:\n\n   **PEP 3107** - Function Annotations\n      The original specification for function annotations.\n\n\nClass definitions\n=================\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n   classdef    ::= [decorators] "class" classname [inheritance] ":" suite\n   inheritance ::= "(" [parameter_list] ")"\n   classname   ::= identifier\n\nA class definition is an executable statement.  The inheritance list\nusually gives a list of base classes (see *Customizing class creation*\nfor more advanced uses), so each item in the list should evaluate to a\nclass object which allows subclassing.  Classes without an inheritance\nlist inherit, by default, from the base class ``object``; hence,\n\n   class Foo:\n       pass\n\nis equivalent to\n\n   class Foo(object):\n       pass\n\nThe class\'s suite is then executed in a new execution frame (see\n*Naming and binding*), using a newly created local namespace and the\noriginal global namespace. (Usually, the suite contains mostly\nfunction definitions.)  When the class\'s suite finishes execution, its\nexecution frame is discarded but its local namespace is saved. [4] A\nclass object is then created using the inheritance list for the base\nclasses and the saved local namespace for the attribute dictionary.\nThe class name is bound to this class object in the original local\nnamespace.\n\nClass creation can be customized heavily using *metaclasses*.\n\nClasses can also be decorated: just like when decorating functions,\n\n   @f1(arg)\n   @f2\n   class Foo: pass\n\nis equivalent to\n\n   class Foo: pass\n   Foo = f1(arg)(f2(Foo))\n\nThe evaluation rules for the decorator expressions are the same as for\nfunction decorators.  The result must be a class object, which is then\nbound to the class name.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass attributes; they are shared by instances.  Instance attributes\ncan be set in a method with ``self.name = value``.  Both class and\ninstance attributes are accessible through the notation\n"``self.name``", and an instance attribute hides a class attribute\nwith the same name when accessed in this way.  Class attributes can be\nused as defaults for instance attributes, but using mutable values\nthere can lead to unexpected results.  *Descriptors* can be used to\ncreate instance variables with different implementation details.\n\nSee also:\n\n   **PEP 3115** - Metaclasses in Python 3 **PEP 3129** - Class\n   Decorators\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless there\n    is a ``finally`` clause which happens to raise another exception.\n    That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of an\n    exception or the execution of a ``return``, ``continue``, or\n    ``break`` statement.\n\n[3] A string literal appearing as the first statement in the function\n    body is transformed into the function\'s ``__doc__`` attribute and\n    therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n    body is transformed into the namespace\'s ``__doc__`` item and\n    therefore the class\'s *docstring*.\n',
+ 'compound': '\nCompound statements\n*******************\n\nCompound statements contain (groups of) other statements; they affect\nor control the execution of those other statements in some way.  In\ngeneral, compound statements span multiple lines, although in simple\nincarnations a whole compound statement may be contained in one line.\n\nThe ``if``, ``while`` and ``for`` statements implement traditional\ncontrol flow constructs.  ``try`` specifies exception handlers and/or\ncleanup code for a group of statements, while the ``with`` statement\nallows the execution of initialization and finalization code around a\nblock of code.  Function and class definitions are also syntactically\ncompound statements.\n\nCompound statements consist of one or more \'clauses.\'  A clause\nconsists of a header and a \'suite.\'  The clause headers of a\nparticular compound statement are all at the same indentation level.\nEach clause header begins with a uniquely identifying keyword and ends\nwith a colon.  A suite is a group of statements controlled by a\nclause.  A suite can be one or more semicolon-separated simple\nstatements on the same line as the header, following the header\'s\ncolon, or it can be one or more indented statements on subsequent\nlines.  Only the latter form of suite can contain nested compound\nstatements; the following is illegal, mostly because it wouldn\'t be\nclear to which ``if`` clause a following ``else`` clause would belong:\n\n   if test1: if test2: print(x)\n\nAlso note that the semicolon binds tighter than the colon in this\ncontext, so that in the following example, either all or none of the\n``print()`` calls are executed:\n\n   if x < y < z: print(x); print(y); print(z)\n\nSummarizing:\n\n   compound_stmt ::= if_stmt\n                     | while_stmt\n                     | for_stmt\n                     | try_stmt\n                     | with_stmt\n                     | funcdef\n                     | classdef\n   suite         ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\n   statement     ::= stmt_list NEWLINE | compound_stmt\n   stmt_list     ::= simple_stmt (";" simple_stmt)* [";"]\n\nNote that statements always end in a ``NEWLINE`` possibly followed by\na ``DEDENT``.  Also note that optional continuation clauses always\nbegin with a keyword that cannot start a statement, thus there are no\nambiguities (the \'dangling ``else``\' problem is solved in Python by\nrequiring nested ``if`` statements to be indented).\n\nThe formatting of the grammar rules in the following sections places\neach clause on a separate line for clarity.\n\n\nThe ``if`` statement\n====================\n\nThe ``if`` statement is used for conditional execution:\n\n   if_stmt ::= "if" expression ":" suite\n               ( "elif" expression ":" suite )*\n               ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the ``if`` statement is executed or evaluated).\nIf all expressions are false, the suite of the ``else`` clause, if\npresent, is executed.\n\n\nThe ``while`` statement\n=======================\n\nThe ``while`` statement is used for repeated execution as long as an\nexpression is true:\n\n   while_stmt ::= "while" expression ":" suite\n                  ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the ``else`` clause, if present, is\nexecuted and the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite.  A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ngoes back to testing the expression.\n\n\nThe ``for`` statement\n=====================\n\nThe ``for`` statement is used to iterate over the elements of a\nsequence (such as a string, tuple or list) or other iterable object:\n\n   for_stmt ::= "for" target_list "in" expression_list ":" suite\n                ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject.  An iterator is created for the result of the\n``expression_list``.  The suite is then executed once for each item\nprovided by the iterator, in the order of ascending indices.  Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments (see *Assignment statements*), and then the suite is\nexecuted.  When the items are exhausted (which is immediately when the\nsequence is empty or an iterator raises a ``StopIteration``\nexception), the suite in the ``else`` clause, if present, is executed,\nand the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite.  A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ncontinues with the next item, or with the ``else`` clause if there was\nno next item.\n\nThe suite may assign to the variable(s) in the target list; this does\nnot affect the next item assigned to it.\n\nNames in the target list are not deleted when the loop is finished,\nbut if the sequence is empty, it will not have been assigned to at all\nby the loop.  Hint: the built-in function ``range()`` returns an\niterator of integers suitable to emulate the effect of Pascal\'s ``for\ni := a to b do``; e.g., ``list(range(3))`` returns the list ``[0, 1,\n2]``.\n\nNote: There is a subtlety when the sequence is being modified by the loop\n  (this can only occur for mutable sequences, i.e. lists).  An\n  internal counter is used to keep track of which item is used next,\n  and this is incremented on each iteration.  When this counter has\n  reached the length of the sequence the loop terminates.  This means\n  that if the suite deletes the current (or a previous) item from the\n  sequence, the next item will be skipped (since it gets the index of\n  the current item which has already been treated).  Likewise, if the\n  suite inserts an item in the sequence before the current item, the\n  current item will be treated again the next time through the loop.\n  This can lead to nasty bugs that can be avoided by making a\n  temporary copy using a slice of the whole sequence, e.g.,\n\n     for x in a[:]:\n         if x < 0: a.remove(x)\n\n\nThe ``try`` statement\n=====================\n\nThe ``try`` statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n   try_stmt  ::= try1_stmt | try2_stmt\n   try1_stmt ::= "try" ":" suite\n                 ("except" [expression ["as" target]] ":" suite)+\n                 ["else" ":" suite]\n                 ["finally" ":" suite]\n   try2_stmt ::= "try" ":" suite\n                 "finally" ":" suite\n\nThe ``except`` clause(s) specify one or more exception handlers. When\nno exception occurs in the ``try`` clause, no exception handler is\nexecuted. When an exception occurs in the ``try`` suite, a search for\nan exception handler is started.  This search inspects the except\nclauses in turn until one is found that matches the exception.  An\nexpression-less except clause, if present, must be last; it matches\nany exception.  For an except clause with an expression, that\nexpression is evaluated, and the clause matches the exception if the\nresulting object is "compatible" with the exception.  An object is\ncompatible with an exception if it is the class or a base class of the\nexception object or a tuple containing an item compatible with the\nexception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire ``try`` statement\nraised the exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified after the ``as`` keyword in that except clause,\nif present, and the except clause\'s suite is executed.  All except\nclauses must have an executable block.  When the end of this block is\nreached, execution continues normally after the entire try statement.\n(This means that if two nested handlers exist for the same exception,\nand the exception occurs in the try clause of the inner handler, the\nouter handler will not handle the exception.)\n\nWhen an exception has been assigned using ``as target``, it is cleared\nat the end of the except clause.  This is as if\n\n   except E as N:\n       foo\n\nwas translated to\n\n   except E as N:\n       try:\n           foo\n       finally:\n           del N\n\nThis means the exception must be assigned to a different name to be\nable to refer to it after the except clause.  Exceptions are cleared\nbecause with the traceback attached to them, they form a reference\ncycle with the stack frame, keeping all locals in that frame alive\nuntil the next garbage collection occurs.\n\nBefore an except clause\'s suite is executed, details about the\nexception are stored in the ``sys`` module and can be access via\n``sys.exc_info()``. ``sys.exc_info()`` returns a 3-tuple consisting of\nthe exception class, the exception instance and a traceback object\n(see section *The standard type hierarchy*) identifying the point in\nthe program where the exception occurred.  ``sys.exc_info()`` values\nare restored to their previous values (before the call) when returning\nfrom a function that handled an exception.\n\nThe optional ``else`` clause is executed if and when control flows off\nthe end of the ``try`` clause. [2] Exceptions in the ``else`` clause\nare not handled by the preceding ``except`` clauses.\n\nIf ``finally`` is present, it specifies a \'cleanup\' handler.  The\n``try`` clause is executed, including any ``except`` and ``else``\nclauses.  If an exception occurs in any of the clauses and is not\nhandled, the exception is temporarily saved. The ``finally`` clause is\nexecuted.  If there is a saved exception it is re-raised at the end of\nthe ``finally`` clause.  If the ``finally`` clause raises another\nexception, the saved exception is set as the context of the new\nexception. If the ``finally`` clause executes a ``return`` or\n``break`` statement, the saved exception is discarded:\n\n   def f():\n       try:\n           1/0\n       finally:\n           return 42\n\n   >>> f()\n   42\n\nThe exception information is not available to the program during\nexecution of the ``finally`` clause.\n\nWhen a ``return``, ``break`` or ``continue`` statement is executed in\nthe ``try`` suite of a ``try``...``finally`` statement, the\n``finally`` clause is also executed \'on the way out.\' A ``continue``\nstatement is illegal in the ``finally`` clause. (The reason is a\nproblem with the current implementation --- this restriction may be\nlifted in the future).\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the ``raise`` statement to\ngenerate exceptions may be found in section *The raise statement*.\n\n\nThe ``with`` statement\n======================\n\nThe ``with`` statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common\n``try``...``except``...``finally`` usage patterns to be encapsulated\nfor convenient reuse.\n\n   with_stmt ::= "with" with_item ("," with_item)* ":" suite\n   with_item ::= expression ["as" target]\n\nThe execution of the ``with`` statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the ``with_item``)\n   is evaluated to obtain a context manager.\n\n2. The context manager\'s ``__exit__()`` is loaded for later use.\n\n3. The context manager\'s ``__enter__()`` method is invoked.\n\n4. If a target was included in the ``with`` statement, the return\n   value from ``__enter__()`` is assigned to it.\n\n   Note: The ``with`` statement guarantees that if the ``__enter__()``\n     method returns without an error, then ``__exit__()`` will always\n     be called. Thus, if an error occurs during the assignment to the\n     target list, it will be treated the same as an error occurring\n     within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s ``__exit__()`` method is invoked.  If an\n   exception caused the suite to be exited, its type, value, and\n   traceback are passed as arguments to ``__exit__()``. Otherwise,\n   three ``None`` arguments are supplied.\n\n   If the suite was exited due to an exception, and the return value\n   from the ``__exit__()`` method was false, the exception is\n   reraised.  If the return value was true, the exception is\n   suppressed, and execution continues with the statement following\n   the ``with`` statement.\n\n   If the suite was exited for any reason other than an exception, the\n   return value from ``__exit__()`` is ignored, and execution proceeds\n   at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple ``with`` statements were nested:\n\n   with A() as a, B() as b:\n       suite\n\nis equivalent to\n\n   with A() as a:\n       with B() as b:\n           suite\n\nChanged in version 3.1: Support for multiple context expressions.\n\nSee also:\n\n   **PEP 0343** - The "with" statement\n      The specification, background, and examples for the Python\n      ``with`` statement.\n\n\nFunction definitions\n====================\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n   funcdef        ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n   decorators     ::= decorator+\n   decorator      ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE\n   dotted_name    ::= identifier ("." identifier)*\n   parameter_list ::= (defparameter ",")*\n                      ( "*" [parameter] ("," defparameter)* ["," "**" parameter]\n                      | "**" parameter\n                      | defparameter [","] )\n   parameter      ::= identifier [":" expression]\n   defparameter   ::= parameter ["=" expression]\n   funcname       ::= identifier\n\nA function definition is an executable statement.  Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function).  This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition.  The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object.  Multiple decorators are applied in\nnested fashion. For example, the following code\n\n   @f1(arg)\n   @f2\n   def func(): pass\n\nis equivalent to\n\n   def func(): pass\n   func = f1(arg)(f2(func))\n\nWhen one or more *parameters* have the form *parameter* ``=``\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted.  If a parameter has a default value, all following\nparameters up until the "``*``" must also have a default value ---\nthis is a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call.  This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended.  A way around this is to use\n``None`` as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n   def whats_on_the_telly(penguin=None):\n       if penguin is None:\n           penguin = []\n       penguin.append("property of the zoo")\n       return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values.  If the form\n"``*identifier``" is present, it is initialized to a tuple receiving\nany excess positional parameters, defaulting to the empty tuple.  If\nthe form "``**identifier``" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after "``*``" or "``*identifier``" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "``: expression``"\nfollowing the parameter name.  Any parameter may have an annotation\neven those of the form ``*identifier`` or ``**identifier``.  Functions\nmay have "return" annotation of the form "``-> expression``" after the\nparameter list.  These annotations can be any valid Python expression\nand are evaluated when the function definition is executed.\nAnnotations may be evaluated in a different order than they appear in\nthe source code.  The presence of annotations does not change the\nsemantics of a function.  The annotation values are available as\nvalues of a dictionary keyed by the parameters\' names in the\n``__annotations__`` attribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions.  This uses lambda\nexpressions, described in section *Lambdas*.  Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a "``def``" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression.  The "``def``" form is actually more powerful since it\nallows the execution of multiple statements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects.  A "``def``"\nstatement executed inside a function definition defines a local\nfunction that can be returned or passed around.  Free variables used\nin the nested function can access the local variables of the function\ncontaining the def.  See section *Naming and binding* for details.\n\nSee also:\n\n   **PEP 3107** - Function Annotations\n      The original specification for function annotations.\n\n\nClass definitions\n=================\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n   classdef    ::= [decorators] "class" classname [inheritance] ":" suite\n   inheritance ::= "(" [parameter_list] ")"\n   classname   ::= identifier\n\nA class definition is an executable statement.  The inheritance list\nusually gives a list of base classes (see *Customizing class creation*\nfor more advanced uses), so each item in the list should evaluate to a\nclass object which allows subclassing.  Classes without an inheritance\nlist inherit, by default, from the base class ``object``; hence,\n\n   class Foo:\n       pass\n\nis equivalent to\n\n   class Foo(object):\n       pass\n\nThe class\'s suite is then executed in a new execution frame (see\n*Naming and binding*), using a newly created local namespace and the\noriginal global namespace. (Usually, the suite contains mostly\nfunction definitions.)  When the class\'s suite finishes execution, its\nexecution frame is discarded but its local namespace is saved. [4] A\nclass object is then created using the inheritance list for the base\nclasses and the saved local namespace for the attribute dictionary.\nThe class name is bound to this class object in the original local\nnamespace.\n\nClass creation can be customized heavily using *metaclasses*.\n\nClasses can also be decorated: just like when decorating functions,\n\n   @f1(arg)\n   @f2\n   class Foo: pass\n\nis equivalent to\n\n   class Foo: pass\n   Foo = f1(arg)(f2(Foo))\n\nThe evaluation rules for the decorator expressions are the same as for\nfunction decorators.  The result must be a class object, which is then\nbound to the class name.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass attributes; they are shared by instances.  Instance attributes\ncan be set in a method with ``self.name = value``.  Both class and\ninstance attributes are accessible through the notation\n"``self.name``", and an instance attribute hides a class attribute\nwith the same name when accessed in this way.  Class attributes can be\nused as defaults for instance attributes, but using mutable values\nthere can lead to unexpected results.  *Descriptors* can be used to\ncreate instance variables with different implementation details.\n\nSee also:\n\n   **PEP 3115** - Metaclasses in Python 3 **PEP 3129** - Class\n   Decorators\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless there\n    is a ``finally`` clause which happens to raise another exception.\n    That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of an\n    exception or the execution of a ``return``, ``continue``, or\n    ``break`` statement.\n\n[3] A string literal appearing as the first statement in the function\n    body is transformed into the function\'s ``__doc__`` attribute and\n    therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n    body is transformed into the namespace\'s ``__doc__`` item and\n    therefore the class\'s *docstring*.\n',
  'context-managers': '\nWith Statement Context Managers\n*******************************\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a ``with`` statement. The context\nmanager handles the entry into, and the exit from, the desired runtime\ncontext for the execution of the block of code.  Context managers are\nnormally invoked using the ``with`` statement (described in section\n*The with statement*), but can also be used by directly invoking their\nmethods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n   Enter the runtime context related to this object. The ``with``\n   statement will bind this method\'s return value to the target(s)\n   specified in the ``as`` clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n   Exit the runtime context related to this object. The parameters\n   describe the exception that caused the context to be exited. If the\n   context was exited without an exception, all three arguments will\n   be ``None``.\n\n   If an exception is supplied, and the method wishes to suppress the\n   exception (i.e., prevent it from being propagated), it should\n   return a true value. Otherwise, the exception will be processed\n   normally upon exit from this method.\n\n   Note that ``__exit__()`` methods should not reraise the passed-in\n   exception; this is the caller\'s responsibility.\n\nSee also:\n\n   **PEP 0343** - The "with" statement\n      The specification, background, and examples for the Python\n      ``with`` statement.\n',
  'continue': '\nThe ``continue`` statement\n**************************\n\n   continue_stmt ::= "continue"\n\n``continue`` may only occur syntactically nested in a ``for`` or\n``while`` loop, but not nested in a function or class definition or\n``finally`` clause within that loop.  It continues with the next cycle\nof the nearest enclosing loop.\n\nWhen ``continue`` passes control out of a ``try`` statement with a\n``finally`` clause, that ``finally`` clause is executed before really\nstarting the next loop cycle.\n',
  'conversions': '\nArithmetic conversions\n**********************\n\nWhen a description of an arithmetic operator below uses the phrase\n"the numeric arguments are converted to a common type," this means\nthat the operator implementation for built-in types works that way:\n\n* If either argument is a complex number, the other is converted to\n  complex;\n\n* otherwise, if either argument is a floating point number, the other\n  is converted to floating point;\n\n* otherwise, both must be integers and no conversion is necessary.\n\nSome additional rules apply for certain operators (e.g., a string left\nargument to the \'%\' operator).  Extensions must define their own\nconversion behavior.\n',
  'customization': '\nBasic customization\n*******************\n\nobject.__new__(cls[, ...])\n\n   Called to create a new instance of class *cls*.  ``__new__()`` is a\n   static method (special-cased so you need not declare it as such)\n   that takes the class of which an instance was requested as its\n   first argument.  The remaining arguments are those passed to the\n   object constructor expression (the call to the class).  The return\n   value of ``__new__()`` should be the new object instance (usually\n   an instance of *cls*).\n\n   Typical implementations create a new instance of the class by\n   invoking the superclass\'s ``__new__()`` method using\n   ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\n   arguments and then modifying the newly-created instance as\n   necessary before returning it.\n\n   If ``__new__()`` returns an instance of *cls*, then the new\n   instance\'s ``__init__()`` method will be invoked like\n   ``__init__(self[, ...])``, where *self* is the new instance and the\n   remaining arguments are the same as were passed to ``__new__()``.\n\n   If ``__new__()`` does not return an instance of *cls*, then the new\n   instance\'s ``__init__()`` method will not be invoked.\n\n   ``__new__()`` is intended mainly to allow subclasses of immutable\n   types (like int, str, or tuple) to customize instance creation.  It\n   is also commonly overridden in custom metaclasses in order to\n   customize class creation.\n\nobject.__init__(self[, ...])\n\n   Called when the instance is created.  The arguments are those\n   passed to the class constructor expression.  If a base class has an\n   ``__init__()`` method, the derived class\'s ``__init__()`` method,\n   if any, must explicitly call it to ensure proper initialization of\n   the base class part of the instance; for example:\n   ``BaseClass.__init__(self, [args...])``.  As a special constraint\n   on constructors, no value may be returned; doing so will cause a\n   ``TypeError`` to be raised at runtime.\n\nobject.__del__(self)\n\n   Called when the instance is about to be destroyed.  This is also\n   called a destructor.  If a base class has a ``__del__()`` method,\n   the derived class\'s ``__del__()`` method, if any, must explicitly\n   call it to ensure proper deletion of the base class part of the\n   instance.  Note that it is possible (though not recommended!) for\n   the ``__del__()`` method to postpone destruction of the instance by\n   creating a new reference to it.  It may then be called at a later\n   time when this new reference is deleted.  It is not guaranteed that\n   ``__del__()`` methods are called for objects that still exist when\n   the interpreter exits.\n\n   Note: ``del x`` doesn\'t directly call ``x.__del__()`` --- the former\n     decrements the reference count for ``x`` by one, and the latter\n     is only called when ``x``\'s reference count reaches zero.  Some\n     common situations that may prevent the reference count of an\n     object from going to zero include: circular references between\n     objects (e.g., a doubly-linked list or a tree data structure with\n     parent and child pointers); a reference to the object on the\n     stack frame of a function that caught an exception (the traceback\n     stored in ``sys.exc_info()[2]`` keeps the stack frame alive); or\n     a reference to the object on the stack frame that raised an\n     unhandled exception in interactive mode (the traceback stored in\n     ``sys.last_traceback`` keeps the stack frame alive).  The first\n     situation can only be remedied by explicitly breaking the cycles;\n     the latter two situations can be resolved by storing ``None`` in\n     ``sys.last_traceback``. Circular references which are garbage are\n     detected and cleaned up when the cyclic garbage collector is\n     enabled (it\'s on by default). Refer to the documentation for the\n     ``gc`` module for more information about this topic.\n\n   Warning: Due to the precarious circumstances under which ``__del__()``\n     methods are invoked, exceptions that occur during their execution\n     are ignored, and a warning is printed to ``sys.stderr`` instead.\n     Also, when ``__del__()`` is invoked in response to a module being\n     deleted (e.g., when execution of the program is done), other\n     globals referenced by the ``__del__()`` method may already have\n     been deleted or in the process of being torn down (e.g. the\n     import machinery shutting down).  For this reason, ``__del__()``\n     methods should do the absolute minimum needed to maintain\n     external invariants.  Starting with version 1.5, Python\n     guarantees that globals whose name begins with a single\n     underscore are deleted from their module before other globals are\n     deleted; if no other references to such globals exist, this may\n     help in assuring that imported modules are still available at the\n     time when the ``__del__()`` method is called.\n\nobject.__repr__(self)\n\n   Called by the ``repr()`` built-in function to compute the\n   "official" string representation of an object.  If at all possible,\n   this should look like a valid Python expression that could be used\n   to recreate an object with the same value (given an appropriate\n   environment).  If this is not possible, a string of the form\n   ``<...some useful description...>`` should be returned. The return\n   value must be a string object. If a class defines ``__repr__()``\n   but not ``__str__()``, then ``__repr__()`` is also used when an\n   "informal" string representation of instances of that class is\n   required.\n\n   This is typically used for debugging, so it is important that the\n   representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n   Called by ``str(object)`` and the built-in functions ``format()``\n   and ``print()`` to compute the "informal" or nicely printable\n   string representation of an object.  The return value must be a\n   *string* object.\n\n   This method differs from ``object.__repr__()`` in that there is no\n   expectation that ``__str__()`` return a valid Python expression: a\n   more convenient or concise representation can be used.\n\n   The default implementation defined by the built-in type ``object``\n   calls ``object.__repr__()``.\n\nobject.__bytes__(self)\n\n   Called by ``bytes()`` to compute a byte-string representation of an\n   object. This should return a ``bytes`` object.\n\nobject.__format__(self, format_spec)\n\n   Called by the ``format()`` built-in function (and by extension, the\n   ``str.format()`` method of class ``str``) to produce a "formatted"\n   string representation of an object. The ``format_spec`` argument is\n   a string that contains a description of the formatting options\n   desired. The interpretation of the ``format_spec`` argument is up\n   to the type implementing ``__format__()``, however most classes\n   will either delegate formatting to one of the built-in types, or\n   use a similar formatting option syntax.\n\n   See *Format Specification Mini-Language* for a description of the\n   standard formatting syntax.\n\n   The return value must be a string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n   These are the so-called "rich comparison" methods. The\n   correspondence between operator symbols and method names is as\n   follows: ``x<y`` calls ``x.__lt__(y)``, ``x<=y`` calls\n   ``x.__le__(y)``, ``x==y`` calls ``x.__eq__(y)``, ``x!=y`` calls\n   ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and ``x>=y`` calls\n   ``x.__ge__(y)``.\n\n   A rich comparison method may return the singleton\n   ``NotImplemented`` if it does not implement the operation for a\n   given pair of arguments. By convention, ``False`` and ``True`` are\n   returned for a successful comparison. However, these methods can\n   return any value, so if the comparison operator is used in a\n   Boolean context (e.g., in the condition of an ``if`` statement),\n   Python will call ``bool()`` on the value to determine if the result\n   is true or false.\n\n   There are no implied relationships among the comparison operators.\n   The truth of ``x==y`` does not imply that ``x!=y`` is false.\n   Accordingly, when defining ``__eq__()``, one should also define\n   ``__ne__()`` so that the operators will behave as expected.  See\n   the paragraph on ``__hash__()`` for some important notes on\n   creating *hashable* objects which support custom comparison\n   operations and are usable as dictionary keys.\n\n   There are no swapped-argument versions of these methods (to be used\n   when the left argument does not support the operation but the right\n   argument does); rather, ``__lt__()`` and ``__gt__()`` are each\n   other\'s reflection, ``__le__()`` and ``__ge__()`` are each other\'s\n   reflection, and ``__eq__()`` and ``__ne__()`` are their own\n   reflection.\n\n   Arguments to rich comparison methods are never coerced.\n\n   To automatically generate ordering operations from a single root\n   operation, see ``functools.total_ordering()``.\n\nobject.__hash__(self)\n\n   Called by built-in function ``hash()`` and for operations on\n   members of hashed collections including ``set``, ``frozenset``, and\n   ``dict``.  ``__hash__()`` should return an integer.  The only\n   required property is that objects which compare equal have the same\n   hash value; it is advised to somehow mix together (e.g. using\n   exclusive or) the hash values for the components of the object that\n   also play a part in comparison of objects.\n\n   Note: ``hash()`` truncates the value returned from an object\'s custom\n     ``__hash__()`` method to the size of a ``Py_ssize_t``.  This is\n     typically 8 bytes on 64-bit builds and 4 bytes on 32-bit builds.\n     If an object\'s   ``__hash__()`` must interoperate on builds of\n     different bit sizes, be sure to check the width on all supported\n     builds.  An easy way to do this is with ``python -c "import sys;\n     print(sys.hash_info.width)"``\n\n   If a class does not define an ``__eq__()`` method it should not\n   define a ``__hash__()`` operation either; if it defines\n   ``__eq__()`` but not ``__hash__()``, its instances will not be\n   usable as items in hashable collections.  If a class defines\n   mutable objects and implements an ``__eq__()`` method, it should\n   not implement ``__hash__()``, since the implementation of hashable\n   collections requires that a key\'s hash value is immutable (if the\n   object\'s hash value changes, it will be in the wrong hash bucket).\n\n   User-defined classes have ``__eq__()`` and ``__hash__()`` methods\n   by default; with them, all objects compare unequal (except with\n   themselves) and ``x.__hash__()`` returns an appropriate value such\n   that ``x == y`` implies both that ``x is y`` and ``hash(x) ==\n   hash(y)``.\n\n   A class that overrides ``__eq__()`` and does not define\n   ``__hash__()`` will have its ``__hash__()`` implicitly set to\n   ``None``.  When the ``__hash__()`` method of a class is ``None``,\n   instances of the class will raise an appropriate ``TypeError`` when\n   a program attempts to retrieve their hash value, and will also be\n   correctly identified as unhashable when checking ``isinstance(obj,\n   collections.Hashable``).\n\n   If a class that overrides ``__eq__()`` needs to retain the\n   implementation of ``__hash__()`` from a parent class, the\n   interpreter must be told this explicitly by setting ``__hash__ =\n   <ParentClass>.__hash__``.\n\n   If a class that does not override ``__eq__()`` wishes to suppress\n   hash support, it should include ``__hash__ = None`` in the class\n   definition. A class which defines its own ``__hash__()`` that\n   explicitly raises a ``TypeError`` would be incorrectly identified\n   as hashable by an ``isinstance(obj, collections.Hashable)`` call.\n\n   Note: By default, the ``__hash__()`` values of str, bytes and datetime\n     objects are "salted" with an unpredictable random value.\n     Although they remain constant within an individual Python\n     process, they are not predictable between repeated invocations of\n     Python.This is intended to provide protection against a denial-\n     of-service caused by carefully-chosen inputs that exploit the\n     worst case performance of a dict insertion, O(n^2) complexity.\n     See http://www.ocert.org/advisories/ocert-2011-003.html for\n     details.Changing hash values affects the iteration order of\n     dicts, sets and other mappings.  Python has never made guarantees\n     about this ordering (and it typically varies between 32-bit and\n     64-bit builds).See also ``PYTHONHASHSEED``.\n\n   Changed in version 3.3: Hash randomization is enabled by default.\n\nobject.__bool__(self)\n\n   Called to implement truth value testing and the built-in operation\n   ``bool()``; should return ``False`` or ``True``.  When this method\n   is not defined, ``__len__()`` is called, if it is defined, and the\n   object is considered true if its result is nonzero.  If a class\n   defines neither ``__len__()`` nor ``__bool__()``, all its instances\n   are considered true.\n',
- 'debugger': '\n``pdb`` --- The Python Debugger\n*******************************\n\nThe module ``pdb`` defines an interactive source code debugger for\nPython programs.  It supports setting (conditional) breakpoints and\nsingle stepping at the source line level, inspection of stack frames,\nsource code listing, and evaluation of arbitrary Python code in the\ncontext of any stack frame.  It also supports post-mortem debugging\nand can be called under program control.\n\nThe debugger is extensible -- it is actually defined as the class\n``Pdb``. This is currently undocumented but easily understood by\nreading the source.  The extension interface uses the modules ``bdb``\nand ``cmd``.\n\nThe debugger\'s prompt is ``(Pdb)``. Typical usage to run a program\nunder control of the debugger is:\n\n   >>> import pdb\n   >>> import mymodule\n   >>> pdb.run(\'mymodule.test()\')\n   > <string>(0)?()\n   (Pdb) continue\n   > <string>(1)?()\n   (Pdb) continue\n   NameError: \'spam\'\n   > <string>(1)?()\n   (Pdb)\n\nChanged in version 3.3: Tab-completion via the ``readline`` module is\navailable for commands and command arguments, e.g. the current global\nand local names are offered as arguments of the ``print`` command.\n\n``pdb.py`` can also be invoked as a script to debug other scripts.\nFor example:\n\n   python3 -m pdb myscript.py\n\nWhen invoked as a script, pdb will automatically enter post-mortem\ndebugging if the program being debugged exits abnormally.  After post-\nmortem debugging (or after normal exit of the program), pdb will\nrestart the program.  Automatic restarting preserves pdb\'s state (such\nas breakpoints) and in most cases is more useful than quitting the\ndebugger upon program\'s exit.\n\nNew in version 3.2: ``pdb.py`` now accepts a ``-c`` option that\nexecutes commands as if given in a ``.pdbrc`` file, see *Debugger\nCommands*.\n\nThe typical usage to break into the debugger from a running program is\nto insert\n\n   import pdb; pdb.set_trace()\n\nat the location you want to break into the debugger.  You can then\nstep through the code following this statement, and continue running\nwithout the debugger using the ``continue`` command.\n\nThe typical usage to inspect a crashed program is:\n\n   >>> import pdb\n   >>> import mymodule\n   >>> mymodule.test()\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in ?\n     File "./mymodule.py", line 4, in test\n       test2()\n     File "./mymodule.py", line 3, in test2\n       print(spam)\n   NameError: spam\n   >>> pdb.pm()\n   > ./mymodule.py(3)test2()\n   -> print(spam)\n   (Pdb)\n\nThe module defines the following functions; each enters the debugger\nin a slightly different way:\n\npdb.run(statement, globals=None, locals=None)\n\n   Execute the *statement* (given as a string or a code object) under\n   debugger control.  The debugger prompt appears before any code is\n   executed; you can set breakpoints and type ``continue``, or you can\n   step through the statement using ``step`` or ``next`` (all these\n   commands are explained below).  The optional *globals* and *locals*\n   arguments specify the environment in which the code is executed; by\n   default the dictionary of the module ``__main__`` is used.  (See\n   the explanation of the built-in ``exec()`` or ``eval()``\n   functions.)\n\npdb.runeval(expression, globals=None, locals=None)\n\n   Evaluate the *expression* (given as a string or a code object)\n   under debugger control.  When ``runeval()`` returns, it returns the\n   value of the expression.  Otherwise this function is similar to\n   ``run()``.\n\npdb.runcall(function, *args, **kwds)\n\n   Call the *function* (a function or method object, not a string)\n   with the given arguments.  When ``runcall()`` returns, it returns\n   whatever the function call returned.  The debugger prompt appears\n   as soon as the function is entered.\n\npdb.set_trace()\n\n   Enter the debugger at the calling stack frame.  This is useful to\n   hard-code a breakpoint at a given point in a program, even if the\n   code is not otherwise being debugged (e.g. when an assertion\n   fails).\n\npdb.post_mortem(traceback=None)\n\n   Enter post-mortem debugging of the given *traceback* object.  If no\n   *traceback* is given, it uses the one of the exception that is\n   currently being handled (an exception must be being handled if the\n   default is to be used).\n\npdb.pm()\n\n   Enter post-mortem debugging of the traceback found in\n   ``sys.last_traceback``.\n\nThe ``run*`` functions and ``set_trace()`` are aliases for\ninstantiating the ``Pdb`` class and calling the method of the same\nname.  If you want to access further features, you have to do this\nyourself:\n\nclass class pdb.Pdb(completekey=\'tab\', stdin=None, stdout=None, skip=None, nosigint=False)\n\n   ``Pdb`` is the debugger class.\n\n   The *completekey*, *stdin* and *stdout* arguments are passed to the\n   underlying ``cmd.Cmd`` class; see the description there.\n\n   The *skip* argument, if given, must be an iterable of glob-style\n   module name patterns.  The debugger will not step into frames that\n   originate in a module that matches one of these patterns. [1]\n\n   By default, Pdb sets a handler for the SIGINT signal (which is sent\n   when the user presses Ctrl-C on the console) when you give a\n   ``continue`` command. This allows you to break into the debugger\n   again by pressing Ctrl-C.  If you want Pdb not to touch the SIGINT\n   handler, set *nosigint* tot true.\n\n   Example call to enable tracing with *skip*:\n\n      import pdb; pdb.Pdb(skip=[\'django.*\']).set_trace()\n\n   New in version 3.1: The *skip* argument.\n\n   New in version 3.2: The *nosigint* argument.  Previously, a SIGINT\n   handler was never set by Pdb.\n\n   run(statement, globals=None, locals=None)\n   runeval(expression, globals=None, locals=None)\n   runcall(function, *args, **kwds)\n   set_trace()\n\n      See the documentation for the functions explained above.\n\n\nDebugger Commands\n=================\n\nThe commands recognized by the debugger are listed below.  Most\ncommands can be abbreviated to one or two letters as indicated; e.g.\n``h(elp)`` means that either ``h`` or ``help`` can be used to enter\nthe help command (but not ``he`` or ``hel``, nor ``H`` or ``Help`` or\n``HELP``).  Arguments to commands must be separated by whitespace\n(spaces or tabs).  Optional arguments are enclosed in square brackets\n(``[]``) in the command syntax; the square brackets must not be typed.\nAlternatives in the command syntax are separated by a vertical bar\n(``|``).\n\nEntering a blank line repeats the last command entered.  Exception: if\nthe last command was a ``list`` command, the next 11 lines are listed.\n\nCommands that the debugger doesn\'t recognize are assumed to be Python\nstatements and are executed in the context of the program being\ndebugged.  Python statements can also be prefixed with an exclamation\npoint (``!``).  This is a powerful way to inspect the program being\ndebugged; it is even possible to change a variable or call a function.\nWhen an exception occurs in such a statement, the exception name is\nprinted but the debugger\'s state is not changed.\n\nThe debugger supports *aliases*.  Aliases can have parameters which\nallows one a certain level of adaptability to the context under\nexamination.\n\nMultiple commands may be entered on a single line, separated by\n``;;``.  (A single ``;`` is not used as it is the separator for\nmultiple commands in a line that is passed to the Python parser.)  No\nintelligence is applied to separating the commands; the input is split\nat the first ``;;`` pair, even if it is in the middle of a quoted\nstring.\n\nIf a file ``.pdbrc`` exists in the user\'s home directory or in the\ncurrent directory, it is read in and executed as if it had been typed\nat the debugger prompt.  This is particularly useful for aliases.  If\nboth files exist, the one in the home directory is read first and\naliases defined there can be overridden by the local file.\n\nChanged in version 3.2: ``.pdbrc`` can now contain commands that\ncontinue debugging, such as ``continue`` or ``next``.  Previously,\nthese commands had no effect.\n\nh(elp) [command]\n\n   Without argument, print the list of available commands.  With a\n   *command* as argument, print help about that command.  ``help pdb``\n   displays the full documentation (the docstring of the ``pdb``\n   module).  Since the *command* argument must be an identifier,\n   ``help exec`` must be entered to get help on the ``!`` command.\n\nw(here)\n\n   Print a stack trace, with the most recent frame at the bottom.  An\n   arrow indicates the current frame, which determines the context of\n   most commands.\n\nd(own) [count]\n\n   Move the current frame *count* (default one) levels down in the\n   stack trace (to a newer frame).\n\nu(p) [count]\n\n   Move the current frame *count* (default one) levels up in the stack\n   trace (to an older frame).\n\nb(reak) [([filename:]lineno | function) [, condition]]\n\n   With a *lineno* argument, set a break there in the current file.\n   With a *function* argument, set a break at the first executable\n   statement within that function.  The line number may be prefixed\n   with a filename and a colon, to specify a breakpoint in another\n   file (probably one that hasn\'t been loaded yet).  The file is\n   searched on ``sys.path``.  Note that each breakpoint is assigned a\n   number to which all the other breakpoint commands refer.\n\n   If a second argument is present, it is an expression which must\n   evaluate to true before the breakpoint is honored.\n\n   Without argument, list all breaks, including for each breakpoint,\n   the number of times that breakpoint has been hit, the current\n   ignore count, and the associated condition if any.\n\ntbreak [([filename:]lineno | function) [, condition]]\n\n   Temporary breakpoint, which is removed automatically when it is\n   first hit. The arguments are the same as for ``break``.\n\ncl(ear) [filename:lineno | bpnumber [bpnumber ...]]\n\n   With a *filename:lineno* argument, clear all the breakpoints at\n   this line. With a space separated list of breakpoint numbers, clear\n   those breakpoints. Without argument, clear all breaks (but first\n   ask confirmation).\n\ndisable [bpnumber [bpnumber ...]]\n\n   Disable the breakpoints given as a space separated list of\n   breakpoint numbers.  Disabling a breakpoint means it cannot cause\n   the program to stop execution, but unlike clearing a breakpoint, it\n   remains in the list of breakpoints and can be (re-)enabled.\n\nenable [bpnumber [bpnumber ...]]\n\n   Enable the breakpoints specified.\n\nignore bpnumber [count]\n\n   Set the ignore count for the given breakpoint number.  If count is\n   omitted, the ignore count is set to 0.  A breakpoint becomes active\n   when the ignore count is zero.  When non-zero, the count is\n   decremented each time the breakpoint is reached and the breakpoint\n   is not disabled and any associated condition evaluates to true.\n\ncondition bpnumber [condition]\n\n   Set a new *condition* for the breakpoint, an expression which must\n   evaluate to true before the breakpoint is honored.  If *condition*\n   is absent, any existing condition is removed; i.e., the breakpoint\n   is made unconditional.\n\ncommands [bpnumber]\n\n   Specify a list of commands for breakpoint number *bpnumber*.  The\n   commands themselves appear on the following lines.  Type a line\n   containing just ``end`` to terminate the commands. An example:\n\n      (Pdb) commands 1\n      (com) print some_variable\n      (com) end\n      (Pdb)\n\n   To remove all commands from a breakpoint, type commands and follow\n   it immediately with ``end``; that is, give no commands.\n\n   With no *bpnumber* argument, commands refers to the last breakpoint\n   set.\n\n   You can use breakpoint commands to start your program up again.\n   Simply use the continue command, or step, or any other command that\n   resumes execution.\n\n   Specifying any command resuming execution (currently continue,\n   step, next, return, jump, quit and their abbreviations) terminates\n   the command list (as if that command was immediately followed by\n   end). This is because any time you resume execution (even with a\n   simple next or step), you may encounter another breakpoint--which\n   could have its own command list, leading to ambiguities about which\n   list to execute.\n\n   If you use the \'silent\' command in the command list, the usual\n   message about stopping at a breakpoint is not printed.  This may be\n   desirable for breakpoints that are to print a specific message and\n   then continue.  If none of the other commands print anything, you\n   see no sign that the breakpoint was reached.\n\ns(tep)\n\n   Execute the current line, stop at the first possible occasion\n   (either in a function that is called or on the next line in the\n   current function).\n\nn(ext)\n\n   Continue execution until the next line in the current function is\n   reached or it returns.  (The difference between ``next`` and\n   ``step`` is that ``step`` stops inside a called function, while\n   ``next`` executes called functions at (nearly) full speed, only\n   stopping at the next line in the current function.)\n\nunt(il) [lineno]\n\n   Without argument, continue execution until the line with a number\n   greater than the current one is reached.\n\n   With a line number, continue execution until a line with a number\n   greater or equal to that is reached.  In both cases, also stop when\n   the current frame returns.\n\n   Changed in version 3.2: Allow giving an explicit line number.\n\nr(eturn)\n\n   Continue execution until the current function returns.\n\nc(ont(inue))\n\n   Continue execution, only stop when a breakpoint is encountered.\n\nj(ump) lineno\n\n   Set the next line that will be executed.  Only available in the\n   bottom-most frame.  This lets you jump back and execute code again,\n   or jump forward to skip code that you don\'t want to run.\n\n   It should be noted that not all jumps are allowed -- for instance\n   it is not possible to jump into the middle of a ``for`` loop or out\n   of a ``finally`` clause.\n\nl(ist) [first[, last]]\n\n   List source code for the current file.  Without arguments, list 11\n   lines around the current line or continue the previous listing.\n   With ``.`` as argument, list 11 lines around the current line.\n   With one argument, list 11 lines around at that line.  With two\n   arguments, list the given range; if the second argument is less\n   than the first, it is interpreted as a count.\n\n   The current line in the current frame is indicated by ``->``.  If\n   an exception is being debugged, the line where the exception was\n   originally raised or propagated is indicated by ``>>``, if it\n   differs from the current line.\n\n   New in version 3.2: The ``>>`` marker.\n\nll | longlist\n\n   List all source code for the current function or frame.\n   Interesting lines are marked as for ``list``.\n\n   New in version 3.2.\n\na(rgs)\n\n   Print the argument list of the current function.\n\np(rint) expression\n\n   Evaluate the *expression* in the current context and print its\n   value.\n\npp expression\n\n   Like the ``print`` command, except the value of the expression is\n   pretty-printed using the ``pprint`` module.\n\nwhatis expression\n\n   Print the type of the *expression*.\n\nsource expression\n\n   Try to get source code for the given object and display it.\n\n   New in version 3.2.\n\ndisplay [expression]\n\n   Display the value of the expression if it changed, each time\n   execution stops in the current frame.\n\n   Without expression, list all display expressions for the current\n   frame.\n\n   New in version 3.2.\n\nundisplay [expression]\n\n   Do not display the expression any more in the current frame.\n   Without expression, clear all display expressions for the current\n   frame.\n\n   New in version 3.2.\n\ninteract\n\n   Start an interative interpreter (using the ``code`` module) whose\n   global namespace contains all the (global and local) names found in\n   the current scope.\n\n   New in version 3.2.\n\nalias [name [command]]\n\n   Create an alias called *name* that executes *command*.  The command\n   must *not* be enclosed in quotes.  Replaceable parameters can be\n   indicated by ``%1``, ``%2``, and so on, while ``%*`` is replaced by\n   all the parameters. If no command is given, the current alias for\n   *name* is shown. If no arguments are given, all aliases are listed.\n\n   Aliases may be nested and can contain anything that can be legally\n   typed at the pdb prompt.  Note that internal pdb commands *can* be\n   overridden by aliases.  Such a command is then hidden until the\n   alias is removed.  Aliasing is recursively applied to the first\n   word of the command line; all other words in the line are left\n   alone.\n\n   As an example, here are two useful aliases (especially when placed\n   in the ``.pdbrc`` file):\n\n      # Print instance variables (usage "pi classInst")\n      alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k])\n      # Print instance variables in self\n      alias ps pi self\n\nunalias name\n\n   Delete the specified alias.\n\n! statement\n\n   Execute the (one-line) *statement* in the context of the current\n   stack frame. The exclamation point can be omitted unless the first\n   word of the statement resembles a debugger command.  To set a\n   global variable, you can prefix the assignment command with a\n   ``global`` statement on the same line, e.g.:\n\n      (Pdb) global list_options; list_options = [\'-l\']\n      (Pdb)\n\nrun [args ...]\nrestart [args ...]\n\n   Restart the debugged Python program.  If an argument is supplied,\n   it is split with ``shlex`` and the result is used as the new\n   ``sys.argv``. History, breakpoints, actions and debugger options\n   are preserved. ``restart`` is an alias for ``run``.\n\nq(uit)\n\n   Quit from the debugger.  The program being executed is aborted.\n\n-[ Footnotes ]-\n\n[1] Whether a frame is considered to originate in a certain module is\n    determined by the ``__name__`` in the frame globals.\n',
+ 'debugger': '\n``pdb`` --- The Python Debugger\n*******************************\n\nThe module ``pdb`` defines an interactive source code debugger for\nPython programs.  It supports setting (conditional) breakpoints and\nsingle stepping at the source line level, inspection of stack frames,\nsource code listing, and evaluation of arbitrary Python code in the\ncontext of any stack frame.  It also supports post-mortem debugging\nand can be called under program control.\n\nThe debugger is extensible -- it is actually defined as the class\n``Pdb``. This is currently undocumented but easily understood by\nreading the source.  The extension interface uses the modules ``bdb``\nand ``cmd``.\n\nThe debugger\'s prompt is ``(Pdb)``. Typical usage to run a program\nunder control of the debugger is:\n\n   >>> import pdb\n   >>> import mymodule\n   >>> pdb.run(\'mymodule.test()\')\n   > <string>(0)?()\n   (Pdb) continue\n   > <string>(1)?()\n   (Pdb) continue\n   NameError: \'spam\'\n   > <string>(1)?()\n   (Pdb)\n\nChanged in version 3.3: Tab-completion via the ``readline`` module is\navailable for commands and command arguments, e.g. the current global\nand local names are offered as arguments of the ``p`` command.\n\n``pdb.py`` can also be invoked as a script to debug other scripts.\nFor example:\n\n   python3 -m pdb myscript.py\n\nWhen invoked as a script, pdb will automatically enter post-mortem\ndebugging if the program being debugged exits abnormally.  After post-\nmortem debugging (or after normal exit of the program), pdb will\nrestart the program.  Automatic restarting preserves pdb\'s state (such\nas breakpoints) and in most cases is more useful than quitting the\ndebugger upon program\'s exit.\n\nNew in version 3.2: ``pdb.py`` now accepts a ``-c`` option that\nexecutes commands as if given in a ``.pdbrc`` file, see *Debugger\nCommands*.\n\nThe typical usage to break into the debugger from a running program is\nto insert\n\n   import pdb; pdb.set_trace()\n\nat the location you want to break into the debugger.  You can then\nstep through the code following this statement, and continue running\nwithout the debugger using the ``continue`` command.\n\nThe typical usage to inspect a crashed program is:\n\n   >>> import pdb\n   >>> import mymodule\n   >>> mymodule.test()\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in ?\n     File "./mymodule.py", line 4, in test\n       test2()\n     File "./mymodule.py", line 3, in test2\n       print(spam)\n   NameError: spam\n   >>> pdb.pm()\n   > ./mymodule.py(3)test2()\n   -> print(spam)\n   (Pdb)\n\nThe module defines the following functions; each enters the debugger\nin a slightly different way:\n\npdb.run(statement, globals=None, locals=None)\n\n   Execute the *statement* (given as a string or a code object) under\n   debugger control.  The debugger prompt appears before any code is\n   executed; you can set breakpoints and type ``continue``, or you can\n   step through the statement using ``step`` or ``next`` (all these\n   commands are explained below).  The optional *globals* and *locals*\n   arguments specify the environment in which the code is executed; by\n   default the dictionary of the module ``__main__`` is used.  (See\n   the explanation of the built-in ``exec()`` or ``eval()``\n   functions.)\n\npdb.runeval(expression, globals=None, locals=None)\n\n   Evaluate the *expression* (given as a string or a code object)\n   under debugger control.  When ``runeval()`` returns, it returns the\n   value of the expression.  Otherwise this function is similar to\n   ``run()``.\n\npdb.runcall(function, *args, **kwds)\n\n   Call the *function* (a function or method object, not a string)\n   with the given arguments.  When ``runcall()`` returns, it returns\n   whatever the function call returned.  The debugger prompt appears\n   as soon as the function is entered.\n\npdb.set_trace()\n\n   Enter the debugger at the calling stack frame.  This is useful to\n   hard-code a breakpoint at a given point in a program, even if the\n   code is not otherwise being debugged (e.g. when an assertion\n   fails).\n\npdb.post_mortem(traceback=None)\n\n   Enter post-mortem debugging of the given *traceback* object.  If no\n   *traceback* is given, it uses the one of the exception that is\n   currently being handled (an exception must be being handled if the\n   default is to be used).\n\npdb.pm()\n\n   Enter post-mortem debugging of the traceback found in\n   ``sys.last_traceback``.\n\nThe ``run*`` functions and ``set_trace()`` are aliases for\ninstantiating the ``Pdb`` class and calling the method of the same\nname.  If you want to access further features, you have to do this\nyourself:\n\nclass class pdb.Pdb(completekey=\'tab\', stdin=None, stdout=None, skip=None, nosigint=False)\n\n   ``Pdb`` is the debugger class.\n\n   The *completekey*, *stdin* and *stdout* arguments are passed to the\n   underlying ``cmd.Cmd`` class; see the description there.\n\n   The *skip* argument, if given, must be an iterable of glob-style\n   module name patterns.  The debugger will not step into frames that\n   originate in a module that matches one of these patterns. [1]\n\n   By default, Pdb sets a handler for the SIGINT signal (which is sent\n   when the user presses Ctrl-C on the console) when you give a\n   ``continue`` command. This allows you to break into the debugger\n   again by pressing Ctrl-C.  If you want Pdb not to touch the SIGINT\n   handler, set *nosigint* tot true.\n\n   Example call to enable tracing with *skip*:\n\n      import pdb; pdb.Pdb(skip=[\'django.*\']).set_trace()\n\n   New in version 3.1: The *skip* argument.\n\n   New in version 3.2: The *nosigint* argument.  Previously, a SIGINT\n   handler was never set by Pdb.\n\n   run(statement, globals=None, locals=None)\n   runeval(expression, globals=None, locals=None)\n   runcall(function, *args, **kwds)\n   set_trace()\n\n      See the documentation for the functions explained above.\n\n\nDebugger Commands\n=================\n\nThe commands recognized by the debugger are listed below.  Most\ncommands can be abbreviated to one or two letters as indicated; e.g.\n``h(elp)`` means that either ``h`` or ``help`` can be used to enter\nthe help command (but not ``he`` or ``hel``, nor ``H`` or ``Help`` or\n``HELP``).  Arguments to commands must be separated by whitespace\n(spaces or tabs).  Optional arguments are enclosed in square brackets\n(``[]``) in the command syntax; the square brackets must not be typed.\nAlternatives in the command syntax are separated by a vertical bar\n(``|``).\n\nEntering a blank line repeats the last command entered.  Exception: if\nthe last command was a ``list`` command, the next 11 lines are listed.\n\nCommands that the debugger doesn\'t recognize are assumed to be Python\nstatements and are executed in the context of the program being\ndebugged.  Python statements can also be prefixed with an exclamation\npoint (``!``).  This is a powerful way to inspect the program being\ndebugged; it is even possible to change a variable or call a function.\nWhen an exception occurs in such a statement, the exception name is\nprinted but the debugger\'s state is not changed.\n\nThe debugger supports *aliases*.  Aliases can have parameters which\nallows one a certain level of adaptability to the context under\nexamination.\n\nMultiple commands may be entered on a single line, separated by\n``;;``.  (A single ``;`` is not used as it is the separator for\nmultiple commands in a line that is passed to the Python parser.)  No\nintelligence is applied to separating the commands; the input is split\nat the first ``;;`` pair, even if it is in the middle of a quoted\nstring.\n\nIf a file ``.pdbrc`` exists in the user\'s home directory or in the\ncurrent directory, it is read in and executed as if it had been typed\nat the debugger prompt.  This is particularly useful for aliases.  If\nboth files exist, the one in the home directory is read first and\naliases defined there can be overridden by the local file.\n\nChanged in version 3.2: ``.pdbrc`` can now contain commands that\ncontinue debugging, such as ``continue`` or ``next``.  Previously,\nthese commands had no effect.\n\nh(elp) [command]\n\n   Without argument, print the list of available commands.  With a\n   *command* as argument, print help about that command.  ``help pdb``\n   displays the full documentation (the docstring of the ``pdb``\n   module).  Since the *command* argument must be an identifier,\n   ``help exec`` must be entered to get help on the ``!`` command.\n\nw(here)\n\n   Print a stack trace, with the most recent frame at the bottom.  An\n   arrow indicates the current frame, which determines the context of\n   most commands.\n\nd(own) [count]\n\n   Move the current frame *count* (default one) levels down in the\n   stack trace (to a newer frame).\n\nu(p) [count]\n\n   Move the current frame *count* (default one) levels up in the stack\n   trace (to an older frame).\n\nb(reak) [([filename:]lineno | function) [, condition]]\n\n   With a *lineno* argument, set a break there in the current file.\n   With a *function* argument, set a break at the first executable\n   statement within that function.  The line number may be prefixed\n   with a filename and a colon, to specify a breakpoint in another\n   file (probably one that hasn\'t been loaded yet).  The file is\n   searched on ``sys.path``.  Note that each breakpoint is assigned a\n   number to which all the other breakpoint commands refer.\n\n   If a second argument is present, it is an expression which must\n   evaluate to true before the breakpoint is honored.\n\n   Without argument, list all breaks, including for each breakpoint,\n   the number of times that breakpoint has been hit, the current\n   ignore count, and the associated condition if any.\n\ntbreak [([filename:]lineno | function) [, condition]]\n\n   Temporary breakpoint, which is removed automatically when it is\n   first hit. The arguments are the same as for ``break``.\n\ncl(ear) [filename:lineno | bpnumber [bpnumber ...]]\n\n   With a *filename:lineno* argument, clear all the breakpoints at\n   this line. With a space separated list of breakpoint numbers, clear\n   those breakpoints. Without argument, clear all breaks (but first\n   ask confirmation).\n\ndisable [bpnumber [bpnumber ...]]\n\n   Disable the breakpoints given as a space separated list of\n   breakpoint numbers.  Disabling a breakpoint means it cannot cause\n   the program to stop execution, but unlike clearing a breakpoint, it\n   remains in the list of breakpoints and can be (re-)enabled.\n\nenable [bpnumber [bpnumber ...]]\n\n   Enable the breakpoints specified.\n\nignore bpnumber [count]\n\n   Set the ignore count for the given breakpoint number.  If count is\n   omitted, the ignore count is set to 0.  A breakpoint becomes active\n   when the ignore count is zero.  When non-zero, the count is\n   decremented each time the breakpoint is reached and the breakpoint\n   is not disabled and any associated condition evaluates to true.\n\ncondition bpnumber [condition]\n\n   Set a new *condition* for the breakpoint, an expression which must\n   evaluate to true before the breakpoint is honored.  If *condition*\n   is absent, any existing condition is removed; i.e., the breakpoint\n   is made unconditional.\n\ncommands [bpnumber]\n\n   Specify a list of commands for breakpoint number *bpnumber*.  The\n   commands themselves appear on the following lines.  Type a line\n   containing just ``end`` to terminate the commands. An example:\n\n      (Pdb) commands 1\n      (com) p some_variable\n      (com) end\n      (Pdb)\n\n   To remove all commands from a breakpoint, type commands and follow\n   it immediately with ``end``; that is, give no commands.\n\n   With no *bpnumber* argument, commands refers to the last breakpoint\n   set.\n\n   You can use breakpoint commands to start your program up again.\n   Simply use the continue command, or step, or any other command that\n   resumes execution.\n\n   Specifying any command resuming execution (currently continue,\n   step, next, return, jump, quit and their abbreviations) terminates\n   the command list (as if that command was immediately followed by\n   end). This is because any time you resume execution (even with a\n   simple next or step), you may encounter another breakpoint--which\n   could have its own command list, leading to ambiguities about which\n   list to execute.\n\n   If you use the \'silent\' command in the command list, the usual\n   message about stopping at a breakpoint is not printed.  This may be\n   desirable for breakpoints that are to print a specific message and\n   then continue.  If none of the other commands print anything, you\n   see no sign that the breakpoint was reached.\n\ns(tep)\n\n   Execute the current line, stop at the first possible occasion\n   (either in a function that is called or on the next line in the\n   current function).\n\nn(ext)\n\n   Continue execution until the next line in the current function is\n   reached or it returns.  (The difference between ``next`` and\n   ``step`` is that ``step`` stops inside a called function, while\n   ``next`` executes called functions at (nearly) full speed, only\n   stopping at the next line in the current function.)\n\nunt(il) [lineno]\n\n   Without argument, continue execution until the line with a number\n   greater than the current one is reached.\n\n   With a line number, continue execution until a line with a number\n   greater or equal to that is reached.  In both cases, also stop when\n   the current frame returns.\n\n   Changed in version 3.2: Allow giving an explicit line number.\n\nr(eturn)\n\n   Continue execution until the current function returns.\n\nc(ont(inue))\n\n   Continue execution, only stop when a breakpoint is encountered.\n\nj(ump) lineno\n\n   Set the next line that will be executed.  Only available in the\n   bottom-most frame.  This lets you jump back and execute code again,\n   or jump forward to skip code that you don\'t want to run.\n\n   It should be noted that not all jumps are allowed -- for instance\n   it is not possible to jump into the middle of a ``for`` loop or out\n   of a ``finally`` clause.\n\nl(ist) [first[, last]]\n\n   List source code for the current file.  Without arguments, list 11\n   lines around the current line or continue the previous listing.\n   With ``.`` as argument, list 11 lines around the current line.\n   With one argument, list 11 lines around at that line.  With two\n   arguments, list the given range; if the second argument is less\n   than the first, it is interpreted as a count.\n\n   The current line in the current frame is indicated by ``->``.  If\n   an exception is being debugged, the line where the exception was\n   originally raised or propagated is indicated by ``>>``, if it\n   differs from the current line.\n\n   New in version 3.2: The ``>>`` marker.\n\nll | longlist\n\n   List all source code for the current function or frame.\n   Interesting lines are marked as for ``list``.\n\n   New in version 3.2.\n\na(rgs)\n\n   Print the argument list of the current function.\n\np expression\n\n   Evaluate the *expression* in the current context and print its\n   value.\n\n   Note: ``print()`` can also be used, but is not a debugger command ---\n     this executes the Python ``print()`` function.\n\npp expression\n\n   Like the ``p`` command, except the value of the expression is\n   pretty-printed using the ``pprint`` module.\n\nwhatis expression\n\n   Print the type of the *expression*.\n\nsource expression\n\n   Try to get source code for the given object and display it.\n\n   New in version 3.2.\n\ndisplay [expression]\n\n   Display the value of the expression if it changed, each time\n   execution stops in the current frame.\n\n   Without expression, list all display expressions for the current\n   frame.\n\n   New in version 3.2.\n\nundisplay [expression]\n\n   Do not display the expression any more in the current frame.\n   Without expression, clear all display expressions for the current\n   frame.\n\n   New in version 3.2.\n\ninteract\n\n   Start an interative interpreter (using the ``code`` module) whose\n   global namespace contains all the (global and local) names found in\n   the current scope.\n\n   New in version 3.2.\n\nalias [name [command]]\n\n   Create an alias called *name* that executes *command*.  The command\n   must *not* be enclosed in quotes.  Replaceable parameters can be\n   indicated by ``%1``, ``%2``, and so on, while ``%*`` is replaced by\n   all the parameters. If no command is given, the current alias for\n   *name* is shown. If no arguments are given, all aliases are listed.\n\n   Aliases may be nested and can contain anything that can be legally\n   typed at the pdb prompt.  Note that internal pdb commands *can* be\n   overridden by aliases.  Such a command is then hidden until the\n   alias is removed.  Aliasing is recursively applied to the first\n   word of the command line; all other words in the line are left\n   alone.\n\n   As an example, here are two useful aliases (especially when placed\n   in the ``.pdbrc`` file):\n\n      # Print instance variables (usage "pi classInst")\n      alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k])\n      # Print instance variables in self\n      alias ps pi self\n\nunalias name\n\n   Delete the specified alias.\n\n! statement\n\n   Execute the (one-line) *statement* in the context of the current\n   stack frame. The exclamation point can be omitted unless the first\n   word of the statement resembles a debugger command.  To set a\n   global variable, you can prefix the assignment command with a\n   ``global`` statement on the same line, e.g.:\n\n      (Pdb) global list_options; list_options = [\'-l\']\n      (Pdb)\n\nrun [args ...]\nrestart [args ...]\n\n   Restart the debugged Python program.  If an argument is supplied,\n   it is split with ``shlex`` and the result is used as the new\n   ``sys.argv``. History, breakpoints, actions and debugger options\n   are preserved. ``restart`` is an alias for ``run``.\n\nq(uit)\n\n   Quit from the debugger.  The program being executed is aborted.\n\n-[ Footnotes ]-\n\n[1] Whether a frame is considered to originate in a certain module is\n    determined by the ``__name__`` in the frame globals.\n',
  'del': '\nThe ``del`` statement\n*********************\n\n   del_stmt ::= "del" target_list\n\nDeletion is recursively defined very similar to the way assignment is\ndefined. Rather than spelling it out in full details, here are some\nhints.\n\nDeletion of a target list recursively deletes each target, from left\nto right.\n\nDeletion of a name removes the binding of that name from the local or\nglobal namespace, depending on whether the name occurs in a ``global``\nstatement in the same code block.  If the name is unbound, a\n``NameError`` exception will be raised.\n\nDeletion of attribute references, subscriptions and slicings is passed\nto the primary object involved; deletion of a slicing is in general\nequivalent to assignment of an empty slice of the right type (but even\nthis is determined by the sliced object).\n\nChanged in version 3.2: Previously it was illegal to delete a name\nfrom the local namespace if it occurs as a free variable in a nested\nblock.\n',
  'dict': '\nDictionary displays\n*******************\n\nA dictionary display is a possibly empty series of key/datum pairs\nenclosed in curly braces:\n\n   dict_display       ::= "{" [key_datum_list | dict_comprehension] "}"\n   key_datum_list     ::= key_datum ("," key_datum)* [","]\n   key_datum          ::= expression ":" expression\n   dict_comprehension ::= expression ":" expression comp_for\n\nA dictionary display yields a new dictionary object.\n\nIf a comma-separated sequence of key/datum pairs is given, they are\nevaluated from left to right to define the entries of the dictionary:\neach key object is used as a key into the dictionary to store the\ncorresponding datum.  This means that you can specify the same key\nmultiple times in the key/datum list, and the final dictionary\'s value\nfor that key will be the last one given.\n\nA dict comprehension, in contrast to list and set comprehensions,\nneeds two expressions separated with a colon followed by the usual\n"for" and "if" clauses. When the comprehension is run, the resulting\nkey and value elements are inserted in the new dictionary in the order\nthey are produced.\n\nRestrictions on the types of the key values are listed earlier in\nsection *The standard type hierarchy*.  (To summarize, the key type\nshould be *hashable*, which excludes all mutable objects.)  Clashes\nbetween duplicate keys are not detected; the last datum (textually\nrightmost in the display) stored for a given key value prevails.\n',
  'dynamic-features': '\nInteraction with dynamic features\n*********************************\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name.  An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nThe ``eval()`` and ``exec()`` functions do not have access to the full\nenvironment for resolving names.  Names may be resolved in the local\nand global namespaces of the caller.  Free variables are not resolved\nin the nearest enclosing namespace, but in the global namespace.  [1]\nThe ``exec()`` and ``eval()`` functions have optional arguments to\noverride the global and local namespace.  If only one namespace is\nspecified, it is used for both.\n',
@@ -35,7 +35,7 @@
  'floating': '\nFloating point literals\n***********************\n\nFloating point literals are described by the following lexical\ndefinitions:\n\n   floatnumber   ::= pointfloat | exponentfloat\n   pointfloat    ::= [intpart] fraction | intpart "."\n   exponentfloat ::= (intpart | pointfloat) exponent\n   intpart       ::= digit+\n   fraction      ::= "." digit+\n   exponent      ::= ("e" | "E") ["+" | "-"] digit+\n\nNote that the integer and exponent parts are always interpreted using\nradix 10. For example, ``077e010`` is legal, and denotes the same\nnumber as ``77e10``. The allowed range of floating point literals is\nimplementation-dependent. Some examples of floating point literals:\n\n   3.14    10.    .001    1e100    3.14e-10    0e0\n\nNote that numeric literals do not include a sign; a phrase like ``-1``\nis actually an expression composed of the unary operator ``-`` and the\nliteral ``1``.\n',
  'for': '\nThe ``for`` statement\n*********************\n\nThe ``for`` statement is used to iterate over the elements of a\nsequence (such as a string, tuple or list) or other iterable object:\n\n   for_stmt ::= "for" target_list "in" expression_list ":" suite\n                ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject.  An iterator is created for the result of the\n``expression_list``.  The suite is then executed once for each item\nprovided by the iterator, in the order of ascending indices.  Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments (see *Assignment statements*), and then the suite is\nexecuted.  When the items are exhausted (which is immediately when the\nsequence is empty or an iterator raises a ``StopIteration``\nexception), the suite in the ``else`` clause, if present, is executed,\nand the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite.  A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ncontinues with the next item, or with the ``else`` clause if there was\nno next item.\n\nThe suite may assign to the variable(s) in the target list; this does\nnot affect the next item assigned to it.\n\nNames in the target list are not deleted when the loop is finished,\nbut if the sequence is empty, it will not have been assigned to at all\nby the loop.  Hint: the built-in function ``range()`` returns an\niterator of integers suitable to emulate the effect of Pascal\'s ``for\ni := a to b do``; e.g., ``list(range(3))`` returns the list ``[0, 1,\n2]``.\n\nNote: There is a subtlety when the sequence is being modified by the loop\n  (this can only occur for mutable sequences, i.e. lists).  An\n  internal counter is used to keep track of which item is used next,\n  and this is incremented on each iteration.  When this counter has\n  reached the length of the sequence the loop terminates.  This means\n  that if the suite deletes the current (or a previous) item from the\n  sequence, the next item will be skipped (since it gets the index of\n  the current item which has already been treated).  Likewise, if the\n  suite inserts an item in the sequence before the current item, the\n  current item will be treated again the next time through the loop.\n  This can lead to nasty bugs that can be avoided by making a\n  temporary copy using a slice of the whole sequence, e.g.,\n\n     for x in a[:]:\n         if x < 0: a.remove(x)\n',
  'formatstrings': '\nFormat String Syntax\n********************\n\nThe ``str.format()`` method and the ``Formatter`` class share the same\nsyntax for format strings (although in the case of ``Formatter``,\nsubclasses can define their own format string syntax).\n\nFormat strings contain "replacement fields" surrounded by curly braces\n``{}``. Anything that is not contained in braces is considered literal\ntext, which is copied unchanged to the output.  If you need to include\na brace character in the literal text, it can be escaped by doubling:\n``{{`` and ``}}``.\n\nThe grammar for a replacement field is as follows:\n\n      replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"\n      field_name        ::= arg_name ("." attribute_name | "[" element_index "]")*\n      arg_name          ::= [identifier | integer]\n      attribute_name    ::= identifier\n      element_index     ::= integer | index_string\n      index_string      ::= <any source character except "]"> +\n      conversion        ::= "r" | "s" | "a"\n      format_spec       ::= <described in the next section>\n\nIn less formal terms, the replacement field can start with a\n*field_name* that specifies the object whose value is to be formatted\nand inserted into the output instead of the replacement field. The\n*field_name* is optionally followed by a  *conversion* field, which is\npreceded by an exclamation point ``\'!\'``, and a *format_spec*, which\nis preceded by a colon ``\':\'``.  These specify a non-default format\nfor the replacement value.\n\nSee also the *Format Specification Mini-Language* section.\n\nThe *field_name* itself begins with an *arg_name* that is either a\nnumber or a keyword.  If it\'s a number, it refers to a positional\nargument, and if it\'s a keyword, it refers to a named keyword\nargument.  If the numerical arg_names in a format string are 0, 1, 2,\n... in sequence, they can all be omitted (not just some) and the\nnumbers 0, 1, 2, ... will be automatically inserted in that order.\nBecause *arg_name* is not quote-delimited, it is not possible to\nspecify arbitrary dictionary keys (e.g., the strings ``\'10\'`` or\n``\':-]\'``) within a format string. The *arg_name* can be followed by\nany number of index or attribute expressions. An expression of the\nform ``\'.name\'`` selects the named attribute using ``getattr()``,\nwhile an expression of the form ``\'[index]\'`` does an index lookup\nusing ``__getitem__()``.\n\nChanged in version 3.1: The positional argument specifiers can be\nomitted, so ``\'{} {}\'`` is equivalent to ``\'{0} {1}\'``.\n\nSome simple format string examples:\n\n   "First, thou shalt count to {0}" # References first positional argument\n   "Bring me a {}"                  # Implicitly references the first positional argument\n   "From {} to {}"                  # Same as "From {0} to {1}"\n   "My quest is {name}"             # References keyword argument \'name\'\n   "Weight in tons {0.weight}"      # \'weight\' attribute of first positional arg\n   "Units destroyed: {players[0]}"  # First element of keyword argument \'players\'.\n\nThe *conversion* field causes a type coercion before formatting.\nNormally, the job of formatting a value is done by the\n``__format__()`` method of the value itself.  However, in some cases\nit is desirable to force a type to be formatted as a string,\noverriding its own definition of formatting.  By converting the value\nto a string before calling ``__format__()``, the normal formatting\nlogic is bypassed.\n\nThree conversion flags are currently supported: ``\'!s\'`` which calls\n``str()`` on the value, ``\'!r\'`` which calls ``repr()`` and ``\'!a\'``\nwhich calls ``ascii()``.\n\nSome examples:\n\n   "Harold\'s a clever {0!s}"        # Calls str() on the argument first\n   "Bring out the holy {name!r}"    # Calls repr() on the argument first\n   "More {!a}"                      # Calls ascii() on the argument first\n\nThe *format_spec* field contains a specification of how the value\nshould be presented, including such details as field width, alignment,\npadding, decimal precision and so on.  Each value type can define its\nown "formatting mini-language" or interpretation of the *format_spec*.\n\nMost built-in types support a common formatting mini-language, which\nis described in the next section.\n\nA *format_spec* field can also include nested replacement fields\nwithin it. These nested replacement fields can contain only a field\nname; conversion flags and format specifications are not allowed.  The\nreplacement fields within the format_spec are substituted before the\n*format_spec* string is interpreted. This allows the formatting of a\nvalue to be dynamically specified.\n\nSee the *Format examples* section for some examples.\n\n\nFormat Specification Mini-Language\n==================================\n\n"Format specifications" are used within replacement fields contained\nwithin a format string to define how individual values are presented\n(see *Format String Syntax*).  They can also be passed directly to the\nbuilt-in ``format()`` function.  Each formattable type may define how\nthe format specification is to be interpreted.\n\nMost built-in types implement the following options for format\nspecifications, although some of the formatting options are only\nsupported by the numeric types.\n\nA general convention is that an empty format string (``""``) produces\nthe same result as if you had called ``str()`` on the value. A non-\nempty format string typically modifies the result.\n\nThe general form of a *standard format specifier* is:\n\n   format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]\n   fill        ::= <a character other than \'{\' or \'}\'>\n   align       ::= "<" | ">" | "=" | "^"\n   sign        ::= "+" | "-" | " "\n   width       ::= integer\n   precision   ::= integer\n   type        ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n\nThe *fill* character can be any character other than \'{\' or \'}\'.  The\npresence of a fill character is signaled by the character following\nit, which must be one of the alignment options.  If the second\ncharacter of *format_spec* is not a valid alignment option, then it is\nassumed that both the fill character and the alignment option are\nabsent.\n\nThe meaning of the various alignment options is as follows:\n\n   +-----------+------------------------------------------------------------+\n   | Option    | Meaning                                                    |\n   +===========+============================================================+\n   | ``\'<\'``   | Forces the field to be left-aligned within the available   |\n   |           | space (this is the default for most objects).              |\n   +-----------+------------------------------------------------------------+\n   | ``\'>\'``   | Forces the field to be right-aligned within the available  |\n   |           | space (this is the default for numbers).                   |\n   +-----------+------------------------------------------------------------+\n   | ``\'=\'``   | Forces the padding to be placed after the sign (if any)    |\n   |           | but before the digits.  This is used for printing fields   |\n   |           | in the form \'+000000120\'. This alignment option is only    |\n   |           | valid for numeric types.                                   |\n   +-----------+------------------------------------------------------------+\n   | ``\'^\'``   | Forces the field to be centered within the available       |\n   |           | space.                                                     |\n   +-----------+------------------------------------------------------------+\n\nNote that unless a minimum field width is defined, the field width\nwill always be the same size as the data to fill it, so that the\nalignment option has no meaning in this case.\n\nThe *sign* option is only valid for number types, and can be one of\nthe following:\n\n   +-----------+------------------------------------------------------------+\n   | Option    | Meaning                                                    |\n   +===========+============================================================+\n   | ``\'+\'``   | indicates that a sign should be used for both positive as  |\n   |           | well as negative numbers.                                  |\n   +-----------+------------------------------------------------------------+\n   | ``\'-\'``   | indicates that a sign should be used only for negative     |\n   |           | numbers (this is the default behavior).                    |\n   +-----------+------------------------------------------------------------+\n   | space     | indicates that a leading space should be used on positive  |\n   |           | numbers, and a minus sign on negative numbers.             |\n   +-----------+------------------------------------------------------------+\n\nThe ``\'#\'`` option causes the "alternate form" to be used for the\nconversion.  The alternate form is defined differently for different\ntypes.  This option is only valid for integer, float, complex and\nDecimal types. For integers, when binary, octal, or hexadecimal output\nis used, this option adds the prefix respective ``\'0b\'``, ``\'0o\'``, or\n``\'0x\'`` to the output value. For floats, complex and Decimal the\nalternate form causes the result of the conversion to always contain a\ndecimal-point character, even if no digits follow it. Normally, a\ndecimal-point character appears in the result of these conversions\nonly if a digit follows it. In addition, for ``\'g\'`` and ``\'G\'``\nconversions, trailing zeros are not removed from the result.\n\nThe ``\',\'`` option signals the use of a comma for a thousands\nseparator. For a locale aware separator, use the ``\'n\'`` integer\npresentation type instead.\n\nChanged in version 3.1: Added the ``\',\'`` option (see also **PEP\n378**).\n\n*width* is a decimal integer defining the minimum field width.  If not\nspecified, then the field width will be determined by the content.\n\nPreceding the *width* field by a zero (``\'0\'``) character enables\nsign-aware zero-padding for numeric types.  This is equivalent to a\n*fill* character of ``\'0\'`` with an *alignment* type of ``\'=\'``.\n\nThe *precision* is a decimal number indicating how many digits should\nbe displayed after the decimal point for a floating point value\nformatted with ``\'f\'`` and ``\'F\'``, or before and after the decimal\npoint for a floating point value formatted with ``\'g\'`` or ``\'G\'``.\nFor non-number types the field indicates the maximum field size - in\nother words, how many characters will be used from the field content.\nThe *precision* is not allowed for integer values.\n\nFinally, the *type* determines how the data should be presented.\n\nThe available string presentation types are:\n\n   +-----------+------------------------------------------------------------+\n   | Type      | Meaning                                                    |\n   +===========+============================================================+\n   | ``\'s\'``   | String format. This is the default type for strings and    |\n   |           | may be omitted.                                            |\n   +-----------+------------------------------------------------------------+\n   | None      | The same as ``\'s\'``.                                       |\n   +-----------+------------------------------------------------------------+\n\nThe available integer presentation types are:\n\n   +-----------+------------------------------------------------------------+\n   | Type      | Meaning                                                    |\n   +===========+============================================================+\n   | ``\'b\'``   | Binary format. Outputs the number in base 2.               |\n   +-----------+------------------------------------------------------------+\n   | ``\'c\'``   | Character. Converts the integer to the corresponding       |\n   |           | unicode character before printing.                         |\n   +-----------+------------------------------------------------------------+\n   | ``\'d\'``   | Decimal Integer. Outputs the number in base 10.            |\n   +-----------+------------------------------------------------------------+\n   | ``\'o\'``   | Octal format. Outputs the number in base 8.                |\n   +-----------+------------------------------------------------------------+\n   | ``\'x\'``   | Hex format. Outputs the number in base 16, using lower-    |\n   |           | case letters for the digits above 9.                       |\n   +-----------+------------------------------------------------------------+\n   | ``\'X\'``   | Hex format. Outputs the number in base 16, using upper-    |\n   |           | case letters for the digits above 9.                       |\n   +-----------+------------------------------------------------------------+\n   | ``\'n\'``   | Number. This is the same as ``\'d\'``, except that it uses   |\n   |           | the current locale setting to insert the appropriate       |\n   |           | number separator characters.                               |\n   +-----------+------------------------------------------------------------+\n   | None      | The same as ``\'d\'``.                                       |\n   +-----------+------------------------------------------------------------+\n\nIn addition to the above presentation types, integers can be formatted\nwith the floating point presentation types listed below (except\n``\'n\'`` and None). When doing so, ``float()`` is used to convert the\ninteger to a floating point number before formatting.\n\nThe available presentation types for floating point and decimal values\nare:\n\n   +-----------+------------------------------------------------------------+\n   | Type      | Meaning                                                    |\n   +===========+============================================================+\n   | ``\'e\'``   | Exponent notation. Prints the number in scientific         |\n   |           | notation using the letter \'e\' to indicate the exponent.    |\n   |           | The default precision is ``6``.                            |\n   +-----------+------------------------------------------------------------+\n   | ``\'E\'``   | Exponent notation. Same as ``\'e\'`` except it uses an upper |\n   |           | case \'E\' as the separator character.                       |\n   +-----------+------------------------------------------------------------+\n   | ``\'f\'``   | Fixed point. Displays the number as a fixed-point number.  |\n   |           | The default precision is ``6``.                            |\n   +-----------+------------------------------------------------------------+\n   | ``\'F\'``   | Fixed point. Same as ``\'f\'``, but converts ``nan`` to      |\n   |           | ``NAN`` and ``inf`` to ``INF``.                            |\n   +-----------+------------------------------------------------------------+\n   | ``\'g\'``   | General format.  For a given precision ``p >= 1``, this    |\n   |           | rounds the number to ``p`` significant digits and then     |\n   |           | formats the result in either fixed-point format or in      |\n   |           | scientific notation, depending on its magnitude.  The      |\n   |           | precise rules are as follows: suppose that the result      |\n   |           | formatted with presentation type ``\'e\'`` and precision     |\n   |           | ``p-1`` would have exponent ``exp``.  Then if ``-4 <= exp  |\n   |           | < p``, the number is formatted with presentation type      |\n   |           | ``\'f\'`` and precision ``p-1-exp``. Otherwise, the number   |\n   |           | is formatted with presentation type ``\'e\'`` and precision  |\n   |           | ``p-1``. In both cases insignificant trailing zeros are    |\n   |           | removed from the significand, and the decimal point is     |\n   |           | also removed if there are no remaining digits following    |\n   |           | it.  Positive and negative infinity, positive and negative |\n   |           | zero, and nans, are formatted as ``inf``, ``-inf``, ``0``, |\n   |           | ``-0`` and ``nan`` respectively, regardless of the         |\n   |           | precision.  A precision of ``0`` is treated as equivalent  |\n   |           | to a precision of ``1``.  The default precision is ``6``.  |\n   +-----------+------------------------------------------------------------+\n   | ``\'G\'``   | General format. Same as ``\'g\'`` except switches to ``\'E\'`` |\n   |           | if the number gets too large. The representations of       |\n   |           | infinity and NaN are uppercased, too.                      |\n   +-----------+------------------------------------------------------------+\n   | ``\'n\'``   | Number. This is the same as ``\'g\'``, except that it uses   |\n   |           | the current locale setting to insert the appropriate       |\n   |           | number separator characters.                               |\n   +-----------+------------------------------------------------------------+\n   | ``\'%\'``   | Percentage. Multiplies the number by 100 and displays in   |\n   |           | fixed (``\'f\'``) format, followed by a percent sign.        |\n   +-----------+------------------------------------------------------------+\n   | None      | Similar to ``\'g\'``, except with at least one digit past    |\n   |           | the decimal point and a default precision of 12. This is   |\n   |           | intended to match ``str()``, except you can add the other  |\n   |           | format modifiers.                                          |\n   +-----------+------------------------------------------------------------+\n\n\nFormat examples\n===============\n\nThis section contains examples of the new format syntax and comparison\nwith the old ``%``-formatting.\n\nIn most of the cases the syntax is similar to the old\n``%``-formatting, with the addition of the ``{}`` and with ``:`` used\ninstead of ``%``. For example, ``\'%03.2f\'`` can be translated to\n``\'{:03.2f}\'``.\n\nThe new format syntax also supports new and different options, shown\nin the follow examples.\n\nAccessing arguments by position:\n\n   >>> \'{0}, {1}, {2}\'.format(\'a\', \'b\', \'c\')\n   \'a, b, c\'\n   >>> \'{}, {}, {}\'.format(\'a\', \'b\', \'c\')  # 3.1+ only\n   \'a, b, c\'\n   >>> \'{2}, {1}, {0}\'.format(\'a\', \'b\', \'c\')\n   \'c, b, a\'\n   >>> \'{2}, {1}, {0}\'.format(*\'abc\')      # unpacking argument sequence\n   \'c, b, a\'\n   >>> \'{0}{1}{0}\'.format(\'abra\', \'cad\')   # arguments\' indices can be repeated\n   \'abracadabra\'\n\nAccessing arguments by name:\n\n   >>> \'Coordinates: {latitude}, {longitude}\'.format(latitude=\'37.24N\', longitude=\'-115.81W\')\n   \'Coordinates: 37.24N, -115.81W\'\n   >>> coord = {\'latitude\': \'37.24N\', \'longitude\': \'-115.81W\'}\n   >>> \'Coordinates: {latitude}, {longitude}\'.format(**coord)\n   \'Coordinates: 37.24N, -115.81W\'\n\nAccessing arguments\' attributes:\n\n   >>> c = 3-5j\n   >>> (\'The complex number {0} is formed from the real part {0.real} \'\n   ...  \'and the imaginary part {0.imag}.\').format(c)\n   \'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.\'\n   >>> class Point:\n   ...     def __init__(self, x, y):\n   ...         self.x, self.y = x, y\n   ...     def __str__(self):\n   ...         return \'Point({self.x}, {self.y})\'.format(self=self)\n   ...\n   >>> str(Point(4, 2))\n   \'Point(4, 2)\'\n\nAccessing arguments\' items:\n\n   >>> coord = (3, 5)\n   >>> \'X: {0[0]};  Y: {0[1]}\'.format(coord)\n   \'X: 3;  Y: 5\'\n\nReplacing ``%s`` and ``%r``:\n\n   >>> "repr() shows quotes: {!r}; str() doesn\'t: {!s}".format(\'test1\', \'test2\')\n   "repr() shows quotes: \'test1\'; str() doesn\'t: test2"\n\nAligning the text and specifying a width:\n\n   >>> \'{:<30}\'.format(\'left aligned\')\n   \'left aligned                  \'\n   >>> \'{:>30}\'.format(\'right aligned\')\n   \'                 right aligned\'\n   >>> \'{:^30}\'.format(\'centered\')\n   \'           centered           \'\n   >>> \'{:*^30}\'.format(\'centered\')  # use \'*\' as a fill char\n   \'***********centered***********\'\n\nReplacing ``%+f``, ``%-f``, and ``% f`` and specifying a sign:\n\n   >>> \'{:+f}; {:+f}\'.format(3.14, -3.14)  # show it always\n   \'+3.140000; -3.140000\'\n   >>> \'{: f}; {: f}\'.format(3.14, -3.14)  # show a space for positive numbers\n   \' 3.140000; -3.140000\'\n   >>> \'{:-f}; {:-f}\'.format(3.14, -3.14)  # show only the minus -- same as \'{:f}; {:f}\'\n   \'3.140000; -3.140000\'\n\nReplacing ``%x`` and ``%o`` and converting the value to different\nbases:\n\n   >>> # format also supports binary numbers\n   >>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)\n   \'int: 42;  hex: 2a;  oct: 52;  bin: 101010\'\n   >>> # with 0x, 0o, or 0b as prefix:\n   >>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)\n   \'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010\'\n\nUsing the comma as a thousands separator:\n\n   >>> \'{:,}\'.format(1234567890)\n   \'1,234,567,890\'\n\nExpressing a percentage:\n\n   >>> points = 19\n   >>> total = 22\n   >>> \'Correct answers: {:.2%}\'.format(points/total)\n   \'Correct answers: 86.36%\'\n\nUsing type-specific formatting:\n\n   >>> import datetime\n   >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)\n   >>> \'{:%Y-%m-%d %H:%M:%S}\'.format(d)\n   \'2010-07-04 12:15:58\'\n\nNesting arguments and more complex examples:\n\n   >>> for align, text in zip(\'<^>\', [\'left\', \'center\', \'right\']):\n   ...     \'{0:{fill}{align}16}\'.format(text, fill=align, align=align)\n   ...\n   \'left<<<<<<<<<<<<\'\n   \'^^^^^center^^^^^\'\n   \'>>>>>>>>>>>right\'\n   >>>\n   >>> octets = [192, 168, 0, 1]\n   >>> \'{:02X}{:02X}{:02X}{:02X}\'.format(*octets)\n   \'C0A80001\'\n   >>> int(_, 16)\n   3232235521\n   >>>\n   >>> width = 5\n   >>> for num in range(5,12): #doctest: +NORMALIZE_WHITESPACE\n   ...     for base in \'dXob\':\n   ...         print(\'{0:{width}{base}}\'.format(num, base=base, width=width), end=\' \')\n   ...     print()\n   ...\n       5     5     5   101\n       6     6     6   110\n       7     7     7   111\n       8     8    10  1000\n       9     9    11  1001\n      10     A    12  1010\n      11     B    13  1011\n',
- 'function': '\nFunction definitions\n********************\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n   funcdef        ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n   decorators     ::= decorator+\n   decorator      ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE\n   dotted_name    ::= identifier ("." identifier)*\n   parameter_list ::= (defparameter ",")*\n                      ( "*" [parameter] ("," defparameter)* ["," "**" parameter]\n                      | "**" parameter\n                      | defparameter [","] )\n   parameter      ::= identifier [":" expression]\n   defparameter   ::= parameter ["=" expression]\n   funcname       ::= identifier\n\nA function definition is an executable statement.  Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function).  This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition.  The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object.  Multiple decorators are applied in\nnested fashion. For example, the following code\n\n   @f1(arg)\n   @f2\n   def func(): pass\n\nis equivalent to\n\n   def func(): pass\n   func = f1(arg)(f2(func))\n\nWhen one or more *parameters* have the form *parameter* ``=``\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted.  If a parameter has a default value, all following\nparameters up until the "``*``" must also have a default value ---\nthis is a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call.  This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended.  A way around this is to use\n``None`` as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n   def whats_on_the_telly(penguin=None):\n       if penguin is None:\n           penguin = []\n       penguin.append("property of the zoo")\n       return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values.  If the form\n"``*identifier``" is present, it is initialized to a tuple receiving\nany excess positional parameters, defaulting to the empty tuple.  If\nthe form "``**identifier``" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after "``*``" or "``*identifier``" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "``: expression``"\nfollowing the parameter name.  Any parameter may have an annotation\neven those of the form ``*identifier`` or ``**identifier``.  Functions\nmay have "return" annotation of the form "``-> expression``" after the\nparameter list.  These annotations can be any valid Python expression\nand are evaluated when the function definition is executed.\nAnnotations may be evaluated in a different order than they appear in\nthe source code.  The presence of annotations does not change the\nsemantics of a function.  The annotation values are available as\nvalues of a dictionary keyed by the parameters\' names in the\n``__annotations__`` attribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions.  This uses lambda forms,\ndescribed in section *Lambdas*.  Note that the lambda form is merely a\nshorthand for a simplified function definition; a function defined in\na "``def``" statement can be passed around or assigned to another name\njust like a function defined by a lambda form.  The "``def``" form is\nactually more powerful since it allows the execution of multiple\nstatements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects.  A "``def``"\nform executed inside a function definition defines a local function\nthat can be returned or passed around.  Free variables used in the\nnested function can access the local variables of the function\ncontaining the def.  See section *Naming and binding* for details.\n\nSee also:\n\n   **PEP 3107** - Function Annotations\n      The original specification for function annotations.\n',
+ 'function': '\nFunction definitions\n********************\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n   funcdef        ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n   decorators     ::= decorator+\n   decorator      ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE\n   dotted_name    ::= identifier ("." identifier)*\n   parameter_list ::= (defparameter ",")*\n                      ( "*" [parameter] ("," defparameter)* ["," "**" parameter]\n                      | "**" parameter\n                      | defparameter [","] )\n   parameter      ::= identifier [":" expression]\n   defparameter   ::= parameter ["=" expression]\n   funcname       ::= identifier\n\nA function definition is an executable statement.  Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function).  This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition.  The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object.  Multiple decorators are applied in\nnested fashion. For example, the following code\n\n   @f1(arg)\n   @f2\n   def func(): pass\n\nis equivalent to\n\n   def func(): pass\n   func = f1(arg)(f2(func))\n\nWhen one or more *parameters* have the form *parameter* ``=``\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted.  If a parameter has a default value, all following\nparameters up until the "``*``" must also have a default value ---\nthis is a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call.  This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended.  A way around this is to use\n``None`` as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n   def whats_on_the_telly(penguin=None):\n       if penguin is None:\n           penguin = []\n       penguin.append("property of the zoo")\n       return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values.  If the form\n"``*identifier``" is present, it is initialized to a tuple receiving\nany excess positional parameters, defaulting to the empty tuple.  If\nthe form "``**identifier``" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after "``*``" or "``*identifier``" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "``: expression``"\nfollowing the parameter name.  Any parameter may have an annotation\neven those of the form ``*identifier`` or ``**identifier``.  Functions\nmay have "return" annotation of the form "``-> expression``" after the\nparameter list.  These annotations can be any valid Python expression\nand are evaluated when the function definition is executed.\nAnnotations may be evaluated in a different order than they appear in\nthe source code.  The presence of annotations does not change the\nsemantics of a function.  The annotation values are available as\nvalues of a dictionary keyed by the parameters\' names in the\n``__annotations__`` attribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions.  This uses lambda\nexpressions, described in section *Lambdas*.  Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a "``def``" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression.  The "``def``" form is actually more powerful since it\nallows the execution of multiple statements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects.  A "``def``"\nstatement executed inside a function definition defines a local\nfunction that can be returned or passed around.  Free variables used\nin the nested function can access the local variables of the function\ncontaining the def.  See section *Naming and binding* for details.\n\nSee also:\n\n   **PEP 3107** - Function Annotations\n      The original specification for function annotations.\n',
  'global': '\nThe ``global`` statement\n************************\n\n   global_stmt ::= "global" identifier ("," identifier)*\n\nThe ``global`` statement is a declaration which holds for the entire\ncurrent code block.  It means that the listed identifiers are to be\ninterpreted as globals.  It would be impossible to assign to a global\nvariable without ``global``, although free variables may refer to\nglobals without being declared global.\n\nNames listed in a ``global`` statement must not be used in the same\ncode block textually preceding that ``global`` statement.\n\nNames listed in a ``global`` statement must not be defined as formal\nparameters or in a ``for`` loop control target, ``class`` definition,\nfunction definition, or ``import`` statement.\n\n**CPython implementation detail:** The current implementation does not\nenforce the latter two restrictions, but programs should not abuse\nthis freedom, as future implementations may enforce them or silently\nchange the meaning of the program.\n\n**Programmer\'s note:** the ``global`` is a directive to the parser.\nIt applies only to code parsed at the same time as the ``global``\nstatement. In particular, a ``global`` statement contained in a string\nor code object supplied to the built-in ``exec()`` function does not\naffect the code block *containing* the function call, and code\ncontained in such a string is unaffected by ``global`` statements in\nthe code containing the function call.  The same applies to the\n``eval()`` and ``compile()`` functions.\n',
  'id-classes': '\nReserved classes of identifiers\n*******************************\n\nCertain classes of identifiers (besides keywords) have special\nmeanings.  These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n``_*``\n   Not imported by ``from module import *``.  The special identifier\n   ``_`` is used in the interactive interpreter to store the result of\n   the last evaluation; it is stored in the ``builtins`` module.  When\n   not in interactive mode, ``_`` has no special meaning and is not\n   defined. See section *The import statement*.\n\n   Note: The name ``_`` is often used in conjunction with\n     internationalization; refer to the documentation for the\n     ``gettext`` module for more information on this convention.\n\n``__*__``\n   System-defined names. These names are defined by the interpreter\n   and its implementation (including the standard library).  Current\n   system names are discussed in the *Special method names* section\n   and elsewhere.  More will likely be defined in future versions of\n   Python.  *Any* use of ``__*__`` names, in any context, that does\n   not follow explicitly documented use, is subject to breakage\n   without warning.\n\n``__*``\n   Class-private names.  Names in this category, when used within the\n   context of a class definition, are re-written to use a mangled form\n   to help avoid name clashes between "private" attributes of base and\n   derived classes. See section *Identifiers (Names)*.\n',
  'identifiers': '\nIdentifiers and keywords\n************************\n\nIdentifiers (also referred to as *names*) are described by the\nfollowing lexical definitions.\n\nThe syntax of identifiers in Python is based on the Unicode standard\nannex UAX-31, with elaboration and changes as defined below; see also\n**PEP 3131** for further details.\n\nWithin the ASCII range (U+0001..U+007F), the valid characters for\nidentifiers are the same as in Python 2.x: the uppercase and lowercase\nletters ``A`` through ``Z``, the underscore ``_`` and, except for the\nfirst character, the digits ``0`` through ``9``.\n\nPython 3.0 introduces additional characters from outside the ASCII\nrange (see **PEP 3131**).  For these characters, the classification\nuses the version of the Unicode Character Database as included in the\n``unicodedata`` module.\n\nIdentifiers are unlimited in length.  Case is significant.\n\n   identifier   ::= xid_start xid_continue*\n   id_start     ::= <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>\n   id_continue  ::= <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>\n   xid_start    ::= <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">\n   xid_continue ::= <all characters in id_continue whose NFKC normalization is in "id_continue*">\n\nThe Unicode category codes mentioned above stand for:\n\n* *Lu* - uppercase letters\n\n* *Ll* - lowercase letters\n\n* *Lt* - titlecase letters\n\n* *Lm* - modifier letters\n\n* *Lo* - other letters\n\n* *Nl* - letter numbers\n\n* *Mn* - nonspacing marks\n\n* *Mc* - spacing combining marks\n\n* *Nd* - decimal numbers\n\n* *Pc* - connector punctuations\n\n* *Other_ID_Start* - explicit list of characters in PropList.txt to\n  support backwards compatibility\n\n* *Other_ID_Continue* - likewise\n\nAll identifiers are converted into the normal form NFKC while parsing;\ncomparison of identifiers is based on NFKC.\n\nA non-normative HTML file listing all valid identifier characters for\nUnicode 4.1 can be found at http://www.dcl.hpi.uni-\npotsdam.de/home/loewis/table-3131.html.\n\n\nKeywords\n========\n\nThe following identifiers are used as reserved words, or *keywords* of\nthe language, and cannot be used as ordinary identifiers.  They must\nbe spelled exactly as written here:\n\n   False      class      finally    is         return\n   None       continue   for        lambda     try\n   True       def        from       nonlocal   while\n   and        del        global     not        with\n   as         elif       if         or         yield\n   assert     else       import     pass\n   break      except     in         raise\n\n\nReserved classes of identifiers\n===============================\n\nCertain classes of identifiers (besides keywords) have special\nmeanings.  These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n``_*``\n   Not imported by ``from module import *``.  The special identifier\n   ``_`` is used in the interactive interpreter to store the result of\n   the last evaluation; it is stored in the ``builtins`` module.  When\n   not in interactive mode, ``_`` has no special meaning and is not\n   defined. See section *The import statement*.\n\n   Note: The name ``_`` is often used in conjunction with\n     internationalization; refer to the documentation for the\n     ``gettext`` module for more information on this convention.\n\n``__*__``\n   System-defined names. These names are defined by the interpreter\n   and its implementation (including the standard library).  Current\n   system names are discussed in the *Special method names* section\n   and elsewhere.  More will likely be defined in future versions of\n   Python.  *Any* use of ``__*__`` names, in any context, that does\n   not follow explicitly documented use, is subject to breakage\n   without warning.\n\n``__*``\n   Class-private names.  Names in this category, when used within the\n   context of a class definition, are re-written to use a mangled form\n   to help avoid name clashes between "private" attributes of base and\n   derived classes. See section *Identifiers (Names)*.\n',
@@ -44,7 +44,7 @@
  'import': '\nThe ``import`` statement\n************************\n\n   import_stmt     ::= "import" module ["as" name] ( "," module ["as" name] )*\n                   | "from" relative_module "import" identifier ["as" name]\n                   ( "," identifier ["as" name] )*\n                   | "from" relative_module "import" "(" identifier ["as" name]\n                   ( "," identifier ["as" name] )* [","] ")"\n                   | "from" module "import" "*"\n   module          ::= (identifier ".")* identifier\n   relative_module ::= "."* module | "."+\n   name            ::= identifier\n\nThe basic import statement (no ``from`` clause) is executed in two\nsteps:\n\n1. find a module, loading and initializing it if necessary\n\n2. define a name or names in the local namespace for the scope where\n   the ``import`` statement occurs.\n\nWhen the statement contains multiple clauses (separated by commas) the\ntwo steps are carried out separately for each clause, just as though\nthe clauses had been separated out into individiual import statements.\n\nThe details of the first step, finding and loading modules is\ndescribed in greater detail in the section on the *import system*,\nwhich also describes the various types of packages and modules that\ncan be imported, as well as all the hooks that can be used to\ncustomize the import system. Note that failures in this step may\nindicate either that the module could not be located, *or* that an\nerror occurred while initializing the module, which includes execution\nof the module\'s code.\n\nIf the requested module is retrieved successfully, it will be made\navailable in the local namespace in one of three ways:\n\n* If the module name is followed by ``as``, then the name following\n  ``as`` is bound directly to the imported module.\n\n* If no other name is specified, and the module being imported is a\n  top level module, the module\'s name is bound in the local namespace\n  as a reference to the imported module\n\n* If the module being imported is *not* a top level module, then the\n  name of the top level package that contains the module is bound in\n  the local namespace as a reference to the top level package. The\n  imported module must be accessed using its full qualified name\n  rather than directly\n\nThe ``from`` form uses a slightly more complex process:\n\n1. find the module specified in the ``from`` clause loading and\n   initializing it if necessary;\n\n2. for each of the identifiers specified in the ``import`` clauses:\n\n   1. check if the imported module has an attribute by that name\n\n   2. if not, attempt to import a submodule with that name and then\n      check the imported module again for that attribute\n\n   3. if the attribute is not found, ``ImportError`` is raised.\n\n   4. otherwise, a reference to that value is bound in the local\n      namespace, using the name in the ``as`` clause if it is present,\n      otherwise using the attribute name\n\nExamples:\n\n   import foo                 # foo imported and bound locally\n   import foo.bar.baz         # foo.bar.baz imported, foo bound locally\n   import foo.bar.baz as fbb  # foo.bar.baz imported and bound as fbb\n   from foo.bar import baz    # foo.bar.baz imported and bound as baz\n   from foo import attr       # foo imported and foo.attr bound as attr\n\nIf the list of identifiers is replaced by a star (``\'*\'``), all public\nnames defined in the module are bound in the local namespace for the\nscope where the ``import`` statement occurs.\n\nThe *public names* defined by a module are determined by checking the\nmodule\'s namespace for a variable named ``__all__``; if defined, it\nmust be a sequence of strings which are names defined or imported by\nthat module.  The names given in ``__all__`` are all considered public\nand are required to exist.  If ``__all__`` is not defined, the set of\npublic names includes all names found in the module\'s namespace which\ndo not begin with an underscore character (``\'_\'``).  ``__all__``\nshould contain the entire public API. It is intended to avoid\naccidentally exporting items that are not part of the API (such as\nlibrary modules which were imported and used within the module).\n\nThe ``from`` form with ``*`` may only occur in a module scope.  The\nwild card form of import --- ``import *`` --- is only allowed at the\nmodule level. Attempting to use it in class or function definitions\nwill raise a ``SyntaxError``.\n\nWhen specifying what module to import you do not have to specify the\nabsolute name of the module. When a module or package is contained\nwithin another package it is possible to make a relative import within\nthe same top package without having to mention the package name. By\nusing leading dots in the specified module or package after ``from``\nyou can specify how high to traverse up the current package hierarchy\nwithout specifying exact names. One leading dot means the current\npackage where the module making the import exists. Two dots means up\none package level. Three dots is up two levels, etc. So if you execute\n``from . import mod`` from a module in the ``pkg`` package then you\nwill end up importing ``pkg.mod``. If you execute ``from ..subpkg2\nimport mod`` from within ``pkg.subpkg1`` you will import\n``pkg.subpkg2.mod``. The specification for relative imports is\ncontained within **PEP 328**.\n\n``importlib.import_module()`` is provided to support applications that\ndetermine which modules need to be loaded dynamically.\n\n\nFuture statements\n=================\n\nA *future statement* is a directive to the compiler that a particular\nmodule should be compiled using syntax or semantics that will be\navailable in a specified future release of Python.  The future\nstatement is intended to ease migration to future versions of Python\nthat introduce incompatible changes to the language.  It allows use of\nthe new features on a per-module basis before the release in which the\nfeature becomes standard.\n\n   future_statement ::= "from" "__future__" "import" feature ["as" name]\n                        ("," feature ["as" name])*\n                        | "from" "__future__" "import" "(" feature ["as" name]\n                        ("," feature ["as" name])* [","] ")"\n   feature          ::= identifier\n   name             ::= identifier\n\nA future statement must appear near the top of the module.  The only\nlines that can appear before a future statement are:\n\n* the module docstring (if any),\n\n* comments,\n\n* blank lines, and\n\n* other future statements.\n\nThe features recognized by Python 3.0 are ``absolute_import``,\n``division``, ``generators``, ``unicode_literals``,\n``print_function``, ``nested_scopes`` and ``with_statement``.  They\nare all redundant because they are always enabled, and only kept for\nbackwards compatibility.\n\nA future statement is recognized and treated specially at compile\ntime: Changes to the semantics of core constructs are often\nimplemented by generating different code.  It may even be the case\nthat a new feature introduces new incompatible syntax (such as a new\nreserved word), in which case the compiler may need to parse the\nmodule differently.  Such decisions cannot be pushed off until\nruntime.\n\nFor any given release, the compiler knows which feature names have\nbeen defined, and raises a compile-time error if a future statement\ncontains a feature not known to it.\n\nThe direct runtime semantics are the same as for any import statement:\nthere is a standard module ``__future__``, described later, and it\nwill be imported in the usual way at the time the future statement is\nexecuted.\n\nThe interesting runtime semantics depend on the specific feature\nenabled by the future statement.\n\nNote that there is nothing special about the statement:\n\n   import __future__ [as name]\n\nThat is not a future statement; it\'s an ordinary import statement with\nno special semantics or syntax restrictions.\n\nCode compiled by calls to the built-in functions ``exec()`` and\n``compile()`` that occur in a module ``M`` containing a future\nstatement will, by default, use the new syntax or semantics associated\nwith the future statement.  This can be controlled by optional\narguments to ``compile()`` --- see the documentation of that function\nfor details.\n\nA future statement typed at an interactive interpreter prompt will\ntake effect for the rest of the interpreter session.  If an\ninterpreter is started with the *-i* option, is passed a script name\nto execute, and the script includes a future statement, it will be in\neffect in the interactive session started after the script is\nexecuted.\n\nSee also:\n\n   **PEP 236** - Back to the __future__\n      The original proposal for the __future__ mechanism.\n',
  'in': '\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation.  Also unlike C, expressions like ``a < b < c`` have the\ninterpretation that is conventional in mathematics:\n\n   comparison    ::= or_expr ( comp_operator or_expr )*\n   comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="\n                     | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: ``True`` or ``False``.\n\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\ny`` is found to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\nexcept that each expression is evaluated at most once.\n\nNote that ``a op1 b op2 c`` doesn\'t imply any kind of comparison\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\n(though perhaps not pretty).\n\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\nthe values of two objects.  The objects need not have the same type.\nIf both are numbers, they are converted to a common type.  Otherwise,\nthe ``==`` and ``!=`` operators *always* consider objects of different\ntypes to be unequal, while the ``<``, ``>``, ``>=`` and ``<=``\noperators raise a ``TypeError`` when comparing objects of different\ntypes that do not implement these operators for the given pair of\ntypes.  You can control comparison behavior of objects of non-built-in\ntypes by defining rich comparison methods like ``__gt__()``, described\nin section *Basic customization*.\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* The values ``float(\'NaN\')`` and ``Decimal(\'NaN\')`` are special. The\n  are identical to themselves, ``x is x`` but are not equal to\n  themselves, ``x != x``.  Additionally, comparing any value to a\n  not-a-number value will return ``False``.  For example, both ``3 <\n  float(\'NaN\')`` and ``float(\'NaN\') < 3`` will return ``False``.\n\n* Bytes objects are compared lexicographically using the numeric\n  values of their elements.\n\n* Strings are compared lexicographically using the numeric equivalents\n  (the result of the built-in function ``ord()``) of their characters.\n  [3] String and bytes object can\'t be compared!\n\n* Tuples and lists are compared lexicographically using comparison of\n  corresponding elements.  This means that to compare equal, each\n  element must compare equal and the two sequences must be of the same\n  type and have the same length.\n\n  If not equal, the sequences are ordered the same as their first\n  differing elements.  For example, ``[1,2,x] <= [1,2,y]`` has the\n  same value as ``x <= y``.  If the corresponding element does not\n  exist, the shorter sequence is ordered first (for example, ``[1,2] <\n  [1,2,3]``).\n\n* Mappings (dictionaries) compare equal if and only if they have the\n  same ``(key, value)`` pairs. Order comparisons ``(\'<\', \'<=\', \'>=\',\n  \'>\')`` raise ``TypeError``.\n\n* Sets and frozensets define comparison operators to mean subset and\n  superset tests.  Those relations do not define total orderings (the\n  two sets ``{1,2}`` and {2,3} are not equal, nor subsets of one\n  another, nor supersets of one another).  Accordingly, sets are not\n  appropriate arguments for functions which depend on total ordering.\n  For example, ``min()``, ``max()``, and ``sorted()`` produce\n  undefined results given a list of sets as inputs.\n\n* Most other objects of built-in types compare unequal unless they are\n  the same object; the choice whether one object is considered smaller\n  or larger than another one is made arbitrarily but consistently\n  within one execution of a program.\n\nComparison of objects of the differing types depends on whether either\nof the types provide explicit support for the comparison.  Most\nnumeric types can be compared with one another.  When cross-type\ncomparison is not supported, the comparison method returns\n``NotImplemented``.\n\nThe operators ``in`` and ``not in`` test for membership.  ``x in s``\nevaluates to true if *x* is a member of *s*, and false otherwise.  ``x\nnot in s`` returns the negation of ``x in s``.  All built-in sequences\nand set types support this as well as dictionary, for which ``in``\ntests whether a the dictionary has a given key. For container types\nsuch as list, tuple, set, frozenset, dict, or collections.deque, the\nexpression ``x in y`` is equivalent to ``any(x is e or x == e for e in\ny)``.\n\nFor the string and bytes types, ``x in y`` is true if and only if *x*\nis a substring of *y*.  An equivalent test is ``y.find(x) != -1``.\nEmpty strings are always considered to be a substring of any other\nstring, so ``"" in "abc"`` will return ``True``.\n\nFor user-defined classes which define the ``__contains__()`` method,\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\n\nFor user-defined classes which do not define ``__contains__()`` but do\ndefine ``__iter__()``, ``x in y`` is true if some value ``z`` with ``x\n== z`` is produced while iterating over ``y``.  If an exception is\nraised during the iteration, it is as if ``in`` raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n``__getitem__()``, ``x in y`` is true if and only if there is a non-\nnegative integer index *i* such that ``x == y[i]``, and all lower\ninteger indices do not raise ``IndexError`` exception.  (If any other\nexception is raised, it is as if ``in`` raised that exception).\n\nThe operator ``not in`` is defined to have the inverse true value of\n``in``.\n\nThe operators ``is`` and ``is not`` test for object identity: ``x is\ny`` is true if and only if *x* and *y* are the same object.  ``x is\nnot y`` yields the inverse truth value. [4]\n',
  'integers': '\nInteger literals\n****************\n\nInteger literals are described by the following lexical definitions:\n\n   integer        ::= decimalinteger | octinteger | hexinteger | bininteger\n   decimalinteger ::= nonzerodigit digit* | "0"+\n   nonzerodigit   ::= "1"..."9"\n   digit          ::= "0"..."9"\n   octinteger     ::= "0" ("o" | "O") octdigit+\n   hexinteger     ::= "0" ("x" | "X") hexdigit+\n   bininteger     ::= "0" ("b" | "B") bindigit+\n   octdigit       ::= "0"..."7"\n   hexdigit       ::= digit | "a"..."f" | "A"..."F"\n   bindigit       ::= "0" | "1"\n\nThere is no limit for the length of integer literals apart from what\ncan be stored in available memory.\n\nNote that leading zeros in a non-zero decimal number are not allowed.\nThis is for disambiguation with C-style octal literals, which Python\nused before version 3.0.\n\nSome examples of integer literals:\n\n   7     2147483647                        0o177    0b100110111\n   3     79228162514264337593543950336     0o377    0x100000000\n         79228162514264337593543950336              0xdeadbeef\n',
- 'lambda': '\nLambdas\n*******\n\n   lambda_form        ::= "lambda" [parameter_list]: expression\n   lambda_form_nocond ::= "lambda" [parameter_list]: expression_nocond\n\nLambda forms (lambda expressions) have the same syntactic position as\nexpressions.  They are a shorthand to create anonymous functions; the\nexpression ``lambda arguments: expression`` yields a function object.\nThe unnamed object behaves like a function object defined with\n\n   def <lambda>(arguments):\n       return expression\n\nSee section *Function definitions* for the syntax of parameter lists.\nNote that functions created with lambda forms cannot contain\nstatements or annotations.\n',
+ 'lambda': '\nLambdas\n*******\n\n   lambda_expr        ::= "lambda" [parameter_list]: expression\n   lambda_expr_nocond ::= "lambda" [parameter_list]: expression_nocond\n\nLambda expressions (sometimes called lambda forms) have the same\nsyntactic position as expressions.  They are a shorthand to create\nanonymous functions; the expression ``lambda arguments: expression``\nyields a function object.  The unnamed object behaves like a function\nobject defined with\n\n   def <lambda>(arguments):\n       return expression\n\nSee section *Function definitions* for the syntax of parameter lists.\nNote that functions created with lambda expressions cannot contain\nstatements or annotations.\n',
  'lists': '\nList displays\n*************\n\nA list display is a possibly empty series of expressions enclosed in\nsquare brackets:\n\n   list_display ::= "[" [expression_list | comprehension] "]"\n\nA list display yields a new list object, the contents being specified\nby either a list of expressions or a comprehension.  When a comma-\nseparated list of expressions is supplied, its elements are evaluated\nfrom left to right and placed into the list object in that order.\nWhen a comprehension is supplied, the list is constructed from the\nelements resulting from the comprehension.\n',
  'naming': "\nNaming and binding\n******************\n\n*Names* refer to objects.  Names are introduced by name binding\noperations. Each occurrence of a name in the program text refers to\nthe *binding* of that name established in the innermost function block\ncontaining the use.\n\nA *block* is a piece of Python program text that is executed as a\nunit. The following are blocks: a module, a function body, and a class\ndefinition. Each command typed interactively is a block.  A script\nfile (a file given as standard input to the interpreter or specified\non the interpreter command line the first argument) is a code block.\nA script command (a command specified on the interpreter command line\nwith the '**-c**' option) is a code block.  The string argument passed\nto the built-in functions ``eval()`` and ``exec()`` is a code block.\n\nA code block is executed in an *execution frame*.  A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block's execution has\ncompleted.\n\nA *scope* defines the visibility of a name within a block.  If a local\nvariable is defined in a block, its scope includes that block.  If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name.  The scope of names defined in a\nclass block is limited to the class block; it does not extend to the\ncode blocks of methods -- this includes comprehensions and generator\nexpressions since they are implemented using a function scope.  This\nmeans that the following will fail:\n\n   class A:\n       a = 42\n       b = list(a + i for i in range(10))\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope.  The set of all such scopes visible to a code block\nis called the block's *environment*.\n\nIf a name is bound in a block, it is a local variable of that block,\nunless declared as ``nonlocal``.  If a name is bound at the module\nlevel, it is a global variable.  (The variables of the module code\nblock are local and global.)  If a variable is used in a code block\nbut not defined there, it is a *free variable*.\n\nWhen a name is not found at all, a ``NameError`` exception is raised.\nIf the name refers to a local variable that has not been bound, a\n``UnboundLocalError`` exception is raised.  ``UnboundLocalError`` is a\nsubclass of ``NameError``.\n\nThe following constructs bind names: formal parameters to functions,\n``import`` statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, ``for`` loop header, or\nafter ``as`` in a ``with`` statement or ``except`` clause. The\n``import`` statement of the form ``from ... import *`` binds all names\ndefined in the imported module, except those beginning with an\nunderscore.  This form may only be used at the module level.\n\nA target occurring in a ``del`` statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name).\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block.  This can lead to errors when a name is used within a\nblock before it is bound.  This rule is subtle.  Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block.  The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the ``global`` statement occurs within a block, all uses of the\nname specified in the statement refer to the binding of that name in\nthe top-level namespace.  Names are resolved in the top-level\nnamespace by searching the global namespace, i.e. the namespace of the\nmodule containing the code block, and the builtins namespace, the\nnamespace of the module ``builtins``.  The global namespace is\nsearched first.  If the name is not found there, the builtins\nnamespace is searched.  The global statement must precede all uses of\nthe name.\n\nThe builtins namespace associated with the execution of a code block\nis actually found by looking up the name ``__builtins__`` in its\nglobal namespace; this should be a dictionary or a module (in the\nlatter case the module's dictionary is used).  By default, when in the\n``__main__`` module, ``__builtins__`` is the built-in module\n``builtins``; when in any other module, ``__builtins__`` is an alias\nfor the dictionary of the ``builtins`` module itself.\n``__builtins__`` can be set to a user-created dictionary to create a\nweak form of restricted execution.\n\n**CPython implementation detail:** Users should not touch\n``__builtins__``; it is strictly an implementation detail.  Users\nwanting to override values in the builtins namespace should ``import``\nthe ``builtins`` module and modify its attributes appropriately.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported.  The main module for a script is always called\n``__main__``.\n\nThe ``global`` statement has the same scope as a name binding\noperation in the same block.  If the nearest enclosing scope for a\nfree variable contains a global statement, the free variable is\ntreated as a global.\n\nA class definition is an executable statement that may use and define\nnames. These references follow the normal rules for name resolution.\nThe namespace of the class definition becomes the attribute dictionary\nof the class.  Names defined at the class scope are not visible in\nmethods.\n\n\nInteraction with dynamic features\n=================================\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name.  An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nThe ``eval()`` and ``exec()`` functions do not have access to the full\nenvironment for resolving names.  Names may be resolved in the local\nand global namespaces of the caller.  Free variables are not resolved\nin the nearest enclosing namespace, but in the global namespace.  [1]\nThe ``exec()`` and ``eval()`` functions have optional arguments to\noverride the global and local namespace.  If only one namespace is\nspecified, it is used for both.\n",
  'nonlocal': '\nThe ``nonlocal`` statement\n**************************\n\n   nonlocal_stmt ::= "nonlocal" identifier ("," identifier)*\n\nThe ``nonlocal`` statement causes the listed identifiers to refer to\npreviously bound variables in the nearest enclosing scope.  This is\nimportant because the default behavior for binding is to search the\nlocal namespace first.  The statement allows encapsulated code to\nrebind variables outside of the local scope besides the global\n(module) scope.\n\nNames listed in a ``nonlocal`` statement, unlike to those listed in a\n``global`` statement, must refer to pre-existing bindings in an\nenclosing scope (the scope in which a new binding should be created\ncannot be determined unambiguously).\n\nNames listed in a ``nonlocal`` statement must not collide with pre-\nexisting bindings in the local scope.\n\nSee also:\n\n   **PEP 3104** - Access to Names in Outer Scopes\n      The specification for the ``nonlocal`` statement.\n',
@@ -57,7 +57,7 @@
  'raise': '\nThe ``raise`` statement\n***********************\n\n   raise_stmt ::= "raise" [expression ["from" expression]]\n\nIf no expressions are present, ``raise`` re-raises the last exception\nthat was active in the current scope.  If no exception is active in\nthe current scope, a ``RuntimeError`` exception is raised indicating\nthat this is an error.\n\nOtherwise, ``raise`` evaluates the first expression as the exception\nobject.  It must be either a subclass or an instance of\n``BaseException``. If it is a class, the exception instance will be\nobtained when needed by instantiating the class with no arguments.\n\nThe *type* of the exception is the exception instance\'s class, the\n*value* is the instance itself.\n\nA traceback object is normally created automatically when an exception\nis raised and attached to it as the ``__traceback__`` attribute, which\nis writable. You can create an exception and set your own traceback in\none step using the ``with_traceback()`` exception method (which\nreturns the same exception instance, with its traceback set to its\nargument), like so:\n\n   raise Exception("foo occurred").with_traceback(tracebackobj)\n\nThe ``from`` clause is used for exception chaining: if given, the\nsecond *expression* must be another exception class or instance, which\nwill then be attached to the raised exception as the ``__cause__``\nattribute (which is writable).  If the raised exception is not\nhandled, both exceptions will be printed:\n\n   >>> try:\n   ...     print(1 / 0)\n   ... except Exception as exc:\n   ...     raise RuntimeError("Something bad happened") from exc\n   ...\n   Traceback (most recent call last):\n     File "<stdin>", line 2, in <module>\n   ZeroDivisionError: int division or modulo by zero\n\n   The above exception was the direct cause of the following exception:\n\n   Traceback (most recent call last):\n     File "<stdin>", line 4, in <module>\n   RuntimeError: Something bad happened\n\nA similar mechanism works implicitly if an exception is raised inside\nan exception handler: the previous exception is then attached as the\nnew exception\'s ``__context__`` attribute:\n\n   >>> try:\n   ...     print(1 / 0)\n   ... except:\n   ...     raise RuntimeError("Something bad happened")\n   ...\n   Traceback (most recent call last):\n     File "<stdin>", line 2, in <module>\n   ZeroDivisionError: int division or modulo by zero\n\n   During handling of the above exception, another exception occurred:\n\n   Traceback (most recent call last):\n     File "<stdin>", line 4, in <module>\n   RuntimeError: Something bad happened\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information about handling exceptions is in section\n*The try statement*.\n',
  'return': '\nThe ``return`` statement\n************************\n\n   return_stmt ::= "return" [expression_list]\n\n``return`` may only occur syntactically nested in a function\ndefinition, not within a nested class definition.\n\nIf an expression list is present, it is evaluated, else ``None`` is\nsubstituted.\n\n``return`` leaves the current function call with the expression list\n(or ``None``) as return value.\n\nWhen ``return`` passes control out of a ``try`` statement with a\n``finally`` clause, that ``finally`` clause is executed before really\nleaving the function.\n\nIn a generator function, the ``return`` statement indicates that the\ngenerator is done and will cause ``StopIteration`` to be raised. The\nreturned value (if any) is used as an argument to construct\n``StopIteration`` and becomes the ``StopIteration.value`` attribute.\n',
  'sequence-types': "\nEmulating container types\n*************************\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well.  The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which ``0 <= k < N``\nwhere *N* is the length of the sequence, or slice objects, which\ndefine a range of items.  It is also recommended that mappings provide\nthe methods ``keys()``, ``values()``, ``items()``, ``get()``,\n``clear()``, ``setdefault()``, ``pop()``, ``popitem()``, ``copy()``,\nand ``update()`` behaving similar to those for Python's standard\ndictionary objects.  The ``collections`` module provides a\n``MutableMapping`` abstract base class to help create those methods\nfrom a base set of ``__getitem__()``, ``__setitem__()``,\n``__delitem__()``, and ``keys()``. Mutable sequences should provide\nmethods ``append()``, ``count()``, ``index()``, ``extend()``,\n``insert()``, ``pop()``, ``remove()``, ``reverse()`` and ``sort()``,\nlike Python standard list objects.  Finally, sequence types should\nimplement addition (meaning concatenation) and multiplication (meaning\nrepetition) by defining the methods ``__add__()``, ``__radd__()``,\n``__iadd__()``, ``__mul__()``, ``__rmul__()`` and ``__imul__()``\ndescribed below; they should not define other numerical operators.  It\nis recommended that both mappings and sequences implement the\n``__contains__()`` method to allow efficient use of the ``in``\noperator; for mappings, ``in`` should search the mapping's keys; for\nsequences, it should search through the values.  It is further\nrecommended that both mappings and sequences implement the\n``__iter__()`` method to allow efficient iteration through the\ncontainer; for mappings, ``__iter__()`` should be the same as\n``keys()``; for sequences, it should iterate through the values.\n\nobject.__len__(self)\n\n   Called to implement the built-in function ``len()``.  Should return\n   the length of the object, an integer ``>=`` 0.  Also, an object\n   that doesn't define a ``__bool__()`` method and whose ``__len__()``\n   method returns zero is considered to be false in a Boolean context.\n\nobject.__length_hint__(self)\n\n   Called to implement ``operator.length_hint()``. Should return an\n   estimated length for the object (which may be greater or less than\n   the actual length). The length must be an integer ``>=`` 0. This\n   method is purely an optimization and is never required for\n   correctness.\n\n   New in version 3.4.\n\nNote: Slicing is done exclusively with the following three methods.  A\n  call like\n\n     a[1:2] = b\n\n  is translated to\n\n     a[slice(1, 2, None)] = b\n\n  and so forth.  Missing slice items are always filled in with\n  ``None``.\n\nobject.__getitem__(self, key)\n\n   Called to implement evaluation of ``self[key]``. For sequence\n   types, the accepted keys should be integers and slice objects.\n   Note that the special interpretation of negative indexes (if the\n   class wishes to emulate a sequence type) is up to the\n   ``__getitem__()`` method. If *key* is of an inappropriate type,\n   ``TypeError`` may be raised; if of a value outside the set of\n   indexes for the sequence (after any special interpretation of\n   negative values), ``IndexError`` should be raised. For mapping\n   types, if *key* is missing (not in the container), ``KeyError``\n   should be raised.\n\n   Note: ``for`` loops expect that an ``IndexError`` will be raised for\n     illegal indexes to allow proper detection of the end of the\n     sequence.\n\nobject.__setitem__(self, key, value)\n\n   Called to implement assignment to ``self[key]``.  Same note as for\n   ``__getitem__()``.  This should only be implemented for mappings if\n   the objects support changes to the values for keys, or if new keys\n   can be added, or for sequences if elements can be replaced.  The\n   same exceptions should be raised for improper *key* values as for\n   the ``__getitem__()`` method.\n\nobject.__delitem__(self, key)\n\n   Called to implement deletion of ``self[key]``.  Same note as for\n   ``__getitem__()``.  This should only be implemented for mappings if\n   the objects support removal of keys, or for sequences if elements\n   can be removed from the sequence.  The same exceptions should be\n   raised for improper *key* values as for the ``__getitem__()``\n   method.\n\nobject.__iter__(self)\n\n   This method is called when an iterator is required for a container.\n   This method should return a new iterator object that can iterate\n   over all the objects in the container.  For mappings, it should\n   iterate over the keys of the container, and should also be made\n   available as the method ``keys()``.\n\n   Iterator objects also need to implement this method; they are\n   required to return themselves.  For more information on iterator\n   objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n   Called (if present) by the ``reversed()`` built-in to implement\n   reverse iteration.  It should return a new iterator object that\n   iterates over all the objects in the container in reverse order.\n\n   If the ``__reversed__()`` method is not provided, the\n   ``reversed()`` built-in will fall back to using the sequence\n   protocol (``__len__()`` and ``__getitem__()``).  Objects that\n   support the sequence protocol should only provide\n   ``__reversed__()`` if they can provide an implementation that is\n   more efficient than the one provided by ``reversed()``.\n\nThe membership test operators (``in`` and ``not in``) are normally\nimplemented as an iteration through a sequence.  However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n   Called to implement membership test operators.  Should return true\n   if *item* is in *self*, false otherwise.  For mapping objects, this\n   should consider the keys of the mapping rather than the values or\n   the key-item pairs.\n\n   For objects that don't define ``__contains__()``, the membership\n   test first tries iteration via ``__iter__()``, then the old\n   sequence iteration protocol via ``__getitem__()``, see *this\n   section in the language reference*.\n",
- 'shifting': '\nShifting operations\n*******************\n\nThe shifting operations have lower priority than the arithmetic\noperations:\n\n   shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr\n\nThese operators accept integers as arguments.  They shift the first\nargument to the left or right by the number of bits given by the\nsecond argument.\n\nA right shift by *n* bits is defined as division by ``pow(2,n)``.  A\nleft shift by *n* bits is defined as multiplication with ``pow(2,n)``.\n\nNote: In the current implementation, the right-hand operand is required to\n  be at most ``sys.maxsize``.  If the right-hand operand is larger\n  than ``sys.maxsize`` an ``OverflowError`` exception is raised.\n',
+ 'shifting': '\nShifting operations\n*******************\n\nThe shifting operations have lower priority than the arithmetic\noperations:\n\n   shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr\n\nThese operators accept integers as arguments.  They shift the first\nargument to the left or right by the number of bits given by the\nsecond argument.\n\nA right shift by *n* bits is defined as floor division by\n``pow(2,n)``.  A left shift by *n* bits is defined as multiplication\nwith ``pow(2,n)``.\n\nNote: In the current implementation, the right-hand operand is required to\n  be at most ``sys.maxsize``.  If the right-hand operand is larger\n  than ``sys.maxsize`` an ``OverflowError`` exception is raised.\n',
  'slicings': '\nSlicings\n********\n\nA slicing selects a range of items in a sequence object (e.g., a\nstring, tuple or list).  Slicings may be used as expressions or as\ntargets in assignment or ``del`` statements.  The syntax for a\nslicing:\n\n   slicing      ::= primary "[" slice_list "]"\n   slice_list   ::= slice_item ("," slice_item)* [","]\n   slice_item   ::= expression | proper_slice\n   proper_slice ::= [lower_bound] ":" [upper_bound] [ ":" [stride] ]\n   lower_bound  ::= expression\n   upper_bound  ::= expression\n   stride       ::= expression\n\nThere is ambiguity in the formal syntax here: anything that looks like\nan expression list also looks like a slice list, so any subscription\ncan be interpreted as a slicing.  Rather than further complicating the\nsyntax, this is disambiguated by defining that in this case the\ninterpretation as a subscription takes priority over the\ninterpretation as a slicing (this is the case if the slice list\ncontains no proper slice).\n\nThe semantics for a slicing are as follows.  The primary must evaluate\nto a mapping object, and it is indexed (using the same\n``__getitem__()`` method as normal subscription) with a key that is\nconstructed from the slice list, as follows.  If the slice list\ncontains at least one comma, the key is a tuple containing the\nconversion of the slice items; otherwise, the conversion of the lone\nslice item is the key.  The conversion of a slice item that is an\nexpression is that expression.  The conversion of a proper slice is a\nslice object (see section *The standard type hierarchy*) whose\n``start``, ``stop`` and ``step`` attributes are the values of the\nexpressions given as lower bound, upper bound and stride,\nrespectively, substituting ``None`` for missing expressions.\n',
  'specialattrs': '\nSpecial Attributes\n******************\n\nThe implementation adds a few special read-only attributes to several\nobject types, where they are relevant.  Some of these are not reported\nby the ``dir()`` built-in function.\n\nobject.__dict__\n\n   A dictionary or other mapping object used to store an object\'s\n   (writable) attributes.\n\ninstance.__class__\n\n   The class to which a class instance belongs.\n\nclass.__bases__\n\n   The tuple of base classes of a class object.\n\nclass.__name__\n\n   The name of the class or type.\n\nclass.__qualname__\n\n   The *qualified name* of the class or type.\n\n   New in version 3.3.\n\nclass.__mro__\n\n   This attribute is a tuple of classes that are considered when\n   looking for base classes during method resolution.\n\nclass.mro()\n\n   This method can be overridden by a metaclass to customize the\n   method resolution order for its instances.  It is called at class\n   instantiation, and its result is stored in ``__mro__``.\n\nclass.__subclasses__()\n\n   Each class keeps a list of weak references to its immediate\n   subclasses.  This method returns a list of all those references\n   still alive. Example:\n\n      >>> int.__subclasses__()\n      [<class \'bool\'>]\n\n-[ Footnotes ]-\n\n[1] Additional information on these special methods may be found in\n    the Python Reference Manual (*Basic customization*).\n\n[2] As a consequence, the list ``[1, 2]`` is considered equal to\n    ``[1.0, 2.0]``, and similarly for tuples.\n\n[3] They must have since the parser can\'t tell the type of the\n    operands.\n\n[4] Cased characters are those with general category property being\n    one of "Lu" (Letter, uppercase), "Ll" (Letter, lowercase), or "Lt"\n    (Letter, titlecase).\n\n[5] To format only a tuple you should therefore provide a singleton\n    tuple whose only element is the tuple to be formatted.\n',
  'specialnames': '\nSpecial method names\n********************\n\nA class can implement certain operations that are invoked by special\nsyntax (such as arithmetic operations or subscripting and slicing) by\ndefining methods with special names. This is Python\'s approach to\n*operator overloading*, allowing classes to define their own behavior\nwith respect to language operators.  For instance, if a class defines\na method named ``__getitem__()``, and ``x`` is an instance of this\nclass, then ``x[i]`` is roughly equivalent to ``type(x).__getitem__(x,\ni)``.  Except where mentioned, attempts to execute an operation raise\nan exception when no appropriate method is defined (typically\n``AttributeError`` or ``TypeError``).\n\nWhen implementing a class that emulates any built-in type, it is\nimportant that the emulation only be implemented to the degree that it\nmakes sense for the object being modelled.  For example, some\nsequences may work well with retrieval of individual elements, but\nextracting a slice may not make sense.  (One example of this is the\n``NodeList`` interface in the W3C\'s Document Object Model.)\n\n\nBasic customization\n===================\n\nobject.__new__(cls[, ...])\n\n   Called to create a new instance of class *cls*.  ``__new__()`` is a\n   static method (special-cased so you need not declare it as such)\n   that takes the class of which an instance was requested as its\n   first argument.  The remaining arguments are those passed to the\n   object constructor expression (the call to the class).  The return\n   value of ``__new__()`` should be the new object instance (usually\n   an instance of *cls*).\n\n   Typical implementations create a new instance of the class by\n   invoking the superclass\'s ``__new__()`` method using\n   ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\n   arguments and then modifying the newly-created instance as\n   necessary before returning it.\n\n   If ``__new__()`` returns an instance of *cls*, then the new\n   instance\'s ``__init__()`` method will be invoked like\n   ``__init__(self[, ...])``, where *self* is the new instance and the\n   remaining arguments are the same as were passed to ``__new__()``.\n\n   If ``__new__()`` does not return an instance of *cls*, then the new\n   instance\'s ``__init__()`` method will not be invoked.\n\n   ``__new__()`` is intended mainly to allow subclasses of immutable\n   types (like int, str, or tuple) to customize instance creation.  It\n   is also commonly overridden in custom metaclasses in order to\n   customize class creation.\n\nobject.__init__(self[, ...])\n\n   Called when the instance is created.  The arguments are those\n   passed to the class constructor expression.  If a base class has an\n   ``__init__()`` method, the derived class\'s ``__init__()`` method,\n   if any, must explicitly call it to ensure proper initialization of\n   the base class part of the instance; for example:\n   ``BaseClass.__init__(self, [args...])``.  As a special constraint\n   on constructors, no value may be returned; doing so will cause a\n   ``TypeError`` to be raised at runtime.\n\nobject.__del__(self)\n\n   Called when the instance is about to be destroyed.  This is also\n   called a destructor.  If a base class has a ``__del__()`` method,\n   the derived class\'s ``__del__()`` method, if any, must explicitly\n   call it to ensure proper deletion of the base class part of the\n   instance.  Note that it is possible (though not recommended!) for\n   the ``__del__()`` method to postpone destruction of the instance by\n   creating a new reference to it.  It may then be called at a later\n   time when this new reference is deleted.  It is not guaranteed that\n   ``__del__()`` methods are called for objects that still exist when\n   the interpreter exits.\n\n   Note: ``del x`` doesn\'t directly call ``x.__del__()`` --- the former\n     decrements the reference count for ``x`` by one, and the latter\n     is only called when ``x``\'s reference count reaches zero.  Some\n     common situations that may prevent the reference count of an\n     object from going to zero include: circular references between\n     objects (e.g., a doubly-linked list or a tree data structure with\n     parent and child pointers); a reference to the object on the\n     stack frame of a function that caught an exception (the traceback\n     stored in ``sys.exc_info()[2]`` keeps the stack frame alive); or\n     a reference to the object on the stack frame that raised an\n     unhandled exception in interactive mode (the traceback stored in\n     ``sys.last_traceback`` keeps the stack frame alive).  The first\n     situation can only be remedied by explicitly breaking the cycles;\n     the latter two situations can be resolved by storing ``None`` in\n     ``sys.last_traceback``. Circular references which are garbage are\n     detected and cleaned up when the cyclic garbage collector is\n     enabled (it\'s on by default). Refer to the documentation for the\n     ``gc`` module for more information about this topic.\n\n   Warning: Due to the precarious circumstances under which ``__del__()``\n     methods are invoked, exceptions that occur during their execution\n     are ignored, and a warning is printed to ``sys.stderr`` instead.\n     Also, when ``__del__()`` is invoked in response to a module being\n     deleted (e.g., when execution of the program is done), other\n     globals referenced by the ``__del__()`` method may already have\n     been deleted or in the process of being torn down (e.g. the\n     import machinery shutting down).  For this reason, ``__del__()``\n     methods should do the absolute minimum needed to maintain\n     external invariants.  Starting with version 1.5, Python\n     guarantees that globals whose name begins with a single\n     underscore are deleted from their module before other globals are\n     deleted; if no other references to such globals exist, this may\n     help in assuring that imported modules are still available at the\n     time when the ``__del__()`` method is called.\n\nobject.__repr__(self)\n\n   Called by the ``repr()`` built-in function to compute the\n   "official" string representation of an object.  If at all possible,\n   this should look like a valid Python expression that could be used\n   to recreate an object with the same value (given an appropriate\n   environment).  If this is not possible, a string of the form\n   ``<...some useful description...>`` should be returned. The return\n   value must be a string object. If a class defines ``__repr__()``\n   but not ``__str__()``, then ``__repr__()`` is also used when an\n   "informal" string representation of instances of that class is\n   required.\n\n   This is typically used for debugging, so it is important that the\n   representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n   Called by ``str(object)`` and the built-in functions ``format()``\n   and ``print()`` to compute the "informal" or nicely printable\n   string representation of an object.  The return value must be a\n   *string* object.\n\n   This method differs from ``object.__repr__()`` in that there is no\n   expectation that ``__str__()`` return a valid Python expression: a\n   more convenient or concise representation can be used.\n\n   The default implementation defined by the built-in type ``object``\n   calls ``object.__repr__()``.\n\nobject.__bytes__(self)\n\n   Called by ``bytes()`` to compute a byte-string representation of an\n   object. This should return a ``bytes`` object.\n\nobject.__format__(self, format_spec)\n\n   Called by the ``format()`` built-in function (and by extension, the\n   ``str.format()`` method of class ``str``) to produce a "formatted"\n   string representation of an object. The ``format_spec`` argument is\n   a string that contains a description of the formatting options\n   desired. The interpretation of the ``format_spec`` argument is up\n   to the type implementing ``__format__()``, however most classes\n   will either delegate formatting to one of the built-in types, or\n   use a similar formatting option syntax.\n\n   See *Format Specification Mini-Language* for a description of the\n   standard formatting syntax.\n\n   The return value must be a string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n   These are the so-called "rich comparison" methods. The\n   correspondence between operator symbols and method names is as\n   follows: ``x<y`` calls ``x.__lt__(y)``, ``x<=y`` calls\n   ``x.__le__(y)``, ``x==y`` calls ``x.__eq__(y)``, ``x!=y`` calls\n   ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and ``x>=y`` calls\n   ``x.__ge__(y)``.\n\n   A rich comparison method may return the singleton\n   ``NotImplemented`` if it does not implement the operation for a\n   given pair of arguments. By convention, ``False`` and ``True`` are\n   returned for a successful comparison. However, these methods can\n   return any value, so if the comparison operator is used in a\n   Boolean context (e.g., in the condition of an ``if`` statement),\n   Python will call ``bool()`` on the value to determine if the result\n   is true or false.\n\n   There are no implied relationships among the comparison operators.\n   The truth of ``x==y`` does not imply that ``x!=y`` is false.\n   Accordingly, when defining ``__eq__()``, one should also define\n   ``__ne__()`` so that the operators will behave as expected.  See\n   the paragraph on ``__hash__()`` for some important notes on\n   creating *hashable* objects which support custom comparison\n   operations and are usable as dictionary keys.\n\n   There are no swapped-argument versions of these methods (to be used\n   when the left argument does not support the operation but the right\n   argument does); rather, ``__lt__()`` and ``__gt__()`` are each\n   other\'s reflection, ``__le__()`` and ``__ge__()`` are each other\'s\n   reflection, and ``__eq__()`` and ``__ne__()`` are their own\n   reflection.\n\n   Arguments to rich comparison methods are never coerced.\n\n   To automatically generate ordering operations from a single root\n   operation, see ``functools.total_ordering()``.\n\nobject.__hash__(self)\n\n   Called by built-in function ``hash()`` and for operations on\n   members of hashed collections including ``set``, ``frozenset``, and\n   ``dict``.  ``__hash__()`` should return an integer.  The only\n   required property is that objects which compare equal have the same\n   hash value; it is advised to somehow mix together (e.g. using\n   exclusive or) the hash values for the components of the object that\n   also play a part in comparison of objects.\n\n   Note: ``hash()`` truncates the value returned from an object\'s custom\n     ``__hash__()`` method to the size of a ``Py_ssize_t``.  This is\n     typically 8 bytes on 64-bit builds and 4 bytes on 32-bit builds.\n     If an object\'s   ``__hash__()`` must interoperate on builds of\n     different bit sizes, be sure to check the width on all supported\n     builds.  An easy way to do this is with ``python -c "import sys;\n     print(sys.hash_info.width)"``\n\n   If a class does not define an ``__eq__()`` method it should not\n   define a ``__hash__()`` operation either; if it defines\n   ``__eq__()`` but not ``__hash__()``, its instances will not be\n   usable as items in hashable collections.  If a class defines\n   mutable objects and implements an ``__eq__()`` method, it should\n   not implement ``__hash__()``, since the implementation of hashable\n   collections requires that a key\'s hash value is immutable (if the\n   object\'s hash value changes, it will be in the wrong hash bucket).\n\n   User-defined classes have ``__eq__()`` and ``__hash__()`` methods\n   by default; with them, all objects compare unequal (except with\n   themselves) and ``x.__hash__()`` returns an appropriate value such\n   that ``x == y`` implies both that ``x is y`` and ``hash(x) ==\n   hash(y)``.\n\n   A class that overrides ``__eq__()`` and does not define\n   ``__hash__()`` will have its ``__hash__()`` implicitly set to\n   ``None``.  When the ``__hash__()`` method of a class is ``None``,\n   instances of the class will raise an appropriate ``TypeError`` when\n   a program attempts to retrieve their hash value, and will also be\n   correctly identified as unhashable when checking ``isinstance(obj,\n   collections.Hashable``).\n\n   If a class that overrides ``__eq__()`` needs to retain the\n   implementation of ``__hash__()`` from a parent class, the\n   interpreter must be told this explicitly by setting ``__hash__ =\n   <ParentClass>.__hash__``.\n\n   If a class that does not override ``__eq__()`` wishes to suppress\n   hash support, it should include ``__hash__ = None`` in the class\n   definition. A class which defines its own ``__hash__()`` that\n   explicitly raises a ``TypeError`` would be incorrectly identified\n   as hashable by an ``isinstance(obj, collections.Hashable)`` call.\n\n   Note: By default, the ``__hash__()`` values of str, bytes and datetime\n     objects are "salted" with an unpredictable random value.\n     Although they remain constant within an individual Python\n     process, they are not predictable between repeated invocations of\n     Python.This is intended to provide protection against a denial-\n     of-service caused by carefully-chosen inputs that exploit the\n     worst case performance of a dict insertion, O(n^2) complexity.\n     See http://www.ocert.org/advisories/ocert-2011-003.html for\n     details.Changing hash values affects the iteration order of\n     dicts, sets and other mappings.  Python has never made guarantees\n     about this ordering (and it typically varies between 32-bit and\n     64-bit builds).See also ``PYTHONHASHSEED``.\n\n   Changed in version 3.3: Hash randomization is enabled by default.\n\nobject.__bool__(self)\n\n   Called to implement truth value testing and the built-in operation\n   ``bool()``; should return ``False`` or ``True``.  When this method\n   is not defined, ``__len__()`` is called, if it is defined, and the\n   object is considered true if its result is nonzero.  If a class\n   defines neither ``__len__()`` nor ``__bool__()``, all its instances\n   are considered true.\n\n\nCustomizing attribute access\n============================\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of ``x.name``)\nfor class instances.\n\nobject.__getattr__(self, name)\n\n   Called when an attribute lookup has not found the attribute in the\n   usual places (i.e. it is not an instance attribute nor is it found\n   in the class tree for ``self``).  ``name`` is the attribute name.\n   This method should return the (computed) attribute value or raise\n   an ``AttributeError`` exception.\n\n   Note that if the attribute is found through the normal mechanism,\n   ``__getattr__()`` is not called.  (This is an intentional asymmetry\n   between ``__getattr__()`` and ``__setattr__()``.) This is done both\n   for efficiency reasons and because otherwise ``__getattr__()``\n   would have no way to access other attributes of the instance.  Note\n   that at least for instance variables, you can fake total control by\n   not inserting any values in the instance attribute dictionary (but\n   instead inserting them in another object).  See the\n   ``__getattribute__()`` method below for a way to actually get total\n   control over attribute access.\n\nobject.__getattribute__(self, name)\n\n   Called unconditionally to implement attribute accesses for\n   instances of the class. If the class also defines\n   ``__getattr__()``, the latter will not be called unless\n   ``__getattribute__()`` either calls it explicitly or raises an\n   ``AttributeError``. This method should return the (computed)\n   attribute value or raise an ``AttributeError`` exception. In order\n   to avoid infinite recursion in this method, its implementation\n   should always call the base class method with the same name to\n   access any attributes it needs, for example,\n   ``object.__getattribute__(self, name)``.\n\n   Note: This method may still be bypassed when looking up special methods\n     as the result of implicit invocation via language syntax or\n     built-in functions. See *Special method lookup*.\n\nobject.__setattr__(self, name, value)\n\n   Called when an attribute assignment is attempted.  This is called\n   instead of the normal mechanism (i.e. store the value in the\n   instance dictionary). *name* is the attribute name, *value* is the\n   value to be assigned to it.\n\n   If ``__setattr__()`` wants to assign to an instance attribute, it\n   should call the base class method with the same name, for example,\n   ``object.__setattr__(self, name, value)``.\n\nobject.__delattr__(self, name)\n\n   Like ``__setattr__()`` but for attribute deletion instead of\n   assignment.  This should only be implemented if ``del obj.name`` is\n   meaningful for the object.\n\nobject.__dir__(self)\n\n   Called when ``dir()`` is called on the object. A sequence must be\n   returned. ``dir()`` converts the returned sequence to a list and\n   sorts it.\n\n\nImplementing Descriptors\n------------------------\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents).  In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' ``__dict__``.\n\nobject.__get__(self, instance, owner)\n\n   Called to get the attribute of the owner class (class attribute\n   access) or of an instance of that class (instance attribute\n   access). *owner* is always the owner class, while *instance* is the\n   instance that the attribute was accessed through, or ``None`` when\n   the attribute is accessed through the *owner*.  This method should\n   return the (computed) attribute value or raise an\n   ``AttributeError`` exception.\n\nobject.__set__(self, instance, value)\n\n   Called to set the attribute on an instance *instance* of the owner\n   class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n   Called to delete the attribute on an instance *instance* of the\n   owner class.\n\n\nInvoking Descriptors\n--------------------\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol:  ``__get__()``, ``__set__()``, and\n``__delete__()``. If any of those methods are defined for an object,\nit is said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, ``a.x`` has a\nlookup chain starting with ``a.__dict__[\'x\']``, then\n``type(a).__dict__[\'x\']``, and continuing through the base classes of\n``type(a)`` excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead.  Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called.\n\nThe starting point for descriptor invocation is a binding, ``a.x``.\nHow the arguments are assembled depends on ``a``:\n\nDirect Call\n   The simplest and least common call is when user code directly\n   invokes a descriptor method:    ``x.__get__(a)``.\n\nInstance Binding\n   If binding to an object instance, ``a.x`` is transformed into the\n   call: ``type(a).__dict__[\'x\'].__get__(a, type(a))``.\n\nClass Binding\n   If binding to a class, ``A.x`` is transformed into the call:\n   ``A.__dict__[\'x\'].__get__(None, A)``.\n\nSuper Binding\n   If ``a`` is an instance of ``super``, then the binding ``super(B,\n   obj).m()`` searches ``obj.__class__.__mro__`` for the base class\n   ``A`` immediately preceding ``B`` and then invokes the descriptor\n   with the call: ``A.__dict__[\'m\'].__get__(obj, obj.__class__)``.\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined.  A descriptor can define\nany combination of ``__get__()``, ``__set__()`` and ``__delete__()``.\nIf it does not define ``__get__()``, then accessing the attribute will\nreturn the descriptor object itself unless there is a value in the\nobject\'s instance dictionary.  If the descriptor defines ``__set__()``\nand/or ``__delete__()``, it is a data descriptor; if it defines\nneither, it is a non-data descriptor.  Normally, data descriptors\ndefine both ``__get__()`` and ``__set__()``, while non-data\ndescriptors have just the ``__get__()`` method.  Data descriptors with\n``__set__()`` and ``__get__()`` defined always override a redefinition\nin an instance dictionary.  In contrast, non-data descriptors can be\noverridden by instances.\n\nPython methods (including ``staticmethod()`` and ``classmethod()``)\nare implemented as non-data descriptors.  Accordingly, instances can\nredefine and override methods.  This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe ``property()`` function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n---------\n\nBy default, instances of classes have a dictionary for attribute\nstorage.  This wastes space for objects having very few instance\nvariables.  The space consumption can become acute when creating large\nnumbers of instances.\n\nThe default can be overridden by defining *__slots__* in a class\ndefinition. The *__slots__* declaration takes a sequence of instance\nvariables and reserves just enough space in each instance to hold a\nvalue for each variable.  Space is saved because *__dict__* is not\ncreated for each instance.\n\nobject.__slots__\n\n   This class variable can be assigned a string, iterable, or sequence\n   of strings with variable names used by instances.  If defined in a\n   class, *__slots__* reserves space for the declared variables and\n   prevents the automatic creation of *__dict__* and *__weakref__* for\n   each instance.\n\n\nNotes on using *__slots__*\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n  attribute of that class will always be accessible, so a *__slots__*\n  definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n  variables not listed in the *__slots__* definition.  Attempts to\n  assign to an unlisted variable name raises ``AttributeError``. If\n  dynamic assignment of new variables is desired, then add\n  ``\'__dict__\'`` to the sequence of strings in the *__slots__*\n  declaration.\n\n* Without a *__weakref__* variable for each instance, classes defining\n  *__slots__* do not support weak references to its instances. If weak\n  reference support is needed, then add ``\'__weakref__\'`` to the\n  sequence of strings in the *__slots__* declaration.\n\n* *__slots__* are implemented at the class level by creating\n  descriptors (*Implementing Descriptors*) for each variable name.  As\n  a result, class attributes cannot be used to set default values for\n  instance variables defined by *__slots__*; otherwise, the class\n  attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n  where it is defined.  As a result, subclasses will have a *__dict__*\n  unless they also define *__slots__* (which must only contain names\n  of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the instance\n  variable defined by the base class slot is inaccessible (except by\n  retrieving its descriptor directly from the base class). This\n  renders the meaning of the program undefined.  In the future, a\n  check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n  "variable-length" built-in types such as ``int``, ``str`` and\n  ``tuple``.\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\n  also be used; however, in the future, special meaning may be\n  assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n  *__slots__*.\n\n\nCustomizing class creation\n==========================\n\nBy default, classes are constructed using ``type()``. The class body\nis executed in a new namespace and the class name is bound locally to\nthe result of ``type(name, bases, namespace)``.\n\nThe class creation process can be customised by passing the\n``metaclass`` keyword argument in the class definition line, or by\ninheriting from an existing class that included such an argument. In\nthe following example, both ``MyClass`` and ``MySubclass`` are\ninstances of ``Meta``:\n\n   class Meta(type):\n       pass\n\n   class MyClass(metaclass=Meta):\n       pass\n\n   class MySubclass(MyClass):\n       pass\n\nAny other keyword arguments that are specified in the class definition\nare passed through to all metaclass operations described below.\n\nWhen a class definition is executed, the following steps occur:\n\n* the appropriate metaclass is determined\n\n* the class namespace is prepared\n\n* the class body is executed\n\n* the class object is created\n\n\nDetermining the appropriate metaclass\n-------------------------------------\n\nThe appropriate metaclass for a class definition is determined as\nfollows:\n\n* if no bases and no explicit metaclass are given, then ``type()`` is\n  used\n\n* if an explicit metaclass is given and it is *not* an instance of\n  ``type()``, then it is used directly as the metaclass\n\n* if an instance of ``type()`` is given as the explicit metaclass, or\n  bases are defined, then the most derived metaclass is used\n\nThe most derived metaclass is selected from the explicitly specified\nmetaclass (if any) and the metaclasses (i.e. ``type(cls)``) of all\nspecified base classes. The most derived metaclass is one which is a\nsubtype of *all* of these candidate metaclasses. If none of the\ncandidate metaclasses meets that criterion, then the class definition\nwill fail with ``TypeError``.\n\n\nPreparing the class namespace\n-----------------------------\n\nOnce the appropriate metaclass has been identified, then the class\nnamespace is prepared. If the metaclass has a ``__prepare__``\nattribute, it is called as ``namespace = metaclass.__prepare__(name,\nbases, **kwds)`` (where the additional keyword arguments, if any, come\nfrom the class definition).\n\nIf the metaclass has no ``__prepare__`` attribute, then the class\nnamespace is initialised as an empty ``dict()`` instance.\n\nSee also:\n\n   **PEP 3115** - Metaclasses in Python 3000\n      Introduced the ``__prepare__`` namespace hook\n\n\nExecuting the class body\n------------------------\n\nThe class body is executed (approximately) as ``exec(body, globals(),\nnamespace)``. The key difference from a normal call to ``exec()`` is\nthat lexical scoping allows the class body (including any methods) to\nreference names from the current and outer scopes when the class\ndefinition occurs inside a function.\n\nHowever, even when the class definition occurs inside the function,\nmethods defined inside the class still cannot see names defined at the\nclass scope. Class variables must be accessed through the first\nparameter of instance or class methods, and cannot be accessed at all\nfrom static methods.\n\n\nCreating the class object\n-------------------------\n\nOnce the class namespace has been populated by executing the class\nbody, the class object is created by calling ``metaclass(name, bases,\nnamespace, **kwds)`` (the additional keywords passed here are the same\nas those passed to ``__prepare__``).\n\nThis class object is the one that will be referenced by the zero-\nargument form of ``super()``. ``__class__`` is an implicit closure\nreference created by the compiler if any methods in a class body refer\nto either ``__class__`` or ``super``. This allows the zero argument\nform of ``super()`` to correctly identify the class being defined\nbased on lexical scoping, while the class or instance that was used to\nmake the current call is identified based on the first argument passed\nto the method.\n\nAfter the class object is created, it is passed to the class\ndecorators included in the class definition (if any) and the resulting\nobject is bound in the local namespace as the defined class.\n\nSee also:\n\n   **PEP 3135** - New super\n      Describes the implicit ``__class__`` closure reference\n\n\nMetaclass example\n-----------------\n\nThe potential uses for metaclasses are boundless. Some ideas that have\nbeen explored include logging, interface checking, automatic\ndelegation, automatic property creation, proxies, frameworks, and\nautomatic resource locking/synchronization.\n\nHere is an example of a metaclass that uses an\n``collections.OrderedDict`` to remember the order that class members\nwere defined:\n\n   class OrderedClass(type):\n\n        @classmethod\n        def __prepare__(metacls, name, bases, **kwds):\n           return collections.OrderedDict()\n\n        def __new__(cls, name, bases, namespace, **kwds):\n           result = type.__new__(cls, name, bases, dict(namespace))\n           result.members = tuple(namespace)\n           return result\n\n   class A(metaclass=OrderedClass):\n       def one(self): pass\n       def two(self): pass\n       def three(self): pass\n       def four(self): pass\n\n   >>> A.members\n   (\'__module__\', \'one\', \'two\', \'three\', \'four\')\n\nWhen the class definition for *A* gets executed, the process begins\nwith calling the metaclass\'s ``__prepare__()`` method which returns an\nempty ``collections.OrderedDict``.  That mapping records the methods\nand attributes of *A* as they are defined within the body of the class\nstatement. Once those definitions are executed, the ordered dictionary\nis fully populated and the metaclass\'s ``__new__()`` method gets\ninvoked.  That method builds the new type and it saves the ordered\ndictionary keys in an attribute called ``members``.\n\n\nCustomizing instance and subclass checks\n========================================\n\nThe following methods are used to override the default behavior of the\n``isinstance()`` and ``issubclass()`` built-in functions.\n\nIn particular, the metaclass ``abc.ABCMeta`` implements these methods\nin order to allow the addition of Abstract Base Classes (ABCs) as\n"virtual base classes" to any class or type (including built-in\ntypes), including other ABCs.\n\nclass.__instancecheck__(self, instance)\n\n   Return true if *instance* should be considered a (direct or\n   indirect) instance of *class*. If defined, called to implement\n   ``isinstance(instance, class)``.\n\nclass.__subclasscheck__(self, subclass)\n\n   Return true if *subclass* should be considered a (direct or\n   indirect) subclass of *class*.  If defined, called to implement\n   ``issubclass(subclass, class)``.\n\nNote that these methods are looked up on the type (metaclass) of a\nclass.  They cannot be defined as class methods in the actual class.\nThis is consistent with the lookup of special methods that are called\non instances, only in this case the instance is itself a class.\n\nSee also:\n\n   **PEP 3119** - Introducing Abstract Base Classes\n      Includes the specification for customizing ``isinstance()`` and\n      ``issubclass()`` behavior through ``__instancecheck__()`` and\n      ``__subclasscheck__()``, with motivation for this functionality\n      in the context of adding Abstract Base Classes (see the ``abc``\n      module) to the language.\n\n\nEmulating callable objects\n==========================\n\nobject.__call__(self[, args...])\n\n   Called when the instance is "called" as a function; if this method\n   is defined, ``x(arg1, arg2, ...)`` is a shorthand for\n   ``x.__call__(arg1, arg2, ...)``.\n\n\nEmulating container types\n=========================\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well.  The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which ``0 <= k < N``\nwhere *N* is the length of the sequence, or slice objects, which\ndefine a range of items.  It is also recommended that mappings provide\nthe methods ``keys()``, ``values()``, ``items()``, ``get()``,\n``clear()``, ``setdefault()``, ``pop()``, ``popitem()``, ``copy()``,\nand ``update()`` behaving similar to those for Python\'s standard\ndictionary objects.  The ``collections`` module provides a\n``MutableMapping`` abstract base class to help create those methods\nfrom a base set of ``__getitem__()``, ``__setitem__()``,\n``__delitem__()``, and ``keys()``. Mutable sequences should provide\nmethods ``append()``, ``count()``, ``index()``, ``extend()``,\n``insert()``, ``pop()``, ``remove()``, ``reverse()`` and ``sort()``,\nlike Python standard list objects.  Finally, sequence types should\nimplement addition (meaning concatenation) and multiplication (meaning\nrepetition) by defining the methods ``__add__()``, ``__radd__()``,\n``__iadd__()``, ``__mul__()``, ``__rmul__()`` and ``__imul__()``\ndescribed below; they should not define other numerical operators.  It\nis recommended that both mappings and sequences implement the\n``__contains__()`` method to allow efficient use of the ``in``\noperator; for mappings, ``in`` should search the mapping\'s keys; for\nsequences, it should search through the values.  It is further\nrecommended that both mappings and sequences implement the\n``__iter__()`` method to allow efficient iteration through the\ncontainer; for mappings, ``__iter__()`` should be the same as\n``keys()``; for sequences, it should iterate through the values.\n\nobject.__len__(self)\n\n   Called to implement the built-in function ``len()``.  Should return\n   the length of the object, an integer ``>=`` 0.  Also, an object\n   that doesn\'t define a ``__bool__()`` method and whose ``__len__()``\n   method returns zero is considered to be false in a Boolean context.\n\nobject.__length_hint__(self)\n\n   Called to implement ``operator.length_hint()``. Should return an\n   estimated length for the object (which may be greater or less than\n   the actual length). The length must be an integer ``>=`` 0. This\n   method is purely an optimization and is never required for\n   correctness.\n\n   New in version 3.4.\n\nNote: Slicing is done exclusively with the following three methods.  A\n  call like\n\n     a[1:2] = b\n\n  is translated to\n\n     a[slice(1, 2, None)] = b\n\n  and so forth.  Missing slice items are always filled in with\n  ``None``.\n\nobject.__getitem__(self, key)\n\n   Called to implement evaluation of ``self[key]``. For sequence\n   types, the accepted keys should be integers and slice objects.\n   Note that the special interpretation of negative indexes (if the\n   class wishes to emulate a sequence type) is up to the\n   ``__getitem__()`` method. If *key* is of an inappropriate type,\n   ``TypeError`` may be raised; if of a value outside the set of\n   indexes for the sequence (after any special interpretation of\n   negative values), ``IndexError`` should be raised. For mapping\n   types, if *key* is missing (not in the container), ``KeyError``\n   should be raised.\n\n   Note: ``for`` loops expect that an ``IndexError`` will be raised for\n     illegal indexes to allow proper detection of the end of the\n     sequence.\n\nobject.__setitem__(self, key, value)\n\n   Called to implement assignment to ``self[key]``.  Same note as for\n   ``__getitem__()``.  This should only be implemented for mappings if\n   the objects support changes to the values for keys, or if new keys\n   can be added, or for sequences if elements can be replaced.  The\n   same exceptions should be raised for improper *key* values as for\n   the ``__getitem__()`` method.\n\nobject.__delitem__(self, key)\n\n   Called to implement deletion of ``self[key]``.  Same note as for\n   ``__getitem__()``.  This should only be implemented for mappings if\n   the objects support removal of keys, or for sequences if elements\n   can be removed from the sequence.  The same exceptions should be\n   raised for improper *key* values as for the ``__getitem__()``\n   method.\n\nobject.__iter__(self)\n\n   This method is called when an iterator is required for a container.\n   This method should return a new iterator object that can iterate\n   over all the objects in the container.  For mappings, it should\n   iterate over the keys of the container, and should also be made\n   available as the method ``keys()``.\n\n   Iterator objects also need to implement this method; they are\n   required to return themselves.  For more information on iterator\n   objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n   Called (if present) by the ``reversed()`` built-in to implement\n   reverse iteration.  It should return a new iterator object that\n   iterates over all the objects in the container in reverse order.\n\n   If the ``__reversed__()`` method is not provided, the\n   ``reversed()`` built-in will fall back to using the sequence\n   protocol (``__len__()`` and ``__getitem__()``).  Objects that\n   support the sequence protocol should only provide\n   ``__reversed__()`` if they can provide an implementation that is\n   more efficient than the one provided by ``reversed()``.\n\nThe membership test operators (``in`` and ``not in``) are normally\nimplemented as an iteration through a sequence.  However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n   Called to implement membership test operators.  Should return true\n   if *item* is in *self*, false otherwise.  For mapping objects, this\n   should consider the keys of the mapping rather than the values or\n   the key-item pairs.\n\n   For objects that don\'t define ``__contains__()``, the membership\n   test first tries iteration via ``__iter__()``, then the old\n   sequence iteration protocol via ``__getitem__()``, see *this\n   section in the language reference*.\n\n\nEmulating numeric types\n=======================\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__truediv__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n   These methods are called to implement the binary arithmetic\n   operations (``+``, ``-``, ``*``, ``/``, ``//``, ``%``,\n   ``divmod()``, ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``,\n   ``|``).  For instance, to evaluate the expression ``x + y``, where\n   *x* is an instance of a class that has an ``__add__()`` method,\n   ``x.__add__(y)`` is called.  The ``__divmod__()`` method should be\n   the equivalent to using ``__floordiv__()`` and ``__mod__()``; it\n   should not be related to ``__truediv__()``.  Note that\n   ``__pow__()`` should be defined to accept an optional third\n   argument if the ternary version of the built-in ``pow()`` function\n   is to be supported.\n\n   If one of those methods does not support the operation with the\n   supplied arguments, it should return ``NotImplemented``.\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n   These methods are called to implement the binary arithmetic\n   operations (``+``, ``-``, ``*``, ``/``, ``//``, ``%``,\n   ``divmod()``, ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``,\n   ``|``) with reflected (swapped) operands. These functions are only\n   called if the left operand does not support the corresponding\n   operation and the operands are of different types. [2]  For\n   instance, to evaluate the expression ``x - y``, where *y* is an\n   instance of a class that has an ``__rsub__()`` method,\n   ``y.__rsub__(x)`` is called if ``x.__sub__(y)`` returns\n   *NotImplemented*.\n\n   Note that ternary ``pow()`` will not try calling ``__rpow__()``\n   (the coercion rules would become too complicated).\n\n   Note: If the right operand\'s type is a subclass of the left operand\'s\n     type and that subclass provides the reflected method for the\n     operation, this method will be called before the left operand\'s\n     non-reflected method.  This behavior allows subclasses to\n     override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n   These methods are called to implement the augmented arithmetic\n   assignments (``+=``, ``-=``, ``*=``, ``/=``, ``//=``, ``%=``,\n   ``**=``, ``<<=``, ``>>=``, ``&=``, ``^=``, ``|=``).  These methods\n   should attempt to do the operation in-place (modifying *self*) and\n   return the result (which could be, but does not have to be,\n   *self*).  If a specific method is not defined, the augmented\n   assignment falls back to the normal methods.  For instance, to\n   execute the statement ``x += y``, where *x* is an instance of a\n   class that has an ``__iadd__()`` method, ``x.__iadd__(y)`` is\n   called.  If *x* is an instance of a class that does not define a\n   ``__iadd__()`` method, ``x.__add__(y)`` and ``y.__radd__(x)`` are\n   considered, as with the evaluation of ``x + y``.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n   Called to implement the unary arithmetic operations (``-``, ``+``,\n   ``abs()`` and ``~``).\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__float__(self)\nobject.__round__(self[, n])\n\n   Called to implement the built-in functions ``complex()``,\n   ``int()``, ``float()`` and ``round()``.  Should return a value of\n   the appropriate type.\n\nobject.__index__(self)\n\n   Called to implement ``operator.index()``.  Also called whenever\n   Python needs an integer object (such as in slicing, or in the\n   built-in ``bin()``, ``hex()`` and ``oct()`` functions). Must return\n   an integer.\n\n\nWith Statement Context Managers\n===============================\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a ``with`` statement. The context\nmanager handles the entry into, and the exit from, the desired runtime\ncontext for the execution of the block of code.  Context managers are\nnormally invoked using the ``with`` statement (described in section\n*The with statement*), but can also be used by directly invoking their\nmethods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n   Enter the runtime context related to this object. The ``with``\n   statement will bind this method\'s return value to the target(s)\n   specified in the ``as`` clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n   Exit the runtime context related to this object. The parameters\n   describe the exception that caused the context to be exited. If the\n   context was exited without an exception, all three arguments will\n   be ``None``.\n\n   If an exception is supplied, and the method wishes to suppress the\n   exception (i.e., prevent it from being propagated), it should\n   return a true value. Otherwise, the exception will be processed\n   normally upon exit from this method.\n\n   Note that ``__exit__()`` methods should not reraise the passed-in\n   exception; this is the caller\'s responsibility.\n\nSee also:\n\n   **PEP 0343** - The "with" statement\n      The specification, background, and examples for the Python\n      ``with`` statement.\n\n\nSpecial method lookup\n=====================\n\nFor custom classes, implicit invocations of special methods are only\nguaranteed to work correctly if defined on an object\'s type, not in\nthe object\'s instance dictionary.  That behaviour is the reason why\nthe following code raises an exception:\n\n   >>> class C:\n   ...     pass\n   ...\n   >>> c = C()\n   >>> c.__len__ = lambda: 5\n   >>> len(c)\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in <module>\n   TypeError: object of type \'C\' has no len()\n\nThe rationale behind this behaviour lies with a number of special\nmethods such as ``__hash__()`` and ``__repr__()`` that are implemented\nby all objects, including type objects. If the implicit lookup of\nthese methods used the conventional lookup process, they would fail\nwhen invoked on the type object itself:\n\n   >>> 1 .__hash__() == hash(1)\n   True\n   >>> int.__hash__() == hash(int)\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in <module>\n   TypeError: descriptor \'__hash__\' of \'int\' object needs an argument\n\nIncorrectly attempting to invoke an unbound method of a class in this\nway is sometimes referred to as \'metaclass confusion\', and is avoided\nby bypassing the instance when looking up special methods:\n\n   >>> type(1).__hash__(1) == hash(1)\n   True\n   >>> type(int).__hash__(int) == hash(int)\n   True\n\nIn addition to bypassing any instance attributes in the interest of\ncorrectness, implicit special method lookup generally also bypasses\nthe ``__getattribute__()`` method even of the object\'s metaclass:\n\n   >>> class Meta(type):\n   ...    def __getattribute__(*args):\n   ...       print("Metaclass getattribute invoked")\n   ...       return type.__getattribute__(*args)\n   ...\n   >>> class C(object, metaclass=Meta):\n   ...     def __len__(self):\n   ...         return 10\n   ...     def __getattribute__(*args):\n   ...         print("Class getattribute invoked")\n   ...         return object.__getattribute__(*args)\n   ...\n   >>> c = C()\n   >>> c.__len__()                 # Explicit lookup via instance\n   Class getattribute invoked\n   10\n   >>> type(c).__len__(c)          # Explicit lookup via type\n   Metaclass getattribute invoked\n   10\n   >>> len(c)                      # Implicit lookup\n   10\n\nBypassing the ``__getattribute__()`` machinery in this fashion\nprovides significant scope for speed optimisations within the\ninterpreter, at the cost of some flexibility in the handling of\nspecial methods (the special method *must* be set on the class object\nitself in order to be consistently invoked by the interpreter).\n\n-[ Footnotes ]-\n\n[1] It *is* possible in some cases to change an object\'s type, under\n    certain controlled conditions. It generally isn\'t a good idea\n    though, since it can lead to some very strange behaviour if it is\n    handled incorrectly.\n\n[2] For operands of the same type, it is assumed that if the non-\n    reflected method (such as ``__add__()``) fails the operation is\n    not supported, which is why the reflected method is not called.\n',
@@ -66,12 +66,12 @@
  'subscriptions': '\nSubscriptions\n*************\n\nA subscription selects an item of a sequence (string, tuple or list)\nor mapping (dictionary) object:\n\n   subscription ::= primary "[" expression_list "]"\n\nThe primary must evaluate to an object that supports subscription,\ne.g. a list or dictionary.  User-defined objects can support\nsubscription by defining a ``__getitem__()`` method.\n\nFor built-in objects, there are two types of objects that support\nsubscription:\n\nIf the primary is a mapping, the expression list must evaluate to an\nobject whose value is one of the keys of the mapping, and the\nsubscription selects the value in the mapping that corresponds to that\nkey.  (The expression list is a tuple except if it has exactly one\nitem.)\n\nIf the primary is a sequence, the expression (list) must evaluate to\nan integer or a slice (as discussed in the following section).\n\nThe formal syntax makes no special provision for negative indices in\nsequences; however, built-in sequences all provide a ``__getitem__()``\nmethod that interprets negative indices by adding the length of the\nsequence to the index (so that ``x[-1]`` selects the last item of\n``x``).  The resulting value must be a nonnegative integer less than\nthe number of items in the sequence, and the subscription selects the\nitem whose index is that value (counting from zero). Since the support\nfor negative indices and slicing occurs in the object\'s\n``__getitem__()`` method, subclasses overriding this method will need\nto explicitly add that support.\n\nA string\'s items are characters.  A character is not a separate data\ntype but a string of exactly one character.\n',
  'truth': "\nTruth Value Testing\n*******************\n\nAny object can be tested for truth value, for use in an ``if`` or\n``while`` condition or as operand of the Boolean operations below. The\nfollowing values are considered false:\n\n* ``None``\n\n* ``False``\n\n* zero of any numeric type, for example, ``0``, ``0.0``, ``0j``.\n\n* any empty sequence, for example, ``''``, ``()``, ``[]``.\n\n* any empty mapping, for example, ``{}``.\n\n* instances of user-defined classes, if the class defines a\n  ``__bool__()`` or ``__len__()`` method, when that method returns the\n  integer zero or ``bool`` value ``False``. [1]\n\nAll other values are considered true --- so objects of many types are\nalways true.\n\nOperations and built-in functions that have a Boolean result always\nreturn ``0`` or ``False`` for false and ``1`` or ``True`` for true,\nunless otherwise stated. (Important exception: the Boolean operations\n``or`` and ``and`` always return one of their operands.)\n",
  'try': '\nThe ``try`` statement\n*********************\n\nThe ``try`` statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n   try_stmt  ::= try1_stmt | try2_stmt\n   try1_stmt ::= "try" ":" suite\n                 ("except" [expression ["as" target]] ":" suite)+\n                 ["else" ":" suite]\n                 ["finally" ":" suite]\n   try2_stmt ::= "try" ":" suite\n                 "finally" ":" suite\n\nThe ``except`` clause(s) specify one or more exception handlers. When\nno exception occurs in the ``try`` clause, no exception handler is\nexecuted. When an exception occurs in the ``try`` suite, a search for\nan exception handler is started.  This search inspects the except\nclauses in turn until one is found that matches the exception.  An\nexpression-less except clause, if present, must be last; it matches\nany exception.  For an except clause with an expression, that\nexpression is evaluated, and the clause matches the exception if the\nresulting object is "compatible" with the exception.  An object is\ncompatible with an exception if it is the class or a base class of the\nexception object or a tuple containing an item compatible with the\nexception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire ``try`` statement\nraised the exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified after the ``as`` keyword in that except clause,\nif present, and the except clause\'s suite is executed.  All except\nclauses must have an executable block.  When the end of this block is\nreached, execution continues normally after the entire try statement.\n(This means that if two nested handlers exist for the same exception,\nand the exception occurs in the try clause of the inner handler, the\nouter handler will not handle the exception.)\n\nWhen an exception has been assigned using ``as target``, it is cleared\nat the end of the except clause.  This is as if\n\n   except E as N:\n       foo\n\nwas translated to\n\n   except E as N:\n       try:\n           foo\n       finally:\n           del N\n\nThis means the exception must be assigned to a different name to be\nable to refer to it after the except clause.  Exceptions are cleared\nbecause with the traceback attached to them, they form a reference\ncycle with the stack frame, keeping all locals in that frame alive\nuntil the next garbage collection occurs.\n\nBefore an except clause\'s suite is executed, details about the\nexception are stored in the ``sys`` module and can be access via\n``sys.exc_info()``. ``sys.exc_info()`` returns a 3-tuple consisting of\nthe exception class, the exception instance and a traceback object\n(see section *The standard type hierarchy*) identifying the point in\nthe program where the exception occurred.  ``sys.exc_info()`` values\nare restored to their previous values (before the call) when returning\nfrom a function that handled an exception.\n\nThe optional ``else`` clause is executed if and when control flows off\nthe end of the ``try`` clause. [2] Exceptions in the ``else`` clause\nare not handled by the preceding ``except`` clauses.\n\nIf ``finally`` is present, it specifies a \'cleanup\' handler.  The\n``try`` clause is executed, including any ``except`` and ``else``\nclauses.  If an exception occurs in any of the clauses and is not\nhandled, the exception is temporarily saved. The ``finally`` clause is\nexecuted.  If there is a saved exception it is re-raised at the end of\nthe ``finally`` clause.  If the ``finally`` clause raises another\nexception, the saved exception is set as the context of the new\nexception. If the ``finally`` clause executes a ``return`` or\n``break`` statement, the saved exception is discarded:\n\n   def f():\n       try:\n           1/0\n       finally:\n           return 42\n\n   >>> f()\n   42\n\nThe exception information is not available to the program during\nexecution of the ``finally`` clause.\n\nWhen a ``return``, ``break`` or ``continue`` statement is executed in\nthe ``try`` suite of a ``try``...``finally`` statement, the\n``finally`` clause is also executed \'on the way out.\' A ``continue``\nstatement is illegal in the ``finally`` clause. (The reason is a\nproblem with the current implementation --- this restriction may be\nlifted in the future).\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the ``raise`` statement to\ngenerate exceptions may be found in section *The raise statement*.\n',
- 'types': '\nThe standard type hierarchy\n***************************\n\nBelow is a list of the types that are built into Python.  Extension\nmodules (written in C, Java, or other languages, depending on the\nimplementation) can define additional types.  Future versions of\nPython may add types to the type hierarchy (e.g., rational numbers,\nefficiently stored arrays of integers, etc.), although such additions\nwill often be provided via the standard library instead.\n\nSome of the type descriptions below contain a paragraph listing\n\'special attributes.\'  These are attributes that provide access to the\nimplementation and are not intended for general use.  Their definition\nmay change in the future.\n\nNone\n   This type has a single value.  There is a single object with this\n   value. This object is accessed through the built-in name ``None``.\n   It is used to signify the absence of a value in many situations,\n   e.g., it is returned from functions that don\'t explicitly return\n   anything. Its truth value is false.\n\nNotImplemented\n   This type has a single value.  There is a single object with this\n   value. This object is accessed through the built-in name\n   ``NotImplemented``. Numeric methods and rich comparison methods may\n   return this value if they do not implement the operation for the\n   operands provided.  (The interpreter will then try the reflected\n   operation, or some other fallback, depending on the operator.)  Its\n   truth value is true.\n\nEllipsis\n   This type has a single value.  There is a single object with this\n   value. This object is accessed through the literal ``...`` or the\n   built-in name ``Ellipsis``.  Its truth value is true.\n\n``numbers.Number``\n   These are created by numeric literals and returned as results by\n   arithmetic operators and arithmetic built-in functions.  Numeric\n   objects are immutable; once created their value never changes.\n   Python numbers are of course strongly related to mathematical\n   numbers, but subject to the limitations of numerical representation\n   in computers.\n\n   Python distinguishes between integers, floating point numbers, and\n   complex numbers:\n\n   ``numbers.Integral``\n      These represent elements from the mathematical set of integers\n      (positive and negative).\n\n      There are two types of integers:\n\n      Integers (``int``)\n\n         These represent numbers in an unlimited range, subject to\n         available (virtual) memory only.  For the purpose of shift\n         and mask operations, a binary representation is assumed, and\n         negative numbers are represented in a variant of 2\'s\n         complement which gives the illusion of an infinite string of\n         sign bits extending to the left.\n\n      Booleans (``bool``)\n         These represent the truth values False and True.  The two\n         objects representing the values False and True are the only\n         Boolean objects. The Boolean type is a subtype of the integer\n         type, and Boolean values behave like the values 0 and 1,\n         respectively, in almost all contexts, the exception being\n         that when converted to a string, the strings ``"False"`` or\n         ``"True"`` are returned, respectively.\n\n      The rules for integer representation are intended to give the\n      most meaningful interpretation of shift and mask operations\n      involving negative integers.\n\n   ``numbers.Real`` (``float``)\n      These represent machine-level double precision floating point\n      numbers. You are at the mercy of the underlying machine\n      architecture (and C or Java implementation) for the accepted\n      range and handling of overflow. Python does not support single-\n      precision floating point numbers; the savings in processor and\n      memory usage that are usually the reason for using these is\n      dwarfed by the overhead of using objects in Python, so there is\n      no reason to complicate the language with two kinds of floating\n      point numbers.\n\n   ``numbers.Complex`` (``complex``)\n      These represent complex numbers as a pair of machine-level\n      double precision floating point numbers.  The same caveats apply\n      as for floating point numbers. The real and imaginary parts of a\n      complex number ``z`` can be retrieved through the read-only\n      attributes ``z.real`` and ``z.imag``.\n\nSequences\n   These represent finite ordered sets indexed by non-negative\n   numbers. The built-in function ``len()`` returns the number of\n   items of a sequence. When the length of a sequence is *n*, the\n   index set contains the numbers 0, 1, ..., *n*-1.  Item *i* of\n   sequence *a* is selected by ``a[i]``.\n\n   Sequences also support slicing: ``a[i:j]`` selects all items with\n   index *k* such that *i* ``<=`` *k* ``<`` *j*.  When used as an\n   expression, a slice is a sequence of the same type.  This implies\n   that the index set is renumbered so that it starts at 0.\n\n   Some sequences also support "extended slicing" with a third "step"\n   parameter: ``a[i:j:k]`` selects all items of *a* with index *x*\n   where ``x = i + n*k``, *n* ``>=`` ``0`` and *i* ``<=`` *x* ``<``\n   *j*.\n\n   Sequences are distinguished according to their mutability:\n\n   Immutable sequences\n      An object of an immutable sequence type cannot change once it is\n      created.  (If the object contains references to other objects,\n      these other objects may be mutable and may be changed; however,\n      the collection of objects directly referenced by an immutable\n      object cannot change.)\n\n      The following types are immutable sequences:\n\n      Strings\n         A string is a sequence of values that represent Unicode\n         codepoints. All the codepoints in range ``U+0000 - U+10FFFF``\n         can be represented in a string.  Python doesn\'t have a\n         ``chr`` type, and every character in the string is\n         represented as a string object with length ``1``.  The built-\n         in function ``ord()`` converts a character to its codepoint\n         (as an integer); ``chr()`` converts an integer in range ``0 -\n         10FFFF`` to the corresponding character. ``str.encode()`` can\n         be used to convert a ``str`` to ``bytes`` using the given\n         encoding, and ``bytes.decode()`` can be used to achieve the\n         opposite.\n\n      Tuples\n         The items of a tuple are arbitrary Python objects. Tuples of\n         two or more items are formed by comma-separated lists of\n         expressions.  A tuple of one item (a \'singleton\') can be\n         formed by affixing a comma to an expression (an expression by\n         itself does not create a tuple, since parentheses must be\n         usable for grouping of expressions).  An empty tuple can be\n         formed by an empty pair of parentheses.\n\n      Bytes\n         A bytes object is an immutable array.  The items are 8-bit\n         bytes, represented by integers in the range 0 <= x < 256.\n         Bytes literals (like ``b\'abc\'``) and the built-in function\n         ``bytes()`` can be used to construct bytes objects.  Also,\n         bytes objects can be decoded to strings via the ``decode()``\n         method.\n\n   Mutable sequences\n      Mutable sequences can be changed after they are created.  The\n      subscription and slicing notations can be used as the target of\n      assignment and ``del`` (delete) statements.\n\n      There are currently two intrinsic mutable sequence types:\n\n      Lists\n         The items of a list are arbitrary Python objects.  Lists are\n         formed by placing a comma-separated list of expressions in\n         square brackets. (Note that there are no special cases needed\n         to form lists of length 0 or 1.)\n\n      Byte Arrays\n         A bytearray object is a mutable array. They are created by\n         the built-in ``bytearray()`` constructor.  Aside from being\n         mutable (and hence unhashable), byte arrays otherwise provide\n         the same interface and functionality as immutable bytes\n         objects.\n\n      The extension module ``array`` provides an additional example of\n      a mutable sequence type, as does the ``collections`` module.\n\nSet types\n   These represent unordered, finite sets of unique, immutable\n   objects. As such, they cannot be indexed by any subscript. However,\n   they can be iterated over, and the built-in function ``len()``\n   returns the number of items in a set. Common uses for sets are fast\n   membership testing, removing duplicates from a sequence, and\n   computing mathematical operations such as intersection, union,\n   difference, and symmetric difference.\n\n   For set elements, the same immutability rules apply as for\n   dictionary keys. Note that numeric types obey the normal rules for\n   numeric comparison: if two numbers compare equal (e.g., ``1`` and\n   ``1.0``), only one of them can be contained in a set.\n\n   There are currently two intrinsic set types:\n\n   Sets\n      These represent a mutable set. They are created by the built-in\n      ``set()`` constructor and can be modified afterwards by several\n      methods, such as ``add()``.\n\n   Frozen sets\n      These represent an immutable set.  They are created by the\n      built-in ``frozenset()`` constructor.  As a frozenset is\n      immutable and *hashable*, it can be used again as an element of\n      another set, or as a dictionary key.\n\nMappings\n   These represent finite sets of objects indexed by arbitrary index\n   sets. The subscript notation ``a[k]`` selects the item indexed by\n   ``k`` from the mapping ``a``; this can be used in expressions and\n   as the target of assignments or ``del`` statements. The built-in\n   function ``len()`` returns the number of items in a mapping.\n\n   There is currently a single intrinsic mapping type:\n\n   Dictionaries\n      These represent finite sets of objects indexed by nearly\n      arbitrary values.  The only types of values not acceptable as\n      keys are values containing lists or dictionaries or other\n      mutable types that are compared by value rather than by object\n      identity, the reason being that the efficient implementation of\n      dictionaries requires a key\'s hash value to remain constant.\n      Numeric types used for keys obey the normal rules for numeric\n      comparison: if two numbers compare equal (e.g., ``1`` and\n      ``1.0``) then they can be used interchangeably to index the same\n      dictionary entry.\n\n      Dictionaries are mutable; they can be created by the ``{...}``\n      notation (see section *Dictionary displays*).\n\n      The extension modules ``dbm.ndbm`` and ``dbm.gnu`` provide\n      additional examples of mapping types, as does the\n      ``collections`` module.\n\nCallable types\n   These are the types to which the function call operation (see\n   section *Calls*) can be applied:\n\n   User-defined functions\n      A user-defined function object is created by a function\n      definition (see section *Function definitions*).  It should be\n      called with an argument list containing the same number of items\n      as the function\'s formal parameter list.\n\n      Special attributes:\n\n      +---------------------------+---------------------------------+-------------+\n      | Attribute                 | Meaning                         |             |\n      +===========================+=================================+=============+\n      | ``__doc__``               | The function\'s documentation    | Writable    |\n      |                           | string, or ``None`` if          |             |\n      |                           | unavailable                     |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__name__``              | The function\'s name             | Writable    |\n      +---------------------------+---------------------------------+-------------+\n      | ``__qualname__``          | The function\'s *qualified name* | Writable    |\n      |                           | New in version 3.3.             |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__module__``            | The name of the module the      | Writable    |\n      |                           | function was defined in, or     |             |\n      |                           | ``None`` if unavailable.        |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__defaults__``          | A tuple containing default      | Writable    |\n      |                           | argument values for those       |             |\n      |                           | arguments that have defaults,   |             |\n      |                           | or ``None`` if no arguments     |             |\n      |                           | have a default value            |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__code__``              | The code object representing    | Writable    |\n      |                           | the compiled function body.     |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__globals__``           | A reference to the dictionary   | Read-only   |\n      |                           | that holds the function\'s       |             |\n      |                           | global variables --- the global |             |\n      |                           | namespace of the module in      |             |\n      |                           | which the function was defined. |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__dict__``              | The namespace supporting        | Writable    |\n      |                           | arbitrary function attributes.  |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__closure__``           | ``None`` or a tuple of cells    | Read-only   |\n      |                           | that contain bindings for the   |             |\n      |                           | function\'s free variables.      |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__annotations__``       | A dict containing annotations   | Writable    |\n      |                           | of parameters.  The keys of the |             |\n      |                           | dict are the parameter names,   |             |\n      |                           | or ``\'return\'`` for the return  |             |\n      |                           | annotation, if provided.        |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__kwdefaults__``        | A dict containing defaults for  | Writable    |\n      |                           | keyword-only parameters.        |             |\n      +---------------------------+---------------------------------+-------------+\n\n      Most of the attributes labelled "Writable" check the type of the\n      assigned value.\n\n      Function objects also support getting and setting arbitrary\n      attributes, which can be used, for example, to attach metadata\n      to functions.  Regular attribute dot-notation is used to get and\n      set such attributes. *Note that the current implementation only\n      supports function attributes on user-defined functions. Function\n      attributes on built-in functions may be supported in the\n      future.*\n\n      Additional information about a function\'s definition can be\n      retrieved from its code object; see the description of internal\n      types below.\n\n   Instance methods\n      An instance method object combines a class, a class instance and\n      any callable object (normally a user-defined function).\n\n      Special read-only attributes: ``__self__`` is the class instance\n      object, ``__func__`` is the function object; ``__doc__`` is the\n      method\'s documentation (same as ``__func__.__doc__``);\n      ``__name__`` is the method name (same as ``__func__.__name__``);\n      ``__module__`` is the name of the module the method was defined\n      in, or ``None`` if unavailable.\n\n      Methods also support accessing (but not setting) the arbitrary\n      function attributes on the underlying function object.\n\n      User-defined method objects may be created when getting an\n      attribute of a class (perhaps via an instance of that class), if\n      that attribute is a user-defined function object or a class\n      method object.\n\n      When an instance method object is created by retrieving a user-\n      defined function object from a class via one of its instances,\n      its ``__self__`` attribute is the instance, and the method\n      object is said to be bound.  The new method\'s ``__func__``\n      attribute is the original function object.\n\n      When a user-defined method object is created by retrieving\n      another method object from a class or instance, the behaviour is\n      the same as for a function object, except that the ``__func__``\n      attribute of the new instance is not the original method object\n      but its ``__func__`` attribute.\n\n      When an instance method object is created by retrieving a class\n      method object from a class or instance, its ``__self__``\n      attribute is the class itself, and its ``__func__`` attribute is\n      the function object underlying the class method.\n\n      When an instance method object is called, the underlying\n      function (``__func__``) is called, inserting the class instance\n      (``__self__``) in front of the argument list.  For instance,\n      when ``C`` is a class which contains a definition for a function\n      ``f()``, and ``x`` is an instance of ``C``, calling ``x.f(1)``\n      is equivalent to calling ``C.f(x, 1)``.\n\n      When an instance method object is derived from a class method\n      object, the "class instance" stored in ``__self__`` will\n      actually be the class itself, so that calling either ``x.f(1)``\n      or ``C.f(1)`` is equivalent to calling ``f(C,1)`` where ``f`` is\n      the underlying function.\n\n      Note that the transformation from function object to instance\n      method object happens each time the attribute is retrieved from\n      the instance.  In some cases, a fruitful optimization is to\n      assign the attribute to a local variable and call that local\n      variable. Also notice that this transformation only happens for\n      user-defined functions; other callable objects (and all non-\n      callable objects) are retrieved without transformation.  It is\n      also important to note that user-defined functions which are\n      attributes of a class instance are not converted to bound\n      methods; this *only* happens when the function is an attribute\n      of the class.\n\n   Generator functions\n      A function or method which uses the ``yield`` statement (see\n      section *The yield statement*) is called a *generator function*.\n      Such a function, when called, always returns an iterator object\n      which can be used to execute the body of the function:  calling\n      the iterator\'s ``iterator__next__()`` method will cause the\n      function to execute until it provides a value using the\n      ``yield`` statement.  When the function executes a ``return``\n      statement or falls off the end, a ``StopIteration`` exception is\n      raised and the iterator will have reached the end of the set of\n      values to be returned.\n\n   Built-in functions\n      A built-in function object is a wrapper around a C function.\n      Examples of built-in functions are ``len()`` and ``math.sin()``\n      (``math`` is a standard built-in module). The number and type of\n      the arguments are determined by the C function. Special read-\n      only attributes: ``__doc__`` is the function\'s documentation\n      string, or ``None`` if unavailable; ``__name__`` is the\n      function\'s name; ``__self__`` is set to ``None`` (but see the\n      next item); ``__module__`` is the name of the module the\n      function was defined in or ``None`` if unavailable.\n\n   Built-in methods\n      This is really a different disguise of a built-in function, this\n      time containing an object passed to the C function as an\n      implicit extra argument.  An example of a built-in method is\n      ``alist.append()``, assuming *alist* is a list object. In this\n      case, the special read-only attribute ``__self__`` is set to the\n      object denoted by *alist*.\n\n   Classes\n      Classes are callable.  These objects normally act as factories\n      for new instances of themselves, but variations are possible for\n      class types that override ``__new__()``.  The arguments of the\n      call are passed to ``__new__()`` and, in the typical case, to\n      ``__init__()`` to initialize the new instance.\n\n   Class Instances\n      Instances of arbitrary classes can be made callable by defining\n      a ``__call__()`` method in their class.\n\nModules\n   Modules are a basic organizational unit of Python code, and are\n   created by the *import system* as invoked either by the ``import``\n   statement (see ``import``), or by calling functions such as\n   ``importlib.import_module()`` and built-in ``__import__()``.  A\n   module object has a namespace implemented by a dictionary object\n   (this is the dictionary referenced by the ``__globals__`` attribute\n   of functions defined in the module).  Attribute references are\n   translated to lookups in this dictionary, e.g., ``m.x`` is\n   equivalent to ``m.__dict__["x"]``. A module object does not contain\n   the code object used to initialize the module (since it isn\'t\n   needed once the initialization is done).\n\n   Attribute assignment updates the module\'s namespace dictionary,\n   e.g., ``m.x = 1`` is equivalent to ``m.__dict__["x"] = 1``.\n\n   Special read-only attribute: ``__dict__`` is the module\'s namespace\n   as a dictionary object.\n\n   **CPython implementation detail:** Because of the way CPython\n   clears module dictionaries, the module dictionary will be cleared\n   when the module falls out of scope even if the dictionary still has\n   live references.  To avoid this, copy the dictionary or keep the\n   module around while using its dictionary directly.\n\n   Predefined (writable) attributes: ``__name__`` is the module\'s\n   name; ``__doc__`` is the module\'s documentation string, or ``None``\n   if unavailable; ``__file__`` is the pathname of the file from which\n   the module was loaded, if it was loaded from a file. The\n   ``__file__`` attribute may be missing for certain types of modules,\n   such as C modules that are statically linked into the interpreter;\n   for extension modules loaded dynamically from a shared library, it\n   is the pathname of the shared library file.\n\nCustom classes\n   Custom class types are typically created by class definitions (see\n   section *Class definitions*).  A class has a namespace implemented\n   by a dictionary object. Class attribute references are translated\n   to lookups in this dictionary, e.g., ``C.x`` is translated to\n   ``C.__dict__["x"]`` (although there are a number of hooks which\n   allow for other means of locating attributes). When the attribute\n   name is not found there, the attribute search continues in the base\n   classes. This search of the base classes uses the C3 method\n   resolution order which behaves correctly even in the presence of\n   \'diamond\' inheritance structures where there are multiple\n   inheritance paths leading back to a common ancestor. Additional\n   details on the C3 MRO used by Python can be found in the\n   documentation accompanying the 2.3 release at\n   http://www.python.org/download/releases/2.3/mro/.\n\n   When a class attribute reference (for class ``C``, say) would yield\n   a class method object, it is transformed into an instance method\n   object whose ``__self__`` attributes is ``C``.  When it would yield\n   a static method object, it is transformed into the object wrapped\n   by the static method object. See section *Implementing Descriptors*\n   for another way in which attributes retrieved from a class may\n   differ from those actually contained in its ``__dict__``.\n\n   Class attribute assignments update the class\'s dictionary, never\n   the dictionary of a base class.\n\n   A class object can be called (see above) to yield a class instance\n   (see below).\n\n   Special attributes: ``__name__`` is the class name; ``__module__``\n   is the module name in which the class was defined; ``__dict__`` is\n   the dictionary containing the class\'s namespace; ``__bases__`` is a\n   tuple (possibly empty or a singleton) containing the base classes,\n   in the order of their occurrence in the base class list;\n   ``__doc__`` is the class\'s documentation string, or None if\n   undefined.\n\nClass instances\n   A class instance is created by calling a class object (see above).\n   A class instance has a namespace implemented as a dictionary which\n   is the first place in which attribute references are searched.\n   When an attribute is not found there, and the instance\'s class has\n   an attribute by that name, the search continues with the class\n   attributes.  If a class attribute is found that is a user-defined\n   function object, it is transformed into an instance method object\n   whose ``__self__`` attribute is the instance.  Static method and\n   class method objects are also transformed; see above under\n   "Classes".  See section *Implementing Descriptors* for another way\n   in which attributes of a class retrieved via its instances may\n   differ from the objects actually stored in the class\'s\n   ``__dict__``.  If no class attribute is found, and the object\'s\n   class has a ``__getattr__()`` method, that is called to satisfy the\n   lookup.\n\n   Attribute assignments and deletions update the instance\'s\n   dictionary, never a class\'s dictionary.  If the class has a\n   ``__setattr__()`` or ``__delattr__()`` method, this is called\n   instead of updating the instance dictionary directly.\n\n   Class instances can pretend to be numbers, sequences, or mappings\n   if they have methods with certain special names.  See section\n   *Special method names*.\n\n   Special attributes: ``__dict__`` is the attribute dictionary;\n   ``__class__`` is the instance\'s class.\n\nI/O objects (also known as file objects)\n   A *file object* represents an open file.  Various shortcuts are\n   available to create file objects: the ``open()`` built-in function,\n   and also ``os.popen()``, ``os.fdopen()``, and the ``makefile()``\n   method of socket objects (and perhaps by other functions or methods\n   provided by extension modules).\n\n   The objects ``sys.stdin``, ``sys.stdout`` and ``sys.stderr`` are\n   initialized to file objects corresponding to the interpreter\'s\n   standard input, output and error streams; they are all open in text\n   mode and therefore follow the interface defined by the\n   ``io.TextIOBase`` abstract class.\n\nInternal types\n   A few types used internally by the interpreter are exposed to the\n   user. Their definitions may change with future versions of the\n   interpreter, but they are mentioned here for completeness.\n\n   Code objects\n      Code objects represent *byte-compiled* executable Python code,\n      or *bytecode*. The difference between a code object and a\n      function object is that the function object contains an explicit\n      reference to the function\'s globals (the module in which it was\n      defined), while a code object contains no context; also the\n      default argument values are stored in the function object, not\n      in the code object (because they represent values calculated at\n      run-time).  Unlike function objects, code objects are immutable\n      and contain no references (directly or indirectly) to mutable\n      objects.\n\n      Special read-only attributes: ``co_name`` gives the function\n      name; ``co_argcount`` is the number of positional arguments\n      (including arguments with default values); ``co_nlocals`` is the\n      number of local variables used by the function (including\n      arguments); ``co_varnames`` is a tuple containing the names of\n      the local variables (starting with the argument names);\n      ``co_cellvars`` is a tuple containing the names of local\n      variables that are referenced by nested functions;\n      ``co_freevars`` is a tuple containing the names of free\n      variables; ``co_code`` is a string representing the sequence of\n      bytecode instructions; ``co_consts`` is a tuple containing the\n      literals used by the bytecode; ``co_names`` is a tuple\n      containing the names used by the bytecode; ``co_filename`` is\n      the filename from which the code was compiled;\n      ``co_firstlineno`` is the first line number of the function;\n      ``co_lnotab`` is a string encoding the mapping from bytecode\n      offsets to line numbers (for details see the source code of the\n      interpreter); ``co_stacksize`` is the required stack size\n      (including local variables); ``co_flags`` is an integer encoding\n      a number of flags for the interpreter.\n\n      The following flag bits are defined for ``co_flags``: bit\n      ``0x04`` is set if the function uses the ``*arguments`` syntax\n      to accept an arbitrary number of positional arguments; bit\n      ``0x08`` is set if the function uses the ``**keywords`` syntax\n      to accept arbitrary keyword arguments; bit ``0x20`` is set if\n      the function is a generator.\n\n      Future feature declarations (``from __future__ import\n      division``) also use bits in ``co_flags`` to indicate whether a\n      code object was compiled with a particular feature enabled: bit\n      ``0x2000`` is set if the function was compiled with future\n      division enabled; bits ``0x10`` and ``0x1000`` were used in\n      earlier versions of Python.\n\n      Other bits in ``co_flags`` are reserved for internal use.\n\n      If a code object represents a function, the first item in\n      ``co_consts`` is the documentation string of the function, or\n      ``None`` if undefined.\n\n   Frame objects\n      Frame objects represent execution frames.  They may occur in\n      traceback objects (see below).\n\n      Special read-only attributes: ``f_back`` is to the previous\n      stack frame (towards the caller), or ``None`` if this is the\n      bottom stack frame; ``f_code`` is the code object being executed\n      in this frame; ``f_locals`` is the dictionary used to look up\n      local variables; ``f_globals`` is used for global variables;\n      ``f_builtins`` is used for built-in (intrinsic) names;\n      ``f_lasti`` gives the precise instruction (this is an index into\n      the bytecode string of the code object).\n\n      Special writable attributes: ``f_trace``, if not ``None``, is a\n      function called at the start of each source code line (this is\n      used by the debugger); ``f_lineno`` is the current line number\n      of the frame --- writing to this from within a trace function\n      jumps to the given line (only for the bottom-most frame).  A\n      debugger can implement a Jump command (aka Set Next Statement)\n      by writing to f_lineno.\n\n      Frame objects support one method:\n\n      frame.clear()\n\n         This method clears all references to local variables held by\n         the frame.  Also, if the frame belonged to a generator, the\n         generator is finalized.  This helps break reference cycles\n         involving frame objects (for example when catching an\n         exception and storing its traceback for later use).\n\n         ``RuntimeError`` is raised if the frame is currently\n         executing.\n\n         New in version 3.4.\n\n   Traceback objects\n      Traceback objects represent a stack trace of an exception.  A\n      traceback object is created when an exception occurs.  When the\n      search for an exception handler unwinds the execution stack, at\n      each unwound level a traceback object is inserted in front of\n      the current traceback.  When an exception handler is entered,\n      the stack trace is made available to the program. (See section\n      *The try statement*.) It is accessible as the third item of the\n      tuple returned by ``sys.exc_info()``. When the program contains\n      no suitable handler, the stack trace is written (nicely\n      formatted) to the standard error stream; if the interpreter is\n      interactive, it is also made available to the user as\n      ``sys.last_traceback``.\n\n      Special read-only attributes: ``tb_next`` is the next level in\n      the stack trace (towards the frame where the exception\n      occurred), or ``None`` if there is no next level; ``tb_frame``\n      points to the execution frame of the current level;\n      ``tb_lineno`` gives the line number where the exception\n      occurred; ``tb_lasti`` indicates the precise instruction.  The\n      line number and last instruction in the traceback may differ\n      from the line number of its frame object if the exception\n      occurred in a ``try`` statement with no matching except clause\n      or with a finally clause.\n\n   Slice objects\n      Slice objects are used to represent slices for ``__getitem__()``\n      methods.  They are also created by the built-in ``slice()``\n      function.\n\n      Special read-only attributes: ``start`` is the lower bound;\n      ``stop`` is the upper bound; ``step`` is the step value; each is\n      ``None`` if omitted. These attributes can have any type.\n\n      Slice objects support one method:\n\n      slice.indices(self, length)\n\n         This method takes a single integer argument *length* and\n         computes information about the slice that the slice object\n         would describe if applied to a sequence of *length* items.\n         It returns a tuple of three integers; respectively these are\n         the *start* and *stop* indices and the *step* or stride\n         length of the slice. Missing or out-of-bounds indices are\n         handled in a manner consistent with regular slices.\n\n   Static method objects\n      Static method objects provide a way of defeating the\n      transformation of function objects to method objects described\n      above. A static method object is a wrapper around any other\n      object, usually a user-defined method object. When a static\n      method object is retrieved from a class or a class instance, the\n      object actually returned is the wrapped object, which is not\n      subject to any further transformation. Static method objects are\n      not themselves callable, although the objects they wrap usually\n      are. Static method objects are created by the built-in\n      ``staticmethod()`` constructor.\n\n   Class method objects\n      A class method object, like a static method object, is a wrapper\n      around another object that alters the way in which that object\n      is retrieved from classes and class instances. The behaviour of\n      class method objects upon such retrieval is described above,\n      under "User-defined methods". Class method objects are created\n      by the built-in ``classmethod()`` constructor.\n',
+ 'types': '\nThe standard type hierarchy\n***************************\n\nBelow is a list of the types that are built into Python.  Extension\nmodules (written in C, Java, or other languages, depending on the\nimplementation) can define additional types.  Future versions of\nPython may add types to the type hierarchy (e.g., rational numbers,\nefficiently stored arrays of integers, etc.), although such additions\nwill often be provided via the standard library instead.\n\nSome of the type descriptions below contain a paragraph listing\n\'special attributes.\'  These are attributes that provide access to the\nimplementation and are not intended for general use.  Their definition\nmay change in the future.\n\nNone\n   This type has a single value.  There is a single object with this\n   value. This object is accessed through the built-in name ``None``.\n   It is used to signify the absence of a value in many situations,\n   e.g., it is returned from functions that don\'t explicitly return\n   anything. Its truth value is false.\n\nNotImplemented\n   This type has a single value.  There is a single object with this\n   value. This object is accessed through the built-in name\n   ``NotImplemented``. Numeric methods and rich comparison methods may\n   return this value if they do not implement the operation for the\n   operands provided.  (The interpreter will then try the reflected\n   operation, or some other fallback, depending on the operator.)  Its\n   truth value is true.\n\nEllipsis\n   This type has a single value.  There is a single object with this\n   value. This object is accessed through the literal ``...`` or the\n   built-in name ``Ellipsis``.  Its truth value is true.\n\n``numbers.Number``\n   These are created by numeric literals and returned as results by\n   arithmetic operators and arithmetic built-in functions.  Numeric\n   objects are immutable; once created their value never changes.\n   Python numbers are of course strongly related to mathematical\n   numbers, but subject to the limitations of numerical representation\n   in computers.\n\n   Python distinguishes between integers, floating point numbers, and\n   complex numbers:\n\n   ``numbers.Integral``\n      These represent elements from the mathematical set of integers\n      (positive and negative).\n\n      There are two types of integers:\n\n      Integers (``int``)\n\n         These represent numbers in an unlimited range, subject to\n         available (virtual) memory only.  For the purpose of shift\n         and mask operations, a binary representation is assumed, and\n         negative numbers are represented in a variant of 2\'s\n         complement which gives the illusion of an infinite string of\n         sign bits extending to the left.\n\n      Booleans (``bool``)\n         These represent the truth values False and True.  The two\n         objects representing the values False and True are the only\n         Boolean objects. The Boolean type is a subtype of the integer\n         type, and Boolean values behave like the values 0 and 1,\n         respectively, in almost all contexts, the exception being\n         that when converted to a string, the strings ``"False"`` or\n         ``"True"`` are returned, respectively.\n\n      The rules for integer representation are intended to give the\n      most meaningful interpretation of shift and mask operations\n      involving negative integers.\n\n   ``numbers.Real`` (``float``)\n      These represent machine-level double precision floating point\n      numbers. You are at the mercy of the underlying machine\n      architecture (and C or Java implementation) for the accepted\n      range and handling of overflow. Python does not support single-\n      precision floating point numbers; the savings in processor and\n      memory usage that are usually the reason for using these is\n      dwarfed by the overhead of using objects in Python, so there is\n      no reason to complicate the language with two kinds of floating\n      point numbers.\n\n   ``numbers.Complex`` (``complex``)\n      These represent complex numbers as a pair of machine-level\n      double precision floating point numbers.  The same caveats apply\n      as for floating point numbers. The real and imaginary parts of a\n      complex number ``z`` can be retrieved through the read-only\n      attributes ``z.real`` and ``z.imag``.\n\nSequences\n   These represent finite ordered sets indexed by non-negative\n   numbers. The built-in function ``len()`` returns the number of\n   items of a sequence. When the length of a sequence is *n*, the\n   index set contains the numbers 0, 1, ..., *n*-1.  Item *i* of\n   sequence *a* is selected by ``a[i]``.\n\n   Sequences also support slicing: ``a[i:j]`` selects all items with\n   index *k* such that *i* ``<=`` *k* ``<`` *j*.  When used as an\n   expression, a slice is a sequence of the same type.  This implies\n   that the index set is renumbered so that it starts at 0.\n\n   Some sequences also support "extended slicing" with a third "step"\n   parameter: ``a[i:j:k]`` selects all items of *a* with index *x*\n   where ``x = i + n*k``, *n* ``>=`` ``0`` and *i* ``<=`` *x* ``<``\n   *j*.\n\n   Sequences are distinguished according to their mutability:\n\n   Immutable sequences\n      An object of an immutable sequence type cannot change once it is\n      created.  (If the object contains references to other objects,\n      these other objects may be mutable and may be changed; however,\n      the collection of objects directly referenced by an immutable\n      object cannot change.)\n\n      The following types are immutable sequences:\n\n      Strings\n         A string is a sequence of values that represent Unicode\n         codepoints. All the codepoints in range ``U+0000 - U+10FFFF``\n         can be represented in a string.  Python doesn\'t have a\n         ``chr`` type, and every character in the string is\n         represented as a string object with length ``1``.  The built-\n         in function ``ord()`` converts a character to its codepoint\n         (as an integer); ``chr()`` converts an integer in range ``0 -\n         10FFFF`` to the corresponding character. ``str.encode()`` can\n         be used to convert a ``str`` to ``bytes`` using the given\n         encoding, and ``bytes.decode()`` can be used to achieve the\n         opposite.\n\n      Tuples\n         The items of a tuple are arbitrary Python objects. Tuples of\n         two or more items are formed by comma-separated lists of\n         expressions.  A tuple of one item (a \'singleton\') can be\n         formed by affixing a comma to an expression (an expression by\n         itself does not create a tuple, since parentheses must be\n         usable for grouping of expressions).  An empty tuple can be\n         formed by an empty pair of parentheses.\n\n      Bytes\n         A bytes object is an immutable array.  The items are 8-bit\n         bytes, represented by integers in the range 0 <= x < 256.\n         Bytes literals (like ``b\'abc\'``) and the built-in function\n         ``bytes()`` can be used to construct bytes objects.  Also,\n         bytes objects can be decoded to strings via the ``decode()``\n         method.\n\n   Mutable sequences\n      Mutable sequences can be changed after they are created.  The\n      subscription and slicing notations can be used as the target of\n      assignment and ``del`` (delete) statements.\n\n      There are currently two intrinsic mutable sequence types:\n\n      Lists\n         The items of a list are arbitrary Python objects.  Lists are\n         formed by placing a comma-separated list of expressions in\n         square brackets. (Note that there are no special cases needed\n         to form lists of length 0 or 1.)\n\n      Byte Arrays\n         A bytearray object is a mutable array. They are created by\n         the built-in ``bytearray()`` constructor.  Aside from being\n         mutable (and hence unhashable), byte arrays otherwise provide\n         the same interface and functionality as immutable bytes\n         objects.\n\n      The extension module ``array`` provides an additional example of\n      a mutable sequence type, as does the ``collections`` module.\n\nSet types\n   These represent unordered, finite sets of unique, immutable\n   objects. As such, they cannot be indexed by any subscript. However,\n   they can be iterated over, and the built-in function ``len()``\n   returns the number of items in a set. Common uses for sets are fast\n   membership testing, removing duplicates from a sequence, and\n   computing mathematical operations such as intersection, union,\n   difference, and symmetric difference.\n\n   For set elements, the same immutability rules apply as for\n   dictionary keys. Note that numeric types obey the normal rules for\n   numeric comparison: if two numbers compare equal (e.g., ``1`` and\n   ``1.0``), only one of them can be contained in a set.\n\n   There are currently two intrinsic set types:\n\n   Sets\n      These represent a mutable set. They are created by the built-in\n      ``set()`` constructor and can be modified afterwards by several\n      methods, such as ``add()``.\n\n   Frozen sets\n      These represent an immutable set.  They are created by the\n      built-in ``frozenset()`` constructor.  As a frozenset is\n      immutable and *hashable*, it can be used again as an element of\n      another set, or as a dictionary key.\n\nMappings\n   These represent finite sets of objects indexed by arbitrary index\n   sets. The subscript notation ``a[k]`` selects the item indexed by\n   ``k`` from the mapping ``a``; this can be used in expressions and\n   as the target of assignments or ``del`` statements. The built-in\n   function ``len()`` returns the number of items in a mapping.\n\n   There is currently a single intrinsic mapping type:\n\n   Dictionaries\n      These represent finite sets of objects indexed by nearly\n      arbitrary values.  The only types of values not acceptable as\n      keys are values containing lists or dictionaries or other\n      mutable types that are compared by value rather than by object\n      identity, the reason being that the efficient implementation of\n      dictionaries requires a key\'s hash value to remain constant.\n      Numeric types used for keys obey the normal rules for numeric\n      comparison: if two numbers compare equal (e.g., ``1`` and\n      ``1.0``) then they can be used interchangeably to index the same\n      dictionary entry.\n\n      Dictionaries are mutable; they can be created by the ``{...}``\n      notation (see section *Dictionary displays*).\n\n      The extension modules ``dbm.ndbm`` and ``dbm.gnu`` provide\n      additional examples of mapping types, as does the\n      ``collections`` module.\n\nCallable types\n   These are the types to which the function call operation (see\n   section *Calls*) can be applied:\n\n   User-defined functions\n      A user-defined function object is created by a function\n      definition (see section *Function definitions*).  It should be\n      called with an argument list containing the same number of items\n      as the function\'s formal parameter list.\n\n      Special attributes:\n\n      +---------------------------+---------------------------------+-------------+\n      | Attribute                 | Meaning                         |             |\n      +===========================+=================================+=============+\n      | ``__doc__``               | The function\'s documentation    | Writable    |\n      |                           | string, or ``None`` if          |             |\n      |                           | unavailable                     |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__name__``              | The function\'s name             | Writable    |\n      +---------------------------+---------------------------------+-------------+\n      | ``__qualname__``          | The function\'s *qualified name* | Writable    |\n      |                           | New in version 3.3.             |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__module__``            | The name of the module the      | Writable    |\n      |                           | function was defined in, or     |             |\n      |                           | ``None`` if unavailable.        |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__defaults__``          | A tuple containing default      | Writable    |\n      |                           | argument values for those       |             |\n      |                           | arguments that have defaults,   |             |\n      |                           | or ``None`` if no arguments     |             |\n      |                           | have a default value            |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__code__``              | The code object representing    | Writable    |\n      |                           | the compiled function body.     |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__globals__``           | A reference to the dictionary   | Read-only   |\n      |                           | that holds the function\'s       |             |\n      |                           | global variables --- the global |             |\n      |                           | namespace of the module in      |             |\n      |                           | which the function was defined. |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__dict__``              | The namespace supporting        | Writable    |\n      |                           | arbitrary function attributes.  |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__closure__``           | ``None`` or a tuple of cells    | Read-only   |\n      |                           | that contain bindings for the   |             |\n      |                           | function\'s free variables.      |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__annotations__``       | A dict containing annotations   | Writable    |\n      |                           | of parameters.  The keys of the |             |\n      |                           | dict are the parameter names,   |             |\n      |                           | or ``\'return\'`` for the return  |             |\n      |                           | annotation, if provided.        |             |\n      +---------------------------+---------------------------------+-------------+\n      | ``__kwdefaults__``        | A dict containing defaults for  | Writable    |\n      |                           | keyword-only parameters.        |             |\n      +---------------------------+---------------------------------+-------------+\n\n      Most of the attributes labelled "Writable" check the type of the\n      assigned value.\n\n      Function objects also support getting and setting arbitrary\n      attributes, which can be used, for example, to attach metadata\n      to functions.  Regular attribute dot-notation is used to get and\n      set such attributes. *Note that the current implementation only\n      supports function attributes on user-defined functions. Function\n      attributes on built-in functions may be supported in the\n      future.*\n\n      Additional information about a function\'s definition can be\n      retrieved from its code object; see the description of internal\n      types below.\n\n   Instance methods\n      An instance method object combines a class, a class instance and\n      any callable object (normally a user-defined function).\n\n      Special read-only attributes: ``__self__`` is the class instance\n      object, ``__func__`` is the function object; ``__doc__`` is the\n      method\'s documentation (same as ``__func__.__doc__``);\n      ``__name__`` is the method name (same as ``__func__.__name__``);\n      ``__module__`` is the name of the module the method was defined\n      in, or ``None`` if unavailable.\n\n      Methods also support accessing (but not setting) the arbitrary\n      function attributes on the underlying function object.\n\n      User-defined method objects may be created when getting an\n      attribute of a class (perhaps via an instance of that class), if\n      that attribute is a user-defined function object or a class\n      method object.\n\n      When an instance method object is created by retrieving a user-\n      defined function object from a class via one of its instances,\n      its ``__self__`` attribute is the instance, and the method\n      object is said to be bound.  The new method\'s ``__func__``\n      attribute is the original function object.\n\n      When a user-defined method object is created by retrieving\n      another method object from a class or instance, the behaviour is\n      the same as for a function object, except that the ``__func__``\n      attribute of the new instance is not the original method object\n      but its ``__func__`` attribute.\n\n      When an instance method object is created by retrieving a class\n      method object from a class or instance, its ``__self__``\n      attribute is the class itself, and its ``__func__`` attribute is\n      the function object underlying the class method.\n\n      When an instance method object is called, the underlying\n      function (``__func__``) is called, inserting the class instance\n      (``__self__``) in front of the argument list.  For instance,\n      when ``C`` is a class which contains a definition for a function\n      ``f()``, and ``x`` is an instance of ``C``, calling ``x.f(1)``\n      is equivalent to calling ``C.f(x, 1)``.\n\n      When an instance method object is derived from a class method\n      object, the "class instance" stored in ``__self__`` will\n      actually be the class itself, so that calling either ``x.f(1)``\n      or ``C.f(1)`` is equivalent to calling ``f(C,1)`` where ``f`` is\n      the underlying function.\n\n      Note that the transformation from function object to instance\n      method object happens each time the attribute is retrieved from\n      the instance.  In some cases, a fruitful optimization is to\n      assign the attribute to a local variable and call that local\n      variable. Also notice that this transformation only happens for\n      user-defined functions; other callable objects (and all non-\n      callable objects) are retrieved without transformation.  It is\n      also important to note that user-defined functions which are\n      attributes of a class instance are not converted to bound\n      methods; this *only* happens when the function is an attribute\n      of the class.\n\n   Generator functions\n      A function or method which uses the ``yield`` statement (see\n      section *The yield statement*) is called a *generator function*.\n      Such a function, when called, always returns an iterator object\n      which can be used to execute the body of the function:  calling\n      the iterator\'s ``iterator.__next__()`` method will cause the\n      function to execute until it provides a value using the\n      ``yield`` statement.  When the function executes a ``return``\n      statement or falls off the end, a ``StopIteration`` exception is\n      raised and the iterator will have reached the end of the set of\n      values to be returned.\n\n   Built-in functions\n      A built-in function object is a wrapper around a C function.\n      Examples of built-in functions are ``len()`` and ``math.sin()``\n      (``math`` is a standard built-in module). The number and type of\n      the arguments are determined by the C function. Special read-\n      only attributes: ``__doc__`` is the function\'s documentation\n      string, or ``None`` if unavailable; ``__name__`` is the\n      function\'s name; ``__self__`` is set to ``None`` (but see the\n      next item); ``__module__`` is the name of the module the\n      function was defined in or ``None`` if unavailable.\n\n   Built-in methods\n      This is really a different disguise of a built-in function, this\n      time containing an object passed to the C function as an\n      implicit extra argument.  An example of a built-in method is\n      ``alist.append()``, assuming *alist* is a list object. In this\n      case, the special read-only attribute ``__self__`` is set to the\n      object denoted by *alist*.\n\n   Classes\n      Classes are callable.  These objects normally act as factories\n      for new instances of themselves, but variations are possible for\n      class types that override ``__new__()``.  The arguments of the\n      call are passed to ``__new__()`` and, in the typical case, to\n      ``__init__()`` to initialize the new instance.\n\n   Class Instances\n      Instances of arbitrary classes can be made callable by defining\n      a ``__call__()`` method in their class.\n\nModules\n   Modules are a basic organizational unit of Python code, and are\n   created by the *import system* as invoked either by the ``import``\n   statement (see ``import``), or by calling functions such as\n   ``importlib.import_module()`` and built-in ``__import__()``.  A\n   module object has a namespace implemented by a dictionary object\n   (this is the dictionary referenced by the ``__globals__`` attribute\n   of functions defined in the module).  Attribute references are\n   translated to lookups in this dictionary, e.g., ``m.x`` is\n   equivalent to ``m.__dict__["x"]``. A module object does not contain\n   the code object used to initialize the module (since it isn\'t\n   needed once the initialization is done).\n\n   Attribute assignment updates the module\'s namespace dictionary,\n   e.g., ``m.x = 1`` is equivalent to ``m.__dict__["x"] = 1``.\n\n   Special read-only attribute: ``__dict__`` is the module\'s namespace\n   as a dictionary object.\n\n   **CPython implementation detail:** Because of the way CPython\n   clears module dictionaries, the module dictionary will be cleared\n   when the module falls out of scope even if the dictionary still has\n   live references.  To avoid this, copy the dictionary or keep the\n   module around while using its dictionary directly.\n\n   Predefined (writable) attributes: ``__name__`` is the module\'s\n   name; ``__doc__`` is the module\'s documentation string, or ``None``\n   if unavailable; ``__file__`` is the pathname of the file from which\n   the module was loaded, if it was loaded from a file. The\n   ``__file__`` attribute may be missing for certain types of modules,\n   such as C modules that are statically linked into the interpreter;\n   for extension modules loaded dynamically from a shared library, it\n   is the pathname of the shared library file.\n\nCustom classes\n   Custom class types are typically created by class definitions (see\n   section *Class definitions*).  A class has a namespace implemented\n   by a dictionary object. Class attribute references are translated\n   to lookups in this dictionary, e.g., ``C.x`` is translated to\n   ``C.__dict__["x"]`` (although there are a number of hooks which\n   allow for other means of locating attributes). When the attribute\n   name is not found there, the attribute search continues in the base\n   classes. This search of the base classes uses the C3 method\n   resolution order which behaves correctly even in the presence of\n   \'diamond\' inheritance structures where there are multiple\n   inheritance paths leading back to a common ancestor. Additional\n   details on the C3 MRO used by Python can be found in the\n   documentation accompanying the 2.3 release at\n   http://www.python.org/download/releases/2.3/mro/.\n\n   When a class attribute reference (for class ``C``, say) would yield\n   a class method object, it is transformed into an instance method\n   object whose ``__self__`` attributes is ``C``.  When it would yield\n   a static method object, it is transformed into the object wrapped\n   by the static method object. See section *Implementing Descriptors*\n   for another way in which attributes retrieved from a class may\n   differ from those actually contained in its ``__dict__``.\n\n   Class attribute assignments update the class\'s dictionary, never\n   the dictionary of a base class.\n\n   A class object can be called (see above) to yield a class instance\n   (see below).\n\n   Special attributes: ``__name__`` is the class name; ``__module__``\n   is the module name in which the class was defined; ``__dict__`` is\n   the dictionary containing the class\'s namespace; ``__bases__`` is a\n   tuple (possibly empty or a singleton) containing the base classes,\n   in the order of their occurrence in the base class list;\n   ``__doc__`` is the class\'s documentation string, or None if\n   undefined.\n\nClass instances\n   A class instance is created by calling a class object (see above).\n   A class instance has a namespace implemented as a dictionary which\n   is the first place in which attribute references are searched.\n   When an attribute is not found there, and the instance\'s class has\n   an attribute by that name, the search continues with the class\n   attributes.  If a class attribute is found that is a user-defined\n   function object, it is transformed into an instance method object\n   whose ``__self__`` attribute is the instance.  Static method and\n   class method objects are also transformed; see above under\n   "Classes".  See section *Implementing Descriptors* for another way\n   in which attributes of a class retrieved via its instances may\n   differ from the objects actually stored in the class\'s\n   ``__dict__``.  If no class attribute is found, and the object\'s\n   class has a ``__getattr__()`` method, that is called to satisfy the\n   lookup.\n\n   Attribute assignments and deletions update the instance\'s\n   dictionary, never a class\'s dictionary.  If the class has a\n   ``__setattr__()`` or ``__delattr__()`` method, this is called\n   instead of updating the instance dictionary directly.\n\n   Class instances can pretend to be numbers, sequences, or mappings\n   if they have methods with certain special names.  See section\n   *Special method names*.\n\n   Special attributes: ``__dict__`` is the attribute dictionary;\n   ``__class__`` is the instance\'s class.\n\nI/O objects (also known as file objects)\n   A *file object* represents an open file.  Various shortcuts are\n   available to create file objects: the ``open()`` built-in function,\n   and also ``os.popen()``, ``os.fdopen()``, and the ``makefile()``\n   method of socket objects (and perhaps by other functions or methods\n   provided by extension modules).\n\n   The objects ``sys.stdin``, ``sys.stdout`` and ``sys.stderr`` are\n   initialized to file objects corresponding to the interpreter\'s\n   standard input, output and error streams; they are all open in text\n   mode and therefore follow the interface defined by the\n   ``io.TextIOBase`` abstract class.\n\nInternal types\n   A few types used internally by the interpreter are exposed to the\n   user. Their definitions may change with future versions of the\n   interpreter, but they are mentioned here for completeness.\n\n   Code objects\n      Code objects represent *byte-compiled* executable Python code,\n      or *bytecode*. The difference between a code object and a\n      function object is that the function object contains an explicit\n      reference to the function\'s globals (the module in which it was\n      defined), while a code object contains no context; also the\n      default argument values are stored in the function object, not\n      in the code object (because they represent values calculated at\n      run-time).  Unlike function objects, code objects are immutable\n      and contain no references (directly or indirectly) to mutable\n      objects.\n\n      Special read-only attributes: ``co_name`` gives the function\n      name; ``co_argcount`` is the number of positional arguments\n      (including arguments with default values); ``co_nlocals`` is the\n      number of local variables used by the function (including\n      arguments); ``co_varnames`` is a tuple containing the names of\n      the local variables (starting with the argument names);\n      ``co_cellvars`` is a tuple containing the names of local\n      variables that are referenced by nested functions;\n      ``co_freevars`` is a tuple containing the names of free\n      variables; ``co_code`` is a string representing the sequence of\n      bytecode instructions; ``co_consts`` is a tuple containing the\n      literals used by the bytecode; ``co_names`` is a tuple\n      containing the names used by the bytecode; ``co_filename`` is\n      the filename from which the code was compiled;\n      ``co_firstlineno`` is the first line number of the function;\n      ``co_lnotab`` is a string encoding the mapping from bytecode\n      offsets to line numbers (for details see the source code of the\n      interpreter); ``co_stacksize`` is the required stack size\n      (including local variables); ``co_flags`` is an integer encoding\n      a number of flags for the interpreter.\n\n      The following flag bits are defined for ``co_flags``: bit\n      ``0x04`` is set if the function uses the ``*arguments`` syntax\n      to accept an arbitrary number of positional arguments; bit\n      ``0x08`` is set if the function uses the ``**keywords`` syntax\n      to accept arbitrary keyword arguments; bit ``0x20`` is set if\n      the function is a generator.\n\n      Future feature declarations (``from __future__ import\n      division``) also use bits in ``co_flags`` to indicate whether a\n      code object was compiled with a particular feature enabled: bit\n      ``0x2000`` is set if the function was compiled with future\n      division enabled; bits ``0x10`` and ``0x1000`` were used in\n      earlier versions of Python.\n\n      Other bits in ``co_flags`` are reserved for internal use.\n\n      If a code object represents a function, the first item in\n      ``co_consts`` is the documentation string of the function, or\n      ``None`` if undefined.\n\n   Frame objects\n      Frame objects represent execution frames.  They may occur in\n      traceback objects (see below).\n\n      Special read-only attributes: ``f_back`` is to the previous\n      stack frame (towards the caller), or ``None`` if this is the\n      bottom stack frame; ``f_code`` is the code object being executed\n      in this frame; ``f_locals`` is the dictionary used to look up\n      local variables; ``f_globals`` is used for global variables;\n      ``f_builtins`` is used for built-in (intrinsic) names;\n      ``f_lasti`` gives the precise instruction (this is an index into\n      the bytecode string of the code object).\n\n      Special writable attributes: ``f_trace``, if not ``None``, is a\n      function called at the start of each source code line (this is\n      used by the debugger); ``f_lineno`` is the current line number\n      of the frame --- writing to this from within a trace function\n      jumps to the given line (only for the bottom-most frame).  A\n      debugger can implement a Jump command (aka Set Next Statement)\n      by writing to f_lineno.\n\n      Frame objects support one method:\n\n      frame.clear()\n\n         This method clears all references to local variables held by\n         the frame.  Also, if the frame belonged to a generator, the\n         generator is finalized.  This helps break reference cycles\n         involving frame objects (for example when catching an\n         exception and storing its traceback for later use).\n\n         ``RuntimeError`` is raised if the frame is currently\n         executing.\n\n         New in version 3.4.\n\n   Traceback objects\n      Traceback objects represent a stack trace of an exception.  A\n      traceback object is created when an exception occurs.  When the\n      search for an exception handler unwinds the execution stack, at\n      each unwound level a traceback object is inserted in front of\n      the current traceback.  When an exception handler is entered,\n      the stack trace is made available to the program. (See section\n      *The try statement*.) It is accessible as the third item of the\n      tuple returned by ``sys.exc_info()``. When the program contains\n      no suitable handler, the stack trace is written (nicely\n      formatted) to the standard error stream; if the interpreter is\n      interactive, it is also made available to the user as\n      ``sys.last_traceback``.\n\n      Special read-only attributes: ``tb_next`` is the next level in\n      the stack trace (towards the frame where the exception\n      occurred), or ``None`` if there is no next level; ``tb_frame``\n      points to the execution frame of the current level;\n      ``tb_lineno`` gives the line number where the exception\n      occurred; ``tb_lasti`` indicates the precise instruction.  The\n      line number and last instruction in the traceback may differ\n      from the line number of its frame object if the exception\n      occurred in a ``try`` statement with no matching except clause\n      or with a finally clause.\n\n   Slice objects\n      Slice objects are used to represent slices for ``__getitem__()``\n      methods.  They are also created by the built-in ``slice()``\n      function.\n\n      Special read-only attributes: ``start`` is the lower bound;\n      ``stop`` is the upper bound; ``step`` is the step value; each is\n      ``None`` if omitted.  These attributes can have any type.\n\n      Slice objects support one method:\n\n      slice.indices(self, length)\n\n         This method takes a single integer argument *length* and\n         computes information about the slice that the slice object\n         would describe if applied to a sequence of *length* items.\n         It returns a tuple of three integers; respectively these are\n         the *start* and *stop* indices and the *step* or stride\n         length of the slice. Missing or out-of-bounds indices are\n         handled in a manner consistent with regular slices.\n\n   Static method objects\n      Static method objects provide a way of defeating the\n      transformation of function objects to method objects described\n      above. A static method object is a wrapper around any other\n      object, usually a user-defined method object. When a static\n      method object is retrieved from a class or a class instance, the\n      object actually returned is the wrapped object, which is not\n      subject to any further transformation. Static method objects are\n      not themselves callable, although the objects they wrap usually\n      are. Static method objects are created by the built-in\n      ``staticmethod()`` constructor.\n\n   Class method objects\n      A class method object, like a static method object, is a wrapper\n      around another object that alters the way in which that object\n      is retrieved from classes and class instances. The behaviour of\n      class method objects upon such retrieval is described above,\n      under "User-defined methods". Class method objects are created\n      by the built-in ``classmethod()`` constructor.\n',
  'typesfunctions': '\nFunctions\n*********\n\nFunction objects are created by function definitions.  The only\noperation on a function object is to call it: ``func(argument-list)``.\n\nThere are really two flavors of function objects: built-in functions\nand user-defined functions.  Both support the same operation (to call\nthe function), but the implementation is different, hence the\ndifferent object types.\n\nSee *Function definitions* for more information.\n',
  'typesmapping': '\nMapping Types --- ``dict``\n**************************\n\nA *mapping* object maps *hashable* values to arbitrary objects.\nMappings are mutable objects.  There is currently only one standard\nmapping type, the *dictionary*.  (For other containers see the built-\nin ``list``, ``set``, and ``tuple`` classes, and the ``collections``\nmodule.)\n\nA dictionary\'s keys are *almost* arbitrary values.  Values that are\nnot *hashable*, that is, values containing lists, dictionaries or\nother mutable types (that are compared by value rather than by object\nidentity) may not be used as keys.  Numeric types used for keys obey\nthe normal rules for numeric comparison: if two numbers compare equal\n(such as ``1`` and ``1.0``) then they can be used interchangeably to\nindex the same dictionary entry.  (Note however, that since computers\nstore floating-point numbers as approximations it is usually unwise to\nuse them as dictionary keys.)\n\nDictionaries can be created by placing a comma-separated list of\n``key: value`` pairs within braces, for example: ``{\'jack\': 4098,\n\'sjoerd\': 4127}`` or ``{4098: \'jack\', 4127: \'sjoerd\'}``, or by the\n``dict`` constructor.\n\nclass class dict(**kwarg)\nclass class dict(mapping, **kwarg)\nclass class dict(iterable, **kwarg)\n\n   Return a new dictionary initialized from an optional positional\n   argument and a possibly empty set of keyword arguments.\n\n   If no positional argument is given, an empty dictionary is created.\n   If a positional argument is given and it is a mapping object, a\n   dictionary is created with the same key-value pairs as the mapping\n   object.  Otherwise, the positional argument must be an *iterator*\n   object.  Each item in the iterable must itself be an iterator with\n   exactly two objects.  The first object of each item becomes a key\n   in the new dictionary, and the second object the corresponding\n   value.  If a key occurs more than once, the last value for that key\n   becomes the corresponding value in the new dictionary.\n\n   If keyword arguments are given, the keyword arguments and their\n   values are added to the dictionary created from the positional\n   argument.  If a key being added is already present, the value from\n   the keyword argument replaces the value from the positional\n   argument.\n\n   To illustrate, the following examples all return a dictionary equal\n   to ``{"one": 1, "two": 2, "three": 3}``:\n\n      >>> a = dict(one=1, two=2, three=3)\n      >>> b = {\'one\': 1, \'two\': 2, \'three\': 3}\n      >>> c = dict(zip([\'one\', \'two\', \'three\'], [1, 2, 3]))\n      >>> d = dict([(\'two\', 2), (\'one\', 1), (\'three\', 3)])\n      >>> e = dict({\'three\': 3, \'one\': 1, \'two\': 2})\n      >>> a == b == c == d == e\n      True\n\n   Providing keyword arguments as in the first example only works for\n   keys that are valid Python identifiers.  Otherwise, any valid keys\n   can be used.\n\n   These are the operations that dictionaries support (and therefore,\n   custom mapping types should support too):\n\n   len(d)\n\n      Return the number of items in the dictionary *d*.\n\n   d[key]\n\n      Return the item of *d* with key *key*.  Raises a ``KeyError`` if\n      *key* is not in the map.\n\n      If a subclass of dict defines a method ``__missing__()``, if the\n      key *key* is not present, the ``d[key]`` operation calls that\n      method with the key *key* as argument.  The ``d[key]`` operation\n      then returns or raises whatever is returned or raised by the\n      ``__missing__(key)`` call if the key is not present. No other\n      operations or methods invoke ``__missing__()``. If\n      ``__missing__()`` is not defined, ``KeyError`` is raised.\n      ``__missing__()`` must be a method; it cannot be an instance\n      variable:\n\n         >>> class Counter(dict):\n         ...     def __missing__(self, key):\n         ...         return 0\n         >>> c = Counter()\n         >>> c[\'red\']\n         0\n         >>> c[\'red\'] += 1\n         >>> c[\'red\']\n         1\n\n      See ``collections.Counter`` for a complete implementation\n      including other methods helpful for accumulating and managing\n      tallies.\n\n   d[key] = value\n\n      Set ``d[key]`` to *value*.\n\n   del d[key]\n\n      Remove ``d[key]`` from *d*.  Raises a ``KeyError`` if *key* is\n      not in the map.\n\n   key in d\n\n      Return ``True`` if *d* has a key *key*, else ``False``.\n\n   key not in d\n\n      Equivalent to ``not key in d``.\n\n   iter(d)\n\n      Return an iterator over the keys of the dictionary.  This is a\n      shortcut for ``iter(d.keys())``.\n\n   clear()\n\n      Remove all items from the dictionary.\n\n   copy()\n\n      Return a shallow copy of the dictionary.\n\n   classmethod fromkeys(seq[, value])\n\n      Create a new dictionary with keys from *seq* and values set to\n      *value*.\n\n      ``fromkeys()`` is a class method that returns a new dictionary.\n      *value* defaults to ``None``.\n\n   get(key[, default])\n\n      Return the value for *key* if *key* is in the dictionary, else\n      *default*. If *default* is not given, it defaults to ``None``,\n      so that this method never raises a ``KeyError``.\n\n   items()\n\n      Return a new view of the dictionary\'s items (``(key, value)``\n      pairs). See the *documentation of view objects*.\n\n   keys()\n\n      Return a new view of the dictionary\'s keys.  See the\n      *documentation of view objects*.\n\n   pop(key[, default])\n\n      If *key* is in the dictionary, remove it and return its value,\n      else return *default*.  If *default* is not given and *key* is\n      not in the dictionary, a ``KeyError`` is raised.\n\n   popitem()\n\n      Remove and return an arbitrary ``(key, value)`` pair from the\n      dictionary.\n\n      ``popitem()`` is useful to destructively iterate over a\n      dictionary, as often used in set algorithms.  If the dictionary\n      is empty, calling ``popitem()`` raises a ``KeyError``.\n\n   setdefault(key[, default])\n\n      If *key* is in the dictionary, return its value.  If not, insert\n      *key* with a value of *default* and return *default*.  *default*\n      defaults to ``None``.\n\n   update([other])\n\n      Update the dictionary with the key/value pairs from *other*,\n      overwriting existing keys.  Return ``None``.\n\n      ``update()`` accepts either another dictionary object or an\n      iterable of key/value pairs (as tuples or other iterables of\n      length two).  If keyword arguments are specified, the dictionary\n      is then updated with those key/value pairs: ``d.update(red=1,\n      blue=2)``.\n\n   values()\n\n      Return a new view of the dictionary\'s values.  See the\n      *documentation of view objects*.\n\nSee also:\n\n   ``types.MappingProxyType`` can be used to create a read-only view\n   of a ``dict``.\n\n\nDictionary view objects\n=======================\n\nThe objects returned by ``dict.keys()``, ``dict.values()`` and\n``dict.items()`` are *view objects*.  They provide a dynamic view on\nthe dictionary\'s entries, which means that when the dictionary\nchanges, the view reflects these changes.\n\nDictionary views can be iterated over to yield their respective data,\nand support membership tests:\n\nlen(dictview)\n\n   Return the number of entries in the dictionary.\n\niter(dictview)\n\n   Return an iterator over the keys, values or items (represented as\n   tuples of ``(key, value)``) in the dictionary.\n\n   Keys and values are iterated over in an arbitrary order which is\n   non-random, varies across Python implementations, and depends on\n   the dictionary\'s history of insertions and deletions. If keys,\n   values and items views are iterated over with no intervening\n   modifications to the dictionary, the order of items will directly\n   correspond.  This allows the creation of ``(value, key)`` pairs\n   using ``zip()``: ``pairs = zip(d.values(), d.keys())``.  Another\n   way to create the same list is ``pairs = [(v, k) for (k, v) in\n   d.items()]``.\n\n   Iterating views while adding or deleting entries in the dictionary\n   may raise a ``RuntimeError`` or fail to iterate over all entries.\n\nx in dictview\n\n   Return ``True`` if *x* is in the underlying dictionary\'s keys,\n   values or items (in the latter case, *x* should be a ``(key,\n   value)`` tuple).\n\nKeys views are set-like since their entries are unique and hashable.\nIf all values are hashable, so that ``(key, value)`` pairs are unique\nand hashable, then the items view is also set-like.  (Values views are\nnot treated as set-like since the entries are generally not unique.)\nFor set-like views, all of the operations defined for the abstract\nbase class ``collections.abc.Set`` are available (for example, ``==``,\n``<``, or ``^``).\n\nAn example of dictionary view usage:\n\n   >>> dishes = {\'eggs\': 2, \'sausage\': 1, \'bacon\': 1, \'spam\': 500}\n   >>> keys = dishes.keys()\n   >>> values = dishes.values()\n\n   >>> # iteration\n   >>> n = 0\n   >>> for val in values:\n   ...     n += val\n   >>> print(n)\n   504\n\n   >>> # keys and values are iterated over in the same order\n   >>> list(keys)\n   [\'eggs\', \'bacon\', \'sausage\', \'spam\']\n   >>> list(values)\n   [2, 1, 1, 500]\n\n   >>> # view objects are dynamic and reflect dict changes\n   >>> del dishes[\'eggs\']\n   >>> del dishes[\'sausage\']\n   >>> list(keys)\n   [\'spam\', \'bacon\']\n\n   >>> # set operations\n   >>> keys & {\'eggs\', \'bacon\', \'salad\'}\n   {\'bacon\'}\n   >>> keys ^ {\'sausage\', \'juice\'}\n   {\'juice\', \'sausage\', \'bacon\', \'spam\'}\n',
  'typesmethods': '\nMethods\n*******\n\nMethods are functions that are called using the attribute notation.\nThere are two flavors: built-in methods (such as ``append()`` on\nlists) and class instance methods.  Built-in methods are described\nwith the types that support them.\n\nIf you access a method (a function defined in a class namespace)\nthrough an instance, you get a special object: a *bound method* (also\ncalled *instance method*) object. When called, it will add the\n``self`` argument to the argument list.  Bound methods have two\nspecial read-only attributes: ``m.__self__`` is the object on which\nthe method operates, and ``m.__func__`` is the function implementing\nthe method.  Calling ``m(arg-1, arg-2, ..., arg-n)`` is completely\nequivalent to calling ``m.__func__(m.__self__, arg-1, arg-2, ...,\narg-n)``.\n\nLike function objects, bound method objects support getting arbitrary\nattributes.  However, since method attributes are actually stored on\nthe underlying function object (``meth.__func__``), setting method\nattributes on bound methods is disallowed.  Attempting to set an\nattribute on a method results in an ``AttributeError`` being raised.\nIn order to set a method attribute, you need to explicitly set it on\nthe underlying function object:\n\n   >>> class C:\n   ...     def method(self):\n   ...         pass\n   ...\n   >>> c = C()\n   >>> c.method.whoami = \'my name is method\'  # can\'t set on the method\n   Traceback (most recent call last):\n     File "<stdin>", line 1, in <module>\n   AttributeError: \'method\' object has no attribute \'whoami\'\n   >>> c.method.__func__.whoami = \'my name is method\'\n   >>> c.method.whoami\n   \'my name is method\'\n\nSee *The standard type hierarchy* for more information.\n',
  'typesmodules': "\nModules\n*******\n\nThe only special operation on a module is attribute access:\n``m.name``, where *m* is a module and *name* accesses a name defined\nin *m*'s symbol table. Module attributes can be assigned to.  (Note\nthat the ``import`` statement is not, strictly speaking, an operation\non a module object; ``import foo`` does not require a module object\nnamed *foo* to exist, rather it requires an (external) *definition*\nfor a module named *foo* somewhere.)\n\nA special attribute of every module is ``__dict__``. This is the\ndictionary containing the module's symbol table. Modifying this\ndictionary will actually change the module's symbol table, but direct\nassignment to the ``__dict__`` attribute is not possible (you can\nwrite ``m.__dict__['a'] = 1``, which defines ``m.a`` to be ``1``, but\nyou can't write ``m.__dict__ = {}``).  Modifying ``__dict__`` directly\nis not recommended.\n\nModules built into the interpreter are written like this: ``<module\n'sys' (built-in)>``.  If loaded from a file, they are written as\n``<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>``.\n",
- 'typesseq': '\nSequence Types --- ``list``, ``tuple``, ``range``\n*************************************************\n\nThere are three basic sequence types: lists, tuples, and range\nobjects. Additional sequence types tailored for processing of *binary\ndata* and *text strings* are described in dedicated sections.\n\n\nCommon Sequence Operations\n==========================\n\nThe operations in the following table are supported by most sequence\ntypes, both mutable and immutable. The ``collections.abc.Sequence``\nABC is provided to make it easier to correctly implement these\noperations on custom sequence types.\n\nThis table lists the sequence operations sorted in ascending priority\n(operations in the same box have the same priority).  In the table,\n*s* and *t* are sequences of the same type, *n*, *i*, *j* and *k* are\nintegers and *x* is an arbitrary object that meets any type and value\nrestrictions imposed by *s*.\n\nThe ``in`` and ``not in`` operations have the same priorities as the\ncomparison operations. The ``+`` (concatenation) and ``*``\n(repetition) operations have the same priority as the corresponding\nnumeric operations.\n\n+----------------------------+----------------------------------+------------+\n| Operation                  | Result                           | Notes      |\n+============================+==================================+============+\n| ``x in s``                 | ``True`` if an item of *s* is    | (1)        |\n|                            | equal to *x*, else ``False``     |            |\n+----------------------------+----------------------------------+------------+\n| ``x not in s``             | ``False`` if an item of *s* is   | (1)        |\n|                            | equal to *x*, else ``True``      |            |\n+----------------------------+----------------------------------+------------+\n| ``s + t``                  | the concatenation of *s* and *t* | (6)(7)     |\n+----------------------------+----------------------------------+------------+\n| ``s * n`` or ``n * s``     | *n* shallow copies of *s*        | (2)(7)     |\n|                            | concatenated                     |            |\n+----------------------------+----------------------------------+------------+\n| ``s[i]``                   | *i*th item of *s*, origin 0      | (3)        |\n+----------------------------+----------------------------------+------------+\n| ``s[i:j]``                 | slice of *s* from *i* to *j*     | (3)(4)     |\n+----------------------------+----------------------------------+------------+\n| ``s[i:j:k]``               | slice of *s* from *i* to *j*     | (3)(5)     |\n|                            | with step *k*                    |            |\n+----------------------------+----------------------------------+------------+\n| ``len(s)``                 | length of *s*                    |            |\n+----------------------------+----------------------------------+------------+\n| ``min(s)``                 | smallest item of *s*             |            |\n+----------------------------+----------------------------------+------------+\n| ``max(s)``                 | largest item of *s*              |            |\n+----------------------------+----------------------------------+------------+\n| ``s.index(x[, i[, j]])``   | index of the first occurrence of | (8)        |\n|                            | *x* in *s* (at or after index    |            |\n|                            | *i* and before index *j*)        |            |\n+----------------------------+----------------------------------+------------+\n| ``s.count(x)``             | total number of occurrences of   |            |\n|                            | *x* in *s*                       |            |\n+----------------------------+----------------------------------+------------+\n\nSequences of the same type also support comparisons.  In particular,\ntuples and lists are compared lexicographically by comparing\ncorresponding elements. This means that to compare equal, every\nelement must compare equal and the two sequences must be of the same\ntype and have the same length.  (For full details see *Comparisons* in\nthe language reference.)\n\nNotes:\n\n1. While the ``in`` and ``not in`` operations are used only for simple\n   containment testing in the general case, some specialised sequences\n   (such as ``str``, ``bytes`` and ``bytearray``) also use them for\n   subsequence testing:\n\n      >>> "gg" in "eggs"\n      True\n\n2. Values of *n* less than ``0`` are treated as ``0`` (which yields an\n   empty sequence of the same type as *s*).  Note also that the copies\n   are shallow; nested structures are not copied.  This often haunts\n   new Python programmers; consider:\n\n      >>> lists = [[]] * 3\n      >>> lists\n      [[], [], []]\n      >>> lists[0].append(3)\n      >>> lists\n      [[3], [3], [3]]\n\n   What has happened is that ``[[]]`` is a one-element list containing\n   an empty list, so all three elements of ``[[]] * 3`` are (pointers\n   to) this single empty list.  Modifying any of the elements of\n   ``lists`` modifies this single list. You can create a list of\n   different lists this way:\n\n      >>> lists = [[] for i in range(3)]\n      >>> lists[0].append(3)\n      >>> lists[1].append(5)\n      >>> lists[2].append(7)\n      >>> lists\n      [[3], [5], [7]]\n\n3. If *i* or *j* is negative, the index is relative to the end of the\n   string: ``len(s) + i`` or ``len(s) + j`` is substituted.  But note\n   that ``-0`` is still ``0``.\n\n4. The slice of *s* from *i* to *j* is defined as the sequence of\n   items with index *k* such that ``i <= k < j``.  If *i* or *j* is\n   greater than ``len(s)``, use ``len(s)``.  If *i* is omitted or\n   ``None``, use ``0``.  If *j* is omitted or ``None``, use\n   ``len(s)``.  If *i* is greater than or equal to *j*, the slice is\n   empty.\n\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\n   sequence of items with index  ``x = i + n*k`` such that ``0 <= n <\n   (j-i)/k``.  In other words, the indices are ``i``, ``i+k``,\n   ``i+2*k``, ``i+3*k`` and so on, stopping when *j* is reached (but\n   never including *j*).  If *i* or *j* is greater than ``len(s)``,\n   use ``len(s)``.  If *i* or *j* are omitted or ``None``, they become\n   "end" values (which end depends on the sign of *k*).  Note, *k*\n   cannot be zero. If *k* is ``None``, it is treated like ``1``.\n\n6. Concatenating immutable sequences always results in a new object.\n   This means that building up a sequence by repeated concatenation\n   will have a quadratic runtime cost in the total sequence length.\n   To get a linear runtime cost, you must switch to one of the\n   alternatives below:\n\n   * if concatenating ``str`` objects, you can build a list and use\n     ``str.join()`` at the end or else write to a ``io.StringIO``\n     instance and retrieve its value when complete\n\n   * if concatenating ``bytes`` objects, you can similarly use\n     ``bytes.join()`` or ``io.BytesIO``, or you can do in-place\n     concatenation with a ``bytearray`` object.  ``bytearray`` objects\n     are mutable and have an efficient overallocation mechanism\n\n   * if concatenating ``tuple`` objects, extend a ``list`` instead\n\n   * for other types, investigate the relevant class documentation\n\n7. Some sequence types (such as ``range``) only support item sequences\n   that follow specific patterns, and hence don\'t support sequence\n   concatenation or repetition.\n\n8. ``index`` raises ``ValueError`` when *x* is not found in *s*. When\n   supported, the additional arguments to the index method allow\n   efficient searching of subsections of the sequence. Passing the\n   extra arguments is roughly equivalent to using ``s[i:j].index(x)``,\n   only without copying any data and with the returned index being\n   relative to the start of the sequence rather than the start of the\n   slice.\n\n\nImmutable Sequence Types\n========================\n\nThe only operation that immutable sequence types generally implement\nthat is not also implemented by mutable sequence types is support for\nthe ``hash()`` built-in.\n\nThis support allows immutable sequences, such as ``tuple`` instances,\nto be used as ``dict`` keys and stored in ``set`` and ``frozenset``\ninstances.\n\nAttempting to hash an immutable sequence that contains unhashable\nvalues will result in ``TypeError``.\n\n\nMutable Sequence Types\n======================\n\nThe operations in the following table are defined on mutable sequence\ntypes. The ``collections.abc.MutableSequence`` ABC is provided to make\nit easier to correctly implement these operations on custom sequence\ntypes.\n\nIn the table *s* is an instance of a mutable sequence type, *t* is any\niterable object and *x* is an arbitrary object that meets any type and\nvalue restrictions imposed by *s* (for example, ``bytearray`` only\naccepts integers that meet the value restriction ``0 <= x <= 255``).\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation                      | Result                           | Notes                 |\n+================================+==================================+=======================+\n| ``s[i] = x``                   | item *i* of *s* is replaced by   |                       |\n|                                | *x*                              |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j] = t``                 | slice of *s* from *i* to *j* is  |                       |\n|                                | replaced by the contents of the  |                       |\n|                                | iterable *t*                     |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j]``                 | same as ``s[i:j] = []``          |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j:k] = t``               | the elements of ``s[i:j:k]`` are | (1)                   |\n|                                | replaced by those of *t*         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j:k]``               | removes the elements of          |                       |\n|                                | ``s[i:j:k]`` from the list       |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.append(x)``                | appends *x* to the end of the    |                       |\n|                                | sequence (same as                |                       |\n|                                | ``s[len(s):len(s)] = [x]``)      |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.clear()``                  | removes all items from ``s``     | (5)                   |\n|                                | (same as ``del s[:]``)           |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.copy()``                   | creates a shallow copy of ``s``  | (5)                   |\n|                                | (same as ``s[:]``)               |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.extend(t)``                | extends *s* with the contents of |                       |\n|                                | *t* (same as ``s[len(s):len(s)]  |                       |\n|                                | = t``)                           |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.insert(i, x)``             | inserts *x* into *s* at the      |                       |\n|                                | index given by *i* (same as      |                       |\n|                                | ``s[i:i] = [x]``)                |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.pop([i])``                 | retrieves the item at *i* and    | (2)                   |\n|                                | also removes it from *s*         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.remove(x)``                | remove the first item from *s*   | (3)                   |\n|                                | where ``s[i] == x``              |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.reverse()``                | reverses the items of *s* in     | (4)                   |\n|                                | place                            |                       |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The optional argument *i* defaults to ``-1``, so that by default\n   the last item is removed and returned.\n\n3. ``remove`` raises ``ValueError`` when *x* is not found in *s*.\n\n4. The ``reverse()`` method modifies the sequence in place for economy\n   of space when reversing a large sequence.  To remind users that it\n   operates by side effect, it does not return the reversed sequence.\n\n5. ``clear()`` and ``copy()`` are included for consistency with the\n   interfaces of mutable containers that don\'t support slicing\n   operations (such as ``dict`` and ``set``)\n\n   New in version 3.3: ``clear()`` and ``copy()`` methods.\n\n\nLists\n=====\n\nLists are mutable sequences, typically used to store collections of\nhomogeneous items (where the precise degree of similarity will vary by\napplication).\n\nclass class list([iterable])\n\n   Lists may be constructed in several ways:\n\n   * Using a pair of square brackets to denote the empty list: ``[]``\n\n   * Using square brackets, separating items with commas: ``[a]``,\n     ``[a, b, c]``\n\n   * Using a list comprehension: ``[x for x in iterable]``\n\n   * Using the type constructor: ``list()`` or ``list(iterable)``\n\n   The constructor builds a list whose items are the same and in the\n   same order as *iterable*\'s items.  *iterable* may be either a\n   sequence, a container that supports iteration, or an iterator\n   object.  If *iterable* is already a list, a copy is made and\n   returned, similar to ``iterable[:]``. For example, ``list(\'abc\')``\n   returns ``[\'a\', \'b\', \'c\']`` and ``list( (1, 2, 3) )`` returns ``[1,\n   2, 3]``. If no argument is given, the constructor creates a new\n   empty list, ``[]``.\n\n   Many other operations also produce lists, including the\n   ``sorted()`` built-in.\n\n   Lists implement all of the *common* and *mutable* sequence\n   operations. Lists also provide the following additional method:\n\n   sort(*, key=None, reverse=None)\n\n      This method sorts the list in place, using only ``<``\n      comparisons between items. Exceptions are not suppressed - if\n      any comparison operations fail, the entire sort operation will\n      fail (and the list will likely be left in a partially modified\n      state).\n\n      *key* specifies a function of one argument that is used to\n      extract a comparison key from each list element (for example,\n      ``key=str.lower``). The key corresponding to each item in the\n      list is calculated once and then used for the entire sorting\n      process. The default value of ``None`` means that list items are\n      sorted directly without calculating a separate key value.\n\n      The ``functools.cmp_to_key()`` utility is available to convert a\n      2.x style *cmp* function to a *key* function.\n\n      *reverse* is a boolean value.  If set to ``True``, then the list\n      elements are sorted as if each comparison were reversed.\n\n      This method modifies the sequence in place for economy of space\n      when sorting a large sequence.  To remind users that it operates\n      by side effect, it does not return the sorted sequence (use\n      ``sorted()`` to explicitly request a new sorted list instance).\n\n      The ``sort()`` method is guaranteed to be stable.  A sort is\n      stable if it guarantees not to change the relative order of\n      elements that compare equal --- this is helpful for sorting in\n      multiple passes (for example, sort by department, then by salary\n      grade).\n\n      **CPython implementation detail:** While a list is being sorted,\n      the effect of attempting to mutate, or even inspect, the list is\n      undefined.  The C implementation of Python makes the list appear\n      empty for the duration, and raises ``ValueError`` if it can\n      detect that the list has been mutated during a sort.\n\n\nTuples\n======\n\nTuples are immutable sequences, typically used to store collections of\nheterogeneous data (such as the 2-tuples produced by the\n``enumerate()`` built-in). Tuples are also used for cases where an\nimmutable sequence of homogeneous data is needed (such as allowing\nstorage in a ``set`` or ``dict`` instance).\n\nclass class tuple([iterable])\n\n   Tuples may be constructed in a number of ways:\n\n   * Using a pair of parentheses to denote the empty tuple: ``()``\n\n   * Using a trailing comma for a singleton tuple: ``a,`` or ``(a,)``\n\n   * Separating items with commas: ``a, b, c`` or ``(a, b, c)``\n\n   * Using the ``tuple()`` built-in: ``tuple()`` or\n     ``tuple(iterable)``\n\n   The constructor builds a tuple whose items are the same and in the\n   same order as *iterable*\'s items.  *iterable* may be either a\n   sequence, a container that supports iteration, or an iterator\n   object.  If *iterable* is already a tuple, it is returned\n   unchanged. For example, ``tuple(\'abc\')`` returns ``(\'a\', \'b\',\n   \'c\')`` and ``tuple( [1, 2, 3] )`` returns ``(1, 2, 3)``. If no\n   argument is given, the constructor creates a new empty tuple,\n   ``()``.\n\n   Note that it is actually the comma which makes a tuple, not the\n   parentheses. The parentheses are optional, except in the empty\n   tuple case, or when they are needed to avoid syntactic ambiguity.\n   For example, ``f(a, b, c)`` is a function call with three\n   arguments, while ``f((a, b, c))`` is a function call with a 3-tuple\n   as the sole argument.\n\n   Tuples implement all of the *common* sequence operations.\n\nFor heterogeneous collections of data where access by name is clearer\nthan access by index, ``collections.namedtuple()`` may be a more\nappropriate choice than a simple tuple object.\n\n\nRanges\n======\n\nThe ``range`` type represents an immutable sequence of numbers and is\ncommonly used for looping a specific number of times in ``for`` loops.\n\nclass class range(stop)\nclass class range(start, stop[, step])\n\n   The arguments to the range constructor must be integers (either\n   built-in ``int`` or any object that implements the ``__index__``\n   special method).  If the *step* argument is omitted, it defaults to\n   ``1``. If the *start* argument is omitted, it defaults to ``0``. If\n   *step* is zero, ``ValueError`` is raised.\n\n   For a positive *step*, the contents of a range ``r`` are determined\n   by the formula ``r[i] = start + step*i`` where ``i >= 0`` and\n   ``r[i] < stop``.\n\n   For a negative *step*, the contents of the range are still\n   determined by the formula ``r[i] = start + step*i``, but the\n   constraints are ``i >= 0`` and ``r[i] > stop``.\n\n   A range object will be empty if ``r[0]`` does not meet the value\n   constraint. Ranges do support negative indices, but these are\n   interpreted as indexing from the end of the sequence determined by\n   the positive indices.\n\n   Ranges containing absolute values larger than ``sys.maxsize`` are\n   permitted but some features (such as ``len()``) may raise\n   ``OverflowError``.\n\n   Range examples:\n\n      >>> list(range(10))\n      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n      >>> list(range(1, 11))\n      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n      >>> list(range(0, 30, 5))\n      [0, 5, 10, 15, 20, 25]\n      >>> list(range(0, 10, 3))\n      [0, 3, 6, 9]\n      >>> list(range(0, -10, -1))\n      [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]\n      >>> list(range(0))\n      []\n      >>> list(range(1, 0))\n      []\n\n   Ranges implement all of the *common* sequence operations except\n   concatenation and repetition (due to the fact that range objects\n   can only represent sequences that follow a strict pattern and\n   repetition and concatenation will usually violate that pattern).\n\nThe advantage of the ``range`` type over a regular ``list`` or\n``tuple`` is that a ``range`` object will always take the same (small)\namount of memory, no matter the size of the range it represents (as it\nonly stores the ``start``, ``stop`` and ``step`` values, calculating\nindividual items and subranges as needed).\n\nRange objects implement the ``collections.Sequence`` ABC, and provide\nfeatures such as containment tests, element index lookup, slicing and\nsupport for negative indices (see *Sequence Types --- list, tuple,\nrange*):\n\n>>> r = range(0, 20, 2)\n>>> r\nrange(0, 20, 2)\n>>> 11 in r\nFalse\n>>> 10 in r\nTrue\n>>> r.index(10)\n5\n>>> r[5]\n10\n>>> r[:5]\nrange(0, 10, 2)\n>>> r[-1]\n18\n\nTesting range objects for equality with ``==`` and ``!=`` compares\nthem as sequences.  That is, two range objects are considered equal if\nthey represent the same sequence of values.  (Note that two range\nobjects that compare equal might have different ``start``, ``stop``\nand ``step`` attributes, for example ``range(0) == range(2, 1, 3)`` or\n``range(0, 3, 2) == range(0, 4, 2)``.)\n\nChanged in version 3.2: Implement the Sequence ABC. Support slicing\nand negative indices. Test ``int`` objects for membership in constant\ntime instead of iterating through all items.\n\nChanged in version 3.3: Define \'==\' and \'!=\' to compare range objects\nbased on the sequence of values they define (instead of comparing\nbased on object identity).\n\nNew in version 3.3: The ``start``, ``stop`` and ``step`` attributes.\n',
+ 'typesseq': '\nSequence Types --- ``list``, ``tuple``, ``range``\n*************************************************\n\nThere are three basic sequence types: lists, tuples, and range\nobjects. Additional sequence types tailored for processing of *binary\ndata* and *text strings* are described in dedicated sections.\n\n\nCommon Sequence Operations\n==========================\n\nThe operations in the following table are supported by most sequence\ntypes, both mutable and immutable. The ``collections.abc.Sequence``\nABC is provided to make it easier to correctly implement these\noperations on custom sequence types.\n\nThis table lists the sequence operations sorted in ascending priority\n(operations in the same box have the same priority).  In the table,\n*s* and *t* are sequences of the same type, *n*, *i*, *j* and *k* are\nintegers and *x* is an arbitrary object that meets any type and value\nrestrictions imposed by *s*.\n\nThe ``in`` and ``not in`` operations have the same priorities as the\ncomparison operations. The ``+`` (concatenation) and ``*``\n(repetition) operations have the same priority as the corresponding\nnumeric operations.\n\n+----------------------------+----------------------------------+------------+\n| Operation                  | Result                           | Notes      |\n+============================+==================================+============+\n| ``x in s``                 | ``True`` if an item of *s* is    | (1)        |\n|                            | equal to *x*, else ``False``     |            |\n+----------------------------+----------------------------------+------------+\n| ``x not in s``             | ``False`` if an item of *s* is   | (1)        |\n|                            | equal to *x*, else ``True``      |            |\n+----------------------------+----------------------------------+------------+\n| ``s + t``                  | the concatenation of *s* and *t* | (6)(7)     |\n+----------------------------+----------------------------------+------------+\n| ``s * n`` or ``n * s``     | *n* shallow copies of *s*        | (2)(7)     |\n|                            | concatenated                     |            |\n+----------------------------+----------------------------------+------------+\n| ``s[i]``                   | *i*th item of *s*, origin 0      | (3)        |\n+----------------------------+----------------------------------+------------+\n| ``s[i:j]``                 | slice of *s* from *i* to *j*     | (3)(4)     |\n+----------------------------+----------------------------------+------------+\n| ``s[i:j:k]``               | slice of *s* from *i* to *j*     | (3)(5)     |\n|                            | with step *k*                    |            |\n+----------------------------+----------------------------------+------------+\n| ``len(s)``                 | length of *s*                    |            |\n+----------------------------+----------------------------------+------------+\n| ``min(s)``                 | smallest item of *s*             |            |\n+----------------------------+----------------------------------+------------+\n| ``max(s)``                 | largest item of *s*              |            |\n+----------------------------+----------------------------------+------------+\n| ``s.index(x[, i[, j]])``   | index of the first occurrence of | (8)        |\n|                            | *x* in *s* (at or after index    |            |\n|                            | *i* and before index *j*)        |            |\n+----------------------------+----------------------------------+------------+\n| ``s.count(x)``             | total number of occurrences of   |            |\n|                            | *x* in *s*                       |            |\n+----------------------------+----------------------------------+------------+\n\nSequences of the same type also support comparisons.  In particular,\ntuples and lists are compared lexicographically by comparing\ncorresponding elements. This means that to compare equal, every\nelement must compare equal and the two sequences must be of the same\ntype and have the same length.  (For full details see *Comparisons* in\nthe language reference.)\n\nNotes:\n\n1. While the ``in`` and ``not in`` operations are used only for simple\n   containment testing in the general case, some specialised sequences\n   (such as ``str``, ``bytes`` and ``bytearray``) also use them for\n   subsequence testing:\n\n      >>> "gg" in "eggs"\n      True\n\n2. Values of *n* less than ``0`` are treated as ``0`` (which yields an\n   empty sequence of the same type as *s*).  Note also that the copies\n   are shallow; nested structures are not copied.  This often haunts\n   new Python programmers; consider:\n\n      >>> lists = [[]] * 3\n      >>> lists\n      [[], [], []]\n      >>> lists[0].append(3)\n      >>> lists\n      [[3], [3], [3]]\n\n   What has happened is that ``[[]]`` is a one-element list containing\n   an empty list, so all three elements of ``[[]] * 3`` are (pointers\n   to) this single empty list.  Modifying any of the elements of\n   ``lists`` modifies this single list. You can create a list of\n   different lists this way:\n\n      >>> lists = [[] for i in range(3)]\n      >>> lists[0].append(3)\n      >>> lists[1].append(5)\n      >>> lists[2].append(7)\n      >>> lists\n      [[3], [5], [7]]\n\n3. If *i* or *j* is negative, the index is relative to the end of the\n   string: ``len(s) + i`` or ``len(s) + j`` is substituted.  But note\n   that ``-0`` is still ``0``.\n\n4. The slice of *s* from *i* to *j* is defined as the sequence of\n   items with index *k* such that ``i <= k < j``.  If *i* or *j* is\n   greater than ``len(s)``, use ``len(s)``.  If *i* is omitted or\n   ``None``, use ``0``.  If *j* is omitted or ``None``, use\n   ``len(s)``.  If *i* is greater than or equal to *j*, the slice is\n   empty.\n\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\n   sequence of items with index  ``x = i + n*k`` such that ``0 <= n <\n   (j-i)/k``.  In other words, the indices are ``i``, ``i+k``,\n   ``i+2*k``, ``i+3*k`` and so on, stopping when *j* is reached (but\n   never including *j*).  If *i* or *j* is greater than ``len(s)``,\n   use ``len(s)``.  If *i* or *j* are omitted or ``None``, they become\n   "end" values (which end depends on the sign of *k*).  Note, *k*\n   cannot be zero. If *k* is ``None``, it is treated like ``1``.\n\n6. Concatenating immutable sequences always results in a new object.\n   This means that building up a sequence by repeated concatenation\n   will have a quadratic runtime cost in the total sequence length.\n   To get a linear runtime cost, you must switch to one of the\n   alternatives below:\n\n   * if concatenating ``str`` objects, you can build a list and use\n     ``str.join()`` at the end or else write to a ``io.StringIO``\n     instance and retrieve its value when complete\n\n   * if concatenating ``bytes`` objects, you can similarly use\n     ``bytes.join()`` or ``io.BytesIO``, or you can do in-place\n     concatenation with a ``bytearray`` object.  ``bytearray`` objects\n     are mutable and have an efficient overallocation mechanism\n\n   * if concatenating ``tuple`` objects, extend a ``list`` instead\n\n   * for other types, investigate the relevant class documentation\n\n7. Some sequence types (such as ``range``) only support item sequences\n   that follow specific patterns, and hence don\'t support sequence\n   concatenation or repetition.\n\n8. ``index`` raises ``ValueError`` when *x* is not found in *s*. When\n   supported, the additional arguments to the index method allow\n   efficient searching of subsections of the sequence. Passing the\n   extra arguments is roughly equivalent to using ``s[i:j].index(x)``,\n   only without copying any data and with the returned index being\n   relative to the start of the sequence rather than the start of the\n   slice.\n\n\nImmutable Sequence Types\n========================\n\nThe only operation that immutable sequence types generally implement\nthat is not also implemented by mutable sequence types is support for\nthe ``hash()`` built-in.\n\nThis support allows immutable sequences, such as ``tuple`` instances,\nto be used as ``dict`` keys and stored in ``set`` and ``frozenset``\ninstances.\n\nAttempting to hash an immutable sequence that contains unhashable\nvalues will result in ``TypeError``.\n\n\nMutable Sequence Types\n======================\n\nThe operations in the following table are defined on mutable sequence\ntypes. The ``collections.abc.MutableSequence`` ABC is provided to make\nit easier to correctly implement these operations on custom sequence\ntypes.\n\nIn the table *s* is an instance of a mutable sequence type, *t* is any\niterable object and *x* is an arbitrary object that meets any type and\nvalue restrictions imposed by *s* (for example, ``bytearray`` only\naccepts integers that meet the value restriction ``0 <= x <= 255``).\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation                      | Result                           | Notes                 |\n+================================+==================================+=======================+\n| ``s[i] = x``                   | item *i* of *s* is replaced by   |                       |\n|                                | *x*                              |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j] = t``                 | slice of *s* from *i* to *j* is  |                       |\n|                                | replaced by the contents of the  |                       |\n|                                | iterable *t*                     |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j]``                 | same as ``s[i:j] = []``          |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j:k] = t``               | the elements of ``s[i:j:k]`` are | (1)                   |\n|                                | replaced by those of *t*         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j:k]``               | removes the elements of          |                       |\n|                                | ``s[i:j:k]`` from the list       |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.append(x)``                | appends *x* to the end of the    |                       |\n|                                | sequence (same as                |                       |\n|                                | ``s[len(s):len(s)] = [x]``)      |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.clear()``                  | removes all items from ``s``     | (5)                   |\n|                                | (same as ``del s[:]``)           |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.copy()``                   | creates a shallow copy of ``s``  | (5)                   |\n|                                | (same as ``s[:]``)               |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.extend(t)``                | extends *s* with the contents of |                       |\n|                                | *t* (same as ``s[len(s):len(s)]  |                       |\n|                                | = t``)                           |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.insert(i, x)``             | inserts *x* into *s* at the      |                       |\n|                                | index given by *i* (same as      |                       |\n|                                | ``s[i:i] = [x]``)                |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.pop([i])``                 | retrieves the item at *i* and    | (2)                   |\n|                                | also removes it from *s*         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.remove(x)``                | remove the first item from *s*   | (3)                   |\n|                                | where ``s[i] == x``              |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.reverse()``                | reverses the items of *s* in     | (4)                   |\n|                                | place                            |                       |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The optional argument *i* defaults to ``-1``, so that by default\n   the last item is removed and returned.\n\n3. ``remove`` raises ``ValueError`` when *x* is not found in *s*.\n\n4. The ``reverse()`` method modifies the sequence in place for economy\n   of space when reversing a large sequence.  To remind users that it\n   operates by side effect, it does not return the reversed sequence.\n\n5. ``clear()`` and ``copy()`` are included for consistency with the\n   interfaces of mutable containers that don\'t support slicing\n   operations (such as ``dict`` and ``set``)\n\n   New in version 3.3: ``clear()`` and ``copy()`` methods.\n\n\nLists\n=====\n\nLists are mutable sequences, typically used to store collections of\nhomogeneous items (where the precise degree of similarity will vary by\napplication).\n\nclass class list([iterable])\n\n   Lists may be constructed in several ways:\n\n   * Using a pair of square brackets to denote the empty list: ``[]``\n\n   * Using square brackets, separating items with commas: ``[a]``,\n     ``[a, b, c]``\n\n   * Using a list comprehension: ``[x for x in iterable]``\n\n   * Using the type constructor: ``list()`` or ``list(iterable)``\n\n   The constructor builds a list whose items are the same and in the\n   same order as *iterable*\'s items.  *iterable* may be either a\n   sequence, a container that supports iteration, or an iterator\n   object.  If *iterable* is already a list, a copy is made and\n   returned, similar to ``iterable[:]``. For example, ``list(\'abc\')``\n   returns ``[\'a\', \'b\', \'c\']`` and ``list( (1, 2, 3) )`` returns ``[1,\n   2, 3]``. If no argument is given, the constructor creates a new\n   empty list, ``[]``.\n\n   Many other operations also produce lists, including the\n   ``sorted()`` built-in.\n\n   Lists implement all of the *common* and *mutable* sequence\n   operations. Lists also provide the following additional method:\n\n   sort(*, key=None, reverse=None)\n\n      This method sorts the list in place, using only ``<``\n      comparisons between items. Exceptions are not suppressed - if\n      any comparison operations fail, the entire sort operation will\n      fail (and the list will likely be left in a partially modified\n      state).\n\n      *key* specifies a function of one argument that is used to\n      extract a comparison key from each list element (for example,\n      ``key=str.lower``). The key corresponding to each item in the\n      list is calculated once and then used for the entire sorting\n      process. The default value of ``None`` means that list items are\n      sorted directly without calculating a separate key value.\n\n      The ``functools.cmp_to_key()`` utility is available to convert a\n      2.x style *cmp* function to a *key* function.\n\n      *reverse* is a boolean value.  If set to ``True``, then the list\n      elements are sorted as if each comparison were reversed.\n\n      This method modifies the sequence in place for economy of space\n      when sorting a large sequence.  To remind users that it operates\n      by side effect, it does not return the sorted sequence (use\n      ``sorted()`` to explicitly request a new sorted list instance).\n\n      The ``sort()`` method is guaranteed to be stable.  A sort is\n      stable if it guarantees not to change the relative order of\n      elements that compare equal --- this is helpful for sorting in\n      multiple passes (for example, sort by department, then by salary\n      grade).\n\n      **CPython implementation detail:** While a list is being sorted,\n      the effect of attempting to mutate, or even inspect, the list is\n      undefined.  The C implementation of Python makes the list appear\n      empty for the duration, and raises ``ValueError`` if it can\n      detect that the list has been mutated during a sort.\n\n\nTuples\n======\n\nTuples are immutable sequences, typically used to store collections of\nheterogeneous data (such as the 2-tuples produced by the\n``enumerate()`` built-in). Tuples are also used for cases where an\nimmutable sequence of homogeneous data is needed (such as allowing\nstorage in a ``set`` or ``dict`` instance).\n\nclass class tuple([iterable])\n\n   Tuples may be constructed in a number of ways:\n\n   * Using a pair of parentheses to denote the empty tuple: ``()``\n\n   * Using a trailing comma for a singleton tuple: ``a,`` or ``(a,)``\n\n   * Separating items with commas: ``a, b, c`` or ``(a, b, c)``\n\n   * Using the ``tuple()`` built-in: ``tuple()`` or\n     ``tuple(iterable)``\n\n   The constructor builds a tuple whose items are the same and in the\n   same order as *iterable*\'s items.  *iterable* may be either a\n   sequence, a container that supports iteration, or an iterator\n   object.  If *iterable* is already a tuple, it is returned\n   unchanged. For example, ``tuple(\'abc\')`` returns ``(\'a\', \'b\',\n   \'c\')`` and ``tuple( [1, 2, 3] )`` returns ``(1, 2, 3)``. If no\n   argument is given, the constructor creates a new empty tuple,\n   ``()``.\n\n   Note that it is actually the comma which makes a tuple, not the\n   parentheses. The parentheses are optional, except in the empty\n   tuple case, or when they are needed to avoid syntactic ambiguity.\n   For example, ``f(a, b, c)`` is a function call with three\n   arguments, while ``f((a, b, c))`` is a function call with a 3-tuple\n   as the sole argument.\n\n   Tuples implement all of the *common* sequence operations.\n\nFor heterogeneous collections of data where access by name is clearer\nthan access by index, ``collections.namedtuple()`` may be a more\nappropriate choice than a simple tuple object.\n\n\nRanges\n======\n\nThe ``range`` type represents an immutable sequence of numbers and is\ncommonly used for looping a specific number of times in ``for`` loops.\n\nclass class range(stop)\nclass class range(start, stop[, step])\n\n   The arguments to the range constructor must be integers (either\n   built-in ``int`` or any object that implements the ``__index__``\n   special method).  If the *step* argument is omitted, it defaults to\n   ``1``. If the *start* argument is omitted, it defaults to ``0``. If\n   *step* is zero, ``ValueError`` is raised.\n\n   For a positive *step*, the contents of a range ``r`` are determined\n   by the formula ``r[i] = start + step*i`` where ``i >= 0`` and\n   ``r[i] < stop``.\n\n   For a negative *step*, the contents of the range are still\n   determined by the formula ``r[i] = start + step*i``, but the\n   constraints are ``i >= 0`` and ``r[i] > stop``.\n\n   A range object will be empty if ``r[0]`` does not meet the value\n   constraint. Ranges do support negative indices, but these are\n   interpreted as indexing from the end of the sequence determined by\n   the positive indices.\n\n   Ranges containing absolute values larger than ``sys.maxsize`` are\n   permitted but some features (such as ``len()``) may raise\n   ``OverflowError``.\n\n   Range examples:\n\n      >>> list(range(10))\n      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n      >>> list(range(1, 11))\n      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n      >>> list(range(0, 30, 5))\n      [0, 5, 10, 15, 20, 25]\n      >>> list(range(0, 10, 3))\n      [0, 3, 6, 9]\n      >>> list(range(0, -10, -1))\n      [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]\n      >>> list(range(0))\n      []\n      >>> list(range(1, 0))\n      []\n\n   Ranges implement all of the *common* sequence operations except\n   concatenation and repetition (due to the fact that range objects\n   can only represent sequences that follow a strict pattern and\n   repetition and concatenation will usually violate that pattern).\n\nThe advantage of the ``range`` type over a regular ``list`` or\n``tuple`` is that a ``range`` object will always take the same (small)\namount of memory, no matter the size of the range it represents (as it\nonly stores the ``start``, ``stop`` and ``step`` values, calculating\nindividual items and subranges as needed).\n\nRange objects implement the ``collections.abc.Sequence`` ABC, and\nprovide features such as containment tests, element index lookup,\nslicing and support for negative indices (see *Sequence Types ---\nlist, tuple, range*):\n\n>>> r = range(0, 20, 2)\n>>> r\nrange(0, 20, 2)\n>>> 11 in r\nFalse\n>>> 10 in r\nTrue\n>>> r.index(10)\n5\n>>> r[5]\n10\n>>> r[:5]\nrange(0, 10, 2)\n>>> r[-1]\n18\n\nTesting range objects for equality with ``==`` and ``!=`` compares\nthem as sequences.  That is, two range objects are considered equal if\nthey represent the same sequence of values.  (Note that two range\nobjects that compare equal might have different ``start``, ``stop``\nand ``step`` attributes, for example ``range(0) == range(2, 1, 3)`` or\n``range(0, 3, 2) == range(0, 4, 2)``.)\n\nChanged in version 3.2: Implement the Sequence ABC. Support slicing\nand negative indices. Test ``int`` objects for membership in constant\ntime instead of iterating through all items.\n\nChanged in version 3.3: Define \'==\' and \'!=\' to compare range objects\nbased on the sequence of values they define (instead of comparing\nbased on object identity).\n\nNew in version 3.3: The ``start``, ``stop`` and ``step`` attributes.\n',
  'typesseq-mutable': "\nMutable Sequence Types\n**********************\n\nThe operations in the following table are defined on mutable sequence\ntypes. The ``collections.abc.MutableSequence`` ABC is provided to make\nit easier to correctly implement these operations on custom sequence\ntypes.\n\nIn the table *s* is an instance of a mutable sequence type, *t* is any\niterable object and *x* is an arbitrary object that meets any type and\nvalue restrictions imposed by *s* (for example, ``bytearray`` only\naccepts integers that meet the value restriction ``0 <= x <= 255``).\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation                      | Result                           | Notes                 |\n+================================+==================================+=======================+\n| ``s[i] = x``                   | item *i* of *s* is replaced by   |                       |\n|                                | *x*                              |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j] = t``                 | slice of *s* from *i* to *j* is  |                       |\n|                                | replaced by the contents of the  |                       |\n|                                | iterable *t*                     |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j]``                 | same as ``s[i:j] = []``          |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j:k] = t``               | the elements of ``s[i:j:k]`` are | (1)                   |\n|                                | replaced by those of *t*         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j:k]``               | removes the elements of          |                       |\n|                                | ``s[i:j:k]`` from the list       |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.append(x)``                | appends *x* to the end of the    |                       |\n|                                | sequence (same as                |                       |\n|                                | ``s[len(s):len(s)] = [x]``)      |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.clear()``                  | removes all items from ``s``     | (5)                   |\n|                                | (same as ``del s[:]``)           |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.copy()``                   | creates a shallow copy of ``s``  | (5)                   |\n|                                | (same as ``s[:]``)               |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.extend(t)``                | extends *s* with the contents of |                       |\n|                                | *t* (same as ``s[len(s):len(s)]  |                       |\n|                                | = t``)                           |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.insert(i, x)``             | inserts *x* into *s* at the      |                       |\n|                                | index given by *i* (same as      |                       |\n|                                | ``s[i:i] = [x]``)                |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.pop([i])``                 | retrieves the item at *i* and    | (2)                   |\n|                                | also removes it from *s*         |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.remove(x)``                | remove the first item from *s*   | (3)                   |\n|                                | where ``s[i] == x``              |                       |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.reverse()``                | reverses the items of *s* in     | (4)                   |\n|                                | place                            |                       |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The optional argument *i* defaults to ``-1``, so that by default\n   the last item is removed and returned.\n\n3. ``remove`` raises ``ValueError`` when *x* is not found in *s*.\n\n4. The ``reverse()`` method modifies the sequence in place for economy\n   of space when reversing a large sequence.  To remind users that it\n   operates by side effect, it does not return the reversed sequence.\n\n5. ``clear()`` and ``copy()`` are included for consistency with the\n   interfaces of mutable containers that don't support slicing\n   operations (such as ``dict`` and ``set``)\n\n   New in version 3.3: ``clear()`` and ``copy()`` methods.\n",
  'unary': '\nUnary arithmetic and bitwise operations\n***************************************\n\nAll unary arithmetic and bitwise operations have the same priority:\n\n   u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr\n\nThe unary ``-`` (minus) operator yields the negation of its numeric\nargument.\n\nThe unary ``+`` (plus) operator yields its numeric argument unchanged.\n\nThe unary ``~`` (invert) operator yields the bitwise inversion of its\ninteger argument.  The bitwise inversion of ``x`` is defined as\n``-(x+1)``.  It only applies to integral numbers.\n\nIn all three cases, if the argument does not have the proper type, a\n``TypeError`` exception is raised.\n',
  'while': '\nThe ``while`` statement\n***********************\n\nThe ``while`` statement is used for repeated execution as long as an\nexpression is true:\n\n   while_stmt ::= "while" expression ":" suite\n                  ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the ``else`` clause, if present, is\nexecuted and the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite.  A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ngoes back to testing the expression.\n',
diff --git a/Lib/random.py b/Lib/random.py
index 4ebc757..808175a 100644
--- a/Lib/random.py
+++ b/Lib/random.py
@@ -41,7 +41,7 @@
 from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil
 from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin
 from os import urandom as _urandom
-from collections.abc import Set as _Set, Sequence as _Sequence
+from _collections_abc import Set as _Set, Sequence as _Sequence
 from hashlib import sha512 as _sha512
 
 __all__ = ["Random","seed","random","uniform","randint","choice","sample",
@@ -165,18 +165,17 @@
 
 ## -------------------- integer methods  -------------------
 
-    def randrange(self, start, stop=None, step=1, int=int):
+    def randrange(self, start, stop=None, step=1, _int=int):
         """Choose a random item from range(start, stop[, step]).
 
         This fixes the problem with randint() which includes the
         endpoint; in Python this is usually not what you want.
 
-        Do not supply the 'int' argument.
         """
 
         # This code is a bit messy to make it fast for the
         # common case while still doing adequate error checking.
-        istart = int(start)
+        istart = _int(start)
         if istart != start:
             raise ValueError("non-integer arg 1 for randrange()")
         if stop is None:
@@ -185,7 +184,7 @@
             raise ValueError("empty range for randrange()")
 
         # stop argument supplied.
-        istop = int(stop)
+        istop = _int(stop)
         if istop != stop:
             raise ValueError("non-integer stop for randrange()")
         width = istop - istart
@@ -195,7 +194,7 @@
             raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))
 
         # Non-unit step argument supplied.
-        istep = int(step)
+        istep = _int(step)
         if istep != step:
             raise ValueError("non-integer step for randrange()")
         if istep > 0:
@@ -220,10 +219,11 @@
                    Method=_MethodType, BuiltinMethod=_BuiltinMethodType):
         "Return a random int in the range [0,n).  Raises ValueError if n==0."
 
+        random = self.random
         getrandbits = self.getrandbits
         # Only call self.getrandbits if the original random() builtin method
         # has not been overridden or if a new getrandbits() was supplied.
-        if type(self.random) is BuiltinMethod or type(getrandbits) is Method:
+        if type(random) is BuiltinMethod or type(getrandbits) is Method:
             k = n.bit_length()  # don't use (n-1) here because n can be 1
             r = getrandbits(k)          # 0 <= r < 2**k
             while r >= n:
@@ -231,7 +231,6 @@
             return r
         # There's an overriden random() method but no new getrandbits() method,
         # so we can only use random() from here.
-        random = self.random
         if n >= maxsize:
             _warn("Underlying random() generator does not supply \n"
                 "enough bits to choose from a population range this large.\n"
@@ -254,21 +253,27 @@
             raise IndexError('Cannot choose from an empty sequence')
         return seq[i]
 
-    def shuffle(self, x, random=None, int=int):
+    def shuffle(self, x, random=None):
         """Shuffle list x in place, and return None.
 
         Optional argument random is a 0-argument function returning a
         random float in [0.0, 1.0); if it is the default None, the
         standard random.random will be used.
 
-        Do not supply the 'int' argument.
         """
 
-        randbelow = self._randbelow
-        for i in reversed(range(1, len(x))):
-            # pick an element in x[:i+1] with which to exchange x[i]
-            j = randbelow(i+1) if random is None else int(random() * (i+1))
-            x[i], x[j] = x[j], x[i]
+        if random is None:
+            randbelow = self._randbelow
+            for i in reversed(range(1, len(x))):
+                # pick an element in x[:i+1] with which to exchange x[i]
+                j = randbelow(i+1)
+                x[i], x[j] = x[j], x[i]
+        else:
+            _int = int
+            for i in reversed(range(1, len(x))):
+                # pick an element in x[:i+1] with which to exchange x[i]
+                j = _int(random() * (i+1))
+                x[i], x[j] = x[j], x[i]
 
     def sample(self, population, k):
         """Chooses k unique random elements from a population sequence or set.
diff --git a/Lib/re.py b/Lib/re.py
index fcea190..b41aab0 100644
--- a/Lib/re.py
+++ b/Lib/re.py
@@ -121,7 +121,6 @@
 import sys
 import sre_compile
 import sre_parse
-import functools
 
 # public symbols
 __all__ = [ "match", "search", "sub", "subn", "split", "findall",
diff --git a/Lib/selectors.py b/Lib/selectors.py
index fe027f0..3971502 100644
--- a/Lib/selectors.py
+++ b/Lib/selectors.py
@@ -6,7 +6,7 @@
 
 
 from abc import ABCMeta, abstractmethod
-from collections import namedtuple
+from collections import namedtuple, Mapping
 import functools
 import select
 import sys
@@ -44,6 +44,25 @@
 selected event mask and attached data."""
 
 
+class _SelectorMapping(Mapping):
+    """Mapping of file objects to selector keys."""
+
+    def __init__(self, selector):
+        self._selector = selector
+
+    def __len__(self):
+        return len(self._selector._fd_to_key)
+
+    def __getitem__(self, fileobj):
+        try:
+            return self._selector._fd_to_key[_fileobj_to_fd(fileobj)]
+        except KeyError:
+            raise KeyError("{!r} is not registered".format(fileobj)) from None
+
+    def __iter__(self):
+        return iter(self._selector._fd_to_key)
+
+
 class BaseSelector(metaclass=ABCMeta):
     """Base selector class.
 
@@ -62,6 +81,8 @@
     def __init__(self):
         # this maps file descriptors to keys
         self._fd_to_key = {}
+        # read-only mapping returned by get_map()
+        self._map = _SelectorMapping(self)
 
     def register(self, fileobj, events, data=None):
         """Register a file object.
@@ -117,11 +138,14 @@
             key = self._fd_to_key[_fileobj_to_fd(fileobj)]
         except KeyError:
             raise KeyError("{!r} is not registered".format(fileobj)) from None
-        if events != key.events or data != key.data:
-            # TODO: If only the data changed, use a shortcut that only
-            # updates the data.
+        if events != key.events:
             self.unregister(fileobj)
             return self.register(fileobj, events, data)
+        elif data != key.data:
+            # Use a shortcut to update the data.
+            key = key._replace(data=data)
+            self._fd_to_key[key.fd] = key
+            return key
         else:
             return key
 
@@ -162,6 +186,10 @@
         except KeyError:
             raise KeyError("{!r} is not registered".format(fileobj)) from None
 
+    def get_map(self):
+        """Return a mapping of file objects to selector keys."""
+        return self._map
+
     def __enter__(self):
         return self
 
@@ -326,8 +354,8 @@
             return ready
 
         def close(self):
-            super().close()
             self._epoll.close()
+            super().close()
 
 
 if hasattr(select, 'kqueue'):
@@ -389,8 +417,8 @@
             return ready
 
         def close(self):
-            super().close()
             self._kqueue.close()
+            super().close()
 
 
 # Choose the best implementation: roughly, epoll|kqueue > poll > select.
diff --git a/Lib/site.py b/Lib/site.py
index e1fa30e..b0d8268 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -70,7 +70,6 @@
 
 import sys
 import os
-import re
 import builtins
 import _sitebuiltins
 
@@ -327,6 +326,11 @@
     """Add site-packages (and possibly site-python) to sys.path"""
     for sitedir in getsitepackages(prefixes):
         if os.path.isdir(sitedir):
+            if "site-python" in sitedir:
+                import warnings
+                warnings.warn('"site-python" directories will not be '
+                              'supported in 3.5 anymore',
+                              DeprecationWarning)
             addsitedir(sitedir, known_paths)
 
     return known_paths
@@ -426,8 +430,8 @@
     while they are always available as "mbcs" in each locale. Make
     them usable by aliasing to "mbcs" in such a case."""
     if sys.platform == 'win32':
-        import locale, codecs
-        enc = locale.getdefaultlocale()[1]
+        import _bootlocale, codecs
+        enc = _bootlocale.getpreferredencoding(False)
         if enc.startswith('cp'):            # "cp***" ?
             try:
                 codecs.lookup(enc)
@@ -436,8 +440,7 @@
                 encodings._cache[enc] = encodings._unknown
                 encodings.aliases.aliases[enc] = 'mbcs'
 
-
-CONFIG_LINE = re.compile(r'^(?P<key>(\w|[-_])+)\s*=\s*(?P<value>.*)\s*$')
+CONFIG_LINE = r'^(?P<key>(\w|[-_])+)\s*=\s*(?P<value>.*)\s*$'
 
 def venv(known_paths):
     global PREFIXES, ENABLE_USER_SITE
@@ -460,12 +463,14 @@
         ]
 
     if candidate_confs:
+        import re
+        config_line = re.compile(CONFIG_LINE)
         virtual_conf = candidate_confs[0]
         system_site = "true"
         with open(virtual_conf) as f:
             for line in f:
                 line = line.strip()
-                m = CONFIG_LINE.match(line)
+                m = config_line.match(line)
                 if m:
                     d = m.groupdict()
                     key, value = d['key'].lower(), d['value']
diff --git a/Lib/sre_compile.py b/Lib/sre_compile.py
index d6dc60c..3a5083f 100644
--- a/Lib/sre_compile.py
+++ b/Lib/sre_compile.py
@@ -201,158 +201,143 @@
 def _optimize_charset(charset, fixup):
     # internal: optimize character set
     out = []
-    outappend = out.append
-    charmap = [0]*256
-    try:
-        for op, av in charset:
-            if op is NEGATE:
-                outappend((op, av))
-            elif op is LITERAL:
-                charmap[fixup(av)] = 1
-            elif op is RANGE:
-                for i in range(fixup(av[0]), fixup(av[1])+1):
-                    charmap[i] = 1
-            elif op is CATEGORY:
-                # XXX: could append to charmap tail
-                return charset # cannot compress
-    except IndexError:
-        # character set contains unicode characters
-        return _optimize_unicode(charset, fixup)
+    tail = []
+    charmap = bytearray(256)
+    for op, av in charset:
+        while True:
+            try:
+                if op is LITERAL:
+                    charmap[fixup(av)] = 1
+                elif op is RANGE:
+                    for i in range(fixup(av[0]), fixup(av[1])+1):
+                        charmap[i] = 1
+                elif op is NEGATE:
+                    out.append((op, av))
+                else:
+                    tail.append((op, av))
+            except IndexError:
+                if len(charmap) == 256:
+                    # character set contains non-UCS1 character codes
+                    charmap += b'\0' * 0xff00
+                    continue
+                # character set contains non-BMP character codes
+                tail.append((op, av))
+            break
+
     # compress character map
-    i = p = n = 0
     runs = []
-    runsappend = runs.append
-    for c in charmap:
-        if c:
-            if n == 0:
-                p = i
-            n = n + 1
-        elif n:
-            runsappend((p, n))
-            n = 0
-        i = i + 1
-    if n:
-        runsappend((p, n))
-    if len(runs) <= 2:
+    q = 0
+    while True:
+        p = charmap.find(1, q)
+        if p < 0:
+            break
+        if len(runs) >= 2:
+            runs = None
+            break
+        q = charmap.find(0, p)
+        if q < 0:
+            runs.append((p, len(charmap)))
+            break
+        runs.append((p, q))
+    if runs is not None:
         # use literal/range
-        for p, n in runs:
-            if n == 1:
-                outappend((LITERAL, p))
+        for p, q in runs:
+            if q - p == 1:
+                out.append((LITERAL, p))
             else:
-                outappend((RANGE, (p, p+n-1)))
+                out.append((RANGE, (p, q - 1)))
+        out += tail
         if len(out) < len(charset):
             return out
-    else:
-        # use bitmap
+        return charset
+
+    # use bitmap
+    if len(charmap) == 256:
         data = _mk_bitmap(charmap)
-        outappend((CHARSET, data))
+        out.append((CHARSET, data))
+        out += tail
         return out
-    return charset
 
-def _mk_bitmap(bits):
-    data = []
-    dataappend = data.append
-    if _sre.CODESIZE == 2:
-        start = (1, 0)
-    else:
-        start = (1, 0)
-    m, v = start
-    for c in bits:
-        if c:
-            v = v + m
-        m = m + m
-        if m > MAXCODE:
-            dataappend(v)
-            m, v = start
-    return data
+    # To represent a big charset, first a bitmap of all characters in the
+    # set is constructed. Then, this bitmap is sliced into chunks of 256
+    # characters, duplicate chunks are eliminated, and each chunk is
+    # given a number. In the compiled expression, the charset is
+    # represented by a 32-bit word sequence, consisting of one word for
+    # the number of different chunks, a sequence of 256 bytes (64 words)
+    # of chunk numbers indexed by their original chunk position, and a
+    # sequence of 256-bit chunks (8 words each).
 
-# To represent a big charset, first a bitmap of all characters in the
-# set is constructed. Then, this bitmap is sliced into chunks of 256
-# characters, duplicate chunks are eliminated, and each chunk is
-# given a number. In the compiled expression, the charset is
-# represented by a 16-bit word sequence, consisting of one word for
-# the number of different chunks, a sequence of 256 bytes (128 words)
-# of chunk numbers indexed by their original chunk position, and a
-# sequence of chunks (16 words each).
+    # Compression is normally good: in a typical charset, large ranges of
+    # Unicode will be either completely excluded (e.g. if only cyrillic
+    # letters are to be matched), or completely included (e.g. if large
+    # subranges of Kanji match). These ranges will be represented by
+    # chunks of all one-bits or all zero-bits.
 
-# Compression is normally good: in a typical charset, large ranges of
-# Unicode will be either completely excluded (e.g. if only cyrillic
-# letters are to be matched), or completely included (e.g. if large
-# subranges of Kanji match). These ranges will be represented by
-# chunks of all one-bits or all zero-bits.
+    # Matching can be also done efficiently: the more significant byte of
+    # the Unicode character is an index into the chunk number, and the
+    # less significant byte is a bit index in the chunk (just like the
+    # CHARSET matching).
 
-# Matching can be also done efficiently: the more significant byte of
-# the Unicode character is an index into the chunk number, and the
-# less significant byte is a bit index in the chunk (just like the
-# CHARSET matching).
-
-# In UCS-4 mode, the BIGCHARSET opcode still supports only subsets
-# of the basic multilingual plane; an efficient representation
-# for all of UTF-16 has not yet been developed. This means,
-# in particular, that negated charsets cannot be represented as
-# bigcharsets.
-
-def _optimize_unicode(charset, fixup):
-    try:
-        import array
-    except ImportError:
-        return charset
-    charmap = [0]*65536
-    negate = 0
-    try:
-        for op, av in charset:
-            if op is NEGATE:
-                negate = 1
-            elif op is LITERAL:
-                charmap[fixup(av)] = 1
-            elif op is RANGE:
-                for i in range(fixup(av[0]), fixup(av[1])+1):
-                    charmap[i] = 1
-            elif op is CATEGORY:
-                # XXX: could expand category
-                return charset # cannot compress
-    except IndexError:
-        # non-BMP characters; XXX now they should work
-        return charset
-    if negate:
-        if sys.maxunicode != 65535:
-            # XXX: negation does not work with big charsets
-            # XXX2: now they should work, but removing this will make the
-            # charmap 17 times bigger
-            return charset
-        for i in range(65536):
-            charmap[i] = not charmap[i]
+    charmap = bytes(charmap) # should be hashable
     comps = {}
-    mapping = [0]*256
+    mapping = bytearray(256)
     block = 0
-    data = []
-    for i in range(256):
-        chunk = tuple(charmap[i*256:(i+1)*256])
-        new = comps.setdefault(chunk, block)
-        mapping[i] = new
-        if new == block:
-            block = block + 1
-            data = data + _mk_bitmap(chunk)
-    header = [block]
-    if _sre.CODESIZE == 2:
-        code = 'H'
-    else:
-        code = 'I'
-    # Convert block indices to byte array of 256 bytes
-    mapping = array.array('b', mapping).tobytes()
-    # Convert byte array to word array
-    mapping = array.array(code, mapping)
-    assert mapping.itemsize == _sre.CODESIZE
-    assert len(mapping) * mapping.itemsize == 256
-    header = header + mapping.tolist()
-    data[0:0] = header
-    return [(BIGCHARSET, data)]
+    data = bytearray()
+    for i in range(0, 65536, 256):
+        chunk = charmap[i: i + 256]
+        if chunk in comps:
+            mapping[i // 256] = comps[chunk]
+        else:
+            mapping[i // 256] = comps[chunk] = block
+            block += 1
+            data += chunk
+    data = _mk_bitmap(data)
+    data[0:0] = [block] + _bytes_to_codes(mapping)
+    out.append((BIGCHARSET, data))
+    out += tail
+    return out
+
+_CODEBITS = _sre.CODESIZE * 8
+_BITS_TRANS = b'0' + b'1' * 255
+def _mk_bitmap(bits, _CODEBITS=_CODEBITS, _int=int):
+    s = bits.translate(_BITS_TRANS)[::-1]
+    return [_int(s[i - _CODEBITS: i], 2)
+            for i in range(len(s), 0, -_CODEBITS)]
+
+def _bytes_to_codes(b):
+    # Convert block indices to word array
+    import array
+    a = array.array('I', b)
+    assert a.itemsize == _sre.CODESIZE
+    assert len(a) * a.itemsize == len(b)
+    return a.tolist()
 
 def _simple(av):
     # check if av is a "simple" operator
     lo, hi = av[2].getwidth()
     return lo == hi == 1 and av[2][0][0] != SUBPATTERN
 
+def _generate_overlap_table(prefix):
+    """
+    Generate an overlap table for the following prefix.
+    An overlap table is a table of the same size as the prefix which
+    informs about the potential self-overlap for each index in the prefix:
+    - if overlap[i] == 0, prefix[i:] can't overlap prefix[0:...]
+    - if overlap[i] == k with 0 < k <= i, prefix[i-k+1:i+1] overlaps with
+      prefix[0:k]
+    """
+    table = [0] * len(prefix)
+    for i in range(1, len(prefix)):
+        idx = table[i - 1]
+        while prefix[i] != prefix[idx]:
+            if idx == 0:
+                table[i] = 0
+                break
+            idx = table[idx - 1]
+        else:
+            table[i] = idx + 1
+    return table
+
 def _compile_info(code, pattern, flags):
     # internal: compile an info block.  in the current version,
     # this contains min/max pattern width, and an optional literal
@@ -449,12 +434,7 @@
         emit(prefix_skip) # skip
         code.extend(prefix)
         # generate overlap table
-        table = [-1] + ([0]*len(prefix))
-        for i in range(len(prefix)):
-            table[i+1] = table[i]+1
-            while table[i+1] > 0 and prefix[i] != prefix[table[i+1]-1]:
-                table[i+1] = table[table[i+1]-1]+1
-        code.extend(table[1:]) # don't store first entry
+        code.extend(_generate_overlap_table(prefix))
     elif charset:
         _compile_charset(charset, flags, code)
     code[skip] = len(code) - skip
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
index f26229f..6583ef6 100644
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -769,35 +769,33 @@
     # group references
     s = Tokenizer(source)
     sget = s.get
-    p = []
-    a = p.append
-    def literal(literal, p=p, pappend=a):
-        if p and p[-1][0] is LITERAL:
-            p[-1] = LITERAL, p[-1][1] + literal
-        else:
-            pappend((LITERAL, literal))
-    sep = source[:0]
-    if isinstance(sep, str):
-        makechar = chr
-    else:
-        makechar = chr
-    while 1:
+    groups = []
+    literals = []
+    literal = []
+    lappend = literal.append
+    def addgroup(index):
+        if literal:
+            literals.append(''.join(literal))
+            del literal[:]
+        groups.append((len(literals), index))
+        literals.append(None)
+    while True:
         this = sget()
         if this is None:
             break # end of replacement string
-        if this and this[0] == "\\":
+        if this[0] == "\\":
             # group
-            c = this[1:2]
+            c = this[1]
             if c == "g":
                 name = ""
                 if s.match("<"):
-                    while 1:
+                    while True:
                         char = sget()
                         if char is None:
                             raise error("unterminated group name")
                         if char == ">":
                             break
-                        name = name + char
+                        name += char
                 if not name:
                     raise error("missing group name")
                 try:
@@ -811,50 +809,38 @@
                         index = pattern.groupindex[name]
                     except KeyError:
                         raise IndexError("unknown group name")
-                a((MARK, index))
+                addgroup(index)
             elif c == "0":
                 if s.next in OCTDIGITS:
-                    this = this + sget()
+                    this += sget()
                     if s.next in OCTDIGITS:
-                        this = this + sget()
-                literal(makechar(int(this[1:], 8) & 0xff))
+                        this += sget()
+                lappend(chr(int(this[1:], 8) & 0xff))
             elif c in DIGITS:
                 isoctal = False
                 if s.next in DIGITS:
-                    this = this + sget()
+                    this += sget()
                     if (c in OCTDIGITS and this[2] in OCTDIGITS and
                         s.next in OCTDIGITS):
-                        this = this + sget()
+                        this += sget()
                         isoctal = True
-                        literal(makechar(int(this[1:], 8) & 0xff))
+                        lappend(chr(int(this[1:], 8) & 0xff))
                 if not isoctal:
-                    a((MARK, int(this[1:])))
+                    addgroup(int(this[1:]))
             else:
                 try:
-                    this = makechar(ESCAPES[this][1])
+                    this = chr(ESCAPES[this][1])
                 except KeyError:
                     pass
-                literal(this)
+                lappend(this)
         else:
-            literal(this)
-    # convert template to groups and literals lists
-    i = 0
-    groups = []
-    groupsappend = groups.append
-    literals = [None] * len(p)
-    if isinstance(source, str):
-        encode = lambda x: x
-    else:
+            lappend(this)
+    if literal:
+        literals.append(''.join(literal))
+    if not isinstance(source, str):
         # The tokenizer implicitly decodes bytes objects as latin-1, we must
         # therefore re-encode the final representation.
-        encode = lambda x: x.encode('latin-1')
-    for c, s in p:
-        if c is MARK:
-            groupsappend((i, s))
-            # literal[i] is already None
-        else:
-            literals[i] = encode(s)
-        i = i + 1
+        literals = [None if s is None else s.encode('latin-1') for s in literals]
     return groups, literals
 
 def expand_template(template, match):
diff --git a/Lib/ssl.py b/Lib/ssl.py
index d17f8de..36af637 100644
--- a/Lib/ssl.py
+++ b/Lib/ssl.py
@@ -166,31 +166,59 @@
     pass
 
 
-def _dnsname_to_pat(dn, max_wildcards=1):
+def _dnsname_match(dn, hostname, max_wildcards=1):
+    """Matching according to RFC 6125, section 6.4.3
+
+    http://tools.ietf.org/html/rfc6125#section-6.4.3
+    """
     pats = []
-    for frag in dn.split(r'.'):
-        if frag.count('*') > max_wildcards:
-            # Issue #17980: avoid denials of service by refusing more
-            # than one wildcard per fragment.  A survey of established
-            # policy among SSL implementations showed it to be a
-            # reasonable choice.
-            raise CertificateError(
-                "too many wildcards in certificate DNS name: " + repr(dn))
-        if frag == '*':
-            # When '*' is a fragment by itself, it matches a non-empty dotless
-            # fragment.
-            pats.append('[^.]+')
-        else:
-            # Otherwise, '*' matches any dotless fragment.
-            frag = re.escape(frag)
-            pats.append(frag.replace(r'\*', '[^.]*'))
-    return re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE)
+    if not dn:
+        return False
+
+    leftmost, *remainder = dn.split(r'.')
+
+    wildcards = leftmost.count('*')
+    if wildcards > max_wildcards:
+        # Issue #17980: avoid denials of service by refusing more
+        # than one wildcard per fragment.  A survery of established
+        # policy among SSL implementations showed it to be a
+        # reasonable choice.
+        raise CertificateError(
+            "too many wildcards in certificate DNS name: " + repr(dn))
+
+    # speed up common case w/o wildcards
+    if not wildcards:
+        return dn.lower() == hostname.lower()
+
+    # RFC 6125, section 6.4.3, subitem 1.
+    # The client SHOULD NOT attempt to match a presented identifier in which
+    # the wildcard character comprises a label other than the left-most label.
+    if leftmost == '*':
+        # When '*' is a fragment by itself, it matches a non-empty dotless
+        # fragment.
+        pats.append('[^.]+')
+    elif leftmost.startswith('xn--') or hostname.startswith('xn--'):
+        # RFC 6125, section 6.4.3, subitem 3.
+        # The client SHOULD NOT attempt to match a presented identifier
+        # where the wildcard character is embedded within an A-label or
+        # U-label of an internationalized domain name.
+        pats.append(re.escape(leftmost))
+    else:
+        # Otherwise, '*' matches any dotless string, e.g. www*
+        pats.append(re.escape(leftmost).replace(r'\*', '[^.]*'))
+
+    # add the remaining fragments, ignore any wildcards
+    for frag in remainder:
+        pats.append(re.escape(frag))
+
+    pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE)
+    return pat.match(hostname)
 
 
 def match_hostname(cert, hostname):
     """Verify that *cert* (in decoded format as returned by
-    SSLSocket.getpeercert()) matches the *hostname*.  RFC 2818 rules
-    are mostly followed, but IP addresses are not accepted for *hostname*.
+    SSLSocket.getpeercert()) matches the *hostname*.  RFC 2818 and RFC 6125
+    rules are followed, but IP addresses are not accepted for *hostname*.
 
     CertificateError is raised on failure. On success, the function
     returns nothing.
@@ -201,7 +229,7 @@
     san = cert.get('subjectAltName', ())
     for key, value in san:
         if key == 'DNS':
-            if _dnsname_to_pat(value).match(hostname):
+            if _dnsname_match(value, hostname):
                 return
             dnsnames.append(value)
     if not dnsnames:
@@ -212,7 +240,7 @@
                 # XXX according to RFC 2818, the most specific Common Name
                 # must be used.
                 if key == 'commonName':
-                    if _dnsname_to_pat(value).match(hostname):
+                    if _dnsname_match(value, hostname):
                         return
                     dnsnames.append(value)
     if len(dnsnames) > 1:
diff --git a/Lib/statistics.py b/Lib/statistics.py
new file mode 100644
index 0000000..a67a6d1
--- /dev/null
+++ b/Lib/statistics.py
@@ -0,0 +1,610 @@
+##  Module statistics.py
+##
+##  Copyright (c) 2013 Steven D'Aprano <steve+python@pearwood.info>.
+##
+##  Licensed under the Apache License, Version 2.0 (the "License");
+##  you may not use this file except in compliance with the License.
+##  You may obtain a copy of the License at
+##
+##  http://www.apache.org/licenses/LICENSE-2.0
+##
+##  Unless required by applicable law or agreed to in writing, software
+##  distributed under the License is distributed on an "AS IS" BASIS,
+##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+##  See the License for the specific language governing permissions and
+##  limitations under the License.
+
+
+"""
+Basic statistics module.
+
+This module provides functions for calculating statistics of data, including
+averages, variance, and standard deviation.
+
+Calculating averages
+--------------------
+
+==================  =============================================
+Function            Description
+==================  =============================================
+mean                Arithmetic mean (average) of data.
+median              Median (middle value) of data.
+median_low          Low median of data.
+median_high         High median of data.
+median_grouped      Median, or 50th percentile, of grouped data.
+mode                Mode (most common value) of data.
+==================  =============================================
+
+Calculate the arithmetic mean ("the average") of data:
+
+>>> mean([-1.0, 2.5, 3.25, 5.75])
+2.625
+
+
+Calculate the standard median of discrete data:
+
+>>> median([2, 3, 4, 5])
+3.5
+
+
+Calculate the median, or 50th percentile, of data grouped into class intervals
+centred on the data values provided. E.g. if your data points are rounded to
+the nearest whole number:
+
+>>> median_grouped([2, 2, 3, 3, 3, 4])  #doctest: +ELLIPSIS
+2.8333333333...
+
+This should be interpreted in this way: you have two data points in the class
+interval 1.5-2.5, three data points in the class interval 2.5-3.5, and one in
+the class interval 3.5-4.5. The median of these data points is 2.8333...
+
+
+Calculating variability or spread
+---------------------------------
+
+==================  =============================================
+Function            Description
+==================  =============================================
+pvariance           Population variance of data.
+variance            Sample variance of data.
+pstdev              Population standard deviation of data.
+stdev               Sample standard deviation of data.
+==================  =============================================
+
+Calculate the standard deviation of sample data:
+
+>>> stdev([2.5, 3.25, 5.5, 11.25, 11.75])  #doctest: +ELLIPSIS
+4.38961843444...
+
+If you have previously calculated the mean, you can pass it as the optional
+second argument to the four "spread" functions to avoid recalculating it:
+
+>>> data = [1, 2, 2, 4, 4, 4, 5, 6]
+>>> mu = mean(data)
+>>> pvariance(data, mu)
+2.5
+
+
+Exceptions
+----------
+
+A single exception is defined: StatisticsError is a subclass of ValueError.
+
+"""
+
+__all__ = [ 'StatisticsError',
+            'pstdev', 'pvariance', 'stdev', 'variance',
+            'median',  'median_low', 'median_high', 'median_grouped',
+            'mean', 'mode',
+          ]
+
+
+import collections
+import math
+
+from fractions import Fraction
+from decimal import Decimal
+
+
+# === Exceptions ===
+
+class StatisticsError(ValueError):
+    pass
+
+
+# === Private utilities ===
+
+def _sum(data, start=0):
+    """_sum(data [, start]) -> value
+
+    Return a high-precision sum of the given numeric data. If optional
+    argument ``start`` is given, it is added to the total. If ``data`` is
+    empty, ``start`` (defaulting to 0) is returned.
+
+
+    Examples
+    --------
+
+    >>> _sum([3, 2.25, 4.5, -0.5, 1.0], 0.75)
+    11.0
+
+    Some sources of round-off error will be avoided:
+
+    >>> _sum([1e50, 1, -1e50] * 1000)  # Built-in sum returns zero.
+    1000.0
+
+    Fractions and Decimals are also supported:
+
+    >>> from fractions import Fraction as F
+    >>> _sum([F(2, 3), F(7, 5), F(1, 4), F(5, 6)])
+    Fraction(63, 20)
+
+    >>> from decimal import Decimal as D
+    >>> data = [D("0.1375"), D("0.2108"), D("0.3061"), D("0.0419")]
+    >>> _sum(data)
+    Decimal('0.6963')
+
+    """
+    n, d = _exact_ratio(start)
+    T = type(start)
+    partials = {d: n}  # map {denominator: sum of numerators}
+    # Micro-optimizations.
+    coerce_types = _coerce_types
+    exact_ratio = _exact_ratio
+    partials_get = partials.get
+    # Add numerators for each denominator, and track the "current" type.
+    for x in data:
+        T = _coerce_types(T, type(x))
+        n, d = exact_ratio(x)
+        partials[d] = partials_get(d, 0) + n
+    if None in partials:
+        assert issubclass(T, (float, Decimal))
+        assert not math.isfinite(partials[None])
+        return T(partials[None])
+    total = Fraction()
+    for d, n in sorted(partials.items()):
+        total += Fraction(n, d)
+    if issubclass(T, int):
+        assert total.denominator == 1
+        return T(total.numerator)
+    if issubclass(T, Decimal):
+        return T(total.numerator)/total.denominator
+    return T(total)
+
+
+def _exact_ratio(x):
+    """Convert Real number x exactly to (numerator, denominator) pair.
+
+    >>> _exact_ratio(0.25)
+    (1, 4)
+
+    x is expected to be an int, Fraction, Decimal or float.
+    """
+    try:
+        try:
+            # int, Fraction
+            return (x.numerator, x.denominator)
+        except AttributeError:
+            # float
+            try:
+                return x.as_integer_ratio()
+            except AttributeError:
+                # Decimal
+                try:
+                    return _decimal_to_ratio(x)
+                except AttributeError:
+                    msg = "can't convert type '{}' to numerator/denominator"
+                    raise TypeError(msg.format(type(x).__name__)) from None
+    except (OverflowError, ValueError):
+        # INF or NAN
+        if __debug__:
+            # Decimal signalling NANs cannot be converted to float :-(
+            if isinstance(x, Decimal):
+                assert not x.is_finite()
+            else:
+                assert not math.isfinite(x)
+        return (x, None)
+
+
+# FIXME This is faster than Fraction.from_decimal, but still too slow.
+def _decimal_to_ratio(d):
+    """Convert Decimal d to exact integer ratio (numerator, denominator).
+
+    >>> from decimal import Decimal
+    >>> _decimal_to_ratio(Decimal("2.6"))
+    (26, 10)
+
+    """
+    sign, digits, exp = d.as_tuple()
+    if exp in ('F', 'n', 'N'):  # INF, NAN, sNAN
+        assert not d.is_finite()
+        raise ValueError
+    num = 0
+    for digit in digits:
+        num = num*10 + digit
+    if sign:
+        num = -num
+    den = 10**-exp
+    return (num, den)
+
+
+def _coerce_types(T1, T2):
+    """Coerce types T1 and T2 to a common type.
+
+    >>> _coerce_types(int, float)
+    <class 'float'>
+
+    Coercion is performed according to this table, where "N/A" means
+    that a TypeError exception is raised.
+
+    +----------+-----------+-----------+-----------+----------+
+    |          | int       | Fraction  | Decimal   | float    |
+    +----------+-----------+-----------+-----------+----------+
+    | int      | int       | Fraction  | Decimal   | float    |
+    | Fraction | Fraction  | Fraction  | N/A       | float    |
+    | Decimal  | Decimal   | N/A       | Decimal   | float    |
+    | float    | float     | float     | float     | float    |
+    +----------+-----------+-----------+-----------+----------+
+
+    Subclasses trump their parent class; two subclasses of the same
+    base class will be coerced to the second of the two.
+
+    """
+    # Get the common/fast cases out of the way first.
+    if T1 is T2: return T1
+    if T1 is int: return T2
+    if T2 is int: return T1
+    # Subclasses trump their parent class.
+    if issubclass(T2, T1): return T2
+    if issubclass(T1, T2): return T1
+    # Floats trump everything else.
+    if issubclass(T2, float): return T2
+    if issubclass(T1, float): return T1
+    # Subclasses of the same base class give priority to the second.
+    if T1.__base__ is T2.__base__: return T2
+    # Otherwise, just give up.
+    raise TypeError('cannot coerce types %r and %r' % (T1, T2))
+
+
+def _counts(data):
+    # Generate a table of sorted (value, frequency) pairs.
+    if data is None:
+        raise TypeError('None is not iterable')
+    table = collections.Counter(data).most_common()
+    if not table:
+        return table
+    # Extract the values with the highest frequency.
+    maxfreq = table[0][1]
+    for i in range(1, len(table)):
+        if table[i][1] != maxfreq:
+            table = table[:i]
+            break
+    return table
+
+
+# === Measures of central tendency (averages) ===
+
+def mean(data):
+    """Return the sample arithmetic mean of data.
+
+    >>> mean([1, 2, 3, 4, 4])
+    2.8
+
+    >>> from fractions import Fraction as F
+    >>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])
+    Fraction(13, 21)
+
+    >>> from decimal import Decimal as D
+    >>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])
+    Decimal('0.5625')
+
+    If ``data`` is empty, StatisticsError will be raised.
+    """
+    if iter(data) is data:
+        data = list(data)
+    n = len(data)
+    if n < 1:
+        raise StatisticsError('mean requires at least one data point')
+    return _sum(data)/n
+
+
+# FIXME: investigate ways to calculate medians without sorting? Quickselect?
+def median(data):
+    """Return the median (middle value) of numeric data.
+
+    When the number of data points is odd, return the middle data point.
+    When the number of data points is even, the median is interpolated by
+    taking the average of the two middle values:
+
+    >>> median([1, 3, 5])
+    3
+    >>> median([1, 3, 5, 7])
+    4.0
+
+    """
+    data = sorted(data)
+    n = len(data)
+    if n == 0:
+        raise StatisticsError("no median for empty data")
+    if n%2 == 1:
+        return data[n//2]
+    else:
+        i = n//2
+        return (data[i - 1] + data[i])/2
+
+
+def median_low(data):
+    """Return the low median of numeric data.
+
+    When the number of data points is odd, the middle value is returned.
+    When it is even, the smaller of the two middle values is returned.
+
+    >>> median_low([1, 3, 5])
+    3
+    >>> median_low([1, 3, 5, 7])
+    3
+
+    """
+    data = sorted(data)
+    n = len(data)
+    if n == 0:
+        raise StatisticsError("no median for empty data")
+    if n%2 == 1:
+        return data[n//2]
+    else:
+        return data[n//2 - 1]
+
+
+def median_high(data):
+    """Return the high median of data.
+
+    When the number of data points is odd, the middle value is returned.
+    When it is even, the larger of the two middle values is returned.
+
+    >>> median_high([1, 3, 5])
+    3
+    >>> median_high([1, 3, 5, 7])
+    5
+
+    """
+    data = sorted(data)
+    n = len(data)
+    if n == 0:
+        raise StatisticsError("no median for empty data")
+    return data[n//2]
+
+
+def median_grouped(data, interval=1):
+    """"Return the 50th percentile (median) of grouped continuous data.
+
+    >>> median_grouped([1, 2, 2, 3, 4, 4, 4, 4, 4, 5])
+    3.7
+    >>> median_grouped([52, 52, 53, 54])
+    52.5
+
+    This calculates the median as the 50th percentile, and should be
+    used when your data is continuous and grouped. In the above example,
+    the values 1, 2, 3, etc. actually represent the midpoint of classes
+    0.5-1.5, 1.5-2.5, 2.5-3.5, etc. The middle value falls somewhere in
+    class 3.5-4.5, and interpolation is used to estimate it.
+
+    Optional argument ``interval`` represents the class interval, and
+    defaults to 1. Changing the class interval naturally will change the
+    interpolated 50th percentile value:
+
+    >>> median_grouped([1, 3, 3, 5, 7], interval=1)
+    3.25
+    >>> median_grouped([1, 3, 3, 5, 7], interval=2)
+    3.5
+
+    This function does not check whether the data points are at least
+    ``interval`` apart.
+    """
+    data = sorted(data)
+    n = len(data)
+    if n == 0:
+        raise StatisticsError("no median for empty data")
+    elif n == 1:
+        return data[0]
+    # Find the value at the midpoint. Remember this corresponds to the
+    # centre of the class interval.
+    x = data[n//2]
+    for obj in (x, interval):
+        if isinstance(obj, (str, bytes)):
+            raise TypeError('expected number but got %r' % obj)
+    try:
+        L = x - interval/2  # The lower limit of the median interval.
+    except TypeError:
+        # Mixed type. For now we just coerce to float.
+        L = float(x) - float(interval)/2
+    cf = data.index(x)  # Number of values below the median interval.
+    # FIXME The following line could be more efficient for big lists.
+    f = data.count(x)  # Number of data points in the median interval.
+    return L + interval*(n/2 - cf)/f
+
+
+def mode(data):
+    """Return the most common data point from discrete or nominal data.
+
+    ``mode`` assumes discrete data, and returns a single value. This is the
+    standard treatment of the mode as commonly taught in schools:
+
+    >>> mode([1, 1, 2, 3, 3, 3, 3, 4])
+    3
+
+    This also works with nominal (non-numeric) data:
+
+    >>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
+    'red'
+
+    If there is not exactly one most common value, ``mode`` will raise
+    StatisticsError.
+    """
+    # Generate a table of sorted (value, frequency) pairs.
+    table = _counts(data)
+    if len(table) == 1:
+        return table[0][0]
+    elif table:
+        raise StatisticsError(
+                'no unique mode; found %d equally common values' % len(table)
+                )
+    else:
+        raise StatisticsError('no mode for empty data')
+
+
+# === Measures of spread ===
+
+# See http://mathworld.wolfram.com/Variance.html
+#     http://mathworld.wolfram.com/SampleVariance.html
+#     http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
+#
+# Under no circumstances use the so-called "computational formula for
+# variance", as that is only suitable for hand calculations with a small
+# amount of low-precision data. It has terrible numeric properties.
+#
+# See a comparison of three computational methods here:
+# http://www.johndcook.com/blog/2008/09/26/comparing-three-methods-of-computing-standard-deviation/
+
+def _ss(data, c=None):
+    """Return sum of square deviations of sequence data.
+
+    If ``c`` is None, the mean is calculated in one pass, and the deviations
+    from the mean are calculated in a second pass. Otherwise, deviations are
+    calculated from ``c`` as given. Use the second case with care, as it can
+    lead to garbage results.
+    """
+    if c is None:
+        c = mean(data)
+    ss = _sum((x-c)**2 for x in data)
+    # The following sum should mathematically equal zero, but due to rounding
+    # error may not.
+    ss -= _sum((x-c) for x in data)**2/len(data)
+    assert not ss < 0, 'negative sum of square deviations: %f' % ss
+    return ss
+
+
+def variance(data, xbar=None):
+    """Return the sample variance of data.
+
+    data should be an iterable of Real-valued numbers, with at least two
+    values. The optional argument xbar, if given, should be the mean of
+    the data. If it is missing or None, the mean is automatically calculated.
+
+    Use this function when your data is a sample from a population. To
+    calculate the variance from the entire population, see ``pvariance``.
+
+    Examples:
+
+    >>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
+    >>> variance(data)
+    1.3720238095238095
+
+    If you have already calculated the mean of your data, you can pass it as
+    the optional second argument ``xbar`` to avoid recalculating it:
+
+    >>> m = mean(data)
+    >>> variance(data, m)
+    1.3720238095238095
+
+    This function does not check that ``xbar`` is actually the mean of
+    ``data``. Giving arbitrary values for ``xbar`` may lead to invalid or
+    impossible results.
+
+    Decimals and Fractions are supported:
+
+    >>> from decimal import Decimal as D
+    >>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
+    Decimal('31.01875')
+
+    >>> from fractions import Fraction as F
+    >>> variance([F(1, 6), F(1, 2), F(5, 3)])
+    Fraction(67, 108)
+
+    """
+    if iter(data) is data:
+        data = list(data)
+    n = len(data)
+    if n < 2:
+        raise StatisticsError('variance requires at least two data points')
+    ss = _ss(data, xbar)
+    return ss/(n-1)
+
+
+def pvariance(data, mu=None):
+    """Return the population variance of ``data``.
+
+    data should be an iterable of Real-valued numbers, with at least one
+    value. The optional argument mu, if given, should be the mean of
+    the data. If it is missing or None, the mean is automatically calculated.
+
+    Use this function to calculate the variance from the entire population.
+    To estimate the variance from a sample, the ``variance`` function is
+    usually a better choice.
+
+    Examples:
+
+    >>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25]
+    >>> pvariance(data)
+    1.25
+
+    If you have already calculated the mean of the data, you can pass it as
+    the optional second argument to avoid recalculating it:
+
+    >>> mu = mean(data)
+    >>> pvariance(data, mu)
+    1.25
+
+    This function does not check that ``mu`` is actually the mean of ``data``.
+    Giving arbitrary values for ``mu`` may lead to invalid or impossible
+    results.
+
+    Decimals and Fractions are supported:
+
+    >>> from decimal import Decimal as D
+    >>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
+    Decimal('24.815')
+
+    >>> from fractions import Fraction as F
+    >>> pvariance([F(1, 4), F(5, 4), F(1, 2)])
+    Fraction(13, 72)
+
+    """
+    if iter(data) is data:
+        data = list(data)
+    n = len(data)
+    if n < 1:
+        raise StatisticsError('pvariance requires at least one data point')
+    ss = _ss(data, mu)
+    return ss/n
+
+
+def stdev(data, xbar=None):
+    """Return the square root of the sample variance.
+
+    See ``variance`` for arguments and other details.
+
+    >>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
+    1.0810874155219827
+
+    """
+    var = variance(data, xbar)
+    try:
+        return var.sqrt()
+    except AttributeError:
+        return math.sqrt(var)
+
+
+def pstdev(data, mu=None):
+    """Return the square root of the population variance.
+
+    See ``pvariance`` for arguments and other details.
+
+    >>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
+    0.986893273527251
+
+    """
+    var = pvariance(data, mu)
+    try:
+        return var.sqrt()
+    except AttributeError:
+        return math.sqrt(var)
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 4ce3c92..88355ad 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -145,11 +145,13 @@
 getstatusoutput(cmd):
     Return (status, output) of executing cmd in a shell.
 
-    Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
-    (status, output).  cmd is actually run as '{ cmd ; } 2>&1', so that the
-    returned output will contain output or error messages. A trailing newline
-    is stripped from the output. The exit status for the command can be
-    interpreted according to the rules for the C function wait().  Example:
+    Execute the string 'cmd' in a shell with 'check_output' and
+    return a 2-tuple (status, output). Universal newlines mode is used,
+    meaning that the result with be decoded to a string.
+
+    A trailing newline is stripped from the output.
+    The exit status for the command can be interpreted
+    according to the rules for the function 'wait'.  Example:
 
     >>> subprocess.getstatusoutput('ls /bin/ls')
     (0, '/bin/ls')
@@ -402,15 +404,23 @@
         hStdError = None
         wShowWindow = 0
 else:
-    import select
-    _has_poll = hasattr(select, 'poll')
     import _posixsubprocess
+    import select
+    import selectors
 
     # When select or poll has indicated that the file is writable,
     # we can write up to _PIPE_BUF bytes without risk of blocking.
     # POSIX defines PIPE_BUF as >= 512.
     _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
 
+    # poll/select have the advantage of not requiring any extra file
+    # descriptor, contrarily to epoll/kqueue (also, they require a single
+    # syscall).
+    if hasattr(selectors, 'PollSelector'):
+        _PopenSelector = selectors.PollSelector
+    else:
+        _PopenSelector = selectors.SelectSelector
+
 
 __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
            "getoutput", "check_output", "CalledProcessError", "DEVNULL"]
@@ -506,6 +516,8 @@
     for flag, opt in flag_opt_map.items():
         v = getattr(sys.flags, flag)
         if v > 0:
+            if flag == 'hash_randomization':
+                v = 1 # Handle specification of an exact seed
             args.append('-' + opt * v)
     for opt in sys.warnoptions:
         args.append('-W' + opt)
@@ -679,16 +691,17 @@
 
 # Various tools for executing commands and looking at their output and status.
 #
-# NB This only works (and is only relevant) for POSIX.
 
 def getstatusoutput(cmd):
-    """Return (status, output) of executing cmd in a shell.
+    """    Return (status, output) of executing cmd in a shell.
 
-    Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
-    (status, output).  cmd is actually run as '{ cmd ; } 2>&1', so that the
-    returned output will contain output or error messages.  A trailing newline
-    is stripped from the output.  The exit status for the command can be
-    interpreted according to the rules for the C function wait().  Example:
+    Execute the string 'cmd' in a shell with 'check_output' and
+    return a 2-tuple (status, output). Universal newlines mode is used,
+    meaning that the result with be decoded to a string.
+
+    A trailing newline is stripped from the output.
+    The exit status for the command can be interpreted
+    according to the rules for the function 'wait'. Example:
 
     >>> import subprocess
     >>> subprocess.getstatusoutput('ls /bin/ls')
@@ -698,21 +711,15 @@
     >>> subprocess.getstatusoutput('/bin/junk')
     (256, 'sh: /bin/junk: not found')
     """
-    with os.popen('{ ' + cmd + '; } 2>&1', 'r') as pipe:
-        try:
-            text = pipe.read()
-            sts = pipe.close()
-        except:
-            process = pipe._proc
-            process.kill()
-            process.wait()
-            raise
-    if sts is None:
-        sts = 0
-    if text[-1:] == '\n':
-        text = text[:-1]
-    return sts, text
-
+    try:
+        data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT)
+        status = 0
+    except CalledProcessError as ex:
+        data = ex.output
+        status = ex.returncode
+    if data[-1:] == '\n':
+        data = data[:-1]
+    return status, data
 
 def getoutput(cmd):
     """Return output (stdout or stderr) of executing cmd in a shell.
@@ -1530,12 +1537,65 @@
                 if not input:
                     self.stdin.close()
 
-            if _has_poll:
-                stdout, stderr = self._communicate_with_poll(input, endtime,
-                                                             orig_timeout)
-            else:
-                stdout, stderr = self._communicate_with_select(input, endtime,
-                                                               orig_timeout)
+            stdout = None
+            stderr = None
+
+            # Only create this mapping if we haven't already.
+            if not self._communication_started:
+                self._fileobj2output = {}
+                if self.stdout:
+                    self._fileobj2output[self.stdout] = []
+                if self.stderr:
+                    self._fileobj2output[self.stderr] = []
+
+            if self.stdout:
+                stdout = self._fileobj2output[self.stdout]
+            if self.stderr:
+                stderr = self._fileobj2output[self.stderr]
+
+            self._save_input(input)
+
+            with _PopenSelector() as selector:
+                if self.stdin and input:
+                    selector.register(self.stdin, selectors.EVENT_WRITE)
+                if self.stdout:
+                    selector.register(self.stdout, selectors.EVENT_READ)
+                if self.stderr:
+                    selector.register(self.stderr, selectors.EVENT_READ)
+
+                while selector.get_map():
+                    timeout = self._remaining_time(endtime)
+                    if timeout is not None and timeout < 0:
+                        raise TimeoutExpired(self.args, orig_timeout)
+
+                    ready = selector.select(timeout)
+                    self._check_timeout(endtime, orig_timeout)
+
+                    # XXX Rewrite these to use non-blocking I/O on the file
+                    # objects; they are no longer using C stdio!
+
+                    for key, events in ready:
+                        if key.fileobj is self.stdin:
+                            chunk = self._input[self._input_offset :
+                                                self._input_offset + _PIPE_BUF]
+                            try:
+                                self._input_offset += os.write(key.fd, chunk)
+                            except OSError as e:
+                                if e.errno == errno.EPIPE:
+                                    selector.unregister(key.fileobj)
+                                    key.fileobj.close()
+                                else:
+                                    raise
+                            else:
+                                if self._input_offset >= len(self._input):
+                                    selector.unregister(key.fileobj)
+                                    key.fileobj.close()
+                        elif key.fileobj in (self.stdout, self.stderr):
+                            data = os.read(key.fd, 4096)
+                            if not data:
+                                selector.unregister(key.fileobj)
+                                key.fileobj.close()
+                            self._fileobj2output[key.fileobj].append(data)
 
             self.wait(timeout=self._remaining_time(endtime))
 
@@ -1569,167 +1629,6 @@
                     self._input = self._input.encode(self.stdin.encoding)
 
 
-        def _communicate_with_poll(self, input, endtime, orig_timeout):
-            stdout = None # Return
-            stderr = None # Return
-
-            if not self._communication_started:
-                self._fd2file = {}
-
-            poller = select.poll()
-            def register_and_append(file_obj, eventmask):
-                poller.register(file_obj.fileno(), eventmask)
-                self._fd2file[file_obj.fileno()] = file_obj
-
-            def close_unregister_and_remove(fd):
-                poller.unregister(fd)
-                self._fd2file[fd].close()
-                self._fd2file.pop(fd)
-
-            if self.stdin and input:
-                register_and_append(self.stdin, select.POLLOUT)
-
-            # Only create this mapping if we haven't already.
-            if not self._communication_started:
-                self._fd2output = {}
-                if self.stdout:
-                    self._fd2output[self.stdout.fileno()] = []
-                if self.stderr:
-                    self._fd2output[self.stderr.fileno()] = []
-
-            select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
-            if self.stdout:
-                register_and_append(self.stdout, select_POLLIN_POLLPRI)
-                stdout = self._fd2output[self.stdout.fileno()]
-            if self.stderr:
-                register_and_append(self.stderr, select_POLLIN_POLLPRI)
-                stderr = self._fd2output[self.stderr.fileno()]
-
-            self._save_input(input)
-
-            while self._fd2file:
-                timeout = self._remaining_time(endtime)
-                if timeout is not None and timeout < 0:
-                    raise TimeoutExpired(self.args, orig_timeout)
-                try:
-                    ready = poller.poll(timeout)
-                except OSError as e:
-                    if e.args[0] == errno.EINTR:
-                        continue
-                    raise
-                self._check_timeout(endtime, orig_timeout)
-
-                # XXX Rewrite these to use non-blocking I/O on the
-                # file objects; they are no longer using C stdio!
-
-                for fd, mode in ready:
-                    if mode & select.POLLOUT:
-                        chunk = self._input[self._input_offset :
-                                            self._input_offset + _PIPE_BUF]
-                        try:
-                            self._input_offset += os.write(fd, chunk)
-                        except OSError as e:
-                            if e.errno == errno.EPIPE:
-                                close_unregister_and_remove(fd)
-                            else:
-                                raise
-                        else:
-                            if self._input_offset >= len(self._input):
-                                close_unregister_and_remove(fd)
-                    elif mode & select_POLLIN_POLLPRI:
-                        data = os.read(fd, 4096)
-                        if not data:
-                            close_unregister_and_remove(fd)
-                        self._fd2output[fd].append(data)
-                    else:
-                        # Ignore hang up or errors.
-                        close_unregister_and_remove(fd)
-
-            return (stdout, stderr)
-
-
-        def _communicate_with_select(self, input, endtime, orig_timeout):
-            if not self._communication_started:
-                self._read_set = []
-                self._write_set = []
-                if self.stdin and input:
-                    self._write_set.append(self.stdin)
-                if self.stdout:
-                    self._read_set.append(self.stdout)
-                if self.stderr:
-                    self._read_set.append(self.stderr)
-
-            self._save_input(input)
-
-            stdout = None # Return
-            stderr = None # Return
-
-            if self.stdout:
-                if not self._communication_started:
-                    self._stdout_buff = []
-                stdout = self._stdout_buff
-            if self.stderr:
-                if not self._communication_started:
-                    self._stderr_buff = []
-                stderr = self._stderr_buff
-
-            while self._read_set or self._write_set:
-                timeout = self._remaining_time(endtime)
-                if timeout is not None and timeout < 0:
-                    raise TimeoutExpired(self.args, orig_timeout)
-                try:
-                    (rlist, wlist, xlist) = \
-                        select.select(self._read_set, self._write_set, [],
-                                      timeout)
-                except OSError as e:
-                    if e.args[0] == errno.EINTR:
-                        continue
-                    raise
-
-                # According to the docs, returning three empty lists indicates
-                # that the timeout expired.
-                if not (rlist or wlist or xlist):
-                    raise TimeoutExpired(self.args, orig_timeout)
-                # We also check what time it is ourselves for good measure.
-                self._check_timeout(endtime, orig_timeout)
-
-                # XXX Rewrite these to use non-blocking I/O on the
-                # file objects; they are no longer using C stdio!
-
-                if self.stdin in wlist:
-                    chunk = self._input[self._input_offset :
-                                        self._input_offset + _PIPE_BUF]
-                    try:
-                        bytes_written = os.write(self.stdin.fileno(), chunk)
-                    except OSError as e:
-                        if e.errno == errno.EPIPE:
-                            self.stdin.close()
-                            self._write_set.remove(self.stdin)
-                        else:
-                            raise
-                    else:
-                        self._input_offset += bytes_written
-                        if self._input_offset >= len(self._input):
-                            self.stdin.close()
-                            self._write_set.remove(self.stdin)
-
-                if self.stdout in rlist:
-                    data = os.read(self.stdout.fileno(), 1024)
-                    if not data:
-                        self.stdout.close()
-                        self._read_set.remove(self.stdout)
-                    stdout.append(data)
-
-                if self.stderr in rlist:
-                    data = os.read(self.stderr.fileno(), 1024)
-                    if not data:
-                        self.stderr.close()
-                        self._read_set.remove(self.stderr)
-                    stderr.append(data)
-
-            return (stdout, stderr)
-
-
         def send_signal(self, sig):
             """Send a signal to the process
             """
diff --git a/Lib/sunau.py b/Lib/sunau.py
index 5761390..1880a01 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -352,7 +352,7 @@
     def setsampwidth(self, sampwidth):
         if self._nframeswritten:
             raise Error('cannot change parameters after starting to write')
-        if sampwidth not in (1, 2, 4):
+        if sampwidth not in (1, 2, 3, 4):
             raise Error('bad sample width')
         self._sampwidth = sampwidth
 
@@ -465,6 +465,9 @@
             elif self._sampwidth == 2:
                 encoding = AUDIO_FILE_ENCODING_LINEAR_16
                 self._framesize = 2
+            elif self._sampwidth == 3:
+                encoding = AUDIO_FILE_ENCODING_LINEAR_24
+                self._framesize = 3
             elif self._sampwidth == 4:
                 encoding = AUDIO_FILE_ENCODING_LINEAR_32
                 self._framesize = 4
diff --git a/Lib/symtable.py b/Lib/symtable.py
index c0e32df..e23313b 100644
--- a/Lib/symtable.py
+++ b/Lib/symtable.py
@@ -10,10 +10,7 @@
 __all__ = ["symtable", "SymbolTable", "Class", "Function", "Symbol"]
 
 def symtable(code, filename, compile_type):
-    raw = _symtable.symtable(code, filename, compile_type)
-    for top in raw.values():
-        if top.name == 'top':
-            break
+    top = _symtable.symtable(code, filename, compile_type)
     return _newSymbolTable(top, filename)
 
 class SymbolTableFactory:
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index ee38a20..776b2f6 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -1,7 +1,6 @@
 """Access to Python's configuration information."""
 
 import os
-import re
 import sys
 from os.path import pardir, realpath
 
@@ -222,6 +221,7 @@
     """
     # Regexes needed for parsing Makefile (and similar syntaxes,
     # like old-style Setup files).
+    import re
     _variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)")
     _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)")
     _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}")
@@ -368,7 +368,7 @@
     # -- these paths are relative to the Python source, but when installed
     # the scripts are in another directory.
     if _PYTHON_BUILD:
-        vars['LDSHARED'] = vars['BLDSHARED']
+        vars['BLDSHARED'] = vars['LDSHARED']
 
     # There's a chicken-and-egg situation on OS X with regards to the
     # _sysconfigdata module after the changes introduced by #15298:
@@ -435,6 +435,7 @@
     """
     if vars is None:
         vars = {}
+    import re
     define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n")
     undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n")
 
@@ -658,6 +659,7 @@
         return "%s-%s.%s" % (osname, version, release)
     elif osname[:6] == "cygwin":
         osname = "cygwin"
+        import re
         rel_re = re.compile(r'[\d.]+')
         m = rel_re.match(release)
         if m:
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 7766e4a..94bd75d 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -140,30 +140,6 @@
 }
 
 #---------------------------------------------------------
-# Bits used in the mode field, values in octal.
-#---------------------------------------------------------
-S_IFLNK = 0o120000        # symbolic link
-S_IFREG = 0o100000        # regular file
-S_IFBLK = 0o060000        # block device
-S_IFDIR = 0o040000        # directory
-S_IFCHR = 0o020000        # character device
-S_IFIFO = 0o010000        # fifo
-
-TSUID   = 0o4000          # set UID on execution
-TSGID   = 0o2000          # set GID on execution
-TSVTX   = 0o1000          # reserved
-
-TUREAD  = 0o400           # read by owner
-TUWRITE = 0o200           # write by owner
-TUEXEC  = 0o100           # execute/search by owner
-TGREAD  = 0o040           # read by group
-TGWRITE = 0o020           # write by group
-TGEXEC  = 0o010           # execute/search by group
-TOREAD  = 0o004           # read by other
-TOWRITE = 0o002           # write by other
-TOEXEC  = 0o001           # execute/search by other
-
-#---------------------------------------------------------
 # initialization
 #---------------------------------------------------------
 if os.name in ("nt", "ce"):
diff --git a/Lib/telnetlib.py b/Lib/telnetlib.py
index b4b7cd4..0cacac8 100644
--- a/Lib/telnetlib.py
+++ b/Lib/telnetlib.py
@@ -17,13 +17,12 @@
 Note that read_all() won't read until eof -- it just reads some data
 -- but it guarantees to read at least one byte unless EOF is hit.
 
-It is possible to pass a Telnet object to select.select() in order to
-wait until more data is available.  Note that in this case,
-read_eager() may return b'' even if there was data on the socket,
-because the protocol negotiation may have eaten the data.  This is why
-EOFError is needed in some cases to distinguish between "no data" and
-"connection closed" (since the socket also appears ready for reading
-when it is closed).
+It is possible to pass a Telnet object to a selector in order to wait until
+more data is available.  Note that in this case, read_eager() may return b''
+even if there was data on the socket, because the protocol negotiation may have
+eaten the data.  This is why EOFError is needed in some cases to distinguish
+between "no data" and "connection closed" (since the socket also appears ready
+for reading when it is closed).
 
 To do:
 - option negotiation
@@ -34,10 +33,13 @@
 
 
 # Imported modules
-import errno
 import sys
 import socket
-import select
+import selectors
+try:
+    from time import monotonic as _time
+except ImportError:
+    from time import time as _time
 
 __all__ = ["Telnet"]
 
@@ -130,6 +132,15 @@
 EXOPL = bytes([255]) # Extended-Options-List
 NOOPT = bytes([0])
 
+
+# poll/select have the advantage of not requiring any extra file descriptor,
+# contrarily to epoll/kqueue (also, they require a single syscall).
+if hasattr(selectors, 'PollSelector'):
+    _TelnetSelector = selectors.PollSelector
+else:
+    _TelnetSelector = selectors.SelectSelector
+
+
 class Telnet:
 
     """Telnet interface class.
@@ -206,7 +217,6 @@
         self.sb = 0 # flag for SB and SE sequence.
         self.sbdataq = b''
         self.option_callback = None
-        self._has_poll = hasattr(select, 'poll')
         if host is not None:
             self.open(host, port, timeout)
 
@@ -289,61 +299,6 @@
         is closed and no cooked data is available.
 
         """
-        if self._has_poll:
-            return self._read_until_with_poll(match, timeout)
-        else:
-            return self._read_until_with_select(match, timeout)
-
-    def _read_until_with_poll(self, match, timeout):
-        """Read until a given string is encountered or until timeout.
-
-        This method uses select.poll() to implement the timeout.
-        """
-        n = len(match)
-        call_timeout = timeout
-        if timeout is not None:
-            from time import time
-            time_start = time()
-        self.process_rawq()
-        i = self.cookedq.find(match)
-        if i < 0:
-            poller = select.poll()
-            poll_in_or_priority_flags = select.POLLIN | select.POLLPRI
-            poller.register(self, poll_in_or_priority_flags)
-            while i < 0 and not self.eof:
-                try:
-                    ready = poller.poll(call_timeout)
-                except OSError as e:
-                    if e.errno == errno.EINTR:
-                        if timeout is not None:
-                            elapsed = time() - time_start
-                            call_timeout = timeout-elapsed
-                        continue
-                    raise
-                for fd, mode in ready:
-                    if mode & poll_in_or_priority_flags:
-                        i = max(0, len(self.cookedq)-n)
-                        self.fill_rawq()
-                        self.process_rawq()
-                        i = self.cookedq.find(match, i)
-                if timeout is not None:
-                    elapsed = time() - time_start
-                    if elapsed >= timeout:
-                        break
-                    call_timeout = timeout-elapsed
-            poller.unregister(self)
-        if i >= 0:
-            i = i + n
-            buf = self.cookedq[:i]
-            self.cookedq = self.cookedq[i:]
-            return buf
-        return self.read_very_lazy()
-
-    def _read_until_with_select(self, match, timeout=None):
-        """Read until a given string is encountered or until timeout.
-
-        The timeout is implemented using select.select().
-        """
         n = len(match)
         self.process_rawq()
         i = self.cookedq.find(match)
@@ -352,27 +307,25 @@
             buf = self.cookedq[:i]
             self.cookedq = self.cookedq[i:]
             return buf
-        s_reply = ([self], [], [])
-        s_args = s_reply
         if timeout is not None:
-            s_args = s_args + (timeout,)
-            from time import time
-            time_start = time()
-        while not self.eof and select.select(*s_args) == s_reply:
-            i = max(0, len(self.cookedq)-n)
-            self.fill_rawq()
-            self.process_rawq()
-            i = self.cookedq.find(match, i)
-            if i >= 0:
-                i = i+n
-                buf = self.cookedq[:i]
-                self.cookedq = self.cookedq[i:]
-                return buf
-            if timeout is not None:
-                elapsed = time() - time_start
-                if elapsed >= timeout:
-                    break
-                s_args = s_reply + (timeout-elapsed,)
+            deadline = _time() + timeout
+        with _TelnetSelector() as selector:
+            selector.register(self, selectors.EVENT_READ)
+            while not self.eof:
+                if selector.select(timeout):
+                    i = max(0, len(self.cookedq)-n)
+                    self.fill_rawq()
+                    self.process_rawq()
+                    i = self.cookedq.find(match, i)
+                    if i >= 0:
+                        i = i+n
+                        buf = self.cookedq[:i]
+                        self.cookedq = self.cookedq[i:]
+                        return buf
+                if timeout is not None:
+                    timeout = deadline - _time()
+                    if timeout < 0:
+                        break
         return self.read_very_lazy()
 
     def read_all(self):
@@ -577,29 +530,35 @@
 
     def sock_avail(self):
         """Test whether data is available on the socket."""
-        return select.select([self], [], [], 0) == ([self], [], [])
+        with _TelnetSelector() as selector:
+            selector.register(self, selectors.EVENT_READ)
+            return bool(selector.select(0))
 
     def interact(self):
         """Interaction function, emulates a very dumb telnet client."""
         if sys.platform == "win32":
             self.mt_interact()
             return
-        while 1:
-            rfd, wfd, xfd = select.select([self, sys.stdin], [], [])
-            if self in rfd:
-                try:
-                    text = self.read_eager()
-                except EOFError:
-                    print('*** Connection closed by remote host ***')
-                    break
-                if text:
-                    sys.stdout.write(text.decode('ascii'))
-                    sys.stdout.flush()
-            if sys.stdin in rfd:
-                line = sys.stdin.readline().encode('ascii')
-                if not line:
-                    break
-                self.write(line)
+        with _TelnetSelector() as selector:
+            selector.register(self, selectors.EVENT_READ)
+            selector.register(sys.stdin, selectors.EVENT_READ)
+
+            while True:
+                for key, events in selector.select():
+                    if key.fileobj is self:
+                        try:
+                            text = self.read_eager()
+                        except EOFError:
+                            print('*** Connection closed by remote host ***')
+                            return
+                        if text:
+                            sys.stdout.write(text.decode('ascii'))
+                            sys.stdout.flush()
+                    elif key.fileobj is sys.stdin:
+                        line = sys.stdin.readline().encode('ascii')
+                        if not line:
+                            return
+                        self.write(line)
 
     def mt_interact(self):
         """Multithreaded version of interact()."""
@@ -646,79 +605,6 @@
         results are undeterministic, and may depend on the I/O timing.
 
         """
-        if self._has_poll:
-            return self._expect_with_poll(list, timeout)
-        else:
-            return self._expect_with_select(list, timeout)
-
-    def _expect_with_poll(self, expect_list, timeout=None):
-        """Read until one from a list of a regular expressions matches.
-
-        This method uses select.poll() to implement the timeout.
-        """
-        re = None
-        expect_list = expect_list[:]
-        indices = range(len(expect_list))
-        for i in indices:
-            if not hasattr(expect_list[i], "search"):
-                if not re: import re
-                expect_list[i] = re.compile(expect_list[i])
-        call_timeout = timeout
-        if timeout is not None:
-            from time import time
-            time_start = time()
-        self.process_rawq()
-        m = None
-        for i in indices:
-            m = expect_list[i].search(self.cookedq)
-            if m:
-                e = m.end()
-                text = self.cookedq[:e]
-                self.cookedq = self.cookedq[e:]
-                break
-        if not m:
-            poller = select.poll()
-            poll_in_or_priority_flags = select.POLLIN | select.POLLPRI
-            poller.register(self, poll_in_or_priority_flags)
-            while not m and not self.eof:
-                try:
-                    ready = poller.poll(call_timeout)
-                except OSError as e:
-                    if e.errno == errno.EINTR:
-                        if timeout is not None:
-                            elapsed = time() - time_start
-                            call_timeout = timeout-elapsed
-                        continue
-                    raise
-                for fd, mode in ready:
-                    if mode & poll_in_or_priority_flags:
-                        self.fill_rawq()
-                        self.process_rawq()
-                        for i in indices:
-                            m = expect_list[i].search(self.cookedq)
-                            if m:
-                                e = m.end()
-                                text = self.cookedq[:e]
-                                self.cookedq = self.cookedq[e:]
-                                break
-                if timeout is not None:
-                    elapsed = time() - time_start
-                    if elapsed >= timeout:
-                        break
-                    call_timeout = timeout-elapsed
-            poller.unregister(self)
-        if m:
-            return (i, m, text)
-        text = self.read_very_lazy()
-        if not text and self.eof:
-            raise EOFError
-        return (-1, None, text)
-
-    def _expect_with_select(self, list, timeout=None):
-        """Read until one from a list of a regular expressions matches.
-
-        The timeout is implemented using select.select().
-        """
         re = None
         list = list[:]
         indices = range(len(list))
@@ -727,28 +613,27 @@
                 if not re: import re
                 list[i] = re.compile(list[i])
         if timeout is not None:
-            from time import time
-            time_start = time()
-        while 1:
-            self.process_rawq()
-            for i in indices:
-                m = list[i].search(self.cookedq)
-                if m:
-                    e = m.end()
-                    text = self.cookedq[:e]
-                    self.cookedq = self.cookedq[e:]
-                    return (i, m, text)
-            if self.eof:
-                break
-            if timeout is not None:
-                elapsed = time() - time_start
-                if elapsed >= timeout:
-                    break
-                s_args = ([self.fileno()], [], [], timeout-elapsed)
-                r, w, x = select.select(*s_args)
-                if not r:
-                    break
-            self.fill_rawq()
+            deadline = _time() + timeout
+        with _TelnetSelector() as selector:
+            selector.register(self, selectors.EVENT_READ)
+            while not self.eof:
+                self.process_rawq()
+                for i in indices:
+                    m = list[i].search(self.cookedq)
+                    if m:
+                        e = m.end()
+                        text = self.cookedq[:e]
+                        self.cookedq = self.cookedq[e:]
+                        return (i, m, text)
+                if timeout is not None:
+                    ready = selector.select(timeout)
+                    timeout = deadline - _time()
+                    if not ready:
+                        if timeout < 0:
+                            break
+                        else:
+                            continue
+                self.fill_rawq()
         text = self.read_very_lazy()
         if not text and self.eof:
             raise EOFError
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index 7da71c8..5d34621 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -146,7 +146,7 @@
 
     for dir in dirlist:
         if dir != _os.curdir:
-            dir = _os.path.normcase(_os.path.abspath(dir))
+            dir = _os.path.abspath(dir)
         # Try only a few names per directory.
         for seq in range(100):
             name = next(namer)
diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
index de0c968..ad77260 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -273,7 +273,7 @@
 
     @classmethod
     def _test_terminate(cls):
-        time.sleep(1000)
+        time.sleep(100)
 
     def test_terminate(self):
         if self.TYPE == 'threads':
@@ -297,9 +297,26 @@
         self.assertTimingAlmostEqual(join.elapsed, 0.0)
         self.assertEqual(p.is_alive(), True)
 
+        # XXX maybe terminating too soon causes the problems on Gentoo...
+        time.sleep(1)
+
         p.terminate()
 
-        self.assertEqual(join(), None)
+        if hasattr(signal, 'alarm'):
+            # On the Gentoo buildbot waitpid() often seems to block forever.
+            # We use alarm() to interrupt it if it blocks for too long.
+            def handler(*args):
+                raise RuntimeError('join took too long: %s' % p)
+            old_handler = signal.signal(signal.SIGALRM, handler)
+            try:
+                signal.alarm(10)
+                self.assertEqual(join(), None)
+            finally:
+                signal.alarm(0)
+                signal.signal(signal.SIGALRM, old_handler)
+        else:
+            self.assertEqual(join(), None)
+
         self.assertTimingAlmostEqual(join.elapsed, 0.0)
 
         self.assertEqual(p.is_alive(), False)
@@ -706,7 +723,7 @@
         start = time.time()
         self.assertRaises(pyqueue.Empty, q.get, True, 0.2)
         delta = time.time() - start
-        self.assertGreaterEqual(delta, 0.19)
+        self.assertGreaterEqual(delta, 0.18)
 
 #
 #
@@ -1681,6 +1698,16 @@
         self.assertEqual(2, len(call_args))
         self.assertIsInstance(call_args[1], ValueError)
 
+    def test_map_unplicklable(self):
+        # Issue #19425 -- failure to pickle should not cause a hang
+        if self.TYPE == 'threads':
+            return
+        class A(object):
+            def __reduce__(self):
+                raise RuntimeError('cannot pickle')
+        with self.assertRaises(RuntimeError):
+            self.pool.map(sqr, [A()]*10)
+
     def test_map_chunksize(self):
         try:
             self.pool.map_async(sqr, [], chunksize=1).get(timeout=TIMEOUT1)
@@ -3543,6 +3570,32 @@
             conn.close()
 
 class TestStartMethod(unittest.TestCase):
+    @classmethod
+    def _check_context(cls, conn):
+        conn.send(multiprocessing.get_start_method())
+
+    def check_context(self, ctx):
+        r, w = ctx.Pipe(duplex=False)
+        p = ctx.Process(target=self._check_context, args=(w,))
+        p.start()
+        w.close()
+        child_method = r.recv()
+        r.close()
+        p.join()
+        self.assertEqual(child_method, ctx.get_start_method())
+
+    def test_context(self):
+        for method in ('fork', 'spawn', 'forkserver'):
+            try:
+                ctx = multiprocessing.get_context(method)
+            except ValueError:
+                continue
+            self.assertEqual(ctx.get_start_method(), method)
+            self.assertIs(ctx.get_context(), ctx)
+            self.assertRaises(ValueError, ctx.set_start_method, 'spawn')
+            self.assertRaises(ValueError, ctx.set_start_method, None)
+            self.check_context(ctx)
+
     def test_set_get(self):
         multiprocessing.set_forkserver_preload(PRELOAD)
         count = 0
@@ -3550,13 +3603,19 @@
         try:
             for method in ('fork', 'spawn', 'forkserver'):
                 try:
-                    multiprocessing.set_start_method(method)
+                    multiprocessing.set_start_method(method, force=True)
                 except ValueError:
                     continue
                 self.assertEqual(multiprocessing.get_start_method(), method)
+                ctx = multiprocessing.get_context()
+                self.assertEqual(ctx.get_start_method(), method)
+                self.assertTrue(type(ctx).__name__.lower().startswith(method))
+                self.assertTrue(
+                    ctx.Process.__name__.lower().startswith(method))
+                self.check_context(multiprocessing)
                 count += 1
         finally:
-            multiprocessing.set_start_method(old_method)
+            multiprocessing.set_start_method(old_method, force=True)
         self.assertGreaterEqual(count, 1)
 
     def test_get_all(self):
@@ -3741,9 +3800,9 @@
         multiprocessing.process._cleanup()
         dangling[0] = multiprocessing.process._dangling.copy()
         dangling[1] = threading._dangling.copy()
-        old_start_method[0] = multiprocessing.get_start_method()
+        old_start_method[0] = multiprocessing.get_start_method(allow_none=True)
         try:
-            multiprocessing.set_start_method(start_method)
+            multiprocessing.set_start_method(start_method, force=True)
         except ValueError:
             raise unittest.SkipTest(start_method +
                                     ' start method not supported')
@@ -3759,7 +3818,7 @@
         multiprocessing.get_logger().setLevel(LOG_LEVEL)
 
     def tearDownModule():
-        multiprocessing.set_start_method(old_start_method[0])
+        multiprocessing.set_start_method(old_start_method[0], force=True)
         # pause a bit so we don't get warning about dangling threads/processes
         time.sleep(0.5)
         multiprocessing.process._cleanup()
diff --git a/Lib/test/audiodata/pluck-alaw.aifc b/Lib/test/audiodata/pluck-alaw.aifc
new file mode 100644
index 0000000..3b7fbd2
--- /dev/null
+++ b/Lib/test/audiodata/pluck-alaw.aifc
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm16.aiff b/Lib/test/audiodata/pluck-pcm16.aiff
new file mode 100644
index 0000000..6c8c40d
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm16.aiff
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm16.au b/Lib/test/audiodata/pluck-pcm16.au
new file mode 100644
index 0000000..398f07f
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm16.au
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm16.wav b/Lib/test/audiodata/pluck-pcm16.wav
new file mode 100644
index 0000000..cb8627d
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm16.wav
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm24.aiff b/Lib/test/audiodata/pluck-pcm24.aiff
new file mode 100644
index 0000000..8eba145
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm24.aiff
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm24.au b/Lib/test/audiodata/pluck-pcm24.au
new file mode 100644
index 0000000..0bb2304
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm24.au
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm24.wav b/Lib/test/audiodata/pluck-pcm24.wav
new file mode 100644
index 0000000..60d92c3
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm24.wav
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm32.aiff b/Lib/test/audiodata/pluck-pcm32.aiff
new file mode 100644
index 0000000..46ac037
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm32.aiff
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm32.au b/Lib/test/audiodata/pluck-pcm32.au
new file mode 100644
index 0000000..92ee596
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm32.au
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm32.wav b/Lib/test/audiodata/pluck-pcm32.wav
new file mode 100644
index 0000000..846628b
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm32.wav
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm8.aiff b/Lib/test/audiodata/pluck-pcm8.aiff
new file mode 100644
index 0000000..5de4f3b
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm8.aiff
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm8.au b/Lib/test/audiodata/pluck-pcm8.au
new file mode 100644
index 0000000..b7172c8
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm8.au
Binary files differ
diff --git a/Lib/test/audiodata/pluck-pcm8.wav b/Lib/test/audiodata/pluck-pcm8.wav
new file mode 100644
index 0000000..bb28cb8
--- /dev/null
+++ b/Lib/test/audiodata/pluck-pcm8.wav
Binary files differ
diff --git a/Lib/test/audiodata/pluck-ulaw.aifc b/Lib/test/audiodata/pluck-ulaw.aifc
new file mode 100644
index 0000000..3085cf0
--- /dev/null
+++ b/Lib/test/audiodata/pluck-ulaw.aifc
Binary files differ
diff --git a/Lib/test/audiodata/pluck-ulaw.au b/Lib/test/audiodata/pluck-ulaw.au
new file mode 100644
index 0000000..1110353
--- /dev/null
+++ b/Lib/test/audiodata/pluck-ulaw.au
Binary files differ
diff --git a/Lib/test/audiotests.py b/Lib/test/audiotests.py
new file mode 100644
index 0000000..7b39269
--- /dev/null
+++ b/Lib/test/audiotests.py
@@ -0,0 +1,261 @@
+from test.support import findfile, TESTFN, unlink
+import unittest
+import array
+import io
+import pickle
+import sys
+
+def byteswap2(data):
+    a = array.array('h', data)
+    a.byteswap()
+    return a.tobytes()
+
+def byteswap3(data):
+    ba = bytearray(data)
+    ba[::3] = data[2::3]
+    ba[2::3] = data[::3]
+    return bytes(ba)
+
+def byteswap4(data):
+    a = array.array('i', data)
+    a.byteswap()
+    return a.tobytes()
+
+
+class AudioTests:
+    close_fd = False
+
+    def setUp(self):
+        self.f = self.fout = None
+
+    def tearDown(self):
+        if self.f is not None:
+            self.f.close()
+        if self.fout is not None:
+            self.fout.close()
+        unlink(TESTFN)
+
+    def check_params(self, f, nchannels, sampwidth, framerate, nframes,
+                     comptype, compname):
+        self.assertEqual(f.getnchannels(), nchannels)
+        self.assertEqual(f.getsampwidth(), sampwidth)
+        self.assertEqual(f.getframerate(), framerate)
+        self.assertEqual(f.getnframes(), nframes)
+        self.assertEqual(f.getcomptype(), comptype)
+        self.assertEqual(f.getcompname(), compname)
+
+        params = f.getparams()
+        self.assertEqual(params,
+                (nchannels, sampwidth, framerate, nframes, comptype, compname))
+        self.assertEqual(params.nchannels, nchannels)
+        self.assertEqual(params.sampwidth, sampwidth)
+        self.assertEqual(params.framerate, framerate)
+        self.assertEqual(params.nframes, nframes)
+        self.assertEqual(params.comptype, comptype)
+        self.assertEqual(params.compname, compname)
+
+        dump = pickle.dumps(params)
+        self.assertEqual(pickle.loads(dump), params)
+
+
+class AudioWriteTests(AudioTests):
+
+    def create_file(self, testfile):
+        f = self.fout = self.module.open(testfile, 'wb')
+        f.setnchannels(self.nchannels)
+        f.setsampwidth(self.sampwidth)
+        f.setframerate(self.framerate)
+        f.setcomptype(self.comptype, self.compname)
+        return f
+
+    def check_file(self, testfile, nframes, frames):
+        with self.module.open(testfile, 'rb') as f:
+            self.assertEqual(f.getnchannels(), self.nchannels)
+            self.assertEqual(f.getsampwidth(), self.sampwidth)
+            self.assertEqual(f.getframerate(), self.framerate)
+            self.assertEqual(f.getnframes(), nframes)
+            self.assertEqual(f.readframes(nframes), frames)
+
+    def test_write_params(self):
+        f = self.create_file(TESTFN)
+        f.setnframes(self.nframes)
+        f.writeframes(self.frames)
+        self.check_params(f, self.nchannels, self.sampwidth, self.framerate,
+                          self.nframes, self.comptype, self.compname)
+        f.close()
+
+    def test_write_context_manager_calls_close(self):
+        # Close checks for a minimum header and will raise an error
+        # if it is not set, so this proves that close is called.
+        with self.assertRaises(self.module.Error):
+            with self.module.open(TESTFN, 'wb'):
+                pass
+        with self.assertRaises(self.module.Error):
+            with open(TESTFN, 'wb') as testfile:
+                with self.module.open(testfile):
+                    pass
+
+    def test_context_manager_with_open_file(self):
+        with open(TESTFN, 'wb') as testfile:
+            with self.module.open(testfile) as f:
+                f.setnchannels(self.nchannels)
+                f.setsampwidth(self.sampwidth)
+                f.setframerate(self.framerate)
+                f.setcomptype(self.comptype, self.compname)
+            self.assertEqual(testfile.closed, self.close_fd)
+        with open(TESTFN, 'rb') as testfile:
+            with self.module.open(testfile) as f:
+                self.assertFalse(f.getfp().closed)
+                params = f.getparams()
+                self.assertEqual(params.nchannels, self.nchannels)
+                self.assertEqual(params.sampwidth, self.sampwidth)
+                self.assertEqual(params.framerate, self.framerate)
+            if not self.close_fd:
+                self.assertIsNone(f.getfp())
+            self.assertEqual(testfile.closed, self.close_fd)
+
+    def test_context_manager_with_filename(self):
+        # If the file doesn't get closed, this test won't fail, but it will
+        # produce a resource leak warning.
+        with self.module.open(TESTFN, 'wb') as f:
+            f.setnchannels(self.nchannels)
+            f.setsampwidth(self.sampwidth)
+            f.setframerate(self.framerate)
+            f.setcomptype(self.comptype, self.compname)
+        with self.module.open(TESTFN) as f:
+            self.assertFalse(f.getfp().closed)
+            params = f.getparams()
+            self.assertEqual(params.nchannels, self.nchannels)
+            self.assertEqual(params.sampwidth, self.sampwidth)
+            self.assertEqual(params.framerate, self.framerate)
+        if not self.close_fd:
+            self.assertIsNone(f.getfp())
+
+    def test_write(self):
+        f = self.create_file(TESTFN)
+        f.setnframes(self.nframes)
+        f.writeframes(self.frames)
+        f.close()
+
+        self.check_file(TESTFN, self.nframes, self.frames)
+
+    def test_incompleted_write(self):
+        with open(TESTFN, 'wb') as testfile:
+            testfile.write(b'ababagalamaga')
+            f = self.create_file(testfile)
+            f.setnframes(self.nframes + 1)
+            f.writeframes(self.frames)
+            f.close()
+
+        with open(TESTFN, 'rb') as testfile:
+            self.assertEqual(testfile.read(13), b'ababagalamaga')
+            self.check_file(testfile, self.nframes, self.frames)
+
+    def test_multiple_writes(self):
+        with open(TESTFN, 'wb') as testfile:
+            testfile.write(b'ababagalamaga')
+            f = self.create_file(testfile)
+            f.setnframes(self.nframes)
+            framesize = self.nchannels * self.sampwidth
+            f.writeframes(self.frames[:-framesize])
+            f.writeframes(self.frames[-framesize:])
+            f.close()
+
+        with open(TESTFN, 'rb') as testfile:
+            self.assertEqual(testfile.read(13), b'ababagalamaga')
+            self.check_file(testfile, self.nframes, self.frames)
+
+    def test_overflowed_write(self):
+        with open(TESTFN, 'wb') as testfile:
+            testfile.write(b'ababagalamaga')
+            f = self.create_file(testfile)
+            f.setnframes(self.nframes - 1)
+            f.writeframes(self.frames)
+            f.close()
+
+        with open(TESTFN, 'rb') as testfile:
+            self.assertEqual(testfile.read(13), b'ababagalamaga')
+            self.check_file(testfile, self.nframes, self.frames)
+
+
+class AudioTestsWithSourceFile(AudioTests):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.sndfilepath = findfile(cls.sndfilename, subdir='audiodata')
+
+    def test_read_params(self):
+        f = self.f = self.module.open(self.sndfilepath)
+        #self.assertEqual(f.getfp().name, self.sndfilepath)
+        self.check_params(f, self.nchannels, self.sampwidth, self.framerate,
+                          self.sndfilenframes, self.comptype, self.compname)
+
+    def test_close(self):
+        with open(self.sndfilepath, 'rb') as testfile:
+            f = self.f = self.module.open(testfile)
+            self.assertFalse(testfile.closed)
+            f.close()
+            self.assertEqual(testfile.closed, self.close_fd)
+        with open(TESTFN, 'wb') as testfile:
+            fout = self.fout = self.module.open(testfile, 'wb')
+            self.assertFalse(testfile.closed)
+            with self.assertRaises(self.module.Error):
+                fout.close()
+            self.assertEqual(testfile.closed, self.close_fd)
+            fout.close() # do nothing
+
+    def test_read(self):
+        framesize = self.nchannels * self.sampwidth
+        chunk1 = self.frames[:2 * framesize]
+        chunk2 = self.frames[2 * framesize: 4 * framesize]
+        f = self.f = self.module.open(self.sndfilepath)
+        self.assertEqual(f.readframes(0), b'')
+        self.assertEqual(f.tell(), 0)
+        self.assertEqual(f.readframes(2), chunk1)
+        f.rewind()
+        pos0 = f.tell()
+        self.assertEqual(pos0, 0)
+        self.assertEqual(f.readframes(2), chunk1)
+        pos2 = f.tell()
+        self.assertEqual(pos2, 2)
+        self.assertEqual(f.readframes(2), chunk2)
+        f.setpos(pos2)
+        self.assertEqual(f.readframes(2), chunk2)
+        f.setpos(pos0)
+        self.assertEqual(f.readframes(2), chunk1)
+        with self.assertRaises(self.module.Error):
+            f.setpos(-1)
+        with self.assertRaises(self.module.Error):
+            f.setpos(f.getnframes() + 1)
+
+    def test_copy(self):
+        f = self.f = self.module.open(self.sndfilepath)
+        fout = self.fout = self.module.open(TESTFN, 'wb')
+        fout.setparams(f.getparams())
+        i = 0
+        n = f.getnframes()
+        while n > 0:
+            i += 1
+            fout.writeframes(f.readframes(i))
+            n -= i
+        fout.close()
+        fout = self.fout = self.module.open(TESTFN, 'rb')
+        f.rewind()
+        self.assertEqual(f.getparams(), fout.getparams())
+        self.assertEqual(f.readframes(f.getnframes()),
+                         fout.readframes(fout.getnframes()))
+
+    def test_read_not_from_start(self):
+        with open(TESTFN, 'wb') as testfile:
+            testfile.write(b'ababagalamaga')
+            with open(self.sndfilepath, 'rb') as f:
+                testfile.write(f.read())
+
+        with open(TESTFN, 'rb') as testfile:
+            self.assertEqual(testfile.read(13), b'ababagalamaga')
+            with self.module.open(testfile, 'rb') as f:
+                self.assertEqual(f.getnchannels(), self.nchannels)
+                self.assertEqual(f.getsampwidth(), self.sampwidth)
+                self.assertEqual(f.getframerate(), self.framerate)
+                self.assertEqual(f.getnframes(), self.sndfilenframes)
+                self.assertEqual(f.readframes(self.nframes), self.frames)
diff --git a/Lib/test/bytecode_helper.py b/Lib/test/bytecode_helper.py
index c4943cd..58b4209 100644
--- a/Lib/test/bytecode_helper.py
+++ b/Lib/test/bytecode_helper.py
@@ -14,37 +14,6 @@
         dis.dis(co, file=s)
         return s.getvalue()
 
-    def assertInstructionMatches(self, instr, expected, *, line_offset=0):
-        # Deliberately test opname first, since that gives a more
-        # meaningful error message than testing opcode
-        self.assertEqual(instr.opname, expected.opname)
-        self.assertEqual(instr.opcode, expected.opcode)
-        self.assertEqual(instr.arg, expected.arg)
-        self.assertEqual(instr.argval, expected.argval)
-        self.assertEqual(instr.argrepr, expected.argrepr)
-        self.assertEqual(instr.offset, expected.offset)
-        if expected.starts_line is None:
-            self.assertIsNone(instr.starts_line)
-        else:
-            self.assertEqual(instr.starts_line,
-                                expected.starts_line + line_offset)
-        self.assertEqual(instr.is_jump_target, expected.is_jump_target)
-
-
-    def assertBytecodeExactlyMatches(self, x, expected, *, line_offset=0):
-        """Throws AssertionError if any discrepancy is found in bytecode
-
-        *x* is the object to be introspected
-        *expected* is a list of dis.Instruction objects
-
-        Set *line_offset* as appropriate to adjust for the location of the
-        object to be disassembled within the test file. If the expected list
-        assumes the first line is line 1, then an appropriate offset would be
-        ``1 - f.__code__.co_firstlineno``.
-        """
-        actual = dis.get_instructions(x, line_offset=line_offset)
-        self.assertEqual(list(actual), expected)
-
     def assertInBytecode(self, x, opname, argval=_UNSPECIFIED):
         """Returns instr if op is found, otherwise throws AssertionError"""
         for instr in dis.get_instructions(x):
diff --git a/Lib/test/lock_tests.py b/Lib/test/lock_tests.py
index 1a24bde..1cbcea2 100644
--- a/Lib/test/lock_tests.py
+++ b/Lib/test/lock_tests.py
@@ -418,6 +418,17 @@
         self.assertRaises(RuntimeError, cond.notify)
 
     def _check_notify(self, cond):
+        # Note that this test is sensitive to timing.  If the worker threads
+        # don't execute in a timely fashion, the main thread may think they
+        # are further along then they are.  The main thread therefore issues
+        # _wait() statements to try to make sure that it doesn't race ahead
+        # of the workers.
+        # Secondly, this test assumes that condition variables are not subject
+        # to spurious wakeups.  The absence of spurious wakeups is an implementation
+        # detail of Condition Cariables in current CPython, but in general, not
+        # a guaranteed property of condition variables as a programming
+        # construct.  In particular, it is possible that this can no longer
+        # be conveniently guaranteed should their implementation ever change.
         N = 5
         results1 = []
         results2 = []
@@ -445,6 +456,9 @@
             _wait()
         self.assertEqual(results1, [(True, 1)] * 3)
         self.assertEqual(results2, [])
+        # first wait, to ensure all workers settle into cond.wait() before
+        # we continue. See issue #8799
+        _wait()
         # Notify 5 threads: they might be in their first or second wait
         cond.acquire()
         cond.notify(5)
@@ -455,6 +469,7 @@
             _wait()
         self.assertEqual(results1, [(True, 1)] * 3 + [(True, 2)] * 2)
         self.assertEqual(results2, [(True, 2)] * 3)
+        _wait() # make sure all workers settle into cond.wait()
         # Notify all threads: they are all in their second wait
         cond.acquire()
         cond.notify_all()
diff --git a/Lib/test/script_helper.py b/Lib/test/script_helper.py
index f9d2b65..4d5c1f1 100644
--- a/Lib/test/script_helper.py
+++ b/Lib/test/script_helper.py
@@ -17,8 +17,17 @@
 
 # Executing the interpreter in a subprocess
 def _assert_python(expected_success, *args, **env_vars):
+    if '__isolated' in env_vars:
+        isolated = env_vars.pop('__isolated')
+    else:
+        isolated = not env_vars
     cmd_line = [sys.executable, '-X', 'faulthandler']
-    if not env_vars:
+    if isolated:
+        # isolated mode: ignore Python environment variables, ignore user
+        # site-packages, and don't add the current directory to sys.path
+        cmd_line.append('-I')
+    elif not env_vars:
+        # ignore Python environment variables
         cmd_line.append('-E')
     # Need to preserve the original environment, for in-place testing of
     # shared library builds.
@@ -51,6 +60,11 @@
     Assert that running the interpreter with `args` and optional environment
     variables `env_vars` succeeds (rc == 0) and return a (return code, stdout,
     stderr) tuple.
+
+    If the __cleanenv keyword is set, env_vars is used a fresh environment.
+
+    Python is started in isolated mode (command line option -I),
+    except if the __isolated keyword is set to False.
     """
     return _assert_python(True, *args, **env_vars)
 
@@ -59,6 +73,8 @@
     Assert that running the interpreter with `args` and optional environment
     variables `env_vars` fails (rc != 0) and return a (return code, stdout,
     stderr) tuple.
+
+    See assert_python_ok() for more options.
     """
     return _assert_python(False, *args, **env_vars)
 
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 5687ef9..20a5e85 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -63,26 +63,43 @@
     resource = None
 
 __all__ = [
-    "Error", "TestFailed", "ResourceDenied", "import_module", "verbose",
-    "use_resources", "max_memuse", "record_original_stdout",
-    "get_original_stdout", "unload", "unlink", "rmtree", "forget",
+    # globals
+    "PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
+    # exceptions
+    "Error", "TestFailed", "ResourceDenied",
+    # imports
+    "import_module", "import_fresh_module", "CleanImport",
+    # modules
+    "unload", "forget",
+    # io
+    "record_original_stdout", "get_original_stdout", "captured_stdout",
+    "captured_stdin", "captured_stderr",
+    # filesystem
+    "TESTFN", "SAVEDCWD", "unlink", "rmtree", "temp_cwd", "findfile",
+    "create_empty_file", "can_symlink",
+    # unittest
     "is_resource_enabled", "requires", "requires_freebsd_version",
-    "requires_linux_version", "requires_mac_ver", "find_unused_port",
-    "bind_port", "IPV6_ENABLED", "is_jython", "TESTFN", "HOST", "SAVEDCWD",
-    "temp_cwd", "findfile", "create_empty_file", "sortdict",
-    "check_syntax_error", "open_urlresource", "check_warnings", "CleanImport",
-    "EnvironmentVarGuard", "TransientResource", "captured_stdout",
-    "captured_stdin", "captured_stderr", "time_out", "socket_peer_reset",
-    "ioerror_peer_reset", "run_with_locale", 'temp_umask',
-    "transient_internet", "set_memlimit", "bigmemtest", "bigaddrspacetest",
-    "BasicTestRunner", "run_unittest", "run_doctest", "threading_setup",
-    "threading_cleanup", "reap_children", "cpython_only", "check_impl_detail",
-    "get_attribute", "swap_item", "swap_attr", "requires_IEEE_754",
-    "TestHandler", "Matcher", "can_symlink", "skip_unless_symlink",
-    "skip_unless_xattr", "import_fresh_module", "requires_zlib",
-    "PIPE_MAX_SIZE", "failfast", "anticipate_failure", "run_with_tz",
-    "requires_gzip", "requires_bz2", "requires_lzma", "suppress_crash_popup",
-    "SuppressCoreFiles",
+    "requires_linux_version", "requires_mac_ver", "check_syntax_error",
+    "TransientResource", "time_out", "socket_peer_reset", "ioerror_peer_reset",
+    "transient_internet", "BasicTestRunner", "run_unittest", "run_doctest",
+    "skip_unless_symlink", "requires_gzip", "requires_bz2", "requires_lzma",
+    "bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute",
+    "requires_IEEE_754", "skip_unless_xattr", "requires_zlib",
+    "anticipate_failure",
+    # sys
+    "is_jython", "check_impl_detail",
+    # network
+    "HOST", "IPV6_ENABLED", "find_unused_port", "bind_port", "open_urlresource",
+    # processes
+    'temp_umask', "reap_children",
+    # logging
+    "TestHandler",
+    # threads
+    "threading_setup", "threading_cleanup",
+    # miscellaneous
+    "check_warnings", "EnvironmentVarGuard", "run_with_locale", "swap_item",
+    "swap_attr", "Matcher", "set_memlimit", "SuppressCrashReport", "sortdict",
+    "run_with_tz",
     ]
 
 class Error(Exception):
@@ -1698,9 +1715,18 @@
 #=======================================================================
 # Check for the presence of docstrings.
 
-HAVE_DOCSTRINGS = (check_impl_detail(cpython=False) or
-                   sys.platform == 'win32' or
-                   sysconfig.get_config_var('WITH_DOC_STRINGS'))
+# Rather than trying to enumerate all the cases where docstrings may be
+# disabled, we just check for that directly
+
+def _check_docstrings():
+    """Just used to check if docstrings are enabled"""
+
+MISSING_C_DOCSTRINGS = (check_impl_detail() and
+                        sys.platform != 'win32' and
+                        not sysconfig.get_config_var('WITH_DOC_STRINGS'))
+
+HAVE_DOCSTRINGS = (_check_docstrings.__doc__ is not None and
+                   not MISSING_C_DOCSTRINGS)
 
 requires_docstrings = unittest.skipUnless(HAVE_DOCSTRINGS,
                                           "test requires docstrings")
@@ -2013,27 +2039,67 @@
     return test if ok else unittest.skip(msg)(test)
 
 
-if sys.platform.startswith('win'):
-    @contextlib.contextmanager
-    def suppress_crash_popup():
-        """Disable Windows Error Reporting dialogs using SetErrorMode."""
-        # see http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621%28v=vs.85%29.aspx
-        # GetErrorMode is not available on Windows XP and Windows Server 2003,
-        # but SetErrorMode returns the previous value, so we can use that
-        import ctypes
-        k32 = ctypes.windll.kernel32
-        SEM_NOGPFAULTERRORBOX = 0x02
-        old_error_mode = k32.SetErrorMode(SEM_NOGPFAULTERRORBOX)
-        k32.SetErrorMode(old_error_mode | SEM_NOGPFAULTERRORBOX)
-        try:
-            yield
-        finally:
-            k32.SetErrorMode(old_error_mode)
-else:
-    # this is a no-op for other platforms
-    @contextlib.contextmanager
-    def suppress_crash_popup():
-        yield
+class SuppressCrashReport:
+    """Try to prevent a crash report from popping up.
+
+    On Windows, don't display the Windows Error Reporting dialog.  On UNIX,
+    disable the creation of coredump file.
+    """
+    old_value = None
+
+    def __enter__(self):
+        """On Windows, disable Windows Error Reporting dialogs using
+        SetErrorMode.
+
+        On UNIX, try to save the previous core file size limit, then set
+        soft limit to 0.
+        """
+        if sys.platform.startswith('win'):
+            # see http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621.aspx
+            # GetErrorMode is not available on Windows XP and Windows Server 2003,
+            # but SetErrorMode returns the previous value, so we can use that
+            import ctypes
+            self._k32 = ctypes.windll.kernel32
+            SEM_NOGPFAULTERRORBOX = 0x02
+            self.old_value = self._k32.SetErrorMode(SEM_NOGPFAULTERRORBOX)
+            self._k32.SetErrorMode(self.old_value | SEM_NOGPFAULTERRORBOX)
+        else:
+            if resource is not None:
+                try:
+                    self.old_value = resource.getrlimit(resource.RLIMIT_CORE)
+                    resource.setrlimit(resource.RLIMIT_CORE,
+                                       (0, self.old_value[1]))
+                except (ValueError, OSError):
+                    pass
+            if sys.platform == 'darwin':
+                # Check if the 'Crash Reporter' on OSX was configured
+                # in 'Developer' mode and warn that it will get triggered
+                # when it is.
+                #
+                # This assumes that this context manager is used in tests
+                # that might trigger the next manager.
+                value = subprocess.Popen(['/usr/bin/defaults', 'read',
+                        'com.apple.CrashReporter', 'DialogType'],
+                        stdout=subprocess.PIPE).communicate()[0]
+                if value.strip() == b'developer':
+                    print("this test triggers the Crash Reporter, "
+                          "that is intentional", end='', flush=True)
+
+        return self
+
+    def __exit__(self, *ignore_exc):
+        """Restore Windows ErrorMode or core file behavior to initial value."""
+        if self.old_value is None:
+            return
+
+        if sys.platform.startswith('win'):
+            self._k32.SetErrorMode(self.old_value)
+        else:
+            if resource is not None:
+                try:
+                    resource.setrlimit(resource.RLIMIT_CORE, self.old_value)
+                except (ValueError, OSError):
+                    pass
 
 
 def patch(test_instance, object_to_patch, attr_name, new_value):
@@ -2068,42 +2134,3 @@
 
     # actually override the attribute
     setattr(object_to_patch, attr_name, new_value)
-
-
-class SuppressCoreFiles:
-
-    """Try to prevent core files from being created."""
-    old_limit = None
-
-    def __enter__(self):
-        """Try to save previous ulimit, then set the soft limit to 0."""
-        if resource is not None:
-            try:
-                self.old_limit = resource.getrlimit(resource.RLIMIT_CORE)
-                resource.setrlimit(resource.RLIMIT_CORE, (0, self.old_limit[1]))
-            except (ValueError, OSError):
-                pass
-        if sys.platform == 'darwin':
-            # Check if the 'Crash Reporter' on OSX was configured
-            # in 'Developer' mode and warn that it will get triggered
-            # when it is.
-            #
-            # This assumes that this context manager is used in tests
-            # that might trigger the next manager.
-            value = subprocess.Popen(['/usr/bin/defaults', 'read',
-                    'com.apple.CrashReporter', 'DialogType'],
-                    stdout=subprocess.PIPE).communicate()[0]
-            if value.strip() == b'developer':
-                print("this test triggers the Crash Reporter, "
-                      "that is intentional", end='')
-                sys.stdout.flush()
-
-    def __exit__(self, *ignore_exc):
-        """Return core file behavior to default."""
-        if self.old_limit is None:
-            return
-        if resource is not None:
-            try:
-                resource.setrlimit(resource.RLIMIT_CORE, self.old_limit)
-            except (ValueError, OSError):
-                pass
diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py
index 05e4ca0..3e9a1d1 100644
--- a/Lib/test/test_aifc.py
+++ b/Lib/test/test_aifc.py
@@ -1,57 +1,170 @@
-from test.support import findfile, run_unittest, TESTFN, unlink
+from test.support import findfile, TESTFN, unlink
 import unittest
+from test import audiotests
 import os
 import io
+import sys
 import struct
-import pickle
-
 import aifc
 
 
-class AIFCTest(unittest.TestCase):
+class AifcPCM8Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = aifc
+    sndfilename = 'pluck-pcm8.aiff'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 1
+    framerate = 11025
+    nframes = 48
+    comptype = b'NONE'
+    compname = b'not compressed'
+    frames = bytes.fromhex("""\
+      02FF 4B00 3104 8008 CB06 4803 BF01 03FE B8FA B4F3 29EB 1AE6 \
+      EDE4 C6E2 0EE0 EFE0 57E2 FBE8 13EF D8F7 97FB F5FC 08FB DFFB \
+      11FA 3EFB BCFC 66FF CF04 4309 C10E 5112 EE17 8216 7F14 8012 \
+      490E 520D EF0F CE0F E40C 630A 080A 2B0B 510E 8B11 B60E 440A \
+      """)
+    close_fd = True
 
-    def setUp(self):
-        self.f = self.fout = None
-        self.sndfilepath = findfile('Sine-1000Hz-300ms.aif')
 
-    def tearDown(self):
-        if self.f is not None:
-            self.f.close()
-        if self.fout is not None:
-            try:
-                self.fout.close()
-            except (aifc.Error, AttributeError):
-                pass
-        unlink(TESTFN)
-        unlink(TESTFN + '.aiff')
+class AifcPCM16Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = aifc
+    sndfilename = 'pluck-pcm16.aiff'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 2
+    framerate = 11025
+    nframes = 48
+    comptype = b'NONE'
+    compname = b'not compressed'
+    frames = bytes.fromhex("""\
+      022EFFEA 4B5D00F6 311804EA 80E10840 CBE106B1 48A903F5 BFE601B2 036CFE7B \
+      B858FA3E B4B1F34F 299AEBCA 1A5DE6DA EDFAE491 C628E275 0E09E0B5 EF2AE029 \
+      5758E271 FB35E83F 1376EF86 D82BF727 9790FB76 F5FAFC0F 0867FB9C DF30FB43 \
+      117EFA36 3EE5FB5B BC79FCB1 66D9FF5D CF150412 431D097C C1BA0EC8 512112A1 \
+      EEE21753 82071665 7FFF1443 8004128F 49A20EAF 52BB0DBA EFB40F60 CE3C0FBF \
+      E4B30CEC 63430A5C 08C80A20 2BBB0B08 514A0E43 8BCF1139 B6F60EEB 44120A5E \
+      """)
+    close_fd = True
 
+
+class AifcPCM24Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = aifc
+    sndfilename = 'pluck-pcm24.aiff'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 3
+    framerate = 11025
+    nframes = 48
+    comptype = b'NONE'
+    compname = b'not compressed'
+    frames = bytes.fromhex("""\
+      022D65FFEB9D 4B5A0F00FA54 3113C304EE2B 80DCD6084303 \
+      CBDEC006B261 48A99803F2F8 BFE82401B07D 036BFBFE7B5D \
+      B85756FA3EC9 B4B055F3502B 299830EBCB62 1A5CA7E6D99A \
+      EDFA3EE491BD C625EBE27884 0E05A9E0B6CF EF2929E02922 \
+      5758D8E27067 FB3557E83E16 1377BFEF8402 D82C5BF7272A \
+      978F16FB7745 F5F865FC1013 086635FB9C4E DF30FCFB40EE \
+      117FE0FA3438 3EE6B8FB5AC3 BC77A3FCB2F4 66D6DAFF5F32 \
+      CF13B9041275 431D69097A8C C1BB600EC74E 5120B912A2BA \
+      EEDF641754C0 8207001664B7 7FFFFF14453F 8000001294E6 \
+      499C1B0EB3B2 52B73E0DBCA0 EFB2B20F5FD8 CE3CDB0FBE12 \
+      E4B49C0CEA2D 6344A80A5A7C 08C8FE0A1FFE 2BB9860B0A0E \
+      51486F0E44E1 8BCC64113B05 B6F4EC0EEB36 4413170A5B48 \
+      """)
+    close_fd = True
+
+
+class AifcPCM32Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = aifc
+    sndfilename = 'pluck-pcm32.aiff'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 4
+    framerate = 11025
+    nframes = 48
+    comptype = b'NONE'
+    compname = b'not compressed'
+    frames = bytes.fromhex("""\
+      022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \
+      CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \
+      B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \
+      EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \
+      5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \
+      978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \
+      117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \
+      CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \
+      EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \
+      499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \
+      E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \
+      51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \
+      """)
+    close_fd = True
+
+
+class AifcULAWTest(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = aifc
+    sndfilename = 'pluck-ulaw.aifc'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 2
+    framerate = 11025
+    nframes = 48
+    comptype = b'ulaw'
+    compname = b''
+    frames = bytes.fromhex("""\
+      022CFFE8 497C0104 307C04DC 8284083C CB84069C 497C03DC BE8401AC 036CFE74 \
+      B684FA24 B684F344 2A7CEC04 19FCE704 EE04E504 C584E204 0E3CE104 EF04DF84 \
+      557CE204 FB24E804 12FCEF04 D784F744 9684FB64 F5C4FC24 083CFBA4 DF84FB24 \
+      11FCFA24 3E7CFB64 BA84FCB4 657CFF5C CF84041C 417C093C C1840EBC 517C12FC \
+      EF0416FC 828415FC 7D7C13FC 828412FC 497C0EBC 517C0DBC F0040F3C CD840FFC \
+      E5040CBC 617C0A3C 08BC0A3C 2C7C0B3C 517C0E3C 8A8410FC B6840EBC 457C0A3C \
+      """)
+    if sys.byteorder != 'big':
+        frames = audiotests.byteswap2(frames)
+    close_fd = True
+
+
+class AifcALAWTest(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = aifc
+    sndfilename = 'pluck-alaw.aifc'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 2
+    framerate = 11025
+    nframes = 48
+    comptype = b'alaw'
+    compname = b''
+    frames = bytes.fromhex("""\
+      0230FFE8 4A0000F8 310004E0 82000840 CB0006A0 4A0003F0 BE0001A8 0370FE78 \
+      BA00FA20 B600F340 2900EB80 1A80E680 ED80E480 C700E280 0E40E080 EF80E080 \
+      5600E280 FB20E880 1380EF80 D900F740 9600FB60 F5C0FC10 0840FBA0 DF00FB20 \
+      1180FA20 3F00FB60 BE00FCB0 6600FF58 CF000420 42000940 C1000EC0 52001280 \
+      EE801780 82001680 7E001480 82001280 4A000EC0 52000DC0 EF800F40 CF000FC0 \
+      E4800CC0 62000A40 08C00A40 2B000B40 52000E40 8A001180 B6000EC0 46000A40 \
+      """)
+    if sys.byteorder != 'big':
+        frames = audiotests.byteswap2(frames)
+    close_fd = True
+
+
+class AifcMiscTest(audiotests.AudioTests, unittest.TestCase):
     def test_skipunknown(self):
         #Issue 2245
         #This file contains chunk types aifc doesn't recognize.
-        self.f = aifc.open(self.sndfilepath)
-
-    def test_params(self):
-        f = self.f = aifc.open(self.sndfilepath)
-        params = f.getparams()
-        self.assertEqual(f.getfp().name, self.sndfilepath)
-        self.assertEqual(f.getnchannels(), 2)
-        self.assertEqual(f.getsampwidth(), 2)
-        self.assertEqual(f.getframerate(), 48000)
-        self.assertEqual(f.getnframes(), 14400)
-        self.assertEqual(f.getcomptype(), b'NONE')
-        self.assertEqual(f.getcompname(), b'not compressed')
-        self.assertEqual(
-            f.getparams(),
-            (2, 2, 48000, 14400, b'NONE', b'not compressed'),
-            )
-
-        params = f.getparams()
-        self.assertEqual(params.nchannels, 2)
-        self.assertEqual(params.sampwidth, 2)
-        self.assertEqual(params.framerate, 48000)
-        self.assertEqual(params.nframes, 14400)
-        self.assertEqual(params.comptype, b'NONE')
-        self.assertEqual(params.compname, b'not compressed')
+        self.f = aifc.open(findfile('Sine-1000Hz-300ms.aif'))
 
     def test_params_added(self):
         f = self.f = aifc.open(TESTFN, 'wb')
@@ -68,102 +181,6 @@
         self.assertEqual(params.comptype, f.getcomptype())
         self.assertEqual(params.compname, f.getcompname())
 
-    def test_getparams_picklable(self):
-        self.f = aifc.open(self.sndfilepath)
-        params = self.f.getparams()
-        dump = pickle.dumps(params)
-        self.assertEqual(pickle.loads(dump), params)
-        self.f.close()
-
-    def test_context_manager(self):
-        with open(self.sndfilepath, 'rb') as testfile:
-            with aifc.open(testfile) as f:
-                pass
-            self.assertEqual(testfile.closed, True)
-        with open(TESTFN, 'wb') as testfile:
-            with self.assertRaises(aifc.Error):
-                with aifc.open(testfile, 'wb') as fout:
-                    pass
-            self.assertEqual(testfile.closed, True)
-            fout.close() # do nothing
-
-    def test_read(self):
-        f = self.f = aifc.open(self.sndfilepath)
-        self.assertEqual(f.readframes(0), b'')
-        self.assertEqual(f.tell(), 0)
-        self.assertEqual(f.readframes(2), b'\x00\x00\x00\x00\x0b\xd4\x0b\xd4')
-        f.rewind()
-        pos0 = f.tell()
-        self.assertEqual(pos0, 0)
-        self.assertEqual(f.readframes(2), b'\x00\x00\x00\x00\x0b\xd4\x0b\xd4')
-        pos2 = f.tell()
-        self.assertEqual(pos2, 2)
-        self.assertEqual(f.readframes(2), b'\x17t\x17t"\xad"\xad')
-        f.setpos(pos2)
-        self.assertEqual(f.readframes(2), b'\x17t\x17t"\xad"\xad')
-        f.setpos(pos0)
-        self.assertEqual(f.readframes(2), b'\x00\x00\x00\x00\x0b\xd4\x0b\xd4')
-        with self.assertRaises(aifc.Error):
-            f.setpos(-1)
-        with self.assertRaises(aifc.Error):
-            f.setpos(f.getnframes() + 1)
-
-    def test_write(self):
-        f = self.f = aifc.open(self.sndfilepath)
-        fout = self.fout = aifc.open(TESTFN, 'wb')
-        fout.aifc()
-        fout.setparams(f.getparams())
-        for frame in range(f.getnframes()):
-            fout.writeframes(f.readframes(1))
-        fout.close()
-        fout = self.fout = aifc.open(TESTFN, 'rb')
-        f.rewind()
-        self.assertEqual(f.getparams(), fout.getparams())
-        self.assertEqual(f.readframes(5), fout.readframes(5))
-
-    def test_compress(self):
-        f = self.f = aifc.open(self.sndfilepath)
-        fout = self.fout = aifc.open(TESTFN, 'wb')
-        fout.aifc()
-        fout.setnchannels(f.getnchannels())
-        fout.setsampwidth(f.getsampwidth())
-        fout.setframerate(f.getframerate())
-        fout.setcomptype(b'ULAW', b'foo')
-        for frame in range(f.getnframes()):
-            fout.writeframes(f.readframes(1))
-        fout.close()
-        self.assertLess(
-            os.stat(TESTFN).st_size,
-            os.stat(self.sndfilepath).st_size*0.75,
-            )
-        fout = self.fout = aifc.open(TESTFN, 'rb')
-        f.rewind()
-        self.assertEqual(f.getparams()[0:3], fout.getparams()[0:3])
-        self.assertEqual(fout.getcomptype(), b'ULAW')
-        self.assertEqual(fout.getcompname(), b'foo')
-
-    def test_close(self):
-        class Wrapfile(object):
-            def __init__(self, file):
-                self.file = open(file, 'rb')
-                self.closed = False
-            def close(self):
-                self.file.close()
-                self.closed = True
-            def __getattr__(self, attr): return getattr(self.file, attr)
-        testfile = Wrapfile(self.sndfilepath)
-        f = self.f = aifc.open(testfile)
-        self.assertEqual(testfile.closed, False)
-        f.close()
-        self.assertEqual(testfile.closed, True)
-        testfile = open(TESTFN, 'wb')
-        fout = aifc.open(testfile, 'wb')
-        self.assertFalse(testfile.closed)
-        with self.assertRaises(aifc.Error):
-            fout.close()
-        self.assertTrue(testfile.closed)
-        fout.close() # do nothing
-
     def test_write_header_comptype_sampwidth(self):
         for comptype in (b'ULAW', b'ulaw', b'ALAW', b'alaw', b'G722'):
             fout = aifc.open(io.BytesIO(), 'wb')
@@ -258,8 +275,10 @@
         b += b'COMM' + struct.pack('>LhlhhLL', 18, 0, 0, 0, 0, 0, 0)
         b += b'SSND' + struct.pack('>L', 8) + b'\x00' * 8
         b += b'MARK' + struct.pack('>LhB', 3, 1, 1)
-        with self.assertWarns(UserWarning):
+        with self.assertWarns(UserWarning) as cm:
             f = aifc.open(io.BytesIO(b))
+        self.assertEqual(str(cm.warning), 'Warning: MARK chunk contains '
+                                          'only 0 markers instead of 1')
         self.assertEqual(f.getmarkers(), None)
 
     def test_read_comm_kludge_compname_even(self):
@@ -267,8 +286,9 @@
         b += b'COMM' + struct.pack('>LhlhhLL', 18, 0, 0, 0, 0, 0, 0)
         b += b'NONE' + struct.pack('B', 4) + b'even' + b'\x00'
         b += b'SSND' + struct.pack('>L', 8) + b'\x00' * 8
-        with self.assertWarns(UserWarning):
+        with self.assertWarns(UserWarning) as cm:
             f = aifc.open(io.BytesIO(b))
+        self.assertEqual(str(cm.warning), 'Warning: bad COMM chunk size')
         self.assertEqual(f.getcompname(), b'even')
 
     def test_read_comm_kludge_compname_odd(self):
@@ -276,8 +296,9 @@
         b += b'COMM' + struct.pack('>LhlhhLL', 18, 0, 0, 0, 0, 0, 0)
         b += b'NONE' + struct.pack('B', 3) + b'odd'
         b += b'SSND' + struct.pack('>L', 8) + b'\x00' * 8
-        with self.assertWarns(UserWarning):
+        with self.assertWarns(UserWarning) as cm:
             f = aifc.open(io.BytesIO(b))
+        self.assertEqual(str(cm.warning), 'Warning: bad COMM chunk size')
         self.assertEqual(f.getcompname(), b'odd')
 
     def test_write_params_raises(self):
@@ -375,10 +396,5 @@
         f.close()
 
 
-def test_main():
-    run_unittest(AIFCTest)
-    run_unittest(AIFCLowLevelTest)
-
-
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py
index a44ee07..a5c4f23 100755
--- a/Lib/test/test_array.py
+++ b/Lib/test/test_array.py
@@ -11,6 +11,7 @@
 import io
 import math
 import struct
+import sys
 import warnings
 
 import array
@@ -993,15 +994,15 @@
         s = None
         self.assertRaises(ReferenceError, len, p)
 
+    @unittest.skipUnless(hasattr(sys, 'getrefcount'),
+                         'test needs sys.getrefcount()')
     def test_bug_782369(self):
-        import sys
-        if hasattr(sys, "getrefcount"):
-            for i in range(10):
-                b = array.array('B', range(64))
-            rc = sys.getrefcount(10)
-            for i in range(10):
-                b = array.array('B', range(64))
-            self.assertEqual(rc, sys.getrefcount(10))
+        for i in range(10):
+            b = array.array('B', range(64))
+        rc = sys.getrefcount(10)
+        for i in range(10):
+            b = array.array('B', range(64))
+        self.assertEqual(rc, sys.getrefcount(10))
 
     def test_subclass_with_kwargs(self):
         # SF bug #1486663 -- this used to erroneously raise a TypeError
diff --git a/Lib/test/test_asyncio/__init__.py b/Lib/test/test_asyncio/__init__.py
new file mode 100644
index 0000000..024d3e1
--- /dev/null
+++ b/Lib/test/test_asyncio/__init__.py
@@ -0,0 +1,31 @@
+import os
+import sys
+import unittest
+from test.support import run_unittest
+
+try:
+    import threading
+except ImportError:
+    raise unittest.SkipTest("No module named '_thread'")
+
+
+def suite():
+    tests_file = os.path.join(os.path.dirname(__file__), 'tests.txt')
+    with open(tests_file) as fp:
+        test_names = fp.read().splitlines()
+    tests = unittest.TestSuite()
+    loader = unittest.TestLoader()
+    for test_name in test_names:
+        mod_name = 'test.' + test_name
+        try:
+            __import__(mod_name)
+        except unittest.SkipTest:
+            pass
+        else:
+            mod = sys.modules[mod_name]
+            tests.addTests(loader.loadTestsFromModule(mod))
+    return tests
+
+
+def test_main():
+    run_unittest(suite())
diff --git a/Lib/test/test_asyncio/__main__.py b/Lib/test/test_asyncio/__main__.py
new file mode 100644
index 0000000..b549492
--- /dev/null
+++ b/Lib/test/test_asyncio/__main__.py
@@ -0,0 +1,5 @@
+from . import test_main
+
+
+if __name__ == '__main__':
+    test_main()
diff --git a/Lib/test/test_asyncio/echo.py b/Lib/test/test_asyncio/echo.py
new file mode 100644
index 0000000..006364b
--- /dev/null
+++ b/Lib/test/test_asyncio/echo.py
@@ -0,0 +1,8 @@
+import os
+
+if __name__ == '__main__':
+    while True:
+        buf = os.read(0, 1024)
+        if not buf:
+            break
+        os.write(1, buf)
diff --git a/Lib/test/test_asyncio/echo2.py b/Lib/test/test_asyncio/echo2.py
new file mode 100644
index 0000000..e83ca09
--- /dev/null
+++ b/Lib/test/test_asyncio/echo2.py
@@ -0,0 +1,6 @@
+import os
+
+if __name__ == '__main__':
+    buf = os.read(0, 1024)
+    os.write(1, b'OUT:'+buf)
+    os.write(2, b'ERR:'+buf)
diff --git a/Lib/test/test_asyncio/echo3.py b/Lib/test/test_asyncio/echo3.py
new file mode 100644
index 0000000..0644967
--- /dev/null
+++ b/Lib/test/test_asyncio/echo3.py
@@ -0,0 +1,11 @@
+import os
+
+if __name__ == '__main__':
+    while True:
+        buf = os.read(0, 1024)
+        if not buf:
+            break
+        try:
+            os.write(1, b'OUT:'+buf)
+        except OSError as ex:
+            os.write(2, b'ERR:' + ex.__class__.__name__.encode('ascii'))
diff --git a/Lib/test/test_asyncio/sample.crt b/Lib/test/test_asyncio/sample.crt
new file mode 100644
index 0000000..6a1e3f3
--- /dev/null
+++ b/Lib/test/test_asyncio/sample.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICMzCCAZwCCQDFl4ys0fU7iTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuLUZyYW5jaXNjbzEi
+MCAGA1UECgwZUHl0aG9uIFNvZnR3YXJlIEZvbmRhdGlvbjAeFw0xMzAzMTgyMDA3
+MjhaFw0yMzAzMTYyMDA3MjhaMF4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxp
+Zm9ybmlhMRYwFAYDVQQHDA1TYW4tRnJhbmNpc2NvMSIwIAYDVQQKDBlQeXRob24g
+U29mdHdhcmUgRm9uZGF0aW9uMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCn
+t3s+J7L0xP/YdAQOacpPi9phlrzKZhcXL3XMu2LCUg2fNJpx/47Vc5TZSaO11uO7
+gdwVz3Z7Q2epAgwo59JLffLt5fia8+a/SlPweI/j4+wcIIIiqusnLfpqR8cIAavg
+Z06cLYCDvb9wMlheIvSJY12skc1nnphWS2YJ0Xm6uQIDAQABMA0GCSqGSIb3DQEB
+BQUAA4GBAE9PknG6pv72+5z/gsDGYy8sK5UNkbWSNr4i4e5lxVsF03+/M71H+3AB
+MxVX4+A+Vlk2fmU+BrdHIIUE0r1dDcO3josQ9hc9OJpp5VLSQFP8VeuJCmzYPp9I
+I8WbW93cnXnChTrYQVdgVoFdv7GE9YgU7NYkrGIM0nZl1/f/bHPB
+-----END CERTIFICATE-----
diff --git a/Lib/test/test_asyncio/sample.key b/Lib/test/test_asyncio/sample.key
new file mode 100644
index 0000000..edfea8d
--- /dev/null
+++ b/Lib/test/test_asyncio/sample.key
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQCnt3s+J7L0xP/YdAQOacpPi9phlrzKZhcXL3XMu2LCUg2fNJpx
+/47Vc5TZSaO11uO7gdwVz3Z7Q2epAgwo59JLffLt5fia8+a/SlPweI/j4+wcIIIi
+qusnLfpqR8cIAavgZ06cLYCDvb9wMlheIvSJY12skc1nnphWS2YJ0Xm6uQIDAQAB
+AoGABfm8k19Yue3W68BecKEGS0VBV57GRTPT+MiBGvVGNIQ15gk6w3sGfMZsdD1y
+bsUkQgcDb2d/4i5poBTpl/+Cd41V+c20IC/sSl5X1IEreHMKSLhy/uyjyiyfXlP1
+iXhToFCgLWwENWc8LzfUV8vuAV5WG6oL9bnudWzZxeqx8V0CQQDR7xwVj6LN70Eb
+DUhSKLkusmFw5Gk9NJ/7wZ4eHg4B8c9KNVvSlLCLhcsVTQXuqYeFpOqytI45SneP
+lr0vrvsDAkEAzITYiXu6ox5huDCG7imX2W9CAYuX638urLxBqBXMS7GqBzojD6RL
+21Q8oPwJWJquERa3HDScq1deiQbM9uKIkwJBAIa1PLslGN216Xv3UPHPScyKD/aF
+ynXIv+OnANPoiyp6RH4ksQ/18zcEGiVH8EeNpvV9tlAHhb+DZibQHgNr74sCQQC0
+zhToplu/bVKSlUQUNO0rqrI9z30FErDewKeCw5KSsIRSU1E/uM3fHr9iyq4wiL6u
+GNjUtKZ0y46lsT9uW6LFAkB5eqeEQnshAdr3X5GykWHJ8DDGBXPPn6Rce1NX4RSq
+V9khG2z1bFyfo+hMqpYnF2k32hVq3E54RS8YYnwBsVof
+-----END RSA PRIVATE KEY-----
diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
new file mode 100644
index 0000000..9b883c5
--- /dev/null
+++ b/Lib/test/test_asyncio/test_base_events.py
@@ -0,0 +1,670 @@
+"""Tests for base_events.py"""
+
+import errno
+import logging
+import socket
+import time
+import unittest
+import unittest.mock
+from test.support import find_unused_port, IPV6_ENABLED
+
+from asyncio import base_events
+from asyncio import constants
+from asyncio import events
+from asyncio import futures
+from asyncio import protocols
+from asyncio import tasks
+from asyncio import test_utils
+
+
+class BaseEventLoopTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = base_events.BaseEventLoop()
+        self.loop._selector = unittest.mock.Mock()
+        events.set_event_loop(None)
+
+    def test_not_implemented(self):
+        m = unittest.mock.Mock()
+        self.assertRaises(
+            NotImplementedError,
+            self.loop._make_socket_transport, m, m)
+        self.assertRaises(
+            NotImplementedError,
+            self.loop._make_ssl_transport, m, m, m, m)
+        self.assertRaises(
+            NotImplementedError,
+            self.loop._make_datagram_transport, m, m)
+        self.assertRaises(
+            NotImplementedError, self.loop._process_events, [])
+        self.assertRaises(
+            NotImplementedError, self.loop._write_to_self)
+        self.assertRaises(
+            NotImplementedError, self.loop._read_from_self)
+        self.assertRaises(
+            NotImplementedError,
+            self.loop._make_read_pipe_transport, m, m)
+        self.assertRaises(
+            NotImplementedError,
+            self.loop._make_write_pipe_transport, m, m)
+        gen = self.loop._make_subprocess_transport(m, m, m, m, m, m, m)
+        self.assertRaises(NotImplementedError, next, iter(gen))
+
+    def test__add_callback_handle(self):
+        h = events.Handle(lambda: False, ())
+
+        self.loop._add_callback(h)
+        self.assertFalse(self.loop._scheduled)
+        self.assertIn(h, self.loop._ready)
+
+    def test__add_callback_timer(self):
+        h = events.TimerHandle(time.monotonic()+10, lambda: False, ())
+
+        self.loop._add_callback(h)
+        self.assertIn(h, self.loop._scheduled)
+
+    def test__add_callback_cancelled_handle(self):
+        h = events.Handle(lambda: False, ())
+        h.cancel()
+
+        self.loop._add_callback(h)
+        self.assertFalse(self.loop._scheduled)
+        self.assertFalse(self.loop._ready)
+
+    def test_set_default_executor(self):
+        executor = unittest.mock.Mock()
+        self.loop.set_default_executor(executor)
+        self.assertIs(executor, self.loop._default_executor)
+
+    def test_getnameinfo(self):
+        sockaddr = unittest.mock.Mock()
+        self.loop.run_in_executor = unittest.mock.Mock()
+        self.loop.getnameinfo(sockaddr)
+        self.assertEqual(
+            (None, socket.getnameinfo, sockaddr, 0),
+            self.loop.run_in_executor.call_args[0])
+
+    def test_call_soon(self):
+        def cb():
+            pass
+
+        h = self.loop.call_soon(cb)
+        self.assertEqual(h._callback, cb)
+        self.assertIsInstance(h, events.Handle)
+        self.assertIn(h, self.loop._ready)
+
+    def test_call_later(self):
+        def cb():
+            pass
+
+        h = self.loop.call_later(10.0, cb)
+        self.assertIsInstance(h, events.TimerHandle)
+        self.assertIn(h, self.loop._scheduled)
+        self.assertNotIn(h, self.loop._ready)
+
+    def test_call_later_negative_delays(self):
+        calls = []
+
+        def cb(arg):
+            calls.append(arg)
+
+        self.loop._process_events = unittest.mock.Mock()
+        self.loop.call_later(-1, cb, 'a')
+        self.loop.call_later(-2, cb, 'b')
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(calls, ['b', 'a'])
+
+    def test_time_and_call_at(self):
+        def cb():
+            self.loop.stop()
+
+        self.loop._process_events = unittest.mock.Mock()
+        when = self.loop.time() + 0.1
+        self.loop.call_at(when, cb)
+        t0 = self.loop.time()
+        self.loop.run_forever()
+        t1 = self.loop.time()
+        self.assertTrue(0.09 <= t1-t0 <= 0.9, t1-t0)
+
+    def test_run_once_in_executor_handle(self):
+        def cb():
+            pass
+
+        self.assertRaises(
+            AssertionError, self.loop.run_in_executor,
+            None, events.Handle(cb, ()), ('',))
+        self.assertRaises(
+            AssertionError, self.loop.run_in_executor,
+            None, events.TimerHandle(10, cb, ()))
+
+    def test_run_once_in_executor_cancelled(self):
+        def cb():
+            pass
+        h = events.Handle(cb, ())
+        h.cancel()
+
+        f = self.loop.run_in_executor(None, h)
+        self.assertIsInstance(f, futures.Future)
+        self.assertTrue(f.done())
+        self.assertIsNone(f.result())
+
+    def test_run_once_in_executor_plain(self):
+        def cb():
+            pass
+        h = events.Handle(cb, ())
+        f = futures.Future(loop=self.loop)
+        executor = unittest.mock.Mock()
+        executor.submit.return_value = f
+
+        self.loop.set_default_executor(executor)
+
+        res = self.loop.run_in_executor(None, h)
+        self.assertIs(f, res)
+
+        executor = unittest.mock.Mock()
+        executor.submit.return_value = f
+        res = self.loop.run_in_executor(executor, h)
+        self.assertIs(f, res)
+        self.assertTrue(executor.submit.called)
+
+        f.cancel()  # Don't complain about abandoned Future.
+
+    def test__run_once(self):
+        h1 = events.TimerHandle(time.monotonic() + 0.1, lambda: True, ())
+        h2 = events.TimerHandle(time.monotonic() + 10.0, lambda: True, ())
+
+        h1.cancel()
+
+        self.loop._process_events = unittest.mock.Mock()
+        self.loop._scheduled.append(h1)
+        self.loop._scheduled.append(h2)
+        self.loop._run_once()
+
+        t = self.loop._selector.select.call_args[0][0]
+        self.assertTrue(9.99 < t < 10.1, t)
+        self.assertEqual([h2], self.loop._scheduled)
+        self.assertTrue(self.loop._process_events.called)
+
+    @unittest.mock.patch('asyncio.base_events.time')
+    @unittest.mock.patch('asyncio.base_events.logger')
+    def test__run_once_logging(self, m_logging, m_time):
+        # Log to INFO level if timeout > 1.0 sec.
+        idx = -1
+        data = [10.0, 10.0, 12.0, 13.0]
+
+        def monotonic():
+            nonlocal data, idx
+            idx += 1
+            return data[idx]
+
+        m_time.monotonic = monotonic
+        m_logging.INFO = logging.INFO
+        m_logging.DEBUG = logging.DEBUG
+
+        self.loop._scheduled.append(
+            events.TimerHandle(11.0, lambda: True, ()))
+        self.loop._process_events = unittest.mock.Mock()
+        self.loop._run_once()
+        self.assertEqual(logging.INFO, m_logging.log.call_args[0][0])
+
+        idx = -1
+        data = [10.0, 10.0, 10.3, 13.0]
+        self.loop._scheduled = [events.TimerHandle(11.0, lambda:True, ())]
+        self.loop._run_once()
+        self.assertEqual(logging.DEBUG, m_logging.log.call_args[0][0])
+
+    def test__run_once_schedule_handle(self):
+        handle = None
+        processed = False
+
+        def cb(loop):
+            nonlocal processed, handle
+            processed = True
+            handle = loop.call_soon(lambda: True)
+
+        h = events.TimerHandle(time.monotonic() - 1, cb, (self.loop,))
+
+        self.loop._process_events = unittest.mock.Mock()
+        self.loop._scheduled.append(h)
+        self.loop._run_once()
+
+        self.assertTrue(processed)
+        self.assertEqual([handle], list(self.loop._ready))
+
+    def test_run_until_complete_type_error(self):
+        self.assertRaises(
+            TypeError, self.loop.run_until_complete, 'blah')
+
+
+class MyProto(protocols.Protocol):
+    done = None
+
+    def __init__(self, create_future=False):
+        self.state = 'INITIAL'
+        self.nbytes = 0
+        if create_future:
+            self.done = futures.Future()
+
+    def connection_made(self, transport):
+        self.transport = transport
+        assert self.state == 'INITIAL', self.state
+        self.state = 'CONNECTED'
+        transport.write(b'GET / HTTP/1.0\r\nHost: example.com\r\n\r\n')
+
+    def data_received(self, data):
+        assert self.state == 'CONNECTED', self.state
+        self.nbytes += len(data)
+
+    def eof_received(self):
+        assert self.state == 'CONNECTED', self.state
+        self.state = 'EOF'
+
+    def connection_lost(self, exc):
+        assert self.state in ('CONNECTED', 'EOF'), self.state
+        self.state = 'CLOSED'
+        if self.done:
+            self.done.set_result(None)
+
+
+class MyDatagramProto(protocols.DatagramProtocol):
+    done = None
+
+    def __init__(self, create_future=False):
+        self.state = 'INITIAL'
+        self.nbytes = 0
+        if create_future:
+            self.done = futures.Future()
+
+    def connection_made(self, transport):
+        self.transport = transport
+        assert self.state == 'INITIAL', self.state
+        self.state = 'INITIALIZED'
+
+    def datagram_received(self, data, addr):
+        assert self.state == 'INITIALIZED', self.state
+        self.nbytes += len(data)
+
+    def connection_refused(self, exc):
+        assert self.state == 'INITIALIZED', self.state
+
+    def connection_lost(self, exc):
+        assert self.state == 'INITIALIZED', self.state
+        self.state = 'CLOSED'
+        if self.done:
+            self.done.set_result(None)
+
+
+class BaseEventLoopWithSelectorTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = events.new_event_loop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+
+    @unittest.mock.patch('asyncio.base_events.socket')
+    def test_create_connection_multiple_errors(self, m_socket):
+
+        class MyProto(protocols.Protocol):
+            pass
+
+        @tasks.coroutine
+        def getaddrinfo(*args, **kw):
+            yield from []
+            return [(2, 1, 6, '', ('107.6.106.82', 80)),
+                    (2, 1, 6, '', ('107.6.106.82', 80))]
+
+        def getaddrinfo_task(*args, **kwds):
+            return tasks.Task(getaddrinfo(*args, **kwds), loop=self.loop)
+
+        idx = -1
+        errors = ['err1', 'err2']
+
+        def _socket(*args, **kw):
+            nonlocal idx, errors
+            idx += 1
+            raise OSError(errors[idx])
+
+        m_socket.socket = _socket
+
+        self.loop.getaddrinfo = getaddrinfo_task
+
+        coro = self.loop.create_connection(MyProto, 'example.com', 80)
+        with self.assertRaises(OSError) as cm:
+            self.loop.run_until_complete(coro)
+
+        self.assertEqual(str(cm.exception), 'Multiple exceptions: err1, err2')
+
+    def test_create_connection_host_port_sock(self):
+        coro = self.loop.create_connection(
+            MyProto, 'example.com', 80, sock=object())
+        self.assertRaises(ValueError, self.loop.run_until_complete, coro)
+
+    def test_create_connection_no_host_port_sock(self):
+        coro = self.loop.create_connection(MyProto)
+        self.assertRaises(ValueError, self.loop.run_until_complete, coro)
+
+    def test_create_connection_no_getaddrinfo(self):
+        @tasks.coroutine
+        def getaddrinfo(*args, **kw):
+            yield from []
+
+        def getaddrinfo_task(*args, **kwds):
+            return tasks.Task(getaddrinfo(*args, **kwds), loop=self.loop)
+
+        self.loop.getaddrinfo = getaddrinfo_task
+        coro = self.loop.create_connection(MyProto, 'example.com', 80)
+        self.assertRaises(
+            OSError, self.loop.run_until_complete, coro)
+
+    def test_create_connection_connect_err(self):
+        @tasks.coroutine
+        def getaddrinfo(*args, **kw):
+            yield from []
+            return [(2, 1, 6, '', ('107.6.106.82', 80))]
+
+        def getaddrinfo_task(*args, **kwds):
+            return tasks.Task(getaddrinfo(*args, **kwds), loop=self.loop)
+
+        self.loop.getaddrinfo = getaddrinfo_task
+        self.loop.sock_connect = unittest.mock.Mock()
+        self.loop.sock_connect.side_effect = OSError
+
+        coro = self.loop.create_connection(MyProto, 'example.com', 80)
+        self.assertRaises(
+            OSError, self.loop.run_until_complete, coro)
+
+    def test_create_connection_multiple(self):
+        @tasks.coroutine
+        def getaddrinfo(*args, **kw):
+            return [(2, 1, 6, '', ('0.0.0.1', 80)),
+                    (2, 1, 6, '', ('0.0.0.2', 80))]
+
+        def getaddrinfo_task(*args, **kwds):
+            return tasks.Task(getaddrinfo(*args, **kwds), loop=self.loop)
+
+        self.loop.getaddrinfo = getaddrinfo_task
+        self.loop.sock_connect = unittest.mock.Mock()
+        self.loop.sock_connect.side_effect = OSError
+
+        coro = self.loop.create_connection(
+            MyProto, 'example.com', 80, family=socket.AF_INET)
+        with self.assertRaises(OSError):
+            self.loop.run_until_complete(coro)
+
+    @unittest.mock.patch('asyncio.base_events.socket')
+    def test_create_connection_multiple_errors_local_addr(self, m_socket):
+
+        def bind(addr):
+            if addr[0] == '0.0.0.1':
+                err = OSError('Err')
+                err.strerror = 'Err'
+                raise err
+
+        m_socket.socket.return_value.bind = bind
+
+        @tasks.coroutine
+        def getaddrinfo(*args, **kw):
+            return [(2, 1, 6, '', ('0.0.0.1', 80)),
+                    (2, 1, 6, '', ('0.0.0.2', 80))]
+
+        def getaddrinfo_task(*args, **kwds):
+            return tasks.Task(getaddrinfo(*args, **kwds), loop=self.loop)
+
+        self.loop.getaddrinfo = getaddrinfo_task
+        self.loop.sock_connect = unittest.mock.Mock()
+        self.loop.sock_connect.side_effect = OSError('Err2')
+
+        coro = self.loop.create_connection(
+            MyProto, 'example.com', 80, family=socket.AF_INET,
+            local_addr=(None, 8080))
+        with self.assertRaises(OSError) as cm:
+            self.loop.run_until_complete(coro)
+
+        self.assertTrue(str(cm.exception).startswith('Multiple exceptions: '))
+        self.assertTrue(m_socket.socket.return_value.close.called)
+
+    def test_create_connection_no_local_addr(self):
+        @tasks.coroutine
+        def getaddrinfo(host, *args, **kw):
+            if host == 'example.com':
+                return [(2, 1, 6, '', ('107.6.106.82', 80)),
+                        (2, 1, 6, '', ('107.6.106.82', 80))]
+            else:
+                return []
+
+        def getaddrinfo_task(*args, **kwds):
+            return tasks.Task(getaddrinfo(*args, **kwds), loop=self.loop)
+        self.loop.getaddrinfo = getaddrinfo_task
+
+        coro = self.loop.create_connection(
+            MyProto, 'example.com', 80, family=socket.AF_INET,
+            local_addr=(None, 8080))
+        self.assertRaises(
+            OSError, self.loop.run_until_complete, coro)
+
+    def test_create_connection_ssl_server_hostname_default(self):
+        self.loop.getaddrinfo = unittest.mock.Mock()
+
+        def mock_getaddrinfo(*args, **kwds):
+            f = futures.Future(loop=self.loop)
+            f.set_result([(socket.AF_INET, socket.SOCK_STREAM,
+                           socket.SOL_TCP, '', ('1.2.3.4', 80))])
+            return f
+
+        self.loop.getaddrinfo.side_effect = mock_getaddrinfo
+        self.loop.sock_connect = unittest.mock.Mock()
+        self.loop.sock_connect.return_value = ()
+        self.loop._make_ssl_transport = unittest.mock.Mock()
+
+        def mock_make_ssl_transport(sock, protocol, sslcontext, waiter,
+                                    **kwds):
+            waiter.set_result(None)
+
+        self.loop._make_ssl_transport.side_effect = mock_make_ssl_transport
+        ANY = unittest.mock.ANY
+        # First try the default server_hostname.
+        self.loop._make_ssl_transport.reset_mock()
+        coro = self.loop.create_connection(MyProto, 'python.org', 80, ssl=True)
+        self.loop.run_until_complete(coro)
+        self.loop._make_ssl_transport.assert_called_with(
+            ANY, ANY, ANY, ANY,
+            server_side=False,
+            server_hostname='python.org')
+        # Next try an explicit server_hostname.
+        self.loop._make_ssl_transport.reset_mock()
+        coro = self.loop.create_connection(MyProto, 'python.org', 80, ssl=True,
+                                           server_hostname='perl.com')
+        self.loop.run_until_complete(coro)
+        self.loop._make_ssl_transport.assert_called_with(
+            ANY, ANY, ANY, ANY,
+            server_side=False,
+            server_hostname='perl.com')
+        # Finally try an explicit empty server_hostname.
+        self.loop._make_ssl_transport.reset_mock()
+        coro = self.loop.create_connection(MyProto, 'python.org', 80, ssl=True,
+                                           server_hostname='')
+        self.loop.run_until_complete(coro)
+        self.loop._make_ssl_transport.assert_called_with(ANY, ANY, ANY, ANY,
+                                                         server_side=False,
+                                                         server_hostname='')
+
+    def test_create_connection_no_ssl_server_hostname_errors(self):
+        # When not using ssl, server_hostname must be None.
+        coro = self.loop.create_connection(MyProto, 'python.org', 80,
+                                           server_hostname='')
+        self.assertRaises(ValueError, self.loop.run_until_complete, coro)
+        coro = self.loop.create_connection(MyProto, 'python.org', 80,
+                                           server_hostname='python.org')
+        self.assertRaises(ValueError, self.loop.run_until_complete, coro)
+
+    def test_create_connection_ssl_server_hostname_errors(self):
+        # When using ssl, server_hostname may be None if host is non-empty.
+        coro = self.loop.create_connection(MyProto, '', 80, ssl=True)
+        self.assertRaises(ValueError, self.loop.run_until_complete, coro)
+        coro = self.loop.create_connection(MyProto, None, 80, ssl=True)
+        self.assertRaises(ValueError, self.loop.run_until_complete, coro)
+        coro = self.loop.create_connection(MyProto, None, None,
+                                           ssl=True, sock=socket.socket())
+        self.assertRaises(ValueError, self.loop.run_until_complete, coro)
+
+    def test_create_server_empty_host(self):
+        # if host is empty string use None instead
+        host = object()
+
+        @tasks.coroutine
+        def getaddrinfo(*args, **kw):
+            nonlocal host
+            host = args[0]
+            yield from []
+
+        def getaddrinfo_task(*args, **kwds):
+            return tasks.Task(getaddrinfo(*args, **kwds), loop=self.loop)
+
+        self.loop.getaddrinfo = getaddrinfo_task
+        fut = self.loop.create_server(MyProto, '', 0)
+        self.assertRaises(OSError, self.loop.run_until_complete, fut)
+        self.assertIsNone(host)
+
+    def test_create_server_host_port_sock(self):
+        fut = self.loop.create_server(
+            MyProto, '0.0.0.0', 0, sock=object())
+        self.assertRaises(ValueError, self.loop.run_until_complete, fut)
+
+    def test_create_server_no_host_port_sock(self):
+        fut = self.loop.create_server(MyProto)
+        self.assertRaises(ValueError, self.loop.run_until_complete, fut)
+
+    def test_create_server_no_getaddrinfo(self):
+        getaddrinfo = self.loop.getaddrinfo = unittest.mock.Mock()
+        getaddrinfo.return_value = []
+
+        f = self.loop.create_server(MyProto, '0.0.0.0', 0)
+        self.assertRaises(OSError, self.loop.run_until_complete, f)
+
+    @unittest.mock.patch('asyncio.base_events.socket')
+    def test_create_server_cant_bind(self, m_socket):
+
+        class Err(OSError):
+            strerror = 'error'
+
+        m_socket.getaddrinfo.return_value = [
+            (2, 1, 6, '', ('127.0.0.1', 10100))]
+        m_sock = m_socket.socket.return_value = unittest.mock.Mock()
+        m_sock.bind.side_effect = Err
+
+        fut = self.loop.create_server(MyProto, '0.0.0.0', 0)
+        self.assertRaises(OSError, self.loop.run_until_complete, fut)
+        self.assertTrue(m_sock.close.called)
+
+    @unittest.mock.patch('asyncio.base_events.socket')
+    def test_create_datagram_endpoint_no_addrinfo(self, m_socket):
+        m_socket.getaddrinfo.return_value = []
+
+        coro = self.loop.create_datagram_endpoint(
+            MyDatagramProto, local_addr=('localhost', 0))
+        self.assertRaises(
+            OSError, self.loop.run_until_complete, coro)
+
+    def test_create_datagram_endpoint_addr_error(self):
+        coro = self.loop.create_datagram_endpoint(
+            MyDatagramProto, local_addr='localhost')
+        self.assertRaises(
+            AssertionError, self.loop.run_until_complete, coro)
+        coro = self.loop.create_datagram_endpoint(
+            MyDatagramProto, local_addr=('localhost', 1, 2, 3))
+        self.assertRaises(
+            AssertionError, self.loop.run_until_complete, coro)
+
+    def test_create_datagram_endpoint_connect_err(self):
+        self.loop.sock_connect = unittest.mock.Mock()
+        self.loop.sock_connect.side_effect = OSError
+
+        coro = self.loop.create_datagram_endpoint(
+            protocols.DatagramProtocol, remote_addr=('127.0.0.1', 0))
+        self.assertRaises(
+            OSError, self.loop.run_until_complete, coro)
+
+    @unittest.mock.patch('asyncio.base_events.socket')
+    def test_create_datagram_endpoint_socket_err(self, m_socket):
+        m_socket.getaddrinfo = socket.getaddrinfo
+        m_socket.socket.side_effect = OSError
+
+        coro = self.loop.create_datagram_endpoint(
+            protocols.DatagramProtocol, family=socket.AF_INET)
+        self.assertRaises(
+            OSError, self.loop.run_until_complete, coro)
+
+        coro = self.loop.create_datagram_endpoint(
+            protocols.DatagramProtocol, local_addr=('127.0.0.1', 0))
+        self.assertRaises(
+            OSError, self.loop.run_until_complete, coro)
+
+    @unittest.skipUnless(IPV6_ENABLED, 'IPv6 not supported or enabled')
+    def test_create_datagram_endpoint_no_matching_family(self):
+        coro = self.loop.create_datagram_endpoint(
+            protocols.DatagramProtocol,
+            remote_addr=('127.0.0.1', 0), local_addr=('::1', 0))
+        self.assertRaises(
+            ValueError, self.loop.run_until_complete, coro)
+
+    @unittest.mock.patch('asyncio.base_events.socket')
+    def test_create_datagram_endpoint_setblk_err(self, m_socket):
+        m_socket.socket.return_value.setblocking.side_effect = OSError
+
+        coro = self.loop.create_datagram_endpoint(
+            protocols.DatagramProtocol, family=socket.AF_INET)
+        self.assertRaises(
+            OSError, self.loop.run_until_complete, coro)
+        self.assertTrue(
+            m_socket.socket.return_value.close.called)
+
+    def test_create_datagram_endpoint_noaddr_nofamily(self):
+        coro = self.loop.create_datagram_endpoint(
+            protocols.DatagramProtocol)
+        self.assertRaises(ValueError, self.loop.run_until_complete, coro)
+
+    @unittest.mock.patch('asyncio.base_events.socket')
+    def test_create_datagram_endpoint_cant_bind(self, m_socket):
+        class Err(OSError):
+            pass
+
+        m_socket.AF_INET6 = socket.AF_INET6
+        m_socket.getaddrinfo = socket.getaddrinfo
+        m_sock = m_socket.socket.return_value = unittest.mock.Mock()
+        m_sock.bind.side_effect = Err
+
+        fut = self.loop.create_datagram_endpoint(
+            MyDatagramProto,
+            local_addr=('127.0.0.1', 0), family=socket.AF_INET)
+        self.assertRaises(Err, self.loop.run_until_complete, fut)
+        self.assertTrue(m_sock.close.called)
+
+    def test_accept_connection_retry(self):
+        sock = unittest.mock.Mock()
+        sock.accept.side_effect = BlockingIOError()
+
+        self.loop._accept_connection(MyProto, sock)
+        self.assertFalse(sock.close.called)
+
+    @unittest.mock.patch('asyncio.selector_events.logger')
+    def test_accept_connection_exception(self, m_log):
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        sock.accept.side_effect = OSError(errno.EMFILE, 'Too many open files')
+        self.loop.remove_reader = unittest.mock.Mock()
+        self.loop.call_later = unittest.mock.Mock()
+
+        self.loop._accept_connection(MyProto, sock)
+        self.assertTrue(m_log.exception.called)
+        self.assertFalse(sock.close.called)
+        self.loop.remove_reader.assert_called_with(10)
+        self.loop.call_later.assert_called_with(constants.ACCEPT_RETRY_DELAY,
+                                                # self.loop._start_serving
+                                                unittest.mock.ANY,
+                                                MyProto, sock, None, None)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
new file mode 100644
index 0000000..00bd408
--- /dev/null
+++ b/Lib/test/test_asyncio/test_events.py
@@ -0,0 +1,1651 @@
+"""Tests for events.py."""
+
+import functools
+import gc
+import io
+import os
+import signal
+import socket
+try:
+    import ssl
+except ImportError:
+    ssl = None
+import subprocess
+import sys
+import threading
+import time
+import errno
+import unittest
+import unittest.mock
+from test.support import find_unused_port, IPV6_ENABLED
+
+
+from asyncio import futures
+from asyncio import events
+from asyncio import transports
+from asyncio import protocols
+from asyncio import selector_events
+from asyncio import tasks
+from asyncio import test_utils
+from asyncio import locks
+
+
+class MyProto(protocols.Protocol):
+    done = None
+
+    def __init__(self, loop=None):
+        self.state = 'INITIAL'
+        self.nbytes = 0
+        if loop is not None:
+            self.done = futures.Future(loop=loop)
+
+    def connection_made(self, transport):
+        self.transport = transport
+        assert self.state == 'INITIAL', self.state
+        self.state = 'CONNECTED'
+        transport.write(b'GET / HTTP/1.0\r\nHost: example.com\r\n\r\n')
+
+    def data_received(self, data):
+        assert self.state == 'CONNECTED', self.state
+        self.nbytes += len(data)
+
+    def eof_received(self):
+        assert self.state == 'CONNECTED', self.state
+        self.state = 'EOF'
+
+    def connection_lost(self, exc):
+        assert self.state in ('CONNECTED', 'EOF'), self.state
+        self.state = 'CLOSED'
+        if self.done:
+            self.done.set_result(None)
+
+
+class MyDatagramProto(protocols.DatagramProtocol):
+    done = None
+
+    def __init__(self, loop=None):
+        self.state = 'INITIAL'
+        self.nbytes = 0
+        if loop is not None:
+            self.done = futures.Future(loop=loop)
+
+    def connection_made(self, transport):
+        self.transport = transport
+        assert self.state == 'INITIAL', self.state
+        self.state = 'INITIALIZED'
+
+    def datagram_received(self, data, addr):
+        assert self.state == 'INITIALIZED', self.state
+        self.nbytes += len(data)
+
+    def connection_refused(self, exc):
+        assert self.state == 'INITIALIZED', self.state
+
+    def connection_lost(self, exc):
+        assert self.state == 'INITIALIZED', self.state
+        self.state = 'CLOSED'
+        if self.done:
+            self.done.set_result(None)
+
+
+class MyReadPipeProto(protocols.Protocol):
+    done = None
+
+    def __init__(self, loop=None):
+        self.state = ['INITIAL']
+        self.nbytes = 0
+        self.transport = None
+        if loop is not None:
+            self.done = futures.Future(loop=loop)
+
+    def connection_made(self, transport):
+        self.transport = transport
+        assert self.state == ['INITIAL'], self.state
+        self.state.append('CONNECTED')
+
+    def data_received(self, data):
+        assert self.state == ['INITIAL', 'CONNECTED'], self.state
+        self.nbytes += len(data)
+
+    def eof_received(self):
+        assert self.state == ['INITIAL', 'CONNECTED'], self.state
+        self.state.append('EOF')
+
+    def connection_lost(self, exc):
+        assert self.state == ['INITIAL', 'CONNECTED', 'EOF'], self.state
+        self.state.append('CLOSED')
+        if self.done:
+            self.done.set_result(None)
+
+
+class MyWritePipeProto(protocols.BaseProtocol):
+    done = None
+
+    def __init__(self, loop=None):
+        self.state = 'INITIAL'
+        self.transport = None
+        if loop is not None:
+            self.done = futures.Future(loop=loop)
+
+    def connection_made(self, transport):
+        self.transport = transport
+        assert self.state == 'INITIAL', self.state
+        self.state = 'CONNECTED'
+
+    def connection_lost(self, exc):
+        assert self.state == 'CONNECTED', self.state
+        self.state = 'CLOSED'
+        if self.done:
+            self.done.set_result(None)
+
+
+class MySubprocessProtocol(protocols.SubprocessProtocol):
+
+    def __init__(self, loop):
+        self.state = 'INITIAL'
+        self.transport = None
+        self.connected = futures.Future(loop=loop)
+        self.completed = futures.Future(loop=loop)
+        self.disconnects = {fd: futures.Future(loop=loop) for fd in range(3)}
+        self.data = {1: b'', 2: b''}
+        self.returncode = None
+        self.got_data = {1: locks.Event(loop=loop),
+                         2: locks.Event(loop=loop)}
+
+    def connection_made(self, transport):
+        self.transport = transport
+        assert self.state == 'INITIAL', self.state
+        self.state = 'CONNECTED'
+        self.connected.set_result(None)
+
+    def connection_lost(self, exc):
+        assert self.state == 'CONNECTED', self.state
+        self.state = 'CLOSED'
+        self.completed.set_result(None)
+
+    def pipe_data_received(self, fd, data):
+        assert self.state == 'CONNECTED', self.state
+        self.data[fd] += data
+        self.got_data[fd].set()
+
+    def pipe_connection_lost(self, fd, exc):
+        assert self.state == 'CONNECTED', self.state
+        if exc:
+            self.disconnects[fd].set_exception(exc)
+        else:
+            self.disconnects[fd].set_result(exc)
+
+    def process_exited(self):
+        assert self.state == 'CONNECTED', self.state
+        self.returncode = self.transport.get_returncode()
+
+
+class EventLoopTestsMixin:
+
+    def setUp(self):
+        super().setUp()
+        self.loop = self.create_event_loop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        # just in case if we have transport close callbacks
+        test_utils.run_briefly(self.loop)
+
+        self.loop.close()
+        gc.collect()
+        super().tearDown()
+
+    def test_run_until_complete_nesting(self):
+        @tasks.coroutine
+        def coro1():
+            yield
+
+        @tasks.coroutine
+        def coro2():
+            self.assertTrue(self.loop.is_running())
+            self.loop.run_until_complete(coro1())
+
+        self.assertRaises(
+            RuntimeError, self.loop.run_until_complete, coro2())
+
+    # Note: because of the default Windows timing granularity of
+    # 15.6 msec, we use fairly long sleep times here (~100 msec).
+
+    def test_run_until_complete(self):
+        t0 = self.loop.time()
+        self.loop.run_until_complete(tasks.sleep(0.1, loop=self.loop))
+        t1 = self.loop.time()
+        self.assertTrue(0.08 <= t1-t0 <= 0.8, t1-t0)
+
+    def test_run_until_complete_stopped(self):
+        @tasks.coroutine
+        def cb():
+            self.loop.stop()
+            yield from tasks.sleep(0.1, loop=self.loop)
+        task = cb()
+        self.assertRaises(RuntimeError,
+                          self.loop.run_until_complete, task)
+
+    def test_call_later(self):
+        results = []
+
+        def callback(arg):
+            results.append(arg)
+            self.loop.stop()
+
+        self.loop.call_later(0.1, callback, 'hello world')
+        t0 = time.monotonic()
+        self.loop.run_forever()
+        t1 = time.monotonic()
+        self.assertEqual(results, ['hello world'])
+        self.assertTrue(0.08 <= t1-t0 <= 0.8, t1-t0)
+
+    def test_call_soon(self):
+        results = []
+
+        def callback(arg1, arg2):
+            results.append((arg1, arg2))
+            self.loop.stop()
+
+        self.loop.call_soon(callback, 'hello', 'world')
+        self.loop.run_forever()
+        self.assertEqual(results, [('hello', 'world')])
+
+    def test_call_soon_threadsafe(self):
+        results = []
+        lock = threading.Lock()
+
+        def callback(arg):
+            results.append(arg)
+            if len(results) >= 2:
+                self.loop.stop()
+
+        def run_in_thread():
+            self.loop.call_soon_threadsafe(callback, 'hello')
+            lock.release()
+
+        lock.acquire()
+        t = threading.Thread(target=run_in_thread)
+        t.start()
+
+        with lock:
+            self.loop.call_soon(callback, 'world')
+            self.loop.run_forever()
+        t.join()
+        self.assertEqual(results, ['hello', 'world'])
+
+    def test_call_soon_threadsafe_same_thread(self):
+        results = []
+
+        def callback(arg):
+            results.append(arg)
+            if len(results) >= 2:
+                self.loop.stop()
+
+        self.loop.call_soon_threadsafe(callback, 'hello')
+        self.loop.call_soon(callback, 'world')
+        self.loop.run_forever()
+        self.assertEqual(results, ['hello', 'world'])
+
+    def test_run_in_executor(self):
+        def run(arg):
+            return (arg, threading.get_ident())
+        f2 = self.loop.run_in_executor(None, run, 'yo')
+        res, thread_id = self.loop.run_until_complete(f2)
+        self.assertEqual(res, 'yo')
+        self.assertNotEqual(thread_id, threading.get_ident())
+
+    def test_reader_callback(self):
+        r, w = test_utils.socketpair()
+        bytes_read = []
+
+        def reader():
+            try:
+                data = r.recv(1024)
+            except BlockingIOError:
+                # Spurious readiness notifications are possible
+                # at least on Linux -- see man select.
+                return
+            if data:
+                bytes_read.append(data)
+            else:
+                self.assertTrue(self.loop.remove_reader(r.fileno()))
+                r.close()
+
+        self.loop.add_reader(r.fileno(), reader)
+        self.loop.call_soon(w.send, b'abc')
+        test_utils.run_briefly(self.loop)
+        self.loop.call_soon(w.send, b'def')
+        test_utils.run_briefly(self.loop)
+        self.loop.call_soon(w.close)
+        self.loop.call_soon(self.loop.stop)
+        self.loop.run_forever()
+        self.assertEqual(b''.join(bytes_read), b'abcdef')
+
+    def test_writer_callback(self):
+        r, w = test_utils.socketpair()
+        w.setblocking(False)
+        self.loop.add_writer(w.fileno(), w.send, b'x'*(256*1024))
+        test_utils.run_briefly(self.loop)
+
+        def remove_writer():
+            self.assertTrue(self.loop.remove_writer(w.fileno()))
+
+        self.loop.call_soon(remove_writer)
+        self.loop.call_soon(self.loop.stop)
+        self.loop.run_forever()
+        w.close()
+        data = r.recv(256*1024)
+        r.close()
+        self.assertGreaterEqual(len(data), 200)
+
+    def test_sock_client_ops(self):
+        with test_utils.run_test_server() as httpd:
+            sock = socket.socket()
+            sock.setblocking(False)
+            self.loop.run_until_complete(
+                self.loop.sock_connect(sock, httpd.address))
+            self.loop.run_until_complete(
+                self.loop.sock_sendall(sock, b'GET / HTTP/1.0\r\n\r\n'))
+            data = self.loop.run_until_complete(
+                self.loop.sock_recv(sock, 1024))
+            # consume data
+            self.loop.run_until_complete(
+                self.loop.sock_recv(sock, 1024))
+            sock.close()
+
+        self.assertTrue(data.startswith(b'HTTP/1.0 200 OK'))
+
+    def test_sock_client_fail(self):
+        # Make sure that we will get an unused port
+        address = None
+        try:
+            s = socket.socket()
+            s.bind(('127.0.0.1', 0))
+            address = s.getsockname()
+        finally:
+            s.close()
+
+        sock = socket.socket()
+        sock.setblocking(False)
+        with self.assertRaises(ConnectionRefusedError):
+            self.loop.run_until_complete(
+                self.loop.sock_connect(sock, address))
+        sock.close()
+
+    def test_sock_accept(self):
+        listener = socket.socket()
+        listener.setblocking(False)
+        listener.bind(('127.0.0.1', 0))
+        listener.listen(1)
+        client = socket.socket()
+        client.connect(listener.getsockname())
+
+        f = self.loop.sock_accept(listener)
+        conn, addr = self.loop.run_until_complete(f)
+        self.assertEqual(conn.gettimeout(), 0)
+        self.assertEqual(addr, client.getsockname())
+        self.assertEqual(client.getpeername(), listener.getsockname())
+        client.close()
+        conn.close()
+        listener.close()
+
+    @unittest.skipUnless(hasattr(signal, 'SIGKILL'), 'No SIGKILL')
+    def test_add_signal_handler(self):
+        caught = 0
+
+        def my_handler():
+            nonlocal caught
+            caught += 1
+
+        # Check error behavior first.
+        self.assertRaises(
+            TypeError, self.loop.add_signal_handler, 'boom', my_handler)
+        self.assertRaises(
+            TypeError, self.loop.remove_signal_handler, 'boom')
+        self.assertRaises(
+            ValueError, self.loop.add_signal_handler, signal.NSIG+1,
+            my_handler)
+        self.assertRaises(
+            ValueError, self.loop.remove_signal_handler, signal.NSIG+1)
+        self.assertRaises(
+            ValueError, self.loop.add_signal_handler, 0, my_handler)
+        self.assertRaises(
+            ValueError, self.loop.remove_signal_handler, 0)
+        self.assertRaises(
+            ValueError, self.loop.add_signal_handler, -1, my_handler)
+        self.assertRaises(
+            ValueError, self.loop.remove_signal_handler, -1)
+        self.assertRaises(
+            RuntimeError, self.loop.add_signal_handler, signal.SIGKILL,
+            my_handler)
+        # Removing SIGKILL doesn't raise, since we don't call signal().
+        self.assertFalse(self.loop.remove_signal_handler(signal.SIGKILL))
+        # Now set a handler and handle it.
+        self.loop.add_signal_handler(signal.SIGINT, my_handler)
+        test_utils.run_briefly(self.loop)
+        os.kill(os.getpid(), signal.SIGINT)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(caught, 1)
+        # Removing it should restore the default handler.
+        self.assertTrue(self.loop.remove_signal_handler(signal.SIGINT))
+        self.assertEqual(signal.getsignal(signal.SIGINT),
+                         signal.default_int_handler)
+        # Removing again returns False.
+        self.assertFalse(self.loop.remove_signal_handler(signal.SIGINT))
+
+    @unittest.skipUnless(hasattr(signal, 'SIGALRM'), 'No SIGALRM')
+    def test_signal_handling_while_selecting(self):
+        # Test with a signal actually arriving during a select() call.
+        caught = 0
+
+        def my_handler():
+            nonlocal caught
+            caught += 1
+            self.loop.stop()
+
+        self.loop.add_signal_handler(signal.SIGALRM, my_handler)
+
+        signal.setitimer(signal.ITIMER_REAL, 0.01, 0)  # Send SIGALRM once.
+        self.loop.run_forever()
+        self.assertEqual(caught, 1)
+
+    @unittest.skipUnless(hasattr(signal, 'SIGALRM'), 'No SIGALRM')
+    def test_signal_handling_args(self):
+        some_args = (42,)
+        caught = 0
+
+        def my_handler(*args):
+            nonlocal caught
+            caught += 1
+            self.assertEqual(args, some_args)
+
+        self.loop.add_signal_handler(signal.SIGALRM, my_handler, *some_args)
+
+        signal.setitimer(signal.ITIMER_REAL, 0.1, 0)  # Send SIGALRM once.
+        self.loop.call_later(0.5, self.loop.stop)
+        self.loop.run_forever()
+        self.assertEqual(caught, 1)
+
+    def test_create_connection(self):
+        with test_utils.run_test_server() as httpd:
+            f = self.loop.create_connection(
+                lambda: MyProto(loop=self.loop), *httpd.address)
+            tr, pr = self.loop.run_until_complete(f)
+            self.assertTrue(isinstance(tr, transports.Transport))
+            self.assertTrue(isinstance(pr, protocols.Protocol))
+            self.loop.run_until_complete(pr.done)
+            self.assertGreater(pr.nbytes, 0)
+            tr.close()
+
+    def test_create_connection_sock(self):
+        with test_utils.run_test_server() as httpd:
+            sock = None
+            infos = self.loop.run_until_complete(
+                self.loop.getaddrinfo(
+                    *httpd.address, type=socket.SOCK_STREAM))
+            for family, type, proto, cname, address in infos:
+                try:
+                    sock = socket.socket(family=family, type=type, proto=proto)
+                    sock.setblocking(False)
+                    self.loop.run_until_complete(
+                        self.loop.sock_connect(sock, address))
+                except:
+                    pass
+                else:
+                    break
+            else:
+                assert False, 'Can not create socket.'
+
+            f = self.loop.create_connection(
+                lambda: MyProto(loop=self.loop), sock=sock)
+            tr, pr = self.loop.run_until_complete(f)
+            self.assertTrue(isinstance(tr, transports.Transport))
+            self.assertTrue(isinstance(pr, protocols.Protocol))
+            self.loop.run_until_complete(pr.done)
+            self.assertGreater(pr.nbytes, 0)
+            tr.close()
+
+    @unittest.skipIf(ssl is None, 'No ssl module')
+    def test_create_ssl_connection(self):
+        with test_utils.run_test_server(use_ssl=True) as httpd:
+            f = self.loop.create_connection(
+                lambda: MyProto(loop=self.loop), *httpd.address,
+                ssl=test_utils.dummy_ssl_context())
+            tr, pr = self.loop.run_until_complete(f)
+            self.assertTrue(isinstance(tr, transports.Transport))
+            self.assertTrue(isinstance(pr, protocols.Protocol))
+            self.assertTrue('ssl' in tr.__class__.__name__.lower())
+            self.assertIsNotNone(tr.get_extra_info('sockname'))
+            self.loop.run_until_complete(pr.done)
+            self.assertGreater(pr.nbytes, 0)
+            tr.close()
+
+    def test_create_connection_local_addr(self):
+        with test_utils.run_test_server() as httpd:
+            port = find_unused_port()
+            f = self.loop.create_connection(
+                lambda: MyProto(loop=self.loop),
+                *httpd.address, local_addr=(httpd.address[0], port))
+            tr, pr = self.loop.run_until_complete(f)
+            expected = pr.transport.get_extra_info('sockname')[1]
+            self.assertEqual(port, expected)
+            tr.close()
+
+    def test_create_connection_local_addr_in_use(self):
+        with test_utils.run_test_server() as httpd:
+            f = self.loop.create_connection(
+                lambda: MyProto(loop=self.loop),
+                *httpd.address, local_addr=httpd.address)
+            with self.assertRaises(OSError) as cm:
+                self.loop.run_until_complete(f)
+            self.assertEqual(cm.exception.errno, errno.EADDRINUSE)
+            self.assertIn(str(httpd.address), cm.exception.strerror)
+
+    def test_create_server(self):
+        proto = None
+
+        def factory():
+            nonlocal proto
+            proto = MyProto()
+            return proto
+
+        f = self.loop.create_server(factory, '0.0.0.0', 0)
+        server = self.loop.run_until_complete(f)
+        self.assertEqual(len(server.sockets), 1)
+        sock = server.sockets[0]
+        host, port = sock.getsockname()
+        self.assertEqual(host, '0.0.0.0')
+        client = socket.socket()
+        client.connect(('127.0.0.1', port))
+        client.sendall(b'xxx')
+        test_utils.run_briefly(self.loop)
+        self.assertIsInstance(proto, MyProto)
+        self.assertEqual('INITIAL', proto.state)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual('CONNECTED', proto.state)
+        test_utils.run_until(self.loop, lambda: proto.nbytes > 0,
+                             timeout=10)
+        self.assertEqual(3, proto.nbytes)
+
+        # extra info is available
+        self.assertIsNotNone(proto.transport.get_extra_info('sockname'))
+        self.assertEqual('127.0.0.1',
+                         proto.transport.get_extra_info('peername')[0])
+
+        # close connection
+        proto.transport.close()
+        test_utils.run_briefly(self.loop)  # windows iocp
+
+        self.assertEqual('CLOSED', proto.state)
+
+        # the client socket must be closed after to avoid ECONNRESET upon
+        # recv()/send() on the serving socket
+        client.close()
+
+        # close server
+        server.close()
+
+    @unittest.skipIf(ssl is None, 'No ssl module')
+    def test_create_server_ssl(self):
+        proto = None
+
+        class ClientMyProto(MyProto):
+            def connection_made(self, transport):
+                self.transport = transport
+                assert self.state == 'INITIAL', self.state
+                self.state = 'CONNECTED'
+
+        def factory():
+            nonlocal proto
+            proto = MyProto(loop=self.loop)
+            return proto
+
+        here = os.path.dirname(__file__)
+        sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
+        sslcontext.load_cert_chain(
+            certfile=os.path.join(here, 'sample.crt'),
+            keyfile=os.path.join(here, 'sample.key'))
+
+        f = self.loop.create_server(
+            factory, '127.0.0.1', 0, ssl=sslcontext)
+
+        server = self.loop.run_until_complete(f)
+        sock = server.sockets[0]
+        host, port = sock.getsockname()
+        self.assertEqual(host, '127.0.0.1')
+
+        f_c = self.loop.create_connection(ClientMyProto, host, port,
+                                          ssl=test_utils.dummy_ssl_context())
+        client, pr = self.loop.run_until_complete(f_c)
+
+        client.write(b'xxx')
+        test_utils.run_briefly(self.loop)
+        self.assertIsInstance(proto, MyProto)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual('CONNECTED', proto.state)
+        test_utils.run_until(self.loop, lambda: proto.nbytes > 0,
+                             timeout=10)
+        self.assertEqual(3, proto.nbytes)
+
+        # extra info is available
+        self.assertIsNotNone(proto.transport.get_extra_info('sockname'))
+        self.assertEqual('127.0.0.1',
+                         proto.transport.get_extra_info('peername')[0])
+
+        # close connection
+        proto.transport.close()
+        self.loop.run_until_complete(proto.done)
+        self.assertEqual('CLOSED', proto.state)
+
+        # the client socket must be closed after to avoid ECONNRESET upon
+        # recv()/send() on the serving socket
+        client.close()
+
+        # stop serving
+        server.close()
+
+    def test_create_server_sock(self):
+        proto = futures.Future(loop=self.loop)
+
+        class TestMyProto(MyProto):
+            def connection_made(self, transport):
+                super().connection_made(transport)
+                proto.set_result(self)
+
+        sock_ob = socket.socket(type=socket.SOCK_STREAM)
+        sock_ob.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        sock_ob.bind(('0.0.0.0', 0))
+
+        f = self.loop.create_server(TestMyProto, sock=sock_ob)
+        server = self.loop.run_until_complete(f)
+        sock = server.sockets[0]
+        self.assertIs(sock, sock_ob)
+
+        host, port = sock.getsockname()
+        self.assertEqual(host, '0.0.0.0')
+        client = socket.socket()
+        client.connect(('127.0.0.1', port))
+        client.send(b'xxx')
+        client.close()
+        server.close()
+
+    def test_create_server_addr_in_use(self):
+        sock_ob = socket.socket(type=socket.SOCK_STREAM)
+        sock_ob.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        sock_ob.bind(('0.0.0.0', 0))
+
+        f = self.loop.create_server(MyProto, sock=sock_ob)
+        server = self.loop.run_until_complete(f)
+        sock = server.sockets[0]
+        host, port = sock.getsockname()
+
+        f = self.loop.create_server(MyProto, host=host, port=port)
+        with self.assertRaises(OSError) as cm:
+            self.loop.run_until_complete(f)
+        self.assertEqual(cm.exception.errno, errno.EADDRINUSE)
+
+        server.close()
+
+    @unittest.skipUnless(IPV6_ENABLED, 'IPv6 not supported or enabled')
+    def test_create_server_dual_stack(self):
+        f_proto = futures.Future(loop=self.loop)
+
+        class TestMyProto(MyProto):
+            def connection_made(self, transport):
+                super().connection_made(transport)
+                f_proto.set_result(self)
+
+        try_count = 0
+        while True:
+            try:
+                port = find_unused_port()
+                f = self.loop.create_server(TestMyProto, host=None, port=port)
+                server = self.loop.run_until_complete(f)
+            except OSError as ex:
+                if ex.errno == errno.EADDRINUSE:
+                    try_count += 1
+                    self.assertGreaterEqual(5, try_count)
+                    continue
+                else:
+                    raise
+            else:
+                break
+        client = socket.socket()
+        client.connect(('127.0.0.1', port))
+        client.send(b'xxx')
+        proto = self.loop.run_until_complete(f_proto)
+        proto.transport.close()
+        client.close()
+
+        f_proto = futures.Future(loop=self.loop)
+        client = socket.socket(socket.AF_INET6)
+        client.connect(('::1', port))
+        client.send(b'xxx')
+        proto = self.loop.run_until_complete(f_proto)
+        proto.transport.close()
+        client.close()
+
+        server.close()
+
+    def test_server_close(self):
+        f = self.loop.create_server(MyProto, '0.0.0.0', 0)
+        server = self.loop.run_until_complete(f)
+        sock = server.sockets[0]
+        host, port = sock.getsockname()
+
+        client = socket.socket()
+        client.connect(('127.0.0.1', port))
+        client.send(b'xxx')
+        client.close()
+
+        server.close()
+
+        client = socket.socket()
+        self.assertRaises(
+            ConnectionRefusedError, client.connect, ('127.0.0.1', port))
+        client.close()
+
+    def test_create_datagram_endpoint(self):
+        class TestMyDatagramProto(MyDatagramProto):
+            def __init__(inner_self):
+                super().__init__(loop=self.loop)
+
+            def datagram_received(self, data, addr):
+                super().datagram_received(data, addr)
+                self.transport.sendto(b'resp:'+data, addr)
+
+        coro = self.loop.create_datagram_endpoint(
+            TestMyDatagramProto, local_addr=('127.0.0.1', 0))
+        s_transport, server = self.loop.run_until_complete(coro)
+        host, port = s_transport.get_extra_info('sockname')
+
+        coro = self.loop.create_datagram_endpoint(
+            lambda: MyDatagramProto(loop=self.loop),
+            remote_addr=(host, port))
+        transport, client = self.loop.run_until_complete(coro)
+
+        self.assertEqual('INITIALIZED', client.state)
+        transport.sendto(b'xxx')
+        for _ in range(1000):
+            if server.nbytes:
+                break
+            test_utils.run_briefly(self.loop)
+        self.assertEqual(3, server.nbytes)
+        for _ in range(1000):
+            if client.nbytes:
+                break
+            test_utils.run_briefly(self.loop)
+
+        # received
+        self.assertEqual(8, client.nbytes)
+
+        # extra info is available
+        self.assertIsNotNone(transport.get_extra_info('sockname'))
+
+        # close connection
+        transport.close()
+        self.loop.run_until_complete(client.done)
+        self.assertEqual('CLOSED', client.state)
+        server.transport.close()
+
+    def test_internal_fds(self):
+        loop = self.create_event_loop()
+        if not isinstance(loop, selector_events.BaseSelectorEventLoop):
+            return
+
+        self.assertEqual(1, loop._internal_fds)
+        loop.close()
+        self.assertEqual(0, loop._internal_fds)
+        self.assertIsNone(loop._csock)
+        self.assertIsNone(loop._ssock)
+
+    @unittest.skipUnless(sys.platform != 'win32',
+                         "Don't support pipes for Windows")
+    def test_read_pipe(self):
+        proto = None
+
+        def factory():
+            nonlocal proto
+            proto = MyReadPipeProto(loop=self.loop)
+            return proto
+
+        rpipe, wpipe = os.pipe()
+        pipeobj = io.open(rpipe, 'rb', 1024)
+
+        @tasks.coroutine
+        def connect():
+            t, p = yield from self.loop.connect_read_pipe(factory, pipeobj)
+            self.assertIs(p, proto)
+            self.assertIs(t, proto.transport)
+            self.assertEqual(['INITIAL', 'CONNECTED'], proto.state)
+            self.assertEqual(0, proto.nbytes)
+
+        self.loop.run_until_complete(connect())
+
+        os.write(wpipe, b'1')
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(1, proto.nbytes)
+
+        os.write(wpipe, b'2345')
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(['INITIAL', 'CONNECTED'], proto.state)
+        self.assertEqual(5, proto.nbytes)
+
+        os.close(wpipe)
+        self.loop.run_until_complete(proto.done)
+        self.assertEqual(
+            ['INITIAL', 'CONNECTED', 'EOF', 'CLOSED'], proto.state)
+        # extra info is available
+        self.assertIsNotNone(proto.transport.get_extra_info('pipe'))
+
+    @unittest.skipUnless(sys.platform != 'win32',
+                         "Don't support pipes for Windows")
+    def test_write_pipe(self):
+        proto = None
+        transport = None
+
+        def factory():
+            nonlocal proto
+            proto = MyWritePipeProto(loop=self.loop)
+            return proto
+
+        rpipe, wpipe = os.pipe()
+        pipeobj = io.open(wpipe, 'wb', 1024)
+
+        @tasks.coroutine
+        def connect():
+            nonlocal transport
+            t, p = yield from self.loop.connect_write_pipe(factory, pipeobj)
+            self.assertIs(p, proto)
+            self.assertIs(t, proto.transport)
+            self.assertEqual('CONNECTED', proto.state)
+            transport = t
+
+        self.loop.run_until_complete(connect())
+
+        transport.write(b'1')
+        test_utils.run_briefly(self.loop)
+        data = os.read(rpipe, 1024)
+        self.assertEqual(b'1', data)
+
+        transport.write(b'2345')
+        test_utils.run_briefly(self.loop)
+        data = os.read(rpipe, 1024)
+        self.assertEqual(b'2345', data)
+        self.assertEqual('CONNECTED', proto.state)
+
+        os.close(rpipe)
+
+        # extra info is available
+        self.assertIsNotNone(proto.transport.get_extra_info('pipe'))
+
+        # close connection
+        proto.transport.close()
+        self.loop.run_until_complete(proto.done)
+        self.assertEqual('CLOSED', proto.state)
+
+    @unittest.skipUnless(sys.platform != 'win32',
+                         "Don't support pipes for Windows")
+    def test_write_pipe_disconnect_on_close(self):
+        proto = None
+        transport = None
+
+        def factory():
+            nonlocal proto
+            proto = MyWritePipeProto(loop=self.loop)
+            return proto
+
+        rsock, wsock = self.loop._socketpair()
+        pipeobj = io.open(wsock.detach(), 'wb', 1024)
+
+        @tasks.coroutine
+        def connect():
+            nonlocal transport
+            t, p = yield from self.loop.connect_write_pipe(factory,
+                                                           pipeobj)
+            self.assertIs(p, proto)
+            self.assertIs(t, proto.transport)
+            self.assertEqual('CONNECTED', proto.state)
+            transport = t
+
+        self.loop.run_until_complete(connect())
+        self.assertEqual('CONNECTED', proto.state)
+
+        transport.write(b'1')
+        data = self.loop.run_until_complete(self.loop.sock_recv(rsock, 1024))
+        self.assertEqual(b'1', data)
+
+        rsock.close()
+
+        self.loop.run_until_complete(proto.done)
+        self.assertEqual('CLOSED', proto.state)
+
+    def test_prompt_cancellation(self):
+        r, w = test_utils.socketpair()
+        r.setblocking(False)
+        f = self.loop.sock_recv(r, 1)
+        ov = getattr(f, 'ov', None)
+        self.assertTrue(ov is None or ov.pending)
+
+        @tasks.coroutine
+        def main():
+            try:
+                self.loop.call_soon(f.cancel)
+                yield from f
+            except futures.CancelledError:
+                res = 'cancelled'
+            else:
+                res = None
+            finally:
+                self.loop.stop()
+            return res
+
+        start = time.monotonic()
+        t = tasks.Task(main(), loop=self.loop)
+        self.loop.run_forever()
+        elapsed = time.monotonic() - start
+
+        self.assertLess(elapsed, 0.1)
+        self.assertEqual(t.result(), 'cancelled')
+        self.assertRaises(futures.CancelledError, f.result)
+        self.assertTrue(ov is None or not ov.pending)
+        self.loop._stop_serving(r)
+
+        r.close()
+        w.close()
+
+
+class SubprocessTestsMixin:
+
+    def check_terminated(self, returncode):
+        if sys.platform == 'win32':
+            self.assertIsInstance(returncode, int)
+            # expect 1 but sometimes get 0
+        else:
+            self.assertEqual(-signal.SIGTERM, returncode)
+
+    def check_killed(self, returncode):
+        if sys.platform == 'win32':
+            self.assertIsInstance(returncode, int)
+            # expect 1 but sometimes get 0
+        else:
+            self.assertEqual(-signal.SIGKILL, returncode)
+
+    def test_subprocess_exec(self):
+        proto = None
+        transp = None
+
+        prog = os.path.join(os.path.dirname(__file__), 'echo.py')
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_exec(
+                functools.partial(MySubprocessProtocol, self.loop),
+                sys.executable, prog)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.connected)
+        self.assertEqual('CONNECTED', proto.state)
+
+        stdin = transp.get_pipe_transport(0)
+        stdin.write(b'Python The Winner')
+        self.loop.run_until_complete(proto.got_data[1].wait())
+        transp.close()
+        self.loop.run_until_complete(proto.completed)
+        self.check_terminated(proto.returncode)
+        self.assertEqual(b'Python The Winner', proto.data[1])
+
+    def test_subprocess_interactive(self):
+        proto = None
+        transp = None
+
+        prog = os.path.join(os.path.dirname(__file__), 'echo.py')
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_exec(
+                functools.partial(MySubprocessProtocol, self.loop),
+                sys.executable, prog)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.connected)
+        self.assertEqual('CONNECTED', proto.state)
+
+        try:
+            stdin = transp.get_pipe_transport(0)
+            stdin.write(b'Python ')
+            self.loop.run_until_complete(proto.got_data[1].wait())
+            proto.got_data[1].clear()
+            self.assertEqual(b'Python ', proto.data[1])
+
+            stdin.write(b'The Winner')
+            self.loop.run_until_complete(proto.got_data[1].wait())
+            self.assertEqual(b'Python The Winner', proto.data[1])
+        finally:
+            transp.close()
+
+        self.loop.run_until_complete(proto.completed)
+        self.check_terminated(proto.returncode)
+
+    def test_subprocess_shell(self):
+        proto = None
+        transp = None
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_shell(
+                functools.partial(MySubprocessProtocol, self.loop),
+                'echo Python')
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.connected)
+
+        transp.get_pipe_transport(0).close()
+        self.loop.run_until_complete(proto.completed)
+        self.assertEqual(0, proto.returncode)
+        self.assertTrue(all(f.done() for f in proto.disconnects.values()))
+        self.assertEqual(proto.data[1].rstrip(b'\r\n'), b'Python')
+        self.assertEqual(proto.data[2], b'')
+
+    def test_subprocess_exitcode(self):
+        proto = None
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto
+            transp, proto = yield from self.loop.subprocess_shell(
+                functools.partial(MySubprocessProtocol, self.loop),
+                'exit 7', stdin=None, stdout=None, stderr=None)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.completed)
+        self.assertEqual(7, proto.returncode)
+
+    def test_subprocess_close_after_finish(self):
+        proto = None
+        transp = None
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_shell(
+                functools.partial(MySubprocessProtocol, self.loop),
+                'exit 7', stdin=None, stdout=None, stderr=None)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.assertIsNone(transp.get_pipe_transport(0))
+        self.assertIsNone(transp.get_pipe_transport(1))
+        self.assertIsNone(transp.get_pipe_transport(2))
+        self.loop.run_until_complete(proto.completed)
+        self.assertEqual(7, proto.returncode)
+        self.assertIsNone(transp.close())
+
+    def test_subprocess_kill(self):
+        proto = None
+        transp = None
+
+        prog = os.path.join(os.path.dirname(__file__), 'echo.py')
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_exec(
+                functools.partial(MySubprocessProtocol, self.loop),
+                sys.executable, prog)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.connected)
+
+        transp.kill()
+        self.loop.run_until_complete(proto.completed)
+        self.check_killed(proto.returncode)
+
+    def test_subprocess_terminate(self):
+        proto = None
+        transp = None
+
+        prog = os.path.join(os.path.dirname(__file__), 'echo.py')
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_exec(
+                functools.partial(MySubprocessProtocol, self.loop),
+                sys.executable, prog)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.connected)
+
+        transp.terminate()
+        self.loop.run_until_complete(proto.completed)
+        self.check_terminated(proto.returncode)
+
+    @unittest.skipIf(sys.platform == 'win32', "Don't have SIGHUP")
+    def test_subprocess_send_signal(self):
+        proto = None
+        transp = None
+
+        prog = os.path.join(os.path.dirname(__file__), 'echo.py')
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_exec(
+                functools.partial(MySubprocessProtocol, self.loop),
+                sys.executable, prog)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.connected)
+
+        transp.send_signal(signal.SIGHUP)
+        self.loop.run_until_complete(proto.completed)
+        self.assertEqual(-signal.SIGHUP, proto.returncode)
+
+    def test_subprocess_stderr(self):
+        proto = None
+        transp = None
+
+        prog = os.path.join(os.path.dirname(__file__), 'echo2.py')
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_exec(
+                functools.partial(MySubprocessProtocol, self.loop),
+                sys.executable, prog)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.connected)
+
+        stdin = transp.get_pipe_transport(0)
+        stdin.write(b'test')
+
+        self.loop.run_until_complete(proto.completed)
+
+        transp.close()
+        self.assertEqual(b'OUT:test', proto.data[1])
+        self.assertTrue(proto.data[2].startswith(b'ERR:test'), proto.data[2])
+        self.assertEqual(0, proto.returncode)
+
+    def test_subprocess_stderr_redirect_to_stdout(self):
+        proto = None
+        transp = None
+
+        prog = os.path.join(os.path.dirname(__file__), 'echo2.py')
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_exec(
+                functools.partial(MySubprocessProtocol, self.loop),
+                sys.executable, prog, stderr=subprocess.STDOUT)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.connected)
+
+        stdin = transp.get_pipe_transport(0)
+        self.assertIsNotNone(transp.get_pipe_transport(1))
+        self.assertIsNone(transp.get_pipe_transport(2))
+
+        stdin.write(b'test')
+        self.loop.run_until_complete(proto.completed)
+        self.assertTrue(proto.data[1].startswith(b'OUT:testERR:test'),
+                        proto.data[1])
+        self.assertEqual(b'', proto.data[2])
+
+        transp.close()
+        self.assertEqual(0, proto.returncode)
+
+    def test_subprocess_close_client_stream(self):
+        proto = None
+        transp = None
+
+        prog = os.path.join(os.path.dirname(__file__), 'echo3.py')
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto, transp
+            transp, proto = yield from self.loop.subprocess_exec(
+                functools.partial(MySubprocessProtocol, self.loop),
+                sys.executable, prog)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.connected)
+
+        stdin = transp.get_pipe_transport(0)
+        stdout = transp.get_pipe_transport(1)
+        stdin.write(b'test')
+        self.loop.run_until_complete(proto.got_data[1].wait())
+        self.assertEqual(b'OUT:test', proto.data[1])
+
+        stdout.close()
+        self.loop.run_until_complete(proto.disconnects[1])
+        stdin.write(b'xxx')
+        self.loop.run_until_complete(proto.got_data[2].wait())
+        if sys.platform != 'win32':
+            self.assertEqual(b'ERR:BrokenPipeError', proto.data[2])
+        else:
+            # After closing the read-end of a pipe, writing to the
+            # write-end using os.write() fails with errno==EINVAL and
+            # GetLastError()==ERROR_INVALID_NAME on Windows!?!  (Using
+            # WriteFile() we get ERROR_BROKEN_PIPE as expected.)
+            self.assertEqual(b'ERR:OSError', proto.data[2])
+        transp.close()
+        self.loop.run_until_complete(proto.completed)
+        self.check_terminated(proto.returncode)
+
+    def test_subprocess_wait_no_same_group(self):
+        proto = None
+        transp = None
+
+        @tasks.coroutine
+        def connect():
+            nonlocal proto
+            # start the new process in a new session
+            transp, proto = yield from self.loop.subprocess_shell(
+                functools.partial(MySubprocessProtocol, self.loop),
+                'exit 7', stdin=None, stdout=None, stderr=None,
+                start_new_session=True)
+            self.assertIsInstance(proto, MySubprocessProtocol)
+
+        self.loop.run_until_complete(connect())
+        self.loop.run_until_complete(proto.completed)
+        self.assertEqual(7, proto.returncode)
+
+
+if sys.platform == 'win32':
+    from asyncio import windows_events
+
+    class SelectEventLoopTests(EventLoopTestsMixin, unittest.TestCase):
+
+        def create_event_loop(self):
+            return windows_events.SelectorEventLoop()
+
+    class ProactorEventLoopTests(EventLoopTestsMixin,
+                                 SubprocessTestsMixin,
+                                 unittest.TestCase):
+
+        def create_event_loop(self):
+            return windows_events.ProactorEventLoop()
+
+        def test_create_ssl_connection(self):
+            raise unittest.SkipTest("IocpEventLoop imcompatible with SSL")
+
+        def test_create_server_ssl(self):
+            raise unittest.SkipTest("IocpEventLoop imcompatible with SSL")
+
+        def test_reader_callback(self):
+            raise unittest.SkipTest("IocpEventLoop does not have add_reader()")
+
+        def test_reader_callback_cancel(self):
+            raise unittest.SkipTest("IocpEventLoop does not have add_reader()")
+
+        def test_writer_callback(self):
+            raise unittest.SkipTest("IocpEventLoop does not have add_writer()")
+
+        def test_writer_callback_cancel(self):
+            raise unittest.SkipTest("IocpEventLoop does not have add_writer()")
+
+        def test_create_datagram_endpoint(self):
+            raise unittest.SkipTest(
+                "IocpEventLoop does not have create_datagram_endpoint()")
+else:
+    from asyncio import selectors
+    from asyncio import unix_events
+
+    class UnixEventLoopTestsMixin(EventLoopTestsMixin):
+        def setUp(self):
+            super().setUp()
+            events.set_child_watcher(unix_events.SafeChildWatcher(self.loop))
+
+        def tearDown(self):
+            events.set_child_watcher(None)
+            super().tearDown()
+
+    if hasattr(selectors, 'KqueueSelector'):
+        class KqueueEventLoopTests(UnixEventLoopTestsMixin,
+                                   SubprocessTestsMixin,
+                                   unittest.TestCase):
+
+            def create_event_loop(self):
+                return unix_events.SelectorEventLoop(
+                    selectors.KqueueSelector())
+
+    if hasattr(selectors, 'EpollSelector'):
+        class EPollEventLoopTests(UnixEventLoopTestsMixin,
+                                  SubprocessTestsMixin,
+                                  unittest.TestCase):
+
+            def create_event_loop(self):
+                return unix_events.SelectorEventLoop(selectors.EpollSelector())
+
+    if hasattr(selectors, 'PollSelector'):
+        class PollEventLoopTests(UnixEventLoopTestsMixin,
+                                 SubprocessTestsMixin,
+                                 unittest.TestCase):
+
+            def create_event_loop(self):
+                return unix_events.SelectorEventLoop(selectors.PollSelector())
+
+    # Should always exist.
+    class SelectEventLoopTests(UnixEventLoopTestsMixin,
+                               SubprocessTestsMixin,
+                               unittest.TestCase):
+
+        def create_event_loop(self):
+            return unix_events.SelectorEventLoop(selectors.SelectSelector())
+
+
+class HandleTests(unittest.TestCase):
+
+    def test_handle(self):
+        def callback(*args):
+            return args
+
+        args = ()
+        h = events.Handle(callback, args)
+        self.assertIs(h._callback, callback)
+        self.assertIs(h._args, args)
+        self.assertFalse(h._cancelled)
+
+        r = repr(h)
+        self.assertTrue(r.startswith(
+            'Handle('
+            '<function HandleTests.test_handle.<locals>.callback'))
+        self.assertTrue(r.endswith('())'))
+
+        h.cancel()
+        self.assertTrue(h._cancelled)
+
+        r = repr(h)
+        self.assertTrue(r.startswith(
+            'Handle('
+            '<function HandleTests.test_handle.<locals>.callback'))
+        self.assertTrue(r.endswith('())<cancelled>'), r)
+
+    def test_make_handle(self):
+        def callback(*args):
+            return args
+        h1 = events.Handle(callback, ())
+        self.assertRaises(
+            AssertionError, events.make_handle, h1, ())
+
+    @unittest.mock.patch('asyncio.events.logger')
+    def test_callback_with_exception(self, log):
+        def callback():
+            raise ValueError()
+
+        h = events.Handle(callback, ())
+        h._run()
+        self.assertTrue(log.exception.called)
+
+
+class TimerTests(unittest.TestCase):
+
+    def test_hash(self):
+        when = time.monotonic()
+        h = events.TimerHandle(when, lambda: False, ())
+        self.assertEqual(hash(h), hash(when))
+
+    def test_timer(self):
+        def callback(*args):
+            return args
+
+        args = ()
+        when = time.monotonic()
+        h = events.TimerHandle(when, callback, args)
+        self.assertIs(h._callback, callback)
+        self.assertIs(h._args, args)
+        self.assertFalse(h._cancelled)
+
+        r = repr(h)
+        self.assertTrue(r.endswith('())'))
+
+        h.cancel()
+        self.assertTrue(h._cancelled)
+
+        r = repr(h)
+        self.assertTrue(r.endswith('())<cancelled>'), r)
+
+        self.assertRaises(AssertionError,
+                          events.TimerHandle, None, callback, args)
+
+    def test_timer_comparison(self):
+        def callback(*args):
+            return args
+
+        when = time.monotonic()
+
+        h1 = events.TimerHandle(when, callback, ())
+        h2 = events.TimerHandle(when, callback, ())
+        # TODO: Use assertLess etc.
+        self.assertFalse(h1 < h2)
+        self.assertFalse(h2 < h1)
+        self.assertTrue(h1 <= h2)
+        self.assertTrue(h2 <= h1)
+        self.assertFalse(h1 > h2)
+        self.assertFalse(h2 > h1)
+        self.assertTrue(h1 >= h2)
+        self.assertTrue(h2 >= h1)
+        self.assertTrue(h1 == h2)
+        self.assertFalse(h1 != h2)
+
+        h2.cancel()
+        self.assertFalse(h1 == h2)
+
+        h1 = events.TimerHandle(when, callback, ())
+        h2 = events.TimerHandle(when + 10.0, callback, ())
+        self.assertTrue(h1 < h2)
+        self.assertFalse(h2 < h1)
+        self.assertTrue(h1 <= h2)
+        self.assertFalse(h2 <= h1)
+        self.assertFalse(h1 > h2)
+        self.assertTrue(h2 > h1)
+        self.assertFalse(h1 >= h2)
+        self.assertTrue(h2 >= h1)
+        self.assertFalse(h1 == h2)
+        self.assertTrue(h1 != h2)
+
+        h3 = events.Handle(callback, ())
+        self.assertIs(NotImplemented, h1.__eq__(h3))
+        self.assertIs(NotImplemented, h1.__ne__(h3))
+
+
+class AbstractEventLoopTests(unittest.TestCase):
+
+    def test_not_implemented(self):
+        f = unittest.mock.Mock()
+        loop = events.AbstractEventLoop()
+        self.assertRaises(
+            NotImplementedError, loop.run_forever)
+        self.assertRaises(
+            NotImplementedError, loop.run_until_complete, None)
+        self.assertRaises(
+            NotImplementedError, loop.stop)
+        self.assertRaises(
+            NotImplementedError, loop.is_running)
+        self.assertRaises(
+            NotImplementedError, loop.close)
+        self.assertRaises(
+            NotImplementedError, loop.call_later, None, None)
+        self.assertRaises(
+            NotImplementedError, loop.call_at, f, f)
+        self.assertRaises(
+            NotImplementedError, loop.call_soon, None)
+        self.assertRaises(
+            NotImplementedError, loop.time)
+        self.assertRaises(
+            NotImplementedError, loop.call_soon_threadsafe, None)
+        self.assertRaises(
+            NotImplementedError, loop.run_in_executor, f, f)
+        self.assertRaises(
+            NotImplementedError, loop.set_default_executor, f)
+        self.assertRaises(
+            NotImplementedError, loop.getaddrinfo, 'localhost', 8080)
+        self.assertRaises(
+            NotImplementedError, loop.getnameinfo, ('localhost', 8080))
+        self.assertRaises(
+            NotImplementedError, loop.create_connection, f)
+        self.assertRaises(
+            NotImplementedError, loop.create_server, f)
+        self.assertRaises(
+            NotImplementedError, loop.create_datagram_endpoint, f)
+        self.assertRaises(
+            NotImplementedError, loop.add_reader, 1, f)
+        self.assertRaises(
+            NotImplementedError, loop.remove_reader, 1)
+        self.assertRaises(
+            NotImplementedError, loop.add_writer, 1, f)
+        self.assertRaises(
+            NotImplementedError, loop.remove_writer, 1)
+        self.assertRaises(
+            NotImplementedError, loop.sock_recv, f, 10)
+        self.assertRaises(
+            NotImplementedError, loop.sock_sendall, f, 10)
+        self.assertRaises(
+            NotImplementedError, loop.sock_connect, f, f)
+        self.assertRaises(
+            NotImplementedError, loop.sock_accept, f)
+        self.assertRaises(
+            NotImplementedError, loop.add_signal_handler, 1, f)
+        self.assertRaises(
+            NotImplementedError, loop.remove_signal_handler, 1)
+        self.assertRaises(
+            NotImplementedError, loop.remove_signal_handler, 1)
+        self.assertRaises(
+            NotImplementedError, loop.connect_read_pipe, f,
+            unittest.mock.sentinel.pipe)
+        self.assertRaises(
+            NotImplementedError, loop.connect_write_pipe, f,
+            unittest.mock.sentinel.pipe)
+        self.assertRaises(
+            NotImplementedError, loop.subprocess_shell, f,
+            unittest.mock.sentinel)
+        self.assertRaises(
+            NotImplementedError, loop.subprocess_exec, f)
+
+
+class ProtocolsAbsTests(unittest.TestCase):
+
+    def test_empty(self):
+        f = unittest.mock.Mock()
+        p = protocols.Protocol()
+        self.assertIsNone(p.connection_made(f))
+        self.assertIsNone(p.connection_lost(f))
+        self.assertIsNone(p.data_received(f))
+        self.assertIsNone(p.eof_received())
+
+        dp = protocols.DatagramProtocol()
+        self.assertIsNone(dp.connection_made(f))
+        self.assertIsNone(dp.connection_lost(f))
+        self.assertIsNone(dp.connection_refused(f))
+        self.assertIsNone(dp.datagram_received(f, f))
+
+        sp = protocols.SubprocessProtocol()
+        self.assertIsNone(sp.connection_made(f))
+        self.assertIsNone(sp.connection_lost(f))
+        self.assertIsNone(sp.pipe_data_received(1, f))
+        self.assertIsNone(sp.pipe_connection_lost(1, f))
+        self.assertIsNone(sp.process_exited())
+
+
+class PolicyTests(unittest.TestCase):
+
+    def create_policy(self):
+        if sys.platform == "win32":
+            from asyncio import windows_events
+            return windows_events.DefaultEventLoopPolicy()
+        else:
+            from asyncio import unix_events
+            return unix_events.DefaultEventLoopPolicy()
+
+    def test_event_loop_policy(self):
+        policy = events.AbstractEventLoopPolicy()
+        self.assertRaises(NotImplementedError, policy.get_event_loop)
+        self.assertRaises(NotImplementedError, policy.set_event_loop, object())
+        self.assertRaises(NotImplementedError, policy.new_event_loop)
+        self.assertRaises(NotImplementedError, policy.get_child_watcher)
+        self.assertRaises(NotImplementedError, policy.set_child_watcher,
+                          object())
+
+    def test_get_event_loop(self):
+        policy = self.create_policy()
+        self.assertIsNone(policy._local._loop)
+
+        loop = policy.get_event_loop()
+        self.assertIsInstance(loop, events.AbstractEventLoop)
+
+        self.assertIs(policy._local._loop, loop)
+        self.assertIs(loop, policy.get_event_loop())
+        loop.close()
+
+    def test_get_event_loop_after_set_none(self):
+        policy = self.create_policy()
+        policy.set_event_loop(None)
+        self.assertRaises(AssertionError, policy.get_event_loop)
+
+    @unittest.mock.patch('asyncio.events.threading.current_thread')
+    def test_get_event_loop_thread(self, m_current_thread):
+
+        def f():
+            policy = self.create_policy()
+            self.assertRaises(AssertionError, policy.get_event_loop)
+
+        th = threading.Thread(target=f)
+        th.start()
+        th.join()
+
+    def test_new_event_loop(self):
+        policy = self.create_policy()
+
+        loop = policy.new_event_loop()
+        self.assertIsInstance(loop, events.AbstractEventLoop)
+        loop.close()
+
+    def test_set_event_loop(self):
+        policy = self.create_policy()
+        old_loop = policy.get_event_loop()
+
+        self.assertRaises(AssertionError, policy.set_event_loop, object())
+
+        loop = policy.new_event_loop()
+        policy.set_event_loop(loop)
+        self.assertIs(loop, policy.get_event_loop())
+        self.assertIsNot(old_loop, policy.get_event_loop())
+        loop.close()
+        old_loop.close()
+
+    def test_get_event_loop_policy(self):
+        policy = events.get_event_loop_policy()
+        self.assertIsInstance(policy, events.AbstractEventLoopPolicy)
+        self.assertIs(policy, events.get_event_loop_policy())
+
+    def test_set_event_loop_policy(self):
+        self.assertRaises(
+            AssertionError, events.set_event_loop_policy, object())
+
+        old_policy = events.get_event_loop_policy()
+
+        policy = self.create_policy()
+        events.set_event_loop_policy(policy)
+        self.assertIs(policy, events.get_event_loop_policy())
+        self.assertIsNot(policy, old_policy)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_futures.py b/Lib/test/test_asyncio/test_futures.py
new file mode 100644
index 0000000..ccea2ff
--- /dev/null
+++ b/Lib/test/test_asyncio/test_futures.py
@@ -0,0 +1,329 @@
+"""Tests for futures.py."""
+
+import concurrent.futures
+import threading
+import unittest
+import unittest.mock
+
+from asyncio import events
+from asyncio import futures
+from asyncio import test_utils
+
+
+def _fakefunc(f):
+    return f
+
+
+class FutureTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+
+    def test_initial_state(self):
+        f = futures.Future(loop=self.loop)
+        self.assertFalse(f.cancelled())
+        self.assertFalse(f.done())
+        f.cancel()
+        self.assertTrue(f.cancelled())
+
+    def test_init_constructor_default_loop(self):
+        try:
+            events.set_event_loop(self.loop)
+            f = futures.Future()
+            self.assertIs(f._loop, self.loop)
+        finally:
+            events.set_event_loop(None)
+
+    def test_constructor_positional(self):
+        # Make sure Future does't accept a positional argument
+        self.assertRaises(TypeError, futures.Future, 42)
+
+    def test_cancel(self):
+        f = futures.Future(loop=self.loop)
+        self.assertTrue(f.cancel())
+        self.assertTrue(f.cancelled())
+        self.assertTrue(f.done())
+        self.assertRaises(futures.CancelledError, f.result)
+        self.assertRaises(futures.CancelledError, f.exception)
+        self.assertRaises(futures.InvalidStateError, f.set_result, None)
+        self.assertRaises(futures.InvalidStateError, f.set_exception, None)
+        self.assertFalse(f.cancel())
+
+    def test_result(self):
+        f = futures.Future(loop=self.loop)
+        self.assertRaises(futures.InvalidStateError, f.result)
+
+        f.set_result(42)
+        self.assertFalse(f.cancelled())
+        self.assertTrue(f.done())
+        self.assertEqual(f.result(), 42)
+        self.assertEqual(f.exception(), None)
+        self.assertRaises(futures.InvalidStateError, f.set_result, None)
+        self.assertRaises(futures.InvalidStateError, f.set_exception, None)
+        self.assertFalse(f.cancel())
+
+    def test_exception(self):
+        exc = RuntimeError()
+        f = futures.Future(loop=self.loop)
+        self.assertRaises(futures.InvalidStateError, f.exception)
+
+        f.set_exception(exc)
+        self.assertFalse(f.cancelled())
+        self.assertTrue(f.done())
+        self.assertRaises(RuntimeError, f.result)
+        self.assertEqual(f.exception(), exc)
+        self.assertRaises(futures.InvalidStateError, f.set_result, None)
+        self.assertRaises(futures.InvalidStateError, f.set_exception, None)
+        self.assertFalse(f.cancel())
+
+    def test_yield_from_twice(self):
+        f = futures.Future(loop=self.loop)
+
+        def fixture():
+            yield 'A'
+            x = yield from f
+            yield 'B', x
+            y = yield from f
+            yield 'C', y
+
+        g = fixture()
+        self.assertEqual(next(g), 'A')  # yield 'A'.
+        self.assertEqual(next(g), f)  # First yield from f.
+        f.set_result(42)
+        self.assertEqual(next(g), ('B', 42))  # yield 'B', x.
+        # The second "yield from f" does not yield f.
+        self.assertEqual(next(g), ('C', 42))  # yield 'C', y.
+
+    def test_repr(self):
+        f_pending = futures.Future(loop=self.loop)
+        self.assertEqual(repr(f_pending), 'Future<PENDING>')
+        f_pending.cancel()
+
+        f_cancelled = futures.Future(loop=self.loop)
+        f_cancelled.cancel()
+        self.assertEqual(repr(f_cancelled), 'Future<CANCELLED>')
+
+        f_result = futures.Future(loop=self.loop)
+        f_result.set_result(4)
+        self.assertEqual(repr(f_result), 'Future<result=4>')
+        self.assertEqual(f_result.result(), 4)
+
+        exc = RuntimeError()
+        f_exception = futures.Future(loop=self.loop)
+        f_exception.set_exception(exc)
+        self.assertEqual(repr(f_exception), 'Future<exception=RuntimeError()>')
+        self.assertIs(f_exception.exception(), exc)
+
+        f_few_callbacks = futures.Future(loop=self.loop)
+        f_few_callbacks.add_done_callback(_fakefunc)
+        self.assertIn('Future<PENDING, [<function _fakefunc',
+                      repr(f_few_callbacks))
+        f_few_callbacks.cancel()
+
+        f_many_callbacks = futures.Future(loop=self.loop)
+        for i in range(20):
+            f_many_callbacks.add_done_callback(_fakefunc)
+        r = repr(f_many_callbacks)
+        self.assertIn('Future<PENDING, [<function _fakefunc', r)
+        self.assertIn('<18 more>', r)
+        f_many_callbacks.cancel()
+
+    def test_copy_state(self):
+        # Test the internal _copy_state method since it's being directly
+        # invoked in other modules.
+        f = futures.Future(loop=self.loop)
+        f.set_result(10)
+
+        newf = futures.Future(loop=self.loop)
+        newf._copy_state(f)
+        self.assertTrue(newf.done())
+        self.assertEqual(newf.result(), 10)
+
+        f_exception = futures.Future(loop=self.loop)
+        f_exception.set_exception(RuntimeError())
+
+        newf_exception = futures.Future(loop=self.loop)
+        newf_exception._copy_state(f_exception)
+        self.assertTrue(newf_exception.done())
+        self.assertRaises(RuntimeError, newf_exception.result)
+
+        f_cancelled = futures.Future(loop=self.loop)
+        f_cancelled.cancel()
+
+        newf_cancelled = futures.Future(loop=self.loop)
+        newf_cancelled._copy_state(f_cancelled)
+        self.assertTrue(newf_cancelled.cancelled())
+
+    def test_iter(self):
+        fut = futures.Future(loop=self.loop)
+
+        def coro():
+            yield from fut
+
+        def test():
+            arg1, arg2 = coro()
+
+        self.assertRaises(AssertionError, test)
+        fut.cancel()
+
+    @unittest.mock.patch('asyncio.futures.logger')
+    def test_tb_logger_abandoned(self, m_log):
+        fut = futures.Future(loop=self.loop)
+        del fut
+        self.assertFalse(m_log.error.called)
+
+    @unittest.mock.patch('asyncio.futures.logger')
+    def test_tb_logger_result_unretrieved(self, m_log):
+        fut = futures.Future(loop=self.loop)
+        fut.set_result(42)
+        del fut
+        self.assertFalse(m_log.error.called)
+
+    @unittest.mock.patch('asyncio.futures.logger')
+    def test_tb_logger_result_retrieved(self, m_log):
+        fut = futures.Future(loop=self.loop)
+        fut.set_result(42)
+        fut.result()
+        del fut
+        self.assertFalse(m_log.error.called)
+
+    @unittest.mock.patch('asyncio.futures.logger')
+    def test_tb_logger_exception_unretrieved(self, m_log):
+        fut = futures.Future(loop=self.loop)
+        fut.set_exception(RuntimeError('boom'))
+        del fut
+        test_utils.run_briefly(self.loop)
+        self.assertTrue(m_log.error.called)
+
+    @unittest.mock.patch('asyncio.futures.logger')
+    def test_tb_logger_exception_retrieved(self, m_log):
+        fut = futures.Future(loop=self.loop)
+        fut.set_exception(RuntimeError('boom'))
+        fut.exception()
+        del fut
+        self.assertFalse(m_log.error.called)
+
+    @unittest.mock.patch('asyncio.futures.logger')
+    def test_tb_logger_exception_result_retrieved(self, m_log):
+        fut = futures.Future(loop=self.loop)
+        fut.set_exception(RuntimeError('boom'))
+        self.assertRaises(RuntimeError, fut.result)
+        del fut
+        self.assertFalse(m_log.error.called)
+
+    def test_wrap_future(self):
+
+        def run(arg):
+            return (arg, threading.get_ident())
+        ex = concurrent.futures.ThreadPoolExecutor(1)
+        f1 = ex.submit(run, 'oi')
+        f2 = futures.wrap_future(f1, loop=self.loop)
+        res, ident = self.loop.run_until_complete(f2)
+        self.assertIsInstance(f2, futures.Future)
+        self.assertEqual(res, 'oi')
+        self.assertNotEqual(ident, threading.get_ident())
+
+    def test_wrap_future_future(self):
+        f1 = futures.Future(loop=self.loop)
+        f2 = futures.wrap_future(f1)
+        self.assertIs(f1, f2)
+
+    @unittest.mock.patch('asyncio.futures.events')
+    def test_wrap_future_use_global_loop(self, m_events):
+        def run(arg):
+            return (arg, threading.get_ident())
+        ex = concurrent.futures.ThreadPoolExecutor(1)
+        f1 = ex.submit(run, 'oi')
+        f2 = futures.wrap_future(f1)
+        self.assertIs(m_events.get_event_loop.return_value, f2._loop)
+
+
+class FutureDoneCallbackTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+
+    def run_briefly(self):
+        test_utils.run_briefly(self.loop)
+
+    def _make_callback(self, bag, thing):
+        # Create a callback function that appends thing to bag.
+        def bag_appender(future):
+            bag.append(thing)
+        return bag_appender
+
+    def _new_future(self):
+        return futures.Future(loop=self.loop)
+
+    def test_callbacks_invoked_on_set_result(self):
+        bag = []
+        f = self._new_future()
+        f.add_done_callback(self._make_callback(bag, 42))
+        f.add_done_callback(self._make_callback(bag, 17))
+
+        self.assertEqual(bag, [])
+        f.set_result('foo')
+
+        self.run_briefly()
+
+        self.assertEqual(bag, [42, 17])
+        self.assertEqual(f.result(), 'foo')
+
+    def test_callbacks_invoked_on_set_exception(self):
+        bag = []
+        f = self._new_future()
+        f.add_done_callback(self._make_callback(bag, 100))
+
+        self.assertEqual(bag, [])
+        exc = RuntimeError()
+        f.set_exception(exc)
+
+        self.run_briefly()
+
+        self.assertEqual(bag, [100])
+        self.assertEqual(f.exception(), exc)
+
+    def test_remove_done_callback(self):
+        bag = []
+        f = self._new_future()
+        cb1 = self._make_callback(bag, 1)
+        cb2 = self._make_callback(bag, 2)
+        cb3 = self._make_callback(bag, 3)
+
+        # Add one cb1 and one cb2.
+        f.add_done_callback(cb1)
+        f.add_done_callback(cb2)
+
+        # One instance of cb2 removed. Now there's only one cb1.
+        self.assertEqual(f.remove_done_callback(cb2), 1)
+
+        # Never had any cb3 in there.
+        self.assertEqual(f.remove_done_callback(cb3), 0)
+
+        # After this there will be 6 instances of cb1 and one of cb2.
+        f.add_done_callback(cb2)
+        for i in range(5):
+            f.add_done_callback(cb1)
+
+        # Remove all instances of cb1. One cb2 remains.
+        self.assertEqual(f.remove_done_callback(cb1), 6)
+
+        self.assertEqual(bag, [])
+        f.set_result('foo')
+
+        self.run_briefly()
+
+        self.assertEqual(bag, [2])
+        self.assertEqual(f.result(), 'foo')
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_locks.py b/Lib/test/test_asyncio/test_locks.py
new file mode 100644
index 0000000..19ef877
--- /dev/null
+++ b/Lib/test/test_asyncio/test_locks.py
@@ -0,0 +1,834 @@
+"""Tests for lock.py"""
+
+import unittest
+import unittest.mock
+import re
+
+from asyncio import events
+from asyncio import futures
+from asyncio import locks
+from asyncio import tasks
+from asyncio import test_utils
+
+
+STR_RGX_REPR = (
+    r'^<(?P<class>.*?) object at (?P<address>.*?)'
+    r'\[(?P<extras>'
+    r'(set|unset|locked|unlocked)(,value:\d)?(,waiters:\d+)?'
+    r')\]>\Z'
+)
+RGX_REPR = re.compile(STR_RGX_REPR)
+
+
+class LockTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+
+    def test_ctor_loop(self):
+        loop = unittest.mock.Mock()
+        lock = locks.Lock(loop=loop)
+        self.assertIs(lock._loop, loop)
+
+        lock = locks.Lock(loop=self.loop)
+        self.assertIs(lock._loop, self.loop)
+
+    def test_ctor_noloop(self):
+        try:
+            events.set_event_loop(self.loop)
+            lock = locks.Lock()
+            self.assertIs(lock._loop, self.loop)
+        finally:
+            events.set_event_loop(None)
+
+    def test_repr(self):
+        lock = locks.Lock(loop=self.loop)
+        self.assertTrue(repr(lock).endswith('[unlocked]>'))
+        self.assertTrue(RGX_REPR.match(repr(lock)))
+
+        @tasks.coroutine
+        def acquire_lock():
+            yield from lock
+
+        self.loop.run_until_complete(acquire_lock())
+        self.assertTrue(repr(lock).endswith('[locked]>'))
+        self.assertTrue(RGX_REPR.match(repr(lock)))
+
+    def test_lock(self):
+        lock = locks.Lock(loop=self.loop)
+
+        @tasks.coroutine
+        def acquire_lock():
+            return (yield from lock)
+
+        res = self.loop.run_until_complete(acquire_lock())
+
+        self.assertTrue(res)
+        self.assertTrue(lock.locked())
+
+        lock.release()
+        self.assertFalse(lock.locked())
+
+    def test_acquire(self):
+        lock = locks.Lock(loop=self.loop)
+        result = []
+
+        self.assertTrue(self.loop.run_until_complete(lock.acquire()))
+
+        @tasks.coroutine
+        def c1(result):
+            if (yield from lock.acquire()):
+                result.append(1)
+            return True
+
+        @tasks.coroutine
+        def c2(result):
+            if (yield from lock.acquire()):
+                result.append(2)
+            return True
+
+        @tasks.coroutine
+        def c3(result):
+            if (yield from lock.acquire()):
+                result.append(3)
+            return True
+
+        t1 = tasks.Task(c1(result), loop=self.loop)
+        t2 = tasks.Task(c2(result), loop=self.loop)
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([], result)
+
+        lock.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1], result)
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1], result)
+
+        t3 = tasks.Task(c3(result), loop=self.loop)
+
+        lock.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1, 2], result)
+
+        lock.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1, 2, 3], result)
+
+        self.assertTrue(t1.done())
+        self.assertTrue(t1.result())
+        self.assertTrue(t2.done())
+        self.assertTrue(t2.result())
+        self.assertTrue(t3.done())
+        self.assertTrue(t3.result())
+
+    def test_acquire_cancel(self):
+        lock = locks.Lock(loop=self.loop)
+        self.assertTrue(self.loop.run_until_complete(lock.acquire()))
+
+        task = tasks.Task(lock.acquire(), loop=self.loop)
+        self.loop.call_soon(task.cancel)
+        self.assertRaises(
+            futures.CancelledError,
+            self.loop.run_until_complete, task)
+        self.assertFalse(lock._waiters)
+
+    def test_cancel_race(self):
+        # Several tasks:
+        # - A acquires the lock
+        # - B is blocked in aqcuire()
+        # - C is blocked in aqcuire()
+        #
+        # Now, concurrently:
+        # - B is cancelled
+        # - A releases the lock
+        #
+        # If B's waiter is marked cancelled but not yet removed from
+        # _waiters, A's release() call will crash when trying to set
+        # B's waiter; instead, it should move on to C's waiter.
+
+        # Setup: A has the lock, b and c are waiting.
+        lock = locks.Lock(loop=self.loop)
+
+        @tasks.coroutine
+        def lockit(name, blocker):
+            yield from lock.acquire()
+            try:
+                if blocker is not None:
+                    yield from blocker
+            finally:
+                lock.release()
+
+        fa = futures.Future(loop=self.loop)
+        ta = tasks.Task(lockit('A', fa), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.assertTrue(lock.locked())
+        tb = tasks.Task(lockit('B', None), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(len(lock._waiters), 1)
+        tc = tasks.Task(lockit('C', None), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(len(lock._waiters), 2)
+
+        # Create the race and check.
+        # Without the fix this failed at the last assert.
+        fa.set_result(None)
+        tb.cancel()
+        self.assertTrue(lock._waiters[0].cancelled())
+        test_utils.run_briefly(self.loop)
+        self.assertFalse(lock.locked())
+        self.assertTrue(ta.done())
+        self.assertTrue(tb.cancelled())
+        self.assertTrue(tc.done())
+
+    def test_release_not_acquired(self):
+        lock = locks.Lock(loop=self.loop)
+
+        self.assertRaises(RuntimeError, lock.release)
+
+    def test_release_no_waiters(self):
+        lock = locks.Lock(loop=self.loop)
+        self.loop.run_until_complete(lock.acquire())
+        self.assertTrue(lock.locked())
+
+        lock.release()
+        self.assertFalse(lock.locked())
+
+    def test_context_manager(self):
+        lock = locks.Lock(loop=self.loop)
+
+        @tasks.coroutine
+        def acquire_lock():
+            return (yield from lock)
+
+        with self.loop.run_until_complete(acquire_lock()):
+            self.assertTrue(lock.locked())
+
+        self.assertFalse(lock.locked())
+
+    def test_context_manager_no_yield(self):
+        lock = locks.Lock(loop=self.loop)
+
+        try:
+            with lock:
+                self.fail('RuntimeError is not raised in with expression')
+        except RuntimeError as err:
+            self.assertEqual(
+                str(err),
+                '"yield from" should be used as context manager expression')
+
+
+class EventTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+
+    def test_ctor_loop(self):
+        loop = unittest.mock.Mock()
+        ev = locks.Event(loop=loop)
+        self.assertIs(ev._loop, loop)
+
+        ev = locks.Event(loop=self.loop)
+        self.assertIs(ev._loop, self.loop)
+
+    def test_ctor_noloop(self):
+        try:
+            events.set_event_loop(self.loop)
+            ev = locks.Event()
+            self.assertIs(ev._loop, self.loop)
+        finally:
+            events.set_event_loop(None)
+
+    def test_repr(self):
+        ev = locks.Event(loop=self.loop)
+        self.assertTrue(repr(ev).endswith('[unset]>'))
+        match = RGX_REPR.match(repr(ev))
+        self.assertEqual(match.group('extras'), 'unset')
+
+        ev.set()
+        self.assertTrue(repr(ev).endswith('[set]>'))
+        self.assertTrue(RGX_REPR.match(repr(ev)))
+
+        ev._waiters.append(unittest.mock.Mock())
+        self.assertTrue('waiters:1' in repr(ev))
+        self.assertTrue(RGX_REPR.match(repr(ev)))
+
+    def test_wait(self):
+        ev = locks.Event(loop=self.loop)
+        self.assertFalse(ev.is_set())
+
+        result = []
+
+        @tasks.coroutine
+        def c1(result):
+            if (yield from ev.wait()):
+                result.append(1)
+
+        @tasks.coroutine
+        def c2(result):
+            if (yield from ev.wait()):
+                result.append(2)
+
+        @tasks.coroutine
+        def c3(result):
+            if (yield from ev.wait()):
+                result.append(3)
+
+        t1 = tasks.Task(c1(result), loop=self.loop)
+        t2 = tasks.Task(c2(result), loop=self.loop)
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([], result)
+
+        t3 = tasks.Task(c3(result), loop=self.loop)
+
+        ev.set()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([3, 1, 2], result)
+
+        self.assertTrue(t1.done())
+        self.assertIsNone(t1.result())
+        self.assertTrue(t2.done())
+        self.assertIsNone(t2.result())
+        self.assertTrue(t3.done())
+        self.assertIsNone(t3.result())
+
+    def test_wait_on_set(self):
+        ev = locks.Event(loop=self.loop)
+        ev.set()
+
+        res = self.loop.run_until_complete(ev.wait())
+        self.assertTrue(res)
+
+    def test_wait_cancel(self):
+        ev = locks.Event(loop=self.loop)
+
+        wait = tasks.Task(ev.wait(), loop=self.loop)
+        self.loop.call_soon(wait.cancel)
+        self.assertRaises(
+            futures.CancelledError,
+            self.loop.run_until_complete, wait)
+        self.assertFalse(ev._waiters)
+
+    def test_clear(self):
+        ev = locks.Event(loop=self.loop)
+        self.assertFalse(ev.is_set())
+
+        ev.set()
+        self.assertTrue(ev.is_set())
+
+        ev.clear()
+        self.assertFalse(ev.is_set())
+
+    def test_clear_with_waiters(self):
+        ev = locks.Event(loop=self.loop)
+        result = []
+
+        @tasks.coroutine
+        def c1(result):
+            if (yield from ev.wait()):
+                result.append(1)
+            return True
+
+        t = tasks.Task(c1(result), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([], result)
+
+        ev.set()
+        ev.clear()
+        self.assertFalse(ev.is_set())
+
+        ev.set()
+        ev.set()
+        self.assertEqual(1, len(ev._waiters))
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1], result)
+        self.assertEqual(0, len(ev._waiters))
+
+        self.assertTrue(t.done())
+        self.assertTrue(t.result())
+
+
+class ConditionTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+
+    def test_ctor_loop(self):
+        loop = unittest.mock.Mock()
+        cond = locks.Condition(loop=loop)
+        self.assertIs(cond._loop, loop)
+
+        cond = locks.Condition(loop=self.loop)
+        self.assertIs(cond._loop, self.loop)
+
+    def test_ctor_noloop(self):
+        try:
+            events.set_event_loop(self.loop)
+            cond = locks.Condition()
+            self.assertIs(cond._loop, self.loop)
+        finally:
+            events.set_event_loop(None)
+
+    def test_wait(self):
+        cond = locks.Condition(loop=self.loop)
+        result = []
+
+        @tasks.coroutine
+        def c1(result):
+            yield from cond.acquire()
+            if (yield from cond.wait()):
+                result.append(1)
+            return True
+
+        @tasks.coroutine
+        def c2(result):
+            yield from cond.acquire()
+            if (yield from cond.wait()):
+                result.append(2)
+            return True
+
+        @tasks.coroutine
+        def c3(result):
+            yield from cond.acquire()
+            if (yield from cond.wait()):
+                result.append(3)
+            return True
+
+        t1 = tasks.Task(c1(result), loop=self.loop)
+        t2 = tasks.Task(c2(result), loop=self.loop)
+        t3 = tasks.Task(c3(result), loop=self.loop)
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([], result)
+        self.assertFalse(cond.locked())
+
+        self.assertTrue(self.loop.run_until_complete(cond.acquire()))
+        cond.notify()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([], result)
+        self.assertTrue(cond.locked())
+
+        cond.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1], result)
+        self.assertTrue(cond.locked())
+
+        cond.notify(2)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1], result)
+        self.assertTrue(cond.locked())
+
+        cond.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1, 2], result)
+        self.assertTrue(cond.locked())
+
+        cond.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1, 2, 3], result)
+        self.assertTrue(cond.locked())
+
+        self.assertTrue(t1.done())
+        self.assertTrue(t1.result())
+        self.assertTrue(t2.done())
+        self.assertTrue(t2.result())
+        self.assertTrue(t3.done())
+        self.assertTrue(t3.result())
+
+    def test_wait_cancel(self):
+        cond = locks.Condition(loop=self.loop)
+        self.loop.run_until_complete(cond.acquire())
+
+        wait = tasks.Task(cond.wait(), loop=self.loop)
+        self.loop.call_soon(wait.cancel)
+        self.assertRaises(
+            futures.CancelledError,
+            self.loop.run_until_complete, wait)
+        self.assertFalse(cond._waiters)
+        self.assertTrue(cond.locked())
+
+    def test_wait_unacquired(self):
+        cond = locks.Condition(loop=self.loop)
+        self.assertRaises(
+            RuntimeError,
+            self.loop.run_until_complete, cond.wait())
+
+    def test_wait_for(self):
+        cond = locks.Condition(loop=self.loop)
+        presult = False
+
+        def predicate():
+            return presult
+
+        result = []
+
+        @tasks.coroutine
+        def c1(result):
+            yield from cond.acquire()
+            if (yield from cond.wait_for(predicate)):
+                result.append(1)
+                cond.release()
+            return True
+
+        t = tasks.Task(c1(result), loop=self.loop)
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([], result)
+
+        self.loop.run_until_complete(cond.acquire())
+        cond.notify()
+        cond.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([], result)
+
+        presult = True
+        self.loop.run_until_complete(cond.acquire())
+        cond.notify()
+        cond.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1], result)
+
+        self.assertTrue(t.done())
+        self.assertTrue(t.result())
+
+    def test_wait_for_unacquired(self):
+        cond = locks.Condition(loop=self.loop)
+
+        # predicate can return true immediately
+        res = self.loop.run_until_complete(cond.wait_for(lambda: [1, 2, 3]))
+        self.assertEqual([1, 2, 3], res)
+
+        self.assertRaises(
+            RuntimeError,
+            self.loop.run_until_complete,
+            cond.wait_for(lambda: False))
+
+    def test_notify(self):
+        cond = locks.Condition(loop=self.loop)
+        result = []
+
+        @tasks.coroutine
+        def c1(result):
+            yield from cond.acquire()
+            if (yield from cond.wait()):
+                result.append(1)
+                cond.release()
+            return True
+
+        @tasks.coroutine
+        def c2(result):
+            yield from cond.acquire()
+            if (yield from cond.wait()):
+                result.append(2)
+                cond.release()
+            return True
+
+        @tasks.coroutine
+        def c3(result):
+            yield from cond.acquire()
+            if (yield from cond.wait()):
+                result.append(3)
+                cond.release()
+            return True
+
+        t1 = tasks.Task(c1(result), loop=self.loop)
+        t2 = tasks.Task(c2(result), loop=self.loop)
+        t3 = tasks.Task(c3(result), loop=self.loop)
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([], result)
+
+        self.loop.run_until_complete(cond.acquire())
+        cond.notify(1)
+        cond.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1], result)
+
+        self.loop.run_until_complete(cond.acquire())
+        cond.notify(1)
+        cond.notify(2048)
+        cond.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1, 2, 3], result)
+
+        self.assertTrue(t1.done())
+        self.assertTrue(t1.result())
+        self.assertTrue(t2.done())
+        self.assertTrue(t2.result())
+        self.assertTrue(t3.done())
+        self.assertTrue(t3.result())
+
+    def test_notify_all(self):
+        cond = locks.Condition(loop=self.loop)
+
+        result = []
+
+        @tasks.coroutine
+        def c1(result):
+            yield from cond.acquire()
+            if (yield from cond.wait()):
+                result.append(1)
+                cond.release()
+            return True
+
+        @tasks.coroutine
+        def c2(result):
+            yield from cond.acquire()
+            if (yield from cond.wait()):
+                result.append(2)
+                cond.release()
+            return True
+
+        t1 = tasks.Task(c1(result), loop=self.loop)
+        t2 = tasks.Task(c2(result), loop=self.loop)
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([], result)
+
+        self.loop.run_until_complete(cond.acquire())
+        cond.notify_all()
+        cond.release()
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1, 2], result)
+
+        self.assertTrue(t1.done())
+        self.assertTrue(t1.result())
+        self.assertTrue(t2.done())
+        self.assertTrue(t2.result())
+
+    def test_notify_unacquired(self):
+        cond = locks.Condition(loop=self.loop)
+        self.assertRaises(RuntimeError, cond.notify)
+
+    def test_notify_all_unacquired(self):
+        cond = locks.Condition(loop=self.loop)
+        self.assertRaises(RuntimeError, cond.notify_all)
+
+    def test_repr(self):
+        cond = locks.Condition(loop=self.loop)
+        self.assertTrue('unlocked' in repr(cond))
+        self.assertTrue(RGX_REPR.match(repr(cond)))
+
+        self.loop.run_until_complete(cond.acquire())
+        self.assertTrue('locked' in repr(cond))
+
+        cond._waiters.append(unittest.mock.Mock())
+        self.assertTrue('waiters:1' in repr(cond))
+        self.assertTrue(RGX_REPR.match(repr(cond)))
+
+        cond._waiters.append(unittest.mock.Mock())
+        self.assertTrue('waiters:2' in repr(cond))
+        self.assertTrue(RGX_REPR.match(repr(cond)))
+
+    def test_context_manager(self):
+        cond = locks.Condition(loop=self.loop)
+
+        @tasks.coroutine
+        def acquire_cond():
+            return (yield from cond)
+
+        with self.loop.run_until_complete(acquire_cond()):
+            self.assertTrue(cond.locked())
+
+        self.assertFalse(cond.locked())
+
+    def test_context_manager_no_yield(self):
+        cond = locks.Condition(loop=self.loop)
+
+        try:
+            with cond:
+                self.fail('RuntimeError is not raised in with expression')
+        except RuntimeError as err:
+            self.assertEqual(
+                str(err),
+                '"yield from" should be used as context manager expression')
+
+
+class SemaphoreTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+
+    def test_ctor_loop(self):
+        loop = unittest.mock.Mock()
+        sem = locks.Semaphore(loop=loop)
+        self.assertIs(sem._loop, loop)
+
+        sem = locks.Semaphore(loop=self.loop)
+        self.assertIs(sem._loop, self.loop)
+
+    def test_ctor_noloop(self):
+        try:
+            events.set_event_loop(self.loop)
+            sem = locks.Semaphore()
+            self.assertIs(sem._loop, self.loop)
+        finally:
+            events.set_event_loop(None)
+
+    def test_repr(self):
+        sem = locks.Semaphore(loop=self.loop)
+        self.assertTrue(repr(sem).endswith('[unlocked,value:1]>'))
+        self.assertTrue(RGX_REPR.match(repr(sem)))
+
+        self.loop.run_until_complete(sem.acquire())
+        self.assertTrue(repr(sem).endswith('[locked]>'))
+        self.assertTrue('waiters' not in repr(sem))
+        self.assertTrue(RGX_REPR.match(repr(sem)))
+
+        sem._waiters.append(unittest.mock.Mock())
+        self.assertTrue('waiters:1' in repr(sem))
+        self.assertTrue(RGX_REPR.match(repr(sem)))
+
+        sem._waiters.append(unittest.mock.Mock())
+        self.assertTrue('waiters:2' in repr(sem))
+        self.assertTrue(RGX_REPR.match(repr(sem)))
+
+    def test_semaphore(self):
+        sem = locks.Semaphore(loop=self.loop)
+        self.assertEqual(1, sem._value)
+
+        @tasks.coroutine
+        def acquire_lock():
+            return (yield from sem)
+
+        res = self.loop.run_until_complete(acquire_lock())
+
+        self.assertTrue(res)
+        self.assertTrue(sem.locked())
+        self.assertEqual(0, sem._value)
+
+        sem.release()
+        self.assertFalse(sem.locked())
+        self.assertEqual(1, sem._value)
+
+    def test_semaphore_value(self):
+        self.assertRaises(ValueError, locks.Semaphore, -1)
+
+    def test_acquire(self):
+        sem = locks.Semaphore(3, loop=self.loop)
+        result = []
+
+        self.assertTrue(self.loop.run_until_complete(sem.acquire()))
+        self.assertTrue(self.loop.run_until_complete(sem.acquire()))
+        self.assertFalse(sem.locked())
+
+        @tasks.coroutine
+        def c1(result):
+            yield from sem.acquire()
+            result.append(1)
+            return True
+
+        @tasks.coroutine
+        def c2(result):
+            yield from sem.acquire()
+            result.append(2)
+            return True
+
+        @tasks.coroutine
+        def c3(result):
+            yield from sem.acquire()
+            result.append(3)
+            return True
+
+        @tasks.coroutine
+        def c4(result):
+            yield from sem.acquire()
+            result.append(4)
+            return True
+
+        t1 = tasks.Task(c1(result), loop=self.loop)
+        t2 = tasks.Task(c2(result), loop=self.loop)
+        t3 = tasks.Task(c3(result), loop=self.loop)
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual([1], result)
+        self.assertTrue(sem.locked())
+        self.assertEqual(2, len(sem._waiters))
+        self.assertEqual(0, sem._value)
+
+        t4 = tasks.Task(c4(result), loop=self.loop)
+
+        sem.release()
+        sem.release()
+        self.assertEqual(2, sem._value)
+
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(0, sem._value)
+        self.assertEqual([1, 2, 3], result)
+        self.assertTrue(sem.locked())
+        self.assertEqual(1, len(sem._waiters))
+        self.assertEqual(0, sem._value)
+
+        self.assertTrue(t1.done())
+        self.assertTrue(t1.result())
+        self.assertTrue(t2.done())
+        self.assertTrue(t2.result())
+        self.assertTrue(t3.done())
+        self.assertTrue(t3.result())
+        self.assertFalse(t4.done())
+
+        # cleanup locked semaphore
+        sem.release()
+
+    def test_acquire_cancel(self):
+        sem = locks.Semaphore(loop=self.loop)
+        self.loop.run_until_complete(sem.acquire())
+
+        acquire = tasks.Task(sem.acquire(), loop=self.loop)
+        self.loop.call_soon(acquire.cancel)
+        self.assertRaises(
+            futures.CancelledError,
+            self.loop.run_until_complete, acquire)
+        self.assertFalse(sem._waiters)
+
+    def test_release_not_acquired(self):
+        sem = locks.Semaphore(bound=True, loop=self.loop)
+
+        self.assertRaises(ValueError, sem.release)
+
+    def test_release_no_waiters(self):
+        sem = locks.Semaphore(loop=self.loop)
+        self.loop.run_until_complete(sem.acquire())
+        self.assertTrue(sem.locked())
+
+        sem.release()
+        self.assertFalse(sem.locked())
+
+    def test_context_manager(self):
+        sem = locks.Semaphore(2, loop=self.loop)
+
+        @tasks.coroutine
+        def acquire_lock():
+            return (yield from sem)
+
+        with self.loop.run_until_complete(acquire_lock()):
+            self.assertFalse(sem.locked())
+            self.assertEqual(1, sem._value)
+
+            with self.loop.run_until_complete(acquire_lock()):
+                self.assertTrue(sem.locked())
+
+        self.assertEqual(2, sem._value)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_proactor_events.py b/Lib/test/test_asyncio/test_proactor_events.py
new file mode 100644
index 0000000..5a2a51c
--- /dev/null
+++ b/Lib/test/test_asyncio/test_proactor_events.py
@@ -0,0 +1,484 @@
+"""Tests for proactor_events.py"""
+
+import socket
+import unittest
+import unittest.mock
+
+import asyncio
+from asyncio.proactor_events import BaseProactorEventLoop
+from asyncio.proactor_events import _ProactorSocketTransport
+from asyncio.proactor_events import _ProactorWritePipeTransport
+from asyncio.proactor_events import _ProactorDuplexPipeTransport
+from asyncio import test_utils
+
+
+class ProactorSocketTransportTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        self.proactor = unittest.mock.Mock()
+        self.loop._proactor = self.proactor
+        self.protocol = test_utils.make_test_protocol(asyncio.Protocol)
+        self.sock = unittest.mock.Mock(socket.socket)
+
+    def test_ctor(self):
+        fut = asyncio.Future(loop=self.loop)
+        tr = _ProactorSocketTransport(
+            self.loop, self.sock, self.protocol, fut)
+        test_utils.run_briefly(self.loop)
+        self.assertIsNone(fut.result())
+        self.protocol.connection_made(tr)
+        self.proactor.recv.assert_called_with(self.sock, 4096)
+
+    def test_loop_reading(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._loop_reading()
+        self.loop._proactor.recv.assert_called_with(self.sock, 4096)
+        self.assertFalse(self.protocol.data_received.called)
+        self.assertFalse(self.protocol.eof_received.called)
+
+    def test_loop_reading_data(self):
+        res = asyncio.Future(loop=self.loop)
+        res.set_result(b'data')
+
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+
+        tr._read_fut = res
+        tr._loop_reading(res)
+        self.loop._proactor.recv.assert_called_with(self.sock, 4096)
+        self.protocol.data_received.assert_called_with(b'data')
+
+    def test_loop_reading_no_data(self):
+        res = asyncio.Future(loop=self.loop)
+        res.set_result(b'')
+
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+
+        self.assertRaises(AssertionError, tr._loop_reading, res)
+
+        tr.close = unittest.mock.Mock()
+        tr._read_fut = res
+        tr._loop_reading(res)
+        self.assertFalse(self.loop._proactor.recv.called)
+        self.assertTrue(self.protocol.eof_received.called)
+        self.assertTrue(tr.close.called)
+
+    def test_loop_reading_aborted(self):
+        err = self.loop._proactor.recv.side_effect = ConnectionAbortedError()
+
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._fatal_error = unittest.mock.Mock()
+        tr._loop_reading()
+        tr._fatal_error.assert_called_with(err)
+
+    def test_loop_reading_aborted_closing(self):
+        self.loop._proactor.recv.side_effect = ConnectionAbortedError()
+
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._closing = True
+        tr._fatal_error = unittest.mock.Mock()
+        tr._loop_reading()
+        self.assertFalse(tr._fatal_error.called)
+
+    def test_loop_reading_aborted_is_fatal(self):
+        self.loop._proactor.recv.side_effect = ConnectionAbortedError()
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._closing = False
+        tr._fatal_error = unittest.mock.Mock()
+        tr._loop_reading()
+        self.assertTrue(tr._fatal_error.called)
+
+    def test_loop_reading_conn_reset_lost(self):
+        err = self.loop._proactor.recv.side_effect = ConnectionResetError()
+
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._closing = False
+        tr._fatal_error = unittest.mock.Mock()
+        tr._force_close = unittest.mock.Mock()
+        tr._loop_reading()
+        self.assertFalse(tr._fatal_error.called)
+        tr._force_close.assert_called_with(err)
+
+    def test_loop_reading_exception(self):
+        err = self.loop._proactor.recv.side_effect = (OSError())
+
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._fatal_error = unittest.mock.Mock()
+        tr._loop_reading()
+        tr._fatal_error.assert_called_with(err)
+
+    def test_write(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._loop_writing = unittest.mock.Mock()
+        tr.write(b'data')
+        self.assertEqual(tr._buffer, [b'data'])
+        self.assertTrue(tr._loop_writing.called)
+
+    def test_write_no_data(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr.write(b'')
+        self.assertFalse(tr._buffer)
+
+    def test_write_more(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._write_fut = unittest.mock.Mock()
+        tr._loop_writing = unittest.mock.Mock()
+        tr.write(b'data')
+        self.assertEqual(tr._buffer, [b'data'])
+        self.assertFalse(tr._loop_writing.called)
+
+    def test_loop_writing(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._buffer = [b'da', b'ta']
+        tr._loop_writing()
+        self.loop._proactor.send.assert_called_with(self.sock, b'data')
+        self.loop._proactor.send.return_value.add_done_callback.\
+            assert_called_with(tr._loop_writing)
+
+    @unittest.mock.patch('asyncio.proactor_events.logger')
+    def test_loop_writing_err(self, m_log):
+        err = self.loop._proactor.send.side_effect = OSError()
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._fatal_error = unittest.mock.Mock()
+        tr._buffer = [b'da', b'ta']
+        tr._loop_writing()
+        tr._fatal_error.assert_called_with(err)
+        tr._conn_lost = 1
+
+        tr.write(b'data')
+        tr.write(b'data')
+        tr.write(b'data')
+        tr.write(b'data')
+        tr.write(b'data')
+        self.assertEqual(tr._buffer, [])
+        m_log.warning.assert_called_with('socket.send() raised exception.')
+
+    def test_loop_writing_stop(self):
+        fut = asyncio.Future(loop=self.loop)
+        fut.set_result(b'data')
+
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._write_fut = fut
+        tr._loop_writing(fut)
+        self.assertIsNone(tr._write_fut)
+
+    def test_loop_writing_closing(self):
+        fut = asyncio.Future(loop=self.loop)
+        fut.set_result(1)
+
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._write_fut = fut
+        tr.close()
+        tr._loop_writing(fut)
+        self.assertIsNone(tr._write_fut)
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_lost.assert_called_with(None)
+
+    def test_abort(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._force_close = unittest.mock.Mock()
+        tr.abort()
+        tr._force_close.assert_called_with(None)
+
+    def test_close(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr.close()
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_lost.assert_called_with(None)
+        self.assertTrue(tr._closing)
+        self.assertEqual(tr._conn_lost, 1)
+
+        self.protocol.connection_lost.reset_mock()
+        tr.close()
+        test_utils.run_briefly(self.loop)
+        self.assertFalse(self.protocol.connection_lost.called)
+
+    def test_close_write_fut(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._write_fut = unittest.mock.Mock()
+        tr.close()
+        test_utils.run_briefly(self.loop)
+        self.assertFalse(self.protocol.connection_lost.called)
+
+    def test_close_buffer(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._buffer = [b'data']
+        tr.close()
+        test_utils.run_briefly(self.loop)
+        self.assertFalse(self.protocol.connection_lost.called)
+
+    @unittest.mock.patch('asyncio.proactor_events.logger')
+    def test_fatal_error(self, m_logging):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._force_close = unittest.mock.Mock()
+        tr._fatal_error(None)
+        self.assertTrue(tr._force_close.called)
+        self.assertTrue(m_logging.exception.called)
+
+    def test_force_close(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._buffer = [b'data']
+        read_fut = tr._read_fut = unittest.mock.Mock()
+        write_fut = tr._write_fut = unittest.mock.Mock()
+        tr._force_close(None)
+
+        read_fut.cancel.assert_called_with()
+        write_fut.cancel.assert_called_with()
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_lost.assert_called_with(None)
+        self.assertEqual([], tr._buffer)
+        self.assertEqual(tr._conn_lost, 1)
+
+    def test_force_close_idempotent(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._closing = True
+        tr._force_close(None)
+        test_utils.run_briefly(self.loop)
+        self.assertFalse(self.protocol.connection_lost.called)
+
+    def test_fatal_error_2(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._buffer = [b'data']
+        tr._force_close(None)
+
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_lost.assert_called_with(None)
+        self.assertEqual([], tr._buffer)
+
+    def test_call_connection_lost(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        tr._call_connection_lost(None)
+        self.assertTrue(self.protocol.connection_lost.called)
+        self.assertTrue(self.sock.close.called)
+
+    def test_write_eof(self):
+        tr = _ProactorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        self.assertTrue(tr.can_write_eof())
+        tr.write_eof()
+        self.sock.shutdown.assert_called_with(socket.SHUT_WR)
+        tr.write_eof()
+        self.assertEqual(self.sock.shutdown.call_count, 1)
+        tr.close()
+
+    def test_write_eof_buffer(self):
+        tr = _ProactorSocketTransport(self.loop, self.sock, self.protocol)
+        f = asyncio.Future(loop=self.loop)
+        tr._loop._proactor.send.return_value = f
+        tr.write(b'data')
+        tr.write_eof()
+        self.assertTrue(tr._eof_written)
+        self.assertFalse(self.sock.shutdown.called)
+        tr._loop._proactor.send.assert_called_with(self.sock, b'data')
+        f.set_result(4)
+        self.loop._run_once()
+        self.sock.shutdown.assert_called_with(socket.SHUT_WR)
+        tr.close()
+
+    def test_write_eof_write_pipe(self):
+        tr = _ProactorWritePipeTransport(
+            self.loop, self.sock, self.protocol)
+        self.assertTrue(tr.can_write_eof())
+        tr.write_eof()
+        self.assertTrue(tr._closing)
+        self.loop._run_once()
+        self.assertTrue(self.sock.close.called)
+        tr.close()
+
+    def test_write_eof_buffer_write_pipe(self):
+        tr = _ProactorWritePipeTransport(self.loop, self.sock, self.protocol)
+        f = asyncio.Future(loop=self.loop)
+        tr._loop._proactor.send.return_value = f
+        tr.write(b'data')
+        tr.write_eof()
+        self.assertTrue(tr._closing)
+        self.assertFalse(self.sock.shutdown.called)
+        tr._loop._proactor.send.assert_called_with(self.sock, b'data')
+        f.set_result(4)
+        self.loop._run_once()
+        self.loop._run_once()
+        self.assertTrue(self.sock.close.called)
+        tr.close()
+
+    def test_write_eof_duplex_pipe(self):
+        tr = _ProactorDuplexPipeTransport(
+            self.loop, self.sock, self.protocol)
+        self.assertFalse(tr.can_write_eof())
+        with self.assertRaises(NotImplementedError):
+            tr.write_eof()
+        tr.close()
+
+    def test_pause_resume_reading(self):
+        tr = _ProactorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        futures = []
+        for msg in [b'data1', b'data2', b'data3', b'data4', b'']:
+            f = asyncio.Future(loop=self.loop)
+            f.set_result(msg)
+            futures.append(f)
+        self.loop._proactor.recv.side_effect = futures
+        self.loop._run_once()
+        self.assertFalse(tr._paused)
+        self.loop._run_once()
+        self.protocol.data_received.assert_called_with(b'data1')
+        self.loop._run_once()
+        self.protocol.data_received.assert_called_with(b'data2')
+        tr.pause_reading()
+        self.assertTrue(tr._paused)
+        for i in range(10):
+            self.loop._run_once()
+        self.protocol.data_received.assert_called_with(b'data2')
+        tr.resume_reading()
+        self.assertFalse(tr._paused)
+        self.loop._run_once()
+        self.protocol.data_received.assert_called_with(b'data3')
+        self.loop._run_once()
+        self.protocol.data_received.assert_called_with(b'data4')
+        tr.close()
+
+
+class BaseProactorEventLoopTests(unittest.TestCase):
+
+    def setUp(self):
+        self.sock = unittest.mock.Mock(socket.socket)
+        self.proactor = unittest.mock.Mock()
+
+        self.ssock, self.csock = unittest.mock.Mock(), unittest.mock.Mock()
+
+        class EventLoop(BaseProactorEventLoop):
+            def _socketpair(s):
+                return (self.ssock, self.csock)
+
+        self.loop = EventLoop(self.proactor)
+
+    @unittest.mock.patch.object(BaseProactorEventLoop, 'call_soon')
+    @unittest.mock.patch.object(BaseProactorEventLoop, '_socketpair')
+    def test_ctor(self, socketpair, call_soon):
+        ssock, csock = socketpair.return_value = (
+            unittest.mock.Mock(), unittest.mock.Mock())
+        loop = BaseProactorEventLoop(self.proactor)
+        self.assertIs(loop._ssock, ssock)
+        self.assertIs(loop._csock, csock)
+        self.assertEqual(loop._internal_fds, 1)
+        call_soon.assert_called_with(loop._loop_self_reading)
+
+    def test_close_self_pipe(self):
+        self.loop._close_self_pipe()
+        self.assertEqual(self.loop._internal_fds, 0)
+        self.assertTrue(self.ssock.close.called)
+        self.assertTrue(self.csock.close.called)
+        self.assertIsNone(self.loop._ssock)
+        self.assertIsNone(self.loop._csock)
+
+    def test_close(self):
+        self.loop._close_self_pipe = unittest.mock.Mock()
+        self.loop.close()
+        self.assertTrue(self.loop._close_self_pipe.called)
+        self.assertTrue(self.proactor.close.called)
+        self.assertIsNone(self.loop._proactor)
+
+        self.loop._close_self_pipe.reset_mock()
+        self.loop.close()
+        self.assertFalse(self.loop._close_self_pipe.called)
+
+    def test_sock_recv(self):
+        self.loop.sock_recv(self.sock, 1024)
+        self.proactor.recv.assert_called_with(self.sock, 1024)
+
+    def test_sock_sendall(self):
+        self.loop.sock_sendall(self.sock, b'data')
+        self.proactor.send.assert_called_with(self.sock, b'data')
+
+    def test_sock_connect(self):
+        self.loop.sock_connect(self.sock, 123)
+        self.proactor.connect.assert_called_with(self.sock, 123)
+
+    def test_sock_accept(self):
+        self.loop.sock_accept(self.sock)
+        self.proactor.accept.assert_called_with(self.sock)
+
+    def test_socketpair(self):
+        self.assertRaises(
+            NotImplementedError, BaseProactorEventLoop, self.proactor)
+
+    def test_make_socket_transport(self):
+        tr = self.loop._make_socket_transport(self.sock, unittest.mock.Mock())
+        self.assertIsInstance(tr, _ProactorSocketTransport)
+
+    def test_loop_self_reading(self):
+        self.loop._loop_self_reading()
+        self.proactor.recv.assert_called_with(self.ssock, 4096)
+        self.proactor.recv.return_value.add_done_callback.assert_called_with(
+            self.loop._loop_self_reading)
+
+    def test_loop_self_reading_fut(self):
+        fut = unittest.mock.Mock()
+        self.loop._loop_self_reading(fut)
+        self.assertTrue(fut.result.called)
+        self.proactor.recv.assert_called_with(self.ssock, 4096)
+        self.proactor.recv.return_value.add_done_callback.assert_called_with(
+            self.loop._loop_self_reading)
+
+    def test_loop_self_reading_exception(self):
+        self.loop.close = unittest.mock.Mock()
+        self.proactor.recv.side_effect = OSError()
+        self.assertRaises(OSError, self.loop._loop_self_reading)
+        self.assertTrue(self.loop.close.called)
+
+    def test_write_to_self(self):
+        self.loop._write_to_self()
+        self.csock.send.assert_called_with(b'x')
+
+    def test_process_events(self):
+        self.loop._process_events([])
+
+    @unittest.mock.patch('asyncio.proactor_events.logger')
+    def test_create_server(self, m_log):
+        pf = unittest.mock.Mock()
+        call_soon = self.loop.call_soon = unittest.mock.Mock()
+
+        self.loop._start_serving(pf, self.sock)
+        self.assertTrue(call_soon.called)
+
+        # callback
+        loop = call_soon.call_args[0][0]
+        loop()
+        self.proactor.accept.assert_called_with(self.sock)
+
+        # conn
+        fut = unittest.mock.Mock()
+        fut.result.return_value = (unittest.mock.Mock(), unittest.mock.Mock())
+
+        make_tr = self.loop._make_socket_transport = unittest.mock.Mock()
+        loop(fut)
+        self.assertTrue(fut.result.called)
+        self.assertTrue(make_tr.called)
+
+        # exception
+        fut.result.side_effect = OSError()
+        loop(fut)
+        self.assertTrue(self.sock.close.called)
+        self.assertTrue(m_log.exception.called)
+
+    def test_create_server_cancel(self):
+        pf = unittest.mock.Mock()
+        call_soon = self.loop.call_soon = unittest.mock.Mock()
+
+        self.loop._start_serving(pf, self.sock)
+        loop = call_soon.call_args[0][0]
+
+        # cancelled
+        fut = asyncio.Future(loop=self.loop)
+        fut.cancel()
+        loop(fut)
+        self.assertTrue(self.sock.close.called)
+
+    def test_stop_serving(self):
+        sock = unittest.mock.Mock()
+        self.loop._stop_serving(sock)
+        self.assertTrue(sock.close.called)
+        self.proactor._stop_serving.assert_called_with(sock)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_queues.py b/Lib/test/test_asyncio/test_queues.py
new file mode 100644
index 0000000..8af4ee7
--- /dev/null
+++ b/Lib/test/test_asyncio/test_queues.py
@@ -0,0 +1,470 @@
+"""Tests for queues.py"""
+
+import unittest
+import unittest.mock
+
+from asyncio import events
+from asyncio import futures
+from asyncio import locks
+from asyncio import queues
+from asyncio import tasks
+from asyncio import test_utils
+
+
+class _QueueTestBase(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+
+
+class QueueBasicTests(_QueueTestBase):
+
+    def _test_repr_or_str(self, fn, expect_id):
+        """Test Queue's repr or str.
+
+        fn is repr or str. expect_id is True if we expect the Queue's id to
+        appear in fn(Queue()).
+        """
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0.1
+            self.assertAlmostEqual(0.2, when)
+            yield 0.1
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        q = queues.Queue(loop=loop)
+        self.assertTrue(fn(q).startswith('<Queue'), fn(q))
+        id_is_present = hex(id(q)) in fn(q)
+        self.assertEqual(expect_id, id_is_present)
+
+        @tasks.coroutine
+        def add_getter():
+            q = queues.Queue(loop=loop)
+            # Start a task that waits to get.
+            tasks.Task(q.get(), loop=loop)
+            # Let it start waiting.
+            yield from tasks.sleep(0.1, loop=loop)
+            self.assertTrue('_getters[1]' in fn(q))
+            # resume q.get coroutine to finish generator
+            q.put_nowait(0)
+
+        loop.run_until_complete(add_getter())
+
+        @tasks.coroutine
+        def add_putter():
+            q = queues.Queue(maxsize=1, loop=loop)
+            q.put_nowait(1)
+            # Start a task that waits to put.
+            tasks.Task(q.put(2), loop=loop)
+            # Let it start waiting.
+            yield from tasks.sleep(0.1, loop=loop)
+            self.assertTrue('_putters[1]' in fn(q))
+            # resume q.put coroutine to finish generator
+            q.get_nowait()
+
+        loop.run_until_complete(add_putter())
+
+        q = queues.Queue(loop=loop)
+        q.put_nowait(1)
+        self.assertTrue('_queue=[1]' in fn(q))
+
+    def test_ctor_loop(self):
+        loop = unittest.mock.Mock()
+        q = queues.Queue(loop=loop)
+        self.assertIs(q._loop, loop)
+
+        q = queues.Queue(loop=self.loop)
+        self.assertIs(q._loop, self.loop)
+
+    def test_ctor_noloop(self):
+        try:
+            events.set_event_loop(self.loop)
+            q = queues.Queue()
+            self.assertIs(q._loop, self.loop)
+        finally:
+            events.set_event_loop(None)
+
+    def test_repr(self):
+        self._test_repr_or_str(repr, True)
+
+    def test_str(self):
+        self._test_repr_or_str(str, False)
+
+    def test_empty(self):
+        q = queues.Queue(loop=self.loop)
+        self.assertTrue(q.empty())
+        q.put_nowait(1)
+        self.assertFalse(q.empty())
+        self.assertEqual(1, q.get_nowait())
+        self.assertTrue(q.empty())
+
+    def test_full(self):
+        q = queues.Queue(loop=self.loop)
+        self.assertFalse(q.full())
+
+        q = queues.Queue(maxsize=1, loop=self.loop)
+        q.put_nowait(1)
+        self.assertTrue(q.full())
+
+    def test_order(self):
+        q = queues.Queue(loop=self.loop)
+        for i in [1, 3, 2]:
+            q.put_nowait(i)
+
+        items = [q.get_nowait() for _ in range(3)]
+        self.assertEqual([1, 3, 2], items)
+
+    def test_maxsize(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.01, when)
+            when = yield 0.01
+            self.assertAlmostEqual(0.02, when)
+            yield 0.01
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        q = queues.Queue(maxsize=2, loop=loop)
+        self.assertEqual(2, q.maxsize)
+        have_been_put = []
+
+        @tasks.coroutine
+        def putter():
+            for i in range(3):
+                yield from q.put(i)
+                have_been_put.append(i)
+            return True
+
+        @tasks.coroutine
+        def test():
+            t = tasks.Task(putter(), loop=loop)
+            yield from tasks.sleep(0.01, loop=loop)
+
+            # The putter is blocked after putting two items.
+            self.assertEqual([0, 1], have_been_put)
+            self.assertEqual(0, q.get_nowait())
+
+            # Let the putter resume and put last item.
+            yield from tasks.sleep(0.01, loop=loop)
+            self.assertEqual([0, 1, 2], have_been_put)
+            self.assertEqual(1, q.get_nowait())
+            self.assertEqual(2, q.get_nowait())
+
+            self.assertTrue(t.done())
+            self.assertTrue(t.result())
+
+        loop.run_until_complete(test())
+        self.assertAlmostEqual(0.02, loop.time())
+
+
+class QueueGetTests(_QueueTestBase):
+
+    def test_blocking_get(self):
+        q = queues.Queue(loop=self.loop)
+        q.put_nowait(1)
+
+        @tasks.coroutine
+        def queue_get():
+            return (yield from q.get())
+
+        res = self.loop.run_until_complete(queue_get())
+        self.assertEqual(1, res)
+
+    def test_get_with_putters(self):
+        q = queues.Queue(1, loop=self.loop)
+        q.put_nowait(1)
+
+        waiter = futures.Future(loop=self.loop)
+        q._putters.append((2, waiter))
+
+        res = self.loop.run_until_complete(q.get())
+        self.assertEqual(1, res)
+        self.assertTrue(waiter.done())
+        self.assertIsNone(waiter.result())
+
+    def test_blocking_get_wait(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.01, when)
+            yield 0.01
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        q = queues.Queue(loop=loop)
+        started = locks.Event(loop=loop)
+        finished = False
+
+        @tasks.coroutine
+        def queue_get():
+            nonlocal finished
+            started.set()
+            res = yield from q.get()
+            finished = True
+            return res
+
+        @tasks.coroutine
+        def queue_put():
+            loop.call_later(0.01, q.put_nowait, 1)
+            queue_get_task = tasks.Task(queue_get(), loop=loop)
+            yield from started.wait()
+            self.assertFalse(finished)
+            res = yield from queue_get_task
+            self.assertTrue(finished)
+            return res
+
+        res = loop.run_until_complete(queue_put())
+        self.assertEqual(1, res)
+        self.assertAlmostEqual(0.01, loop.time())
+
+    def test_nonblocking_get(self):
+        q = queues.Queue(loop=self.loop)
+        q.put_nowait(1)
+        self.assertEqual(1, q.get_nowait())
+
+    def test_nonblocking_get_exception(self):
+        q = queues.Queue(loop=self.loop)
+        self.assertRaises(queues.Empty, q.get_nowait)
+
+    def test_get_cancelled(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.01, when)
+            when = yield 0.01
+            self.assertAlmostEqual(0.061, when)
+            yield 0.05
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        q = queues.Queue(loop=loop)
+
+        @tasks.coroutine
+        def queue_get():
+            return (yield from tasks.wait_for(q.get(), 0.051, loop=loop))
+
+        @tasks.coroutine
+        def test():
+            get_task = tasks.Task(queue_get(), loop=loop)
+            yield from tasks.sleep(0.01, loop=loop)  # let the task start
+            q.put_nowait(1)
+            return (yield from get_task)
+
+        self.assertEqual(1, loop.run_until_complete(test()))
+        self.assertAlmostEqual(0.06, loop.time())
+
+    def test_get_cancelled_race(self):
+        q = queues.Queue(loop=self.loop)
+
+        t1 = tasks.Task(q.get(), loop=self.loop)
+        t2 = tasks.Task(q.get(), loop=self.loop)
+
+        test_utils.run_briefly(self.loop)
+        t1.cancel()
+        test_utils.run_briefly(self.loop)
+        self.assertTrue(t1.done())
+        q.put_nowait('a')
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(t2.result(), 'a')
+
+    def test_get_with_waiting_putters(self):
+        q = queues.Queue(loop=self.loop, maxsize=1)
+        tasks.Task(q.put('a'), loop=self.loop)
+        tasks.Task(q.put('b'), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(self.loop.run_until_complete(q.get()), 'a')
+        self.assertEqual(self.loop.run_until_complete(q.get()), 'b')
+
+
+class QueuePutTests(_QueueTestBase):
+
+    def test_blocking_put(self):
+        q = queues.Queue(loop=self.loop)
+
+        @tasks.coroutine
+        def queue_put():
+            # No maxsize, won't block.
+            yield from q.put(1)
+
+        self.loop.run_until_complete(queue_put())
+
+    def test_blocking_put_wait(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.01, when)
+            yield 0.01
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        q = queues.Queue(maxsize=1, loop=loop)
+        started = locks.Event(loop=loop)
+        finished = False
+
+        @tasks.coroutine
+        def queue_put():
+            nonlocal finished
+            started.set()
+            yield from q.put(1)
+            yield from q.put(2)
+            finished = True
+
+        @tasks.coroutine
+        def queue_get():
+            loop.call_later(0.01, q.get_nowait)
+            queue_put_task = tasks.Task(queue_put(), loop=loop)
+            yield from started.wait()
+            self.assertFalse(finished)
+            yield from queue_put_task
+            self.assertTrue(finished)
+
+        loop.run_until_complete(queue_get())
+        self.assertAlmostEqual(0.01, loop.time())
+
+    def test_nonblocking_put(self):
+        q = queues.Queue(loop=self.loop)
+        q.put_nowait(1)
+        self.assertEqual(1, q.get_nowait())
+
+    def test_nonblocking_put_exception(self):
+        q = queues.Queue(maxsize=1, loop=self.loop)
+        q.put_nowait(1)
+        self.assertRaises(queues.Full, q.put_nowait, 2)
+
+    def test_put_cancelled(self):
+        q = queues.Queue(loop=self.loop)
+
+        @tasks.coroutine
+        def queue_put():
+            yield from q.put(1)
+            return True
+
+        @tasks.coroutine
+        def test():
+            return (yield from q.get())
+
+        t = tasks.Task(queue_put(), loop=self.loop)
+        self.assertEqual(1, self.loop.run_until_complete(test()))
+        self.assertTrue(t.done())
+        self.assertTrue(t.result())
+
+    def test_put_cancelled_race(self):
+        q = queues.Queue(loop=self.loop, maxsize=1)
+
+        tasks.Task(q.put('a'), loop=self.loop)
+        tasks.Task(q.put('c'), loop=self.loop)
+        t = tasks.Task(q.put('b'), loop=self.loop)
+
+        test_utils.run_briefly(self.loop)
+        t.cancel()
+        test_utils.run_briefly(self.loop)
+        self.assertTrue(t.done())
+        self.assertEqual(q.get_nowait(), 'a')
+        self.assertEqual(q.get_nowait(), 'c')
+
+    def test_put_with_waiting_getters(self):
+        q = queues.Queue(loop=self.loop)
+        t = tasks.Task(q.get(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.loop.run_until_complete(q.put('a'))
+        self.assertEqual(self.loop.run_until_complete(t), 'a')
+
+
+class LifoQueueTests(_QueueTestBase):
+
+    def test_order(self):
+        q = queues.LifoQueue(loop=self.loop)
+        for i in [1, 3, 2]:
+            q.put_nowait(i)
+
+        items = [q.get_nowait() for _ in range(3)]
+        self.assertEqual([2, 3, 1], items)
+
+
+class PriorityQueueTests(_QueueTestBase):
+
+    def test_order(self):
+        q = queues.PriorityQueue(loop=self.loop)
+        for i in [1, 3, 2]:
+            q.put_nowait(i)
+
+        items = [q.get_nowait() for _ in range(3)]
+        self.assertEqual([1, 2, 3], items)
+
+
+class JoinableQueueTests(_QueueTestBase):
+
+    def test_task_done_underflow(self):
+        q = queues.JoinableQueue(loop=self.loop)
+        self.assertRaises(ValueError, q.task_done)
+
+    def test_task_done(self):
+        q = queues.JoinableQueue(loop=self.loop)
+        for i in range(100):
+            q.put_nowait(i)
+
+        accumulator = 0
+
+        # Two workers get items from the queue and call task_done after each.
+        # Join the queue and assert all items have been processed.
+        running = True
+
+        @tasks.coroutine
+        def worker():
+            nonlocal accumulator
+
+            while running:
+                item = yield from q.get()
+                accumulator += item
+                q.task_done()
+
+        @tasks.coroutine
+        def test():
+            for _ in range(2):
+                tasks.Task(worker(), loop=self.loop)
+
+            yield from q.join()
+
+        self.loop.run_until_complete(test())
+        self.assertEqual(sum(range(100)), accumulator)
+
+        # close running generators
+        running = False
+        for i in range(2):
+            q.put_nowait(0)
+
+    def test_join_empty_queue(self):
+        q = queues.JoinableQueue(loop=self.loop)
+
+        # Test that a queue join()s successfully, and before anything else
+        # (done twice for insurance).
+
+        @tasks.coroutine
+        def join():
+            yield from q.join()
+            yield from q.join()
+
+        self.loop.run_until_complete(join())
+
+    def test_format(self):
+        q = queues.JoinableQueue(loop=self.loop)
+        self.assertEqual(q._format(), 'maxsize=0')
+
+        q._unfinished_tasks = 2
+        self.assertEqual(q._format(), 'maxsize=0 tasks=2')
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_selector_events.py b/Lib/test/test_asyncio/test_selector_events.py
new file mode 100644
index 0000000..04a7d0c
--- /dev/null
+++ b/Lib/test/test_asyncio/test_selector_events.py
@@ -0,0 +1,1541 @@
+"""Tests for selector_events.py"""
+
+import collections
+import errno
+import gc
+import pprint
+import socket
+import sys
+import unittest
+import unittest.mock
+try:
+    import ssl
+except ImportError:
+    ssl = None
+
+from asyncio import futures
+from asyncio import selectors
+from asyncio import test_utils
+from asyncio.protocols import DatagramProtocol, Protocol
+from asyncio.selector_events import BaseSelectorEventLoop
+from asyncio.selector_events import _SelectorTransport
+from asyncio.selector_events import _SelectorSslTransport
+from asyncio.selector_events import _SelectorSocketTransport
+from asyncio.selector_events import _SelectorDatagramTransport
+
+
+class TestBaseSelectorEventLoop(BaseSelectorEventLoop):
+
+    def _make_self_pipe(self):
+        self._ssock = unittest.mock.Mock()
+        self._csock = unittest.mock.Mock()
+        self._internal_fds += 1
+
+
+class BaseSelectorEventLoopTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = TestBaseSelectorEventLoop(unittest.mock.Mock())
+
+    def test_make_socket_transport(self):
+        m = unittest.mock.Mock()
+        self.loop.add_reader = unittest.mock.Mock()
+        self.assertIsInstance(
+            self.loop._make_socket_transport(m, m), _SelectorSocketTransport)
+
+    @unittest.skipIf(ssl is None, 'No ssl module')
+    def test_make_ssl_transport(self):
+        m = unittest.mock.Mock()
+        self.loop.add_reader = unittest.mock.Mock()
+        self.loop.add_writer = unittest.mock.Mock()
+        self.loop.remove_reader = unittest.mock.Mock()
+        self.loop.remove_writer = unittest.mock.Mock()
+        self.assertIsInstance(
+            self.loop._make_ssl_transport(m, m, m, m), _SelectorSslTransport)
+
+    @unittest.mock.patch('asyncio.selector_events.ssl', None)
+    def test_make_ssl_transport_without_ssl_error(self):
+        m = unittest.mock.Mock()
+        self.loop.add_reader = unittest.mock.Mock()
+        self.loop.add_writer = unittest.mock.Mock()
+        self.loop.remove_reader = unittest.mock.Mock()
+        self.loop.remove_writer = unittest.mock.Mock()
+        with self.assertRaises(RuntimeError):
+            self.loop._make_ssl_transport(m, m, m, m)
+
+    def test_close(self):
+        ssock = self.loop._ssock
+        ssock.fileno.return_value = 7
+        csock = self.loop._csock
+        csock.fileno.return_value = 1
+        remove_reader = self.loop.remove_reader = unittest.mock.Mock()
+
+        self.loop._selector.close()
+        self.loop._selector = selector = unittest.mock.Mock()
+        self.loop.close()
+        self.assertIsNone(self.loop._selector)
+        self.assertIsNone(self.loop._csock)
+        self.assertIsNone(self.loop._ssock)
+        selector.close.assert_called_with()
+        ssock.close.assert_called_with()
+        csock.close.assert_called_with()
+        remove_reader.assert_called_with(7)
+
+        self.loop.close()
+        self.loop.close()
+
+    def test_close_no_selector(self):
+        ssock = self.loop._ssock
+        csock = self.loop._csock
+        remove_reader = self.loop.remove_reader = unittest.mock.Mock()
+
+        self.loop._selector.close()
+        self.loop._selector = None
+        self.loop.close()
+        self.assertIsNone(self.loop._selector)
+        self.assertFalse(ssock.close.called)
+        self.assertFalse(csock.close.called)
+        self.assertFalse(remove_reader.called)
+
+    def test_socketpair(self):
+        self.assertRaises(NotImplementedError, self.loop._socketpair)
+
+    def test_read_from_self_tryagain(self):
+        self.loop._ssock.recv.side_effect = BlockingIOError
+        self.assertIsNone(self.loop._read_from_self())
+
+    def test_read_from_self_exception(self):
+        self.loop._ssock.recv.side_effect = OSError
+        self.assertRaises(OSError, self.loop._read_from_self)
+
+    def test_write_to_self_tryagain(self):
+        self.loop._csock.send.side_effect = BlockingIOError
+        self.assertIsNone(self.loop._write_to_self())
+
+    def test_write_to_self_exception(self):
+        self.loop._csock.send.side_effect = OSError()
+        self.assertRaises(OSError, self.loop._write_to_self)
+
+    def test_sock_recv(self):
+        sock = unittest.mock.Mock()
+        self.loop._sock_recv = unittest.mock.Mock()
+
+        f = self.loop.sock_recv(sock, 1024)
+        self.assertIsInstance(f, futures.Future)
+        self.loop._sock_recv.assert_called_with(f, False, sock, 1024)
+
+    def test__sock_recv_canceled_fut(self):
+        sock = unittest.mock.Mock()
+
+        f = futures.Future(loop=self.loop)
+        f.cancel()
+
+        self.loop._sock_recv(f, False, sock, 1024)
+        self.assertFalse(sock.recv.called)
+
+    def test__sock_recv_unregister(self):
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+
+        f = futures.Future(loop=self.loop)
+        f.cancel()
+
+        self.loop.remove_reader = unittest.mock.Mock()
+        self.loop._sock_recv(f, True, sock, 1024)
+        self.assertEqual((10,), self.loop.remove_reader.call_args[0])
+
+    def test__sock_recv_tryagain(self):
+        f = futures.Future(loop=self.loop)
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        sock.recv.side_effect = BlockingIOError
+
+        self.loop.add_reader = unittest.mock.Mock()
+        self.loop._sock_recv(f, False, sock, 1024)
+        self.assertEqual((10, self.loop._sock_recv, f, True, sock, 1024),
+                         self.loop.add_reader.call_args[0])
+
+    def test__sock_recv_exception(self):
+        f = futures.Future(loop=self.loop)
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        err = sock.recv.side_effect = OSError()
+
+        self.loop._sock_recv(f, False, sock, 1024)
+        self.assertIs(err, f.exception())
+
+    def test_sock_sendall(self):
+        sock = unittest.mock.Mock()
+        self.loop._sock_sendall = unittest.mock.Mock()
+
+        f = self.loop.sock_sendall(sock, b'data')
+        self.assertIsInstance(f, futures.Future)
+        self.assertEqual(
+            (f, False, sock, b'data'),
+            self.loop._sock_sendall.call_args[0])
+
+    def test_sock_sendall_nodata(self):
+        sock = unittest.mock.Mock()
+        self.loop._sock_sendall = unittest.mock.Mock()
+
+        f = self.loop.sock_sendall(sock, b'')
+        self.assertIsInstance(f, futures.Future)
+        self.assertTrue(f.done())
+        self.assertIsNone(f.result())
+        self.assertFalse(self.loop._sock_sendall.called)
+
+    def test__sock_sendall_canceled_fut(self):
+        sock = unittest.mock.Mock()
+
+        f = futures.Future(loop=self.loop)
+        f.cancel()
+
+        self.loop._sock_sendall(f, False, sock, b'data')
+        self.assertFalse(sock.send.called)
+
+    def test__sock_sendall_unregister(self):
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+
+        f = futures.Future(loop=self.loop)
+        f.cancel()
+
+        self.loop.remove_writer = unittest.mock.Mock()
+        self.loop._sock_sendall(f, True, sock, b'data')
+        self.assertEqual((10,), self.loop.remove_writer.call_args[0])
+
+    def test__sock_sendall_tryagain(self):
+        f = futures.Future(loop=self.loop)
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        sock.send.side_effect = BlockingIOError
+
+        self.loop.add_writer = unittest.mock.Mock()
+        self.loop._sock_sendall(f, False, sock, b'data')
+        self.assertEqual(
+            (10, self.loop._sock_sendall, f, True, sock, b'data'),
+            self.loop.add_writer.call_args[0])
+
+    def test__sock_sendall_interrupted(self):
+        f = futures.Future(loop=self.loop)
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        sock.send.side_effect = InterruptedError
+
+        self.loop.add_writer = unittest.mock.Mock()
+        self.loop._sock_sendall(f, False, sock, b'data')
+        self.assertEqual(
+            (10, self.loop._sock_sendall, f, True, sock, b'data'),
+            self.loop.add_writer.call_args[0])
+
+    def test__sock_sendall_exception(self):
+        f = futures.Future(loop=self.loop)
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        err = sock.send.side_effect = OSError()
+
+        self.loop._sock_sendall(f, False, sock, b'data')
+        self.assertIs(f.exception(), err)
+
+    def test__sock_sendall(self):
+        sock = unittest.mock.Mock()
+
+        f = futures.Future(loop=self.loop)
+        sock.fileno.return_value = 10
+        sock.send.return_value = 4
+
+        self.loop._sock_sendall(f, False, sock, b'data')
+        self.assertTrue(f.done())
+        self.assertIsNone(f.result())
+
+    def test__sock_sendall_partial(self):
+        sock = unittest.mock.Mock()
+
+        f = futures.Future(loop=self.loop)
+        sock.fileno.return_value = 10
+        sock.send.return_value = 2
+
+        self.loop.add_writer = unittest.mock.Mock()
+        self.loop._sock_sendall(f, False, sock, b'data')
+        self.assertFalse(f.done())
+        self.assertEqual(
+            (10, self.loop._sock_sendall, f, True, sock, b'ta'),
+            self.loop.add_writer.call_args[0])
+
+    def test__sock_sendall_none(self):
+        sock = unittest.mock.Mock()
+
+        f = futures.Future(loop=self.loop)
+        sock.fileno.return_value = 10
+        sock.send.return_value = 0
+
+        self.loop.add_writer = unittest.mock.Mock()
+        self.loop._sock_sendall(f, False, sock, b'data')
+        self.assertFalse(f.done())
+        self.assertEqual(
+            (10, self.loop._sock_sendall, f, True, sock, b'data'),
+            self.loop.add_writer.call_args[0])
+
+    def test_sock_connect(self):
+        sock = unittest.mock.Mock()
+        self.loop._sock_connect = unittest.mock.Mock()
+
+        f = self.loop.sock_connect(sock, ('127.0.0.1', 8080))
+        self.assertIsInstance(f, futures.Future)
+        self.assertEqual(
+            (f, False, sock, ('127.0.0.1', 8080)),
+            self.loop._sock_connect.call_args[0])
+
+    def test__sock_connect(self):
+        f = futures.Future(loop=self.loop)
+
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+
+        self.loop._sock_connect(f, False, sock, ('127.0.0.1', 8080))
+        self.assertTrue(f.done())
+        self.assertIsNone(f.result())
+        self.assertTrue(sock.connect.called)
+
+    def test__sock_connect_canceled_fut(self):
+        sock = unittest.mock.Mock()
+
+        f = futures.Future(loop=self.loop)
+        f.cancel()
+
+        self.loop._sock_connect(f, False, sock, ('127.0.0.1', 8080))
+        self.assertFalse(sock.connect.called)
+
+    def test__sock_connect_unregister(self):
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+
+        f = futures.Future(loop=self.loop)
+        f.cancel()
+
+        self.loop.remove_writer = unittest.mock.Mock()
+        self.loop._sock_connect(f, True, sock, ('127.0.0.1', 8080))
+        self.assertEqual((10,), self.loop.remove_writer.call_args[0])
+
+    def test__sock_connect_tryagain(self):
+        f = futures.Future(loop=self.loop)
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        sock.getsockopt.return_value = errno.EAGAIN
+
+        self.loop.add_writer = unittest.mock.Mock()
+        self.loop.remove_writer = unittest.mock.Mock()
+
+        self.loop._sock_connect(f, True, sock, ('127.0.0.1', 8080))
+        self.assertEqual(
+            (10, self.loop._sock_connect, f,
+             True, sock, ('127.0.0.1', 8080)),
+            self.loop.add_writer.call_args[0])
+
+    def test__sock_connect_exception(self):
+        f = futures.Future(loop=self.loop)
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        sock.getsockopt.return_value = errno.ENOTCONN
+
+        self.loop.remove_writer = unittest.mock.Mock()
+        self.loop._sock_connect(f, True, sock, ('127.0.0.1', 8080))
+        self.assertIsInstance(f.exception(), OSError)
+
+    def test_sock_accept(self):
+        sock = unittest.mock.Mock()
+        self.loop._sock_accept = unittest.mock.Mock()
+
+        f = self.loop.sock_accept(sock)
+        self.assertIsInstance(f, futures.Future)
+        self.assertEqual(
+            (f, False, sock), self.loop._sock_accept.call_args[0])
+
+    def test__sock_accept(self):
+        f = futures.Future(loop=self.loop)
+
+        conn = unittest.mock.Mock()
+
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        sock.accept.return_value = conn, ('127.0.0.1', 1000)
+
+        self.loop._sock_accept(f, False, sock)
+        self.assertTrue(f.done())
+        self.assertEqual((conn, ('127.0.0.1', 1000)), f.result())
+        self.assertEqual((False,), conn.setblocking.call_args[0])
+
+    def test__sock_accept_canceled_fut(self):
+        sock = unittest.mock.Mock()
+
+        f = futures.Future(loop=self.loop)
+        f.cancel()
+
+        self.loop._sock_accept(f, False, sock)
+        self.assertFalse(sock.accept.called)
+
+    def test__sock_accept_unregister(self):
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+
+        f = futures.Future(loop=self.loop)
+        f.cancel()
+
+        self.loop.remove_reader = unittest.mock.Mock()
+        self.loop._sock_accept(f, True, sock)
+        self.assertEqual((10,), self.loop.remove_reader.call_args[0])
+
+    def test__sock_accept_tryagain(self):
+        f = futures.Future(loop=self.loop)
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        sock.accept.side_effect = BlockingIOError
+
+        self.loop.add_reader = unittest.mock.Mock()
+        self.loop._sock_accept(f, False, sock)
+        self.assertEqual(
+            (10, self.loop._sock_accept, f, True, sock),
+            self.loop.add_reader.call_args[0])
+
+    def test__sock_accept_exception(self):
+        f = futures.Future(loop=self.loop)
+        sock = unittest.mock.Mock()
+        sock.fileno.return_value = 10
+        err = sock.accept.side_effect = OSError()
+
+        self.loop._sock_accept(f, False, sock)
+        self.assertIs(err, f.exception())
+
+    def test_add_reader(self):
+        self.loop._selector.get_key.side_effect = KeyError
+        cb = lambda: True
+        self.loop.add_reader(1, cb)
+
+        self.assertTrue(self.loop._selector.register.called)
+        fd, mask, (r, w) = self.loop._selector.register.call_args[0]
+        self.assertEqual(1, fd)
+        self.assertEqual(selectors.EVENT_READ, mask)
+        self.assertEqual(cb, r._callback)
+        self.assertIsNone(w)
+
+    def test_add_reader_existing(self):
+        reader = unittest.mock.Mock()
+        writer = unittest.mock.Mock()
+        self.loop._selector.get_key.return_value = selectors.SelectorKey(
+            1, 1, selectors.EVENT_WRITE, (reader, writer))
+        cb = lambda: True
+        self.loop.add_reader(1, cb)
+
+        self.assertTrue(reader.cancel.called)
+        self.assertFalse(self.loop._selector.register.called)
+        self.assertTrue(self.loop._selector.modify.called)
+        fd, mask, (r, w) = self.loop._selector.modify.call_args[0]
+        self.assertEqual(1, fd)
+        self.assertEqual(selectors.EVENT_WRITE | selectors.EVENT_READ, mask)
+        self.assertEqual(cb, r._callback)
+        self.assertEqual(writer, w)
+
+    def test_add_reader_existing_writer(self):
+        writer = unittest.mock.Mock()
+        self.loop._selector.get_key.return_value = selectors.SelectorKey(
+            1, 1, selectors.EVENT_WRITE, (None, writer))
+        cb = lambda: True
+        self.loop.add_reader(1, cb)
+
+        self.assertFalse(self.loop._selector.register.called)
+        self.assertTrue(self.loop._selector.modify.called)
+        fd, mask, (r, w) = self.loop._selector.modify.call_args[0]
+        self.assertEqual(1, fd)
+        self.assertEqual(selectors.EVENT_WRITE | selectors.EVENT_READ, mask)
+        self.assertEqual(cb, r._callback)
+        self.assertEqual(writer, w)
+
+    def test_remove_reader(self):
+        self.loop._selector.get_key.return_value = selectors.SelectorKey(
+            1, 1, selectors.EVENT_READ, (None, None))
+        self.assertFalse(self.loop.remove_reader(1))
+
+        self.assertTrue(self.loop._selector.unregister.called)
+
+    def test_remove_reader_read_write(self):
+        reader = unittest.mock.Mock()
+        writer = unittest.mock.Mock()
+        self.loop._selector.get_key.return_value = selectors.SelectorKey(
+            1, 1, selectors.EVENT_READ | selectors.EVENT_WRITE,
+            (reader, writer))
+        self.assertTrue(
+            self.loop.remove_reader(1))
+
+        self.assertFalse(self.loop._selector.unregister.called)
+        self.assertEqual(
+            (1, selectors.EVENT_WRITE, (None, writer)),
+            self.loop._selector.modify.call_args[0])
+
+    def test_remove_reader_unknown(self):
+        self.loop._selector.get_key.side_effect = KeyError
+        self.assertFalse(
+            self.loop.remove_reader(1))
+
+    def test_add_writer(self):
+        self.loop._selector.get_key.side_effect = KeyError
+        cb = lambda: True
+        self.loop.add_writer(1, cb)
+
+        self.assertTrue(self.loop._selector.register.called)
+        fd, mask, (r, w) = self.loop._selector.register.call_args[0]
+        self.assertEqual(1, fd)
+        self.assertEqual(selectors.EVENT_WRITE, mask)
+        self.assertIsNone(r)
+        self.assertEqual(cb, w._callback)
+
+    def test_add_writer_existing(self):
+        reader = unittest.mock.Mock()
+        writer = unittest.mock.Mock()
+        self.loop._selector.get_key.return_value = selectors.SelectorKey(
+            1, 1, selectors.EVENT_READ, (reader, writer))
+        cb = lambda: True
+        self.loop.add_writer(1, cb)
+
+        self.assertTrue(writer.cancel.called)
+        self.assertFalse(self.loop._selector.register.called)
+        self.assertTrue(self.loop._selector.modify.called)
+        fd, mask, (r, w) = self.loop._selector.modify.call_args[0]
+        self.assertEqual(1, fd)
+        self.assertEqual(selectors.EVENT_WRITE | selectors.EVENT_READ, mask)
+        self.assertEqual(reader, r)
+        self.assertEqual(cb, w._callback)
+
+    def test_remove_writer(self):
+        self.loop._selector.get_key.return_value = selectors.SelectorKey(
+            1, 1, selectors.EVENT_WRITE, (None, None))
+        self.assertFalse(self.loop.remove_writer(1))
+
+        self.assertTrue(self.loop._selector.unregister.called)
+
+    def test_remove_writer_read_write(self):
+        reader = unittest.mock.Mock()
+        writer = unittest.mock.Mock()
+        self.loop._selector.get_key.return_value = selectors.SelectorKey(
+            1, 1, selectors.EVENT_READ | selectors.EVENT_WRITE,
+            (reader, writer))
+        self.assertTrue(
+            self.loop.remove_writer(1))
+
+        self.assertFalse(self.loop._selector.unregister.called)
+        self.assertEqual(
+            (1, selectors.EVENT_READ, (reader, None)),
+            self.loop._selector.modify.call_args[0])
+
+    def test_remove_writer_unknown(self):
+        self.loop._selector.get_key.side_effect = KeyError
+        self.assertFalse(
+            self.loop.remove_writer(1))
+
+    def test_process_events_read(self):
+        reader = unittest.mock.Mock()
+        reader._cancelled = False
+
+        self.loop._add_callback = unittest.mock.Mock()
+        self.loop._process_events(
+            [(selectors.SelectorKey(
+                1, 1, selectors.EVENT_READ, (reader, None)),
+              selectors.EVENT_READ)])
+        self.assertTrue(self.loop._add_callback.called)
+        self.loop._add_callback.assert_called_with(reader)
+
+    def test_process_events_read_cancelled(self):
+        reader = unittest.mock.Mock()
+        reader.cancelled = True
+
+        self.loop.remove_reader = unittest.mock.Mock()
+        self.loop._process_events(
+            [(selectors.SelectorKey(
+                1, 1, selectors.EVENT_READ, (reader, None)),
+             selectors.EVENT_READ)])
+        self.loop.remove_reader.assert_called_with(1)
+
+    def test_process_events_write(self):
+        writer = unittest.mock.Mock()
+        writer._cancelled = False
+
+        self.loop._add_callback = unittest.mock.Mock()
+        self.loop._process_events(
+            [(selectors.SelectorKey(1, 1, selectors.EVENT_WRITE,
+                                    (None, writer)),
+              selectors.EVENT_WRITE)])
+        self.loop._add_callback.assert_called_with(writer)
+
+    def test_process_events_write_cancelled(self):
+        writer = unittest.mock.Mock()
+        writer.cancelled = True
+        self.loop.remove_writer = unittest.mock.Mock()
+
+        self.loop._process_events(
+            [(selectors.SelectorKey(1, 1, selectors.EVENT_WRITE,
+                                    (None, writer)),
+              selectors.EVENT_WRITE)])
+        self.loop.remove_writer.assert_called_with(1)
+
+
+class SelectorTransportTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        self.protocol = test_utils.make_test_protocol(Protocol)
+        self.sock = unittest.mock.Mock(socket.socket)
+        self.sock.fileno.return_value = 7
+
+    def test_ctor(self):
+        tr = _SelectorTransport(self.loop, self.sock, self.protocol, None)
+        self.assertIs(tr._loop, self.loop)
+        self.assertIs(tr._sock, self.sock)
+        self.assertIs(tr._sock_fd, 7)
+
+    def test_abort(self):
+        tr = _SelectorTransport(self.loop, self.sock, self.protocol, None)
+        tr._force_close = unittest.mock.Mock()
+
+        tr.abort()
+        tr._force_close.assert_called_with(None)
+
+    def test_close(self):
+        tr = _SelectorTransport(self.loop, self.sock, self.protocol, None)
+        tr.close()
+
+        self.assertTrue(tr._closing)
+        self.assertEqual(1, self.loop.remove_reader_count[7])
+        self.protocol.connection_lost(None)
+        self.assertEqual(tr._conn_lost, 1)
+
+        tr.close()
+        self.assertEqual(tr._conn_lost, 1)
+        self.assertEqual(1, self.loop.remove_reader_count[7])
+
+    def test_close_write_buffer(self):
+        tr = _SelectorTransport(self.loop, self.sock, self.protocol, None)
+        tr._buffer.append(b'data')
+        tr.close()
+
+        self.assertFalse(self.loop.readers)
+        test_utils.run_briefly(self.loop)
+        self.assertFalse(self.protocol.connection_lost.called)
+
+    def test_force_close(self):
+        tr = _SelectorTransport(self.loop, self.sock, self.protocol, None)
+        tr._buffer.append(b'1')
+        self.loop.add_reader(7, unittest.mock.sentinel)
+        self.loop.add_writer(7, unittest.mock.sentinel)
+        tr._force_close(None)
+
+        self.assertTrue(tr._closing)
+        self.assertEqual(tr._buffer, collections.deque())
+        self.assertFalse(self.loop.readers)
+        self.assertFalse(self.loop.writers)
+
+        # second close should not remove reader
+        tr._force_close(None)
+        self.assertFalse(self.loop.readers)
+        self.assertEqual(1, self.loop.remove_reader_count[7])
+
+    @unittest.mock.patch('asyncio.log.logger.exception')
+    def test_fatal_error(self, m_exc):
+        exc = OSError()
+        tr = _SelectorTransport(self.loop, self.sock, self.protocol, None)
+        tr._force_close = unittest.mock.Mock()
+        tr._fatal_error(exc)
+
+        m_exc.assert_called_with('Fatal error for %s', tr)
+        tr._force_close.assert_called_with(exc)
+
+    def test_connection_lost(self):
+        exc = OSError()
+        tr = _SelectorTransport(self.loop, self.sock, self.protocol, None)
+        tr._call_connection_lost(exc)
+
+        self.protocol.connection_lost.assert_called_with(exc)
+        self.sock.close.assert_called_with()
+        self.assertIsNone(tr._sock)
+
+        self.assertIsNone(tr._protocol)
+        self.assertEqual(2, sys.getrefcount(self.protocol),
+                         pprint.pformat(gc.get_referrers(self.protocol)))
+        self.assertIsNone(tr._loop)
+        self.assertEqual(2, sys.getrefcount(self.loop),
+                         pprint.pformat(gc.get_referrers(self.loop)))
+
+
+class SelectorSocketTransportTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        self.protocol = test_utils.make_test_protocol(Protocol)
+        self.sock = unittest.mock.Mock(socket.socket)
+        self.sock_fd = self.sock.fileno.return_value = 7
+
+    def test_ctor(self):
+        tr = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        self.loop.assert_reader(7, tr._read_ready)
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_made.assert_called_with(tr)
+
+    def test_ctor_with_waiter(self):
+        fut = futures.Future(loop=self.loop)
+
+        _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol, fut)
+        test_utils.run_briefly(self.loop)
+        self.assertIsNone(fut.result())
+
+    def test_pause_resume_reading(self):
+        tr = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        self.assertFalse(tr._paused)
+        self.loop.assert_reader(7, tr._read_ready)
+        tr.pause_reading()
+        self.assertTrue(tr._paused)
+        self.assertFalse(7 in self.loop.readers)
+        tr.resume_reading()
+        self.assertFalse(tr._paused)
+        self.loop.assert_reader(7, tr._read_ready)
+
+    def test_read_ready(self):
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+
+        self.sock.recv.return_value = b'data'
+        transport._read_ready()
+
+        self.protocol.data_received.assert_called_with(b'data')
+
+    def test_read_ready_eof(self):
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport.close = unittest.mock.Mock()
+
+        self.sock.recv.return_value = b''
+        transport._read_ready()
+
+        self.protocol.eof_received.assert_called_with()
+        transport.close.assert_called_with()
+
+    def test_read_ready_eof_keep_open(self):
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport.close = unittest.mock.Mock()
+
+        self.sock.recv.return_value = b''
+        self.protocol.eof_received.return_value = True
+        transport._read_ready()
+
+        self.protocol.eof_received.assert_called_with()
+        self.assertFalse(transport.close.called)
+
+    @unittest.mock.patch('logging.exception')
+    def test_read_ready_tryagain(self, m_exc):
+        self.sock.recv.side_effect = BlockingIOError
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._fatal_error = unittest.mock.Mock()
+        transport._read_ready()
+
+        self.assertFalse(transport._fatal_error.called)
+
+    @unittest.mock.patch('logging.exception')
+    def test_read_ready_tryagain_interrupted(self, m_exc):
+        self.sock.recv.side_effect = InterruptedError
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._fatal_error = unittest.mock.Mock()
+        transport._read_ready()
+
+        self.assertFalse(transport._fatal_error.called)
+
+    @unittest.mock.patch('logging.exception')
+    def test_read_ready_conn_reset(self, m_exc):
+        err = self.sock.recv.side_effect = ConnectionResetError()
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._force_close = unittest.mock.Mock()
+        transport._read_ready()
+        transport._force_close.assert_called_with(err)
+
+    @unittest.mock.patch('logging.exception')
+    def test_read_ready_err(self, m_exc):
+        err = self.sock.recv.side_effect = OSError()
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._fatal_error = unittest.mock.Mock()
+        transport._read_ready()
+
+        transport._fatal_error.assert_called_with(err)
+
+    def test_write(self):
+        data = b'data'
+        self.sock.send.return_value = len(data)
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport.write(data)
+        self.sock.send.assert_called_with(data)
+
+    def test_write_no_data(self):
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer.append(b'data')
+        transport.write(b'')
+        self.assertFalse(self.sock.send.called)
+        self.assertEqual(collections.deque([b'data']), transport._buffer)
+
+    def test_write_buffer(self):
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer.append(b'data1')
+        transport.write(b'data2')
+        self.assertFalse(self.sock.send.called)
+        self.assertEqual(collections.deque([b'data1', b'data2']),
+                         transport._buffer)
+
+    def test_write_partial(self):
+        data = b'data'
+        self.sock.send.return_value = 2
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport.write(data)
+
+        self.loop.assert_writer(7, transport._write_ready)
+        self.assertEqual(collections.deque([b'ta']), transport._buffer)
+
+    def test_write_partial_none(self):
+        data = b'data'
+        self.sock.send.return_value = 0
+        self.sock.fileno.return_value = 7
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport.write(data)
+
+        self.loop.assert_writer(7, transport._write_ready)
+        self.assertEqual(collections.deque([b'data']), transport._buffer)
+
+    def test_write_tryagain(self):
+        self.sock.send.side_effect = BlockingIOError
+
+        data = b'data'
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport.write(data)
+
+        self.loop.assert_writer(7, transport._write_ready)
+        self.assertEqual(collections.deque([b'data']), transport._buffer)
+
+    @unittest.mock.patch('asyncio.selector_events.logger')
+    def test_write_exception(self, m_log):
+        err = self.sock.send.side_effect = OSError()
+
+        data = b'data'
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._fatal_error = unittest.mock.Mock()
+        transport.write(data)
+        transport._fatal_error.assert_called_with(err)
+        transport._conn_lost = 1
+
+        self.sock.reset_mock()
+        transport.write(data)
+        self.assertFalse(self.sock.send.called)
+        self.assertEqual(transport._conn_lost, 2)
+        transport.write(data)
+        transport.write(data)
+        transport.write(data)
+        transport.write(data)
+        m_log.warning.assert_called_with('socket.send() raised exception.')
+
+    def test_write_str(self):
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        self.assertRaises(AssertionError, transport.write, 'str')
+
+    def test_write_closing(self):
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport.close()
+        self.assertEqual(transport._conn_lost, 1)
+        transport.write(b'data')
+        self.assertEqual(transport._conn_lost, 2)
+
+    def test_write_ready(self):
+        data = b'data'
+        self.sock.send.return_value = len(data)
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer.append(data)
+        self.loop.add_writer(7, transport._write_ready)
+        transport._write_ready()
+        self.assertTrue(self.sock.send.called)
+        self.assertEqual(self.sock.send.call_args[0], (data,))
+        self.assertFalse(self.loop.writers)
+
+    def test_write_ready_closing(self):
+        data = b'data'
+        self.sock.send.return_value = len(data)
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._closing = True
+        transport._buffer.append(data)
+        self.loop.add_writer(7, transport._write_ready)
+        transport._write_ready()
+        self.sock.send.assert_called_with(data)
+        self.assertFalse(self.loop.writers)
+        self.sock.close.assert_called_with()
+        self.protocol.connection_lost.assert_called_with(None)
+
+    def test_write_ready_no_data(self):
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        self.assertRaises(AssertionError, transport._write_ready)
+
+    def test_write_ready_partial(self):
+        data = b'data'
+        self.sock.send.return_value = 2
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer.append(data)
+        self.loop.add_writer(7, transport._write_ready)
+        transport._write_ready()
+        self.loop.assert_writer(7, transport._write_ready)
+        self.assertEqual(collections.deque([b'ta']), transport._buffer)
+
+    def test_write_ready_partial_none(self):
+        data = b'data'
+        self.sock.send.return_value = 0
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer.append(data)
+        self.loop.add_writer(7, transport._write_ready)
+        transport._write_ready()
+        self.loop.assert_writer(7, transport._write_ready)
+        self.assertEqual(collections.deque([b'data']), transport._buffer)
+
+    def test_write_ready_tryagain(self):
+        self.sock.send.side_effect = BlockingIOError
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer = collections.deque([b'data1', b'data2'])
+        self.loop.add_writer(7, transport._write_ready)
+        transport._write_ready()
+
+        self.loop.assert_writer(7, transport._write_ready)
+        self.assertEqual(collections.deque([b'data1data2']), transport._buffer)
+
+    def test_write_ready_exception(self):
+        err = self.sock.send.side_effect = OSError()
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport._fatal_error = unittest.mock.Mock()
+        transport._buffer.append(b'data')
+        transport._write_ready()
+        transport._fatal_error.assert_called_with(err)
+
+    @unittest.mock.patch('asyncio.selector_events.logger')
+    def test_write_ready_exception_and_close(self, m_log):
+        self.sock.send.side_effect = OSError()
+        remove_writer = self.loop.remove_writer = unittest.mock.Mock()
+
+        transport = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        transport.close()
+        transport._buffer.append(b'data')
+        transport._write_ready()
+        remove_writer.assert_called_with(self.sock_fd)
+
+    def test_write_eof(self):
+        tr = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        self.assertTrue(tr.can_write_eof())
+        tr.write_eof()
+        self.sock.shutdown.assert_called_with(socket.SHUT_WR)
+        tr.write_eof()
+        self.assertEqual(self.sock.shutdown.call_count, 1)
+        tr.close()
+
+    def test_write_eof_buffer(self):
+        tr = _SelectorSocketTransport(
+            self.loop, self.sock, self.protocol)
+        self.sock.send.side_effect = BlockingIOError
+        tr.write(b'data')
+        tr.write_eof()
+        self.assertEqual(tr._buffer, collections.deque([b'data']))
+        self.assertTrue(tr._eof)
+        self.assertFalse(self.sock.shutdown.called)
+        self.sock.send.side_effect = lambda _: 4
+        tr._write_ready()
+        self.sock.send.assert_called_with(b'data')
+        self.sock.shutdown.assert_called_with(socket.SHUT_WR)
+        tr.close()
+
+
+@unittest.skipIf(ssl is None, 'No ssl module')
+class SelectorSslTransportTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        self.protocol = test_utils.make_test_protocol(Protocol)
+        self.sock = unittest.mock.Mock(socket.socket)
+        self.sock.fileno.return_value = 7
+        self.sslsock = unittest.mock.Mock()
+        self.sslsock.fileno.return_value = 1
+        self.sslcontext = unittest.mock.Mock()
+        self.sslcontext.wrap_socket.return_value = self.sslsock
+
+    def _make_one(self, create_waiter=None):
+        transport = _SelectorSslTransport(
+            self.loop, self.sock, self.protocol, self.sslcontext)
+        self.sock.reset_mock()
+        self.sslsock.reset_mock()
+        self.sslcontext.reset_mock()
+        self.loop.reset_counters()
+        return transport
+
+    def test_on_handshake(self):
+        waiter = futures.Future(loop=self.loop)
+        tr = _SelectorSslTransport(
+            self.loop, self.sock, self.protocol, self.sslcontext,
+            waiter=waiter)
+        self.assertTrue(self.sslsock.do_handshake.called)
+        self.loop.assert_reader(1, tr._read_ready)
+        test_utils.run_briefly(self.loop)
+        self.assertIsNone(waiter.result())
+
+    def test_on_handshake_reader_retry(self):
+        self.sslsock.do_handshake.side_effect = ssl.SSLWantReadError
+        transport = _SelectorSslTransport(
+            self.loop, self.sock, self.protocol, self.sslcontext)
+        transport._on_handshake()
+        self.loop.assert_reader(1, transport._on_handshake)
+
+    def test_on_handshake_writer_retry(self):
+        self.sslsock.do_handshake.side_effect = ssl.SSLWantWriteError
+        transport = _SelectorSslTransport(
+            self.loop, self.sock, self.protocol, self.sslcontext)
+        transport._on_handshake()
+        self.loop.assert_writer(1, transport._on_handshake)
+
+    def test_on_handshake_exc(self):
+        exc = ValueError()
+        self.sslsock.do_handshake.side_effect = exc
+        transport = _SelectorSslTransport(
+            self.loop, self.sock, self.protocol, self.sslcontext)
+        transport._waiter = futures.Future(loop=self.loop)
+        transport._on_handshake()
+        self.assertTrue(self.sslsock.close.called)
+        self.assertTrue(transport._waiter.done())
+        self.assertIs(exc, transport._waiter.exception())
+
+    def test_on_handshake_base_exc(self):
+        transport = _SelectorSslTransport(
+            self.loop, self.sock, self.protocol, self.sslcontext)
+        transport._waiter = futures.Future(loop=self.loop)
+        exc = BaseException()
+        self.sslsock.do_handshake.side_effect = exc
+        self.assertRaises(BaseException, transport._on_handshake)
+        self.assertTrue(self.sslsock.close.called)
+        self.assertTrue(transport._waiter.done())
+        self.assertIs(exc, transport._waiter.exception())
+
+    def test_pause_resume_reading(self):
+        tr = self._make_one()
+        self.assertFalse(tr._paused)
+        self.loop.assert_reader(1, tr._read_ready)
+        tr.pause_reading()
+        self.assertTrue(tr._paused)
+        self.assertFalse(1 in self.loop.readers)
+        tr.resume_reading()
+        self.assertFalse(tr._paused)
+        self.loop.assert_reader(1, tr._read_ready)
+
+    def test_write_no_data(self):
+        transport = self._make_one()
+        transport._buffer.append(b'data')
+        transport.write(b'')
+        self.assertEqual(collections.deque([b'data']), transport._buffer)
+
+    def test_write_str(self):
+        transport = self._make_one()
+        self.assertRaises(AssertionError, transport.write, 'str')
+
+    def test_write_closing(self):
+        transport = self._make_one()
+        transport.close()
+        self.assertEqual(transport._conn_lost, 1)
+        transport.write(b'data')
+        self.assertEqual(transport._conn_lost, 2)
+
+    @unittest.mock.patch('asyncio.selector_events.logger')
+    def test_write_exception(self, m_log):
+        transport = self._make_one()
+        transport._conn_lost = 1
+        transport.write(b'data')
+        self.assertEqual(transport._buffer, collections.deque())
+        transport.write(b'data')
+        transport.write(b'data')
+        transport.write(b'data')
+        transport.write(b'data')
+        m_log.warning.assert_called_with('socket.send() raised exception.')
+
+    def test_read_ready_recv(self):
+        self.sslsock.recv.return_value = b'data'
+        transport = self._make_one()
+        transport._read_ready()
+        self.assertTrue(self.sslsock.recv.called)
+        self.assertEqual((b'data',), self.protocol.data_received.call_args[0])
+
+    def test_read_ready_write_wants_read(self):
+        self.loop.add_writer = unittest.mock.Mock()
+        self.sslsock.recv.side_effect = BlockingIOError
+        transport = self._make_one()
+        transport._write_wants_read = True
+        transport._write_ready = unittest.mock.Mock()
+        transport._buffer.append(b'data')
+        transport._read_ready()
+
+        self.assertFalse(transport._write_wants_read)
+        transport._write_ready.assert_called_with()
+        self.loop.add_writer.assert_called_with(
+            transport._sock_fd, transport._write_ready)
+
+    def test_read_ready_recv_eof(self):
+        self.sslsock.recv.return_value = b''
+        transport = self._make_one()
+        transport.close = unittest.mock.Mock()
+        transport._read_ready()
+        transport.close.assert_called_with()
+        self.protocol.eof_received.assert_called_with()
+
+    def test_read_ready_recv_conn_reset(self):
+        err = self.sslsock.recv.side_effect = ConnectionResetError()
+        transport = self._make_one()
+        transport._force_close = unittest.mock.Mock()
+        transport._read_ready()
+        transport._force_close.assert_called_with(err)
+
+    def test_read_ready_recv_retry(self):
+        self.sslsock.recv.side_effect = ssl.SSLWantReadError
+        transport = self._make_one()
+        transport._read_ready()
+        self.assertTrue(self.sslsock.recv.called)
+        self.assertFalse(self.protocol.data_received.called)
+
+        self.sslsock.recv.side_effect = BlockingIOError
+        transport._read_ready()
+        self.assertFalse(self.protocol.data_received.called)
+
+        self.sslsock.recv.side_effect = InterruptedError
+        transport._read_ready()
+        self.assertFalse(self.protocol.data_received.called)
+
+    def test_read_ready_recv_write(self):
+        self.loop.remove_reader = unittest.mock.Mock()
+        self.loop.add_writer = unittest.mock.Mock()
+        self.sslsock.recv.side_effect = ssl.SSLWantWriteError
+        transport = self._make_one()
+        transport._read_ready()
+        self.assertFalse(self.protocol.data_received.called)
+        self.assertTrue(transport._read_wants_write)
+
+        self.loop.remove_reader.assert_called_with(transport._sock_fd)
+        self.loop.add_writer.assert_called_with(
+            transport._sock_fd, transport._write_ready)
+
+    def test_read_ready_recv_exc(self):
+        err = self.sslsock.recv.side_effect = OSError()
+        transport = self._make_one()
+        transport._fatal_error = unittest.mock.Mock()
+        transport._read_ready()
+        transport._fatal_error.assert_called_with(err)
+
+    def test_write_ready_send(self):
+        self.sslsock.send.return_value = 4
+        transport = self._make_one()
+        transport._buffer = collections.deque([b'data'])
+        transport._write_ready()
+        self.assertEqual(collections.deque(), transport._buffer)
+        self.assertTrue(self.sslsock.send.called)
+
+    def test_write_ready_send_none(self):
+        self.sslsock.send.return_value = 0
+        transport = self._make_one()
+        transport._buffer = collections.deque([b'data1', b'data2'])
+        transport._write_ready()
+        self.assertTrue(self.sslsock.send.called)
+        self.assertEqual(collections.deque([b'data1data2']), transport._buffer)
+
+    def test_write_ready_send_partial(self):
+        self.sslsock.send.return_value = 2
+        transport = self._make_one()
+        transport._buffer = collections.deque([b'data1', b'data2'])
+        transport._write_ready()
+        self.assertTrue(self.sslsock.send.called)
+        self.assertEqual(collections.deque([b'ta1data2']), transport._buffer)
+
+    def test_write_ready_send_closing_partial(self):
+        self.sslsock.send.return_value = 2
+        transport = self._make_one()
+        transport._buffer = collections.deque([b'data1', b'data2'])
+        transport._write_ready()
+        self.assertTrue(self.sslsock.send.called)
+        self.assertFalse(self.sslsock.close.called)
+
+    def test_write_ready_send_closing(self):
+        self.sslsock.send.return_value = 4
+        transport = self._make_one()
+        transport.close()
+        transport._buffer = collections.deque([b'data'])
+        transport._write_ready()
+        self.assertFalse(self.loop.writers)
+        self.protocol.connection_lost.assert_called_with(None)
+
+    def test_write_ready_send_closing_empty_buffer(self):
+        self.sslsock.send.return_value = 4
+        transport = self._make_one()
+        transport.close()
+        transport._buffer = collections.deque()
+        transport._write_ready()
+        self.assertFalse(self.loop.writers)
+        self.protocol.connection_lost.assert_called_with(None)
+
+    def test_write_ready_send_retry(self):
+        transport = self._make_one()
+        transport._buffer = collections.deque([b'data'])
+
+        self.sslsock.send.side_effect = ssl.SSLWantWriteError
+        transport._write_ready()
+        self.assertEqual(collections.deque([b'data']), transport._buffer)
+
+        self.sslsock.send.side_effect = BlockingIOError()
+        transport._write_ready()
+        self.assertEqual(collections.deque([b'data']), transport._buffer)
+
+    def test_write_ready_send_read(self):
+        transport = self._make_one()
+        transport._buffer = collections.deque([b'data'])
+
+        self.loop.remove_writer = unittest.mock.Mock()
+        self.sslsock.send.side_effect = ssl.SSLWantReadError
+        transport._write_ready()
+        self.assertFalse(self.protocol.data_received.called)
+        self.assertTrue(transport._write_wants_read)
+        self.loop.remove_writer.assert_called_with(transport._sock_fd)
+
+    def test_write_ready_send_exc(self):
+        err = self.sslsock.send.side_effect = OSError()
+
+        transport = self._make_one()
+        transport._buffer = collections.deque([b'data'])
+        transport._fatal_error = unittest.mock.Mock()
+        transport._write_ready()
+        transport._fatal_error.assert_called_with(err)
+        self.assertEqual(collections.deque(), transport._buffer)
+
+    def test_write_ready_read_wants_write(self):
+        self.loop.add_reader = unittest.mock.Mock()
+        self.sslsock.send.side_effect = BlockingIOError
+        transport = self._make_one()
+        transport._read_wants_write = True
+        transport._read_ready = unittest.mock.Mock()
+        transport._write_ready()
+
+        self.assertFalse(transport._read_wants_write)
+        transport._read_ready.assert_called_with()
+        self.loop.add_reader.assert_called_with(
+            transport._sock_fd, transport._read_ready)
+
+    def test_write_eof(self):
+        tr = self._make_one()
+        self.assertFalse(tr.can_write_eof())
+        self.assertRaises(NotImplementedError, tr.write_eof)
+
+    def test_close(self):
+        tr = self._make_one()
+        tr.close()
+
+        self.assertTrue(tr._closing)
+        self.assertEqual(1, self.loop.remove_reader_count[1])
+        self.assertEqual(tr._conn_lost, 1)
+
+        tr.close()
+        self.assertEqual(tr._conn_lost, 1)
+        self.assertEqual(1, self.loop.remove_reader_count[1])
+
+    @unittest.skipIf(ssl is None or not ssl.HAS_SNI, 'No SNI support')
+    def test_server_hostname(self):
+        _SelectorSslTransport(
+            self.loop, self.sock, self.protocol, self.sslcontext,
+            server_hostname='localhost')
+        self.sslcontext.wrap_socket.assert_called_with(
+            self.sock, do_handshake_on_connect=False, server_side=False,
+            server_hostname='localhost')
+
+
+class SelectorSslWithoutSslTransportTests(unittest.TestCase):
+
+    @unittest.mock.patch('asyncio.selector_events.ssl', None)
+    def test_ssl_transport_requires_ssl_module(self):
+        Mock = unittest.mock.Mock
+        with self.assertRaises(RuntimeError):
+            transport = _SelectorSslTransport(Mock(), Mock(), Mock(), Mock())
+
+
+class SelectorDatagramTransportTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        self.protocol = test_utils.make_test_protocol(DatagramProtocol)
+        self.sock = unittest.mock.Mock(spec_set=socket.socket)
+        self.sock.fileno.return_value = 7
+
+    def test_read_ready(self):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+
+        self.sock.recvfrom.return_value = (b'data', ('0.0.0.0', 1234))
+        transport._read_ready()
+
+        self.protocol.datagram_received.assert_called_with(
+            b'data', ('0.0.0.0', 1234))
+
+    def test_read_ready_tryagain(self):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+
+        self.sock.recvfrom.side_effect = BlockingIOError
+        transport._fatal_error = unittest.mock.Mock()
+        transport._read_ready()
+
+        self.assertFalse(transport._fatal_error.called)
+
+    def test_read_ready_err(self):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+
+        err = self.sock.recvfrom.side_effect = OSError()
+        transport._fatal_error = unittest.mock.Mock()
+        transport._read_ready()
+
+        transport._fatal_error.assert_called_with(err)
+
+    def test_sendto(self):
+        data = b'data'
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport.sendto(data, ('0.0.0.0', 1234))
+        self.assertTrue(self.sock.sendto.called)
+        self.assertEqual(
+            self.sock.sendto.call_args[0], (data, ('0.0.0.0', 1234)))
+
+    def test_sendto_no_data(self):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer.append((b'data', ('0.0.0.0', 12345)))
+        transport.sendto(b'', ())
+        self.assertFalse(self.sock.sendto.called)
+        self.assertEqual(
+            [(b'data', ('0.0.0.0', 12345))], list(transport._buffer))
+
+    def test_sendto_buffer(self):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer.append((b'data1', ('0.0.0.0', 12345)))
+        transport.sendto(b'data2', ('0.0.0.0', 12345))
+        self.assertFalse(self.sock.sendto.called)
+        self.assertEqual(
+            [(b'data1', ('0.0.0.0', 12345)),
+             (b'data2', ('0.0.0.0', 12345))],
+            list(transport._buffer))
+
+    def test_sendto_tryagain(self):
+        data = b'data'
+
+        self.sock.sendto.side_effect = BlockingIOError
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport.sendto(data, ('0.0.0.0', 12345))
+
+        self.loop.assert_writer(7, transport._sendto_ready)
+        self.assertEqual(
+            [(b'data', ('0.0.0.0', 12345))], list(transport._buffer))
+
+    @unittest.mock.patch('asyncio.selector_events.logger')
+    def test_sendto_exception(self, m_log):
+        data = b'data'
+        err = self.sock.sendto.side_effect = OSError()
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport._fatal_error = unittest.mock.Mock()
+        transport.sendto(data, ())
+
+        self.assertTrue(transport._fatal_error.called)
+        transport._fatal_error.assert_called_with(err)
+        transport._conn_lost = 1
+
+        transport._address = ('123',)
+        transport.sendto(data)
+        transport.sendto(data)
+        transport.sendto(data)
+        transport.sendto(data)
+        transport.sendto(data)
+        m_log.warning.assert_called_with('socket.send() raised exception.')
+
+    def test_sendto_connection_refused(self):
+        data = b'data'
+
+        self.sock.sendto.side_effect = ConnectionRefusedError
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport._fatal_error = unittest.mock.Mock()
+        transport.sendto(data, ())
+
+        self.assertEqual(transport._conn_lost, 0)
+        self.assertFalse(transport._fatal_error.called)
+
+    def test_sendto_connection_refused_connected(self):
+        data = b'data'
+
+        self.sock.send.side_effect = ConnectionRefusedError
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol, ('0.0.0.0', 1))
+        transport._fatal_error = unittest.mock.Mock()
+        transport.sendto(data)
+
+        self.assertTrue(transport._fatal_error.called)
+
+    def test_sendto_str(self):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        self.assertRaises(AssertionError, transport.sendto, 'str', ())
+
+    def test_sendto_connected_addr(self):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol, ('0.0.0.0', 1))
+        self.assertRaises(
+            AssertionError, transport.sendto, b'str', ('0.0.0.0', 2))
+
+    def test_sendto_closing(self):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol, address=(1,))
+        transport.close()
+        self.assertEqual(transport._conn_lost, 1)
+        transport.sendto(b'data', (1,))
+        self.assertEqual(transport._conn_lost, 2)
+
+    def test_sendto_ready(self):
+        data = b'data'
+        self.sock.sendto.return_value = len(data)
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer.append((data, ('0.0.0.0', 12345)))
+        self.loop.add_writer(7, transport._sendto_ready)
+        transport._sendto_ready()
+        self.assertTrue(self.sock.sendto.called)
+        self.assertEqual(
+            self.sock.sendto.call_args[0], (data, ('0.0.0.0', 12345)))
+        self.assertFalse(self.loop.writers)
+
+    def test_sendto_ready_closing(self):
+        data = b'data'
+        self.sock.send.return_value = len(data)
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport._closing = True
+        transport._buffer.append((data, ()))
+        self.loop.add_writer(7, transport._sendto_ready)
+        transport._sendto_ready()
+        self.sock.sendto.assert_called_with(data, ())
+        self.assertFalse(self.loop.writers)
+        self.sock.close.assert_called_with()
+        self.protocol.connection_lost.assert_called_with(None)
+
+    def test_sendto_ready_no_data(self):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        self.loop.add_writer(7, transport._sendto_ready)
+        transport._sendto_ready()
+        self.assertFalse(self.sock.sendto.called)
+        self.assertFalse(self.loop.writers)
+
+    def test_sendto_ready_tryagain(self):
+        self.sock.sendto.side_effect = BlockingIOError
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport._buffer.extend([(b'data1', ()), (b'data2', ())])
+        self.loop.add_writer(7, transport._sendto_ready)
+        transport._sendto_ready()
+
+        self.loop.assert_writer(7, transport._sendto_ready)
+        self.assertEqual(
+            [(b'data1', ()), (b'data2', ())],
+            list(transport._buffer))
+
+    def test_sendto_ready_exception(self):
+        err = self.sock.sendto.side_effect = OSError()
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport._fatal_error = unittest.mock.Mock()
+        transport._buffer.append((b'data', ()))
+        transport._sendto_ready()
+
+        transport._fatal_error.assert_called_with(err)
+
+    def test_sendto_ready_connection_refused(self):
+        self.sock.sendto.side_effect = ConnectionRefusedError
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol)
+        transport._fatal_error = unittest.mock.Mock()
+        transport._buffer.append((b'data', ()))
+        transport._sendto_ready()
+
+        self.assertFalse(transport._fatal_error.called)
+
+    def test_sendto_ready_connection_refused_connection(self):
+        self.sock.send.side_effect = ConnectionRefusedError
+
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol, ('0.0.0.0', 1))
+        transport._fatal_error = unittest.mock.Mock()
+        transport._buffer.append((b'data', ()))
+        transport._sendto_ready()
+
+        self.assertTrue(transport._fatal_error.called)
+
+    @unittest.mock.patch('asyncio.log.logger.exception')
+    def test_fatal_error_connected(self, m_exc):
+        transport = _SelectorDatagramTransport(
+            self.loop, self.sock, self.protocol, ('0.0.0.0', 1))
+        err = ConnectionRefusedError()
+        transport._fatal_error(err)
+        self.protocol.connection_refused.assert_called_with(err)
+        m_exc.assert_called_with('Fatal error for %s', transport)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py
new file mode 100644
index 0000000..69e2246
--- /dev/null
+++ b/Lib/test/test_asyncio/test_streams.py
@@ -0,0 +1,364 @@
+"""Tests for streams.py."""
+
+import gc
+import unittest
+import unittest.mock
+try:
+    import ssl
+except ImportError:
+    ssl = None
+
+from asyncio import events
+from asyncio import streams
+from asyncio import tasks
+from asyncio import test_utils
+
+
+class StreamReaderTests(unittest.TestCase):
+
+    DATA = b'line1\nline2\nline3\n'
+
+    def setUp(self):
+        self.loop = events.new_event_loop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        # just in case if we have transport close callbacks
+        test_utils.run_briefly(self.loop)
+
+        self.loop.close()
+        gc.collect()
+
+    @unittest.mock.patch('asyncio.streams.events')
+    def test_ctor_global_loop(self, m_events):
+        stream = streams.StreamReader()
+        self.assertIs(stream._loop, m_events.get_event_loop.return_value)
+
+    def test_open_connection(self):
+        with test_utils.run_test_server() as httpd:
+            f = streams.open_connection(*httpd.address, loop=self.loop)
+            reader, writer = self.loop.run_until_complete(f)
+            writer.write(b'GET / HTTP/1.0\r\n\r\n')
+            f = reader.readline()
+            data = self.loop.run_until_complete(f)
+            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
+            f = reader.read()
+            data = self.loop.run_until_complete(f)
+            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))
+
+            writer.close()
+
+    @unittest.skipIf(ssl is None, 'No ssl module')
+    def test_open_connection_no_loop_ssl(self):
+        with test_utils.run_test_server(use_ssl=True) as httpd:
+            try:
+                events.set_event_loop(self.loop)
+                f = streams.open_connection(*httpd.address,
+                                            ssl=test_utils.dummy_ssl_context())
+                reader, writer = self.loop.run_until_complete(f)
+            finally:
+                events.set_event_loop(None)
+            writer.write(b'GET / HTTP/1.0\r\n\r\n')
+            f = reader.read()
+            data = self.loop.run_until_complete(f)
+            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))
+
+            writer.close()
+
+    def test_open_connection_error(self):
+        with test_utils.run_test_server() as httpd:
+            f = streams.open_connection(*httpd.address, loop=self.loop)
+            reader, writer = self.loop.run_until_complete(f)
+            writer._protocol.connection_lost(ZeroDivisionError())
+            f = reader.read()
+            with self.assertRaises(ZeroDivisionError):
+                self.loop.run_until_complete(f)
+
+            writer.close()
+            test_utils.run_briefly(self.loop)
+
+    def test_feed_empty_data(self):
+        stream = streams.StreamReader(loop=self.loop)
+
+        stream.feed_data(b'')
+        self.assertEqual(0, stream._byte_count)
+
+    def test_feed_data_byte_count(self):
+        stream = streams.StreamReader(loop=self.loop)
+
+        stream.feed_data(self.DATA)
+        self.assertEqual(len(self.DATA), stream._byte_count)
+
+    def test_read_zero(self):
+        # Read zero bytes.
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(self.DATA)
+
+        data = self.loop.run_until_complete(stream.read(0))
+        self.assertEqual(b'', data)
+        self.assertEqual(len(self.DATA), stream._byte_count)
+
+    def test_read(self):
+        # Read bytes.
+        stream = streams.StreamReader(loop=self.loop)
+        read_task = tasks.Task(stream.read(30), loop=self.loop)
+
+        def cb():
+            stream.feed_data(self.DATA)
+        self.loop.call_soon(cb)
+
+        data = self.loop.run_until_complete(read_task)
+        self.assertEqual(self.DATA, data)
+        self.assertFalse(stream._byte_count)
+
+    def test_read_line_breaks(self):
+        # Read bytes without line breaks.
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(b'line1')
+        stream.feed_data(b'line2')
+
+        data = self.loop.run_until_complete(stream.read(5))
+
+        self.assertEqual(b'line1', data)
+        self.assertEqual(5, stream._byte_count)
+
+    def test_read_eof(self):
+        # Read bytes, stop at eof.
+        stream = streams.StreamReader(loop=self.loop)
+        read_task = tasks.Task(stream.read(1024), loop=self.loop)
+
+        def cb():
+            stream.feed_eof()
+        self.loop.call_soon(cb)
+
+        data = self.loop.run_until_complete(read_task)
+        self.assertEqual(b'', data)
+        self.assertFalse(stream._byte_count)
+
+    def test_read_until_eof(self):
+        # Read all bytes until eof.
+        stream = streams.StreamReader(loop=self.loop)
+        read_task = tasks.Task(stream.read(-1), loop=self.loop)
+
+        def cb():
+            stream.feed_data(b'chunk1\n')
+            stream.feed_data(b'chunk2')
+            stream.feed_eof()
+        self.loop.call_soon(cb)
+
+        data = self.loop.run_until_complete(read_task)
+
+        self.assertEqual(b'chunk1\nchunk2', data)
+        self.assertFalse(stream._byte_count)
+
+    def test_read_exception(self):
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(b'line\n')
+
+        data = self.loop.run_until_complete(stream.read(2))
+        self.assertEqual(b'li', data)
+
+        stream.set_exception(ValueError())
+        self.assertRaises(
+            ValueError, self.loop.run_until_complete, stream.read(2))
+
+    def test_readline(self):
+        # Read one line.
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(b'chunk1 ')
+        read_task = tasks.Task(stream.readline(), loop=self.loop)
+
+        def cb():
+            stream.feed_data(b'chunk2 ')
+            stream.feed_data(b'chunk3 ')
+            stream.feed_data(b'\n chunk4')
+        self.loop.call_soon(cb)
+
+        line = self.loop.run_until_complete(read_task)
+        self.assertEqual(b'chunk1 chunk2 chunk3 \n', line)
+        self.assertEqual(len(b'\n chunk4')-1, stream._byte_count)
+
+    def test_readline_limit_with_existing_data(self):
+        stream = streams.StreamReader(3, loop=self.loop)
+        stream.feed_data(b'li')
+        stream.feed_data(b'ne1\nline2\n')
+
+        self.assertRaises(
+            ValueError, self.loop.run_until_complete, stream.readline())
+        self.assertEqual([b'line2\n'], list(stream._buffer))
+
+        stream = streams.StreamReader(3, loop=self.loop)
+        stream.feed_data(b'li')
+        stream.feed_data(b'ne1')
+        stream.feed_data(b'li')
+
+        self.assertRaises(
+            ValueError, self.loop.run_until_complete, stream.readline())
+        self.assertEqual([b'li'], list(stream._buffer))
+        self.assertEqual(2, stream._byte_count)
+
+    def test_readline_limit(self):
+        stream = streams.StreamReader(7, loop=self.loop)
+
+        def cb():
+            stream.feed_data(b'chunk1')
+            stream.feed_data(b'chunk2')
+            stream.feed_data(b'chunk3\n')
+            stream.feed_eof()
+        self.loop.call_soon(cb)
+
+        self.assertRaises(
+            ValueError, self.loop.run_until_complete, stream.readline())
+        self.assertEqual([b'chunk3\n'], list(stream._buffer))
+        self.assertEqual(7, stream._byte_count)
+
+    def test_readline_line_byte_count(self):
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(self.DATA[:6])
+        stream.feed_data(self.DATA[6:])
+
+        line = self.loop.run_until_complete(stream.readline())
+
+        self.assertEqual(b'line1\n', line)
+        self.assertEqual(len(self.DATA) - len(b'line1\n'), stream._byte_count)
+
+    def test_readline_eof(self):
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(b'some data')
+        stream.feed_eof()
+
+        line = self.loop.run_until_complete(stream.readline())
+        self.assertEqual(b'some data', line)
+
+    def test_readline_empty_eof(self):
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_eof()
+
+        line = self.loop.run_until_complete(stream.readline())
+        self.assertEqual(b'', line)
+
+    def test_readline_read_byte_count(self):
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(self.DATA)
+
+        self.loop.run_until_complete(stream.readline())
+
+        data = self.loop.run_until_complete(stream.read(7))
+
+        self.assertEqual(b'line2\nl', data)
+        self.assertEqual(
+            len(self.DATA) - len(b'line1\n') - len(b'line2\nl'),
+            stream._byte_count)
+
+    def test_readline_exception(self):
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(b'line\n')
+
+        data = self.loop.run_until_complete(stream.readline())
+        self.assertEqual(b'line\n', data)
+
+        stream.set_exception(ValueError())
+        self.assertRaises(
+            ValueError, self.loop.run_until_complete, stream.readline())
+
+    def test_readexactly_zero_or_less(self):
+        # Read exact number of bytes (zero or less).
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(self.DATA)
+
+        data = self.loop.run_until_complete(stream.readexactly(0))
+        self.assertEqual(b'', data)
+        self.assertEqual(len(self.DATA), stream._byte_count)
+
+        data = self.loop.run_until_complete(stream.readexactly(-1))
+        self.assertEqual(b'', data)
+        self.assertEqual(len(self.DATA), stream._byte_count)
+
+    def test_readexactly(self):
+        # Read exact number of bytes.
+        stream = streams.StreamReader(loop=self.loop)
+
+        n = 2 * len(self.DATA)
+        read_task = tasks.Task(stream.readexactly(n), loop=self.loop)
+
+        def cb():
+            stream.feed_data(self.DATA)
+            stream.feed_data(self.DATA)
+            stream.feed_data(self.DATA)
+        self.loop.call_soon(cb)
+
+        data = self.loop.run_until_complete(read_task)
+        self.assertEqual(self.DATA + self.DATA, data)
+        self.assertEqual(len(self.DATA), stream._byte_count)
+
+    def test_readexactly_eof(self):
+        # Read exact number of bytes (eof).
+        stream = streams.StreamReader(loop=self.loop)
+        n = 2 * len(self.DATA)
+        read_task = tasks.Task(stream.readexactly(n), loop=self.loop)
+
+        def cb():
+            stream.feed_data(self.DATA)
+            stream.feed_eof()
+        self.loop.call_soon(cb)
+
+        data = self.loop.run_until_complete(read_task)
+        self.assertEqual(self.DATA, data)
+        self.assertFalse(stream._byte_count)
+
+    def test_readexactly_exception(self):
+        stream = streams.StreamReader(loop=self.loop)
+        stream.feed_data(b'line\n')
+
+        data = self.loop.run_until_complete(stream.readexactly(2))
+        self.assertEqual(b'li', data)
+
+        stream.set_exception(ValueError())
+        self.assertRaises(
+            ValueError, self.loop.run_until_complete, stream.readexactly(2))
+
+    def test_exception(self):
+        stream = streams.StreamReader(loop=self.loop)
+        self.assertIsNone(stream.exception())
+
+        exc = ValueError()
+        stream.set_exception(exc)
+        self.assertIs(stream.exception(), exc)
+
+    def test_exception_waiter(self):
+        stream = streams.StreamReader(loop=self.loop)
+
+        @tasks.coroutine
+        def set_err():
+            stream.set_exception(ValueError())
+
+        @tasks.coroutine
+        def readline():
+            yield from stream.readline()
+
+        t1 = tasks.Task(stream.readline(), loop=self.loop)
+        t2 = tasks.Task(set_err(), loop=self.loop)
+
+        self.loop.run_until_complete(tasks.wait([t1, t2], loop=self.loop))
+
+        self.assertRaises(ValueError, t1.result)
+
+    def test_exception_cancel(self):
+        stream = streams.StreamReader(loop=self.loop)
+
+        @tasks.coroutine
+        def read_a_line():
+            yield from stream.readline()
+
+        t = tasks.Task(read_a_line(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        t.cancel()
+        test_utils.run_briefly(self.loop)
+        # The following line fails if set_exception() isn't careful.
+        stream.set_exception(RuntimeError('message'))
+        test_utils.run_briefly(self.loop)
+        self.assertIs(stream._waiter, None)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py
new file mode 100644
index 0000000..57fb053
--- /dev/null
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -0,0 +1,1518 @@
+"""Tests for tasks.py."""
+
+import gc
+import unittest
+import unittest.mock
+from unittest.mock import Mock
+
+from asyncio import events
+from asyncio import futures
+from asyncio import tasks
+from asyncio import test_utils
+
+
+class Dummy:
+
+    def __repr__(self):
+        return 'Dummy()'
+
+    def __call__(self, *args):
+        pass
+
+
+class TaskTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+        gc.collect()
+
+    def test_task_class(self):
+        @tasks.coroutine
+        def notmuch():
+            return 'ok'
+        t = tasks.Task(notmuch(), loop=self.loop)
+        self.loop.run_until_complete(t)
+        self.assertTrue(t.done())
+        self.assertEqual(t.result(), 'ok')
+        self.assertIs(t._loop, self.loop)
+
+        loop = events.new_event_loop()
+        t = tasks.Task(notmuch(), loop=loop)
+        self.assertIs(t._loop, loop)
+        loop.close()
+
+    def test_async_coroutine(self):
+        @tasks.coroutine
+        def notmuch():
+            return 'ok'
+        t = tasks.async(notmuch(), loop=self.loop)
+        self.loop.run_until_complete(t)
+        self.assertTrue(t.done())
+        self.assertEqual(t.result(), 'ok')
+        self.assertIs(t._loop, self.loop)
+
+        loop = events.new_event_loop()
+        t = tasks.async(notmuch(), loop=loop)
+        self.assertIs(t._loop, loop)
+        loop.close()
+
+    def test_async_future(self):
+        f_orig = futures.Future(loop=self.loop)
+        f_orig.set_result('ko')
+
+        f = tasks.async(f_orig)
+        self.loop.run_until_complete(f)
+        self.assertTrue(f.done())
+        self.assertEqual(f.result(), 'ko')
+        self.assertIs(f, f_orig)
+
+        loop = events.new_event_loop()
+
+        with self.assertRaises(ValueError):
+            f = tasks.async(f_orig, loop=loop)
+
+        loop.close()
+
+        f = tasks.async(f_orig, loop=self.loop)
+        self.assertIs(f, f_orig)
+
+    def test_async_task(self):
+        @tasks.coroutine
+        def notmuch():
+            return 'ok'
+        t_orig = tasks.Task(notmuch(), loop=self.loop)
+        t = tasks.async(t_orig)
+        self.loop.run_until_complete(t)
+        self.assertTrue(t.done())
+        self.assertEqual(t.result(), 'ok')
+        self.assertIs(t, t_orig)
+
+        loop = events.new_event_loop()
+
+        with self.assertRaises(ValueError):
+            t = tasks.async(t_orig, loop=loop)
+
+        loop.close()
+
+        t = tasks.async(t_orig, loop=self.loop)
+        self.assertIs(t, t_orig)
+
+    def test_async_neither(self):
+        with self.assertRaises(TypeError):
+            tasks.async('ok')
+
+    def test_task_repr(self):
+        @tasks.coroutine
+        def notmuch():
+            yield from []
+            return 'abc'
+
+        t = tasks.Task(notmuch(), loop=self.loop)
+        t.add_done_callback(Dummy())
+        self.assertEqual(repr(t), 'Task(<notmuch>)<PENDING, [Dummy()]>')
+        t.cancel()  # Does not take immediate effect!
+        self.assertEqual(repr(t), 'Task(<notmuch>)<CANCELLING, [Dummy()]>')
+        self.assertRaises(futures.CancelledError,
+                          self.loop.run_until_complete, t)
+        self.assertEqual(repr(t), 'Task(<notmuch>)<CANCELLED>')
+        t = tasks.Task(notmuch(), loop=self.loop)
+        self.loop.run_until_complete(t)
+        self.assertEqual(repr(t), "Task(<notmuch>)<result='abc'>")
+
+    def test_task_repr_custom(self):
+        @tasks.coroutine
+        def coro():
+            pass
+
+        class T(futures.Future):
+            def __repr__(self):
+                return 'T[]'
+
+        class MyTask(tasks.Task, T):
+            def __repr__(self):
+                return super().__repr__()
+
+        gen = coro()
+        t = MyTask(gen, loop=self.loop)
+        self.assertEqual(repr(t), 'T[](<coro>)')
+        gen.close()
+
+    def test_task_basics(self):
+        @tasks.coroutine
+        def outer():
+            a = yield from inner1()
+            b = yield from inner2()
+            return a+b
+
+        @tasks.coroutine
+        def inner1():
+            return 42
+
+        @tasks.coroutine
+        def inner2():
+            return 1000
+
+        t = outer()
+        self.assertEqual(self.loop.run_until_complete(t), 1042)
+
+    def test_cancel(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(10.0, when)
+            yield 0
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        @tasks.coroutine
+        def task():
+            yield from tasks.sleep(10.0, loop=loop)
+            return 12
+
+        t = tasks.Task(task(), loop=loop)
+        loop.call_soon(t.cancel)
+        with self.assertRaises(futures.CancelledError):
+            loop.run_until_complete(t)
+        self.assertTrue(t.done())
+        self.assertTrue(t.cancelled())
+        self.assertFalse(t.cancel())
+
+    def test_cancel_yield(self):
+        @tasks.coroutine
+        def task():
+            yield
+            yield
+            return 12
+
+        t = tasks.Task(task(), loop=self.loop)
+        test_utils.run_briefly(self.loop)  # start coro
+        t.cancel()
+        self.assertRaises(
+            futures.CancelledError, self.loop.run_until_complete, t)
+        self.assertTrue(t.done())
+        self.assertTrue(t.cancelled())
+        self.assertFalse(t.cancel())
+
+    def test_cancel_inner_future(self):
+        f = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def task():
+            yield from f
+            return 12
+
+        t = tasks.Task(task(), loop=self.loop)
+        test_utils.run_briefly(self.loop)  # start task
+        f.cancel()
+        with self.assertRaises(futures.CancelledError):
+            self.loop.run_until_complete(t)
+        self.assertTrue(f.cancelled())
+        self.assertTrue(t.cancelled())
+
+    def test_cancel_both_task_and_inner_future(self):
+        f = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def task():
+            yield from f
+            return 12
+
+        t = tasks.Task(task(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+
+        f.cancel()
+        t.cancel()
+
+        with self.assertRaises(futures.CancelledError):
+            self.loop.run_until_complete(t)
+
+        self.assertTrue(t.done())
+        self.assertTrue(f.cancelled())
+        self.assertTrue(t.cancelled())
+
+    def test_cancel_task_catching(self):
+        fut1 = futures.Future(loop=self.loop)
+        fut2 = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def task():
+            yield from fut1
+            try:
+                yield from fut2
+            except futures.CancelledError:
+                return 42
+
+        t = tasks.Task(task(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.assertIs(t._fut_waiter, fut1)  # White-box test.
+        fut1.set_result(None)
+        test_utils.run_briefly(self.loop)
+        self.assertIs(t._fut_waiter, fut2)  # White-box test.
+        t.cancel()
+        self.assertTrue(fut2.cancelled())
+        res = self.loop.run_until_complete(t)
+        self.assertEqual(res, 42)
+        self.assertFalse(t.cancelled())
+
+    def test_cancel_task_ignoring(self):
+        fut1 = futures.Future(loop=self.loop)
+        fut2 = futures.Future(loop=self.loop)
+        fut3 = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def task():
+            yield from fut1
+            try:
+                yield from fut2
+            except futures.CancelledError:
+                pass
+            res = yield from fut3
+            return res
+
+        t = tasks.Task(task(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.assertIs(t._fut_waiter, fut1)  # White-box test.
+        fut1.set_result(None)
+        test_utils.run_briefly(self.loop)
+        self.assertIs(t._fut_waiter, fut2)  # White-box test.
+        t.cancel()
+        self.assertTrue(fut2.cancelled())
+        test_utils.run_briefly(self.loop)
+        self.assertIs(t._fut_waiter, fut3)  # White-box test.
+        fut3.set_result(42)
+        res = self.loop.run_until_complete(t)
+        self.assertEqual(res, 42)
+        self.assertFalse(fut3.cancelled())
+        self.assertFalse(t.cancelled())
+
+    def test_cancel_current_task(self):
+        loop = events.new_event_loop()
+        self.addCleanup(loop.close)
+
+        @tasks.coroutine
+        def task():
+            t.cancel()
+            self.assertTrue(t._must_cancel)  # White-box test.
+            # The sleep should be cancelled immediately.
+            yield from tasks.sleep(100, loop=loop)
+            return 12
+
+        t = tasks.Task(task(), loop=loop)
+        self.assertRaises(
+            futures.CancelledError, loop.run_until_complete, t)
+        self.assertTrue(t.done())
+        self.assertFalse(t._must_cancel)  # White-box test.
+        self.assertFalse(t.cancel())
+
+    def test_stop_while_run_in_complete(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0.1
+            self.assertAlmostEqual(0.2, when)
+            when = yield 0.1
+            self.assertAlmostEqual(0.3, when)
+            yield 0.1
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        x = 0
+        waiters = []
+
+        @tasks.coroutine
+        def task():
+            nonlocal x
+            while x < 10:
+                waiters.append(tasks.sleep(0.1, loop=loop))
+                yield from waiters[-1]
+                x += 1
+                if x == 2:
+                    loop.stop()
+
+        t = tasks.Task(task(), loop=loop)
+        self.assertRaises(
+            RuntimeError, loop.run_until_complete, t)
+        self.assertFalse(t.done())
+        self.assertEqual(x, 2)
+        self.assertAlmostEqual(0.3, loop.time())
+
+        # close generators
+        for w in waiters:
+            w.close()
+
+    def test_wait_for(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.2, when)
+            when = yield 0
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0.1
+            self.assertAlmostEqual(0.4, when)
+            yield 0.1
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        @tasks.coroutine
+        def foo():
+            yield from tasks.sleep(0.2, loop=loop)
+            return 'done'
+
+        fut = tasks.Task(foo(), loop=loop)
+
+        with self.assertRaises(futures.TimeoutError):
+            loop.run_until_complete(tasks.wait_for(fut, 0.1, loop=loop))
+
+        self.assertFalse(fut.done())
+        self.assertAlmostEqual(0.1, loop.time())
+
+        # wait for result
+        res = loop.run_until_complete(
+            tasks.wait_for(fut, 0.3, loop=loop))
+        self.assertEqual(res, 'done')
+        self.assertAlmostEqual(0.2, loop.time())
+
+    def test_wait_for_with_global_loop(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.2, when)
+            when = yield 0
+            self.assertAlmostEqual(0.01, when)
+            yield 0.01
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        @tasks.coroutine
+        def foo():
+            yield from tasks.sleep(0.2, loop=loop)
+            return 'done'
+
+        events.set_event_loop(loop)
+        try:
+            fut = tasks.Task(foo(), loop=loop)
+            with self.assertRaises(futures.TimeoutError):
+                loop.run_until_complete(tasks.wait_for(fut, 0.01))
+        finally:
+            events.set_event_loop(None)
+
+        self.assertAlmostEqual(0.01, loop.time())
+        self.assertFalse(fut.done())
+
+        # move forward to close generator
+        loop.advance_time(10)
+        loop.run_until_complete(fut)
+
+    def test_wait(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0
+            self.assertAlmostEqual(0.15, when)
+            yield 0.15
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        a = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop)
+        b = tasks.Task(tasks.sleep(0.15, loop=loop), loop=loop)
+
+        @tasks.coroutine
+        def foo():
+            done, pending = yield from tasks.wait([b, a], loop=loop)
+            self.assertEqual(done, set([a, b]))
+            self.assertEqual(pending, set())
+            return 42
+
+        res = loop.run_until_complete(tasks.Task(foo(), loop=loop))
+        self.assertEqual(res, 42)
+        self.assertAlmostEqual(0.15, loop.time())
+
+        # Doing it again should take no time and exercise a different path.
+        res = loop.run_until_complete(tasks.Task(foo(), loop=loop))
+        self.assertAlmostEqual(0.15, loop.time())
+        self.assertEqual(res, 42)
+
+    def test_wait_with_global_loop(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.01, when)
+            when = yield 0
+            self.assertAlmostEqual(0.015, when)
+            yield 0.015
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        a = tasks.Task(tasks.sleep(0.01, loop=loop), loop=loop)
+        b = tasks.Task(tasks.sleep(0.015, loop=loop), loop=loop)
+
+        @tasks.coroutine
+        def foo():
+            done, pending = yield from tasks.wait([b, a])
+            self.assertEqual(done, set([a, b]))
+            self.assertEqual(pending, set())
+            return 42
+
+        events.set_event_loop(loop)
+        try:
+            res = loop.run_until_complete(
+                tasks.Task(foo(), loop=loop))
+        finally:
+            events.set_event_loop(None)
+
+        self.assertEqual(res, 42)
+
+    def test_wait_errors(self):
+        self.assertRaises(
+            ValueError, self.loop.run_until_complete,
+            tasks.wait(set(), loop=self.loop))
+
+        self.assertRaises(
+            ValueError, self.loop.run_until_complete,
+            tasks.wait([tasks.sleep(10.0, loop=self.loop)],
+                       return_when=-1, loop=self.loop))
+
+    def test_wait_first_completed(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(10.0, when)
+            when = yield 0
+            self.assertAlmostEqual(0.1, when)
+            yield 0.1
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        a = tasks.Task(tasks.sleep(10.0, loop=loop), loop=loop)
+        b = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop)
+        task = tasks.Task(
+            tasks.wait([b, a], return_when=tasks.FIRST_COMPLETED,
+                       loop=loop),
+            loop=loop)
+
+        done, pending = loop.run_until_complete(task)
+        self.assertEqual({b}, done)
+        self.assertEqual({a}, pending)
+        self.assertFalse(a.done())
+        self.assertTrue(b.done())
+        self.assertIsNone(b.result())
+        self.assertAlmostEqual(0.1, loop.time())
+
+        # move forward to close generator
+        loop.advance_time(10)
+        loop.run_until_complete(tasks.wait([a, b], loop=loop))
+
+    def test_wait_really_done(self):
+        # there is possibility that some tasks in the pending list
+        # became done but their callbacks haven't all been called yet
+
+        @tasks.coroutine
+        def coro1():
+            yield
+
+        @tasks.coroutine
+        def coro2():
+            yield
+            yield
+
+        a = tasks.Task(coro1(), loop=self.loop)
+        b = tasks.Task(coro2(), loop=self.loop)
+        task = tasks.Task(
+            tasks.wait([b, a], return_when=tasks.FIRST_COMPLETED,
+                       loop=self.loop),
+            loop=self.loop)
+
+        done, pending = self.loop.run_until_complete(task)
+        self.assertEqual({a, b}, done)
+        self.assertTrue(a.done())
+        self.assertIsNone(a.result())
+        self.assertTrue(b.done())
+        self.assertIsNone(b.result())
+
+    def test_wait_first_exception(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(10.0, when)
+            yield 0
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        # first_exception, task already has exception
+        a = tasks.Task(tasks.sleep(10.0, loop=loop), loop=loop)
+
+        @tasks.coroutine
+        def exc():
+            raise ZeroDivisionError('err')
+
+        b = tasks.Task(exc(), loop=loop)
+        task = tasks.Task(
+            tasks.wait([b, a], return_when=tasks.FIRST_EXCEPTION,
+                       loop=loop),
+            loop=loop)
+
+        done, pending = loop.run_until_complete(task)
+        self.assertEqual({b}, done)
+        self.assertEqual({a}, pending)
+        self.assertAlmostEqual(0, loop.time())
+
+        # move forward to close generator
+        loop.advance_time(10)
+        loop.run_until_complete(tasks.wait([a, b], loop=loop))
+
+    def test_wait_first_exception_in_wait(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(10.0, when)
+            when = yield 0
+            self.assertAlmostEqual(0.01, when)
+            yield 0.01
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        # first_exception, exception during waiting
+        a = tasks.Task(tasks.sleep(10.0, loop=loop), loop=loop)
+
+        @tasks.coroutine
+        def exc():
+            yield from tasks.sleep(0.01, loop=loop)
+            raise ZeroDivisionError('err')
+
+        b = tasks.Task(exc(), loop=loop)
+        task = tasks.wait([b, a], return_when=tasks.FIRST_EXCEPTION,
+                          loop=loop)
+
+        done, pending = loop.run_until_complete(task)
+        self.assertEqual({b}, done)
+        self.assertEqual({a}, pending)
+        self.assertAlmostEqual(0.01, loop.time())
+
+        # move forward to close generator
+        loop.advance_time(10)
+        loop.run_until_complete(tasks.wait([a, b], loop=loop))
+
+    def test_wait_with_exception(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0
+            self.assertAlmostEqual(0.15, when)
+            yield 0.15
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        a = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop)
+
+        @tasks.coroutine
+        def sleeper():
+            yield from tasks.sleep(0.15, loop=loop)
+            raise ZeroDivisionError('really')
+
+        b = tasks.Task(sleeper(), loop=loop)
+
+        @tasks.coroutine
+        def foo():
+            done, pending = yield from tasks.wait([b, a], loop=loop)
+            self.assertEqual(len(done), 2)
+            self.assertEqual(pending, set())
+            errors = set(f for f in done if f.exception() is not None)
+            self.assertEqual(len(errors), 1)
+
+        loop.run_until_complete(tasks.Task(foo(), loop=loop))
+        self.assertAlmostEqual(0.15, loop.time())
+
+        loop.run_until_complete(tasks.Task(foo(), loop=loop))
+        self.assertAlmostEqual(0.15, loop.time())
+
+    def test_wait_with_timeout(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0
+            self.assertAlmostEqual(0.15, when)
+            when = yield 0
+            self.assertAlmostEqual(0.11, when)
+            yield 0.11
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        a = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop)
+        b = tasks.Task(tasks.sleep(0.15, loop=loop), loop=loop)
+
+        @tasks.coroutine
+        def foo():
+            done, pending = yield from tasks.wait([b, a], timeout=0.11,
+                                                  loop=loop)
+            self.assertEqual(done, set([a]))
+            self.assertEqual(pending, set([b]))
+
+        loop.run_until_complete(tasks.Task(foo(), loop=loop))
+        self.assertAlmostEqual(0.11, loop.time())
+
+        # move forward to close generator
+        loop.advance_time(10)
+        loop.run_until_complete(tasks.wait([a, b], loop=loop))
+
+    def test_wait_concurrent_complete(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0
+            self.assertAlmostEqual(0.15, when)
+            when = yield 0
+            self.assertAlmostEqual(0.1, when)
+            yield 0.1
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        a = tasks.Task(tasks.sleep(0.1, loop=loop), loop=loop)
+        b = tasks.Task(tasks.sleep(0.15, loop=loop), loop=loop)
+
+        done, pending = loop.run_until_complete(
+            tasks.wait([b, a], timeout=0.1, loop=loop))
+
+        self.assertEqual(done, set([a]))
+        self.assertEqual(pending, set([b]))
+        self.assertAlmostEqual(0.1, loop.time())
+
+        # move forward to close generator
+        loop.advance_time(10)
+        loop.run_until_complete(tasks.wait([a, b], loop=loop))
+
+    def test_as_completed(self):
+
+        def gen():
+            yield 0
+            yield 0
+            yield 0.01
+            yield 0
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+        completed = set()
+        time_shifted = False
+
+        @tasks.coroutine
+        def sleeper(dt, x):
+            nonlocal time_shifted
+            yield from tasks.sleep(dt, loop=loop)
+            completed.add(x)
+            if not time_shifted and 'a' in completed and 'b' in completed:
+                time_shifted = True
+                loop.advance_time(0.14)
+            return x
+
+        a = sleeper(0.01, 'a')
+        b = sleeper(0.01, 'b')
+        c = sleeper(0.15, 'c')
+
+        @tasks.coroutine
+        def foo():
+            values = []
+            for f in tasks.as_completed([b, c, a], loop=loop):
+                values.append((yield from f))
+            return values
+
+        res = loop.run_until_complete(tasks.Task(foo(), loop=loop))
+        self.assertAlmostEqual(0.15, loop.time())
+        self.assertTrue('a' in res[:2])
+        self.assertTrue('b' in res[:2])
+        self.assertEqual(res[2], 'c')
+
+        # Doing it again should take no time and exercise a different path.
+        res = loop.run_until_complete(tasks.Task(foo(), loop=loop))
+        self.assertAlmostEqual(0.15, loop.time())
+
+    def test_as_completed_with_timeout(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.12, when)
+            when = yield 0
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0
+            self.assertAlmostEqual(0.15, when)
+            when = yield 0.1
+            self.assertAlmostEqual(0.12, when)
+            yield 0.02
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        a = tasks.sleep(0.1, 'a', loop=loop)
+        b = tasks.sleep(0.15, 'b', loop=loop)
+
+        @tasks.coroutine
+        def foo():
+            values = []
+            for f in tasks.as_completed([a, b], timeout=0.12, loop=loop):
+                try:
+                    v = yield from f
+                    values.append((1, v))
+                except futures.TimeoutError as exc:
+                    values.append((2, exc))
+            return values
+
+        res = loop.run_until_complete(tasks.Task(foo(), loop=loop))
+        self.assertEqual(len(res), 2, res)
+        self.assertEqual(res[0], (1, 'a'))
+        self.assertEqual(res[1][0], 2)
+        self.assertTrue(isinstance(res[1][1], futures.TimeoutError))
+        self.assertAlmostEqual(0.12, loop.time())
+
+        # move forward to close generator
+        loop.advance_time(10)
+        loop.run_until_complete(tasks.wait([a, b], loop=loop))
+
+    def test_as_completed_reverse_wait(self):
+
+        def gen():
+            yield 0
+            yield 0.05
+            yield 0
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        a = tasks.sleep(0.05, 'a', loop=loop)
+        b = tasks.sleep(0.10, 'b', loop=loop)
+        fs = {a, b}
+        futs = list(tasks.as_completed(fs, loop=loop))
+        self.assertEqual(len(futs), 2)
+
+        x = loop.run_until_complete(futs[1])
+        self.assertEqual(x, 'a')
+        self.assertAlmostEqual(0.05, loop.time())
+        loop.advance_time(0.05)
+        y = loop.run_until_complete(futs[0])
+        self.assertEqual(y, 'b')
+        self.assertAlmostEqual(0.10, loop.time())
+
+    def test_as_completed_concurrent(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.05, when)
+            when = yield 0
+            self.assertAlmostEqual(0.05, when)
+            yield 0.05
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        a = tasks.sleep(0.05, 'a', loop=loop)
+        b = tasks.sleep(0.05, 'b', loop=loop)
+        fs = {a, b}
+        futs = list(tasks.as_completed(fs, loop=loop))
+        self.assertEqual(len(futs), 2)
+        waiter = tasks.wait(futs, loop=loop)
+        done, pending = loop.run_until_complete(waiter)
+        self.assertEqual(set(f.result() for f in done), {'a', 'b'})
+
+    def test_sleep(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.05, when)
+            when = yield 0.05
+            self.assertAlmostEqual(0.1, when)
+            yield 0.05
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        @tasks.coroutine
+        def sleeper(dt, arg):
+            yield from tasks.sleep(dt/2, loop=loop)
+            res = yield from tasks.sleep(dt/2, arg, loop=loop)
+            return res
+
+        t = tasks.Task(sleeper(0.1, 'yeah'), loop=loop)
+        loop.run_until_complete(t)
+        self.assertTrue(t.done())
+        self.assertEqual(t.result(), 'yeah')
+        self.assertAlmostEqual(0.1, loop.time())
+
+    def test_sleep_cancel(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(10.0, when)
+            yield 0
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        t = tasks.Task(tasks.sleep(10.0, 'yeah', loop=loop),
+                       loop=loop)
+
+        handle = None
+        orig_call_later = loop.call_later
+
+        def call_later(self, delay, callback, *args):
+            nonlocal handle
+            handle = orig_call_later(self, delay, callback, *args)
+            return handle
+
+        loop.call_later = call_later
+        test_utils.run_briefly(loop)
+
+        self.assertFalse(handle._cancelled)
+
+        t.cancel()
+        test_utils.run_briefly(loop)
+        self.assertTrue(handle._cancelled)
+
+    def test_task_cancel_sleeping_task(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0
+            self.assertAlmostEqual(5000, when)
+            yield 0.1
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        sleepfut = None
+
+        @tasks.coroutine
+        def sleep(dt):
+            nonlocal sleepfut
+            sleepfut = tasks.sleep(dt, loop=loop)
+            yield from sleepfut
+
+        @tasks.coroutine
+        def doit():
+            sleeper = tasks.Task(sleep(5000), loop=loop)
+            loop.call_later(0.1, sleeper.cancel)
+            try:
+                yield from sleeper
+            except futures.CancelledError:
+                return 'cancelled'
+            else:
+                return 'slept in'
+
+        doer = doit()
+        self.assertEqual(loop.run_until_complete(doer), 'cancelled')
+        self.assertAlmostEqual(0.1, loop.time())
+
+    def test_task_cancel_waiter_future(self):
+        fut = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def coro():
+            yield from fut
+
+        task = tasks.Task(coro(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.assertIs(task._fut_waiter, fut)
+
+        task.cancel()
+        test_utils.run_briefly(self.loop)
+        self.assertRaises(
+            futures.CancelledError, self.loop.run_until_complete, task)
+        self.assertIsNone(task._fut_waiter)
+        self.assertTrue(fut.cancelled())
+
+    def test_step_in_completed_task(self):
+        @tasks.coroutine
+        def notmuch():
+            return 'ko'
+
+        gen = notmuch()
+        task = tasks.Task(gen, loop=self.loop)
+        task.set_result('ok')
+
+        self.assertRaises(AssertionError, task._step)
+        gen.close()
+
+    def test_step_result(self):
+        @tasks.coroutine
+        def notmuch():
+            yield None
+            yield 1
+            return 'ko'
+
+        self.assertRaises(
+            RuntimeError, self.loop.run_until_complete, notmuch())
+
+    def test_step_result_future(self):
+        # If coroutine returns future, task waits on this future.
+
+        class Fut(futures.Future):
+            def __init__(self, *args, **kwds):
+                self.cb_added = False
+                super().__init__(*args, **kwds)
+
+            def add_done_callback(self, fn):
+                self.cb_added = True
+                super().add_done_callback(fn)
+
+        fut = Fut(loop=self.loop)
+        result = None
+
+        @tasks.coroutine
+        def wait_for_future():
+            nonlocal result
+            result = yield from fut
+
+        t = tasks.Task(wait_for_future(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        self.assertTrue(fut.cb_added)
+
+        res = object()
+        fut.set_result(res)
+        test_utils.run_briefly(self.loop)
+        self.assertIs(res, result)
+        self.assertTrue(t.done())
+        self.assertIsNone(t.result())
+
+    def test_step_with_baseexception(self):
+        @tasks.coroutine
+        def notmutch():
+            raise BaseException()
+
+        task = tasks.Task(notmutch(), loop=self.loop)
+        self.assertRaises(BaseException, task._step)
+
+        self.assertTrue(task.done())
+        self.assertIsInstance(task.exception(), BaseException)
+
+    def test_baseexception_during_cancel(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(10.0, when)
+            yield 0
+
+        loop = test_utils.TestLoop(gen)
+        self.addCleanup(loop.close)
+
+        @tasks.coroutine
+        def sleeper():
+            yield from tasks.sleep(10, loop=loop)
+
+        base_exc = BaseException()
+
+        @tasks.coroutine
+        def notmutch():
+            try:
+                yield from sleeper()
+            except futures.CancelledError:
+                raise base_exc
+
+        task = tasks.Task(notmutch(), loop=loop)
+        test_utils.run_briefly(loop)
+
+        task.cancel()
+        self.assertFalse(task.done())
+
+        self.assertRaises(BaseException, test_utils.run_briefly, loop)
+
+        self.assertTrue(task.done())
+        self.assertFalse(task.cancelled())
+        self.assertIs(task.exception(), base_exc)
+
+    def test_iscoroutinefunction(self):
+        def fn():
+            pass
+
+        self.assertFalse(tasks.iscoroutinefunction(fn))
+
+        def fn1():
+            yield
+        self.assertFalse(tasks.iscoroutinefunction(fn1))
+
+        @tasks.coroutine
+        def fn2():
+            yield
+        self.assertTrue(tasks.iscoroutinefunction(fn2))
+
+    def test_yield_vs_yield_from(self):
+        fut = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def wait_for_future():
+            yield fut
+
+        task = wait_for_future()
+        with self.assertRaises(RuntimeError):
+            self.loop.run_until_complete(task)
+
+        self.assertFalse(fut.done())
+
+    def test_yield_vs_yield_from_generator(self):
+        @tasks.coroutine
+        def coro():
+            yield
+
+        @tasks.coroutine
+        def wait_for_future():
+            gen = coro()
+            try:
+                yield gen
+            finally:
+                gen.close()
+
+        task = wait_for_future()
+        self.assertRaises(
+            RuntimeError,
+            self.loop.run_until_complete, task)
+
+    def test_coroutine_non_gen_function(self):
+        @tasks.coroutine
+        def func():
+            return 'test'
+
+        self.assertTrue(tasks.iscoroutinefunction(func))
+
+        coro = func()
+        self.assertTrue(tasks.iscoroutine(coro))
+
+        res = self.loop.run_until_complete(coro)
+        self.assertEqual(res, 'test')
+
+    def test_coroutine_non_gen_function_return_future(self):
+        fut = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def func():
+            return fut
+
+        @tasks.coroutine
+        def coro():
+            fut.set_result('test')
+
+        t1 = tasks.Task(func(), loop=self.loop)
+        t2 = tasks.Task(coro(), loop=self.loop)
+        res = self.loop.run_until_complete(t1)
+        self.assertEqual(res, 'test')
+        self.assertIsNone(t2.result())
+
+    # Some thorough tests for cancellation propagation through
+    # coroutines, tasks and wait().
+
+    def test_yield_future_passes_cancel(self):
+        # Cancelling outer() cancels inner() cancels waiter.
+        proof = 0
+        waiter = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def inner():
+            nonlocal proof
+            try:
+                yield from waiter
+            except futures.CancelledError:
+                proof += 1
+                raise
+            else:
+                self.fail('got past sleep() in inner()')
+
+        @tasks.coroutine
+        def outer():
+            nonlocal proof
+            try:
+                yield from inner()
+            except futures.CancelledError:
+                proof += 100  # Expect this path.
+            else:
+                proof += 10
+
+        f = tasks.async(outer(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        f.cancel()
+        self.loop.run_until_complete(f)
+        self.assertEqual(proof, 101)
+        self.assertTrue(waiter.cancelled())
+
+    def test_yield_wait_does_not_shield_cancel(self):
+        # Cancelling outer() makes wait() return early, leaves inner()
+        # running.
+        proof = 0
+        waiter = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def inner():
+            nonlocal proof
+            yield from waiter
+            proof += 1
+
+        @tasks.coroutine
+        def outer():
+            nonlocal proof
+            d, p = yield from tasks.wait([inner()], loop=self.loop)
+            proof += 100
+
+        f = tasks.async(outer(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        f.cancel()
+        self.assertRaises(
+            futures.CancelledError, self.loop.run_until_complete, f)
+        waiter.set_result(None)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(proof, 1)
+
+    def test_shield_result(self):
+        inner = futures.Future(loop=self.loop)
+        outer = tasks.shield(inner)
+        inner.set_result(42)
+        res = self.loop.run_until_complete(outer)
+        self.assertEqual(res, 42)
+
+    def test_shield_exception(self):
+        inner = futures.Future(loop=self.loop)
+        outer = tasks.shield(inner)
+        test_utils.run_briefly(self.loop)
+        exc = RuntimeError('expected')
+        inner.set_exception(exc)
+        test_utils.run_briefly(self.loop)
+        self.assertIs(outer.exception(), exc)
+
+    def test_shield_cancel(self):
+        inner = futures.Future(loop=self.loop)
+        outer = tasks.shield(inner)
+        test_utils.run_briefly(self.loop)
+        inner.cancel()
+        test_utils.run_briefly(self.loop)
+        self.assertTrue(outer.cancelled())
+
+    def test_shield_shortcut(self):
+        fut = futures.Future(loop=self.loop)
+        fut.set_result(42)
+        res = self.loop.run_until_complete(tasks.shield(fut))
+        self.assertEqual(res, 42)
+
+    def test_shield_effect(self):
+        # Cancelling outer() does not affect inner().
+        proof = 0
+        waiter = futures.Future(loop=self.loop)
+
+        @tasks.coroutine
+        def inner():
+            nonlocal proof
+            yield from waiter
+            proof += 1
+
+        @tasks.coroutine
+        def outer():
+            nonlocal proof
+            yield from tasks.shield(inner(), loop=self.loop)
+            proof += 100
+
+        f = tasks.async(outer(), loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        f.cancel()
+        with self.assertRaises(futures.CancelledError):
+            self.loop.run_until_complete(f)
+        waiter.set_result(None)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(proof, 1)
+
+    def test_shield_gather(self):
+        child1 = futures.Future(loop=self.loop)
+        child2 = futures.Future(loop=self.loop)
+        parent = tasks.gather(child1, child2, loop=self.loop)
+        outer = tasks.shield(parent, loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        outer.cancel()
+        test_utils.run_briefly(self.loop)
+        self.assertTrue(outer.cancelled())
+        child1.set_result(1)
+        child2.set_result(2)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(parent.result(), [1, 2])
+
+    def test_gather_shield(self):
+        child1 = futures.Future(loop=self.loop)
+        child2 = futures.Future(loop=self.loop)
+        inner1 = tasks.shield(child1, loop=self.loop)
+        inner2 = tasks.shield(child2, loop=self.loop)
+        parent = tasks.gather(inner1, inner2, loop=self.loop)
+        test_utils.run_briefly(self.loop)
+        parent.cancel()
+        # This should cancel inner1 and inner2 but bot child1 and child2.
+        test_utils.run_briefly(self.loop)
+        self.assertIsInstance(parent.exception(), futures.CancelledError)
+        self.assertTrue(inner1.cancelled())
+        self.assertTrue(inner2.cancelled())
+        child1.set_result(1)
+        child2.set_result(2)
+        test_utils.run_briefly(self.loop)
+
+
+class GatherTestsBase:
+
+    def setUp(self):
+        self.one_loop = test_utils.TestLoop()
+        self.other_loop = test_utils.TestLoop()
+
+    def tearDown(self):
+        self.one_loop.close()
+        self.other_loop.close()
+
+    def _run_loop(self, loop):
+        while loop._ready:
+            test_utils.run_briefly(loop)
+
+    def _check_success(self, **kwargs):
+        a, b, c = [futures.Future(loop=self.one_loop) for i in range(3)]
+        fut = tasks.gather(*self.wrap_futures(a, b, c), **kwargs)
+        cb = Mock()
+        fut.add_done_callback(cb)
+        b.set_result(1)
+        a.set_result(2)
+        self._run_loop(self.one_loop)
+        self.assertEqual(cb.called, False)
+        self.assertFalse(fut.done())
+        c.set_result(3)
+        self._run_loop(self.one_loop)
+        cb.assert_called_once_with(fut)
+        self.assertEqual(fut.result(), [2, 1, 3])
+
+    def test_success(self):
+        self._check_success()
+        self._check_success(return_exceptions=False)
+
+    def test_result_exception_success(self):
+        self._check_success(return_exceptions=True)
+
+    def test_one_exception(self):
+        a, b, c, d, e = [futures.Future(loop=self.one_loop) for i in range(5)]
+        fut = tasks.gather(*self.wrap_futures(a, b, c, d, e))
+        cb = Mock()
+        fut.add_done_callback(cb)
+        exc = ZeroDivisionError()
+        a.set_result(1)
+        b.set_exception(exc)
+        self._run_loop(self.one_loop)
+        self.assertTrue(fut.done())
+        cb.assert_called_once_with(fut)
+        self.assertIs(fut.exception(), exc)
+        # Does nothing
+        c.set_result(3)
+        d.cancel()
+        e.set_exception(RuntimeError())
+
+    def test_return_exceptions(self):
+        a, b, c, d = [futures.Future(loop=self.one_loop) for i in range(4)]
+        fut = tasks.gather(*self.wrap_futures(a, b, c, d),
+                           return_exceptions=True)
+        cb = Mock()
+        fut.add_done_callback(cb)
+        exc = ZeroDivisionError()
+        exc2 = RuntimeError()
+        b.set_result(1)
+        c.set_exception(exc)
+        a.set_result(3)
+        self._run_loop(self.one_loop)
+        self.assertFalse(fut.done())
+        d.set_exception(exc2)
+        self._run_loop(self.one_loop)
+        self.assertTrue(fut.done())
+        cb.assert_called_once_with(fut)
+        self.assertEqual(fut.result(), [3, 1, exc, exc2])
+
+
+class FutureGatherTests(GatherTestsBase, unittest.TestCase):
+
+    def wrap_futures(self, *futures):
+        return futures
+
+    def _check_empty_sequence(self, seq_or_iter):
+        events.set_event_loop(self.one_loop)
+        self.addCleanup(events.set_event_loop, None)
+        fut = tasks.gather(*seq_or_iter)
+        self.assertIsInstance(fut, futures.Future)
+        self.assertIs(fut._loop, self.one_loop)
+        self._run_loop(self.one_loop)
+        self.assertTrue(fut.done())
+        self.assertEqual(fut.result(), [])
+        fut = tasks.gather(*seq_or_iter, loop=self.other_loop)
+        self.assertIs(fut._loop, self.other_loop)
+
+    def test_constructor_empty_sequence(self):
+        self._check_empty_sequence([])
+        self._check_empty_sequence(())
+        self._check_empty_sequence(set())
+        self._check_empty_sequence(iter(""))
+
+    def test_constructor_heterogenous_futures(self):
+        fut1 = futures.Future(loop=self.one_loop)
+        fut2 = futures.Future(loop=self.other_loop)
+        with self.assertRaises(ValueError):
+            tasks.gather(fut1, fut2)
+        with self.assertRaises(ValueError):
+            tasks.gather(fut1, loop=self.other_loop)
+
+    def test_constructor_homogenous_futures(self):
+        children = [futures.Future(loop=self.other_loop) for i in range(3)]
+        fut = tasks.gather(*children)
+        self.assertIs(fut._loop, self.other_loop)
+        self._run_loop(self.other_loop)
+        self.assertFalse(fut.done())
+        fut = tasks.gather(*children, loop=self.other_loop)
+        self.assertIs(fut._loop, self.other_loop)
+        self._run_loop(self.other_loop)
+        self.assertFalse(fut.done())
+
+    def test_one_cancellation(self):
+        a, b, c, d, e = [futures.Future(loop=self.one_loop) for i in range(5)]
+        fut = tasks.gather(a, b, c, d, e)
+        cb = Mock()
+        fut.add_done_callback(cb)
+        a.set_result(1)
+        b.cancel()
+        self._run_loop(self.one_loop)
+        self.assertTrue(fut.done())
+        cb.assert_called_once_with(fut)
+        self.assertFalse(fut.cancelled())
+        self.assertIsInstance(fut.exception(), futures.CancelledError)
+        # Does nothing
+        c.set_result(3)
+        d.cancel()
+        e.set_exception(RuntimeError())
+
+    def test_result_exception_one_cancellation(self):
+        a, b, c, d, e, f = [futures.Future(loop=self.one_loop)
+                            for i in range(6)]
+        fut = tasks.gather(a, b, c, d, e, f, return_exceptions=True)
+        cb = Mock()
+        fut.add_done_callback(cb)
+        a.set_result(1)
+        zde = ZeroDivisionError()
+        b.set_exception(zde)
+        c.cancel()
+        self._run_loop(self.one_loop)
+        self.assertFalse(fut.done())
+        d.set_result(3)
+        e.cancel()
+        rte = RuntimeError()
+        f.set_exception(rte)
+        res = self.one_loop.run_until_complete(fut)
+        self.assertIsInstance(res[2], futures.CancelledError)
+        self.assertIsInstance(res[4], futures.CancelledError)
+        res[2] = res[4] = None
+        self.assertEqual(res, [1, zde, None, 3, None, rte])
+        cb.assert_called_once_with(fut)
+
+
+class CoroutineGatherTests(GatherTestsBase, unittest.TestCase):
+
+    def setUp(self):
+        super().setUp()
+        events.set_event_loop(self.one_loop)
+
+    def tearDown(self):
+        events.set_event_loop(None)
+        super().tearDown()
+
+    def wrap_futures(self, *futures):
+        coros = []
+        for fut in futures:
+            @tasks.coroutine
+            def coro(fut=fut):
+                return (yield from fut)
+            coros.append(coro())
+        return coros
+
+    def test_constructor_loop_selection(self):
+        @tasks.coroutine
+        def coro():
+            return 'abc'
+        gen1 = coro()
+        gen2 = coro()
+        fut = tasks.gather(gen1, gen2)
+        self.assertIs(fut._loop, self.one_loop)
+        gen1.close()
+        gen2.close()
+        gen3 = coro()
+        gen4 = coro()
+        fut = tasks.gather(gen3, gen4, loop=self.other_loop)
+        self.assertIs(fut._loop, self.other_loop)
+        gen3.close()
+        gen4.close()
+
+    def test_cancellation_broadcast(self):
+        # Cancelling outer() cancels all children.
+        proof = 0
+        waiter = futures.Future(loop=self.one_loop)
+
+        @tasks.coroutine
+        def inner():
+            nonlocal proof
+            yield from waiter
+            proof += 1
+
+        child1 = tasks.async(inner(), loop=self.one_loop)
+        child2 = tasks.async(inner(), loop=self.one_loop)
+        gatherer = None
+
+        @tasks.coroutine
+        def outer():
+            nonlocal proof, gatherer
+            gatherer = tasks.gather(child1, child2, loop=self.one_loop)
+            yield from gatherer
+            proof += 100
+
+        f = tasks.async(outer(), loop=self.one_loop)
+        test_utils.run_briefly(self.one_loop)
+        self.assertTrue(f.cancel())
+        with self.assertRaises(futures.CancelledError):
+            self.one_loop.run_until_complete(f)
+        self.assertFalse(gatherer.cancel())
+        self.assertTrue(waiter.cancelled())
+        self.assertTrue(child1.cancelled())
+        self.assertTrue(child2.cancelled())
+        test_utils.run_briefly(self.one_loop)
+        self.assertEqual(proof, 0)
+
+    def test_exception_marking(self):
+        # Test for the first line marked "Mark exception retrieved."
+
+        @tasks.coroutine
+        def inner(f):
+            yield from f
+            raise RuntimeError('should not be ignored')
+
+        a = futures.Future(loop=self.one_loop)
+        b = futures.Future(loop=self.one_loop)
+
+        @tasks.coroutine
+        def outer():
+            yield from tasks.gather(inner(a), inner(b), loop=self.one_loop)
+
+        f = tasks.async(outer(), loop=self.one_loop)
+        test_utils.run_briefly(self.one_loop)
+        a.set_result(None)
+        test_utils.run_briefly(self.one_loop)
+        b.set_result(None)
+        test_utils.run_briefly(self.one_loop)
+        self.assertIsInstance(f.exception(), RuntimeError)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_transports.py b/Lib/test/test_asyncio/test_transports.py
new file mode 100644
index 0000000..f96445c
--- /dev/null
+++ b/Lib/test/test_asyncio/test_transports.py
@@ -0,0 +1,59 @@
+"""Tests for transports.py."""
+
+import unittest
+import unittest.mock
+
+from asyncio import transports
+
+
+class TransportTests(unittest.TestCase):
+
+    def test_ctor_extra_is_none(self):
+        transport = transports.Transport()
+        self.assertEqual(transport._extra, {})
+
+    def test_get_extra_info(self):
+        transport = transports.Transport({'extra': 'info'})
+        self.assertEqual('info', transport.get_extra_info('extra'))
+        self.assertIsNone(transport.get_extra_info('unknown'))
+
+        default = object()
+        self.assertIs(default, transport.get_extra_info('unknown', default))
+
+    def test_writelines(self):
+        transport = transports.Transport()
+        transport.write = unittest.mock.Mock()
+
+        transport.writelines(['line1', 'line2', 'line3'])
+        self.assertEqual(3, transport.write.call_count)
+
+    def test_not_implemented(self):
+        transport = transports.Transport()
+
+        self.assertRaises(NotImplementedError, transport.write, 'data')
+        self.assertRaises(NotImplementedError, transport.write_eof)
+        self.assertRaises(NotImplementedError, transport.can_write_eof)
+        self.assertRaises(NotImplementedError, transport.pause_reading)
+        self.assertRaises(NotImplementedError, transport.resume_reading)
+        self.assertRaises(NotImplementedError, transport.close)
+        self.assertRaises(NotImplementedError, transport.abort)
+
+    def test_dgram_not_implemented(self):
+        transport = transports.DatagramTransport()
+
+        self.assertRaises(NotImplementedError, transport.sendto, 'data')
+        self.assertRaises(NotImplementedError, transport.abort)
+
+    def test_subprocess_transport_not_implemented(self):
+        transport = transports.SubprocessTransport()
+
+        self.assertRaises(NotImplementedError, transport.get_pid)
+        self.assertRaises(NotImplementedError, transport.get_returncode)
+        self.assertRaises(NotImplementedError, transport.get_pipe_transport, 1)
+        self.assertRaises(NotImplementedError, transport.send_signal, 1)
+        self.assertRaises(NotImplementedError, transport.terminate)
+        self.assertRaises(NotImplementedError, transport.kill)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py
new file mode 100644
index 0000000..42eba8d
--- /dev/null
+++ b/Lib/test/test_asyncio/test_unix_events.py
@@ -0,0 +1,1548 @@
+"""Tests for unix_events.py."""
+
+import gc
+import errno
+import io
+import os
+import pprint
+import signal
+import stat
+import sys
+import threading
+import unittest
+import unittest.mock
+
+if sys.platform == 'win32':
+    raise unittest.SkipTest('UNIX only')
+
+
+from asyncio import events
+from asyncio import futures
+from asyncio import protocols
+from asyncio import test_utils
+from asyncio import unix_events
+
+
+@unittest.skipUnless(signal, 'Signals are not supported')
+class SelectorEventLoopTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = unix_events.SelectorEventLoop()
+        events.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+
+    def test_check_signal(self):
+        self.assertRaises(
+            TypeError, self.loop._check_signal, '1')
+        self.assertRaises(
+            ValueError, self.loop._check_signal, signal.NSIG + 1)
+
+    def test_handle_signal_no_handler(self):
+        self.loop._handle_signal(signal.NSIG + 1, ())
+
+    def test_handle_signal_cancelled_handler(self):
+        h = events.Handle(unittest.mock.Mock(), ())
+        h.cancel()
+        self.loop._signal_handlers[signal.NSIG + 1] = h
+        self.loop.remove_signal_handler = unittest.mock.Mock()
+        self.loop._handle_signal(signal.NSIG + 1, ())
+        self.loop.remove_signal_handler.assert_called_with(signal.NSIG + 1)
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    def test_add_signal_handler_setup_error(self, m_signal):
+        m_signal.NSIG = signal.NSIG
+        m_signal.set_wakeup_fd.side_effect = ValueError
+
+        self.assertRaises(
+            RuntimeError,
+            self.loop.add_signal_handler,
+            signal.SIGINT, lambda: True)
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    def test_add_signal_handler(self, m_signal):
+        m_signal.NSIG = signal.NSIG
+
+        cb = lambda: True
+        self.loop.add_signal_handler(signal.SIGHUP, cb)
+        h = self.loop._signal_handlers.get(signal.SIGHUP)
+        self.assertTrue(isinstance(h, events.Handle))
+        self.assertEqual(h._callback, cb)
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    def test_add_signal_handler_install_error(self, m_signal):
+        m_signal.NSIG = signal.NSIG
+
+        def set_wakeup_fd(fd):
+            if fd == -1:
+                raise ValueError()
+        m_signal.set_wakeup_fd = set_wakeup_fd
+
+        class Err(OSError):
+            errno = errno.EFAULT
+        m_signal.signal.side_effect = Err
+
+        self.assertRaises(
+            Err,
+            self.loop.add_signal_handler,
+            signal.SIGINT, lambda: True)
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    @unittest.mock.patch('asyncio.unix_events.logger')
+    def test_add_signal_handler_install_error2(self, m_logging, m_signal):
+        m_signal.NSIG = signal.NSIG
+
+        class Err(OSError):
+            errno = errno.EINVAL
+        m_signal.signal.side_effect = Err
+
+        self.loop._signal_handlers[signal.SIGHUP] = lambda: True
+        self.assertRaises(
+            RuntimeError,
+            self.loop.add_signal_handler,
+            signal.SIGINT, lambda: True)
+        self.assertFalse(m_logging.info.called)
+        self.assertEqual(1, m_signal.set_wakeup_fd.call_count)
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    @unittest.mock.patch('asyncio.unix_events.logger')
+    def test_add_signal_handler_install_error3(self, m_logging, m_signal):
+        class Err(OSError):
+            errno = errno.EINVAL
+        m_signal.signal.side_effect = Err
+        m_signal.NSIG = signal.NSIG
+
+        self.assertRaises(
+            RuntimeError,
+            self.loop.add_signal_handler,
+            signal.SIGINT, lambda: True)
+        self.assertFalse(m_logging.info.called)
+        self.assertEqual(2, m_signal.set_wakeup_fd.call_count)
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    def test_remove_signal_handler(self, m_signal):
+        m_signal.NSIG = signal.NSIG
+
+        self.loop.add_signal_handler(signal.SIGHUP, lambda: True)
+
+        self.assertTrue(
+            self.loop.remove_signal_handler(signal.SIGHUP))
+        self.assertTrue(m_signal.set_wakeup_fd.called)
+        self.assertTrue(m_signal.signal.called)
+        self.assertEqual(
+            (signal.SIGHUP, m_signal.SIG_DFL), m_signal.signal.call_args[0])
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    def test_remove_signal_handler_2(self, m_signal):
+        m_signal.NSIG = signal.NSIG
+        m_signal.SIGINT = signal.SIGINT
+
+        self.loop.add_signal_handler(signal.SIGINT, lambda: True)
+        self.loop._signal_handlers[signal.SIGHUP] = object()
+        m_signal.set_wakeup_fd.reset_mock()
+
+        self.assertTrue(
+            self.loop.remove_signal_handler(signal.SIGINT))
+        self.assertFalse(m_signal.set_wakeup_fd.called)
+        self.assertTrue(m_signal.signal.called)
+        self.assertEqual(
+            (signal.SIGINT, m_signal.default_int_handler),
+            m_signal.signal.call_args[0])
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    @unittest.mock.patch('asyncio.unix_events.logger')
+    def test_remove_signal_handler_cleanup_error(self, m_logging, m_signal):
+        m_signal.NSIG = signal.NSIG
+        self.loop.add_signal_handler(signal.SIGHUP, lambda: True)
+
+        m_signal.set_wakeup_fd.side_effect = ValueError
+
+        self.loop.remove_signal_handler(signal.SIGHUP)
+        self.assertTrue(m_logging.info)
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    def test_remove_signal_handler_error(self, m_signal):
+        m_signal.NSIG = signal.NSIG
+        self.loop.add_signal_handler(signal.SIGHUP, lambda: True)
+
+        m_signal.signal.side_effect = OSError
+
+        self.assertRaises(
+            OSError, self.loop.remove_signal_handler, signal.SIGHUP)
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    def test_remove_signal_handler_error2(self, m_signal):
+        m_signal.NSIG = signal.NSIG
+        self.loop.add_signal_handler(signal.SIGHUP, lambda: True)
+
+        class Err(OSError):
+            errno = errno.EINVAL
+        m_signal.signal.side_effect = Err
+
+        self.assertRaises(
+            RuntimeError, self.loop.remove_signal_handler, signal.SIGHUP)
+
+    @unittest.mock.patch('asyncio.unix_events.signal')
+    def test_close(self, m_signal):
+        m_signal.NSIG = signal.NSIG
+
+        self.loop.add_signal_handler(signal.SIGHUP, lambda: True)
+        self.loop.add_signal_handler(signal.SIGCHLD, lambda: True)
+
+        self.assertEqual(len(self.loop._signal_handlers), 2)
+
+        m_signal.set_wakeup_fd.reset_mock()
+
+        self.loop.close()
+
+        self.assertEqual(len(self.loop._signal_handlers), 0)
+        m_signal.set_wakeup_fd.assert_called_once_with(-1)
+
+
+class UnixReadPipeTransportTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        self.protocol = test_utils.make_test_protocol(protocols.Protocol)
+        self.pipe = unittest.mock.Mock(spec_set=io.RawIOBase)
+        self.pipe.fileno.return_value = 5
+
+        fcntl_patcher = unittest.mock.patch('fcntl.fcntl')
+        fcntl_patcher.start()
+        self.addCleanup(fcntl_patcher.stop)
+
+        fstat_patcher = unittest.mock.patch('os.fstat')
+        m_fstat = fstat_patcher.start()
+        st = unittest.mock.Mock()
+        st.st_mode = stat.S_IFIFO
+        m_fstat.return_value = st
+        self.addCleanup(fstat_patcher.stop)
+
+    def test_ctor(self):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+        self.loop.assert_reader(5, tr._read_ready)
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_made.assert_called_with(tr)
+
+    def test_ctor_with_waiter(self):
+        fut = futures.Future(loop=self.loop)
+        unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol, fut)
+        test_utils.run_briefly(self.loop)
+        self.assertIsNone(fut.result())
+
+    @unittest.mock.patch('os.read')
+    def test__read_ready(self, m_read):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+        m_read.return_value = b'data'
+        tr._read_ready()
+
+        m_read.assert_called_with(5, tr.max_size)
+        self.protocol.data_received.assert_called_with(b'data')
+
+    @unittest.mock.patch('os.read')
+    def test__read_ready_eof(self, m_read):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+        m_read.return_value = b''
+        tr._read_ready()
+
+        m_read.assert_called_with(5, tr.max_size)
+        self.assertFalse(self.loop.readers)
+        test_utils.run_briefly(self.loop)
+        self.protocol.eof_received.assert_called_with()
+        self.protocol.connection_lost.assert_called_with(None)
+
+    @unittest.mock.patch('os.read')
+    def test__read_ready_blocked(self, m_read):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+        m_read.side_effect = BlockingIOError
+        tr._read_ready()
+
+        m_read.assert_called_with(5, tr.max_size)
+        test_utils.run_briefly(self.loop)
+        self.assertFalse(self.protocol.data_received.called)
+
+    @unittest.mock.patch('asyncio.log.logger.exception')
+    @unittest.mock.patch('os.read')
+    def test__read_ready_error(self, m_read, m_logexc):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+        err = OSError()
+        m_read.side_effect = err
+        tr._close = unittest.mock.Mock()
+        tr._read_ready()
+
+        m_read.assert_called_with(5, tr.max_size)
+        tr._close.assert_called_with(err)
+        m_logexc.assert_called_with('Fatal error for %s', tr)
+
+    @unittest.mock.patch('os.read')
+    def test_pause_reading(self, m_read):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        m = unittest.mock.Mock()
+        self.loop.add_reader(5, m)
+        tr.pause_reading()
+        self.assertFalse(self.loop.readers)
+
+    @unittest.mock.patch('os.read')
+    def test_resume_reading(self, m_read):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        tr.resume_reading()
+        self.loop.assert_reader(5, tr._read_ready)
+
+    @unittest.mock.patch('os.read')
+    def test_close(self, m_read):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        tr._close = unittest.mock.Mock()
+        tr.close()
+        tr._close.assert_called_with(None)
+
+    @unittest.mock.patch('os.read')
+    def test_close_already_closing(self, m_read):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        tr._closing = True
+        tr._close = unittest.mock.Mock()
+        tr.close()
+        self.assertFalse(tr._close.called)
+
+    @unittest.mock.patch('os.read')
+    def test__close(self, m_read):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        err = object()
+        tr._close(err)
+        self.assertTrue(tr._closing)
+        self.assertFalse(self.loop.readers)
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_lost.assert_called_with(err)
+
+    def test__call_connection_lost(self):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        err = None
+        tr._call_connection_lost(err)
+        self.protocol.connection_lost.assert_called_with(err)
+        self.pipe.close.assert_called_with()
+
+        self.assertIsNone(tr._protocol)
+        self.assertEqual(2, sys.getrefcount(self.protocol),
+                         pprint.pformat(gc.get_referrers(self.protocol)))
+        self.assertIsNone(tr._loop)
+        self.assertEqual(2, sys.getrefcount(self.loop),
+                         pprint.pformat(gc.get_referrers(self.loop)))
+
+    def test__call_connection_lost_with_err(self):
+        tr = unix_events._UnixReadPipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        err = OSError()
+        tr._call_connection_lost(err)
+        self.protocol.connection_lost.assert_called_with(err)
+        self.pipe.close.assert_called_with()
+
+        self.assertIsNone(tr._protocol)
+        self.assertEqual(2, sys.getrefcount(self.protocol),
+                         pprint.pformat(gc.get_referrers(self.protocol)))
+        self.assertIsNone(tr._loop)
+        self.assertEqual(2, sys.getrefcount(self.loop),
+                         pprint.pformat(gc.get_referrers(self.loop)))
+
+
+class UnixWritePipeTransportTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        self.protocol = test_utils.make_test_protocol(protocols.BaseProtocol)
+        self.pipe = unittest.mock.Mock(spec_set=io.RawIOBase)
+        self.pipe.fileno.return_value = 5
+
+        fcntl_patcher = unittest.mock.patch('fcntl.fcntl')
+        fcntl_patcher.start()
+        self.addCleanup(fcntl_patcher.stop)
+
+        fstat_patcher = unittest.mock.patch('os.fstat')
+        m_fstat = fstat_patcher.start()
+        st = unittest.mock.Mock()
+        st.st_mode = stat.S_IFIFO
+        m_fstat.return_value = st
+        self.addCleanup(fstat_patcher.stop)
+
+    def test_ctor(self):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+        self.loop.assert_reader(5, tr._read_ready)
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_made.assert_called_with(tr)
+
+    def test_ctor_with_waiter(self):
+        fut = futures.Future(loop=self.loop)
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol, fut)
+        self.loop.assert_reader(5, tr._read_ready)
+        test_utils.run_briefly(self.loop)
+        self.assertEqual(None, fut.result())
+
+    def test_can_write_eof(self):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+        self.assertTrue(tr.can_write_eof())
+
+    @unittest.mock.patch('os.write')
+    def test_write(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        m_write.return_value = 4
+        tr.write(b'data')
+        m_write.assert_called_with(5, b'data')
+        self.assertFalse(self.loop.writers)
+        self.assertEqual([], tr._buffer)
+
+    @unittest.mock.patch('os.write')
+    def test_write_no_data(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        tr.write(b'')
+        self.assertFalse(m_write.called)
+        self.assertFalse(self.loop.writers)
+        self.assertEqual([], tr._buffer)
+
+    @unittest.mock.patch('os.write')
+    def test_write_partial(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        m_write.return_value = 2
+        tr.write(b'data')
+        m_write.assert_called_with(5, b'data')
+        self.loop.assert_writer(5, tr._write_ready)
+        self.assertEqual([b'ta'], tr._buffer)
+
+    @unittest.mock.patch('os.write')
+    def test_write_buffer(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        self.loop.add_writer(5, tr._write_ready)
+        tr._buffer = [b'previous']
+        tr.write(b'data')
+        self.assertFalse(m_write.called)
+        self.loop.assert_writer(5, tr._write_ready)
+        self.assertEqual([b'previous', b'data'], tr._buffer)
+
+    @unittest.mock.patch('os.write')
+    def test_write_again(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        m_write.side_effect = BlockingIOError()
+        tr.write(b'data')
+        m_write.assert_called_with(5, b'data')
+        self.loop.assert_writer(5, tr._write_ready)
+        self.assertEqual([b'data'], tr._buffer)
+
+    @unittest.mock.patch('asyncio.unix_events.logger')
+    @unittest.mock.patch('os.write')
+    def test_write_err(self, m_write, m_log):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        err = OSError()
+        m_write.side_effect = err
+        tr._fatal_error = unittest.mock.Mock()
+        tr.write(b'data')
+        m_write.assert_called_with(5, b'data')
+        self.assertFalse(self.loop.writers)
+        self.assertEqual([], tr._buffer)
+        tr._fatal_error.assert_called_with(err)
+        self.assertEqual(1, tr._conn_lost)
+
+        tr.write(b'data')
+        self.assertEqual(2, tr._conn_lost)
+        tr.write(b'data')
+        tr.write(b'data')
+        tr.write(b'data')
+        tr.write(b'data')
+        # This is a bit overspecified. :-(
+        m_log.warning.assert_called_with(
+            'pipe closed by peer or os.write(pipe, data) raised exception.')
+
+    @unittest.mock.patch('os.write')
+    def test_write_close(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+        tr._read_ready()  # pipe was closed by peer
+
+        tr.write(b'data')
+        self.assertEqual(tr._conn_lost, 1)
+        tr.write(b'data')
+        self.assertEqual(tr._conn_lost, 2)
+
+    def test__read_ready(self):
+        tr = unix_events._UnixWritePipeTransport(self.loop, self.pipe,
+                                                 self.protocol)
+        tr._read_ready()
+        self.assertFalse(self.loop.readers)
+        self.assertFalse(self.loop.writers)
+        self.assertTrue(tr._closing)
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_lost.assert_called_with(None)
+
+    @unittest.mock.patch('os.write')
+    def test__write_ready(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+        self.loop.add_writer(5, tr._write_ready)
+        tr._buffer = [b'da', b'ta']
+        m_write.return_value = 4
+        tr._write_ready()
+        m_write.assert_called_with(5, b'data')
+        self.assertFalse(self.loop.writers)
+        self.assertEqual([], tr._buffer)
+
+    @unittest.mock.patch('os.write')
+    def test__write_ready_partial(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        self.loop.add_writer(5, tr._write_ready)
+        tr._buffer = [b'da', b'ta']
+        m_write.return_value = 3
+        tr._write_ready()
+        m_write.assert_called_with(5, b'data')
+        self.loop.assert_writer(5, tr._write_ready)
+        self.assertEqual([b'a'], tr._buffer)
+
+    @unittest.mock.patch('os.write')
+    def test__write_ready_again(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        self.loop.add_writer(5, tr._write_ready)
+        tr._buffer = [b'da', b'ta']
+        m_write.side_effect = BlockingIOError()
+        tr._write_ready()
+        m_write.assert_called_with(5, b'data')
+        self.loop.assert_writer(5, tr._write_ready)
+        self.assertEqual([b'data'], tr._buffer)
+
+    @unittest.mock.patch('os.write')
+    def test__write_ready_empty(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        self.loop.add_writer(5, tr._write_ready)
+        tr._buffer = [b'da', b'ta']
+        m_write.return_value = 0
+        tr._write_ready()
+        m_write.assert_called_with(5, b'data')
+        self.loop.assert_writer(5, tr._write_ready)
+        self.assertEqual([b'data'], tr._buffer)
+
+    @unittest.mock.patch('asyncio.log.logger.exception')
+    @unittest.mock.patch('os.write')
+    def test__write_ready_err(self, m_write, m_logexc):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        self.loop.add_writer(5, tr._write_ready)
+        tr._buffer = [b'da', b'ta']
+        m_write.side_effect = err = OSError()
+        tr._write_ready()
+        m_write.assert_called_with(5, b'data')
+        self.assertFalse(self.loop.writers)
+        self.assertFalse(self.loop.readers)
+        self.assertEqual([], tr._buffer)
+        self.assertTrue(tr._closing)
+        m_logexc.assert_called_with('Fatal error for %s', tr)
+        self.assertEqual(1, tr._conn_lost)
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_lost.assert_called_with(err)
+
+    @unittest.mock.patch('os.write')
+    def test__write_ready_closing(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        self.loop.add_writer(5, tr._write_ready)
+        tr._closing = True
+        tr._buffer = [b'da', b'ta']
+        m_write.return_value = 4
+        tr._write_ready()
+        m_write.assert_called_with(5, b'data')
+        self.assertFalse(self.loop.writers)
+        self.assertFalse(self.loop.readers)
+        self.assertEqual([], tr._buffer)
+        self.protocol.connection_lost.assert_called_with(None)
+        self.pipe.close.assert_called_with()
+
+    @unittest.mock.patch('os.write')
+    def test_abort(self, m_write):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        self.loop.add_writer(5, tr._write_ready)
+        self.loop.add_reader(5, tr._read_ready)
+        tr._buffer = [b'da', b'ta']
+        tr.abort()
+        self.assertFalse(m_write.called)
+        self.assertFalse(self.loop.readers)
+        self.assertFalse(self.loop.writers)
+        self.assertEqual([], tr._buffer)
+        self.assertTrue(tr._closing)
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_lost.assert_called_with(None)
+
+    def test__call_connection_lost(self):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        err = None
+        tr._call_connection_lost(err)
+        self.protocol.connection_lost.assert_called_with(err)
+        self.pipe.close.assert_called_with()
+
+        self.assertIsNone(tr._protocol)
+        self.assertEqual(2, sys.getrefcount(self.protocol),
+                         pprint.pformat(gc.get_referrers(self.protocol)))
+        self.assertIsNone(tr._loop)
+        self.assertEqual(2, sys.getrefcount(self.loop),
+                         pprint.pformat(gc.get_referrers(self.loop)))
+
+    def test__call_connection_lost_with_err(self):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        err = OSError()
+        tr._call_connection_lost(err)
+        self.protocol.connection_lost.assert_called_with(err)
+        self.pipe.close.assert_called_with()
+
+        self.assertIsNone(tr._protocol)
+        self.assertEqual(2, sys.getrefcount(self.protocol),
+                         pprint.pformat(gc.get_referrers(self.protocol)))
+        self.assertIsNone(tr._loop)
+        self.assertEqual(2, sys.getrefcount(self.loop),
+                         pprint.pformat(gc.get_referrers(self.loop)))
+
+    def test_close(self):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        tr.write_eof = unittest.mock.Mock()
+        tr.close()
+        tr.write_eof.assert_called_with()
+
+    def test_close_closing(self):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        tr.write_eof = unittest.mock.Mock()
+        tr._closing = True
+        tr.close()
+        self.assertFalse(tr.write_eof.called)
+
+    def test_write_eof(self):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+
+        tr.write_eof()
+        self.assertTrue(tr._closing)
+        self.assertFalse(self.loop.readers)
+        test_utils.run_briefly(self.loop)
+        self.protocol.connection_lost.assert_called_with(None)
+
+    def test_write_eof_pending(self):
+        tr = unix_events._UnixWritePipeTransport(
+            self.loop, self.pipe, self.protocol)
+        tr._buffer = [b'data']
+        tr.write_eof()
+        self.assertTrue(tr._closing)
+        self.assertFalse(self.protocol.connection_lost.called)
+
+
+class AbstractChildWatcherTests(unittest.TestCase):
+
+    def test_not_implemented(self):
+        f = unittest.mock.Mock()
+        watcher = unix_events.AbstractChildWatcher()
+        self.assertRaises(
+            NotImplementedError, watcher.add_child_handler, f, f)
+        self.assertRaises(
+            NotImplementedError, watcher.remove_child_handler, f)
+        self.assertRaises(
+            NotImplementedError, watcher.set_loop, f)
+        self.assertRaises(
+            NotImplementedError, watcher.close)
+        self.assertRaises(
+            NotImplementedError, watcher.__enter__)
+        self.assertRaises(
+            NotImplementedError, watcher.__exit__, f, f, f)
+
+
+class BaseChildWatcherTests(unittest.TestCase):
+
+    def test_not_implemented(self):
+        f = unittest.mock.Mock()
+        watcher = unix_events.BaseChildWatcher(None)
+        self.assertRaises(
+            NotImplementedError, watcher._do_waitpid, f)
+
+
+class ChildWatcherTestsMixin:
+    instance = None
+
+    ignore_warnings = unittest.mock.patch.object(unix_events.logger, "warning")
+
+    def setUp(self):
+        self.loop = test_utils.TestLoop()
+        self.running = False
+        self.zombies = {}
+
+        assert ChildWatcherTestsMixin.instance is None
+        ChildWatcherTestsMixin.instance = self
+
+        with unittest.mock.patch.object(
+                self.loop, "add_signal_handler") as self.m_add_signal_handler:
+            self.watcher = self.create_watcher(self.loop)
+
+    def tearDown(self):
+        ChildWatcherTestsMixin.instance = None
+
+    def waitpid(pid, flags):
+        self = ChildWatcherTestsMixin.instance
+        if isinstance(self.watcher, unix_events.SafeChildWatcher) or pid != -1:
+            self.assertGreater(pid, 0)
+        try:
+            if pid < 0:
+                return self.zombies.popitem()
+            else:
+                return pid, self.zombies.pop(pid)
+        except KeyError:
+            pass
+        if self.running:
+            return 0, 0
+        else:
+            raise ChildProcessError()
+
+    def add_zombie(self, pid, returncode):
+        self.zombies[pid] = returncode + 32768
+
+    def WIFEXITED(status):
+        return status >= 32768
+
+    def WIFSIGNALED(status):
+        return 32700 < status < 32768
+
+    def WEXITSTATUS(status):
+        self = ChildWatcherTestsMixin.instance
+        self.assertTrue(type(self).WIFEXITED(status))
+        return status - 32768
+
+    def WTERMSIG(status):
+        self = ChildWatcherTestsMixin.instance
+        self.assertTrue(type(self).WIFSIGNALED(status))
+        return 32768 - status
+
+    def test_create_watcher(self):
+        self.m_add_signal_handler.assert_called_once_with(
+            signal.SIGCHLD, self.watcher._sig_chld)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld(self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED,
+                           m_WEXITSTATUS, m_WTERMSIG):
+        # register a child
+        callback = unittest.mock.Mock()
+
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(42, callback, 9, 10, 14)
+
+        self.assertFalse(callback.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # child is running
+        self.watcher._sig_chld()
+
+        self.assertFalse(callback.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # child terminates (returncode 12)
+        self.running = False
+        self.add_zombie(42, 12)
+        self.watcher._sig_chld()
+
+        self.assertTrue(m_WIFEXITED.called)
+        self.assertTrue(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+        callback.assert_called_once_with(42, 12, 9, 10, 14)
+
+        m_WIFSIGNALED.reset_mock()
+        m_WIFEXITED.reset_mock()
+        m_WEXITSTATUS.reset_mock()
+        callback.reset_mock()
+
+        # ensure that the child is effectively reaped
+        self.add_zombie(42, 13)
+        with self.ignore_warnings:
+            self.watcher._sig_chld()
+
+        self.assertFalse(callback.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        m_WIFSIGNALED.reset_mock()
+        m_WIFEXITED.reset_mock()
+        m_WEXITSTATUS.reset_mock()
+
+        # sigchld called again
+        self.zombies.clear()
+        self.watcher._sig_chld()
+
+        self.assertFalse(callback.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld_two_children(self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED,
+                                        m_WEXITSTATUS, m_WTERMSIG):
+        callback1 = unittest.mock.Mock()
+        callback2 = unittest.mock.Mock()
+
+        # register child 1
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(43, callback1, 7, 8)
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # register child 2
+        with self.watcher:
+            self.watcher.add_child_handler(44, callback2, 147, 18)
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # childen are running
+        self.watcher._sig_chld()
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # child 1 terminates (signal 3)
+        self.add_zombie(43, -3)
+        self.watcher._sig_chld()
+
+        callback1.assert_called_once_with(43, -3, 7, 8)
+        self.assertFalse(callback2.called)
+        self.assertTrue(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertTrue(m_WTERMSIG.called)
+
+        m_WIFSIGNALED.reset_mock()
+        m_WIFEXITED.reset_mock()
+        m_WTERMSIG.reset_mock()
+        callback1.reset_mock()
+
+        # child 2 still running
+        self.watcher._sig_chld()
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # child 2 terminates (code 108)
+        self.add_zombie(44, 108)
+        self.running = False
+        self.watcher._sig_chld()
+
+        callback2.assert_called_once_with(44, 108, 147, 18)
+        self.assertFalse(callback1.called)
+        self.assertTrue(m_WIFEXITED.called)
+        self.assertTrue(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        m_WIFSIGNALED.reset_mock()
+        m_WIFEXITED.reset_mock()
+        m_WEXITSTATUS.reset_mock()
+        callback2.reset_mock()
+
+        # ensure that the children are effectively reaped
+        self.add_zombie(43, 14)
+        self.add_zombie(44, 15)
+        with self.ignore_warnings:
+            self.watcher._sig_chld()
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        m_WIFSIGNALED.reset_mock()
+        m_WIFEXITED.reset_mock()
+        m_WEXITSTATUS.reset_mock()
+
+        # sigchld called again
+        self.zombies.clear()
+        self.watcher._sig_chld()
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld_two_children_terminating_together(
+            self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED, m_WEXITSTATUS,
+            m_WTERMSIG):
+        callback1 = unittest.mock.Mock()
+        callback2 = unittest.mock.Mock()
+
+        # register child 1
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(45, callback1, 17, 8)
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # register child 2
+        with self.watcher:
+            self.watcher.add_child_handler(46, callback2, 1147, 18)
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # childen are running
+        self.watcher._sig_chld()
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # child 1 terminates (code 78)
+        # child 2 terminates (signal 5)
+        self.add_zombie(45, 78)
+        self.add_zombie(46, -5)
+        self.running = False
+        self.watcher._sig_chld()
+
+        callback1.assert_called_once_with(45, 78, 17, 8)
+        callback2.assert_called_once_with(46, -5, 1147, 18)
+        self.assertTrue(m_WIFSIGNALED.called)
+        self.assertTrue(m_WIFEXITED.called)
+        self.assertTrue(m_WEXITSTATUS.called)
+        self.assertTrue(m_WTERMSIG.called)
+
+        m_WIFSIGNALED.reset_mock()
+        m_WIFEXITED.reset_mock()
+        m_WTERMSIG.reset_mock()
+        m_WEXITSTATUS.reset_mock()
+        callback1.reset_mock()
+        callback2.reset_mock()
+
+        # ensure that the children are effectively reaped
+        self.add_zombie(45, 14)
+        self.add_zombie(46, 15)
+        with self.ignore_warnings:
+            self.watcher._sig_chld()
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld_race_condition(
+            self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED, m_WEXITSTATUS,
+            m_WTERMSIG):
+        # register a child
+        callback = unittest.mock.Mock()
+
+        with self.watcher:
+            # child terminates before being registered
+            self.add_zombie(50, 4)
+            self.watcher._sig_chld()
+
+            self.watcher.add_child_handler(50, callback, 1, 12)
+
+        callback.assert_called_once_with(50, 4, 1, 12)
+        callback.reset_mock()
+
+        # ensure that the child is effectively reaped
+        self.add_zombie(50, -1)
+        with self.ignore_warnings:
+            self.watcher._sig_chld()
+
+        self.assertFalse(callback.called)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld_replace_handler(
+            self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED, m_WEXITSTATUS,
+            m_WTERMSIG):
+        callback1 = unittest.mock.Mock()
+        callback2 = unittest.mock.Mock()
+
+        # register a child
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(51, callback1, 19)
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # register the same child again
+        with self.watcher:
+            self.watcher.add_child_handler(51, callback2, 21)
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # child terminates (signal 8)
+        self.running = False
+        self.add_zombie(51, -8)
+        self.watcher._sig_chld()
+
+        callback2.assert_called_once_with(51, -8, 21)
+        self.assertFalse(callback1.called)
+        self.assertTrue(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertTrue(m_WTERMSIG.called)
+
+        m_WIFSIGNALED.reset_mock()
+        m_WIFEXITED.reset_mock()
+        m_WTERMSIG.reset_mock()
+        callback2.reset_mock()
+
+        # ensure that the child is effectively reaped
+        self.add_zombie(51, 13)
+        with self.ignore_warnings:
+            self.watcher._sig_chld()
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld_remove_handler(self, m_waitpid, m_WIFEXITED,
+                                    m_WIFSIGNALED, m_WEXITSTATUS, m_WTERMSIG):
+        callback = unittest.mock.Mock()
+
+        # register a child
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(52, callback, 1984)
+
+        self.assertFalse(callback.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # unregister the child
+        self.watcher.remove_child_handler(52)
+
+        self.assertFalse(callback.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # child terminates (code 99)
+        self.running = False
+        self.add_zombie(52, 99)
+        with self.ignore_warnings:
+            self.watcher._sig_chld()
+
+        self.assertFalse(callback.called)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld_unknown_status(self, m_waitpid, m_WIFEXITED,
+                                    m_WIFSIGNALED, m_WEXITSTATUS, m_WTERMSIG):
+        callback = unittest.mock.Mock()
+
+        # register a child
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(53, callback, -19)
+
+        self.assertFalse(callback.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # terminate with unknown status
+        self.zombies[53] = 1178
+        self.running = False
+        self.watcher._sig_chld()
+
+        callback.assert_called_once_with(53, 1178, -19)
+        self.assertTrue(m_WIFEXITED.called)
+        self.assertTrue(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        callback.reset_mock()
+        m_WIFEXITED.reset_mock()
+        m_WIFSIGNALED.reset_mock()
+
+        # ensure that the child is effectively reaped
+        self.add_zombie(53, 101)
+        with self.ignore_warnings:
+            self.watcher._sig_chld()
+
+        self.assertFalse(callback.called)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_remove_child_handler(self, m_waitpid, m_WIFEXITED,
+                                  m_WIFSIGNALED, m_WEXITSTATUS, m_WTERMSIG):
+        callback1 = unittest.mock.Mock()
+        callback2 = unittest.mock.Mock()
+        callback3 = unittest.mock.Mock()
+
+        # register children
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(54, callback1, 1)
+            self.watcher.add_child_handler(55, callback2, 2)
+            self.watcher.add_child_handler(56, callback3, 3)
+
+        # remove child handler 1
+        self.assertTrue(self.watcher.remove_child_handler(54))
+
+        # remove child handler 2 multiple times
+        self.assertTrue(self.watcher.remove_child_handler(55))
+        self.assertFalse(self.watcher.remove_child_handler(55))
+        self.assertFalse(self.watcher.remove_child_handler(55))
+
+        # all children terminate
+        self.add_zombie(54, 0)
+        self.add_zombie(55, 1)
+        self.add_zombie(56, 2)
+        self.running = False
+        with self.ignore_warnings:
+            self.watcher._sig_chld()
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        callback3.assert_called_once_with(56, 2, 3)
+
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld_unhandled_exception(self, m_waitpid):
+        callback = unittest.mock.Mock()
+
+        # register a child
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(57, callback)
+
+        # raise an exception
+        m_waitpid.side_effect = ValueError
+
+        with unittest.mock.patch.object(unix_events.logger,
+                                        "exception") as m_exception:
+
+            self.assertEqual(self.watcher._sig_chld(), None)
+            self.assertTrue(m_exception.called)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld_child_reaped_elsewhere(
+            self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED, m_WEXITSTATUS,
+            m_WTERMSIG):
+
+        # register a child
+        callback = unittest.mock.Mock()
+
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(58, callback)
+
+        self.assertFalse(callback.called)
+        self.assertFalse(m_WIFEXITED.called)
+        self.assertFalse(m_WIFSIGNALED.called)
+        self.assertFalse(m_WEXITSTATUS.called)
+        self.assertFalse(m_WTERMSIG.called)
+
+        # child terminates
+        self.running = False
+        self.add_zombie(58, 4)
+
+        # waitpid is called elsewhere
+        os.waitpid(58, os.WNOHANG)
+
+        m_waitpid.reset_mock()
+
+        # sigchld
+        with self.ignore_warnings:
+            self.watcher._sig_chld()
+
+        callback.assert_called(m_waitpid)
+        if isinstance(self.watcher, unix_events.FastChildWatcher):
+            # here the FastChildWatche enters a deadlock
+            # (there is no way to prevent it)
+            self.assertFalse(callback.called)
+        else:
+            callback.assert_called_once_with(58, 255)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_sigchld_unknown_pid_during_registration(
+            self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED, m_WEXITSTATUS,
+            m_WTERMSIG):
+
+        # register two children
+        callback1 = unittest.mock.Mock()
+        callback2 = unittest.mock.Mock()
+
+        with self.ignore_warnings, self.watcher:
+            self.running = True
+            # child 1 terminates
+            self.add_zombie(591, 7)
+            # an unknown child terminates
+            self.add_zombie(593, 17)
+
+            self.watcher._sig_chld()
+
+            self.watcher.add_child_handler(591, callback1)
+            self.watcher.add_child_handler(592, callback2)
+
+        callback1.assert_called_once_with(591, 7)
+        self.assertFalse(callback2.called)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_set_loop(
+            self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED, m_WEXITSTATUS,
+            m_WTERMSIG):
+
+        # register a child
+        callback = unittest.mock.Mock()
+
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(60, callback)
+
+        # attach a new loop
+        old_loop = self.loop
+        self.loop = test_utils.TestLoop()
+
+        with unittest.mock.patch.object(
+                old_loop,
+                "remove_signal_handler") as m_old_remove_signal_handler, \
+             unittest.mock.patch.object(
+                self.loop,
+                "add_signal_handler") as m_new_add_signal_handler:
+
+            self.watcher.set_loop(self.loop)
+
+            m_old_remove_signal_handler.assert_called_once_with(
+                signal.SIGCHLD)
+            m_new_add_signal_handler.assert_called_once_with(
+                signal.SIGCHLD, self.watcher._sig_chld)
+
+        # child terminates
+        self.running = False
+        self.add_zombie(60, 9)
+        self.watcher._sig_chld()
+
+        callback.assert_called_once_with(60, 9)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_set_loop_race_condition(
+            self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED, m_WEXITSTATUS,
+            m_WTERMSIG):
+
+        # register 3 children
+        callback1 = unittest.mock.Mock()
+        callback2 = unittest.mock.Mock()
+        callback3 = unittest.mock.Mock()
+
+        with self.watcher:
+            self.running = True
+            self.watcher.add_child_handler(61, callback1)
+            self.watcher.add_child_handler(62, callback2)
+            self.watcher.add_child_handler(622, callback3)
+
+        # detach the loop
+        old_loop = self.loop
+        self.loop = None
+
+        with unittest.mock.patch.object(
+                old_loop, "remove_signal_handler") as m_remove_signal_handler:
+
+            self.watcher.set_loop(None)
+
+            m_remove_signal_handler.assert_called_once_with(
+                signal.SIGCHLD)
+
+        # child 1 & 2 terminate
+        self.add_zombie(61, 11)
+        self.add_zombie(62, -5)
+
+        # SIGCHLD was not catched
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        self.assertFalse(callback3.called)
+
+        # attach a new loop
+        self.loop = test_utils.TestLoop()
+
+        with unittest.mock.patch.object(
+                self.loop, "add_signal_handler") as m_add_signal_handler:
+
+            self.watcher.set_loop(self.loop)
+
+            m_add_signal_handler.assert_called_once_with(
+                signal.SIGCHLD, self.watcher._sig_chld)
+            callback1.assert_called_once_with(61, 11)  # race condition!
+            callback2.assert_called_once_with(62, -5)  # race condition!
+            self.assertFalse(callback3.called)
+
+        callback1.reset_mock()
+        callback2.reset_mock()
+
+        # child 3 terminates
+        self.running = False
+        self.add_zombie(622, 19)
+        self.watcher._sig_chld()
+
+        self.assertFalse(callback1.called)
+        self.assertFalse(callback2.called)
+        callback3.assert_called_once_with(622, 19)
+
+    @unittest.mock.patch('os.WTERMSIG', wraps=WTERMSIG)
+    @unittest.mock.patch('os.WEXITSTATUS', wraps=WEXITSTATUS)
+    @unittest.mock.patch('os.WIFSIGNALED', wraps=WIFSIGNALED)
+    @unittest.mock.patch('os.WIFEXITED', wraps=WIFEXITED)
+    @unittest.mock.patch('os.waitpid', wraps=waitpid)
+    def test_close(
+            self, m_waitpid, m_WIFEXITED, m_WIFSIGNALED, m_WEXITSTATUS,
+            m_WTERMSIG):
+
+        # register two children
+        callback1 = unittest.mock.Mock()
+        callback2 = unittest.mock.Mock()
+
+        with self.watcher:
+            self.running = True
+            # child 1 terminates
+            self.add_zombie(63, 9)
+            # other child terminates
+            self.add_zombie(65, 18)
+            self.watcher._sig_chld()
+
+            self.watcher.add_child_handler(63, callback1)
+            self.watcher.add_child_handler(64, callback1)
+
+            self.assertEqual(len(self.watcher._callbacks), 1)
+            if isinstance(self.watcher, unix_events.FastChildWatcher):
+                self.assertEqual(len(self.watcher._zombies), 1)
+
+            with unittest.mock.patch.object(
+                    self.loop,
+                    "remove_signal_handler") as m_remove_signal_handler:
+
+                self.watcher.close()
+
+                m_remove_signal_handler.assert_called_once_with(
+                    signal.SIGCHLD)
+                self.assertFalse(self.watcher._callbacks)
+                if isinstance(self.watcher, unix_events.FastChildWatcher):
+                    self.assertFalse(self.watcher._zombies)
+
+
+class SafeChildWatcherTests (ChildWatcherTestsMixin, unittest.TestCase):
+    def create_watcher(self, loop):
+        return unix_events.SafeChildWatcher(loop)
+
+
+class FastChildWatcherTests (ChildWatcherTestsMixin, unittest.TestCase):
+    def create_watcher(self, loop):
+        return unix_events.FastChildWatcher(loop)
+
+
+class PolicyTests(unittest.TestCase):
+
+    def create_policy(self):
+        return unix_events.DefaultEventLoopPolicy()
+
+    def test_get_child_watcher(self):
+        policy = self.create_policy()
+        self.assertIsNone(policy._watcher)
+
+        watcher = policy.get_child_watcher()
+        self.assertIsInstance(watcher, unix_events.SafeChildWatcher)
+
+        self.assertIs(policy._watcher, watcher)
+
+        self.assertIs(watcher, policy.get_child_watcher())
+        self.assertIsNone(watcher._loop)
+
+    def test_get_child_watcher_after_set(self):
+        policy = self.create_policy()
+        watcher = unix_events.FastChildWatcher(None)
+
+        policy.set_child_watcher(watcher)
+        self.assertIs(policy._watcher, watcher)
+        self.assertIs(watcher, policy.get_child_watcher())
+
+    def test_get_child_watcher_with_mainloop_existing(self):
+        policy = self.create_policy()
+        loop = policy.get_event_loop()
+
+        self.assertIsNone(policy._watcher)
+        watcher = policy.get_child_watcher()
+
+        self.assertIsInstance(watcher, unix_events.SafeChildWatcher)
+        self.assertIs(watcher._loop, loop)
+
+        loop.close()
+
+    def test_get_child_watcher_thread(self):
+
+        def f():
+            policy.set_event_loop(policy.new_event_loop())
+
+            self.assertIsInstance(policy.get_event_loop(),
+                                  events.AbstractEventLoop)
+            watcher = policy.get_child_watcher()
+
+            self.assertIsInstance(watcher, unix_events.SafeChildWatcher)
+            self.assertIsNone(watcher._loop)
+
+            policy.get_event_loop().close()
+
+        policy = self.create_policy()
+
+        th = threading.Thread(target=f)
+        th.start()
+        th.join()
+
+    def test_child_watcher_replace_mainloop_existing(self):
+        policy = self.create_policy()
+        loop = policy.get_event_loop()
+
+        watcher = policy.get_child_watcher()
+
+        self.assertIs(watcher._loop, loop)
+
+        new_loop = policy.new_event_loop()
+        policy.set_event_loop(new_loop)
+
+        self.assertIs(watcher._loop, new_loop)
+
+        policy.set_event_loop(None)
+
+        self.assertIs(watcher._loop, None)
+
+        loop.close()
+        new_loop.close()
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_windows_events.py b/Lib/test/test_asyncio/test_windows_events.py
new file mode 100644
index 0000000..f5147de
--- /dev/null
+++ b/Lib/test/test_asyncio/test_windows_events.py
@@ -0,0 +1,139 @@
+import os
+import sys
+import unittest
+
+if sys.platform != 'win32':
+    raise unittest.SkipTest('Windows only')
+
+import _winapi
+
+import asyncio
+
+from asyncio import windows_events
+from asyncio import futures
+from asyncio import protocols
+from asyncio import streams
+from asyncio import transports
+from asyncio import test_utils
+from asyncio import _overlapped
+
+
+class UpperProto(protocols.Protocol):
+    def __init__(self):
+        self.buf = []
+
+    def connection_made(self, trans):
+        self.trans = trans
+
+    def data_received(self, data):
+        self.buf.append(data)
+        if b'\n' in data:
+            self.trans.write(b''.join(self.buf).upper())
+            self.trans.close()
+
+
+class ProactorTests(unittest.TestCase):
+
+    def setUp(self):
+        self.loop = windows_events.ProactorEventLoop()
+        asyncio.set_event_loop(None)
+
+    def tearDown(self):
+        self.loop.close()
+        self.loop = None
+
+    def test_close(self):
+        a, b = self.loop._socketpair()
+        trans = self.loop._make_socket_transport(a, protocols.Protocol())
+        f = asyncio.async(self.loop.sock_recv(b, 100))
+        trans.close()
+        self.loop.run_until_complete(f)
+        self.assertEqual(f.result(), b'')
+
+    def test_double_bind(self):
+        ADDRESS = r'\\.\pipe\test_double_bind-%s' % os.getpid()
+        server1 = windows_events.PipeServer(ADDRESS)
+        with self.assertRaises(PermissionError):
+            server2 = windows_events.PipeServer(ADDRESS)
+        server1.close()
+
+    def test_pipe(self):
+        res = self.loop.run_until_complete(self._test_pipe())
+        self.assertEqual(res, 'done')
+
+    def _test_pipe(self):
+        ADDRESS = r'\\.\pipe\_test_pipe-%s' % os.getpid()
+
+        with self.assertRaises(FileNotFoundError):
+            yield from self.loop.create_pipe_connection(
+                protocols.Protocol, ADDRESS)
+
+        [server] = yield from self.loop.start_serving_pipe(
+            UpperProto, ADDRESS)
+        self.assertIsInstance(server, windows_events.PipeServer)
+
+        clients = []
+        for i in range(5):
+            stream_reader = streams.StreamReader(loop=self.loop)
+            protocol = streams.StreamReaderProtocol(stream_reader)
+            trans, proto = yield from self.loop.create_pipe_connection(
+                lambda: protocol, ADDRESS)
+            self.assertIsInstance(trans, transports.Transport)
+            self.assertEqual(protocol, proto)
+            clients.append((stream_reader, trans))
+
+        for i, (r, w) in enumerate(clients):
+            w.write('lower-{}\n'.format(i).encode())
+
+        for i, (r, w) in enumerate(clients):
+            response = yield from r.readline()
+            self.assertEqual(response, 'LOWER-{}\n'.format(i).encode())
+            w.close()
+
+        server.close()
+
+        with self.assertRaises(FileNotFoundError):
+            yield from self.loop.create_pipe_connection(
+                protocols.Protocol, ADDRESS)
+
+        return 'done'
+
+    def test_wait_for_handle(self):
+        event = _overlapped.CreateEvent(None, True, False, None)
+        self.addCleanup(_winapi.CloseHandle, event)
+
+        # Wait for unset event with 0.2s timeout;
+        # result should be False at timeout
+        f = self.loop._proactor.wait_for_handle(event, 0.2)
+        start = self.loop.time()
+        self.loop.run_until_complete(f)
+        elapsed = self.loop.time() - start
+        self.assertFalse(f.result())
+        self.assertTrue(0.18 < elapsed < 0.22, elapsed)
+
+        _overlapped.SetEvent(event)
+
+        # Wait for for set event;
+        # result should be True immediately
+        f = self.loop._proactor.wait_for_handle(event, 10)
+        start = self.loop.time()
+        self.loop.run_until_complete(f)
+        elapsed = self.loop.time() - start
+        self.assertTrue(f.result())
+        self.assertTrue(0 <= elapsed < 0.02, elapsed)
+
+        _overlapped.ResetEvent(event)
+
+        # Wait for unset event with a cancelled future;
+        # CancelledError should be raised immediately
+        f = self.loop._proactor.wait_for_handle(event, 10)
+        f.cancel()
+        start = self.loop.time()
+        with self.assertRaises(futures.CancelledError):
+            self.loop.run_until_complete(f)
+        elapsed = self.loop.time() - start
+        self.assertTrue(0 <= elapsed < 0.02, elapsed)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_windows_utils.py b/Lib/test/test_asyncio/test_windows_utils.py
new file mode 100644
index 0000000..e013fbd
--- /dev/null
+++ b/Lib/test/test_asyncio/test_windows_utils.py
@@ -0,0 +1,140 @@
+"""Tests for window_utils"""
+
+import sys
+import test.support
+import unittest
+import unittest.mock
+
+if sys.platform != 'win32':
+    raise unittest.SkipTest('Windows only')
+
+import _winapi
+
+from asyncio import windows_utils
+from asyncio import _overlapped
+
+
+class WinsocketpairTests(unittest.TestCase):
+
+    def test_winsocketpair(self):
+        ssock, csock = windows_utils.socketpair()
+
+        csock.send(b'xxx')
+        self.assertEqual(b'xxx', ssock.recv(1024))
+
+        csock.close()
+        ssock.close()
+
+    @unittest.mock.patch('asyncio.windows_utils.socket')
+    def test_winsocketpair_exc(self, m_socket):
+        m_socket.socket.return_value.getsockname.return_value = ('', 12345)
+        m_socket.socket.return_value.accept.return_value = object(), object()
+        m_socket.socket.return_value.connect.side_effect = OSError()
+
+        self.assertRaises(OSError, windows_utils.socketpair)
+
+
+class PipeTests(unittest.TestCase):
+
+    def test_pipe_overlapped(self):
+        h1, h2 = windows_utils.pipe(overlapped=(True, True))
+        try:
+            ov1 = _overlapped.Overlapped()
+            self.assertFalse(ov1.pending)
+            self.assertEqual(ov1.error, 0)
+
+            ov1.ReadFile(h1, 100)
+            self.assertTrue(ov1.pending)
+            self.assertEqual(ov1.error, _winapi.ERROR_IO_PENDING)
+            ERROR_IO_INCOMPLETE = 996
+            try:
+                ov1.getresult()
+            except OSError as e:
+                self.assertEqual(e.winerror, ERROR_IO_INCOMPLETE)
+            else:
+                raise RuntimeError('expected ERROR_IO_INCOMPLETE')
+
+            ov2 = _overlapped.Overlapped()
+            self.assertFalse(ov2.pending)
+            self.assertEqual(ov2.error, 0)
+
+            ov2.WriteFile(h2, b"hello")
+            self.assertIn(ov2.error, {0, _winapi.ERROR_IO_PENDING})
+
+            res = _winapi.WaitForMultipleObjects([ov2.event], False, 100)
+            self.assertEqual(res, _winapi.WAIT_OBJECT_0)
+
+            self.assertFalse(ov1.pending)
+            self.assertEqual(ov1.error, ERROR_IO_INCOMPLETE)
+            self.assertFalse(ov2.pending)
+            self.assertIn(ov2.error, {0, _winapi.ERROR_IO_PENDING})
+            self.assertEqual(ov1.getresult(), b"hello")
+        finally:
+            _winapi.CloseHandle(h1)
+            _winapi.CloseHandle(h2)
+
+    def test_pipe_handle(self):
+        h, _ = windows_utils.pipe(overlapped=(True, True))
+        _winapi.CloseHandle(_)
+        p = windows_utils.PipeHandle(h)
+        self.assertEqual(p.fileno(), h)
+        self.assertEqual(p.handle, h)
+
+        # check garbage collection of p closes handle
+        del p
+        test.support.gc_collect()
+        try:
+            _winapi.CloseHandle(h)
+        except OSError as e:
+            self.assertEqual(e.winerror, 6)     # ERROR_INVALID_HANDLE
+        else:
+            raise RuntimeError('expected ERROR_INVALID_HANDLE')
+
+
+class PopenTests(unittest.TestCase):
+
+    def test_popen(self):
+        command = r"""if 1:
+            import sys
+            s = sys.stdin.readline()
+            sys.stdout.write(s.upper())
+            sys.stderr.write('stderr')
+            """
+        msg = b"blah\n"
+
+        p = windows_utils.Popen([sys.executable, '-c', command],
+                                stdin=windows_utils.PIPE,
+                                stdout=windows_utils.PIPE,
+                                stderr=windows_utils.PIPE)
+
+        for f in [p.stdin, p.stdout, p.stderr]:
+            self.assertIsInstance(f, windows_utils.PipeHandle)
+
+        ovin = _overlapped.Overlapped()
+        ovout = _overlapped.Overlapped()
+        overr = _overlapped.Overlapped()
+
+        ovin.WriteFile(p.stdin.handle, msg)
+        ovout.ReadFile(p.stdout.handle, 100)
+        overr.ReadFile(p.stderr.handle, 100)
+
+        events = [ovin.event, ovout.event, overr.event]
+        res = _winapi.WaitForMultipleObjects(events, True, 2000)
+        self.assertEqual(res, _winapi.WAIT_OBJECT_0)
+        self.assertFalse(ovout.pending)
+        self.assertFalse(overr.pending)
+        self.assertFalse(ovin.pending)
+
+        self.assertEqual(ovin.getresult(), len(msg))
+        out = ovout.getresult().rstrip()
+        err = overr.getresult().rstrip()
+
+        self.assertGreater(len(out), 0)
+        self.assertGreater(len(err), 0)
+        # allow for partial reads...
+        self.assertTrue(msg.upper().rstrip().startswith(out))
+        self.assertTrue(b"stderr".startswith(err))
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_asyncio/tests.txt b/Lib/test/test_asyncio/tests.txt
new file mode 100644
index 0000000..30609cd
--- /dev/null
+++ b/Lib/test/test_asyncio/tests.txt
@@ -0,0 +1,13 @@
+test_asyncio.test_base_events
+test_asyncio.test_events
+test_asyncio.test_futures
+test_asyncio.test_locks
+test_asyncio.test_proactor_events
+test_asyncio.test_queues
+test_asyncio.test_selector_events
+test_asyncio.test_streams
+test_asyncio.test_tasks
+test_asyncio.test_transports
+test_asyncio.test_unix_events
+test_asyncio.test_windows_events
+test_asyncio.test_windows_utils
diff --git a/Lib/test/test_atexit.py b/Lib/test/test_atexit.py
index 3e25236..b641015 100644
--- a/Lib/test/test_atexit.py
+++ b/Lib/test/test_atexit.py
@@ -77,6 +77,25 @@
         self.assertRaises(ZeroDivisionError, atexit._run_exitfuncs)
         self.assertIn("ZeroDivisionError", self.stream.getvalue())
 
+    def test_print_tracebacks(self):
+        # Issue #18776: the tracebacks should be printed when errors occur.
+        def f():
+            1/0  # one
+        def g():
+            1/0  # two
+        def h():
+            1/0  # three
+        atexit.register(f)
+        atexit.register(g)
+        atexit.register(h)
+
+        self.assertRaises(ZeroDivisionError, atexit._run_exitfuncs)
+        stderr = self.stream.getvalue()
+        self.assertEqual(stderr.count("ZeroDivisionError"), 3)
+        self.assertIn("# one", stderr)
+        self.assertIn("# two", stderr)
+        self.assertIn("# three", stderr)
+
     def test_stress(self):
         a = [0]
         def inc():
diff --git a/Lib/test/test_audioop.py b/Lib/test/test_audioop.py
index ff67f2c..fe96b75 100644
--- a/Lib/test/test_audioop.py
+++ b/Lib/test/test_audioop.py
@@ -1,18 +1,22 @@
 import audioop
 import sys
 import unittest
-from test.support import run_unittest
 
 def pack(width, data):
     return b''.join(v.to_bytes(width, sys.byteorder, signed=True) for v in data)
 
-packs = {w: (lambda *data, width=w: pack(width, data)) for w in (1, 2, 4)}
-maxvalues = {w: (1 << (8 * w - 1)) - 1 for w in (1, 2, 4)}
-minvalues = {w: -1 << (8 * w - 1) for w in (1, 2, 4)}
+def unpack(width, data):
+    return [int.from_bytes(data[i: i + width], sys.byteorder, signed=True)
+            for i in range(0, len(data), width)]
+
+packs = {w: (lambda *data, width=w: pack(width, data)) for w in (1, 2, 3, 4)}
+maxvalues = {w: (1 << (8 * w - 1)) - 1 for w in (1, 2, 3, 4)}
+minvalues = {w: -1 << (8 * w - 1) for w in (1, 2, 3, 4)}
 
 datas = {
     1: b'\x00\x12\x45\xbb\x7f\x80\xff',
     2: packs[2](0, 0x1234, 0x4567, -0x4567, 0x7fff, -0x8000, -1),
+    3: packs[3](0, 0x123456, 0x456789, -0x456789, 0x7fffff, -0x800000, -1),
     4: packs[4](0, 0x12345678, 0x456789ab, -0x456789ab,
                 0x7fffffff, -0x80000000, -1),
 }
@@ -20,6 +24,7 @@
 INVALID_DATA = [
     (b'abc', 0),
     (b'abc', 2),
+    (b'ab', 3),
     (b'abc', 4),
 ]
 
@@ -27,8 +32,10 @@
 class TestAudioop(unittest.TestCase):
 
     def test_max(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.max(b'', w), 0)
+            self.assertEqual(audioop.max(bytearray(), w), 0)
+            self.assertEqual(audioop.max(memoryview(b''), w), 0)
             p = packs[w]
             self.assertEqual(audioop.max(p(5), w), 5)
             self.assertEqual(audioop.max(p(5, -8, -1), w), 8)
@@ -37,9 +44,13 @@
             self.assertEqual(audioop.max(datas[w], w), -minvalues[w])
 
     def test_minmax(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.minmax(b'', w),
                              (0x7fffffff, -0x80000000))
+            self.assertEqual(audioop.minmax(bytearray(), w),
+                             (0x7fffffff, -0x80000000))
+            self.assertEqual(audioop.minmax(memoryview(b''), w),
+                             (0x7fffffff, -0x80000000))
             p = packs[w]
             self.assertEqual(audioop.minmax(p(5), w), (5, 5))
             self.assertEqual(audioop.minmax(p(5, -8, -1), w), (-8, 5))
@@ -51,16 +62,20 @@
                              (minvalues[w], maxvalues[w]))
 
     def test_maxpp(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.maxpp(b'', w), 0)
+            self.assertEqual(audioop.maxpp(bytearray(), w), 0)
+            self.assertEqual(audioop.maxpp(memoryview(b''), w), 0)
             self.assertEqual(audioop.maxpp(packs[w](*range(100)), w), 0)
             self.assertEqual(audioop.maxpp(packs[w](9, 10, 5, 5, 0, 1), w), 10)
             self.assertEqual(audioop.maxpp(datas[w], w),
                              maxvalues[w] - minvalues[w])
 
     def test_avg(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.avg(b'', w), 0)
+            self.assertEqual(audioop.avg(bytearray(), w), 0)
+            self.assertEqual(audioop.avg(memoryview(b''), w), 0)
             p = packs[w]
             self.assertEqual(audioop.avg(p(5), w), 5)
             self .assertEqual(audioop.avg(p(5, 8), w), 6)
@@ -75,17 +90,22 @@
                          -0x60000000)
 
     def test_avgpp(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.avgpp(b'', w), 0)
+            self.assertEqual(audioop.avgpp(bytearray(), w), 0)
+            self.assertEqual(audioop.avgpp(memoryview(b''), w), 0)
             self.assertEqual(audioop.avgpp(packs[w](*range(100)), w), 0)
             self.assertEqual(audioop.avgpp(packs[w](9, 10, 5, 5, 0, 1), w), 10)
         self.assertEqual(audioop.avgpp(datas[1], 1), 196)
         self.assertEqual(audioop.avgpp(datas[2], 2), 50534)
+        self.assertEqual(audioop.avgpp(datas[3], 3), 12937096)
         self.assertEqual(audioop.avgpp(datas[4], 4), 3311897002)
 
     def test_rms(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.rms(b'', w), 0)
+            self.assertEqual(audioop.rms(bytearray(), w), 0)
+            self.assertEqual(audioop.rms(memoryview(b''), w), 0)
             p = packs[w]
             self.assertEqual(audioop.rms(p(*range(100)), w), 57)
             self.assertAlmostEqual(audioop.rms(p(maxvalues[w]) * 5, w),
@@ -94,11 +114,14 @@
                                    -minvalues[w], delta=1)
         self.assertEqual(audioop.rms(datas[1], 1), 77)
         self.assertEqual(audioop.rms(datas[2], 2), 20001)
+        self.assertEqual(audioop.rms(datas[3], 3), 5120523)
         self.assertEqual(audioop.rms(datas[4], 4), 1310854152)
 
     def test_cross(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.cross(b'', w), -1)
+            self.assertEqual(audioop.cross(bytearray(), w), -1)
+            self.assertEqual(audioop.cross(memoryview(b''), w), -1)
             p = packs[w]
             self.assertEqual(audioop.cross(p(0, 1, 2), w), 0)
             self.assertEqual(audioop.cross(p(1, 2, -3, -4), w), 1)
@@ -107,22 +130,29 @@
             self.assertEqual(audioop.cross(p(minvalues[w], maxvalues[w]), w), 1)
 
     def test_add(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.add(b'', b'', w), b'')
+            self.assertEqual(audioop.add(bytearray(), bytearray(), w), b'')
+            self.assertEqual(audioop.add(memoryview(b''), memoryview(b''), w), b'')
             self.assertEqual(audioop.add(datas[w], b'\0' * len(datas[w]), w),
                              datas[w])
         self.assertEqual(audioop.add(datas[1], datas[1], 1),
                          b'\x00\x24\x7f\x80\x7f\x80\xfe')
         self.assertEqual(audioop.add(datas[2], datas[2], 2),
                 packs[2](0, 0x2468, 0x7fff, -0x8000, 0x7fff, -0x8000, -2))
+        self.assertEqual(audioop.add(datas[3], datas[3], 3),
+                packs[3](0, 0x2468ac, 0x7fffff, -0x800000,
+                       0x7fffff, -0x800000, -2))
         self.assertEqual(audioop.add(datas[4], datas[4], 4),
                 packs[4](0, 0x2468acf0, 0x7fffffff, -0x80000000,
                        0x7fffffff, -0x80000000, -2))
 
     def test_bias(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             for bias in 0, 1, -1, 127, -128, 0x7fffffff, -0x80000000:
                 self.assertEqual(audioop.bias(b'', w, bias), b'')
+                self.assertEqual(audioop.bias(bytearray(), w, bias), b'')
+                self.assertEqual(audioop.bias(memoryview(b''), w, bias), b'')
         self.assertEqual(audioop.bias(datas[1], 1, 1),
                          b'\x01\x13\x46\xbc\x80\x81\x00')
         self.assertEqual(audioop.bias(datas[1], 1, -1),
@@ -139,6 +169,17 @@
                 packs[2](-1, 0x1233, 0x4566, -0x4568, 0x7ffe, 0x7fff, -2))
         self.assertEqual(audioop.bias(datas[2], 2, -0x80000000),
                 datas[2])
+        self.assertEqual(audioop.bias(datas[3], 3, 1),
+                packs[3](1, 0x123457, 0x45678a, -0x456788,
+                         -0x800000, -0x7fffff, 0))
+        self.assertEqual(audioop.bias(datas[3], 3, -1),
+                packs[3](-1, 0x123455, 0x456788, -0x45678a,
+                         0x7ffffe, 0x7fffff, -2))
+        self.assertEqual(audioop.bias(datas[3], 3, 0x7fffffff),
+                packs[3](-1, 0x123455, 0x456788, -0x45678a,
+                         0x7ffffe, 0x7fffff, -2))
+        self.assertEqual(audioop.bias(datas[3], 3, -0x80000000),
+                datas[3])
         self.assertEqual(audioop.bias(datas[4], 4, 1),
                 packs[4](1, 0x12345679, 0x456789ac, -0x456789aa,
                          -0x80000000, -0x7fffffff, 0))
@@ -153,99 +194,141 @@
                          -1, 0, 0x7fffffff))
 
     def test_lin2lin(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.lin2lin(datas[w], w, w), datas[w])
+            self.assertEqual(audioop.lin2lin(bytearray(datas[w]), w, w),
+                             datas[w])
+            self.assertEqual(audioop.lin2lin(memoryview(datas[w]), w, w),
+                             datas[w])
 
         self.assertEqual(audioop.lin2lin(datas[1], 1, 2),
             packs[2](0, 0x1200, 0x4500, -0x4500, 0x7f00, -0x8000, -0x100))
+        self.assertEqual(audioop.lin2lin(datas[1], 1, 3),
+            packs[3](0, 0x120000, 0x450000, -0x450000,
+                     0x7f0000, -0x800000, -0x10000))
         self.assertEqual(audioop.lin2lin(datas[1], 1, 4),
             packs[4](0, 0x12000000, 0x45000000, -0x45000000,
                      0x7f000000, -0x80000000, -0x1000000))
         self.assertEqual(audioop.lin2lin(datas[2], 2, 1),
             b'\x00\x12\x45\xba\x7f\x80\xff')
+        self.assertEqual(audioop.lin2lin(datas[2], 2, 3),
+            packs[3](0, 0x123400, 0x456700, -0x456700,
+                     0x7fff00, -0x800000, -0x100))
         self.assertEqual(audioop.lin2lin(datas[2], 2, 4),
             packs[4](0, 0x12340000, 0x45670000, -0x45670000,
                      0x7fff0000, -0x80000000, -0x10000))
+        self.assertEqual(audioop.lin2lin(datas[3], 3, 1),
+            b'\x00\x12\x45\xba\x7f\x80\xff')
+        self.assertEqual(audioop.lin2lin(datas[3], 3, 2),
+            packs[2](0, 0x1234, 0x4567, -0x4568, 0x7fff, -0x8000, -1))
+        self.assertEqual(audioop.lin2lin(datas[3], 3, 4),
+            packs[4](0, 0x12345600, 0x45678900, -0x45678900,
+                     0x7fffff00, -0x80000000, -0x100))
         self.assertEqual(audioop.lin2lin(datas[4], 4, 1),
             b'\x00\x12\x45\xba\x7f\x80\xff')
         self.assertEqual(audioop.lin2lin(datas[4], 4, 2),
             packs[2](0, 0x1234, 0x4567, -0x4568, 0x7fff, -0x8000, -1))
+        self.assertEqual(audioop.lin2lin(datas[4], 4, 3),
+            packs[3](0, 0x123456, 0x456789, -0x45678a,
+                     0x7fffff, -0x800000, -1))
 
     def test_adpcm2lin(self):
         self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 1, None),
                          (b'\x00\x00\x00\xff\x00\xff', (-179, 40)))
+        self.assertEqual(audioop.adpcm2lin(bytearray(b'\x07\x7f\x7f'), 1, None),
+                         (b'\x00\x00\x00\xff\x00\xff', (-179, 40)))
+        self.assertEqual(audioop.adpcm2lin(memoryview(b'\x07\x7f\x7f'), 1, None),
+                         (b'\x00\x00\x00\xff\x00\xff', (-179, 40)))
         self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 2, None),
                          (packs[2](0, 0xb, 0x29, -0x16, 0x72, -0xb3), (-179, 40)))
+        self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 3, None),
+                         (packs[3](0, 0xb00, 0x2900, -0x1600, 0x7200,
+                                   -0xb300), (-179, 40)))
         self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 4, None),
                          (packs[4](0, 0xb0000, 0x290000, -0x160000, 0x720000,
                                    -0xb30000), (-179, 40)))
 
         # Very cursory test
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.adpcm2lin(b'\0' * 5, w, None),
                              (b'\0' * w * 10, (0, 0)))
 
     def test_lin2adpcm(self):
         self.assertEqual(audioop.lin2adpcm(datas[1], 1, None),
                          (b'\x07\x7f\x7f', (-221, 39)))
-        self.assertEqual(audioop.lin2adpcm(datas[2], 2, None),
-                         (b'\x07\x7f\x7f', (31, 39)))
-        self.assertEqual(audioop.lin2adpcm(datas[4], 4, None),
-                         (b'\x07\x7f\x7f', (31, 39)))
+        self.assertEqual(audioop.lin2adpcm(bytearray(datas[1]), 1, None),
+                         (b'\x07\x7f\x7f', (-221, 39)))
+        self.assertEqual(audioop.lin2adpcm(memoryview(datas[1]), 1, None),
+                         (b'\x07\x7f\x7f', (-221, 39)))
+        for w in 2, 3, 4:
+            self.assertEqual(audioop.lin2adpcm(datas[w], w, None),
+                             (b'\x07\x7f\x7f', (31, 39)))
 
         # Very cursory test
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.lin2adpcm(b'\0' * w * 10, w, None),
                              (b'\0' * 5, (0, 0)))
 
     def test_lin2alaw(self):
         self.assertEqual(audioop.lin2alaw(datas[1], 1),
                          b'\xd5\x87\xa4\x24\xaa\x2a\x5a')
-        self.assertEqual(audioop.lin2alaw(datas[2], 2),
-                         b'\xd5\x87\xa4\x24\xaa\x2a\x55')
-        self.assertEqual(audioop.lin2alaw(datas[4], 4),
-                         b'\xd5\x87\xa4\x24\xaa\x2a\x55')
+        self.assertEqual(audioop.lin2alaw(bytearray(datas[1]), 1),
+                         b'\xd5\x87\xa4\x24\xaa\x2a\x5a')
+        self.assertEqual(audioop.lin2alaw(memoryview(datas[1]), 1),
+                         b'\xd5\x87\xa4\x24\xaa\x2a\x5a')
+        for w in 2, 3, 4:
+            self.assertEqual(audioop.lin2alaw(datas[w], w),
+                             b'\xd5\x87\xa4\x24\xaa\x2a\x55')
 
     def test_alaw2lin(self):
         encoded = b'\x00\x03\x24\x2a\x51\x54\x55\x58\x6b\x71\x7f'\
                   b'\x80\x83\xa4\xaa\xd1\xd4\xd5\xd8\xeb\xf1\xff'
         src = [-688, -720, -2240, -4032, -9, -3, -1, -27, -244, -82, -106,
                688, 720, 2240, 4032, 9, 3, 1, 27, 244, 82, 106]
-        for w in 1, 2, 4:
-            self.assertEqual(audioop.alaw2lin(encoded, w),
-                             packs[w](*(x << (w * 8) >> 13 for x in src)))
+        for w in 1, 2, 3, 4:
+            decoded = packs[w](*(x << (w * 8) >> 13 for x in src))
+            self.assertEqual(audioop.alaw2lin(encoded, w), decoded)
+            self.assertEqual(audioop.alaw2lin(bytearray(encoded), w), decoded)
+            self.assertEqual(audioop.alaw2lin(memoryview(encoded), w), decoded)
 
         encoded = bytes(range(256))
-        for w in 2, 4:
+        for w in 2, 3, 4:
             decoded = audioop.alaw2lin(encoded, w)
             self.assertEqual(audioop.lin2alaw(decoded, w), encoded)
 
     def test_lin2ulaw(self):
         self.assertEqual(audioop.lin2ulaw(datas[1], 1),
                          b'\xff\xad\x8e\x0e\x80\x00\x67')
-        self.assertEqual(audioop.lin2ulaw(datas[2], 2),
-                         b'\xff\xad\x8e\x0e\x80\x00\x7e')
-        self.assertEqual(audioop.lin2ulaw(datas[4], 4),
-                         b'\xff\xad\x8e\x0e\x80\x00\x7e')
+        self.assertEqual(audioop.lin2ulaw(bytearray(datas[1]), 1),
+                         b'\xff\xad\x8e\x0e\x80\x00\x67')
+        self.assertEqual(audioop.lin2ulaw(memoryview(datas[1]), 1),
+                         b'\xff\xad\x8e\x0e\x80\x00\x67')
+        for w in 2, 3, 4:
+            self.assertEqual(audioop.lin2ulaw(datas[w], w),
+                             b'\xff\xad\x8e\x0e\x80\x00\x7e')
 
     def test_ulaw2lin(self):
         encoded = b'\x00\x0e\x28\x3f\x57\x6a\x76\x7c\x7e\x7f'\
                   b'\x80\x8e\xa8\xbf\xd7\xea\xf6\xfc\xfe\xff'
         src = [-8031, -4447, -1471, -495, -163, -53, -18, -6, -2, 0,
                8031, 4447, 1471, 495, 163, 53, 18, 6, 2, 0]
-        for w in 1, 2, 4:
-            self.assertEqual(audioop.ulaw2lin(encoded, w),
-                             packs[w](*(x << (w * 8) >> 14 for x in src)))
+        for w in 1, 2, 3, 4:
+            decoded = packs[w](*(x << (w * 8) >> 14 for x in src))
+            self.assertEqual(audioop.ulaw2lin(encoded, w), decoded)
+            self.assertEqual(audioop.ulaw2lin(bytearray(encoded), w), decoded)
+            self.assertEqual(audioop.ulaw2lin(memoryview(encoded), w), decoded)
 
         # Current u-law implementation has two codes fo 0: 0x7f and 0xff.
         encoded = bytes(range(127)) + bytes(range(128, 256))
-        for w in 2, 4:
+        for w in 2, 3, 4:
             decoded = audioop.ulaw2lin(encoded, w)
             self.assertEqual(audioop.lin2ulaw(decoded, w), encoded)
 
     def test_mul(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.mul(b'', w, 2), b'')
+            self.assertEqual(audioop.mul(bytearray(), w, 2), b'')
+            self.assertEqual(audioop.mul(memoryview(b''), w, 2), b'')
             self.assertEqual(audioop.mul(datas[w], w, 0),
                              b'\0' * len(datas[w]))
             self.assertEqual(audioop.mul(datas[w], w, 1),
@@ -254,14 +337,21 @@
                          b'\x00\x24\x7f\x80\x7f\x80\xfe')
         self.assertEqual(audioop.mul(datas[2], 2, 2),
                 packs[2](0, 0x2468, 0x7fff, -0x8000, 0x7fff, -0x8000, -2))
+        self.assertEqual(audioop.mul(datas[3], 3, 2),
+                packs[3](0, 0x2468ac, 0x7fffff, -0x800000,
+                         0x7fffff, -0x800000, -2))
         self.assertEqual(audioop.mul(datas[4], 4, 2),
                 packs[4](0, 0x2468acf0, 0x7fffffff, -0x80000000,
                          0x7fffffff, -0x80000000, -2))
 
     def test_ratecv(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.ratecv(b'', w, 1, 8000, 8000, None),
                              (b'', (-1, ((0, 0),))))
+            self.assertEqual(audioop.ratecv(bytearray(), w, 1, 8000, 8000, None),
+                             (b'', (-1, ((0, 0),))))
+            self.assertEqual(audioop.ratecv(memoryview(b''), w, 1, 8000, 8000, None),
+                             (b'', (-1, ((0, 0),))))
             self.assertEqual(audioop.ratecv(b'', w, 5, 8000, 8000, None),
                              (b'', (-1, ((0, 0),) * 5)))
             self.assertEqual(audioop.ratecv(b'', w, 1, 8000, 16000, None),
@@ -273,7 +363,7 @@
         d2, state = audioop.ratecv(b'\x00\x01\x02', 1, 1, 8000, 16000, state)
         self.assertEqual(d1 + d2, b'\000\000\001\001\002\001\000\000\001\001\002')
 
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             d0, state0 = audioop.ratecv(datas[w], w, 1, 8000, 16000, None)
             d, state = b'', None
             for i in range(0, len(datas[w]), w):
@@ -284,13 +374,15 @@
             self.assertEqual(state, state0)
 
     def test_reverse(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             self.assertEqual(audioop.reverse(b'', w), b'')
+            self.assertEqual(audioop.reverse(bytearray(), w), b'')
+            self.assertEqual(audioop.reverse(memoryview(b''), w), b'')
             self.assertEqual(audioop.reverse(packs[w](0, 1, 2), w),
                              packs[w](2, 1, 0))
 
     def test_tomono(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             data1 = datas[w]
             data2 = bytearray(2 * len(data1))
             for k in range(w):
@@ -300,9 +392,13 @@
             for k in range(w):
                 data2[k+w::2*w] = data1[k::w]
             self.assertEqual(audioop.tomono(data2, w, 0.5, 0.5), data1)
+            self.assertEqual(audioop.tomono(bytearray(data2), w, 0.5, 0.5),
+                             data1)
+            self.assertEqual(audioop.tomono(memoryview(data2), w, 0.5, 0.5),
+                             data1)
 
     def test_tostereo(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             data1 = datas[w]
             data2 = bytearray(2 * len(data1))
             for k in range(w):
@@ -312,14 +408,25 @@
             for k in range(w):
                 data2[k+w::2*w] = data1[k::w]
             self.assertEqual(audioop.tostereo(data1, w, 1, 1), data2)
+            self.assertEqual(audioop.tostereo(bytearray(data1), w, 1, 1), data2)
+            self.assertEqual(audioop.tostereo(memoryview(data1), w, 1, 1),
+                             data2)
 
     def test_findfactor(self):
         self.assertEqual(audioop.findfactor(datas[2], datas[2]), 1.0)
+        self.assertEqual(audioop.findfactor(bytearray(datas[2]),
+                                            bytearray(datas[2])), 1.0)
+        self.assertEqual(audioop.findfactor(memoryview(datas[2]),
+                                            memoryview(datas[2])), 1.0)
         self.assertEqual(audioop.findfactor(b'\0' * len(datas[2]), datas[2]),
                          0.0)
 
     def test_findfit(self):
         self.assertEqual(audioop.findfit(datas[2], datas[2]), (0, 1.0))
+        self.assertEqual(audioop.findfit(bytearray(datas[2]),
+                                         bytearray(datas[2])), (0, 1.0))
+        self.assertEqual(audioop.findfit(memoryview(datas[2]),
+                                         memoryview(datas[2])), (0, 1.0))
         self.assertEqual(audioop.findfit(datas[2], packs[2](1, 2, 0)),
                          (1, 8038.8))
         self.assertEqual(audioop.findfit(datas[2][:-2] * 5 + datas[2], datas[2]),
@@ -327,11 +434,15 @@
 
     def test_findmax(self):
         self.assertEqual(audioop.findmax(datas[2], 1), 5)
+        self.assertEqual(audioop.findmax(bytearray(datas[2]), 1), 5)
+        self.assertEqual(audioop.findmax(memoryview(datas[2]), 1), 5)
 
     def test_getsample(self):
-        for w in 1, 2, 4:
+        for w in 1, 2, 3, 4:
             data = packs[w](0, 1, -1, maxvalues[w], minvalues[w])
             self.assertEqual(audioop.getsample(data, w, 0), 0)
+            self.assertEqual(audioop.getsample(bytearray(data), w, 0), 0)
+            self.assertEqual(audioop.getsample(memoryview(data), w, 0), 0)
             self.assertEqual(audioop.getsample(data, w, 1), 1)
             self.assertEqual(audioop.getsample(data, w, 2), -1)
             self.assertEqual(audioop.getsample(data, w, 3), maxvalues[w])
@@ -366,16 +477,36 @@
             self.assertRaises(audioop.error, audioop.lin2alaw, data, size)
             self.assertRaises(audioop.error, audioop.lin2adpcm, data, size, state)
 
+    def test_string(self):
+        data = 'abcd'
+        size = 2
+        self.assertRaises(TypeError, audioop.getsample, data, size, 0)
+        self.assertRaises(TypeError, audioop.max, data, size)
+        self.assertRaises(TypeError, audioop.minmax, data, size)
+        self.assertRaises(TypeError, audioop.avg, data, size)
+        self.assertRaises(TypeError, audioop.rms, data, size)
+        self.assertRaises(TypeError, audioop.avgpp, data, size)
+        self.assertRaises(TypeError, audioop.maxpp, data, size)
+        self.assertRaises(TypeError, audioop.cross, data, size)
+        self.assertRaises(TypeError, audioop.mul, data, size, 1.0)
+        self.assertRaises(TypeError, audioop.tomono, data, size, 0.5, 0.5)
+        self.assertRaises(TypeError, audioop.tostereo, data, size, 0.5, 0.5)
+        self.assertRaises(TypeError, audioop.add, data, data, size)
+        self.assertRaises(TypeError, audioop.bias, data, size, 0)
+        self.assertRaises(TypeError, audioop.reverse, data, size)
+        self.assertRaises(TypeError, audioop.lin2lin, data, size, size)
+        self.assertRaises(TypeError, audioop.ratecv, data, size, 1, 1, 1, None)
+        self.assertRaises(TypeError, audioop.lin2ulaw, data, size)
+        self.assertRaises(TypeError, audioop.lin2alaw, data, size)
+        self.assertRaises(TypeError, audioop.lin2adpcm, data, size, None)
+
     def test_wrongsize(self):
         data = b'abcdefgh'
         state = None
-        for size in (-1, 0, 3, 5, 1024):
+        for size in (-1, 0, 5, 1024):
             self.assertRaises(audioop.error, audioop.ulaw2lin, data, size)
             self.assertRaises(audioop.error, audioop.alaw2lin, data, size)
             self.assertRaises(audioop.error, audioop.adpcm2lin, data, size, state)
 
-def test_main():
-    run_unittest(TestAudioop)
-
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index f12f911..847c7a6 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -909,6 +909,15 @@
             with self.assertRaises(ValueError):
                 b[3:4] = elem
 
+    def test_setslice_extend(self):
+        # Exercise the resizing logic (see issue #19087)
+        b = bytearray(range(100))
+        self.assertEqual(list(b), list(range(100)))
+        del b[:10]
+        self.assertEqual(list(b), list(range(10, 100)))
+        b.extend(range(100, 110))
+        self.assertEqual(list(b), list(range(10, 110)))
+
     def test_extended_set_del_slice(self):
         indices = (0, None, 1, 3, 19, 300, 1<<333, -1, -2, -31, -300)
         for start in indices:
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
index 7090cd6..8d93e2d 100644
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -5,9 +5,11 @@
 import unittest
 from io import BytesIO
 import os
+import pickle
 import random
 import subprocess
 import sys
+from test.support import unlink
 
 try:
     import threading
@@ -627,6 +629,11 @@
         finally:
             data = None
 
+    def testPickle(self):
+        with self.assertRaises(TypeError):
+            pickle.dumps(BZ2Compressor())
+
+
 class BZ2DecompressorTest(BaseTest):
     def test_Constructor(self):
         self.assertRaises(TypeError, BZ2Decompressor, 42)
@@ -678,6 +685,10 @@
             compressed = None
             decompressed = None
 
+    def testPickle(self):
+        with self.assertRaises(TypeError):
+            pickle.dumps(BZ2Decompressor())
+
 
 class CompressDecompressTest(BaseTest):
     def testCompress(self):
@@ -715,49 +726,67 @@
         return bz2.open(*args, **kwargs)
 
     def test_binary_modes(self):
-        with self.open(self.filename, "wb") as f:
-            f.write(self.TEXT)
-        with open(self.filename, "rb") as f:
-            file_data = self.decompress(f.read())
-            self.assertEqual(file_data, self.TEXT)
-        with self.open(self.filename, "rb") as f:
-            self.assertEqual(f.read(), self.TEXT)
-        with self.open(self.filename, "ab") as f:
-            f.write(self.TEXT)
-        with open(self.filename, "rb") as f:
-            file_data = self.decompress(f.read())
-            self.assertEqual(file_data, self.TEXT * 2)
+        for mode in ("wb", "xb"):
+            if mode == "xb":
+                unlink(self.filename)
+            with self.open(self.filename, mode) as f:
+                f.write(self.TEXT)
+            with open(self.filename, "rb") as f:
+                file_data = self.decompress(f.read())
+                self.assertEqual(file_data, self.TEXT)
+            with self.open(self.filename, "rb") as f:
+                self.assertEqual(f.read(), self.TEXT)
+            with self.open(self.filename, "ab") as f:
+                f.write(self.TEXT)
+            with open(self.filename, "rb") as f:
+                file_data = self.decompress(f.read())
+                self.assertEqual(file_data, self.TEXT * 2)
 
     def test_implicit_binary_modes(self):
         # Test implicit binary modes (no "b" or "t" in mode string).
-        with self.open(self.filename, "w") as f:
-            f.write(self.TEXT)
-        with open(self.filename, "rb") as f:
-            file_data = self.decompress(f.read())
-            self.assertEqual(file_data, self.TEXT)
-        with self.open(self.filename, "r") as f:
-            self.assertEqual(f.read(), self.TEXT)
-        with self.open(self.filename, "a") as f:
-            f.write(self.TEXT)
-        with open(self.filename, "rb") as f:
-            file_data = self.decompress(f.read())
-            self.assertEqual(file_data, self.TEXT * 2)
+        for mode in ("w", "x"):
+            if mode == "x":
+                unlink(self.filename)
+            with self.open(self.filename, mode) as f:
+                f.write(self.TEXT)
+            with open(self.filename, "rb") as f:
+                file_data = self.decompress(f.read())
+                self.assertEqual(file_data, self.TEXT)
+            with self.open(self.filename, "r") as f:
+                self.assertEqual(f.read(), self.TEXT)
+            with self.open(self.filename, "a") as f:
+                f.write(self.TEXT)
+            with open(self.filename, "rb") as f:
+                file_data = self.decompress(f.read())
+                self.assertEqual(file_data, self.TEXT * 2)
 
     def test_text_modes(self):
         text = self.TEXT.decode("ascii")
         text_native_eol = text.replace("\n", os.linesep)
-        with self.open(self.filename, "wt") as f:
-            f.write(text)
-        with open(self.filename, "rb") as f:
-            file_data = self.decompress(f.read()).decode("ascii")
-            self.assertEqual(file_data, text_native_eol)
-        with self.open(self.filename, "rt") as f:
-            self.assertEqual(f.read(), text)
-        with self.open(self.filename, "at") as f:
-            f.write(text)
-        with open(self.filename, "rb") as f:
-            file_data = self.decompress(f.read()).decode("ascii")
-            self.assertEqual(file_data, text_native_eol * 2)
+        for mode in ("wt", "xt"):
+            if mode == "xt":
+                unlink(self.filename)
+            with self.open(self.filename, mode) as f:
+                f.write(text)
+            with open(self.filename, "rb") as f:
+                file_data = self.decompress(f.read()).decode("ascii")
+                self.assertEqual(file_data, text_native_eol)
+            with self.open(self.filename, "rt") as f:
+                self.assertEqual(f.read(), text)
+            with self.open(self.filename, "at") as f:
+                f.write(text)
+            with open(self.filename, "rb") as f:
+                file_data = self.decompress(f.read()).decode("ascii")
+                self.assertEqual(file_data, text_native_eol * 2)
+
+    def test_x_mode(self):
+        for mode in ("x", "xb", "xt"):
+            unlink(self.filename)
+            with self.open(self.filename, mode) as f:
+                pass
+            with self.assertRaises(FileExistsError):
+                with self.open(self.filename, mode) as f:
+                    pass
 
     def test_fileobj(self):
         with self.open(BytesIO(self.DATA), "r") as f:
@@ -773,6 +802,8 @@
         self.assertRaises(ValueError,
                           self.open, self.filename, "wbt")
         self.assertRaises(ValueError,
+                          self.open, self.filename, "xbt")
+        self.assertRaises(ValueError,
                           self.open, self.filename, "rb", encoding="utf-8")
         self.assertRaises(ValueError,
                           self.open, self.filename, "rb", errors="ignore")
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 62827e5..d37c057 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -1,7 +1,6 @@
 # Run the _testcapi module tests (tests for the Python/C API):  by defn,
 # these are all functions _testcapi exports whose name begins with 'test_'.
 
-from __future__ import with_statement
 import os
 import pickle
 import random
@@ -44,7 +43,7 @@
 
     @unittest.skipUnless(threading, 'Threading required for this test.')
     def test_no_FatalError_infinite_loop(self):
-        with support.suppress_crash_popup():
+        with support.SuppressCrashReport():
             p = subprocess.Popen([sys.executable, "-c",
                                   'import _testcapi;'
                                   '_testcapi.crash_no_current_thread()'],
@@ -218,36 +217,97 @@
         self.assertEqual(_testcapi.argparsing("Hello", "World"), 1)
 
 
-class EmbeddingTest(unittest.TestCase):
-
-    @unittest.skipIf(
-        sys.platform.startswith('win'),
-        "test doesn't work under Windows")
-    def test_subinterps(self):
-        # XXX only tested under Unix checkouts
+class EmbeddingTests(unittest.TestCase):
+    def setUp(self):
         basepath = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
-        oldcwd = os.getcwd()
+        exename = "_testembed"
+        if sys.platform.startswith("win"):
+            ext = ("_d" if "_d" in sys.executable else "") + ".exe"
+            exename += ext
+            exepath = os.path.dirname(sys.executable)
+        else:
+            exepath = os.path.join(basepath, "Modules")
+        self.test_exe = exe = os.path.join(exepath, exename)
+        if not os.path.exists(exe):
+            self.skipTest("%r doesn't exist" % exe)
         # This is needed otherwise we get a fatal error:
         # "Py_Initialize: Unable to get the locale encoding
         # LookupError: no codec search functions registered: can't find encoding"
+        self.oldcwd = os.getcwd()
         os.chdir(basepath)
+
+    def tearDown(self):
+        os.chdir(self.oldcwd)
+
+    def run_embedded_interpreter(self, *args):
+        """Runs a test in the embedded interpreter"""
+        cmd = [self.test_exe]
+        cmd.extend(args)
+        p = subprocess.Popen(cmd,
+                             stdout=subprocess.PIPE,
+                             stderr=subprocess.PIPE)
+        (out, err) = p.communicate()
+        self.assertEqual(p.returncode, 0,
+                         "bad returncode %d, stderr is %r" %
+                         (p.returncode, err))
+        return out.decode("latin1"), err.decode("latin1")
+
+    def test_subinterps(self):
+        # This is just a "don't crash" test
+        out, err = self.run_embedded_interpreter()
+        if support.verbose:
+            print()
+            print(out)
+            print(err)
+
+    @staticmethod
+    def _get_default_pipe_encoding():
+        rp, wp = os.pipe()
         try:
-            exe = os.path.join(basepath, "Modules", "_testembed")
-            if not os.path.exists(exe):
-                self.skipTest("%r doesn't exist" % exe)
-            p = subprocess.Popen([exe],
-                                 stdout=subprocess.PIPE,
-                                 stderr=subprocess.PIPE)
-            (out, err) = p.communicate()
-            self.assertEqual(p.returncode, 0,
-                             "bad returncode %d, stderr is %r" %
-                             (p.returncode, err))
-            if support.verbose:
-                print()
-                print(out.decode('latin1'))
-                print(err.decode('latin1'))
+            with os.fdopen(wp, 'w') as w:
+                default_pipe_encoding = w.encoding
         finally:
-            os.chdir(oldcwd)
+            os.close(rp)
+        return default_pipe_encoding
+
+    def test_forced_io_encoding(self):
+        # Checks forced configuration of embedded interpreter IO streams
+        out, err = self.run_embedded_interpreter("forced_io_encoding")
+        if support.verbose:
+            print()
+            print(out)
+            print(err)
+        expected_stdin_encoding = sys.__stdin__.encoding
+        expected_pipe_encoding = self._get_default_pipe_encoding()
+        expected_output = os.linesep.join([
+        "--- Use defaults ---",
+        "Expected encoding: default",
+        "Expected errors: default",
+        "stdin: {0}:strict",
+        "stdout: {1}:strict",
+        "stderr: {1}:backslashreplace",
+        "--- Set errors only ---",
+        "Expected encoding: default",
+        "Expected errors: surrogateescape",
+        "stdin: {0}:surrogateescape",
+        "stdout: {1}:surrogateescape",
+        "stderr: {1}:backslashreplace",
+        "--- Set encoding only ---",
+        "Expected encoding: latin-1",
+        "Expected errors: default",
+        "stdin: latin-1:strict",
+        "stdout: latin-1:strict",
+        "stderr: latin-1:backslashreplace",
+        "--- Set encoding and errors ---",
+        "Expected encoding: latin-1",
+        "Expected errors: surrogateescape",
+        "stdin: latin-1:surrogateescape",
+        "stdout: latin-1:surrogateescape",
+        "stderr: latin-1:backslashreplace"]).format(expected_stdin_encoding,
+                                                    expected_pipe_encoding)
+        # This is useful if we ever trip over odd platform behaviour
+        self.maxDiff = None
+        self.assertEqual(out.strip(), expected_output)
 
 class SkipitemTest(unittest.TestCase):
 
@@ -355,18 +415,13 @@
         t.start()
         t.join()
 
-
-def test_main():
-    support.run_unittest(CAPITest, TestPendingCalls, Test6012,
-                         EmbeddingTest, SkipitemTest, TestThreadState,
-                         SubinterpreterTest)
-
-    for name in dir(_testcapi):
-        if name.startswith('test_'):
-            test = getattr(_testcapi, name)
-            if support.verbose:
-                print("internal", name)
-            test()
+class Test_testcapi(unittest.TestCase):
+    def test__testcapi(self):
+        for name in dir(_testcapi):
+            if name.startswith('test_'):
+                with self.subTest("internal", name=name):
+                    test = getattr(_testcapi, name)
+                    test()
 
 if __name__ == "__main__":
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index efe4546..327c145 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -263,7 +263,7 @@
             path = path.encode("ascii", "backslashreplace")
             sys.stdout.buffer.write(path)"""
         rc1, out1, err1 = assert_python_ok('-c', code, PYTHONPATH="")
-        rc2, out2, err2 = assert_python_ok('-c', code)
+        rc2, out2, err2 = assert_python_ok('-c', code, __isolated=False)
         # regarding to Posix specification, outputs should be equal
         # for empty and unset PYTHONPATH
         self.assertEqual(out1, out2)
diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py
index b4269b9..f804d86 100644
--- a/Lib/test/test_cmd_line_script.py
+++ b/Lib/test/test_cmd_line_script.py
@@ -123,7 +123,7 @@
         if not __debug__:
             cmd_line_switches += ('-' + 'O' * sys.flags.optimize,)
         run_args = cmd_line_switches + (script_name,) + tuple(example_args)
-        rc, out, err = assert_python_ok(*run_args)
+        rc, out, err = assert_python_ok(*run_args, __isolated=False)
         self._check_output(script_name, rc, out + err, expected_file,
                            expected_argv0, expected_path0,
                            expected_package, expected_loader)
@@ -294,7 +294,7 @@
                 pkg_dir = os.path.join(script_dir, 'test_pkg')
                 make_pkg(pkg_dir, "import sys; print('init_argv0==%r' % sys.argv[0])")
                 script_name = _make_test_script(pkg_dir, 'script')
-                rc, out, err = assert_python_ok('-m', 'test_pkg.script', *example_args)
+                rc, out, err = assert_python_ok('-m', 'test_pkg.script', *example_args, __isolated=False)
                 if verbose > 1:
                     print(out)
                 expected = "init_argv0==%r" % '-m'
@@ -311,7 +311,8 @@
                 with open("-c", "w") as f:
                     f.write("data")
                     rc, out, err = assert_python_ok('-c',
-                        'import sys; print("sys.path[0]==%r" % sys.path[0])')
+                        'import sys; print("sys.path[0]==%r" % sys.path[0])',
+                        __isolated=False)
                     if verbose > 1:
                         print(out)
                     expected = "sys.path[0]==%r" % ''
@@ -325,7 +326,8 @@
             with support.change_cwd(path=script_dir):
                 with open("-m", "w") as f:
                     f.write("data")
-                    rc, out, err = assert_python_ok('-m', 'other', *example_args)
+                    rc, out, err = assert_python_ok('-m', 'other', *example_args,
+                                                    __isolated=False)
                     self._check_output(script_name, rc, out,
                                       script_name, script_name, '', '',
                                       importlib.machinery.SourceFileLoader)
diff --git a/Lib/test/test_code_module.py b/Lib/test/test_code_module.py
index adef170..5fd21dc 100644
--- a/Lib/test/test_code_module.py
+++ b/Lib/test/test_code_module.py
@@ -64,6 +64,20 @@
         self.console.interact()
         self.assertTrue(hook.called)
 
+    def test_banner(self):
+        # with banner
+        self.infunc.side_effect = EOFError('Finished')
+        self.console.interact(banner='Foo')
+        self.assertEqual(len(self.stderr.method_calls), 2)
+        banner_call = self.stderr.method_calls[0]
+        self.assertEqual(banner_call, ['write', ('Foo\n',), {}])
+
+        # no banner
+        self.stderr.reset_mock()
+        self.infunc.side_effect = EOFError('Finished')
+        self.console.interact(banner='')
+        self.assertEqual(len(self.stderr.method_calls), 1)
+
 
 def test_main():
     support.run_unittest(TestInteractiveConsole)
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index 99d928d..5cef4da 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -820,6 +820,36 @@
             ]
         )
 
+    def test_errors(self):
+        tests = [
+            (b'a\xffb', 'a\ufffdb'),
+            (b'a+IK', 'a\ufffd'),
+            (b'a+IK-b', 'a\ufffdb'),
+            (b'a+IK,b', 'a\ufffdb'),
+            (b'a+IKx', 'a\u20ac\ufffd'),
+            (b'a+IKx-b', 'a\u20ac\ufffdb'),
+            (b'a+IKwgr', 'a\u20ac\ufffd'),
+            (b'a+IKwgr-b', 'a\u20ac\ufffdb'),
+            (b'a+IKwgr,', 'a\u20ac\ufffd'),
+            (b'a+IKwgr,-b', 'a\u20ac\ufffd-b'),
+            (b'a+IKwgrB', 'a\u20ac\u20ac\ufffd'),
+            (b'a+IKwgrB-b', 'a\u20ac\u20ac\ufffdb'),
+            (b'a+/,+IKw-b', 'a\ufffd\u20acb'),
+            (b'a+//,+IKw-b', 'a\ufffd\u20acb'),
+            (b'a+///,+IKw-b', 'a\uffff\ufffd\u20acb'),
+            (b'a+////,+IKw-b', 'a\uffff\ufffd\u20acb'),
+        ]
+        for raw, expected in tests:
+            with self.subTest(raw=raw):
+                self.assertRaises(UnicodeDecodeError, codecs.utf_7_decode,
+                                raw, 'strict', True)
+                self.assertEqual(raw.decode('utf-7', 'replace'), expected)
+
+    def test_nonbmp(self):
+        self.assertEqual('\U000104A0'.encode(self.encoding), b'+2AHcoA-')
+        self.assertEqual('\ud801\udca0'.encode(self.encoding), b'+2AHcoA-')
+        self.assertEqual(b'+2AHcoA-'.decode(self.encoding), '\U000104A0')
+
 class UTF16ExTest(unittest.TestCase):
 
     def test_errors(self):
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index 6c733ee..56e8120 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -852,6 +852,24 @@
 ### Counter
 ################################################################################
 
+class CounterSubclassWithSetItem(Counter):
+    # Test a counter subclass that overrides __setitem__
+    def __init__(self, *args, **kwds):
+        self.called = False
+        Counter.__init__(self, *args, **kwds)
+    def __setitem__(self, key, value):
+        self.called = True
+        Counter.__setitem__(self, key, value)
+
+class CounterSubclassWithGet(Counter):
+    # Test a counter subclass that overrides get()
+    def __init__(self, *args, **kwds):
+        self.called = False
+        Counter.__init__(self, *args, **kwds)
+    def get(self, key, default):
+        self.called = True
+        return Counter.get(self, key, default)
+
 class TestCounter(unittest.TestCase):
 
     def test_basics(self):
@@ -1059,6 +1077,14 @@
         self.assertEqual(m,
              OrderedDict([('a', 5), ('b', 2), ('r', 2), ('c', 1), ('d', 1)]))
 
+        # test fidelity to the pure python version
+        c = CounterSubclassWithSetItem('abracadabra')
+        self.assertTrue(c.called)
+        self.assertEqual(dict(c), {'a': 5, 'b': 2, 'c': 1, 'd': 1, 'r':2 })
+        c = CounterSubclassWithGet('abracadabra')
+        self.assertTrue(c.called)
+        self.assertEqual(dict(c), {'a': 5, 'b': 2, 'c': 1, 'd': 1, 'r':2 })
+
 
 ################################################################################
 ### OrderedDict
diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py
index cf58ca6..ff2515d 100644
--- a/Lib/test/test_compileall.py
+++ b/Lib/test/test_compileall.py
@@ -40,11 +40,10 @@
         compare = struct.pack('<4sl', importlib.util.MAGIC_NUMBER, mtime)
         return data, compare
 
+    @unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
     def recreation_check(self, metadata):
         """Check that compileall recreates bytecode when the new metadata is
         used."""
-        if not hasattr(os, 'stat'):
-            return
         py_compile.compile(self.source_path)
         self.assertEqual(*self.data())
         with open(self.bc_path, 'rb') as file:
@@ -295,7 +294,7 @@
         pyc = importlib.util.cache_from_source(bazfn)
         os.rename(pyc, os.path.join(self.pkgdir, 'baz.pyc'))
         os.remove(bazfn)
-        rc, out, err = script_helper.assert_python_failure(fn)
+        rc, out, err = script_helper.assert_python_failure(fn, __isolated=False)
         self.assertRegex(err, b'File "dinsdale')
 
     def test_include_bad_file(self):
diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py
index f80d7ac..cd55375 100644
--- a/Lib/test/test_complex.py
+++ b/Lib/test/test_complex.py
@@ -303,6 +303,7 @@
         self.assertRaises(TypeError, float, 5+3j)
         self.assertRaises(ValueError, complex, "")
         self.assertRaises(TypeError, complex, None)
+        self.assertRaisesRegex(TypeError, "not 'NoneType'", complex, None)
         self.assertRaises(ValueError, complex, "\0")
         self.assertRaises(ValueError, complex, "3\09")
         self.assertRaises(TypeError, complex, "1", "2")
diff --git a/Lib/test/test_concurrent_futures.py b/Lib/test/test_concurrent_futures.py
index 4ad3309..a7e945c 100644
--- a/Lib/test/test_concurrent_futures.py
+++ b/Lib/test/test_concurrent_futures.py
@@ -94,7 +94,7 @@
     executor_type = futures.ProcessPoolExecutor
 
 
-class ExecutorShutdownTest(unittest.TestCase):
+class ExecutorShutdownTest:
     def test_run_after_shutdown(self):
         self.executor.shutdown()
         self.assertRaises(RuntimeError,
@@ -122,7 +122,7 @@
             f.result()
 
 
-class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest):
+class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest, unittest.TestCase):
     def _prime_executor(self):
         pass
 
@@ -154,7 +154,7 @@
             t.join()
 
 
-class ProcessPoolShutdownTest(ProcessPoolMixin, ExecutorShutdownTest):
+class ProcessPoolShutdownTest(ProcessPoolMixin, ExecutorShutdownTest, unittest.TestCase):
     def _prime_executor(self):
         pass
 
@@ -190,7 +190,7 @@
             p.join()
 
 
-class WaitTests(unittest.TestCase):
+class WaitTests:
 
     def test_first_completed(self):
         future1 = self.executor.submit(mul, 21, 2)
@@ -291,7 +291,7 @@
         self.assertEqual(set([future2]), pending)
 
 
-class ThreadPoolWaitTests(ThreadPoolMixin, WaitTests):
+class ThreadPoolWaitTests(ThreadPoolMixin, WaitTests, unittest.TestCase):
 
     def test_pending_calls_race(self):
         # Issue #14406: multi-threaded race condition when waiting on all
@@ -309,11 +309,11 @@
             sys.setswitchinterval(oldswitchinterval)
 
 
-class ProcessPoolWaitTests(ProcessPoolMixin, WaitTests):
+class ProcessPoolWaitTests(ProcessPoolMixin, WaitTests, unittest.TestCase):
     pass
 
 
-class AsCompletedTests(unittest.TestCase):
+class AsCompletedTests:
     # TODO(brian@sweetapp.com): Should have a test with a non-zero timeout.
     def test_no_timeout(self):
         future1 = self.executor.submit(mul, 2, 21)
@@ -351,15 +351,15 @@
                          completed_futures)
 
 
-class ThreadPoolAsCompletedTests(ThreadPoolMixin, AsCompletedTests):
+class ThreadPoolAsCompletedTests(ThreadPoolMixin, AsCompletedTests, unittest.TestCase):
     pass
 
 
-class ProcessPoolAsCompletedTests(ProcessPoolMixin, AsCompletedTests):
+class ProcessPoolAsCompletedTests(ProcessPoolMixin, AsCompletedTests, unittest.TestCase):
     pass
 
 
-class ExecutorTest(unittest.TestCase):
+class ExecutorTest:
     # Executor.shutdown() and context manager usage is tested by
     # ExecutorShutdownTest.
     def test_submit(self):
@@ -419,7 +419,7 @@
                         "Stale reference not collected within timeout.")
 
 
-class ThreadPoolExecutorTest(ThreadPoolMixin, ExecutorTest):
+class ThreadPoolExecutorTest(ThreadPoolMixin, ExecutorTest, unittest.TestCase):
     def test_map_submits_without_iteration(self):
         """Tests verifying issue 11777."""
         finished = []
@@ -431,7 +431,7 @@
         self.assertCountEqual(finished, range(10))
 
 
-class ProcessPoolExecutorTest(ProcessPoolMixin, ExecutorTest):
+class ProcessPoolExecutorTest(ProcessPoolMixin, ExecutorTest, unittest.TestCase):
     def test_killed_child(self):
         # When a child process is abruptly terminated, the whole pool gets
         # "broken".
@@ -670,16 +670,7 @@
 @test.support.reap_threads
 def test_main():
     try:
-        test.support.run_unittest(ProcessPoolExecutorTest,
-                                  ThreadPoolExecutorTest,
-                                  ProcessPoolWaitTests,
-                                  ThreadPoolWaitTests,
-                                  ProcessPoolAsCompletedTests,
-                                  ThreadPoolAsCompletedTests,
-                                  FutureTests,
-                                  ProcessPoolShutdownTest,
-                                  ThreadPoolShutdownTest,
-                                  )
+        test.support.run_unittest(__name__)
     finally:
         test.support.reap_children()
 
diff --git a/Lib/test/test_contextlib.py b/Lib/test/test_contextlib.py
index 2892917..b8770c8 100644
--- a/Lib/test/test_contextlib.py
+++ b/Lib/test/test_contextlib.py
@@ -1,5 +1,6 @@
 """Unit tests for contextlib.py, and other context managers."""
 
+import io
 import sys
 import tempfile
 import unittest
@@ -100,15 +101,25 @@
         self.assertEqual(baz.__name__,'baz')
         self.assertEqual(baz.foo, 'bar')
 
-    @unittest.skipIf(sys.flags.optimize >= 2,
-                     "Docstrings are omitted with -O2 and above")
+    @support.requires_docstrings
     def test_contextmanager_doc_attrib(self):
         baz = self._create_contextmanager_attribs()
         self.assertEqual(baz.__doc__, "Whee!")
 
+    @support.requires_docstrings
+    def test_instance_docstring_given_cm_docstring(self):
+        baz = self._create_contextmanager_attribs()(None)
+        self.assertEqual(baz.__doc__, "Whee!")
+
+
 class ClosingTestCase(unittest.TestCase):
 
-    # XXX This needs more work
+    @support.requires_docstrings
+    def test_instance_docs(self):
+        # Issue 19330: ensure context manager instances have good docstrings
+        cm_docstring = closing.__doc__
+        obj = closing(None)
+        self.assertEqual(obj.__doc__, cm_docstring)
 
     def test_closing(self):
         state = []
@@ -204,6 +215,7 @@
 
 
 class mycontext(ContextDecorator):
+    """Example decoration-compatible context manager for testing"""
     started = False
     exc = None
     catch = False
@@ -219,6 +231,13 @@
 
 class TestContextDecorator(unittest.TestCase):
 
+    @support.requires_docstrings
+    def test_instance_docs(self):
+        # Issue 19330: ensure context manager instances have good docstrings
+        cm_docstring = mycontext.__doc__
+        obj = mycontext()
+        self.assertEqual(obj.__doc__, cm_docstring)
+
     def test_contextdecorator(self):
         context = mycontext()
         with context as result:
@@ -372,6 +391,13 @@
 
 class TestExitStack(unittest.TestCase):
 
+    @support.requires_docstrings
+    def test_instance_docs(self):
+        # Issue 19330: ensure context manager instances have good docstrings
+        cm_docstring = ExitStack.__doc__
+        obj = ExitStack()
+        self.assertEqual(obj.__doc__, cm_docstring)
+
     def test_no_resources(self):
         with ExitStack():
             pass
@@ -631,28 +657,111 @@
         stack.push(cm)
         self.assertIs(stack._exit_callbacks[-1], cm)
 
-class TestIgnored(unittest.TestCase):
+class TestRedirectStdout(unittest.TestCase):
+
+    @support.requires_docstrings
+    def test_instance_docs(self):
+        # Issue 19330: ensure context manager instances have good docstrings
+        cm_docstring = redirect_stdout.__doc__
+        obj = redirect_stdout(None)
+        self.assertEqual(obj.__doc__, cm_docstring)
+
+    def test_no_redirect_in_init(self):
+        orig_stdout = sys.stdout
+        redirect_stdout(None)
+        self.assertIs(sys.stdout, orig_stdout)
+
+    def test_redirect_to_string_io(self):
+        f = io.StringIO()
+        msg = "Consider an API like help(), which prints directly to stdout"
+        orig_stdout = sys.stdout
+        with redirect_stdout(f):
+            print(msg)
+        self.assertIs(sys.stdout, orig_stdout)
+        s = f.getvalue().strip()
+        self.assertEqual(s, msg)
+
+    def test_enter_result_is_target(self):
+        f = io.StringIO()
+        with redirect_stdout(f) as enter_result:
+            self.assertIs(enter_result, f)
+
+    def test_cm_is_reusable(self):
+        f = io.StringIO()
+        write_to_f = redirect_stdout(f)
+        orig_stdout = sys.stdout
+        with write_to_f:
+            print("Hello", end=" ")
+        with write_to_f:
+            print("World!")
+        self.assertIs(sys.stdout, orig_stdout)
+        s = f.getvalue()
+        self.assertEqual(s, "Hello World!\n")
+
+    def test_cm_is_reentrant(self):
+        f = io.StringIO()
+        write_to_f = redirect_stdout(f)
+        orig_stdout = sys.stdout
+        with write_to_f:
+            print("Hello", end=" ")
+            with write_to_f:
+                print("World!")
+        self.assertIs(sys.stdout, orig_stdout)
+        s = f.getvalue()
+        self.assertEqual(s, "Hello World!\n")
+
+
+class TestSuppress(unittest.TestCase):
+
+    @support.requires_docstrings
+    def test_instance_docs(self):
+        # Issue 19330: ensure context manager instances have good docstrings
+        cm_docstring = suppress.__doc__
+        obj = suppress()
+        self.assertEqual(obj.__doc__, cm_docstring)
+
+    def test_no_result_from_enter(self):
+        with suppress(ValueError) as enter_result:
+            self.assertIsNone(enter_result)
 
     def test_no_exception(self):
-
-        with ignored(ValueError):
+        with suppress(ValueError):
             self.assertEqual(pow(2, 5), 32)
 
     def test_exact_exception(self):
-
-        with ignored(TypeError):
-            len(5)
-
-    def test_multiple_exception_args(self):
-
-        with ignored(ZeroDivisionError, TypeError):
+        with suppress(TypeError):
             len(5)
 
     def test_exception_hierarchy(self):
-
-        with ignored(LookupError):
+        with suppress(LookupError):
             'Hello'[50]
 
+    def test_other_exception(self):
+        with self.assertRaises(ZeroDivisionError):
+            with suppress(TypeError):
+                1/0
+
+    def test_no_args(self):
+        with self.assertRaises(ZeroDivisionError):
+            with suppress():
+                1/0
+
+    def test_multiple_exception_args(self):
+        with suppress(ZeroDivisionError, TypeError):
+            1/0
+        with suppress(ZeroDivisionError, TypeError):
+            len(5)
+
+    def test_cm_is_reentrant(self):
+        ignore_exceptions = suppress(Exception)
+        with ignore_exceptions:
+            pass
+        with ignore_exceptions:
+            len(5)
+        with ignore_exceptions:
+            1/0
+            with ignore_exceptions: # Check nested usage
+                len(5)
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
index 559e51f..cf0b09c 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -905,78 +905,77 @@
         dialect = sniffer.sniff(self.sample9)
         self.assertTrue(dialect.doublequote)
 
-if not hasattr(sys, "gettotalrefcount"):
-    if support.verbose: print("*** skipping leakage tests ***")
-else:
-    class NUL:
-        def write(s, *args):
-            pass
-        writelines = write
+class NUL:
+    def write(s, *args):
+        pass
+    writelines = write
 
-    class TestLeaks(unittest.TestCase):
-        def test_create_read(self):
-            delta = 0
-            lastrc = sys.gettotalrefcount()
-            for i in range(20):
-                gc.collect()
-                self.assertEqual(gc.garbage, [])
-                rc = sys.gettotalrefcount()
-                csv.reader(["a,b,c\r\n"])
-                csv.reader(["a,b,c\r\n"])
-                csv.reader(["a,b,c\r\n"])
-                delta = rc-lastrc
-                lastrc = rc
-            # if csv.reader() leaks, last delta should be 3 or more
-            self.assertEqual(delta < 3, True)
+@unittest.skipUnless(hasattr(sys, "gettotalrefcount"),
+                     'requires sys.gettotalrefcount()')
+class TestLeaks(unittest.TestCase):
+    def test_create_read(self):
+        delta = 0
+        lastrc = sys.gettotalrefcount()
+        for i in range(20):
+            gc.collect()
+            self.assertEqual(gc.garbage, [])
+            rc = sys.gettotalrefcount()
+            csv.reader(["a,b,c\r\n"])
+            csv.reader(["a,b,c\r\n"])
+            csv.reader(["a,b,c\r\n"])
+            delta = rc-lastrc
+            lastrc = rc
+        # if csv.reader() leaks, last delta should be 3 or more
+        self.assertEqual(delta < 3, True)
 
-        def test_create_write(self):
-            delta = 0
-            lastrc = sys.gettotalrefcount()
-            s = NUL()
-            for i in range(20):
-                gc.collect()
-                self.assertEqual(gc.garbage, [])
-                rc = sys.gettotalrefcount()
-                csv.writer(s)
-                csv.writer(s)
-                csv.writer(s)
-                delta = rc-lastrc
-                lastrc = rc
-            # if csv.writer() leaks, last delta should be 3 or more
-            self.assertEqual(delta < 3, True)
+    def test_create_write(self):
+        delta = 0
+        lastrc = sys.gettotalrefcount()
+        s = NUL()
+        for i in range(20):
+            gc.collect()
+            self.assertEqual(gc.garbage, [])
+            rc = sys.gettotalrefcount()
+            csv.writer(s)
+            csv.writer(s)
+            csv.writer(s)
+            delta = rc-lastrc
+            lastrc = rc
+        # if csv.writer() leaks, last delta should be 3 or more
+        self.assertEqual(delta < 3, True)
 
-        def test_read(self):
-            delta = 0
-            rows = ["a,b,c\r\n"]*5
-            lastrc = sys.gettotalrefcount()
-            for i in range(20):
-                gc.collect()
-                self.assertEqual(gc.garbage, [])
-                rc = sys.gettotalrefcount()
-                rdr = csv.reader(rows)
-                for row in rdr:
-                    pass
-                delta = rc-lastrc
-                lastrc = rc
-            # if reader leaks during read, delta should be 5 or more
-            self.assertEqual(delta < 5, True)
+    def test_read(self):
+        delta = 0
+        rows = ["a,b,c\r\n"]*5
+        lastrc = sys.gettotalrefcount()
+        for i in range(20):
+            gc.collect()
+            self.assertEqual(gc.garbage, [])
+            rc = sys.gettotalrefcount()
+            rdr = csv.reader(rows)
+            for row in rdr:
+                pass
+            delta = rc-lastrc
+            lastrc = rc
+        # if reader leaks during read, delta should be 5 or more
+        self.assertEqual(delta < 5, True)
 
-        def test_write(self):
-            delta = 0
-            rows = [[1,2,3]]*5
-            s = NUL()
-            lastrc = sys.gettotalrefcount()
-            for i in range(20):
-                gc.collect()
-                self.assertEqual(gc.garbage, [])
-                rc = sys.gettotalrefcount()
-                writer = csv.writer(s)
-                for row in rows:
-                    writer.writerow(row)
-                delta = rc-lastrc
-                lastrc = rc
-            # if writer leaks during write, last delta should be 5 or more
-            self.assertEqual(delta < 5, True)
+    def test_write(self):
+        delta = 0
+        rows = [[1,2,3]]*5
+        s = NUL()
+        lastrc = sys.gettotalrefcount()
+        for i in range(20):
+            gc.collect()
+            self.assertEqual(gc.garbage, [])
+            rc = sys.gettotalrefcount()
+            writer = csv.writer(s)
+            for row in rows:
+                writer.writerow(row)
+            delta = rc-lastrc
+            lastrc = rc
+        # if writer leaks during write, last delta should be 5 or more
+        self.assertEqual(delta < 5, True)
 
 class TestUnicode(unittest.TestCase):
 
diff --git a/Lib/test/test_dbm_dumb.py b/Lib/test/test_dbm_dumb.py
index e233929..208bc4c 100644
--- a/Lib/test/test_dbm_dumb.py
+++ b/Lib/test/test_dbm_dumb.py
@@ -37,11 +37,9 @@
         self.read_helper(f)
         f.close()
 
+    @unittest.skipUnless(hasattr(os, 'umask'), 'test needs os.umask()')
+    @unittest.skipUnless(hasattr(os, 'chmod'), 'test needs os.chmod()')
     def test_dumbdbm_creation_mode(self):
-        # On platforms without chmod, don't do anything.
-        if not (hasattr(os, 'chmod') and hasattr(os, 'umask')):
-            return
-
         try:
             old_umask = os.umask(0o002)
             f = dumbdbm.open(_fname, 'c', 0o637)
diff --git a/Lib/test/test_dbm_gnu.py b/Lib/test/test_dbm_gnu.py
index bf62946..4fb66c5 100755
--- a/Lib/test/test_dbm_gnu.py
+++ b/Lib/test/test_dbm_gnu.py
@@ -24,6 +24,7 @@
         self.g[b'bytes'] = b'data'
         key_set = set(self.g.keys())
         self.assertEqual(key_set, set([b'a', b'bytes', b'12345678910']))
+        self.assertIn('a', self.g)
         self.assertIn(b'a', self.g)
         self.assertEqual(self.g[b'bytes'], b'data')
         key = self.g.firstkey()
diff --git a/Lib/test/test_dbm_ndbm.py b/Lib/test/test_dbm_ndbm.py
index f9d3bef..b57e1f0 100755
--- a/Lib/test/test_dbm_ndbm.py
+++ b/Lib/test/test_dbm_ndbm.py
@@ -24,6 +24,7 @@
         self.d[b'bytes'] = b'data'
         self.d['12345678910'] = '019237410982340912840198242'
         self.d.keys()
+        self.assertIn('a', self.d)
         self.assertIn(b'a', self.d)
         self.assertEqual(self.d[b'bytes'], b'data')
         self.d.close()
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index f0d6d1c..595d540 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4517,6 +4517,13 @@
         self.assertRaises(TypeError, type.__dict__['__qualname__'].__set__,
                           str, 'Oink')
 
+        global Y
+        class Y:
+            class Inside:
+                pass
+        self.assertEqual(Y.__qualname__, 'Y')
+        self.assertEqual(Y.Inside.__qualname__, 'Y.Inside')
+
     def test_qualname_dict(self):
         ns = {'__qualname__': 'some.name'}
         tp = type('Foo', (), ns)
diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py
index d1f3192..a388959 100644
--- a/Lib/test/test_dict.py
+++ b/Lib/test/test_dict.py
@@ -45,6 +45,9 @@
         self.assertEqual(set(d.keys()), set())
         d = {'a': 1, 'b': 2}
         k = d.keys()
+        self.assertEqual(set(k), {'a', 'b'})
+        self.assertIn('a', k)
+        self.assertIn('b', k)
         self.assertIn('a', d)
         self.assertIn('b', d)
         self.assertRaises(TypeError, d.keys, None)
diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py
index 8610c5d..2b54678 100644
--- a/Lib/test/test_dis.py
+++ b/Lib/test/test_dis.py
@@ -8,6 +8,7 @@
 import dis
 import io
 import types
+import contextlib
 
 class _C:
     def __init__(self, x):
@@ -176,30 +177,20 @@
 class DisTests(unittest.TestCase):
 
     def get_disassembly(self, func, lasti=-1, wrapper=True):
-        s = io.StringIO()
-        save_stdout = sys.stdout
-        sys.stdout = s
-        try:
+        # We want to test the default printing behaviour, not the file arg
+        output = io.StringIO()
+        with contextlib.redirect_stdout(output):
             if wrapper:
                 dis.dis(func)
             else:
                 dis.disassemble(func, lasti)
-        finally:
-            sys.stdout = save_stdout
-        # Trim trailing blanks (if any).
-        return [line.rstrip() for line in s.getvalue().splitlines()]
+        return output.getvalue()
 
     def get_disassemble_as_string(self, func, lasti=-1):
-        return '\n'.join(self.get_disassembly(func, lasti, False))
+        return self.get_disassembly(func, lasti, False)
 
     def do_disassembly_test(self, func, expected):
-        lines = self.get_disassembly(func)
-        expected = expected.splitlines()
-        if expected != lines:
-            self.fail(
-                "events did not match expectation:\n" +
-                "\n".join(difflib.ndiff(expected,
-                                        lines)))
+        self.assertEqual(self.get_disassembly(func), expected)
 
     def test_opmap(self):
         self.assertEqual(dis.opmap["NOP"], 9)
@@ -290,6 +281,19 @@
     def test_dis_object(self):
         self.assertRaises(TypeError, dis.dis, object())
 
+class DisWithFileTests(DisTests):
+
+    # Run the tests again, using the file arg instead of print
+    def get_disassembly(self, func, lasti=-1, wrapper=True):
+        output = io.StringIO()
+        if wrapper:
+            dis.dis(func, file=output)
+        else:
+            dis.disassemble(func, lasti, file=output)
+        return output.getvalue()
+
+
+
 code_info_code_info = """\
 Name:              code_info
 Filename:          (.*)
@@ -482,26 +486,29 @@
         print("OK, now we're done")
 
 # End fodder for opinfo generation tests
-expected_outer_offset = 1 - outer.__code__.co_firstlineno
-expected_jumpy_offset = 1 - jumpy.__code__.co_firstlineno
+expected_outer_line = 1
+_line_offset = outer.__code__.co_firstlineno - 1
 code_object_f = outer.__code__.co_consts[3]
+expected_f_line = code_object_f.co_firstlineno - _line_offset
 code_object_inner = code_object_f.co_consts[3]
+expected_inner_line = code_object_inner.co_firstlineno - _line_offset
+expected_jumpy_line = 1
 
 # The following lines are useful to regenerate the expected results after
 # either the fodder is modified or the bytecode generation changes
 # After regeneration, update the references to code_object_f and
 # code_object_inner before rerunning the tests
 
-#_instructions = dis.get_instructions(outer, line_offset=expected_outer_offset)
+#_instructions = dis.get_instructions(outer, first_line=expected_outer_line)
 #print('expected_opinfo_outer = [\n  ',
       #',\n  '.join(map(str, _instructions)), ',\n]', sep='')
-#_instructions = dis.get_instructions(outer(), line_offset=expected_outer_offset)
+#_instructions = dis.get_instructions(outer(), first_line=expected_outer_line)
 #print('expected_opinfo_f = [\n  ',
       #',\n  '.join(map(str, _instructions)), ',\n]', sep='')
-#_instructions = dis.get_instructions(outer()(), line_offset=expected_outer_offset)
+#_instructions = dis.get_instructions(outer()(), first_line=expected_outer_line)
 #print('expected_opinfo_inner = [\n  ',
       #',\n  '.join(map(str, _instructions)), ',\n]', sep='')
-#_instructions = dis.get_instructions(jumpy, line_offset=expected_jumpy_offset)
+#_instructions = dis.get_instructions(jumpy, first_line=expected_jumpy_line)
 #print('expected_opinfo_jumpy = [\n  ',
       #',\n  '.join(map(str, _instructions)), ',\n]', sep='')
 
@@ -671,42 +678,75 @@
   Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=243, starts_line=None, is_jump_target=False),
 ]
 
+# One last piece of inspect fodder to check the default line number handling
+def simple(): pass
+expected_opinfo_simple = [
+  Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=0, starts_line=simple.__code__.co_firstlineno, is_jump_target=False),
+  Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=3, starts_line=None, is_jump_target=False)
+]
+
+
 class InstructionTests(BytecodeTestCase):
+
+    def test_default_first_line(self):
+        actual = dis.get_instructions(simple)
+        self.assertEqual(list(actual), expected_opinfo_simple)
+
+    def test_first_line_set_to_None(self):
+        actual = dis.get_instructions(simple, first_line=None)
+        self.assertEqual(list(actual), expected_opinfo_simple)
+
     def test_outer(self):
-        self.assertBytecodeExactlyMatches(outer, expected_opinfo_outer,
-                                          line_offset=expected_outer_offset)
+        actual = dis.get_instructions(outer, first_line=expected_outer_line)
+        self.assertEqual(list(actual), expected_opinfo_outer)
 
     def test_nested(self):
         with captured_stdout():
             f = outer()
-        self.assertBytecodeExactlyMatches(f, expected_opinfo_f,
-                                          line_offset=expected_outer_offset)
+        actual = dis.get_instructions(f, first_line=expected_f_line)
+        self.assertEqual(list(actual), expected_opinfo_f)
 
     def test_doubly_nested(self):
         with captured_stdout():
             inner = outer()()
-        self.assertBytecodeExactlyMatches(inner, expected_opinfo_inner,
-                                          line_offset=expected_outer_offset)
+        actual = dis.get_instructions(inner, first_line=expected_inner_line)
+        self.assertEqual(list(actual), expected_opinfo_inner)
 
     def test_jumpy(self):
-        self.assertBytecodeExactlyMatches(jumpy, expected_opinfo_jumpy,
-                                          line_offset=expected_jumpy_offset)
+        actual = dis.get_instructions(jumpy, first_line=expected_jumpy_line)
+        self.assertEqual(list(actual), expected_opinfo_jumpy)
 
+# get_instructions has its own tests above, so can rely on it to validate
+# the object oriented API
 class BytecodeTests(unittest.TestCase):
     def test_instantiation(self):
         # Test with function, method, code string and code object
         for obj in [_f, _C(1).__init__, "a=1", _f.__code__]:
-            b = dis.Bytecode(obj)
-            self.assertIsInstance(b.codeobj, types.CodeType)
+            with self.subTest(obj=obj):
+                b = dis.Bytecode(obj)
+                self.assertIsInstance(b.codeobj, types.CodeType)
 
         self.assertRaises(TypeError, dis.Bytecode, object())
 
     def test_iteration(self):
-        b = dis.Bytecode(_f)
-        for instr in b:
-            self.assertIsInstance(instr, dis.Instruction)
+        for obj in [_f, _C(1).__init__, "a=1", _f.__code__]:
+            with self.subTest(obj=obj):
+                via_object = list(dis.Bytecode(obj))
+                via_generator = list(dis.get_instructions(obj))
+                self.assertEqual(via_object, via_generator)
 
-        assert len(list(b)) > 0  # Iterating should yield at least 1 instruction
+    def test_explicit_first_line(self):
+        actual = dis.Bytecode(outer, first_line=expected_outer_line)
+        self.assertEqual(list(actual), expected_opinfo_outer)
+
+    def test_source_line_in_disassembly(self):
+        # Use the line in the source code
+        actual = dis.Bytecode(simple).dis()[:3]
+        expected = "{:>3}".format(simple.__code__.co_firstlineno)
+        self.assertEqual(actual, expected)
+        # Use an explicit first line number
+        actual = dis.Bytecode(simple, first_line=350).dis()[:3]
+        self.assertEqual(actual, "350")
 
     def test_info(self):
         self.maxDiff = 1000
@@ -714,16 +754,14 @@
             b = dis.Bytecode(x)
             self.assertRegex(b.info(), expected)
 
-    def test_display_code(self):
-        b = dis.Bytecode(_f)
-        output = io.StringIO()
-        b.display_code(file=output)
-        result = [line.rstrip() for line in output.getvalue().splitlines()]
-        self.assertEqual(result, dis_f.splitlines())
+    def test_disassembled(self):
+        actual = dis.Bytecode(_f).dis()
+        self.assertEqual(actual, dis_f)
 
 
 def test_main():
-    run_unittest(DisTests, CodeInfoTests, InstructionTests, BytecodeTests)
+    run_unittest(DisTests, DisWithFileTests, CodeInfoTests,
+                 InstructionTests, BytecodeTests)
 
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_dynamicclassattribute.py b/Lib/test/test_dynamicclassattribute.py
new file mode 100644
index 0000000..079d6c3
--- /dev/null
+++ b/Lib/test/test_dynamicclassattribute.py
@@ -0,0 +1,304 @@
+# Test case for DynamicClassAttribute
+# more tests are in test_descr
+
+import abc
+import sys
+import unittest
+from test.support import run_unittest
+from types import DynamicClassAttribute
+
+class PropertyBase(Exception):
+    pass
+
+class PropertyGet(PropertyBase):
+    pass
+
+class PropertySet(PropertyBase):
+    pass
+
+class PropertyDel(PropertyBase):
+    pass
+
+class BaseClass(object):
+    def __init__(self):
+        self._spam = 5
+
+    @DynamicClassAttribute
+    def spam(self):
+        """BaseClass.getter"""
+        return self._spam
+
+    @spam.setter
+    def spam(self, value):
+        self._spam = value
+
+    @spam.deleter
+    def spam(self):
+        del self._spam
+
+class SubClass(BaseClass):
+
+    spam = BaseClass.__dict__['spam']
+
+    @spam.getter
+    def spam(self):
+        """SubClass.getter"""
+        raise PropertyGet(self._spam)
+
+    @spam.setter
+    def spam(self, value):
+        raise PropertySet(self._spam)
+
+    @spam.deleter
+    def spam(self):
+        raise PropertyDel(self._spam)
+
+class PropertyDocBase(object):
+    _spam = 1
+    def _get_spam(self):
+        return self._spam
+    spam = DynamicClassAttribute(_get_spam, doc="spam spam spam")
+
+class PropertyDocSub(PropertyDocBase):
+    spam = PropertyDocBase.__dict__['spam']
+    @spam.getter
+    def spam(self):
+        """The decorator does not use this doc string"""
+        return self._spam
+
+class PropertySubNewGetter(BaseClass):
+    spam = BaseClass.__dict__['spam']
+    @spam.getter
+    def spam(self):
+        """new docstring"""
+        return 5
+
+class PropertyNewGetter(object):
+    @DynamicClassAttribute
+    def spam(self):
+        """original docstring"""
+        return 1
+    @spam.getter
+    def spam(self):
+        """new docstring"""
+        return 8
+
+class ClassWithAbstractVirtualProperty(metaclass=abc.ABCMeta):
+    @DynamicClassAttribute
+    @abc.abstractmethod
+    def color():
+        pass
+
+class ClassWithPropertyAbstractVirtual(metaclass=abc.ABCMeta):
+    @abc.abstractmethod
+    @DynamicClassAttribute
+    def color():
+        pass
+
+class PropertyTests(unittest.TestCase):
+    def test_property_decorator_baseclass(self):
+        # see #1620
+        base = BaseClass()
+        self.assertEqual(base.spam, 5)
+        self.assertEqual(base._spam, 5)
+        base.spam = 10
+        self.assertEqual(base.spam, 10)
+        self.assertEqual(base._spam, 10)
+        delattr(base, "spam")
+        self.assertTrue(not hasattr(base, "spam"))
+        self.assertTrue(not hasattr(base, "_spam"))
+        base.spam = 20
+        self.assertEqual(base.spam, 20)
+        self.assertEqual(base._spam, 20)
+
+    def test_property_decorator_subclass(self):
+        # see #1620
+        sub = SubClass()
+        self.assertRaises(PropertyGet, getattr, sub, "spam")
+        self.assertRaises(PropertySet, setattr, sub, "spam", None)
+        self.assertRaises(PropertyDel, delattr, sub, "spam")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    def test_property_decorator_subclass_doc(self):
+        sub = SubClass()
+        self.assertEqual(sub.__class__.__dict__['spam'].__doc__, "SubClass.getter")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    def test_property_decorator_baseclass_doc(self):
+        base = BaseClass()
+        self.assertEqual(base.__class__.__dict__['spam'].__doc__, "BaseClass.getter")
+
+    def test_property_decorator_doc(self):
+        base = PropertyDocBase()
+        sub = PropertyDocSub()
+        self.assertEqual(base.__class__.__dict__['spam'].__doc__, "spam spam spam")
+        self.assertEqual(sub.__class__.__dict__['spam'].__doc__, "spam spam spam")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    def test_property_getter_doc_override(self):
+        newgettersub = PropertySubNewGetter()
+        self.assertEqual(newgettersub.spam, 5)
+        self.assertEqual(newgettersub.__class__.__dict__['spam'].__doc__, "new docstring")
+        newgetter = PropertyNewGetter()
+        self.assertEqual(newgetter.spam, 8)
+        self.assertEqual(newgetter.__class__.__dict__['spam'].__doc__, "new docstring")
+
+    def test_property___isabstractmethod__descriptor(self):
+        for val in (True, False, [], [1], '', '1'):
+            class C(object):
+                def foo(self):
+                    pass
+                foo.__isabstractmethod__ = val
+                foo = DynamicClassAttribute(foo)
+            self.assertIs(C.__dict__['foo'].__isabstractmethod__, bool(val))
+
+        # check that the DynamicClassAttribute's __isabstractmethod__ descriptor does the
+        # right thing when presented with a value that fails truth testing:
+        class NotBool(object):
+            def __nonzero__(self):
+                raise ValueError()
+            __len__ = __nonzero__
+        with self.assertRaises(ValueError):
+            class C(object):
+                def foo(self):
+                    pass
+                foo.__isabstractmethod__ = NotBool()
+                foo = DynamicClassAttribute(foo)
+
+    def test_abstract_virtual(self):
+        self.assertRaises(TypeError, ClassWithAbstractVirtualProperty)
+        self.assertRaises(TypeError, ClassWithPropertyAbstractVirtual)
+        class APV(ClassWithPropertyAbstractVirtual):
+            pass
+        self.assertRaises(TypeError, APV)
+        class AVP(ClassWithAbstractVirtualProperty):
+            pass
+        self.assertRaises(TypeError, AVP)
+        class Okay1(ClassWithAbstractVirtualProperty):
+            @DynamicClassAttribute
+            def color(self):
+                return self._color
+            def __init__(self):
+                self._color = 'cyan'
+        with self.assertRaises(AttributeError):
+            Okay1.color
+        self.assertEqual(Okay1().color, 'cyan')
+        class Okay2(ClassWithAbstractVirtualProperty):
+            @DynamicClassAttribute
+            def color(self):
+                return self._color
+            def __init__(self):
+                self._color = 'magenta'
+        with self.assertRaises(AttributeError):
+            Okay2.color
+        self.assertEqual(Okay2().color, 'magenta')
+
+
+# Issue 5890: subclasses of DynamicClassAttribute do not preserve method __doc__ strings
+class PropertySub(DynamicClassAttribute):
+    """This is a subclass of DynamicClassAttribute"""
+
+class PropertySubSlots(DynamicClassAttribute):
+    """This is a subclass of DynamicClassAttribute that defines __slots__"""
+    __slots__ = ()
+
+class PropertySubclassTests(unittest.TestCase):
+
+    @unittest.skipIf(hasattr(PropertySubSlots, '__doc__'),
+            "__doc__ is already present, __slots__ will have no effect")
+    def test_slots_docstring_copy_exception(self):
+        try:
+            class Foo(object):
+                @PropertySubSlots
+                def spam(self):
+                    """Trying to copy this docstring will raise an exception"""
+                    return 1
+                print('\n',spam.__doc__)
+        except AttributeError:
+            pass
+        else:
+            raise Exception("AttributeError not raised")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    def test_docstring_copy(self):
+        class Foo(object):
+            @PropertySub
+            def spam(self):
+                """spam wrapped in DynamicClassAttribute subclass"""
+                return 1
+        self.assertEqual(
+            Foo.__dict__['spam'].__doc__,
+            "spam wrapped in DynamicClassAttribute subclass")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    def test_property_setter_copies_getter_docstring(self):
+        class Foo(object):
+            def __init__(self): self._spam = 1
+            @PropertySub
+            def spam(self):
+                """spam wrapped in DynamicClassAttribute subclass"""
+                return self._spam
+            @spam.setter
+            def spam(self, value):
+                """this docstring is ignored"""
+                self._spam = value
+        foo = Foo()
+        self.assertEqual(foo.spam, 1)
+        foo.spam = 2
+        self.assertEqual(foo.spam, 2)
+        self.assertEqual(
+            Foo.__dict__['spam'].__doc__,
+            "spam wrapped in DynamicClassAttribute subclass")
+        class FooSub(Foo):
+            spam = Foo.__dict__['spam']
+            @spam.setter
+            def spam(self, value):
+                """another ignored docstring"""
+                self._spam = 'eggs'
+        foosub = FooSub()
+        self.assertEqual(foosub.spam, 1)
+        foosub.spam = 7
+        self.assertEqual(foosub.spam, 'eggs')
+        self.assertEqual(
+            FooSub.__dict__['spam'].__doc__,
+            "spam wrapped in DynamicClassAttribute subclass")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    def test_property_new_getter_new_docstring(self):
+
+        class Foo(object):
+            @PropertySub
+            def spam(self):
+                """a docstring"""
+                return 1
+            @spam.getter
+            def spam(self):
+                """a new docstring"""
+                return 2
+        self.assertEqual(Foo.__dict__['spam'].__doc__, "a new docstring")
+        class FooBase(object):
+            @PropertySub
+            def spam(self):
+                """a docstring"""
+                return 1
+        class Foo2(FooBase):
+            spam = FooBase.__dict__['spam']
+            @spam.getter
+            def spam(self):
+                """a new docstring"""
+                return 2
+        self.assertEqual(Foo.__dict__['spam'].__doc__, "a new docstring")
+
+
+
+def test_main():
+    run_unittest(PropertyTests, PropertySubclassTests)
+
+if __name__ == '__main__':
+    test_main()
diff --git a/Lib/test/test_email/__init__.py b/Lib/test/test_email/__init__.py
index f206ace..d8896ee 100644
--- a/Lib/test/test_email/__init__.py
+++ b/Lib/test/test_email/__init__.py
@@ -2,6 +2,7 @@
 import sys
 import unittest
 import test.support
+import collections
 import email
 from email.message import Message
 from email._policybase import compat32
@@ -42,6 +43,8 @@
     # here we make minimal changes in the test_email tests compared to their
     # pre-3.3 state.
     policy = compat32
+    # Likewise, the default message object is Message.
+    message = Message
 
     def __init__(self, *args, **kw):
         super().__init__(*args, **kw)
@@ -54,11 +57,23 @@
         with openfile(filename) as fp:
             return email.message_from_file(fp, policy=self.policy)
 
-    def _str_msg(self, string, message=Message, policy=None):
+    def _str_msg(self, string, message=None, policy=None):
         if policy is None:
             policy = self.policy
+        if message is None:
+            message = self.message
         return email.message_from_string(string, message, policy=policy)
 
+    def _bytes_msg(self, bytestring, message=None, policy=None):
+        if policy is None:
+            policy = self.policy
+        if message is None:
+            message = self.message
+        return email.message_from_bytes(bytestring, message, policy=policy)
+
+    def _make_message(self):
+        return self.message(policy=self.policy)
+
     def _bytes_repr(self, b):
         return [repr(x) for x in b.splitlines(keepends=True)]
 
@@ -123,6 +138,7 @@
 
     """
     paramdicts = {}
+    testers = collections.defaultdict(list)
     for name, attr in cls.__dict__.items():
         if name.endswith('_params'):
             if not hasattr(attr, 'keys'):
@@ -134,7 +150,15 @@
                     d[n] = x
                 attr = d
             paramdicts[name[:-7] + '_as_'] = attr
+        if '_as_' in name:
+            testers[name.split('_as_')[0] + '_as_'].append(name)
     testfuncs = {}
+    for name in paramdicts:
+        if name not in testers:
+            raise ValueError("No tester found for {}".format(name))
+    for name in testers:
+        if name not in paramdicts:
+            raise ValueError("No params found for {}".format(name))
     for name, attr in cls.__dict__.items():
         for paramsname, paramsdict in paramdicts.items():
             if name.startswith(paramsname):
diff --git a/Lib/test/test_email/test_contentmanager.py b/Lib/test/test_email/test_contentmanager.py
new file mode 100644
index 0000000..1629e2d
--- /dev/null
+++ b/Lib/test/test_email/test_contentmanager.py
@@ -0,0 +1,796 @@
+import unittest
+from test.test_email import TestEmailBase, parameterize
+import textwrap
+from email import policy
+from email.message import EmailMessage
+from email.contentmanager import ContentManager, raw_data_manager
+
+
+@parameterize
+class TestContentManager(TestEmailBase):
+
+    policy = policy.default
+    message = EmailMessage
+
+    get_key_params = {
+        'full_type':        (1, 'text/plain',),
+        'maintype_only':    (2, 'text',),
+        'null_key':         (3, '',),
+        }
+
+    def get_key_as_get_content_key(self, order, key):
+        def foo_getter(msg, foo=None):
+            bar = msg['X-Bar-Header']
+            return foo, bar
+        cm = ContentManager()
+        cm.add_get_handler(key, foo_getter)
+        m = self._make_message()
+        m['Content-Type'] = 'text/plain'
+        m['X-Bar-Header'] = 'foo'
+        self.assertEqual(cm.get_content(m, foo='bar'), ('bar', 'foo'))
+
+    def get_key_as_get_content_key_order(self, order, key):
+        def bar_getter(msg):
+            return msg['X-Bar-Header']
+        def foo_getter(msg):
+            return msg['X-Foo-Header']
+        cm = ContentManager()
+        cm.add_get_handler(key, foo_getter)
+        for precedence, key in self.get_key_params.values():
+            if precedence > order:
+                cm.add_get_handler(key, bar_getter)
+        m = self._make_message()
+        m['Content-Type'] = 'text/plain'
+        m['X-Bar-Header'] = 'bar'
+        m['X-Foo-Header'] = 'foo'
+        self.assertEqual(cm.get_content(m), ('foo'))
+
+    def test_get_content_raises_if_unknown_mimetype_and_no_default(self):
+        cm = ContentManager()
+        m = self._make_message()
+        m['Content-Type'] = 'text/plain'
+        with self.assertRaisesRegex(KeyError, 'text/plain'):
+            cm.get_content(m)
+
+    class BaseThing(str):
+        pass
+    baseobject_full_path = __name__ + '.' + 'TestContentManager.BaseThing'
+    class Thing(BaseThing):
+        pass
+    testobject_full_path = __name__ + '.' + 'TestContentManager.Thing'
+
+    set_key_params = {
+        'type':             (0,  Thing,),
+        'full_path':        (1,  testobject_full_path,),
+        'qualname':         (2,  'TestContentManager.Thing',),
+        'name':             (3,  'Thing',),
+        'base_type':        (4,  BaseThing,),
+        'base_full_path':   (5,  baseobject_full_path,),
+        'base_qualname':    (6,  'TestContentManager.BaseThing',),
+        'base_name':        (7,  'BaseThing',),
+        'str_type':         (8,  str,),
+        'str_full_path':    (9,  'builtins.str',),
+        'str_name':         (10, 'str',),   # str name and qualname are the same
+        'null_key':         (11, None,),
+        }
+
+    def set_key_as_set_content_key(self, order, key):
+        def foo_setter(msg, obj, foo=None):
+            msg['X-Foo-Header'] = foo
+            msg.set_payload(obj)
+        cm = ContentManager()
+        cm.add_set_handler(key, foo_setter)
+        m = self._make_message()
+        msg_obj = self.Thing()
+        cm.set_content(m, msg_obj, foo='bar')
+        self.assertEqual(m['X-Foo-Header'], 'bar')
+        self.assertEqual(m.get_payload(), msg_obj)
+
+    def set_key_as_set_content_key_order(self, order, key):
+        def foo_setter(msg, obj):
+            msg['X-FooBar-Header'] = 'foo'
+            msg.set_payload(obj)
+        def bar_setter(msg, obj):
+            msg['X-FooBar-Header'] = 'bar'
+        cm = ContentManager()
+        cm.add_set_handler(key, foo_setter)
+        for precedence, key in self.get_key_params.values():
+            if precedence > order:
+                cm.add_set_handler(key, bar_setter)
+        m = self._make_message()
+        msg_obj = self.Thing()
+        cm.set_content(m, msg_obj)
+        self.assertEqual(m['X-FooBar-Header'], 'foo')
+        self.assertEqual(m.get_payload(), msg_obj)
+
+    def test_set_content_raises_if_unknown_type_and_no_default(self):
+        cm = ContentManager()
+        m = self._make_message()
+        msg_obj = self.Thing()
+        with self.assertRaisesRegex(KeyError, self.testobject_full_path):
+            cm.set_content(m, msg_obj)
+
+    def test_set_content_raises_if_called_on_multipart(self):
+        cm = ContentManager()
+        m = self._make_message()
+        m['Content-Type'] = 'multipart/foo'
+        with self.assertRaises(TypeError):
+            cm.set_content(m, 'test')
+
+    def test_set_content_calls_clear_content(self):
+        m = self._make_message()
+        m['Content-Foo'] = 'bar'
+        m['Content-Type'] = 'text/html'
+        m['To'] = 'test'
+        m.set_payload('abc')
+        cm = ContentManager()
+        cm.add_set_handler(str, lambda *args, **kw: None)
+        m.set_content('xyz', content_manager=cm)
+        self.assertIsNone(m['Content-Foo'])
+        self.assertIsNone(m['Content-Type'])
+        self.assertEqual(m['To'], 'test')
+        self.assertIsNone(m.get_payload())
+
+
+@parameterize
+class TestRawDataManager(TestEmailBase):
+    # Note: these tests are dependent on the order in which headers are added
+    # to the message objects by the code.  There's no defined ordering in
+    # RFC5322/MIME, so this makes the tests more fragile than the standards
+    # require.  However, if the header order changes it is best to understand
+    # *why*, and make sure it isn't a subtle bug in whatever change was
+    # applied.
+
+    policy = policy.default.clone(max_line_length=60,
+                                  content_manager=raw_data_manager)
+    message = EmailMessage
+
+    def test_get_text_plain(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: text/plain
+
+            Basic text.
+            """))
+        self.assertEqual(raw_data_manager.get_content(m), "Basic text.\n")
+
+    def test_get_text_html(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: text/html
+
+            <p>Basic text.</p>
+            """))
+        self.assertEqual(raw_data_manager.get_content(m),
+                         "<p>Basic text.</p>\n")
+
+    def test_get_text_plain_latin1(self):
+        m = self._bytes_msg(textwrap.dedent("""\
+            Content-Type: text/plain; charset=latin1
+
+            Basìc tëxt.
+            """).encode('latin1'))
+        self.assertEqual(raw_data_manager.get_content(m), "Basìc tëxt.\n")
+
+    def test_get_text_plain_latin1_quoted_printable(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: text/plain; charset="latin-1"
+            Content-Transfer-Encoding: quoted-printable
+
+            Bas=ECc t=EBxt.
+            """))
+        self.assertEqual(raw_data_manager.get_content(m), "Basìc tëxt.\n")
+
+    def test_get_text_plain_utf8_base64(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf8"
+            Content-Transfer-Encoding: base64
+
+            QmFzw6xjIHTDq3h0Lgo=
+            """))
+        self.assertEqual(raw_data_manager.get_content(m), "Basìc tëxt.\n")
+
+    def test_get_text_plain_bad_utf8_quoted_printable(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf8"
+            Content-Transfer-Encoding: quoted-printable
+
+            Bas=c3=acc t=c3=abxt=fd.
+            """))
+        self.assertEqual(raw_data_manager.get_content(m), "Basìc tëxt�.\n")
+
+    def test_get_text_plain_bad_utf8_quoted_printable_ignore_errors(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf8"
+            Content-Transfer-Encoding: quoted-printable
+
+            Bas=c3=acc t=c3=abxt=fd.
+            """))
+        self.assertEqual(raw_data_manager.get_content(m, errors='ignore'),
+                         "Basìc tëxt.\n")
+
+    def test_get_text_plain_utf8_base64_recoverable_bad_CTE_data(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf8"
+            Content-Transfer-Encoding: base64
+
+            QmFzw6xjIHTDq3h0Lgo\xFF=
+            """))
+        self.assertEqual(raw_data_manager.get_content(m, errors='ignore'),
+                         "Basìc tëxt.\n")
+
+    def test_get_text_invalid_keyword(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: text/plain
+
+            Basic text.
+            """))
+        with self.assertRaises(TypeError):
+            raw_data_manager.get_content(m, foo='ignore')
+
+    def test_get_non_text(self):
+        template = textwrap.dedent("""\
+            Content-Type: {}
+            Content-Transfer-Encoding: base64
+
+            Ym9ndXMgZGF0YQ==
+            """)
+        for maintype in 'audio image video application'.split():
+            with self.subTest(maintype=maintype):
+                m = self._str_msg(template.format(maintype+'/foo'))
+                self.assertEqual(raw_data_manager.get_content(m), b"bogus data")
+
+    def test_get_non_text_invalid_keyword(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: image/jpg
+            Content-Transfer-Encoding: base64
+
+            Ym9ndXMgZGF0YQ==
+            """))
+        with self.assertRaises(TypeError):
+            raw_data_manager.get_content(m, errors='ignore')
+
+    def test_get_raises_on_multipart(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: multipart/mixed; boundary="==="
+
+            --===
+            --===--
+            """))
+        with self.assertRaises(KeyError):
+            raw_data_manager.get_content(m)
+
+    def test_get_message_rfc822_and_external_body(self):
+        template = textwrap.dedent("""\
+            Content-Type: message/{}
+
+            To: foo@example.com
+            From: bar@example.com
+            Subject: example
+
+            an example message
+            """)
+        for subtype in 'rfc822 external-body'.split():
+            with self.subTest(subtype=subtype):
+                m = self._str_msg(template.format(subtype))
+                sub_msg = raw_data_manager.get_content(m)
+                self.assertIsInstance(sub_msg, self.message)
+                self.assertEqual(raw_data_manager.get_content(sub_msg),
+                                 "an example message\n")
+                self.assertEqual(sub_msg['to'], 'foo@example.com')
+                self.assertEqual(sub_msg['from'].addresses[0].username, 'bar')
+
+    def test_get_message_non_rfc822_or_external_body_yields_bytes(self):
+        m = self._str_msg(textwrap.dedent("""\
+            Content-Type: message/partial
+
+            To: foo@example.com
+            From: bar@example.com
+            Subject: example
+
+            The real body is in another message.
+            """))
+        self.assertEqual(raw_data_manager.get_content(m)[:10], b'To: foo@ex')
+
+    def test_set_text_plain(self):
+        m = self._make_message()
+        content = "Simple message.\n"
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(str(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: 7bit
+
+            Simple message.
+            """))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_html(self):
+        m = self._make_message()
+        content = "<p>Simple message.</p>\n"
+        raw_data_manager.set_content(m, content, subtype='html')
+        self.assertEqual(str(m), textwrap.dedent("""\
+            Content-Type: text/html; charset="utf-8"
+            Content-Transfer-Encoding: 7bit
+
+            <p>Simple message.</p>
+            """))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_charset_latin_1(self):
+        m = self._make_message()
+        content = "Simple message.\n"
+        raw_data_manager.set_content(m, content, charset='latin-1')
+        self.assertEqual(str(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="iso-8859-1"
+            Content-Transfer-Encoding: 7bit
+
+            Simple message.
+            """))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_short_line_minimal_non_ascii_heuristics(self):
+        m = self._make_message()
+        content = "et là il est monté sur moi et il commence à m'éto.\n"
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: 8bit
+
+            et là il est monté sur moi et il commence à m'éto.
+            """).encode('utf-8'))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_long_line_minimal_non_ascii_heuristics(self):
+        m = self._make_message()
+        content = ("j'ai un problème de python. il est sorti de son"
+                   " vivarium.  et là il est monté sur moi et il commence"
+                   " à m'éto.\n")
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: quoted-printable
+
+            j'ai un probl=C3=A8me de python. il est sorti de son vivari=
+            um.  et l=C3=A0 il est mont=C3=A9 sur moi et il commence =
+            =C3=A0 m'=C3=A9to.
+            """).encode('utf-8'))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_11_lines_long_line_minimal_non_ascii_heuristics(self):
+        m = self._make_message()
+        content = '\n'*10 + (
+                  "j'ai un problème de python. il est sorti de son"
+                  " vivarium.  et là il est monté sur moi et il commence"
+                  " à m'éto.\n")
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: quoted-printable
+            """ + '\n'*10 + """
+            j'ai un probl=C3=A8me de python. il est sorti de son vivari=
+            um.  et l=C3=A0 il est mont=C3=A9 sur moi et il commence =
+            =C3=A0 m'=C3=A9to.
+            """).encode('utf-8'))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_maximal_non_ascii_heuristics(self):
+        m = self._make_message()
+        content = "áàäéèęöő.\n"
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: 8bit
+
+            áàäéèęöő.
+            """).encode('utf-8'))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_11_lines_maximal_non_ascii_heuristics(self):
+        m = self._make_message()
+        content = '\n'*10 + "áàäéèęöő.\n"
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: 8bit
+            """ + '\n'*10 + """
+            áàäéèęöő.
+            """).encode('utf-8'))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_long_line_maximal_non_ascii_heuristics(self):
+        m = self._make_message()
+        content = ("áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő"
+                   "áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő"
+                   "áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő.\n")
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: base64
+
+            w6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnD
+            tsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOo
+            xJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TD
+            qcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOg
+            w6TDqcOoxJnDtsWRLgo=
+            """).encode('utf-8'))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_11_lines_long_line_maximal_non_ascii_heuristics(self):
+        # Yes, it chooses "wrong" here.  It's a heuristic.  So this result
+        # could change if we come up with a better heuristic.
+        m = self._make_message()
+        content = ('\n'*10 +
+                   "áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő"
+                   "áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő"
+                   "áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő.\n")
+        raw_data_manager.set_content(m, "\n"*10 +
+                                        "áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő"
+                                        "áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő"
+                                        "áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő.\n")
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: quoted-printable
+            """ + '\n'*10 + """
+            =C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=
+            =A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=
+            =C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=
+            =A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=
+            =C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=
+            =91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=
+            =C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=
+            =A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=
+            =C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=
+            =99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=
+            =C5=91.
+            """).encode('utf-8'))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_text_non_ascii_with_cte_7bit_raises(self):
+        m = self._make_message()
+        with self.assertRaises(UnicodeError):
+            raw_data_manager.set_content(m,"áàäéèęöő.\n", cte='7bit')
+
+    def test_set_text_non_ascii_with_charset_ascii_raises(self):
+        m = self._make_message()
+        with self.assertRaises(UnicodeError):
+            raw_data_manager.set_content(m,"áàäéèęöő.\n", charset='ascii')
+
+    def test_set_text_non_ascii_with_cte_7bit_and_charset_ascii_raises(self):
+        m = self._make_message()
+        with self.assertRaises(UnicodeError):
+            raw_data_manager.set_content(m,"áàäéèęöő.\n", cte='7bit', charset='ascii')
+
+    def test_set_message(self):
+        m = self._make_message()
+        m['Subject'] = "Forwarded message"
+        content = self._make_message()
+        content['To'] = 'python@vivarium.org'
+        content['From'] = 'police@monty.org'
+        content['Subject'] = "get back in your box"
+        content.set_content("Or face the comfy chair.")
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(str(m), textwrap.dedent("""\
+            Subject: Forwarded message
+            Content-Type: message/rfc822
+            Content-Transfer-Encoding: 8bit
+
+            To: python@vivarium.org
+            From: police@monty.org
+            Subject: get back in your box
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: 7bit
+            MIME-Version: 1.0
+
+            Or face the comfy chair.
+            """))
+        payload = m.get_payload(0)
+        self.assertIsInstance(payload, self.message)
+        self.assertEqual(str(payload), str(content))
+        self.assertIsInstance(m.get_content(), self.message)
+        self.assertEqual(str(m.get_content()), str(content))
+
+    def test_set_message_with_non_ascii_and_coercion_to_7bit(self):
+        m = self._make_message()
+        m['Subject'] = "Escape report"
+        content = self._make_message()
+        content['To'] = 'police@monty.org'
+        content['From'] = 'victim@monty.org'
+        content['Subject'] = "Help"
+        content.set_content("j'ai un problème de python. il est sorti de son"
+                            " vivarium.")
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Subject: Escape report
+            Content-Type: message/rfc822
+            Content-Transfer-Encoding: 8bit
+
+            To: police@monty.org
+            From: victim@monty.org
+            Subject: Help
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: 8bit
+            MIME-Version: 1.0
+
+            j'ai un problème de python. il est sorti de son vivarium.
+            """).encode('utf-8'))
+        # The choice of base64 for the body encoding is because generator
+        # doesn't bother with heuristics and uses it unconditionally for utf-8
+        # text.
+        # XXX: the first cte should be 7bit, too...that's a generator bug.
+        # XXX: the line length in the body also looks like a generator bug.
+        self.assertEqual(m.as_string(maxheaderlen=self.policy.max_line_length),
+                         textwrap.dedent("""\
+            Subject: Escape report
+            Content-Type: message/rfc822
+            Content-Transfer-Encoding: 8bit
+
+            To: police@monty.org
+            From: victim@monty.org
+            Subject: Help
+            Content-Type: text/plain; charset="utf-8"
+            MIME-Version: 1.0
+            Content-Transfer-Encoding: base64
+
+            aidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIHZpdmFyaXVt
+            Lgo=
+            """))
+        self.assertIsInstance(m.get_content(), self.message)
+        self.assertEqual(str(m.get_content()), str(content))
+
+    def test_set_message_invalid_cte_raises(self):
+        m = self._make_message()
+        content = self._make_message()
+        for cte in 'quoted-printable base64'.split():
+            for subtype in 'rfc822 external-body'.split():
+                with self.subTest(cte=cte, subtype=subtype):
+                    with self.assertRaises(ValueError) as ar:
+                        m.set_content(content, subtype, cte=cte)
+                    exc = str(ar.exception)
+                    self.assertIn(cte, exc)
+                    self.assertIn(subtype, exc)
+        subtype = 'external-body'
+        for cte in '8bit binary'.split():
+            with self.subTest(cte=cte, subtype=subtype):
+                with self.assertRaises(ValueError) as ar:
+                    m.set_content(content, subtype, cte=cte)
+                exc = str(ar.exception)
+                self.assertIn(cte, exc)
+                self.assertIn(subtype, exc)
+
+    def test_set_image_jpg(self):
+        for content in (b"bogus content",
+                        bytearray(b"bogus content"),
+                        memoryview(b"bogus content")):
+            with self.subTest(content=content):
+                m = self._make_message()
+                raw_data_manager.set_content(m, content, 'image', 'jpeg')
+                self.assertEqual(str(m), textwrap.dedent("""\
+                    Content-Type: image/jpeg
+                    Content-Transfer-Encoding: base64
+
+                    Ym9ndXMgY29udGVudA==
+                    """))
+                self.assertEqual(m.get_payload(decode=True), content)
+                self.assertEqual(m.get_content(), content)
+
+    def test_set_audio_aif_with_quoted_printable_cte(self):
+        # Why you would use qp, I don't know, but it is technically supported.
+        # XXX: the incorrect line length is because binascii.b2a_qp doesn't
+        # support a line length parameter, but we must use it to get newline
+        # encoding.
+        # XXX: what about that lack of tailing newline?  Do we actually handle
+        # that correctly in all cases?  That is, if the *source* has an
+        # unencoded newline, do we add an extra newline to the returned payload
+        # or not?  And can that actually be disambiguated based on the RFC?
+        m = self._make_message()
+        content = b'b\xFFgus\tcon\nt\rent ' + b'z'*100
+        m.set_content(content, 'audio', 'aif', cte='quoted-printable')
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: audio/aif
+            Content-Transfer-Encoding: quoted-printable
+            MIME-Version: 1.0
+
+            b=FFgus=09con=0At=0Dent=20zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=
+            zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz""").encode('latin-1'))
+        self.assertEqual(m.get_payload(decode=True), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_video_mpeg_with_binary_cte(self):
+        m = self._make_message()
+        content = b'b\xFFgus\tcon\nt\rent ' + b'z'*100
+        m.set_content(content, 'video', 'mpeg', cte='binary')
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: video/mpeg
+            Content-Transfer-Encoding: binary
+            MIME-Version: 1.0
+
+            """).encode('ascii') +
+            # XXX: the second \n ought to be a \r, but generator gets it wrong.
+            # THIS MEANS WE DON'T ACTUALLY SUPPORT THE 'binary' CTE.
+            b'b\xFFgus\tcon\nt\nent zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz' +
+            b'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz')
+        self.assertEqual(m.get_payload(decode=True), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_application_octet_stream_with_8bit_cte(self):
+        # In 8bit mode, univeral line end logic applies.  It is up to the
+        # application to make sure the lines are short enough; we don't check.
+        m = self._make_message()
+        content = b'b\xFFgus\tcon\nt\rent\n' + b'z'*60 + b'\n'
+        m.set_content(content, 'application', 'octet-stream', cte='8bit')
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: application/octet-stream
+            Content-Transfer-Encoding: 8bit
+            MIME-Version: 1.0
+
+            """).encode('ascii') +
+            b'b\xFFgus\tcon\nt\nent\n' +
+            b'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\n')
+        self.assertEqual(m.get_payload(decode=True), content)
+        self.assertEqual(m.get_content(), content)
+
+    def test_set_headers_from_header_objects(self):
+        m = self._make_message()
+        content = "Simple message.\n"
+        header_factory = self.policy.header_factory
+        raw_data_manager.set_content(m, content, headers=(
+            header_factory("To", "foo@example.com"),
+            header_factory("From", "foo@example.com"),
+            header_factory("Subject", "I'm talking to myself.")))
+        self.assertEqual(str(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            To: foo@example.com
+            From: foo@example.com
+            Subject: I'm talking to myself.
+            Content-Transfer-Encoding: 7bit
+
+            Simple message.
+            """))
+
+    def test_set_headers_from_strings(self):
+        m = self._make_message()
+        content = "Simple message.\n"
+        raw_data_manager.set_content(m, content, headers=(
+            "X-Foo-Header: foo",
+            "X-Bar-Header: bar",))
+        self.assertEqual(str(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            X-Foo-Header: foo
+            X-Bar-Header: bar
+            Content-Transfer-Encoding: 7bit
+
+            Simple message.
+            """))
+
+    def test_set_headers_with_invalid_duplicate_string_header_raises(self):
+        m = self._make_message()
+        content = "Simple message.\n"
+        with self.assertRaisesRegex(ValueError, 'Content-Type'):
+            raw_data_manager.set_content(m, content, headers=(
+                "Content-Type: foo/bar",)
+                )
+
+    def test_set_headers_with_invalid_duplicate_header_header_raises(self):
+        m = self._make_message()
+        content = "Simple message.\n"
+        header_factory = self.policy.header_factory
+        with self.assertRaisesRegex(ValueError, 'Content-Type'):
+            raw_data_manager.set_content(m, content, headers=(
+                header_factory("Content-Type", " foo/bar"),)
+                )
+
+    def test_set_headers_with_defective_string_header_raises(self):
+        m = self._make_message()
+        content = "Simple message.\n"
+        with self.assertRaisesRegex(ValueError, 'a@fairly@@invalid@address'):
+            raw_data_manager.set_content(m, content, headers=(
+                'To: a@fairly@@invalid@address',)
+                )
+            print(m['To'].defects)
+
+    def test_set_headers_with_defective_header_header_raises(self):
+        m = self._make_message()
+        content = "Simple message.\n"
+        header_factory = self.policy.header_factory
+        with self.assertRaisesRegex(ValueError, 'a@fairly@@invalid@address'):
+            raw_data_manager.set_content(m, content, headers=(
+                header_factory('To', 'a@fairly@@invalid@address'),)
+                )
+            print(m['To'].defects)
+
+    def test_set_disposition_inline(self):
+        m = self._make_message()
+        m.set_content('foo', disposition='inline')
+        self.assertEqual(m['Content-Disposition'], 'inline')
+
+    def test_set_disposition_attachment(self):
+        m = self._make_message()
+        m.set_content('foo', disposition='attachment')
+        self.assertEqual(m['Content-Disposition'], 'attachment')
+
+    def test_set_disposition_foo(self):
+        m = self._make_message()
+        m.set_content('foo', disposition='foo')
+        self.assertEqual(m['Content-Disposition'], 'foo')
+
+    # XXX: we should have a 'strict' policy mode (beyond raise_on_defect) that
+    # would cause 'foo' above to raise.
+
+    def test_set_filename(self):
+        m = self._make_message()
+        m.set_content('foo', filename='bar.txt')
+        self.assertEqual(m['Content-Disposition'],
+                         'attachment; filename="bar.txt"')
+
+    def test_set_filename_and_disposition_inline(self):
+        m = self._make_message()
+        m.set_content('foo', disposition='inline', filename='bar.txt')
+        self.assertEqual(m['Content-Disposition'], 'inline; filename="bar.txt"')
+
+    def test_set_non_ascii_filename(self):
+        m = self._make_message()
+        m.set_content('foo', filename='ábárî.txt')
+        self.assertEqual(bytes(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: 7bit
+            Content-Disposition: attachment;
+             filename*=utf-8''%C3%A1b%C3%A1r%C3%AE.txt
+            MIME-Version: 1.0
+
+            foo
+            """).encode('ascii'))
+
+    content_object_params = {
+        'text_plain': ('content', ()),
+        'text_html': ('content', ('html',)),
+        'application_octet_stream': (b'content',
+                                     ('application', 'octet_stream')),
+        'image_jpeg': (b'content', ('image', 'jpeg')),
+        'message_rfc822': (message(), ()),
+        'message_external_body': (message(), ('external-body',)),
+        }
+
+    def content_object_as_header_receiver(self, obj, mimetype):
+        m = self._make_message()
+        m.set_content(obj, *mimetype, headers=(
+            'To: foo@example.com',
+            'From: bar@simple.net'))
+        self.assertEqual(m['to'], 'foo@example.com')
+        self.assertEqual(m['from'], 'bar@simple.net')
+
+    def content_object_as_disposition_inline_receiver(self, obj, mimetype):
+        m = self._make_message()
+        m.set_content(obj, *mimetype, disposition='inline')
+        self.assertEqual(m['Content-Disposition'], 'inline')
+
+    def content_object_as_non_ascii_filename_receiver(self, obj, mimetype):
+        m = self._make_message()
+        m.set_content(obj, *mimetype, disposition='inline', filename='bár.txt')
+        self.assertEqual(m['Content-Disposition'], 'inline; filename="bár.txt"')
+        self.assertEqual(m.get_filename(), "bár.txt")
+        self.assertEqual(m['Content-Disposition'].params['filename'], "bár.txt")
+
+    def content_object_as_cid_receiver(self, obj, mimetype):
+        m = self._make_message()
+        m.set_content(obj, *mimetype, cid='some_random_stuff')
+        self.assertEqual(m['Content-ID'], 'some_random_stuff')
+
+    def content_object_as_params_receiver(self, obj, mimetype):
+        m = self._make_message()
+        params = {'foo': 'bár', 'abc': 'xyz'}
+        m.set_content(obj, *mimetype, params=params)
+        if isinstance(obj, str):
+            params['charset'] = 'utf-8'
+        self.assertEqual(m['Content-Type'].params, params)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_email/test_headerregistry.py b/Lib/test/test_email/test_headerregistry.py
index f829f83..f2df372 100644
--- a/Lib/test/test_email/test_headerregistry.py
+++ b/Lib/test/test_email/test_headerregistry.py
@@ -661,7 +661,7 @@
             'text/plain; name="ascii_is_the_default"'),
 
         'rfc2231_bad_character_in_charset_parameter_value': (
-            "text/plain; charset*=ascii''utf-8%E2%80%9D",
+            "text/plain; charset*=ascii''utf-8%F1%F2%F3",
             'text/plain',
             'text',
             'plain',
@@ -669,6 +669,18 @@
             [errors.UndecodableBytesDefect],
             'text/plain; charset="utf-8\uFFFD\uFFFD\uFFFD"'),
 
+        'rfc2231_utf_8_in_supposedly_ascii_charset_parameter_value': (
+            "text/plain; charset*=ascii''utf-8%E2%80%9D",
+            'text/plain',
+            'text',
+            'plain',
+            {'charset': 'utf-8”'},
+            [errors.UndecodableBytesDefect],
+            'text/plain; charset="utf-8”"',
+            ),
+            # XXX: if the above were *re*folded, it would get tagged as utf-8
+            # instead of ascii in the param, since it now contains non-ASCII.
+
         'rfc2231_encoded_then_unencoded_segments': (
             ('application/x-foo;'
                 '\tname*0*="us-ascii\'en-us\'My";'
diff --git a/Lib/test/test_email/test_message.py b/Lib/test/test_email/test_message.py
index 8cc3f80..e0ebb8a 100644
--- a/Lib/test/test_email/test_message.py
+++ b/Lib/test/test_email/test_message.py
@@ -1,6 +1,13 @@
 import unittest
+import textwrap
 from email import policy
-from test.test_email import TestEmailBase
+from email.message import EmailMessage, MIMEPart
+from test.test_email import TestEmailBase, parameterize
+
+
+# Helper.
+def first(iterable):
+    return next(filter(lambda x: x is not None, iterable), None)
 
 
 class Test(TestEmailBase):
@@ -14,5 +21,738 @@
             m['To'] = 'xyz@abc'
 
 
+@parameterize
+class TestEmailMessageBase:
+
+    policy = policy.default
+
+    # The first argument is a triple (related, html, plain) of indices into the
+    # list returned by 'walk' called on a Message constructed from the third.
+    # The indices indicate which part should match the corresponding part-type
+    # when passed to get_body (ie: the "first" part of that type in the
+    # message).  The second argument is a list of indices into the 'walk' list
+    # of the attachments that should be returned by a call to
+    # 'iter_attachments'.  The third argument is a list of indices into 'walk'
+    # that should be returned by a call to 'iter_parts'.  Note that the first
+    # item returned by 'walk' is the Message itself.
+
+    message_params = {
+
+        'empty_message': (
+            (None, None, 0),
+            (),
+            (),
+            ""),
+
+        'non_mime_plain': (
+            (None, None, 0),
+            (),
+            (),
+            textwrap.dedent("""\
+                To: foo@example.com
+
+                simple text body
+                """)),
+
+        'mime_non_text': (
+            (None, None, None),
+            (),
+            (),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: image/jpg
+
+                bogus body.
+                """)),
+
+        'plain_html_alternative': (
+            (None, 2, 1),
+            (),
+            (1, 2),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/alternative; boundary="==="
+
+                preamble
+
+                --===
+                Content-Type: text/plain
+
+                simple body
+
+                --===
+                Content-Type: text/html
+
+                <p>simple body</p>
+                --===--
+                """)),
+
+        'plain_html_mixed': (
+            (None, 2, 1),
+            (),
+            (1, 2),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/mixed; boundary="==="
+
+                preamble
+
+                --===
+                Content-Type: text/plain
+
+                simple body
+
+                --===
+                Content-Type: text/html
+
+                <p>simple body</p>
+
+                --===--
+                """)),
+
+        'plain_html_attachment_mixed': (
+            (None, None, 1),
+            (2,),
+            (1, 2),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/mixed; boundary="==="
+
+                --===
+                Content-Type: text/plain
+
+                simple body
+
+                --===
+                Content-Type: text/html
+                Content-Disposition: attachment
+
+                <p>simple body</p>
+
+                --===--
+                """)),
+
+        'html_text_attachment_mixed': (
+            (None, 2, None),
+            (1,),
+            (1, 2),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/mixed; boundary="==="
+
+                --===
+                Content-Type: text/plain
+                Content-Disposition: AtTaChment
+
+                simple body
+
+                --===
+                Content-Type: text/html
+
+                <p>simple body</p>
+
+                --===--
+                """)),
+
+        'html_text_attachment_inline_mixed': (
+            (None, 2, 1),
+            (),
+            (1, 2),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/mixed; boundary="==="
+
+                --===
+                Content-Type: text/plain
+                Content-Disposition: InLine
+
+                simple body
+
+                --===
+                Content-Type: text/html
+                Content-Disposition: inline
+
+                <p>simple body</p>
+
+                --===--
+                """)),
+
+        # RFC 2387
+        'related': (
+            (0, 1, None),
+            (2,),
+            (1, 2),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/related; boundary="==="; type=text/html
+
+                --===
+                Content-Type: text/html
+
+                <p>simple body</p>
+
+                --===
+                Content-Type: image/jpg
+                Content-ID: <image1>
+
+                bogus data
+
+                --===--
+                """)),
+
+        # This message structure will probably never be seen in the wild, but
+        # it proves we distinguish between text parts based on 'start'.  The
+        # content would not, of course, actually work :)
+        'related_with_start': (
+            (0, 2, None),
+            (1,),
+            (1, 2),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/related; boundary="==="; type=text/html;
+                 start="<body>"
+
+                --===
+                Content-Type: text/html
+                Content-ID: <include>
+
+                useless text
+
+                --===
+                Content-Type: text/html
+                Content-ID: <body>
+
+                <p>simple body</p>
+                <!--#include file="<include>"-->
+
+                --===--
+                """)),
+
+
+        'mixed_alternative_plain_related': (
+            (3, 4, 2),
+            (6, 7),
+            (1, 6, 7),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/mixed; boundary="==="
+
+                --===
+                Content-Type: multipart/alternative; boundary="+++"
+
+                --+++
+                Content-Type: text/plain
+
+                simple body
+
+                --+++
+                Content-Type: multipart/related; boundary="___"
+
+                --___
+                Content-Type: text/html
+
+                <p>simple body</p>
+
+                --___
+                Content-Type: image/jpg
+                Content-ID: <image1@cid>
+
+                bogus jpg body
+
+                --___--
+
+                --+++--
+
+                --===
+                Content-Type: image/jpg
+                Content-Disposition: attachment
+
+                bogus jpg body
+
+                --===
+                Content-Type: image/jpg
+                Content-Disposition: AttacHmenT
+
+                another bogus jpg body
+
+                --===--
+                """)),
+
+        # This structure suggested by Stephen J. Turnbull...may not exist/be
+        # supported in the wild, but we want to support it.
+        'mixed_related_alternative_plain_html': (
+            (1, 4, 3),
+            (6, 7),
+            (1, 6, 7),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/mixed; boundary="==="
+
+                --===
+                Content-Type: multipart/related; boundary="+++"
+
+                --+++
+                Content-Type: multipart/alternative; boundary="___"
+
+                --___
+                Content-Type: text/plain
+
+                simple body
+
+                --___
+                Content-Type: text/html
+
+                <p>simple body</p>
+
+                --___--
+
+                --+++
+                Content-Type: image/jpg
+                Content-ID: <image1@cid>
+
+                bogus jpg body
+
+                --+++--
+
+                --===
+                Content-Type: image/jpg
+                Content-Disposition: attachment
+
+                bogus jpg body
+
+                --===
+                Content-Type: image/jpg
+                Content-Disposition: attachment
+
+                another bogus jpg body
+
+                --===--
+                """)),
+
+        # Same thing, but proving we only look at the root part, which is the
+        # first one if there isn't any start parameter.  That is, this is a
+        # broken related.
+        'mixed_related_alternative_plain_html_wrong_order': (
+            (1, None, None),
+            (6, 7),
+            (1, 6, 7),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/mixed; boundary="==="
+
+                --===
+                Content-Type: multipart/related; boundary="+++"
+
+                --+++
+                Content-Type: image/jpg
+                Content-ID: <image1@cid>
+
+                bogus jpg body
+
+                --+++
+                Content-Type: multipart/alternative; boundary="___"
+
+                --___
+                Content-Type: text/plain
+
+                simple body
+
+                --___
+                Content-Type: text/html
+
+                <p>simple body</p>
+
+                --___--
+
+                --+++--
+
+                --===
+                Content-Type: image/jpg
+                Content-Disposition: attachment
+
+                bogus jpg body
+
+                --===
+                Content-Type: image/jpg
+                Content-Disposition: attachment
+
+                another bogus jpg body
+
+                --===--
+                """)),
+
+        'message_rfc822': (
+            (None, None, None),
+            (),
+            (),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: message/rfc822
+
+                To: bar@example.com
+                From: robot@examp.com
+
+                this is a message body.
+                """)),
+
+        'mixed_text_message_rfc822': (
+            (None, None, 1),
+            (2,),
+            (1, 2),
+            textwrap.dedent("""\
+                To: foo@example.com
+                MIME-Version: 1.0
+                Content-Type: multipart/mixed; boundary="==="
+
+                --===
+                Content-Type: text/plain
+
+                Your message has bounced, ser.
+
+                --===
+                Content-Type: message/rfc822
+
+                To: bar@example.com
+                From: robot@examp.com
+
+                this is a message body.
+
+                --===--
+                """)),
+
+         }
+
+    def message_as_get_body(self, body_parts, attachments, parts, msg):
+        m = self._str_msg(msg)
+        allparts = list(m.walk())
+        expected = [None if n is None else allparts[n] for n in body_parts]
+        related = 0; html = 1; plain = 2
+        self.assertEqual(m.get_body(), first(expected))
+        self.assertEqual(m.get_body(preferencelist=(
+                                        'related', 'html', 'plain')),
+                         first(expected))
+        self.assertEqual(m.get_body(preferencelist=('related', 'html')),
+                         first(expected[related:html+1]))
+        self.assertEqual(m.get_body(preferencelist=('related', 'plain')),
+                         first([expected[related], expected[plain]]))
+        self.assertEqual(m.get_body(preferencelist=('html', 'plain')),
+                         first(expected[html:plain+1]))
+        self.assertEqual(m.get_body(preferencelist=['related']),
+                         expected[related])
+        self.assertEqual(m.get_body(preferencelist=['html']), expected[html])
+        self.assertEqual(m.get_body(preferencelist=['plain']), expected[plain])
+        self.assertEqual(m.get_body(preferencelist=('plain', 'html')),
+                         first(expected[plain:html-1:-1]))
+        self.assertEqual(m.get_body(preferencelist=('plain', 'related')),
+                         first([expected[plain], expected[related]]))
+        self.assertEqual(m.get_body(preferencelist=('html', 'related')),
+                         first(expected[html::-1]))
+        self.assertEqual(m.get_body(preferencelist=('plain', 'html', 'related')),
+                         first(expected[::-1]))
+        self.assertEqual(m.get_body(preferencelist=('html', 'plain', 'related')),
+                         first([expected[html],
+                                expected[plain],
+                                expected[related]]))
+
+    def message_as_iter_attachment(self, body_parts, attachments, parts, msg):
+        m = self._str_msg(msg)
+        allparts = list(m.walk())
+        attachments = [allparts[n] for n in attachments]
+        self.assertEqual(list(m.iter_attachments()), attachments)
+
+    def message_as_iter_parts(self, body_parts, attachments, parts, msg):
+        m = self._str_msg(msg)
+        allparts = list(m.walk())
+        parts = [allparts[n] for n in parts]
+        self.assertEqual(list(m.iter_parts()), parts)
+
+    class _TestContentManager:
+        def get_content(self, msg, *args, **kw):
+            return msg, args, kw
+        def set_content(self, msg, *args, **kw):
+            self.msg = msg
+            self.args = args
+            self.kw = kw
+
+    def test_get_content_with_cm(self):
+        m = self._str_msg('')
+        cm = self._TestContentManager()
+        self.assertEqual(m.get_content(content_manager=cm), (m, (), {}))
+        msg, args, kw = m.get_content('foo', content_manager=cm, bar=1, k=2)
+        self.assertEqual(msg, m)
+        self.assertEqual(args, ('foo',))
+        self.assertEqual(kw, dict(bar=1, k=2))
+
+    def test_get_content_default_cm_comes_from_policy(self):
+        p = policy.default.clone(content_manager=self._TestContentManager())
+        m = self._str_msg('', policy=p)
+        self.assertEqual(m.get_content(), (m, (), {}))
+        msg, args, kw = m.get_content('foo', bar=1, k=2)
+        self.assertEqual(msg, m)
+        self.assertEqual(args, ('foo',))
+        self.assertEqual(kw, dict(bar=1, k=2))
+
+    def test_set_content_with_cm(self):
+        m = self._str_msg('')
+        cm = self._TestContentManager()
+        m.set_content(content_manager=cm)
+        self.assertEqual(cm.msg, m)
+        self.assertEqual(cm.args, ())
+        self.assertEqual(cm.kw, {})
+        m.set_content('foo', content_manager=cm, bar=1, k=2)
+        self.assertEqual(cm.msg, m)
+        self.assertEqual(cm.args, ('foo',))
+        self.assertEqual(cm.kw, dict(bar=1, k=2))
+
+    def test_set_content_default_cm_comes_from_policy(self):
+        cm = self._TestContentManager()
+        p = policy.default.clone(content_manager=cm)
+        m = self._str_msg('', policy=p)
+        m.set_content()
+        self.assertEqual(cm.msg, m)
+        self.assertEqual(cm.args, ())
+        self.assertEqual(cm.kw, {})
+        m.set_content('foo', bar=1, k=2)
+        self.assertEqual(cm.msg, m)
+        self.assertEqual(cm.args, ('foo',))
+        self.assertEqual(cm.kw, dict(bar=1, k=2))
+
+    # outcome is whether xxx_method should raise ValueError error when called
+    # on multipart/subtype.  Blank outcome means it depends on xxx (add
+    # succeeds, make raises).  Note: 'none' means there are content-type
+    # headers but payload is None...this happening in practice would be very
+    # unusual, so treating it as if there were content seems reasonable.
+    #    method          subtype           outcome
+    subtype_params = (
+        ('related',      'no_content',     'succeeds'),
+        ('related',      'none',           'succeeds'),
+        ('related',      'plain',          'succeeds'),
+        ('related',      'related',        ''),
+        ('related',      'alternative',    'raises'),
+        ('related',      'mixed',          'raises'),
+        ('alternative',  'no_content',     'succeeds'),
+        ('alternative',  'none',           'succeeds'),
+        ('alternative',  'plain',          'succeeds'),
+        ('alternative',  'related',        'succeeds'),
+        ('alternative',  'alternative',    ''),
+        ('alternative',  'mixed',          'raises'),
+        ('mixed',        'no_content',     'succeeds'),
+        ('mixed',        'none',           'succeeds'),
+        ('mixed',        'plain',          'succeeds'),
+        ('mixed',        'related',        'succeeds'),
+        ('mixed',        'alternative',    'succeeds'),
+        ('mixed',        'mixed',          ''),
+        )
+
+    def _make_subtype_test_message(self, subtype):
+        m = self.message()
+        payload = None
+        msg_headers =  [
+            ('To', 'foo@bar.com'),
+            ('From', 'bar@foo.com'),
+            ]
+        if subtype != 'no_content':
+            ('content-shadow', 'Logrus'),
+        msg_headers.append(('X-Random-Header', 'Corwin'))
+        if subtype == 'text':
+            payload = ''
+            msg_headers.append(('Content-Type', 'text/plain'))
+            m.set_payload('')
+        elif subtype != 'no_content':
+            payload = []
+            msg_headers.append(('Content-Type', 'multipart/' + subtype))
+        msg_headers.append(('X-Trump', 'Random'))
+        m.set_payload(payload)
+        for name, value in msg_headers:
+            m[name] = value
+        return m, msg_headers, payload
+
+    def _check_disallowed_subtype_raises(self, m, method_name, subtype, method):
+        with self.assertRaises(ValueError) as ar:
+            getattr(m, method)()
+        exc_text = str(ar.exception)
+        self.assertIn(subtype, exc_text)
+        self.assertIn(method_name, exc_text)
+
+    def _check_make_multipart(self, m, msg_headers, payload):
+        count = 0
+        for name, value in msg_headers:
+            if not name.lower().startswith('content-'):
+                self.assertEqual(m[name], value)
+                count += 1
+        self.assertEqual(len(m), count+1) # +1 for new Content-Type
+        part = next(m.iter_parts())
+        count = 0
+        for name, value in msg_headers:
+            if name.lower().startswith('content-'):
+                self.assertEqual(part[name], value)
+                count += 1
+        self.assertEqual(len(part), count)
+        self.assertEqual(part.get_payload(), payload)
+
+    def subtype_as_make(self, method, subtype, outcome):
+        m, msg_headers, payload = self._make_subtype_test_message(subtype)
+        make_method = 'make_' + method
+        if outcome in ('', 'raises'):
+            self._check_disallowed_subtype_raises(m, method, subtype, make_method)
+            return
+        getattr(m, make_method)()
+        self.assertEqual(m.get_content_maintype(), 'multipart')
+        self.assertEqual(m.get_content_subtype(), method)
+        if subtype == 'no_content':
+            self.assertEqual(len(m.get_payload()), 0)
+            self.assertEqual(m.items(),
+                             msg_headers + [('Content-Type',
+                                             'multipart/'+method)])
+        else:
+            self.assertEqual(len(m.get_payload()), 1)
+            self._check_make_multipart(m, msg_headers, payload)
+
+    def subtype_as_make_with_boundary(self, method, subtype, outcome):
+        # Doing all variation is a bit of overkill...
+        m = self.message()
+        if outcome in ('', 'raises'):
+            m['Content-Type'] = 'multipart/' + subtype
+            with self.assertRaises(ValueError) as cm:
+                getattr(m, 'make_' + method)()
+            return
+        if subtype == 'plain':
+            m['Content-Type'] = 'text/plain'
+        elif subtype != 'no_content':
+            m['Content-Type'] = 'multipart/' + subtype
+        getattr(m, 'make_' + method)(boundary="abc")
+        self.assertTrue(m.is_multipart())
+        self.assertEqual(m.get_boundary(), 'abc')
+
+    def test_policy_on_part_made_by_make_comes_from_message(self):
+        for method in ('make_related', 'make_alternative', 'make_mixed'):
+            m = self.message(policy=self.policy.clone(content_manager='foo'))
+            m['Content-Type'] = 'text/plain'
+            getattr(m, method)()
+            self.assertEqual(m.get_payload(0).policy.content_manager, 'foo')
+
+    class _TestSetContentManager:
+        def set_content(self, msg, content, *args, **kw):
+            msg['Content-Type'] = 'text/plain'
+            msg.set_payload(content)
+
+    def subtype_as_add(self, method, subtype, outcome):
+        m, msg_headers, payload = self._make_subtype_test_message(subtype)
+        cm = self._TestSetContentManager()
+        add_method = 'add_attachment' if method=='mixed' else 'add_' + method
+        if outcome == 'raises':
+            self._check_disallowed_subtype_raises(m, method, subtype, add_method)
+            return
+        getattr(m, add_method)('test', content_manager=cm)
+        self.assertEqual(m.get_content_maintype(), 'multipart')
+        self.assertEqual(m.get_content_subtype(), method)
+        if method == subtype or subtype == 'no_content':
+            self.assertEqual(len(m.get_payload()), 1)
+            for name, value in msg_headers:
+                self.assertEqual(m[name], value)
+            part = m.get_payload()[0]
+        else:
+            self.assertEqual(len(m.get_payload()), 2)
+            self._check_make_multipart(m, msg_headers, payload)
+            part = m.get_payload()[1]
+        self.assertEqual(part.get_content_type(), 'text/plain')
+        self.assertEqual(part.get_payload(), 'test')
+        if method=='mixed':
+            self.assertEqual(part['Content-Disposition'], 'attachment')
+        elif method=='related':
+            self.assertEqual(part['Content-Disposition'], 'inline')
+        else:
+            # Otherwise we don't guess.
+            self.assertIsNone(part['Content-Disposition'])
+
+    class _TestSetRaisingContentManager:
+        def set_content(self, msg, content, *args, **kw):
+            raise Exception('test')
+
+    def test_default_content_manager_for_add_comes_from_policy(self):
+        cm = self._TestSetRaisingContentManager()
+        m = self.message(policy=self.policy.clone(content_manager=cm))
+        for method in ('add_related', 'add_alternative', 'add_attachment'):
+            with self.assertRaises(Exception) as ar:
+                getattr(m, method)('')
+            self.assertEqual(str(ar.exception), 'test')
+
+    def message_as_clear(self, body_parts, attachments, parts, msg):
+        m = self._str_msg(msg)
+        m.clear()
+        self.assertEqual(len(m), 0)
+        self.assertEqual(list(m.items()), [])
+        self.assertIsNone(m.get_payload())
+        self.assertEqual(list(m.iter_parts()), [])
+
+    def message_as_clear_content(self, body_parts, attachments, parts, msg):
+        m = self._str_msg(msg)
+        expected_headers = [h for h in m.keys()
+                            if not h.lower().startswith('content-')]
+        m.clear_content()
+        self.assertEqual(list(m.keys()), expected_headers)
+        self.assertIsNone(m.get_payload())
+        self.assertEqual(list(m.iter_parts()), [])
+
+    def test_is_attachment(self):
+        m = self._make_message()
+        self.assertFalse(m.is_attachment)
+        m['Content-Disposition'] = 'inline'
+        self.assertFalse(m.is_attachment)
+        m.replace_header('Content-Disposition', 'attachment')
+        self.assertTrue(m.is_attachment)
+        m.replace_header('Content-Disposition', 'AtTachMent')
+        self.assertTrue(m.is_attachment)
+
+
+
+class TestEmailMessage(TestEmailMessageBase, TestEmailBase):
+    message = EmailMessage
+
+    def test_set_content_adds_MIME_Version(self):
+        m = self._str_msg('')
+        cm = self._TestContentManager()
+        self.assertNotIn('MIME-Version', m)
+        m.set_content(content_manager=cm)
+        self.assertEqual(m['MIME-Version'], '1.0')
+
+    class _MIME_Version_adding_CM:
+        def set_content(self, msg, *args, **kw):
+            msg['MIME-Version'] = '1.0'
+
+    def test_set_content_does_not_duplicate_MIME_Version(self):
+        m = self._str_msg('')
+        cm = self._MIME_Version_adding_CM()
+        self.assertNotIn('MIME-Version', m)
+        m.set_content(content_manager=cm)
+        self.assertEqual(m['MIME-Version'], '1.0')
+
+
+class TestMIMEPart(TestEmailMessageBase, TestEmailBase):
+    # Doing the full test run here may seem a bit redundant, since the two
+    # classes are almost identical.  But what if they drift apart?  So we do
+    # the full tests so that any future drift doesn't introduce bugs.
+    message = MIMEPart
+
+    def test_set_content_does_not_add_MIME_Version(self):
+        m = self._str_msg('')
+        cm = self._TestContentManager()
+        self.assertNotIn('MIME-Version', m)
+        m.set_content(content_manager=cm)
+        self.assertNotIn('MIME-Version', m)
+
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_email/test_policy.py b/Lib/test/test_email/test_policy.py
index 983bd49..06ad5f2 100644
--- a/Lib/test/test_email/test_policy.py
+++ b/Lib/test/test_email/test_policy.py
@@ -30,6 +30,7 @@
         'raise_on_defect':          False,
         'header_factory':           email.policy.EmailPolicy.header_factory,
         'refold_source':            'long',
+        'content_manager':          email.policy.EmailPolicy.content_manager,
         })
 
     # For each policy under test, we give here what we expect the defaults to
diff --git a/Lib/test/test_ensurepip.py b/Lib/test/test_ensurepip.py
new file mode 100644
index 0000000..e87f476
--- /dev/null
+++ b/Lib/test/test_ensurepip.py
@@ -0,0 +1,123 @@
+import unittest
+import unittest.mock
+import ensurepip
+import test.support
+
+
+class TestEnsurePipVersion(unittest.TestCase):
+
+    def test_returns_version(self):
+        self.assertEqual(ensurepip._PIP_VERSION, ensurepip.version())
+
+
+class TestBootstrap(unittest.TestCase):
+
+    def setUp(self):
+        run_pip_patch = unittest.mock.patch("ensurepip._run_pip")
+        self.run_pip = run_pip_patch.start()
+        self.addCleanup(run_pip_patch.stop)
+
+        os_environ_patch = unittest.mock.patch("ensurepip.os.environ", {})
+        self.os_environ = os_environ_patch.start()
+        self.addCleanup(os_environ_patch.stop)
+
+    def test_basic_bootstrapping(self):
+        ensurepip.bootstrap()
+
+        self.run_pip.assert_called_once_with(
+            [
+                "install", "--no-index", "--find-links",
+                unittest.mock.ANY, "--pre", "setuptools", "pip",
+            ],
+            unittest.mock.ANY,
+        )
+
+        additional_paths = self.run_pip.call_args[0][1]
+        self.assertEqual(len(additional_paths), 2)
+
+    def test_bootstrapping_with_root(self):
+        ensurepip.bootstrap(root="/foo/bar/")
+
+        self.run_pip.assert_called_once_with(
+            [
+                "install", "--no-index", "--find-links",
+                unittest.mock.ANY, "--pre", "--root", "/foo/bar/",
+                "setuptools", "pip",
+            ],
+            unittest.mock.ANY,
+        )
+
+    def test_bootstrapping_with_user(self):
+        ensurepip.bootstrap(user=True)
+
+        self.run_pip.assert_called_once_with(
+            [
+                "install", "--no-index", "--find-links",
+                unittest.mock.ANY, "--pre", "--user", "setuptools", "pip",
+            ],
+            unittest.mock.ANY,
+        )
+
+    def test_bootstrapping_with_upgrade(self):
+        ensurepip.bootstrap(upgrade=True)
+
+        self.run_pip.assert_called_once_with(
+            [
+                "install", "--no-index", "--find-links",
+                unittest.mock.ANY, "--pre", "--upgrade", "setuptools", "pip",
+            ],
+            unittest.mock.ANY,
+        )
+
+    def test_bootstrapping_with_verbosity_1(self):
+        ensurepip.bootstrap(verbosity=1)
+
+        self.run_pip.assert_called_once_with(
+            [
+                "install", "--no-index", "--find-links",
+                unittest.mock.ANY, "--pre", "-v", "setuptools", "pip",
+            ],
+            unittest.mock.ANY,
+        )
+
+    def test_bootstrapping_with_verbosity_2(self):
+        ensurepip.bootstrap(verbosity=2)
+
+        self.run_pip.assert_called_once_with(
+            [
+                "install", "--no-index", "--find-links",
+                unittest.mock.ANY, "--pre", "-vv", "setuptools", "pip",
+            ],
+            unittest.mock.ANY,
+        )
+
+    def test_bootstrapping_with_verbosity_3(self):
+        ensurepip.bootstrap(verbosity=3)
+
+        self.run_pip.assert_called_once_with(
+            [
+                "install", "--no-index", "--find-links",
+                unittest.mock.ANY, "--pre", "-vvv", "setuptools", "pip",
+            ],
+            unittest.mock.ANY,
+        )
+
+    def test_bootstrapping_with_regular_install(self):
+        ensurepip.bootstrap()
+        self.assertEqual(self.os_environ["ENSUREPIP_OPTIONS"], "install")
+
+    def test_bootstrapping_with_alt_install(self):
+        ensurepip.bootstrap(altinstall=True)
+        self.assertEqual(self.os_environ["ENSUREPIP_OPTIONS"], "altinstall")
+
+    def test_bootstrapping_with_default_pip(self):
+        ensurepip.bootstrap(default_pip=True)
+        self.assertNotIn("ENSUREPIP_OPTIONS", self.os_environ)
+
+    def test_altinstall_default_pip_conflict(self):
+        with self.assertRaises(ValueError):
+            ensurepip.bootstrap(altinstall=True, default_pip=True)
+
+
+if __name__ == "__main__":
+    test.support.run_unittest(__name__)
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index d59c5e3..d5a31b8 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -1,8 +1,11 @@
 import enum
+import inspect
+import pydoc
 import unittest
 from collections import OrderedDict
+from enum import Enum, IntEnum, EnumMeta, unique
+from io import StringIO
 from pickle import dumps, loads, PicklingError
-from enum import Enum, IntEnum, unique
 
 # for pickle tests
 try:
@@ -58,6 +61,35 @@
 except Exception:
     pass
 
+
+class TestHelpers(unittest.TestCase):
+    # _is_descriptor, _is_sunder, _is_dunder
+
+    def test_is_descriptor(self):
+        class foo:
+            pass
+        for attr in ('__get__','__set__','__delete__'):
+            obj = foo()
+            self.assertFalse(enum._is_descriptor(obj))
+            setattr(obj, attr, 1)
+            self.assertTrue(enum._is_descriptor(obj))
+
+    def test_is_sunder(self):
+        for s in ('_a_', '_aa_'):
+            self.assertTrue(enum._is_sunder(s))
+
+        for s in ('a', 'a_', '_a', '__a', 'a__', '__a__', '_a__', '__a_', '_',
+                '__', '___', '____', '_____',):
+            self.assertFalse(enum._is_sunder(s))
+
+    def test_is_dunder(self):
+        for s in ('__a__', '__aa__'):
+            self.assertTrue(enum._is_dunder(s))
+        for s in ('a', 'a_', '_a', '__a', 'a__', '_a_', '_a__', '__a_', '_',
+                '__', '___', '____', '_____',):
+            self.assertFalse(enum._is_dunder(s))
+
+
 class TestEnum(unittest.TestCase):
     def setUp(self):
         class Season(Enum):
@@ -1110,8 +1142,10 @@
             green = ()
             blue = ()
         self.assertEqual(list(ColorInAList), [ColorInAList.red, ColorInAList.green, ColorInAList.blue])
-        self.assertEqual(ColorInAList.red.value, [1])
-        self.assertEqual(ColorInAList([1]), ColorInAList.red)
+        for enum, value in zip(ColorInAList, range(3)):
+            value += 1
+            self.assertEqual(enum.value, [value])
+            self.assertIs(ColorInAList([value]), enum)
 
     def test_conflicting_types_resolved_in_new(self):
         class LabelledIntEnum(int, Enum):
@@ -1164,5 +1198,117 @@
                 turkey = 3
 
 
+expected_help_output = """
+Help on class Color in module %s:
+
+class Color(enum.Enum)
+ |  Method resolution order:
+ |      Color
+ |      enum.Enum
+ |      builtins.object
+ |\x20\x20
+ |  Data and other attributes defined here:
+ |\x20\x20
+ |  blue = <Color.blue: 3>
+ |\x20\x20
+ |  green = <Color.green: 2>
+ |\x20\x20
+ |  red = <Color.red: 1>
+ |\x20\x20
+ |  ----------------------------------------------------------------------
+ |  Data descriptors inherited from enum.Enum:
+ |\x20\x20
+ |  name
+ |      The name of the Enum member.
+ |\x20\x20
+ |  value
+ |      The value of the Enum member.
+ |\x20\x20
+ |  ----------------------------------------------------------------------
+ |  Data descriptors inherited from enum.EnumMeta:
+ |\x20\x20
+ |  __members__
+ |      Returns a mapping of member name->value.
+ |\x20\x20\x20\x20\x20\x20
+ |      This mapping lists all enum members, including aliases. Note that this
+ |      is a read-only view of the internal mapping.
+""".strip()
+
+class TestStdLib(unittest.TestCase):
+
+    class Color(Enum):
+        red = 1
+        green = 2
+        blue = 3
+
+    def test_pydoc(self):
+        # indirectly test __objclass__
+        expected_text = expected_help_output % __name__
+        output = StringIO()
+        helper = pydoc.Helper(output=output)
+        helper(self.Color)
+        result = output.getvalue().strip()
+        if result != expected_text:
+            print_diffs(expected_text, result)
+            self.fail("outputs are not equal, see diff above")
+
+    def test_inspect_getmembers(self):
+        values = dict((
+                ('__class__', EnumMeta),
+                ('__doc__', None),
+                ('__members__', self.Color.__members__),
+                ('__module__', __name__),
+                ('blue', self.Color.blue),
+                ('green', self.Color.green),
+                ('name', Enum.__dict__['name']),
+                ('red', self.Color.red),
+                ('value', Enum.__dict__['value']),
+                ))
+        result = dict(inspect.getmembers(self.Color))
+        self.assertEqual(values.keys(), result.keys())
+        failed = False
+        for k in values.keys():
+            if result[k] != values[k]:
+                print()
+                print('\n%s\n     key: %s\n  result: %s\nexpected: %s\n%s\n' %
+                        ('=' * 75, k, result[k], values[k], '=' * 75), sep='')
+                failed = True
+        if failed:
+            self.fail("result does not equal expected, see print above")
+
+    def test_inspect_classify_class_attrs(self):
+        # indirectly test __objclass__
+        from inspect import Attribute
+        values = [
+                Attribute(name='__class__', kind='data',
+                    defining_class=object, object=EnumMeta),
+                Attribute(name='__doc__', kind='data',
+                    defining_class=self.Color, object=None),
+                Attribute(name='__members__', kind='property',
+                    defining_class=EnumMeta, object=EnumMeta.__members__),
+                Attribute(name='__module__', kind='data',
+                    defining_class=self.Color, object=__name__),
+                Attribute(name='blue', kind='data',
+                    defining_class=self.Color, object=self.Color.blue),
+                Attribute(name='green', kind='data',
+                    defining_class=self.Color, object=self.Color.green),
+                Attribute(name='red', kind='data',
+                    defining_class=self.Color, object=self.Color.red),
+                Attribute(name='name', kind='data',
+                    defining_class=Enum, object=Enum.__dict__['name']),
+                Attribute(name='value', kind='data',
+                    defining_class=Enum, object=Enum.__dict__['value']),
+                ]
+        values.sort(key=lambda item: item.name)
+        result = list(inspect.classify_class_attrs(self.Color))
+        result.sort(key=lambda item: item.name)
+        failed = False
+        for v, r in zip(values, result):
+            if r != v:
+                print('\n%s\n%s\n%s\n%s\n' % ('=' * 75, r, v, '=' * 75), sep='')
+                failed = True
+        if failed:
+            self.fail("result does not equal expected, see print above")
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_enumerate.py b/Lib/test/test_enumerate.py
index a2d18d0..8742afc 100644
--- a/Lib/test/test_enumerate.py
+++ b/Lib/test/test_enumerate.py
@@ -202,11 +202,10 @@
         self.assertRaises(TypeError, reversed)
         self.assertRaises(TypeError, reversed, [], 'extra')
 
+    @unittest.skipUnless(hasattr(sys, 'getrefcount'), 'test needs sys.getrefcount()')
     def test_bug1229429(self):
         # this bug was never in reversed, it was in
         # PyObject_CallMethod, and reversed_new calls that sometimes.
-        if not hasattr(sys, "getrefcount"):
-            return
         def f():
             pass
         r = f.__reversed__ = object()
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py
index d78bcb0..ebd99ed 100644
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -19,18 +19,6 @@
 
 TIMEOUT = 0.5
 
-try:
-    from resource import setrlimit, RLIMIT_CORE, error as resource_error
-except ImportError:
-    prepare_subprocess = None
-else:
-    def prepare_subprocess():
-        # don't create core file
-        try:
-            setrlimit(RLIMIT_CORE, (0, 0))
-        except (ValueError, resource_error):
-            pass
-
 def expected_traceback(lineno1, lineno2, header, min_count=1):
     regex = header
     regex += '  File "<string>", line %s in func\n' % lineno1
@@ -59,10 +47,8 @@
         build, and replace "Current thread 0x00007f8d8fbd9700" by "Current
         thread XXX".
         """
-        options = {}
-        if prepare_subprocess:
-            options['preexec_fn'] = prepare_subprocess
-        process = script_helper.spawn_python('-c', code, **options)
+        with support.SuppressCrashReport():
+            process = script_helper.spawn_python('-c', code)
         stdout, stderr = process.communicate()
         exitcode = process.wait()
         output = support.strip_python_stderr(stdout)
@@ -86,9 +72,9 @@
         Raise an error if the output doesn't match the expected format.
         """
         if all_threads:
-            header = 'Current thread XXX'
+            header = 'Current thread XXX (most recent call first)'
         else:
-            header = 'Traceback (most recent call first)'
+            header = 'Stack (most recent call first)'
         regex = """
 ^Fatal Python error: {name}
 
@@ -101,8 +87,7 @@
             header=re.escape(header))
         if other_regex:
             regex += '|' + other_regex
-        with support.suppress_crash_popup():
-            output, exitcode = self.get_output(code, filename)
+        output, exitcode = self.get_output(code, filename)
         output = '\n'.join(output)
         self.assertRegex(output, regex)
         self.assertNotEqual(exitcode, 0)
@@ -232,8 +217,7 @@
 faulthandler._sigsegv()
 """.strip()
         not_expected = 'Fatal Python error'
-        with support.suppress_crash_popup():
-            stderr, exitcode = self.get_output(code)
+        stderr, exitcode = self.get_output(code)
         stder = '\n'.join(stderr)
         self.assertTrue(not_expected not in stderr,
                      "%r is present in %r" % (not_expected, stderr))
@@ -322,7 +306,7 @@
         else:
             lineno = 8
         expected = [
-            'Traceback (most recent call first):',
+            'Stack (most recent call first):',
             '  File "<string>", line %s in funcB' % lineno,
             '  File "<string>", line 11 in funcA',
             '  File "<string>", line 13 in <module>'
@@ -354,7 +338,7 @@
             func_name=func_name,
         )
         expected = [
-            'Traceback (most recent call first):',
+            'Stack (most recent call first):',
             '  File "<string>", line 4 in %s' % truncated,
             '  File "<string>", line 6 in <module>'
         ]
@@ -408,13 +392,13 @@
         else:
             lineno = 10
         regex = """
-^Thread 0x[0-9a-f]+:
+^Thread 0x[0-9a-f]+ \(most recent call first\):
 (?:  File ".*threading.py", line [0-9]+ in [_a-z]+
 ){{1,3}}  File "<string>", line 23 in run
   File ".*threading.py", line [0-9]+ in _bootstrap_inner
   File ".*threading.py", line [0-9]+ in _bootstrap
 
-Current thread XXX:
+Current thread XXX \(most recent call first\):
   File "<string>", line {lineno} in dump
   File "<string>", line 28 in <module>$
 """.strip()
@@ -477,7 +461,7 @@
             count = loops
             if repeat:
                 count *= 2
-            header = r'Timeout \(%s\)!\nThread 0x[0-9a-f]+:\n' % timeout_str
+            header = r'Timeout \(%s\)!\nThread 0x[0-9a-f]+ \(most recent call first\):\n' % timeout_str
             regex = expected_traceback(9, 20, header, min_count=count)
             self.assertRegex(trace, regex)
         else:
@@ -579,9 +563,9 @@
         trace = '\n'.join(trace)
         if not unregister:
             if all_threads:
-                regex = 'Current thread XXX:\n'
+                regex = 'Current thread XXX \(most recent call first\):\n'
             else:
-                regex = 'Traceback \(most recent call first\):\n'
+                regex = 'Stack \(most recent call first\):\n'
             regex = expected_traceback(7, 28, regex)
             self.assertRegex(trace, regex)
         else:
diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py
index 502292f..5c2dc3f 100644
--- a/Lib/test/test_float.py
+++ b/Lib/test/test_float.py
@@ -41,6 +41,7 @@
         self.assertRaises(ValueError, float, "-.")
         self.assertRaises(ValueError, float, b"-")
         self.assertRaises(TypeError, float, {})
+        self.assertRaisesRegex(TypeError, "not 'dict'", float, {})
         # Lone surrogate
         self.assertRaises(UnicodeEncodeError, float, '\uD8F0')
         # check that we don't accept alternate exponent markers
diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py
index 9f7630c..29330f9 100644
--- a/Lib/test/test_format.py
+++ b/Lib/test/test_format.py
@@ -327,26 +327,21 @@
         self.assertIs(text % (), text)
         self.assertIs(text.format(), text)
 
-
-def test_main():
-    support.run_unittest(FormatTest)
-
+    @support.cpython_only
     def test_precision(self):
-        INT_MAX = 2147483647
+        from _testcapi import INT_MAX
 
         f = 1.2
         self.assertEqual(format(f, ".0f"), "1")
         self.assertEqual(format(f, ".3f"), "1.200")
         with self.assertRaises(ValueError) as cm:
             format(f, ".%sf" % (INT_MAX + 1))
-        self.assertEqual(str(cm.exception), "precision too big")
 
         c = complex(f)
-        self.assertEqual(format(f, ".0f"), "1")
-        self.assertEqual(format(f, ".3f"), "1.200")
+        self.assertEqual(format(c, ".0f"), "1+0j")
+        self.assertEqual(format(c, ".3f"), "1.200+0.000j")
         with self.assertRaises(ValueError) as cm:
-            format(f, ".%sf" % (INT_MAX + 1))
-        self.assertEqual(str(cm.exception), "precision too big")
+            format(c, ".%sf" % (INT_MAX + 1))
 
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
index 47563c8..41463e2 100644
--- a/Lib/test/test_ftplib.py
+++ b/Lib/test/test_ftplib.py
@@ -16,7 +16,7 @@
 except ImportError:
     ssl = None
 
-from unittest import TestCase
+from unittest import TestCase, skipUnless
 from test import support
 from test.support import HOST, HOSTv6
 threading = support.import_module('threading')
@@ -92,6 +92,7 @@
         self.next_response = ''
         self.next_data = None
         self.rest = None
+        self.next_retr_data = RETR_DATA
         self.push('220 welcome')
 
     def collect_incoming_data(self, data):
@@ -221,7 +222,7 @@
             offset = int(self.rest)
         else:
             offset = 0
-        self.dtp.push(RETR_DATA[offset:])
+        self.dtp.push(self.next_retr_data[offset:])
         self.dtp.close_when_done()
         self.rest = None
 
@@ -243,6 +244,11 @@
         self.dtp.push(MLSD_DATA)
         self.dtp.close_when_done()
 
+    def cmd_setlongretr(self, arg):
+        # For testing. Next RETR will return long line.
+        self.next_retr_data = 'x' * int(arg)
+        self.push('125 setlongretr ok')
+
 
 class DummyFTPServer(asyncore.dispatcher, threading.Thread):
 
@@ -759,7 +765,22 @@
         self.assertEqual(ftplib.parse257('257 "/foo/b""ar"'), '/foo/b"ar')
         self.assertEqual(ftplib.parse257('257 "/foo/b""ar" created'), '/foo/b"ar')
 
+    def test_line_too_long(self):
+        self.assertRaises(ftplib.Error, self.client.sendcmd,
+                          'x' * self.client.maxline * 2)
 
+    def test_retrlines_too_long(self):
+        self.client.sendcmd('SETLONGRETR %d' % (self.client.maxline * 2))
+        received = []
+        self.assertRaises(ftplib.Error,
+                          self.client.retrlines, 'retr', received.append)
+
+    def test_storlines_too_long(self):
+        f = io.BytesIO(b'x' * self.client.maxline * 2)
+        self.assertRaises(ftplib.Error, self.client.storlines, 'stor', f)
+
+
+@skipUnless(support.IPV6_ENABLED, "IPv6 not enabled")
 class TestIPv6Environment(TestCase):
 
     def setUp(self):
@@ -800,6 +821,7 @@
         retr()
 
 
+@skipUnless(ssl, "SSL not available")
 class TestTLS_FTPClassMixin(TestFTPClass):
     """Repeat TestFTPClass tests starting the TLS layer for both control
     and data connections first.
@@ -815,6 +837,7 @@
         self.client.prot_p()
 
 
+@skipUnless(ssl, "SSL not available")
 class TestTLS_FTPClass(TestCase):
     """Specific TLS_FTP class tests."""
 
@@ -1007,12 +1030,9 @@
 
 
 def test_main():
-    tests = [TestFTPClass, TestTimeouts, TestNetrcDeprecation]
-    if support.IPV6_ENABLED:
-        tests.append(TestIPv6Environment)
-
-    if ssl is not None:
-        tests.extend([TestTLS_FTPClassMixin, TestTLS_FTPClass])
+    tests = [TestFTPClass, TestTimeouts, TestNetrcDeprecation,
+             TestIPv6Environment,
+             TestTLS_FTPClassMixin, TestTLS_FTPClass]
 
     thread_info = support.threading_setup()
     try:
diff --git a/Lib/test/test_funcattrs.py b/Lib/test/test_funcattrs.py
index c8ed830..5094f7b 100644
--- a/Lib/test/test_funcattrs.py
+++ b/Lib/test/test_funcattrs.py
@@ -7,6 +7,11 @@
     def inner_function():
         class LocalClass:
             pass
+        global inner_global_function
+        def inner_global_function():
+            def inner_function2():
+                pass
+            return inner_function2
         return LocalClass
     return lambda: inner_function
 
@@ -116,6 +121,8 @@
                          'global_function.<locals>.inner_function')
         self.assertEqual(global_function()()().__qualname__,
                          'global_function.<locals>.inner_function.<locals>.LocalClass')
+        self.assertEqual(inner_global_function.__qualname__, 'inner_global_function')
+        self.assertEqual(inner_global_function().__qualname__, 'inner_global_function.<locals>.inner_function2')
         self.b.__qualname__ = 'c'
         self.assertEqual(self.b.__qualname__, 'c')
         self.b.__qualname__ = 'd'
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index cb493bf..31c093b 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -1,3 +1,4 @@
+import abc
 import collections
 from itertools import permutations
 import pickle
@@ -217,6 +218,120 @@
         partial = PartialSubclass
 
 
+class TestPartialMethod(unittest.TestCase):
+
+    class A(object):
+        nothing = functools.partialmethod(capture)
+        positional = functools.partialmethod(capture, 1)
+        keywords = functools.partialmethod(capture, a=2)
+        both = functools.partialmethod(capture, 3, b=4)
+
+        nested = functools.partialmethod(positional, 5)
+
+        over_partial = functools.partialmethod(functools.partial(capture, c=6), 7)
+
+        static = functools.partialmethod(staticmethod(capture), 8)
+        cls = functools.partialmethod(classmethod(capture), d=9)
+
+    a = A()
+
+    def test_arg_combinations(self):
+        self.assertEqual(self.a.nothing(), ((self.a,), {}))
+        self.assertEqual(self.a.nothing(5), ((self.a, 5), {}))
+        self.assertEqual(self.a.nothing(c=6), ((self.a,), {'c': 6}))
+        self.assertEqual(self.a.nothing(5, c=6), ((self.a, 5), {'c': 6}))
+
+        self.assertEqual(self.a.positional(), ((self.a, 1), {}))
+        self.assertEqual(self.a.positional(5), ((self.a, 1, 5), {}))
+        self.assertEqual(self.a.positional(c=6), ((self.a, 1), {'c': 6}))
+        self.assertEqual(self.a.positional(5, c=6), ((self.a, 1, 5), {'c': 6}))
+
+        self.assertEqual(self.a.keywords(), ((self.a,), {'a': 2}))
+        self.assertEqual(self.a.keywords(5), ((self.a, 5), {'a': 2}))
+        self.assertEqual(self.a.keywords(c=6), ((self.a,), {'a': 2, 'c': 6}))
+        self.assertEqual(self.a.keywords(5, c=6), ((self.a, 5), {'a': 2, 'c': 6}))
+
+        self.assertEqual(self.a.both(), ((self.a, 3), {'b': 4}))
+        self.assertEqual(self.a.both(5), ((self.a, 3, 5), {'b': 4}))
+        self.assertEqual(self.a.both(c=6), ((self.a, 3), {'b': 4, 'c': 6}))
+        self.assertEqual(self.a.both(5, c=6), ((self.a, 3, 5), {'b': 4, 'c': 6}))
+
+        self.assertEqual(self.A.both(self.a, 5, c=6), ((self.a, 3, 5), {'b': 4, 'c': 6}))
+
+    def test_nested(self):
+        self.assertEqual(self.a.nested(), ((self.a, 1, 5), {}))
+        self.assertEqual(self.a.nested(6), ((self.a, 1, 5, 6), {}))
+        self.assertEqual(self.a.nested(d=7), ((self.a, 1, 5), {'d': 7}))
+        self.assertEqual(self.a.nested(6, d=7), ((self.a, 1, 5, 6), {'d': 7}))
+
+        self.assertEqual(self.A.nested(self.a, 6, d=7), ((self.a, 1, 5, 6), {'d': 7}))
+
+    def test_over_partial(self):
+        self.assertEqual(self.a.over_partial(), ((self.a, 7), {'c': 6}))
+        self.assertEqual(self.a.over_partial(5), ((self.a, 7, 5), {'c': 6}))
+        self.assertEqual(self.a.over_partial(d=8), ((self.a, 7), {'c': 6, 'd': 8}))
+        self.assertEqual(self.a.over_partial(5, d=8), ((self.a, 7, 5), {'c': 6, 'd': 8}))
+
+        self.assertEqual(self.A.over_partial(self.a, 5, d=8), ((self.a, 7, 5), {'c': 6, 'd': 8}))
+
+    def test_bound_method_introspection(self):
+        obj = self.a
+        self.assertIs(obj.both.__self__, obj)
+        self.assertIs(obj.nested.__self__, obj)
+        self.assertIs(obj.over_partial.__self__, obj)
+        self.assertIs(obj.cls.__self__, self.A)
+        self.assertIs(self.A.cls.__self__, self.A)
+
+    def test_unbound_method_retrieval(self):
+        obj = self.A
+        self.assertFalse(hasattr(obj.both, "__self__"))
+        self.assertFalse(hasattr(obj.nested, "__self__"))
+        self.assertFalse(hasattr(obj.over_partial, "__self__"))
+        self.assertFalse(hasattr(obj.static, "__self__"))
+        self.assertFalse(hasattr(self.a.static, "__self__"))
+
+    def test_descriptors(self):
+        for obj in [self.A, self.a]:
+            with self.subTest(obj=obj):
+                self.assertEqual(obj.static(), ((8,), {}))
+                self.assertEqual(obj.static(5), ((8, 5), {}))
+                self.assertEqual(obj.static(d=8), ((8,), {'d': 8}))
+                self.assertEqual(obj.static(5, d=8), ((8, 5), {'d': 8}))
+
+                self.assertEqual(obj.cls(), ((self.A,), {'d': 9}))
+                self.assertEqual(obj.cls(5), ((self.A, 5), {'d': 9}))
+                self.assertEqual(obj.cls(c=8), ((self.A,), {'c': 8, 'd': 9}))
+                self.assertEqual(obj.cls(5, c=8), ((self.A, 5), {'c': 8, 'd': 9}))
+
+    def test_overriding_keywords(self):
+        self.assertEqual(self.a.keywords(a=3), ((self.a,), {'a': 3}))
+        self.assertEqual(self.A.keywords(self.a, a=3), ((self.a,), {'a': 3}))
+
+    def test_invalid_args(self):
+        with self.assertRaises(TypeError):
+            class B(object):
+                method = functools.partialmethod(None, 1)
+
+    def test_repr(self):
+        self.assertEqual(repr(vars(self.A)['both']),
+                         'functools.partialmethod({}, 3, b=4)'.format(capture))
+
+    def test_abstract(self):
+        class Abstract(abc.ABCMeta):
+
+            @abc.abstractmethod
+            def add(self, x, y):
+                pass
+
+            add5 = functools.partialmethod(add, 5)
+
+        self.assertTrue(Abstract.add.__isabstractmethod__)
+        self.assertTrue(Abstract.add5.__isabstractmethod__)
+
+        for func in [self.A.static, self.A.cls, self.A.over_partial, self.A.nested, self.A.both]:
+            self.assertFalse(getattr(func, '__isabstractmethod__', False))
+
+
 class TestUpdateWrapper(unittest.TestCase):
 
     def check_wrapper(self, wrapper, wrapped,
@@ -1433,6 +1548,7 @@
         TestPartialC,
         TestPartialPy,
         TestPartialCSubclass,
+        TestPartialMethod,
         TestUpdateWrapper,
         TestTotalOrdering,
         TestCmpToKeyC,
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 37fe853..aeafc65 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -131,6 +131,14 @@
                 if not ztxt: break
         self.assertEqual(contents, b'a'*201)
 
+    def test_exclusive_write(self):
+        with gzip.GzipFile(self.filename, 'xb') as f:
+            f.write(data1 * 50)
+        with gzip.GzipFile(self.filename, 'rb') as f:
+            self.assertEqual(f.read(), data1 * 50)
+        with self.assertRaises(FileExistsError):
+            gzip.GzipFile(self.filename, 'xb')
+
     def test_buffered_reader(self):
         # Issue #7471: a GzipFile can be wrapped in a BufferedReader for
         # performance.
@@ -206,6 +214,9 @@
         self.test_write()
         with gzip.GzipFile(self.filename, 'r') as f:
             self.assertEqual(f.myfileobj.mode, 'rb')
+        support.unlink(self.filename)
+        with gzip.GzipFile(self.filename, 'x') as f:
+            self.assertEqual(f.myfileobj.mode, 'xb')
 
     def test_1647484(self):
         for mode in ('wb', 'rb'):
@@ -414,35 +425,59 @@
 class TestOpen(BaseTest):
     def test_binary_modes(self):
         uncompressed = data1 * 50
+
         with gzip.open(self.filename, "wb") as f:
             f.write(uncompressed)
         with open(self.filename, "rb") as f:
             file_data = gzip.decompress(f.read())
             self.assertEqual(file_data, uncompressed)
+
         with gzip.open(self.filename, "rb") as f:
             self.assertEqual(f.read(), uncompressed)
+
         with gzip.open(self.filename, "ab") as f:
             f.write(uncompressed)
         with open(self.filename, "rb") as f:
             file_data = gzip.decompress(f.read())
             self.assertEqual(file_data, uncompressed * 2)
 
+        with self.assertRaises(FileExistsError):
+            gzip.open(self.filename, "xb")
+        support.unlink(self.filename)
+        with gzip.open(self.filename, "xb") as f:
+            f.write(uncompressed)
+        with open(self.filename, "rb") as f:
+            file_data = gzip.decompress(f.read())
+            self.assertEqual(file_data, uncompressed)
+
     def test_implicit_binary_modes(self):
         # Test implicit binary modes (no "b" or "t" in mode string).
         uncompressed = data1 * 50
+
         with gzip.open(self.filename, "w") as f:
             f.write(uncompressed)
         with open(self.filename, "rb") as f:
             file_data = gzip.decompress(f.read())
             self.assertEqual(file_data, uncompressed)
+
         with gzip.open(self.filename, "r") as f:
             self.assertEqual(f.read(), uncompressed)
+
         with gzip.open(self.filename, "a") as f:
             f.write(uncompressed)
         with open(self.filename, "rb") as f:
             file_data = gzip.decompress(f.read())
             self.assertEqual(file_data, uncompressed * 2)
 
+        with self.assertRaises(FileExistsError):
+            gzip.open(self.filename, "x")
+        support.unlink(self.filename)
+        with gzip.open(self.filename, "x") as f:
+            f.write(uncompressed)
+        with open(self.filename, "rb") as f:
+            file_data = gzip.decompress(f.read())
+            self.assertEqual(file_data, uncompressed)
+
     def test_text_modes(self):
         uncompressed = data1.decode("ascii") * 50
         uncompressed_raw = uncompressed.replace("\n", os.linesep)
@@ -477,6 +512,8 @@
         with self.assertRaises(ValueError):
             gzip.open(self.filename, "wbt")
         with self.assertRaises(ValueError):
+            gzip.open(self.filename, "xbt")
+        with self.assertRaises(ValueError):
             gzip.open(self.filename, "rb", encoding="utf-8")
         with self.assertRaises(ValueError):
             gzip.open(self.filename, "rb", errors="ignore")
diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py
index 6d5c5a4..4a5ea7f 100644
--- a/Lib/test/test_hashlib.py
+++ b/Lib/test/test_hashlib.py
@@ -18,11 +18,13 @@
 import unittest
 import warnings
 from test import support
-from test.support import _4G, bigmemtest
+from test.support import _4G, bigmemtest, import_fresh_module
 
 # Were we compiled --with-pydebug or with #define Py_DEBUG?
 COMPILED_WITH_PYDEBUG = hasattr(sys, 'gettotalrefcount')
 
+c_hashlib = import_fresh_module('hashlib', fresh=['_hashlib'])
+py_hashlib = import_fresh_module('hashlib', blocked=['_hashlib'])
 
 def hexstr(s):
     assert isinstance(s, bytes), repr(s)
@@ -82,26 +84,30 @@
                 if constructor:
                     constructors.add(constructor)
 
+        def add_builtin_constructor(name):
+            constructor = getattr(hashlib, "__get_builtin_constructor")(name)
+            self.constructors_to_test[name].add(constructor)
+
         _md5 = self._conditional_import_module('_md5')
         if _md5:
-            self.constructors_to_test['md5'].add(_md5.md5)
+            add_builtin_constructor('md5')
         _sha1 = self._conditional_import_module('_sha1')
         if _sha1:
-            self.constructors_to_test['sha1'].add(_sha1.sha1)
+            add_builtin_constructor('sha1')
         _sha256 = self._conditional_import_module('_sha256')
         if _sha256:
-            self.constructors_to_test['sha224'].add(_sha256.sha224)
-            self.constructors_to_test['sha256'].add(_sha256.sha256)
+            add_builtin_constructor('sha224')
+            add_builtin_constructor('sha256')
         _sha512 = self._conditional_import_module('_sha512')
         if _sha512:
-            self.constructors_to_test['sha384'].add(_sha512.sha384)
-            self.constructors_to_test['sha512'].add(_sha512.sha512)
+            add_builtin_constructor('sha384')
+            add_builtin_constructor('sha512')
         _sha3 = self._conditional_import_module('_sha3')
         if _sha3:
-            self.constructors_to_test['sha3_224'].add(_sha3.sha3_224)
-            self.constructors_to_test['sha3_256'].add(_sha3.sha3_256)
-            self.constructors_to_test['sha3_384'].add(_sha3.sha3_384)
-            self.constructors_to_test['sha3_512'].add(_sha3.sha3_512)
+            add_builtin_constructor('sha3_224')
+            add_builtin_constructor('sha3_256')
+            add_builtin_constructor('sha3_384')
+            add_builtin_constructor('sha3_512')
 
         super(HashLibTestCase, self).__init__(*args, **kwargs)
 
@@ -130,8 +136,10 @@
         self.assertRaises(TypeError, hashlib.new, 1)
 
     def test_get_builtin_constructor(self):
-        get_builtin_constructor = hashlib.__dict__[
-                '__get_builtin_constructor']
+        get_builtin_constructor = getattr(hashlib,
+                                          '__get_builtin_constructor')
+        builtin_constructor_cache = getattr(hashlib,
+                                            '__builtin_constructor_cache')
         self.assertRaises(ValueError, get_builtin_constructor, 'test')
         try:
             import _md5
@@ -139,6 +147,8 @@
             pass
         # This forces an ImportError for "import _md5" statements
         sys.modules['_md5'] = None
+        # clear the cache
+        builtin_constructor_cache.clear()
         try:
             self.assertRaises(ValueError, get_builtin_constructor, 'md5')
         finally:
@@ -147,6 +157,9 @@
             else:
                 del sys.modules['_md5']
         self.assertRaises(TypeError, get_builtin_constructor, 3)
+        constructor = get_builtin_constructor('md5')
+        self.assertIs(constructor, _md5.md5)
+        self.assertEqual(sorted(builtin_constructor_cache), ['MD5', 'md5'])
 
     def test_hexdigest(self):
         for cons in self.hash_constructors:
@@ -546,5 +559,94 @@
         self.assertEqual(expected_hash, hasher.hexdigest())
 
 
+class KDFTests(unittest.TestCase):
+
+    pbkdf2_test_vectors = [
+        (b'password', b'salt', 1, None),
+        (b'password', b'salt', 2, None),
+        (b'password', b'salt', 4096, None),
+        # too slow, it takes over a minute on a fast CPU.
+        #(b'password', b'salt', 16777216, None),
+        (b'passwordPASSWORDpassword', b'saltSALTsaltSALTsaltSALTsaltSALTsalt',
+         4096, -1),
+        (b'pass\0word', b'sa\0lt', 4096, 16),
+    ]
+
+    pbkdf2_results = {
+        "sha1": [
+            # offical test vectors from RFC 6070
+            (bytes.fromhex('0c60c80f961f0e71f3a9b524af6012062fe037a6'), None),
+            (bytes.fromhex('ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957'), None),
+            (bytes.fromhex('4b007901b765489abead49d926f721d065a429c1'), None),
+            #(bytes.fromhex('eefe3d61cd4da4e4e9945b3d6ba2158c2634e984'), None),
+            (bytes.fromhex('3d2eec4fe41c849b80c8d83662c0e44a8b291a964c'
+                           'f2f07038'), 25),
+            (bytes.fromhex('56fa6aa75548099dcc37d7f03425e0c3'), None),],
+        "sha256": [
+            (bytes.fromhex('120fb6cffcf8b32c43e7225256c4f837'
+                           'a86548c92ccc35480805987cb70be17b'), None),
+            (bytes.fromhex('ae4d0c95af6b46d32d0adff928f06dd0'
+                           '2a303f8ef3c251dfd6e2d85a95474c43'), None),
+            (bytes.fromhex('c5e478d59288c841aa530db6845c4c8d'
+                           '962893a001ce4e11a4963873aa98134a'), None),
+            #(bytes.fromhex('cf81c66fe8cfc04d1f31ecb65dab4089'
+            #               'f7f179e89b3b0bcb17ad10e3ac6eba46'), None),
+            (bytes.fromhex('348c89dbcbd32b2f32d814b8116e84cf2b17'
+                           '347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9'), 40),
+            (bytes.fromhex('89b69d0516f829893c696226650a8687'), None),],
+        "sha512": [
+            (bytes.fromhex('867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5'
+                           'd513554e1c8cf252c02d470a285a0501bad999bfe943c08f'
+                           '050235d7d68b1da55e63f73b60a57fce'), None),
+            (bytes.fromhex('e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f004071'
+                           '3f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82'
+                           'be67335c77a6068e04112754f27ccf4e'), None),
+            (bytes.fromhex('d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f8'
+                           '7f6902e072f457b5143f30602641b3d55cd335988cb36b84'
+                           '376060ecd532e039b742a239434af2d5'), None),
+            (bytes.fromhex('8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b8'
+                           '68c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30'
+                           '225c583a186cd82bd4daea9724a3d3b8'), 64),
+            (bytes.fromhex('9d9e9c4cd21fe4be24d5b8244c759665'), None),],
+    }
+
+    def _test_pbkdf2_hmac(self, pbkdf2):
+        for digest_name, results in self.pbkdf2_results.items():
+            for i, vector in enumerate(self.pbkdf2_test_vectors):
+                password, salt, rounds, dklen = vector
+                expected, overwrite_dklen = results[i]
+                if overwrite_dklen:
+                    dklen = overwrite_dklen
+                out = pbkdf2(digest_name, password, salt, rounds, dklen)
+                self.assertEqual(out, expected,
+                                 (digest_name, password, salt, rounds, dklen))
+                out = pbkdf2(digest_name, memoryview(password),
+                             memoryview(salt), rounds, dklen)
+                out = pbkdf2(digest_name, bytearray(password),
+                             bytearray(salt), rounds, dklen)
+                self.assertEqual(out, expected)
+                if dklen is None:
+                    out = pbkdf2(digest_name, password, salt, rounds)
+                    self.assertEqual(out, expected,
+                                     (digest_name, password, salt, rounds))
+
+        self.assertRaises(TypeError, pbkdf2, b'sha1', b'pass', b'salt', 1)
+        self.assertRaises(TypeError, pbkdf2, 'sha1', 'pass', 'salt', 1)
+        self.assertRaises(ValueError, pbkdf2, 'sha1', b'pass', b'salt', 0)
+        self.assertRaises(ValueError, pbkdf2, 'sha1', b'pass', b'salt', -1)
+        self.assertRaises(ValueError, pbkdf2, 'sha1', b'pass', b'salt', 1, 0)
+        self.assertRaises(ValueError, pbkdf2, 'sha1', b'pass', b'salt', 1, -1)
+        with self.assertRaisesRegex(ValueError, 'unsupported hash type'):
+            pbkdf2('unknown', b'pass', b'salt', 1)
+
+    def test_pbkdf2_hmac_py(self):
+        self._test_pbkdf2_hmac(py_hashlib.pbkdf2_hmac)
+
+    @unittest.skipUnless(hasattr(c_hashlib, 'pbkdf2_hmac'),
+                     '   test requires OpenSSL > 1.0')
+    def test_pbkdf2_hmac_c(self):
+        self._test_pbkdf2_hmac(c_hashlib.pbkdf2_hmac)
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_htmlparser.py b/Lib/test/test_htmlparser.py
index b15b6fd..8863316 100644
--- a/Lib/test/test_htmlparser.py
+++ b/Lib/test/test_htmlparser.py
@@ -96,7 +96,9 @@
             parser = self.get_collector()
             parser.feed(source)
             parser.close()
-        self.assertRaises(html.parser.HTMLParseError, parse)
+        with self.assertRaises(html.parser.HTMLParseError):
+            with self.assertWarns(DeprecationWarning):
+                parse()
 
 
 class HTMLParserStrictTestCase(TestCaseBase):
@@ -229,6 +231,11 @@
         self._parse_error("<a foo='bar")
         self._parse_error("<a foo='>'")
         self._parse_error("<a foo='>")
+        self._parse_error("<a$>")
+        self._parse_error("<a$b>")
+        self._parse_error("<a$b/>")
+        self._parse_error("<a$b  >")
+        self._parse_error("<a$b  />")
 
     def test_valid_doctypes(self):
         # from http://www.w3.org/QA/2002/04/valid-dtd-list.html
@@ -360,7 +367,16 @@
 class HTMLParserTolerantTestCase(HTMLParserStrictTestCase):
 
     def get_collector(self):
-        return EventCollector(strict=False)
+        return EventCollector()
+
+    def test_deprecation_warnings(self):
+        with self.assertWarns(DeprecationWarning):
+            EventCollector(strict=True)
+        with self.assertWarns(DeprecationWarning):
+            EventCollector(strict=False)
+        with self.assertRaises(html.parser.HTMLParseError):
+            with self.assertWarns(DeprecationWarning):
+                EventCollector().error('test')
 
     def test_tolerant_parsing(self):
         self._run_check('<html <html>te>>xt&a<<bc</a></html>\n'
@@ -368,8 +384,8 @@
                             ('starttag', 'html', [('<html', None)]),
                             ('data', 'te>>xt'),
                             ('entityref', 'a'),
-                            ('data', '<<bc'),
-                            ('endtag', 'a'),
+                            ('data', '<'),
+                            ('starttag', 'bc<', [('a', None)]),
                             ('endtag', 'html'),
                             ('data', '\n<img src="URL>'),
                             ('comment', '/img'),
@@ -380,8 +396,7 @@
         self._run_check("</$>", [('comment', '$')])
         self._run_check("</", [('data', '</')])
         self._run_check("</a", [('data', '</a')])
-        # XXX this might be wrong
-        self._run_check("<a<a>", [('data', '<a'), ('starttag', 'a', [])])
+        self._run_check("<a<a>", [('starttag', 'a<a', [])])
         self._run_check("</a<a>", [('endtag', 'a<a')])
         self._run_check("<!", [('data', '<!')])
         self._run_check("<a", [('data', '<a')])
@@ -389,6 +404,11 @@
         self._run_check("<a foo='bar", [('data', "<a foo='bar")])
         self._run_check("<a foo='>'", [('data', "<a foo='>'")])
         self._run_check("<a foo='>", [('data', "<a foo='>")])
+        self._run_check("<a$>", [('starttag', 'a$', [])])
+        self._run_check("<a$b>", [('starttag', 'a$b', [])])
+        self._run_check("<a$b/>", [('startendtag', 'a$b', [])])
+        self._run_check("<a$b  >", [('starttag', 'a$b', [])])
+        self._run_check("<a$b  />", [('startendtag', 'a$b', [])])
 
     def test_slashes_in_starttag(self):
         self._run_check('<a foo="var"/>', [('startendtag', 'a', [('foo', 'var')])])
@@ -676,7 +696,7 @@
 class AttributesTolerantTestCase(AttributesStrictTestCase):
 
     def get_collector(self):
-        return EventCollector(strict=False)
+        return EventCollector()
 
     def test_attr_funky_names2(self):
         self._run_check(
@@ -753,11 +773,5 @@
                          ("data", "spam"), ("endtag", "a")])
 
 
-
-def test_main():
-    support.run_unittest(HTMLParserStrictTestCase, HTMLParserTolerantTestCase,
-                         AttributesStrictTestCase, AttributesTolerantTestCase)
-
-
 if __name__ == "__main__":
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py
index 778e919..31c0b6a 100644
--- a/Lib/test/test_httplib.py
+++ b/Lib/test/test_httplib.py
@@ -347,6 +347,15 @@
             self.fail("Did not expect response from HEAD request")
         self.assertEqual(bytes(b), b'\x00'*5)
 
+    def test_too_many_headers(self):
+        headers = '\r\n'.join('Header%d: foo' % i
+                              for i in range(client._MAXHEADERS + 1)) + '\r\n'
+        text = ('HTTP/1.1 200 OK\r\n' + headers)
+        s = FakeSocket(text)
+        r = client.HTTPResponse(s)
+        self.assertRaisesRegex(client.HTTPException,
+                               r"got more than \d+ headers", r.begin)
+
     def test_send_file(self):
         expected = (b'GET /foo HTTP/1.1\r\nHost: example.com\r\n'
                     b'Accept-Encoding: identity\r\nContent-Length:')
diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py
index 4083afc..b2bce1c 100644
--- a/Lib/test/test_httpservers.py
+++ b/Lib/test/test_httpservers.py
@@ -346,6 +346,7 @@
         self.parent_dir = tempfile.mkdtemp()
         self.cgi_dir = os.path.join(self.parent_dir, 'cgi-bin')
         os.mkdir(self.cgi_dir)
+        self.nocgi_path = None
         self.file1_path = None
         self.file2_path = None
 
@@ -366,6 +367,11 @@
             self.tearDown()
             self.skipTest("Python executable path is not encodable to utf-8")
 
+        self.nocgi_path = os.path.join(self.parent_dir, 'nocgi.py')
+        with open(self.nocgi_path, 'w') as fp:
+            fp.write(cgi_file1 % self.pythonexe)
+        os.chmod(self.nocgi_path, 0o777)
+
         self.file1_path = os.path.join(self.cgi_dir, 'file1.py')
         with open(self.file1_path, 'w', encoding='utf-8') as file1:
             file1.write(cgi_file1 % self.pythonexe)
@@ -383,6 +389,8 @@
             os.chdir(self.cwd)
             if self.pythonexe != sys.executable:
                 os.remove(self.pythonexe)
+            if self.nocgi_path:
+                os.remove(self.nocgi_path)
             if self.file1_path:
                 os.remove(self.file1_path)
             if self.file2_path:
@@ -439,6 +447,10 @@
         self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200),
             (res.read(), res.getheader('Content-type'), res.status))
 
+    def test_issue19435(self):
+        res = self.request('///////////nocgi.py/../cgi-bin/nothere.sh')
+        self.assertEqual(res.status, 404)
+
     def test_post(self):
         params = urllib.parse.urlencode(
             {'spam' : 1, 'eggs' : 'python', 'bacon' : 123456})
diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py
index c37ea1d..81bfd1f 100644
--- a/Lib/test/test_imaplib.py
+++ b/Lib/test/test_imaplib.py
@@ -325,6 +325,17 @@
             self.assertEqual(ret, "OK")
 
 
+    def test_linetoolong(self):
+        class TooLongHandler(SimpleIMAPHandler):
+            def handle(self):
+                # Send a very long response line
+                self.wfile.write(b'* OK ' + imaplib._MAXLINE*b'x' + b'\r\n')
+
+        with self.reaped_server(TooLongHandler) as server:
+            self.assertRaises(imaplib.IMAP4.error,
+                              self.imap_class, *server.server_address)
+
+
 class ThreadedNetworkedTests(BaseThreadedNetworkedTests):
 
     server_class = socketserver.TCPServer
diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index 9d15a43..ae8e160 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -3,7 +3,6 @@
 import importlib.util
 from importlib._bootstrap import _get_sourcefile
 import builtins
-from test.test_importlib.import_ import util as importlib_util
 import marshal
 import os
 import platform
@@ -149,16 +148,24 @@
         sys.path.append('')
         importlib.invalidate_caches()
 
+        namespace = {}
         try:
             make_legacy_pyc(filename)
             # This used to crash.
-            exec('import ' + module)
+            exec('import ' + module, None, namespace)
         finally:
             # Cleanup.
             del sys.path[-1]
             unlink(filename + 'c')
             unlink(filename + 'o')
 
+            # Remove references to the module (unload the module)
+            namespace.clear()
+            try:
+                del sys.modules[module]
+            except KeyError:
+                pass
+
     def test_failing_import_sticks(self):
         source = TESTFN + ".py"
         with open(source, "w") as f:
@@ -1050,7 +1057,8 @@
         # encode filenames, especially on Windows
         pyname = script_helper.make_script('', TESTFN_UNENCODABLE, 'pass')
         name = pyname[:-3]
-        script_helper.assert_python_ok("-c", "mod = __import__(%a)" % name)
+        script_helper.assert_python_ok("-c", "mod = __import__(%a)" % name,
+                                       __isolated=False)
 
 
 if __name__ == '__main__':
diff --git a/Lib/test/test_importlib/__main__.py b/Lib/test/test_importlib/__main__.py
index c397128..14bd5bc 100644
--- a/Lib/test/test_importlib/__main__.py
+++ b/Lib/test/test_importlib/__main__.py
@@ -4,17 +4,6 @@
 builtins.__import__ instead of importlib.__import__.
 
 """
-from . import test_main
-
-
 if __name__ == '__main__':
-    import argparse
-
-    parser = argparse.ArgumentParser(description='Execute the importlib test '
-                                                  'suite')
-    parser.add_argument('-b', '--builtin', action='store_true', default=False,
-                        help='use builtins.__import__() instead of importlib')
-    args = parser.parse_args()
-    if args.builtin:
-        util.using___import__ = True
+    from . import test_main
     test_main()
diff --git a/Lib/test/test_importlib/abc.py b/Lib/test/test_importlib/abc.py
index 2c17ac3..b9ff344 100644
--- a/Lib/test/test_importlib/abc.py
+++ b/Lib/test/test_importlib/abc.py
@@ -2,7 +2,7 @@
 import unittest
 
 
-class FinderTests(unittest.TestCase, metaclass=abc.ABCMeta):
+class FinderTests(metaclass=abc.ABCMeta):
 
     """Basic tests for a finder to pass."""
 
@@ -39,7 +39,7 @@
         pass
 
 
-class LoaderTests(unittest.TestCase, metaclass=abc.ABCMeta):
+class LoaderTests(metaclass=abc.ABCMeta):
 
     @abc.abstractmethod
     def test_module(self):
diff --git a/Lib/test/test_importlib/builtin/test_finder.py b/Lib/test/test_importlib/builtin/test_finder.py
index 146538d..aa1ea42 100644
--- a/Lib/test/test_importlib/builtin/test_finder.py
+++ b/Lib/test/test_importlib/builtin/test_finder.py
@@ -1,11 +1,13 @@
-from importlib import machinery
 from .. import abc
 from .. import util
 from . import util as builtin_util
 
+frozen_machinery, source_machinery = util.import_importlib('importlib.machinery')
+
 import sys
 import unittest
 
+
 class FinderTests(abc.FinderTests):
 
     """Test find_module() for built-in modules."""
@@ -13,7 +15,7 @@
     def test_module(self):
         # Common case.
         with util.uncache(builtin_util.NAME):
-            found = machinery.BuiltinImporter.find_module(builtin_util.NAME)
+            found = self.machinery.BuiltinImporter.find_module(builtin_util.NAME)
             self.assertTrue(found)
 
     def test_package(self):
@@ -34,22 +36,19 @@
 
     def test_failure(self):
         assert 'importlib' not in sys.builtin_module_names
-        loader = machinery.BuiltinImporter.find_module('importlib')
+        loader = self.machinery.BuiltinImporter.find_module('importlib')
         self.assertIsNone(loader)
 
     def test_ignore_path(self):
         # The value for 'path' should always trigger a failed import.
         with util.uncache(builtin_util.NAME):
-            loader = machinery.BuiltinImporter.find_module(builtin_util.NAME,
+            loader = self.machinery.BuiltinImporter.find_module(builtin_util.NAME,
                                                             ['pkg'])
             self.assertIsNone(loader)
 
-
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(FinderTests)
+Frozen_FinderTests, Source_FinderTests = util.test_both(FinderTests,
+        machinery=[frozen_machinery, source_machinery])
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/builtin/test_loader.py b/Lib/test/test_importlib/builtin/test_loader.py
index 8e186e7..4ee8dc4 100644
--- a/Lib/test/test_importlib/builtin/test_loader.py
+++ b/Lib/test/test_importlib/builtin/test_loader.py
@@ -1,9 +1,9 @@
-import importlib
-from importlib import machinery
 from .. import abc
 from .. import util
 from . import util as builtin_util
 
+frozen_machinery, source_machinery = util.import_importlib('importlib.machinery')
+
 import sys
 import types
 import unittest
@@ -13,8 +13,9 @@
 
     """Test load_module() for built-in modules."""
 
-    verification = {'__name__': 'errno', '__package__': '',
-                    '__loader__': machinery.BuiltinImporter}
+    def setUp(self):
+        self.verification = {'__name__': 'errno', '__package__': '',
+                             '__loader__': self.machinery.BuiltinImporter}
 
     def verify(self, module):
         """Verify that the module matches against what it should have."""
@@ -23,8 +24,8 @@
             self.assertEqual(getattr(module, attr), value)
         self.assertIn(module.__name__, sys.modules)
 
-    load_module = staticmethod(lambda name:
-                                machinery.BuiltinImporter.load_module(name))
+    def load_module(self, name):
+        return self.machinery.BuiltinImporter.load_module(name)
 
     def test_module(self):
         # Common case.
@@ -61,45 +62,47 @@
     def test_already_imported(self):
         # Using the name of a module already imported but not a built-in should
         # still fail.
-        assert hasattr(importlib, '__file__')  # Not a built-in.
+        assert hasattr(unittest, '__file__')  # Not a built-in.
         with self.assertRaises(ImportError) as cm:
-            self.load_module('importlib')
-        self.assertEqual(cm.exception.name, 'importlib')
+            self.load_module('unittest')
+        self.assertEqual(cm.exception.name, 'unittest')
 
 
-class InspectLoaderTests(unittest.TestCase):
+Frozen_LoaderTests, Source_LoaderTests = util.test_both(LoaderTests,
+        machinery=[frozen_machinery, source_machinery])
+
+
+class InspectLoaderTests:
 
     """Tests for InspectLoader methods for BuiltinImporter."""
 
     def test_get_code(self):
         # There is no code object.
-        result = machinery.BuiltinImporter.get_code(builtin_util.NAME)
+        result = self.machinery.BuiltinImporter.get_code(builtin_util.NAME)
         self.assertIsNone(result)
 
     def test_get_source(self):
         # There is no source.
-        result = machinery.BuiltinImporter.get_source(builtin_util.NAME)
+        result = self.machinery.BuiltinImporter.get_source(builtin_util.NAME)
         self.assertIsNone(result)
 
     def test_is_package(self):
         # Cannot be a package.
-        result = machinery.BuiltinImporter.is_package(builtin_util.NAME)
+        result = self.machinery.BuiltinImporter.is_package(builtin_util.NAME)
         self.assertTrue(not result)
 
     def test_not_builtin(self):
         # Modules not built-in should raise ImportError.
         for meth_name in ('get_code', 'get_source', 'is_package'):
-            method = getattr(machinery.BuiltinImporter, meth_name)
+            method = getattr(self.machinery.BuiltinImporter, meth_name)
         with self.assertRaises(ImportError) as cm:
             method(builtin_util.BAD_NAME)
         self.assertRaises(builtin_util.BAD_NAME)
 
-
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(LoaderTests, InspectLoaderTests)
+Frozen_InspectLoaderTests, Source_InspectLoaderTests = util.test_both(
+        InspectLoaderTests,
+        machinery=[frozen_machinery, source_machinery])
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/extension/test_case_sensitivity.py b/Lib/test/test_importlib/extension/test_case_sensitivity.py
index 2b536e2..bb74321 100644
--- a/Lib/test/test_importlib/extension/test_case_sensitivity.py
+++ b/Lib/test/test_importlib/extension/test_case_sensitivity.py
@@ -1,23 +1,25 @@
+from importlib import _bootstrap
 import sys
 from test import support
 import unittest
 
-from importlib import _bootstrap
-from importlib import machinery
 from .. import util
 from . import util as ext_util
 
+frozen_machinery, source_machinery = util.import_importlib('importlib.machinery')
 
+
+@unittest.skipIf(ext_util.FILENAME is None, '_testcapi not available')
 @util.case_insensitive_tests
-class ExtensionModuleCaseSensitivityTest(unittest.TestCase):
+class ExtensionModuleCaseSensitivityTest:
 
     def find_module(self):
         good_name = ext_util.NAME
         bad_name = good_name.upper()
         assert good_name != bad_name
-        finder = machinery.FileFinder(ext_util.PATH,
-                                        (machinery.ExtensionFileLoader,
-                                         machinery.EXTENSION_SUFFIXES))
+        finder = self.machinery.FileFinder(ext_util.PATH,
+                                          (self.machinery.ExtensionFileLoader,
+                                           self.machinery.EXTENSION_SUFFIXES))
         return finder.find_module(bad_name)
 
     def test_case_sensitive(self):
@@ -38,14 +40,10 @@
             loader = self.find_module()
             self.assertTrue(hasattr(loader, 'load_module'))
 
-
-
-
-def test_main():
-    if ext_util.FILENAME is None:
-        return
-    support.run_unittest(ExtensionModuleCaseSensitivityTest)
+Frozen_ExtensionCaseSensitivity, Source_ExtensionCaseSensitivity = util.test_both(
+        ExtensionModuleCaseSensitivityTest,
+        machinery=[frozen_machinery, source_machinery])
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/extension/test_finder.py b/Lib/test/test_importlib/extension/test_finder.py
index a63cfdb..10e78cc 100644
--- a/Lib/test/test_importlib/extension/test_finder.py
+++ b/Lib/test/test_importlib/extension/test_finder.py
@@ -1,17 +1,20 @@
-from importlib import machinery
 from .. import abc
+from .. import util as test_util
 from . import util
 
+machinery = test_util.import_importlib('importlib.machinery')
+
 import unittest
 
+
 class FinderTests(abc.FinderTests):
 
     """Test the finder for extension modules."""
 
     def find_module(self, fullname):
-        importer = machinery.FileFinder(util.PATH,
-                                        (machinery.ExtensionFileLoader,
-                                         machinery.EXTENSION_SUFFIXES))
+        importer = self.machinery.FileFinder(util.PATH,
+                                            (self.machinery.ExtensionFileLoader,
+                                             self.machinery.EXTENSION_SUFFIXES))
         return importer.find_module(fullname)
 
     def test_module(self):
@@ -36,11 +39,9 @@
     def test_failure(self):
         self.assertIsNone(self.find_module('asdfjkl;'))
 
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(FinderTests)
+Frozen_FinderTests, Source_FinderTests = test_util.test_both(
+        FinderTests, machinery=machinery)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/extension/test_loader.py b/Lib/test/test_importlib/extension/test_loader.py
index ca5af20..1e8afba 100644
--- a/Lib/test/test_importlib/extension/test_loader.py
+++ b/Lib/test/test_importlib/extension/test_loader.py
@@ -1,8 +1,9 @@
-from importlib import machinery
 from . import util as ext_util
 from .. import abc
 from .. import util
 
+machinery = util.import_importlib('importlib.machinery')
+
 import os.path
 import sys
 import unittest
@@ -13,8 +14,8 @@
     """Test load_module() for extension modules."""
 
     def setUp(self):
-        self.loader = machinery.ExtensionFileLoader(ext_util.NAME,
-                                                     ext_util.FILEPATH)
+        self.loader = self.machinery.ExtensionFileLoader(ext_util.NAME,
+                                                         ext_util.FILEPATH)
 
     def load_module(self, fullname):
         return self.loader.load_module(fullname)
@@ -36,7 +37,7 @@
                 self.assertEqual(getattr(module, attr), value)
             self.assertIn(ext_util.NAME, sys.modules)
             self.assertIsInstance(module.__loader__,
-                                  machinery.ExtensionFileLoader)
+                                  self.machinery.ExtensionFileLoader)
 
     def test_package(self):
         # No extension module as __init__ available for testing.
@@ -64,16 +65,15 @@
 
     def test_is_package(self):
         self.assertFalse(self.loader.is_package(ext_util.NAME))
-        for suffix in machinery.EXTENSION_SUFFIXES:
+        for suffix in self.machinery.EXTENSION_SUFFIXES:
             path = os.path.join('some', 'path', 'pkg', '__init__' + suffix)
-            loader = machinery.ExtensionFileLoader('pkg', path)
+            loader = self.machinery.ExtensionFileLoader('pkg', path)
             self.assertTrue(loader.is_package('pkg'))
 
+Frozen_LoaderTests, Source_LoaderTests = util.test_both(
+        LoaderTests, machinery=machinery)
 
-def test_main():
-    from test.support import run_unittest
-    run_unittest(LoaderTests)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/extension/test_path_hook.py b/Lib/test/test_importlib/extension/test_path_hook.py
index c4b4f4e..49d6734 100644
--- a/Lib/test/test_importlib/extension/test_path_hook.py
+++ b/Lib/test/test_importlib/extension/test_path_hook.py
@@ -1,31 +1,32 @@
-from importlib import machinery
+from .. import util as test_util
 from . import util
 
+machinery = test_util.import_importlib('importlib.machinery')
+
 import collections
 import sys
 import unittest
 
 
-class PathHookTests(unittest.TestCase):
+class PathHookTests:
 
     """Test the path hook for extension modules."""
     # XXX Should it only succeed for pre-existing directories?
     # XXX Should it only work for directories containing an extension module?
 
     def hook(self, entry):
-        return machinery.FileFinder.path_hook((machinery.ExtensionFileLoader,
-            machinery.EXTENSION_SUFFIXES))(entry)
+        return self.machinery.FileFinder.path_hook(
+                (self.machinery.ExtensionFileLoader,
+                 self.machinery.EXTENSION_SUFFIXES))(entry)
 
     def test_success(self):
         # Path hook should handle a directory where a known extension module
         # exists.
         self.assertTrue(hasattr(self.hook(util.PATH), 'find_module'))
 
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(PathHookTests)
+Frozen_PathHooksTests, Source_PathHooksTests = test_util.test_both(
+        PathHookTests, machinery=machinery)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/frozen/test_finder.py b/Lib/test/test_importlib/frozen/test_finder.py
index fa0c2a0..9e629bf 100644
--- a/Lib/test/test_importlib/frozen/test_finder.py
+++ b/Lib/test/test_importlib/frozen/test_finder.py
@@ -1,5 +1,7 @@
-from importlib import machinery
 from .. import abc
+from .. import util
+
+machinery = util.import_importlib('importlib.machinery')
 
 import unittest
 
@@ -9,7 +11,7 @@
     """Test finding frozen modules."""
 
     def find(self, name, path=None):
-        finder = machinery.FrozenImporter
+        finder = self.machinery.FrozenImporter
         return finder.find_module(name, path)
 
     def test_module(self):
@@ -37,11 +39,9 @@
         loader = self.find('<not real>')
         self.assertIsNone(loader)
 
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(FinderTests)
+Frozen_FinderTests, Source_FinderTests = util.test_both(FinderTests,
+                                                        machinery=machinery)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/frozen/test_loader.py b/Lib/test/test_importlib/frozen/test_loader.py
index 3e80138..be8dc3c 100644
--- a/Lib/test/test_importlib/frozen/test_loader.py
+++ b/Lib/test/test_importlib/frozen/test_loader.py
@@ -1,7 +1,8 @@
 from .. import abc
 from .. import util
 
-from importlib import machinery
+machinery = util.import_importlib('importlib.machinery')
+
 import unittest
 from test.support import captured_stdout
 import types
@@ -11,10 +12,10 @@
 
     def test_module(self):
         with util.uncache('__hello__'), captured_stdout() as stdout:
-            module = machinery.FrozenImporter.load_module('__hello__')
+            module = self.machinery.FrozenImporter.load_module('__hello__')
             check = {'__name__': '__hello__',
                     '__package__': '',
-                    '__loader__': machinery.FrozenImporter,
+                    '__loader__': self.machinery.FrozenImporter,
                     }
             for attr, value in check.items():
                 self.assertEqual(getattr(module, attr), value)
@@ -23,11 +24,11 @@
 
     def test_package(self):
         with util.uncache('__phello__'),  captured_stdout() as stdout:
-            module = machinery.FrozenImporter.load_module('__phello__')
+            module = self.machinery.FrozenImporter.load_module('__phello__')
             check = {'__name__': '__phello__',
                      '__package__': '__phello__',
                      '__path__': [],
-                     '__loader__': machinery.FrozenImporter,
+                     '__loader__': self.machinery.FrozenImporter,
                      }
             for attr, value in check.items():
                 attr_value = getattr(module, attr)
@@ -40,10 +41,10 @@
     def test_lacking_parent(self):
         with util.uncache('__phello__', '__phello__.spam'), \
              captured_stdout() as stdout:
-            module = machinery.FrozenImporter.load_module('__phello__.spam')
+            module = self.machinery.FrozenImporter.load_module('__phello__.spam')
             check = {'__name__': '__phello__.spam',
                     '__package__': '__phello__',
-                    '__loader__': machinery.FrozenImporter,
+                    '__loader__': self.machinery.FrozenImporter,
                     }
             for attr, value in check.items():
                 attr_value = getattr(module, attr)
@@ -55,15 +56,15 @@
 
     def test_module_reuse(self):
         with util.uncache('__hello__'), captured_stdout() as stdout:
-            module1 = machinery.FrozenImporter.load_module('__hello__')
-            module2 = machinery.FrozenImporter.load_module('__hello__')
+            module1 = self.machinery.FrozenImporter.load_module('__hello__')
+            module2 = self.machinery.FrozenImporter.load_module('__hello__')
             self.assertIs(module1, module2)
             self.assertEqual(stdout.getvalue(),
                              'Hello world!\nHello world!\n')
 
     def test_module_repr(self):
         with util.uncache('__hello__'), captured_stdout():
-            module = machinery.FrozenImporter.load_module('__hello__')
+            module = self.machinery.FrozenImporter.load_module('__hello__')
             self.assertEqual(repr(module),
                              "<module '__hello__' (frozen)>")
 
@@ -72,13 +73,16 @@
         pass
 
     def test_unloadable(self):
-        assert machinery.FrozenImporter.find_module('_not_real') is None
+        assert self.machinery.FrozenImporter.find_module('_not_real') is None
         with self.assertRaises(ImportError) as cm:
-            machinery.FrozenImporter.load_module('_not_real')
+            self.machinery.FrozenImporter.load_module('_not_real')
         self.assertEqual(cm.exception.name, '_not_real')
 
+Frozen_LoaderTests, Source_LoaderTests = util.test_both(LoaderTests,
+                                                        machinery=machinery)
 
-class InspectLoaderTests(unittest.TestCase):
+
+class InspectLoaderTests:
 
     """Tests for the InspectLoader methods for FrozenImporter."""
 
@@ -86,7 +90,7 @@
         # Make sure that the code object is good.
         name = '__hello__'
         with captured_stdout() as stdout:
-            code = machinery.FrozenImporter.get_code(name)
+            code = self.machinery.FrozenImporter.get_code(name)
             mod = types.ModuleType(name)
             exec(code, mod.__dict__)
             self.assertTrue(hasattr(mod, 'initialized'))
@@ -94,7 +98,7 @@
 
     def test_get_source(self):
         # Should always return None.
-        result = machinery.FrozenImporter.get_source('__hello__')
+        result = self.machinery.FrozenImporter.get_source('__hello__')
         self.assertIsNone(result)
 
     def test_is_package(self):
@@ -102,22 +106,20 @@
         test_for = (('__hello__', False), ('__phello__', True),
                     ('__phello__.spam', False))
         for name, is_package in test_for:
-            result = machinery.FrozenImporter.is_package(name)
+            result = self.machinery.FrozenImporter.is_package(name)
             self.assertEqual(bool(result), is_package)
 
     def test_failure(self):
         # Raise ImportError for modules that are not frozen.
         for meth_name in ('get_code', 'get_source', 'is_package'):
-            method = getattr(machinery.FrozenImporter, meth_name)
+            method = getattr(self.machinery.FrozenImporter, meth_name)
             with self.assertRaises(ImportError) as cm:
                 method('importlib')
             self.assertEqual(cm.exception.name, 'importlib')
 
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(LoaderTests, InspectLoaderTests)
+Frozen_ILTests, Source_ILTests = util.test_both(InspectLoaderTests,
+                                                machinery=machinery)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/import_/test___loader__.py b/Lib/test/test_importlib/import_/test___loader__.py
index 535daa0..9c18d19 100644
--- a/Lib/test/test_importlib/import_/test___loader__.py
+++ b/Lib/test/test_importlib/import_/test___loader__.py
@@ -16,7 +16,7 @@
         return self.module
 
 
-class LoaderAttributeTests(unittest.TestCase):
+class LoaderAttributeTests:
 
     def test___loader___missing(self):
         module = types.ModuleType('blah')
@@ -27,7 +27,7 @@
         loader = LoaderMock()
         loader.module = module
         with util.uncache('blah'), util.import_state(meta_path=[loader]):
-            module = import_util.import_('blah')
+            module = self.__import__('blah')
         self.assertEqual(loader, module.__loader__)
 
     def test___loader___is_None(self):
@@ -36,9 +36,13 @@
         loader = LoaderMock()
         loader.module = module
         with util.uncache('blah'), util.import_state(meta_path=[loader]):
-            returned_module = import_util.import_('blah')
+            returned_module = self.__import__('blah')
         self.assertEqual(loader, module.__loader__)
 
 
+Frozen_Tests, Source_Tests = util.test_both(LoaderAttributeTests,
+                                            __import__=import_util.__import__)
+
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_importlib/import_/test___package__.py b/Lib/test/test_importlib/import_/test___package__.py
index 783cde1..5fa432f 100644
--- a/Lib/test/test_importlib/import_/test___package__.py
+++ b/Lib/test/test_importlib/import_/test___package__.py
@@ -9,7 +9,7 @@
 from . import util as import_util
 
 
-class Using__package__(unittest.TestCase):
+class Using__package__:
 
     """Use of __package__ supercedes the use of __name__/__path__ to calculate
     what package a module belongs to. The basic algorithm is [__package__]::
@@ -38,8 +38,8 @@
         # [__package__]
         with util.mock_modules('pkg.__init__', 'pkg.fake') as importer:
             with util.import_state(meta_path=[importer]):
-                import_util.import_('pkg.fake')
-                module = import_util.import_('',
+                self.__import__('pkg.fake')
+                module = self.__import__('',
                                             globals={'__package__': 'pkg.fake'},
                                             fromlist=['attr'], level=2)
         self.assertEqual(module.__name__, 'pkg')
@@ -51,8 +51,8 @@
             globals_['__package__'] = None
         with util.mock_modules('pkg.__init__', 'pkg.fake') as importer:
             with util.import_state(meta_path=[importer]):
-                import_util.import_('pkg.fake')
-                module = import_util.import_('', globals= globals_,
+                self.__import__('pkg.fake')
+                module = self.__import__('', globals= globals_,
                                                 fromlist=['attr'], level=2)
             self.assertEqual(module.__name__, 'pkg')
 
@@ -63,15 +63,17 @@
     def test_bad__package__(self):
         globals = {'__package__': '<not real>'}
         with self.assertRaises(SystemError):
-            import_util.import_('', globals, {}, ['relimport'], 1)
+            self.__import__('', globals, {}, ['relimport'], 1)
 
     def test_bunk__package__(self):
         globals = {'__package__': 42}
         with self.assertRaises(TypeError):
-            import_util.import_('', globals, {}, ['relimport'], 1)
+            self.__import__('', globals, {}, ['relimport'], 1)
+
+Frozen_UsingPackage, Source_UsingPackage = util.test_both(
+        Using__package__, __import__=import_util.__import__)
 
 
-@import_util.importlib_only
 class Setting__package__(unittest.TestCase):
 
     """Because __package__ is a new feature, it is not always set by a loader.
@@ -84,12 +86,14 @@
 
     """
 
+    __import__ = import_util.__import__[1]
+
     # [top-level]
     def test_top_level(self):
         with util.mock_modules('top_level') as mock:
             with util.import_state(meta_path=[mock]):
                 del mock['top_level'].__package__
-                module = import_util.import_('top_level')
+                module = self.__import__('top_level')
                 self.assertEqual(module.__package__, '')
 
     # [package]
@@ -97,7 +101,7 @@
         with util.mock_modules('pkg.__init__') as mock:
             with util.import_state(meta_path=[mock]):
                 del mock['pkg'].__package__
-                module = import_util.import_('pkg')
+                module = self.__import__('pkg')
                 self.assertEqual(module.__package__, 'pkg')
 
     # [submodule]
@@ -105,15 +109,10 @@
         with util.mock_modules('pkg.__init__', 'pkg.mod') as mock:
             with util.import_state(meta_path=[mock]):
                 del mock['pkg.mod'].__package__
-                pkg = import_util.import_('pkg.mod')
+                pkg = self.__import__('pkg.mod')
                 module = getattr(pkg, 'mod')
                 self.assertEqual(module.__package__, 'pkg')
 
 
-def test_main():
-    from test.support import run_unittest
-    run_unittest(Using__package__, Setting__package__)
-
-
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/import_/test_api.py b/Lib/test/test_importlib/import_/test_api.py
index bf74937..dc8b8a8 100644
--- a/Lib/test/test_importlib/import_/test_api.py
+++ b/Lib/test/test_importlib/import_/test_api.py
@@ -1,5 +1,5 @@
-from .. import util as importlib_test_util
-from . import util
+from .. import util
+from . import util as import_util
 import sys
 import types
 import unittest
@@ -17,7 +17,7 @@
             raise ImportError('I cannot be loaded!')
 
 
-class APITest(unittest.TestCase):
+class APITest:
 
     """Test API-specific details for __import__ (e.g. raising the right
     exception when passing in an int for the module name)."""
@@ -25,24 +25,24 @@
     def test_name_requires_rparition(self):
         # Raise TypeError if a non-string is passed in for the module name.
         with self.assertRaises(TypeError):
-            util.import_(42)
+            self.__import__(42)
 
     def test_negative_level(self):
         # Raise ValueError when a negative level is specified.
         # PEP 328 did away with sys.module None entries and the ambiguity of
         # absolute/relative imports.
         with self.assertRaises(ValueError):
-            util.import_('os', globals(), level=-1)
+            self.__import__('os', globals(), level=-1)
 
     def test_nonexistent_fromlist_entry(self):
         # If something in fromlist doesn't exist, that's okay.
         # issue15715
         mod = types.ModuleType('fine')
         mod.__path__ = ['XXX']
-        with importlib_test_util.import_state(meta_path=[BadLoaderFinder]):
-            with importlib_test_util.uncache('fine'):
+        with util.import_state(meta_path=[BadLoaderFinder]):
+            with util.uncache('fine'):
                 sys.modules['fine'] = mod
-                util.import_('fine', fromlist=['not here'])
+                self.__import__('fine', fromlist=['not here'])
 
     def test_fromlist_load_error_propagates(self):
         # If something in fromlist triggers an exception not related to not
@@ -50,18 +50,15 @@
         # issue15316
         mod = types.ModuleType('fine')
         mod.__path__ = ['XXX']
-        with importlib_test_util.import_state(meta_path=[BadLoaderFinder]):
-            with importlib_test_util.uncache('fine'):
+        with util.import_state(meta_path=[BadLoaderFinder]):
+            with util.uncache('fine'):
                 sys.modules['fine'] = mod
                 with self.assertRaises(ImportError):
-                    util.import_('fine', fromlist=['bogus'])
+                    self.__import__('fine', fromlist=['bogus'])
 
-
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(APITest)
+Frozen_APITests, Source_APITests = util.test_both(
+        APITest, __import__=import_util.__import__)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/import_/test_caching.py b/Lib/test/test_importlib/import_/test_caching.py
index bf68027..4d082b8 100644
--- a/Lib/test/test_importlib/import_/test_caching.py
+++ b/Lib/test/test_importlib/import_/test_caching.py
@@ -6,7 +6,7 @@
 import unittest
 
 
-class UseCache(unittest.TestCase):
+class UseCache:
 
     """When it comes to sys.modules, import prefers it over anything else.
 
@@ -21,12 +21,13 @@
     ImportError is raised [None in cache].
 
     """
+
     def test_using_cache(self):
         # [use cache]
         module_to_use = "some module found!"
-        with util.uncache(module_to_use):
+        with util.uncache('some_module'):
             sys.modules['some_module'] = module_to_use
-            module = import_util.import_('some_module')
+            module = self.__import__('some_module')
             self.assertEqual(id(module_to_use), id(module))
 
     def test_None_in_cache(self):
@@ -35,7 +36,7 @@
         with util.uncache(name):
             sys.modules[name] = None
             with self.assertRaises(ImportError) as cm:
-                import_util.import_(name)
+                self.__import__(name)
             self.assertEqual(cm.exception.name, name)
 
     def create_mock(self, *names, return_=None):
@@ -47,42 +48,43 @@
         mock.load_module = MethodType(load_module, mock)
         return mock
 
+Frozen_UseCache, Source_UseCache = util.test_both(
+        UseCache, __import__=import_util.__import__)
+
+
+class ImportlibUseCache(UseCache, unittest.TestCase):
+
+    __import__ = import_util.__import__[1]
+
     # __import__ inconsistent between loaders and built-in import when it comes
     #   to when to use the module in sys.modules and when not to.
-    @import_util.importlib_only
     def test_using_cache_after_loader(self):
         # [from cache on return]
         with self.create_mock('module') as mock:
             with util.import_state(meta_path=[mock]):
-                module = import_util.import_('module')
+                module = self.__import__('module')
                 self.assertEqual(id(module), id(sys.modules['module']))
 
     # See test_using_cache_after_loader() for reasoning.
-    @import_util.importlib_only
     def test_using_cache_for_assigning_to_attribute(self):
         # [from cache to attribute]
         with self.create_mock('pkg.__init__', 'pkg.module') as importer:
             with util.import_state(meta_path=[importer]):
-                module = import_util.import_('pkg.module')
+                module = self.__import__('pkg.module')
                 self.assertTrue(hasattr(module, 'module'))
                 self.assertEqual(id(module.module),
                                  id(sys.modules['pkg.module']))
 
     # See test_using_cache_after_loader() for reasoning.
-    @import_util.importlib_only
     def test_using_cache_for_fromlist(self):
         # [from cache for fromlist]
         with self.create_mock('pkg.__init__', 'pkg.module') as importer:
             with util.import_state(meta_path=[importer]):
-                module = import_util.import_('pkg', fromlist=['module'])
+                module = self.__import__('pkg', fromlist=['module'])
                 self.assertTrue(hasattr(module, 'module'))
                 self.assertEqual(id(module.module),
                                  id(sys.modules['pkg.module']))
 
 
-def test_main():
-    from test.support import run_unittest
-    run_unittest(UseCache)
-
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/import_/test_fromlist.py b/Lib/test/test_importlib/import_/test_fromlist.py
index e440566..fc29ce6 100644
--- a/Lib/test/test_importlib/import_/test_fromlist.py
+++ b/Lib/test/test_importlib/import_/test_fromlist.py
@@ -3,7 +3,8 @@
 from . import util as import_util
 import unittest
 
-class ReturnValue(unittest.TestCase):
+
+class ReturnValue:
 
     """The use of fromlist influences what import returns.
 
@@ -18,18 +19,21 @@
         # [import return]
         with util.mock_modules('pkg.__init__', 'pkg.module') as importer:
             with util.import_state(meta_path=[importer]):
-                module = import_util.import_('pkg.module')
+                module = self.__import__('pkg.module')
                 self.assertEqual(module.__name__, 'pkg')
 
     def test_return_from_from_import(self):
         # [from return]
         with util.mock_modules('pkg.__init__', 'pkg.module')as importer:
             with util.import_state(meta_path=[importer]):
-                module = import_util.import_('pkg.module', fromlist=['attr'])
+                module = self.__import__('pkg.module', fromlist=['attr'])
                 self.assertEqual(module.__name__, 'pkg.module')
 
+Frozen_ReturnValue, Source_ReturnValue = util.test_both(
+        ReturnValue, __import__=import_util.__import__)
 
-class HandlingFromlist(unittest.TestCase):
+
+class HandlingFromlist:
 
     """Using fromlist triggers different actions based on what is being asked
     of it.
@@ -48,14 +52,14 @@
         # [object case]
         with util.mock_modules('module') as importer:
             with util.import_state(meta_path=[importer]):
-                module = import_util.import_('module', fromlist=['attr'])
+                module = self.__import__('module', fromlist=['attr'])
                 self.assertEqual(module.__name__, 'module')
 
     def test_nonexistent_object(self):
         # [bad object]
         with util.mock_modules('module') as importer:
             with util.import_state(meta_path=[importer]):
-                module = import_util.import_('module', fromlist=['non_existent'])
+                module = self.__import__('module', fromlist=['non_existent'])
                 self.assertEqual(module.__name__, 'module')
                 self.assertTrue(not hasattr(module, 'non_existent'))
 
@@ -63,7 +67,7 @@
         # [module]
         with util.mock_modules('pkg.__init__', 'pkg.module') as importer:
             with util.import_state(meta_path=[importer]):
-                module = import_util.import_('pkg', fromlist=['module'])
+                module = self.__import__('pkg', fromlist=['module'])
                 self.assertEqual(module.__name__, 'pkg')
                 self.assertTrue(hasattr(module, 'module'))
                 self.assertEqual(module.module.__name__, 'pkg.module')
@@ -78,13 +82,13 @@
                                module_code={'pkg.mod': module_code}) as importer:
             with util.import_state(meta_path=[importer]):
                 with self.assertRaises(ImportError) as exc:
-                    import_util.import_('pkg', fromlist=['mod'])
+                    self.__import__('pkg', fromlist=['mod'])
                 self.assertEqual('i_do_not_exist', exc.exception.name)
 
     def test_empty_string(self):
         with util.mock_modules('pkg.__init__', 'pkg.mod') as importer:
             with util.import_state(meta_path=[importer]):
-                module = import_util.import_('pkg.mod', fromlist=[''])
+                module = self.__import__('pkg.mod', fromlist=[''])
                 self.assertEqual(module.__name__, 'pkg.mod')
 
     def basic_star_test(self, fromlist=['*']):
@@ -92,7 +96,7 @@
         with util.mock_modules('pkg.__init__', 'pkg.module') as mock:
             with util.import_state(meta_path=[mock]):
                 mock['pkg'].__all__ = ['module']
-                module = import_util.import_('pkg', fromlist=fromlist)
+                module = self.__import__('pkg', fromlist=fromlist)
                 self.assertEqual(module.__name__, 'pkg')
                 self.assertTrue(hasattr(module, 'module'))
                 self.assertEqual(module.module.__name__, 'pkg.module')
@@ -110,17 +114,16 @@
         with context as mock:
             with util.import_state(meta_path=[mock]):
                 mock['pkg'].__all__ = ['module1']
-                module = import_util.import_('pkg', fromlist=['module2', '*'])
+                module = self.__import__('pkg', fromlist=['module2', '*'])
                 self.assertEqual(module.__name__, 'pkg')
                 self.assertTrue(hasattr(module, 'module1'))
                 self.assertTrue(hasattr(module, 'module2'))
                 self.assertEqual(module.module1.__name__, 'pkg.module1')
                 self.assertEqual(module.module2.__name__, 'pkg.module2')
 
+Frozen_FromList, Source_FromList = util.test_both(
+        HandlingFromlist, __import__=import_util.__import__)
 
-def test_main():
-    from test.support import run_unittest
-    run_unittest(ReturnValue, HandlingFromlist)
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/import_/test_meta_path.py b/Lib/test/test_importlib/import_/test_meta_path.py
index 4d85f80..74afd1b 100644
--- a/Lib/test/test_importlib/import_/test_meta_path.py
+++ b/Lib/test/test_importlib/import_/test_meta_path.py
@@ -7,7 +7,7 @@
 import warnings
 
 
-class CallingOrder(unittest.TestCase):
+class CallingOrder:
 
     """Calls to the importers on sys.meta_path happen in order that they are
     specified in the sequence, starting with the first importer
@@ -24,7 +24,7 @@
             first.modules[mod] = 42
             second.modules[mod] = -13
             with util.import_state(meta_path=[first, second]):
-                self.assertEqual(import_util.import_(mod), 42)
+                self.assertEqual(self.__import__(mod), 42)
 
     def test_continuing(self):
         # [continuing]
@@ -34,7 +34,7 @@
             first.find_module = lambda self, fullname, path=None: None
             second.modules[mod_name] = 42
             with util.import_state(meta_path=[first, second]):
-                self.assertEqual(import_util.import_(mod_name), 42)
+                self.assertEqual(self.__import__(mod_name), 42)
 
     def test_empty(self):
         # Raise an ImportWarning if sys.meta_path is empty.
@@ -51,8 +51,11 @@
                 self.assertEqual(len(w), 1)
                 self.assertTrue(issubclass(w[-1].category, ImportWarning))
 
+Frozen_CallingOrder, Source_CallingOrder = util.test_both(
+        CallingOrder, __import__=import_util.__import__)
 
-class CallSignature(unittest.TestCase):
+
+class CallSignature:
 
     """If there is no __path__ entry on the parent module, then 'path' is None
     [no path]. Otherwise, the value for __path__ is passed in for the 'path'
@@ -74,7 +77,7 @@
             log, wrapped_call = self.log(importer.find_module)
             importer.find_module = MethodType(wrapped_call, importer)
             with util.import_state(meta_path=[importer]):
-                import_util.import_(mod_name)
+                self.__import__(mod_name)
                 assert len(log) == 1
                 args = log[0][0]
                 kwargs = log[0][1]
@@ -95,7 +98,7 @@
             log, wrapped_call = self.log(importer.find_module)
             importer.find_module = MethodType(wrapped_call, importer)
             with util.import_state(meta_path=[importer]):
-                import_util.import_(mod_name)
+                self.__import__(mod_name)
                 assert len(log) == 2
                 args = log[1][0]
                 kwargs = log[1][1]
@@ -104,12 +107,9 @@
                 self.assertEqual(args[0], mod_name)
                 self.assertIs(args[1], path)
 
-
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(CallingOrder, CallSignature)
+Frozen_CallSignature, Source_CallSignature = util.test_both(
+        CallSignature, __import__=import_util.__import__)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/import_/test_packages.py b/Lib/test/test_importlib/import_/test_packages.py
index bfa18dc..2df421d 100644
--- a/Lib/test/test_importlib/import_/test_packages.py
+++ b/Lib/test/test_importlib/import_/test_packages.py
@@ -6,21 +6,21 @@
 from test import support
 
 
-class ParentModuleTests(unittest.TestCase):
+class ParentModuleTests:
 
     """Importing a submodule should import the parent modules."""
 
     def test_import_parent(self):
         with util.mock_modules('pkg.__init__', 'pkg.module') as mock:
             with util.import_state(meta_path=[mock]):
-                module = import_util.import_('pkg.module')
+                module = self.__import__('pkg.module')
                 self.assertIn('pkg', sys.modules)
 
     def test_bad_parent(self):
         with util.mock_modules('pkg.module') as mock:
             with util.import_state(meta_path=[mock]):
                 with self.assertRaises(ImportError) as cm:
-                    import_util.import_('pkg.module')
+                    self.__import__('pkg.module')
                 self.assertEqual(cm.exception.name, 'pkg')
 
     def test_raising_parent_after_importing_child(self):
@@ -32,11 +32,11 @@
         with mock:
             with util.import_state(meta_path=[mock]):
                 with self.assertRaises(ZeroDivisionError):
-                    import_util.import_('pkg')
+                    self.__import__('pkg')
                 self.assertNotIn('pkg', sys.modules)
                 self.assertIn('pkg.module', sys.modules)
                 with self.assertRaises(ZeroDivisionError):
-                    import_util.import_('pkg.module')
+                    self.__import__('pkg.module')
                 self.assertNotIn('pkg', sys.modules)
                 self.assertIn('pkg.module', sys.modules)
 
@@ -51,10 +51,10 @@
                 with self.assertRaises((ZeroDivisionError, ImportError)):
                     # This raises ImportError on the "from . import module"
                     # line, not sure why.
-                    import_util.import_('pkg')
+                    self.__import__('pkg')
                 self.assertNotIn('pkg', sys.modules)
                 with self.assertRaises((ZeroDivisionError, ImportError)):
-                    import_util.import_('pkg.module')
+                    self.__import__('pkg.module')
                 self.assertNotIn('pkg', sys.modules)
                 # XXX False
                 #self.assertIn('pkg.module', sys.modules)
@@ -71,10 +71,10 @@
                 with self.assertRaises((ZeroDivisionError, ImportError)):
                     # This raises ImportError on the "from ..subpkg import module"
                     # line, not sure why.
-                    import_util.import_('pkg.subpkg')
+                    self.__import__('pkg.subpkg')
                 self.assertNotIn('pkg.subpkg', sys.modules)
                 with self.assertRaises((ZeroDivisionError, ImportError)):
-                    import_util.import_('pkg.subpkg.module')
+                    self.__import__('pkg.subpkg.module')
                 self.assertNotIn('pkg.subpkg', sys.modules)
                 # XXX False
                 #self.assertIn('pkg.subpkg.module', sys.modules)
@@ -83,7 +83,7 @@
         # Try to import a submodule from a non-package should raise ImportError.
         assert not hasattr(sys, '__path__')
         with self.assertRaises(ImportError) as cm:
-            import_util.import_('sys.no_submodules_here')
+            self.__import__('sys.no_submodules_here')
         self.assertEqual(cm.exception.name, 'sys.no_submodules_here')
 
     def test_module_not_package_but_side_effects(self):
@@ -98,15 +98,13 @@
         with mock_modules as mock:
             with util.import_state(meta_path=[mock]):
                 try:
-                    submodule = import_util.import_(subname)
+                    submodule = self.__import__(subname)
                 finally:
                     support.unload(subname)
 
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(ParentModuleTests)
+Frozen_ParentTests, Source_ParentTests = util.test_both(
+        ParentModuleTests, __import__=import_util.__import__)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/import_/test_path.py b/Lib/test/test_importlib/import_/test_path.py
index d82b7f6..14fdaa3 100644
--- a/Lib/test/test_importlib/import_/test_path.py
+++ b/Lib/test/test_importlib/import_/test_path.py
@@ -1,8 +1,9 @@
-from importlib import _bootstrap
-from importlib import machinery
-from importlib import import_module
 from .. import util
 from . import util as import_util
+
+importlib = util.import_importlib('importlib')
+machinery = util.import_importlib('importlib.machinery')
+
 import os
 import sys
 from types import ModuleType
@@ -11,7 +12,7 @@
 import zipimport
 
 
-class FinderTests(unittest.TestCase):
+class FinderTests:
 
     """Tests for PathFinder."""
 
@@ -19,7 +20,7 @@
         # Test None returned upon not finding a suitable finder.
         module = '<test module>'
         with util.import_state():
-            self.assertIsNone(machinery.PathFinder.find_module(module))
+            self.assertIsNone(self.machinery.PathFinder.find_module(module))
 
     def test_sys_path(self):
         # Test that sys.path is used when 'path' is None.
@@ -29,7 +30,7 @@
         importer = util.mock_modules(module)
         with util.import_state(path_importer_cache={path: importer},
                                path=[path]):
-            loader = machinery.PathFinder.find_module(module)
+            loader = self.machinery.PathFinder.find_module(module)
             self.assertIs(loader, importer)
 
     def test_path(self):
@@ -39,7 +40,7 @@
         path = '<test path>'
         importer = util.mock_modules(module)
         with util.import_state(path_importer_cache={path: importer}):
-            loader = machinery.PathFinder.find_module(module, [path])
+            loader = self.machinery.PathFinder.find_module(module, [path])
             self.assertIs(loader, importer)
 
     def test_empty_list(self):
@@ -49,7 +50,7 @@
         importer = util.mock_modules(module)
         with util.import_state(path_importer_cache={path: importer},
                                path=[path]):
-            self.assertIsNone(machinery.PathFinder.find_module('module', []))
+            self.assertIsNone(self.machinery.PathFinder.find_module('module', []))
 
     def test_path_hooks(self):
         # Test that sys.path_hooks is used.
@@ -59,7 +60,7 @@
         importer = util.mock_modules(module)
         hook = import_util.mock_path_hook(path, importer=importer)
         with util.import_state(path_hooks=[hook]):
-            loader = machinery.PathFinder.find_module(module, [path])
+            loader = self.machinery.PathFinder.find_module(module, [path])
             self.assertIs(loader, importer)
             self.assertIn(path, sys.path_importer_cache)
             self.assertIs(sys.path_importer_cache[path], importer)
@@ -72,7 +73,7 @@
                                path=[path_entry]):
             with warnings.catch_warnings(record=True) as w:
                 warnings.simplefilter('always')
-                self.assertIsNone(machinery.PathFinder.find_module('os'))
+                self.assertIsNone(self.machinery.PathFinder.find_module('os'))
                 self.assertIsNone(sys.path_importer_cache[path_entry])
                 self.assertEqual(len(w), 1)
                 self.assertTrue(issubclass(w[-1].category, ImportWarning))
@@ -82,11 +83,11 @@
         path = ''
         module = '<test module>'
         importer = util.mock_modules(module)
-        hook = import_util.mock_path_hook(os.curdir, importer=importer)
+        hook = import_util.mock_path_hook(os.getcwd(), importer=importer)
         with util.import_state(path=[path], path_hooks=[hook]):
-            loader = machinery.PathFinder.find_module(module)
+            loader = self.machinery.PathFinder.find_module(module)
             self.assertIs(loader, importer)
-            self.assertIn(os.curdir, sys.path_importer_cache)
+            self.assertIn(os.getcwd(), sys.path_importer_cache)
 
     def test_None_on_sys_path(self):
         # Putting None in sys.path[0] caused an import regression from Python
@@ -96,8 +97,8 @@
         new_path_importer_cache = sys.path_importer_cache.copy()
         new_path_importer_cache.pop(None, None)
         new_path_hooks = [zipimport.zipimporter,
-                          _bootstrap.FileFinder.path_hook(
-                              *_bootstrap._get_supported_file_loaders())]
+                          self.machinery.FileFinder.path_hook(
+                              *self.importlib._bootstrap._get_supported_file_loaders())]
         missing = object()
         email = sys.modules.pop('email', missing)
         try:
@@ -105,16 +106,15 @@
                                    path=new_path,
                                    path_importer_cache=new_path_importer_cache,
                                    path_hooks=new_path_hooks):
-                module = import_module('email')
+                module = self.importlib.import_module('email')
                 self.assertIsInstance(module, ModuleType)
         finally:
             if email is not missing:
                 sys.modules['email'] = email
 
+Frozen_FinderTests, Source_FinderTests = util.test_both(
+        FinderTests, importlib=importlib, machinery=machinery)
 
-def test_main():
-    from test.support import run_unittest
-    run_unittest(FinderTests)
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/import_/test_relative_imports.py b/Lib/test/test_importlib/import_/test_relative_imports.py
index 4569c26..fc6d25a 100644
--- a/Lib/test/test_importlib/import_/test_relative_imports.py
+++ b/Lib/test/test_importlib/import_/test_relative_imports.py
@@ -4,7 +4,7 @@
 import sys
 import unittest
 
-class RelativeImports(unittest.TestCase):
+class RelativeImports:
 
     """PEP 328 introduced relative imports. This allows for imports to occur
     from within a package without having to specify the actual package name.
@@ -76,8 +76,8 @@
         create = 'pkg.__init__', 'pkg.mod2'
         globals_ = {'__package__': 'pkg'}, {'__name__': 'pkg.mod1'}
         def callback(global_):
-            import_util.import_('pkg')  # For __import__().
-            module = import_util.import_('', global_, fromlist=['mod2'], level=1)
+            self.__import__('pkg')  # For __import__().
+            module = self.__import__('', global_, fromlist=['mod2'], level=1)
             self.assertEqual(module.__name__, 'pkg')
             self.assertTrue(hasattr(module, 'mod2'))
             self.assertEqual(module.mod2.attr, 'pkg.mod2')
@@ -88,8 +88,8 @@
         create = 'pkg.__init__', 'pkg.mod2'
         globals_ = {'__package__': 'pkg'}, {'__name__': 'pkg.mod1'}
         def callback(global_):
-            import_util.import_('pkg')  # For __import__().
-            module = import_util.import_('mod2', global_, fromlist=['attr'],
+            self.__import__('pkg')  # For __import__().
+            module = self.__import__('mod2', global_, fromlist=['attr'],
                                             level=1)
             self.assertEqual(module.__name__, 'pkg.mod2')
             self.assertEqual(module.attr, 'pkg.mod2')
@@ -101,8 +101,8 @@
         globals_ = ({'__package__': 'pkg'},
                     {'__name__': 'pkg', '__path__': ['blah']})
         def callback(global_):
-            import_util.import_('pkg')  # For __import__().
-            module = import_util.import_('', global_, fromlist=['module'],
+            self.__import__('pkg')  # For __import__().
+            module = self.__import__('', global_, fromlist=['module'],
                              level=1)
             self.assertEqual(module.__name__, 'pkg')
             self.assertTrue(hasattr(module, 'module'))
@@ -114,8 +114,8 @@
         create = 'pkg.__init__', 'pkg.module'
         globals_ = {'__package__': 'pkg'}, {'__name__': 'pkg.module'}
         def callback(global_):
-            import_util.import_('pkg')  # For __import__().
-            module = import_util.import_('', global_, fromlist=['attr'], level=1)
+            self.__import__('pkg')  # For __import__().
+            module = self.__import__('', global_, fromlist=['attr'], level=1)
             self.assertEqual(module.__name__, 'pkg')
         self.relative_import_test(create, globals_, callback)
 
@@ -126,7 +126,7 @@
         globals_ =  ({'__package__': 'pkg.subpkg1'},
                      {'__name__': 'pkg.subpkg1', '__path__': ['blah']})
         def callback(global_):
-            module = import_util.import_('', global_, fromlist=['subpkg2'],
+            module = self.__import__('', global_, fromlist=['subpkg2'],
                                             level=2)
             self.assertEqual(module.__name__, 'pkg')
             self.assertTrue(hasattr(module, 'subpkg2'))
@@ -142,8 +142,8 @@
                     {'__name__': 'pkg.pkg1.pkg2.pkg3.pkg4.pkg5',
                         '__path__': ['blah']})
         def callback(global_):
-            import_util.import_(globals_[0]['__package__'])
-            module = import_util.import_('', global_, fromlist=['attr'], level=6)
+            self.__import__(globals_[0]['__package__'])
+            module = self.__import__('', global_, fromlist=['attr'], level=6)
             self.assertEqual(module.__name__, 'pkg')
         self.relative_import_test(create, globals_, callback)
 
@@ -153,9 +153,9 @@
         globals_ = ({'__package__': 'pkg'},
                     {'__name__': 'pkg', '__path__': ['blah']})
         def callback(global_):
-            import_util.import_('pkg')
+            self.__import__('pkg')
             with self.assertRaises(ValueError):
-                import_util.import_('', global_, fromlist=['top_level'],
+                self.__import__('', global_, fromlist=['top_level'],
                                     level=2)
         self.relative_import_test(create, globals_, callback)
 
@@ -164,16 +164,16 @@
         create = ['top_level', 'pkg.__init__', 'pkg.module']
         globals_ = {'__package__': 'pkg'}, {'__name__': 'pkg.module'}
         def callback(global_):
-            import_util.import_('pkg')
+            self.__import__('pkg')
             with self.assertRaises(ValueError):
-                import_util.import_('', global_, fromlist=['top_level'],
+                self.__import__('', global_, fromlist=['top_level'],
                                     level=2)
         self.relative_import_test(create, globals_, callback)
 
     def test_empty_name_w_level_0(self):
         # [empty name]
         with self.assertRaises(ValueError):
-            import_util.import_('')
+            self.__import__('')
 
     def test_import_from_different_package(self):
         # Test importing from a different package than the caller.
@@ -186,8 +186,8 @@
                     '__runpy_pkg__.uncle.cousin.nephew']
         globals_ = {'__package__': '__runpy_pkg__.__runpy_pkg__'}
         def callback(global_):
-            import_util.import_('__runpy_pkg__.__runpy_pkg__')
-            module = import_util.import_('uncle.cousin', globals_, {},
+            self.__import__('__runpy_pkg__.__runpy_pkg__')
+            module = self.__import__('uncle.cousin', globals_, {},
                                     fromlist=['nephew'],
                                 level=2)
             self.assertEqual(module.__name__, '__runpy_pkg__.uncle.cousin')
@@ -198,20 +198,19 @@
         create = ['crash.__init__', 'crash.mod']
         globals_ = [{'__package__': 'crash', '__name__': 'crash'}]
         def callback(global_):
-            import_util.import_('crash')
-            mod = import_util.import_('mod', global_, {}, [], 1)
+            self.__import__('crash')
+            mod = self.__import__('mod', global_, {}, [], 1)
             self.assertEqual(mod.__name__, 'crash.mod')
         self.relative_import_test(create, globals_, callback)
 
     def test_relative_import_no_globals(self):
         # No globals for a relative import is an error.
         with self.assertRaises(KeyError):
-            import_util.import_('sys', level=1)
+            self.__import__('sys', level=1)
 
+Frozen_RelativeImports, Source_RelativeImports = util.test_both(
+        RelativeImports, __import__=import_util.__import__)
 
-def test_main():
-    from test.support import run_unittest
-    run_unittest(RelativeImports)
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/import_/util.py b/Lib/test/test_importlib/import_/util.py
index 86ac065..dcb490f 100644
--- a/Lib/test/test_importlib/import_/util.py
+++ b/Lib/test/test_importlib/import_/util.py
@@ -1,22 +1,14 @@
+from .. import util
+
+frozen_importlib, source_importlib = util.import_importlib('importlib')
+
+import builtins
 import functools
 import importlib
 import unittest
 
 
-using___import__ = False
-
-
-def import_(*args, **kwargs):
-    """Delegate to allow for injecting different implementations of import."""
-    if using___import__:
-        return __import__(*args, **kwargs)
-    else:
-        return importlib.__import__(*args, **kwargs)
-
-
-def importlib_only(fxn):
-    """Decorator to skip a test if using __builtins__.__import__."""
-    return unittest.skipIf(using___import__, "importlib-specific test")(fxn)
+__import__ = staticmethod(builtins.__import__), staticmethod(source_importlib.__import__)
 
 
 def mock_path_hook(*entries, importer):
diff --git a/Lib/test/test_importlib/source/test_case_sensitivity.py b/Lib/test/test_importlib/source/test_case_sensitivity.py
index bb78d2e..b3e9d25 100644
--- a/Lib/test/test_importlib/source/test_case_sensitivity.py
+++ b/Lib/test/test_importlib/source/test_case_sensitivity.py
@@ -2,8 +2,9 @@
 from .. import util
 from . import util as source_util
 
-from importlib import _bootstrap
-from importlib import machinery
+importlib = util.import_importlib('importlib')
+machinery = util.import_importlib('importlib.machinery')
+
 import os
 import sys
 from test import support as test_support
@@ -11,7 +12,7 @@
 
 
 @util.case_insensitive_tests
-class CaseSensitivityTest(unittest.TestCase):
+class CaseSensitivityTest:
 
     """PEP 235 dictates that on case-preserving, case-insensitive file systems
     that imports are case-sensitive unless the PYTHONCASEOK environment
@@ -21,11 +22,11 @@
     assert name != name.lower()
 
     def find(self, path):
-        finder = machinery.FileFinder(path,
-                                      (machinery.SourceFileLoader,
-                                            machinery.SOURCE_SUFFIXES),
-                                        (machinery.SourcelessFileLoader,
-                                            machinery.BYTECODE_SUFFIXES))
+        finder = self.machinery.FileFinder(path,
+                                      (self.machinery.SourceFileLoader,
+                                            self.machinery.SOURCE_SUFFIXES),
+                                        (self.machinery.SourcelessFileLoader,
+                                            self.machinery.BYTECODE_SUFFIXES))
         return finder.find_module(self.name)
 
     def sensitivity_test(self):
@@ -41,7 +42,7 @@
     def test_sensitive(self):
         with test_support.EnvironmentVarGuard() as env:
             env.unset('PYTHONCASEOK')
-            if b'PYTHONCASEOK' in _bootstrap._os.environ:
+            if b'PYTHONCASEOK' in self.importlib._bootstrap._os.environ:
                 self.skipTest('os.environ changes not reflected in '
                               '_os.environ')
             sensitive, insensitive = self.sensitivity_test()
@@ -52,7 +53,7 @@
     def test_insensitive(self):
         with test_support.EnvironmentVarGuard() as env:
             env.set('PYTHONCASEOK', '1')
-            if b'PYTHONCASEOK' not in _bootstrap._os.environ:
+            if b'PYTHONCASEOK' not in self.importlib._bootstrap._os.environ:
                 self.skipTest('os.environ changes not reflected in '
                               '_os.environ')
             sensitive, insensitive = self.sensitivity_test()
@@ -61,10 +62,9 @@
             self.assertTrue(hasattr(insensitive, 'load_module'))
             self.assertIn(self.name, insensitive.get_filename(self.name))
 
-
-def test_main():
-    test_support.run_unittest(CaseSensitivityTest)
+Frozen_CaseSensitivityTest, Source_CaseSensitivityTest = util.test_both(
+    CaseSensitivityTest, importlib=importlib, machinery=machinery)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/source/test_file_loader.py b/Lib/test/test_importlib/source/test_file_loader.py
index 66ad96e..f1e2713 100644
--- a/Lib/test/test_importlib/source/test_file_loader.py
+++ b/Lib/test/test_importlib/source/test_file_loader.py
@@ -1,11 +1,12 @@
-from importlib import machinery
-import importlib
-import importlib.abc
-import importlib.util
 from .. import abc
 from .. import util
 from . import util as source_util
 
+importlib = util.import_importlib('importlib')
+importlib_abc = util.import_importlib('importlib.abc')
+machinery = util.import_importlib('importlib.machinery')
+importlib_util = util.import_importlib('importlib.util')
+
 import errno
 import marshal
 import os
@@ -19,7 +20,7 @@
 from test.support import make_legacy_pyc, unload
 
 
-class SimpleTest(unittest.TestCase):
+class SimpleTest(abc.LoaderTests):
 
     """Should have no issue importing a source module [basic]. And if there is
     a syntax error, it should raise a SyntaxError [syntax error].
@@ -27,7 +28,7 @@
     """
 
     def test_load_module_API(self):
-        class Tester(importlib.abc.FileLoader):
+        class Tester(self.abc.FileLoader):
             def get_source(self, _): return 'attr = 42'
             def is_package(self, _): return False
 
@@ -37,7 +38,7 @@
 
     def test_get_filename_API(self):
         # If fullname is not set then assume self.path is desired.
-        class Tester(importlib.abc.FileLoader):
+        class Tester(self.abc.FileLoader):
             def get_code(self, _): pass
             def get_source(self, _): pass
             def is_package(self, _): pass
@@ -55,7 +56,7 @@
     # [basic]
     def test_module(self):
         with source_util.create_modules('_temp') as mapping:
-            loader = machinery.SourceFileLoader('_temp', mapping['_temp'])
+            loader = self.machinery.SourceFileLoader('_temp', mapping['_temp'])
             module = loader.load_module('_temp')
             self.assertIn('_temp', sys.modules)
             check = {'__name__': '_temp', '__file__': mapping['_temp'],
@@ -65,7 +66,7 @@
 
     def test_package(self):
         with source_util.create_modules('_pkg.__init__') as mapping:
-            loader = machinery.SourceFileLoader('_pkg',
+            loader = self.machinery.SourceFileLoader('_pkg',
                                                  mapping['_pkg.__init__'])
             module = loader.load_module('_pkg')
             self.assertIn('_pkg', sys.modules)
@@ -78,7 +79,7 @@
 
     def test_lacking_parent(self):
         with source_util.create_modules('_pkg.__init__', '_pkg.mod')as mapping:
-            loader = machinery.SourceFileLoader('_pkg.mod',
+            loader = self.machinery.SourceFileLoader('_pkg.mod',
                                                     mapping['_pkg.mod'])
             module = loader.load_module('_pkg.mod')
             self.assertIn('_pkg.mod', sys.modules)
@@ -93,7 +94,7 @@
 
     def test_module_reuse(self):
         with source_util.create_modules('_temp') as mapping:
-            loader = machinery.SourceFileLoader('_temp', mapping['_temp'])
+            loader = self.machinery.SourceFileLoader('_temp', mapping['_temp'])
             module = loader.load_module('_temp')
             module_id = id(module)
             module_dict_id = id(module.__dict__)
@@ -118,7 +119,7 @@
                 setattr(orig_module, attr, value)
             with open(mapping[name], 'w') as file:
                 file.write('+++ bad syntax +++')
-            loader = machinery.SourceFileLoader('_temp', mapping['_temp'])
+            loader = self.machinery.SourceFileLoader('_temp', mapping['_temp'])
             with self.assertRaises(SyntaxError):
                 loader.load_module(name)
             for attr in attributes:
@@ -129,7 +130,7 @@
         with source_util.create_modules('_temp') as mapping:
             with open(mapping['_temp'], 'w') as file:
                 file.write('=')
-            loader = machinery.SourceFileLoader('_temp', mapping['_temp'])
+            loader = self.machinery.SourceFileLoader('_temp', mapping['_temp'])
             with self.assertRaises(SyntaxError):
                 loader.load_module('_temp')
             self.assertNotIn('_temp', sys.modules)
@@ -142,14 +143,14 @@
             file.write("# test file for importlib")
         try:
             with util.uncache('_temp'):
-                loader = machinery.SourceFileLoader('_temp', file_path)
+                loader = self.machinery.SourceFileLoader('_temp', file_path)
                 mod = loader.load_module('_temp')
                 self.assertEqual(file_path, mod.__file__)
-                self.assertEqual(importlib.util.cache_from_source(file_path),
+                self.assertEqual(self.util.cache_from_source(file_path),
                                  mod.__cached__)
         finally:
             os.unlink(file_path)
-            pycache = os.path.dirname(importlib.util.cache_from_source(file_path))
+            pycache = os.path.dirname(self.util.cache_from_source(file_path))
             if os.path.exists(pycache):
                 shutil.rmtree(pycache)
 
@@ -158,7 +159,7 @@
         # truncated rather than raise an OverflowError.
         with source_util.create_modules('_temp') as mapping:
             source = mapping['_temp']
-            compiled = importlib.util.cache_from_source(source)
+            compiled = self.util.cache_from_source(source)
             with open(source, 'w') as f:
                 f.write("x = 5")
             try:
@@ -169,7 +170,7 @@
                 if e.errno != getattr(errno, 'EOVERFLOW', None):
                     raise
                 self.skipTest("cannot set modification time to large integer ({})".format(e))
-            loader = machinery.SourceFileLoader('_temp', mapping['_temp'])
+            loader = self.machinery.SourceFileLoader('_temp', mapping['_temp'])
             mod = loader.load_module('_temp')
             # Sanity checks.
             self.assertEqual(mod.__cached__, compiled)
@@ -177,8 +178,17 @@
             # The pyc file was created.
             os.stat(compiled)
 
+    def test_unloadable(self):
+        loader = self.machinery.SourceFileLoader('good name', {})
+        with self.assertRaises(ImportError):
+            loader.load_module('bad name')
 
-class BadBytecodeTest(unittest.TestCase):
+Frozen_SimpleTest, Source_SimpleTest = util.test_both(
+        SimpleTest, importlib=importlib, machinery=machinery, abc=importlib_abc,
+        util=importlib_util)
+
+
+class BadBytecodeTest:
 
     def import_(self, file, module_name):
         loader = self.loader(module_name, file)
@@ -195,7 +205,7 @@
             pass
         py_compile.compile(mapping[name])
         if not del_source:
-            bytecode_path = importlib.util.cache_from_source(mapping[name])
+            bytecode_path = self.util.cache_from_source(mapping[name])
         else:
             os.unlink(mapping[name])
             bytecode_path = make_legacy_pyc(mapping[name])
@@ -284,7 +294,9 @@
 
 class SourceLoaderBadBytecodeTest(BadBytecodeTest):
 
-    loader = machinery.SourceFileLoader
+    @classmethod
+    def setUpClass(cls):
+        cls.loader = cls.machinery.SourceFileLoader
 
     @source_util.writes_bytecode_files
     def test_empty_file(self):
@@ -324,7 +336,7 @@
             self.import_(mapping[name], name)
             with open(bytecode_path, 'rb') as bytecode_file:
                 self.assertEqual(bytecode_file.read(4),
-                                 importlib.util.MAGIC_NUMBER)
+                                 self.util.MAGIC_NUMBER)
 
         self._test_bad_magic(test)
 
@@ -374,13 +386,13 @@
         zeros = b'\x00\x00\x00\x00'
         with source_util.create_modules('_temp') as mapping:
             py_compile.compile(mapping['_temp'])
-            bytecode_path = importlib.util.cache_from_source(mapping['_temp'])
+            bytecode_path = self.util.cache_from_source(mapping['_temp'])
             with open(bytecode_path, 'r+b') as bytecode_file:
                 bytecode_file.seek(4)
                 bytecode_file.write(zeros)
             self.import_(mapping['_temp'], '_temp')
             source_mtime = os.path.getmtime(mapping['_temp'])
-            source_timestamp = importlib._w_long(source_mtime)
+            source_timestamp = self.importlib._w_long(source_mtime)
             with open(bytecode_path, 'rb') as bytecode_file:
                 bytecode_file.seek(4)
                 self.assertEqual(bytecode_file.read(4), source_timestamp)
@@ -392,7 +404,7 @@
         with source_util.create_modules('_temp') as mapping:
             # Create bytecode that will need to be re-created.
             py_compile.compile(mapping['_temp'])
-            bytecode_path = importlib.util.cache_from_source(mapping['_temp'])
+            bytecode_path = self.util.cache_from_source(mapping['_temp'])
             with open(bytecode_path, 'r+b') as bytecode_file:
                 bytecode_file.seek(0)
                 bytecode_file.write(b'\x00\x00\x00\x00')
@@ -406,10 +418,16 @@
                 # Make writable for eventual clean-up.
                 os.chmod(bytecode_path, stat.S_IWUSR)
 
+Frozen_SourceBadBytecode, Source_SourceBadBytecode = util.test_both(
+        SourceLoaderBadBytecodeTest, importlib=importlib, machinery=machinery,
+        abc=importlib_abc, util=importlib_util)
+
 
 class SourcelessLoaderBadBytecodeTest(BadBytecodeTest):
 
-    loader = machinery.SourcelessFileLoader
+    @classmethod
+    def setUpClass(cls):
+        cls.loader = cls.machinery.SourcelessFileLoader
 
     def test_empty_file(self):
         def test(name, mapping, bytecode_path):
@@ -464,6 +482,9 @@
     def test_non_code_marshal(self):
         self._test_non_code_marshal(del_source=True)
 
+Frozen_SourcelessBadBytecode, Source_SourcelessBadBytecode = util.test_both(
+        SourcelessLoaderBadBytecodeTest, importlib=importlib,
+        machinery=machinery, abc=importlib_abc, util=importlib_util)
 
 
 if __name__ == '__main__':
diff --git a/Lib/test/test_importlib/source/test_finder.py b/Lib/test/test_importlib/source/test_finder.py
index 2d70691..8bf8cb7 100644
--- a/Lib/test/test_importlib/source/test_finder.py
+++ b/Lib/test/test_importlib/source/test_finder.py
@@ -1,7 +1,9 @@
 from .. import abc
+from .. import util
 from . import util as source_util
 
-from importlib import machinery
+machinery = util.import_importlib('importlib.machinery')
+
 import errno
 import os
 import py_compile
@@ -38,11 +40,11 @@
     """
 
     def get_finder(self, root):
-        loader_details = [(machinery.SourceFileLoader,
-                            machinery.SOURCE_SUFFIXES),
-                          (machinery.SourcelessFileLoader,
-                            machinery.BYTECODE_SUFFIXES)]
-        return machinery.FileFinder(root, *loader_details)
+        loader_details = [(self.machinery.SourceFileLoader,
+                            self.machinery.SOURCE_SUFFIXES),
+                          (self.machinery.SourcelessFileLoader,
+                            self.machinery.BYTECODE_SUFFIXES)]
+        return self.machinery.FileFinder(root, *loader_details)
 
     def import_(self, root, module):
         return self.get_finder(root).find_module(module)
@@ -123,8 +125,8 @@
 
     def test_empty_string_for_dir(self):
         # The empty string from sys.path means to search in the cwd.
-        finder = machinery.FileFinder('', (machinery.SourceFileLoader,
-            machinery.SOURCE_SUFFIXES))
+        finder = self.machinery.FileFinder('', (self.machinery.SourceFileLoader,
+            self.machinery.SOURCE_SUFFIXES))
         with open('mod.py', 'w') as file:
             file.write("# test file for importlib")
         try:
@@ -135,8 +137,8 @@
 
     def test_invalidate_caches(self):
         # invalidate_caches() should reset the mtime.
-        finder = machinery.FileFinder('', (machinery.SourceFileLoader,
-            machinery.SOURCE_SUFFIXES))
+        finder = self.machinery.FileFinder('', (self.machinery.SourceFileLoader,
+            self.machinery.SOURCE_SUFFIXES))
         finder._path_mtime = 42
         finder.invalidate_caches()
         self.assertEqual(finder._path_mtime, -1)
@@ -180,11 +182,9 @@
             finder = self.get_finder(file_obj.name)
             self.assertEqual((None, []), finder.find_loader('doesnotexist'))
 
+Frozen_FinderTests, Source_FinderTests = util.test_both(FinderTests, machinery=machinery)
 
-def test_main():
-    from test.support import run_unittest
-    run_unittest(FinderTests)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/source/test_path_hook.py b/Lib/test/test_importlib/source/test_path_hook.py
index d320f8e..92da772 100644
--- a/Lib/test/test_importlib/source/test_path_hook.py
+++ b/Lib/test/test_importlib/source/test_path_hook.py
@@ -1,16 +1,18 @@
+from .. import util
 from . import util as source_util
 
-from importlib import machinery
+machinery = util.import_importlib('importlib.machinery')
+
 import unittest
 
 
-class PathHookTest(unittest.TestCase):
+class PathHookTest:
 
     """Test the path hook for source."""
 
     def path_hook(self):
-        return machinery.FileFinder.path_hook((machinery.SourceFileLoader,
-            machinery.SOURCE_SUFFIXES))
+        return self.machinery.FileFinder.path_hook((self.machinery.SourceFileLoader,
+            self.machinery.SOURCE_SUFFIXES))
 
     def test_success(self):
         with source_util.create_modules('dummy') as mapping:
@@ -21,11 +23,8 @@
         # The empty string represents the cwd.
         self.assertTrue(hasattr(self.path_hook()(''), 'find_module'))
 
-
-def test_main():
-    from test.support import run_unittest
-    run_unittest(PathHookTest)
+Frozen_PathHookTest, Source_PathHooktest = util.test_both(PathHookTest, machinery=machinery)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/source/test_source_encoding.py b/Lib/test/test_importlib/source/test_source_encoding.py
index ba02b44..654f4c2 100644
--- a/Lib/test/test_importlib/source/test_source_encoding.py
+++ b/Lib/test/test_importlib/source/test_source_encoding.py
@@ -1,6 +1,8 @@
+from .. import util
 from . import util as source_util
 
-from importlib import _bootstrap
+machinery = util.import_importlib('importlib.machinery')
+
 import codecs
 import re
 import sys
@@ -13,7 +15,7 @@
 CODING_RE = re.compile(r'^[ \t\f]*#.*coding[:=][ \t]*([-\w.]+)', re.ASCII)
 
 
-class EncodingTest(unittest.TestCase):
+class EncodingTest:
 
     """PEP 3120 makes UTF-8 the default encoding for source code
     [default encoding].
@@ -35,7 +37,7 @@
         with source_util.create_modules(self.module_name) as mapping:
             with open(mapping[self.module_name], 'wb') as file:
                 file.write(source)
-            loader = _bootstrap.SourceFileLoader(self.module_name,
+            loader = self.machinery.SourceFileLoader(self.module_name,
                                                   mapping[self.module_name])
             return loader.load_module(self.module_name)
 
@@ -84,8 +86,10 @@
         with self.assertRaises(SyntaxError):
             self.run_test(source)
 
+Frozen_EncodingTest, Source_EncodingTest = util.test_both(EncodingTest, machinery=machinery)
 
-class LineEndingTest(unittest.TestCase):
+
+class LineEndingTest:
 
     r"""Source written with the three types of line endings (\n, \r\n, \r)
     need to be readable [cr][crlf][lf]."""
@@ -97,7 +101,7 @@
         with source_util.create_modules(module_name) as mapping:
             with open(mapping[module_name], 'wb') as file:
                 file.write(source)
-            loader = _bootstrap.SourceFileLoader(module_name,
+            loader = self.machinery.SourceFileLoader(module_name,
                                                  mapping[module_name])
             return loader.load_module(module_name)
 
@@ -113,11 +117,9 @@
     def test_lf(self):
         self.run_test(b'\n')
 
+Frozen_LineEndings, Source_LineEndings = util.test_both(LineEndingTest, machinery=machinery)
 
-def test_main():
-    from test.support import run_unittest
-    run_unittest(EncodingTest, LineEndingTest)
 
 
 if __name__ == '__main__':
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_importlib/test_abc.py b/Lib/test/test_importlib/test_abc.py
index 0d0bcd1..979a481 100644
--- a/Lib/test/test_importlib/test_abc.py
+++ b/Lib/test/test_importlib/test_abc.py
@@ -1,8 +1,3 @@
-import importlib
-import importlib.util
-from importlib import abc
-from importlib import machinery
-
 import contextlib
 import inspect
 import io
@@ -16,6 +11,10 @@
 
 from . import util
 
+frozen_init, source_init = util.import_importlib('importlib')
+frozen_abc, source_abc = util.import_importlib('importlib.abc')
+frozen_util, source_util = util.import_importlib('importlib.util')
+
 ##### Inheritance ##############################################################
 class InheritanceTests:
 
@@ -27,8 +26,19 @@
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
+        self.superclasses = [getattr(self.abc, class_name)
+                             for class_name in self.superclass_names]
+        if hasattr(self, 'subclass_names'):
+            # Because test.support.import_fresh_module() creates a new
+            # importlib._bootstrap per module, inheritance checks fail when
+            # checking across module boundaries (i.e. the _bootstrap in abc is
+            # not the same as the one in machinery). That means stealing one of
+            # the modules from the other to make sure the same instance is used.
+            self.subclasses = [getattr(self.abc.machinery, class_name)
+                                for class_name in self.subclass_names]
         assert self.subclasses or self.superclasses, self.__class__
-        self.__test = getattr(abc, self.__class__.__name__)
+        testing = self.__class__.__name__.partition('_')[2]
+        self.__test = getattr(self.abc, testing)
 
     def test_subclasses(self):
         # Test that the expected subclasses inherit.
@@ -42,59 +52,105 @@
             self.assertTrue(issubclass(self.__test, superclass),
                "{0} is not a superclass of {1}".format(superclass, self.__test))
 
+def create_inheritance_tests(base_class):
+    def set_frozen(ns):
+        ns['abc'] = frozen_abc
+    def set_source(ns):
+        ns['abc'] = source_abc
 
-class MetaPathFinder(InheritanceTests, unittest.TestCase):
-
-    superclasses = [abc.Finder]
-    subclasses = [machinery.BuiltinImporter, machinery.FrozenImporter,
-                    machinery.PathFinder, machinery.WindowsRegistryFinder]
+    classes = []
+    for prefix, ns_set in [('Frozen', set_frozen), ('Source', set_source)]:
+        classes.append(types.new_class('_'.join([prefix, base_class.__name__]),
+                                       (base_class, unittest.TestCase),
+                                       exec_body=ns_set))
+    return classes
 
 
-class PathEntryFinder(InheritanceTests, unittest.TestCase):
+class MetaPathFinder(InheritanceTests):
+    superclass_names = ['Finder']
+    subclass_names = ['BuiltinImporter', 'FrozenImporter', 'PathFinder',
+                      'WindowsRegistryFinder']
 
-    superclasses = [abc.Finder]
-    subclasses = [machinery.FileFinder]
+tests = create_inheritance_tests(MetaPathFinder)
+Frozen_MetaPathFinderInheritanceTests, Source_MetaPathFinderInheritanceTests = tests
 
 
-class ResourceLoader(InheritanceTests, unittest.TestCase):
+class PathEntryFinder(InheritanceTests):
+    superclass_names = ['Finder']
+    subclass_names = ['FileFinder']
 
-    superclasses = [abc.Loader]
+tests = create_inheritance_tests(PathEntryFinder)
+Frozen_PathEntryFinderInheritanceTests, Source_PathEntryFinderInheritanceTests = tests
 
 
-class InspectLoader(InheritanceTests, unittest.TestCase):
+class ResourceLoader(InheritanceTests):
+    superclass_names = ['Loader']
 
-    superclasses = [abc.Loader]
-    subclasses = [machinery.BuiltinImporter,
-                    machinery.FrozenImporter, machinery.ExtensionFileLoader]
+tests = create_inheritance_tests(ResourceLoader)
+Frozen_ResourceLoaderInheritanceTests, Source_ResourceLoaderInheritanceTests = tests
 
 
-class ExecutionLoader(InheritanceTests, unittest.TestCase):
+class InspectLoader(InheritanceTests):
+    superclass_names = ['Loader']
+    subclass_names = ['BuiltinImporter', 'FrozenImporter', 'ExtensionFileLoader']
 
-    superclasses = [abc.InspectLoader]
+tests = create_inheritance_tests(InspectLoader)
+Frozen_InspectLoaderInheritanceTests, Source_InspectLoaderInheritanceTests = tests
 
 
-class FileLoader(InheritanceTests, unittest.TestCase):
+class ExecutionLoader(InheritanceTests):
+    superclass_names = ['InspectLoader']
+    subclass_names = ['ExtensionFileLoader']
 
-    superclasses = [abc.ResourceLoader, abc.ExecutionLoader]
-    subclasses = [machinery.SourceFileLoader, machinery.SourcelessFileLoader]
+tests = create_inheritance_tests(ExecutionLoader)
+Frozen_ExecutionLoaderInheritanceTests, Source_ExecutionLoaderInheritanceTests = tests
 
 
-class SourceLoader(InheritanceTests, unittest.TestCase):
+class FileLoader(InheritanceTests):
+    superclass_names = ['ResourceLoader', 'ExecutionLoader']
+    subclass_names = ['SourceFileLoader', 'SourcelessFileLoader']
 
-    superclasses = [abc.ResourceLoader, abc.ExecutionLoader]
-    subclasses = [machinery.SourceFileLoader]
+tests = create_inheritance_tests(FileLoader)
+Frozen_FileLoaderInheritanceTests, Source_FileLoaderInheritanceTests = tests
 
 
+class SourceLoader(InheritanceTests):
+    superclass_names = ['ResourceLoader', 'ExecutionLoader']
+    subclass_names = ['SourceFileLoader']
+
+tests = create_inheritance_tests(SourceLoader)
+Frozen_SourceLoaderInheritanceTests, Source_SourceLoaderInheritanceTests = tests
+
 ##### Default return values ####################################################
-class MetaPathFinderSubclass(abc.MetaPathFinder):
+def make_abc_subclasses(base_class):
+    classes = []
+    for kind, abc in [('Frozen', frozen_abc), ('Source', source_abc)]:
+        name = '_'.join([kind, base_class.__name__])
+        base_classes = base_class, getattr(abc, base_class.__name__)
+        classes.append(types.new_class(name, base_classes))
+    return classes
+
+def make_return_value_tests(base_class, test_class):
+    frozen_class, source_class = make_abc_subclasses(base_class)
+    tests = []
+    for prefix, class_in_test in [('Frozen', frozen_class), ('Source', source_class)]:
+        def set_ns(ns):
+            ns['ins'] = class_in_test()
+        tests.append(types.new_class('_'.join([prefix, test_class.__name__]),
+                                     (test_class, unittest.TestCase),
+                                     exec_body=set_ns))
+    return tests
+
+
+class MetaPathFinder:
 
     def find_module(self, fullname, path):
         return super().find_module(fullname, path)
 
+Frozen_MPF, Source_MPF = make_abc_subclasses(MetaPathFinder)
 
-class MetaPathFinderDefaultsTests(unittest.TestCase):
 
-    ins = MetaPathFinderSubclass()
+class MetaPathFinderDefaultsTests:
 
     def test_find_module(self):
         # Default should return None.
@@ -105,15 +161,19 @@
         self.ins.invalidate_caches()
 
 
-class PathEntryFinderSubclass(abc.PathEntryFinder):
+tests = make_return_value_tests(MetaPathFinder, MetaPathFinderDefaultsTests)
+Frozen_MPFDefaultTests, Source_MPFDefaultTests = tests
+
+
+class PathEntryFinder:
 
     def find_loader(self, fullname):
         return super().find_loader(fullname)
 
+Frozen_PEF, Source_PEF = make_abc_subclasses(PathEntryFinder)
 
-class PathEntryFinderDefaultsTests(unittest.TestCase):
 
-    ins = PathEntryFinderSubclass()
+class PathEntryFinderDefaultsTests:
 
     def test_find_loader(self):
         self.assertEqual((None, []), self.ins.find_loader('something'))
@@ -126,15 +186,20 @@
         self.ins.invalidate_caches()
 
 
-class LoaderSubclass(abc.Loader):
+tests = make_return_value_tests(PathEntryFinder, PathEntryFinderDefaultsTests)
+Frozen_PEFDefaultTests, Source_PEFDefaultTests = tests
+
+
+class Loader:
 
     def load_module(self, fullname):
         return super().load_module(fullname)
 
 
-class LoaderDefaultsTests(unittest.TestCase):
+Frozen_L, Source_L = make_abc_subclasses(Loader)
 
-    ins = LoaderSubclass()
+
+class LoaderDefaultsTests:
 
     def test_load_module(self):
         with self.assertRaises(ImportError):
@@ -150,22 +215,31 @@
         self.assertTrue(repr(mod))
 
 
-class ResourceLoaderSubclass(LoaderSubclass, abc.ResourceLoader):
+tests = make_return_value_tests(Loader, LoaderDefaultsTests)
+Frozen_LDefaultTests, SourceLDefaultTests = tests
+
+
+class ResourceLoader(Loader):
 
     def get_data(self, path):
         return super().get_data(path)
 
 
-class ResourceLoaderDefaultsTests(unittest.TestCase):
+Frozen_RL, Source_RL = make_abc_subclasses(ResourceLoader)
 
-    ins = ResourceLoaderSubclass()
+
+class ResourceLoaderDefaultsTests:
 
     def test_get_data(self):
         with self.assertRaises(IOError):
             self.ins.get_data('/some/path')
 
 
-class InspectLoaderSubclass(LoaderSubclass, abc.InspectLoader):
+tests = make_return_value_tests(ResourceLoader, ResourceLoaderDefaultsTests)
+Frozen_RLDefaultTests, Source_RLDefaultTests = tests
+
+
+class InspectLoader(Loader):
 
     def is_package(self, fullname):
         return super().is_package(fullname)
@@ -174,9 +248,10 @@
         return super().get_source(fullname)
 
 
-class InspectLoaderDefaultsTests(unittest.TestCase):
+Frozen_IL, Source_IL = make_abc_subclasses(InspectLoader)
 
-    ins = InspectLoaderSubclass()
+
+class InspectLoaderDefaultsTests:
 
     def test_is_package(self):
         with self.assertRaises(ImportError):
@@ -187,37 +262,52 @@
             self.ins.get_source('blah')
 
 
-class ExecutionLoaderSubclass(InspectLoaderSubclass, abc.ExecutionLoader):
+tests = make_return_value_tests(InspectLoader, InspectLoaderDefaultsTests)
+Frozen_ILDefaultTests, Source_ILDefaultTests = tests
+
+
+class ExecutionLoader(InspectLoader):
 
     def get_filename(self, fullname):
         return super().get_filename(fullname)
 
+Frozen_EL, Source_EL = make_abc_subclasses(ExecutionLoader)
 
-class ExecutionLoaderDefaultsTests(unittest.TestCase):
 
-    ins = ExecutionLoaderSubclass()
+class ExecutionLoaderDefaultsTests:
 
     def test_get_filename(self):
         with self.assertRaises(ImportError):
             self.ins.get_filename('blah')
 
+
+tests = make_return_value_tests(ExecutionLoader, InspectLoaderDefaultsTests)
+Frozen_ELDefaultTests, Source_ELDefaultsTests = tests
+
 ##### Loader concrete methods ##################################################
-class LoaderConcreteMethodTests(unittest.TestCase):
+class LoaderConcreteMethodTests:
 
     def test_init_module_attrs(self):
-        loader = LoaderSubclass()
+        loader = self.LoaderSubclass()
         module = types.ModuleType('blah')
         loader.init_module_attrs(module)
         self.assertEqual(module.__loader__, loader)
 
 
+class Frozen_LoaderConcreateMethodTests(LoaderConcreteMethodTests, unittest.TestCase):
+    LoaderSubclass = Frozen_L
+
+class Source_LoaderConcreateMethodTests(LoaderConcreteMethodTests, unittest.TestCase):
+    LoaderSubclass = Source_L
+
+
 ##### InspectLoader concrete methods ###########################################
-class InspectLoaderSourceToCodeTests(unittest.TestCase):
+class InspectLoaderSourceToCodeTests:
 
     def source_to_module(self, data, path=None):
         """Help with source_to_code() tests."""
         module = types.ModuleType('blah')
-        loader = InspectLoaderSubclass()
+        loader = self.InspectLoaderSubclass()
         if path is None:
             code = loader.source_to_code(data)
         else:
@@ -242,54 +332,67 @@
     def test_source_to_code_path(self):
         # Specifying a path should set it for the code object.
         path = 'path/to/somewhere'
-        loader = InspectLoaderSubclass()
+        loader = self.InspectLoaderSubclass()
         code = loader.source_to_code('', path)
         self.assertEqual(code.co_filename, path)
 
     def test_source_to_code_no_path(self):
         # Not setting a path should still work and be set to <string> since that
         # is a pre-existing practice as a default to compile().
-        loader = InspectLoaderSubclass()
+        loader = self.InspectLoaderSubclass()
         code = loader.source_to_code('')
         self.assertEqual(code.co_filename, '<string>')
 
 
-class InspectLoaderGetCodeTests(unittest.TestCase):
+class Frozen_ILSourceToCodeTests(InspectLoaderSourceToCodeTests, unittest.TestCase):
+    InspectLoaderSubclass = Frozen_IL
+
+class Source_ILSourceToCodeTests(InspectLoaderSourceToCodeTests, unittest.TestCase):
+    InspectLoaderSubclass = Source_IL
+
+
+class InspectLoaderGetCodeTests:
 
     def test_get_code(self):
         # Test success.
         module = types.ModuleType('blah')
-        with mock.patch.object(InspectLoaderSubclass, 'get_source') as mocked:
+        with mock.patch.object(self.InspectLoaderSubclass, 'get_source') as mocked:
             mocked.return_value = 'attr = 42'
-            loader = InspectLoaderSubclass()
+            loader = self.InspectLoaderSubclass()
             code = loader.get_code('blah')
         exec(code, module.__dict__)
         self.assertEqual(module.attr, 42)
 
     def test_get_code_source_is_None(self):
         # If get_source() is None then this should be None.
-        with mock.patch.object(InspectLoaderSubclass, 'get_source') as mocked:
+        with mock.patch.object(self.InspectLoaderSubclass, 'get_source') as mocked:
             mocked.return_value = None
-            loader = InspectLoaderSubclass()
+            loader = self.InspectLoaderSubclass()
             code = loader.get_code('blah')
         self.assertIsNone(code)
 
     def test_get_code_source_not_found(self):
         # If there is no source then there is no code object.
-        loader = InspectLoaderSubclass()
+        loader = self.InspectLoaderSubclass()
         with self.assertRaises(ImportError):
             loader.get_code('blah')
 
 
-class InspectLoaderInitModuleTests(unittest.TestCase):
+class Frozen_ILGetCodeTests(InspectLoaderGetCodeTests, unittest.TestCase):
+    InspectLoaderSubclass = Frozen_IL
 
-    @staticmethod
-    def mock_is_package(return_value):
-        return mock.patch.object(InspectLoaderSubclass, 'is_package',
+class Source_ILGetCodeTests(InspectLoaderGetCodeTests, unittest.TestCase):
+    InspectLoaderSubclass = Source_IL
+
+
+class InspectLoaderInitModuleTests:
+
+    def mock_is_package(self, return_value):
+        return mock.patch.object(self.InspectLoaderSubclass, 'is_package',
                                  return_value=return_value)
 
     def init_module_attrs(self, name):
-        loader = InspectLoaderSubclass()
+        loader = self.InspectLoaderSubclass()
         module = types.ModuleType(name)
         loader.init_module_attrs(module)
         self.assertEqual(module.__loader__, loader)
@@ -329,7 +432,14 @@
             self.assertFalse(hasattr(module, '__path__'))
 
 
-class InspectLoaderLoadModuleTests(unittest.TestCase):
+class Frozen_ILInitModuleTests(InspectLoaderInitModuleTests, unittest.TestCase):
+    InspectLoaderSubclass = Frozen_IL
+
+class Source_ILInitModuleTests(InspectLoaderInitModuleTests, unittest.TestCase):
+    InspectLoaderSubclass = Source_IL
+
+
+class InspectLoaderLoadModuleTests:
 
     """Test InspectLoader.load_module()."""
 
@@ -340,14 +450,14 @@
         self.addCleanup(support.unload, self.module_name)
 
     def mock_get_code(self):
-        return mock.patch.object(InspectLoaderSubclass, 'get_code')
+        return mock.patch.object(self.InspectLoaderSubclass, 'get_code')
 
     def test_get_code_ImportError(self):
         # If get_code() raises ImportError, it should propagate.
         with self.mock_get_code() as mocked_get_code:
             mocked_get_code.side_effect = ImportError
             with self.assertRaises(ImportError):
-                loader = InspectLoaderSubclass()
+                loader = self.InspectLoaderSubclass()
                 loader.load_module(self.module_name)
 
     def test_get_code_None(self):
@@ -355,7 +465,7 @@
         with self.mock_get_code() as mocked_get_code:
             mocked_get_code.return_value = None
             with self.assertRaises(ImportError):
-                loader = InspectLoaderSubclass()
+                loader = self.InspectLoaderSubclass()
                 loader.load_module(self.module_name)
 
     def test_module_returned(self):
@@ -363,21 +473,28 @@
         code = compile('attr = 42', '<string>', 'exec')
         with self.mock_get_code() as mocked_get_code:
             mocked_get_code.return_value = code
-            loader = InspectLoaderSubclass()
+            loader = self.InspectLoaderSubclass()
             module = loader.load_module(self.module_name)
             self.assertEqual(module, sys.modules[self.module_name])
 
 
+class Frozen_ILLoadModuleTests(InspectLoaderLoadModuleTests, unittest.TestCase):
+    InspectLoaderSubclass = Frozen_IL
+
+class Source_ILLoadModuleTests(InspectLoaderLoadModuleTests, unittest.TestCase):
+    InspectLoaderSubclass = Source_IL
+
+
 ##### ExecutionLoader concrete methods #########################################
-class ExecutionLoaderGetCodeTests(unittest.TestCase):
+class ExecutionLoaderGetCodeTests:
 
     def mock_methods(self, *, get_source=False, get_filename=False):
         source_mock_context, filename_mock_context = None, None
         if get_source:
-            source_mock_context = mock.patch.object(ExecutionLoaderSubclass,
+            source_mock_context = mock.patch.object(self.ExecutionLoaderSubclass,
                                                     'get_source')
         if get_filename:
-            filename_mock_context = mock.patch.object(ExecutionLoaderSubclass,
+            filename_mock_context = mock.patch.object(self.ExecutionLoaderSubclass,
                                                       'get_filename')
         return source_mock_context, filename_mock_context
 
@@ -388,7 +505,7 @@
         with source_mock_context as source_mock, filename_mock_context as name_mock:
             source_mock.return_value = 'attr = 42'
             name_mock.return_value = path
-            loader = ExecutionLoaderSubclass()
+            loader = self.ExecutionLoaderSubclass()
             code = loader.get_code('blah')
         self.assertEqual(code.co_filename, path)
         module = types.ModuleType('blah')
@@ -400,13 +517,13 @@
         source_mock_context, _ = self.mock_methods(get_source=True)
         with source_mock_context as mocked:
             mocked.return_value = None
-            loader = ExecutionLoaderSubclass()
+            loader = self.ExecutionLoaderSubclass()
             code = loader.get_code('blah')
         self.assertIsNone(code)
 
     def test_get_code_source_not_found(self):
         # If there is no source then there is no code object.
-        loader = ExecutionLoaderSubclass()
+        loader = self.ExecutionLoaderSubclass()
         with self.assertRaises(ImportError):
             loader.get_code('blah')
 
@@ -418,7 +535,7 @@
         with source_mock_context as source_mock, filename_mock_context as name_mock:
             source_mock.return_value = 'attr = 42'
             name_mock.side_effect = ImportError
-            loader = ExecutionLoaderSubclass()
+            loader = self.ExecutionLoaderSubclass()
             code = loader.get_code('blah')
         self.assertEqual(code.co_filename, '<string>')
         module = types.ModuleType('blah')
@@ -426,13 +543,23 @@
         self.assertEqual(module.attr, 42)
 
 
-class ExecutionLoaderInitModuleTests(unittest.TestCase):
+class Frozen_ELGetCodeTests(ExecutionLoaderGetCodeTests, unittest.TestCase):
+    ExecutionLoaderSubclass = Frozen_EL
 
-    @staticmethod
+class Source_ELGetCodeTests(ExecutionLoaderGetCodeTests, unittest.TestCase):
+    ExecutionLoaderSubclass = Source_EL
+
+
+class ExecutionLoaderInitModuleTests:
+
+    def mock_is_package(self, return_value):
+        return mock.patch.object(self.ExecutionLoaderSubclass, 'is_package',
+                                 return_value=return_value)
+
     @contextlib.contextmanager
-    def mock_methods(is_package, filename):
-        is_package_manager = InspectLoaderInitModuleTests.mock_is_package(is_package)
-        get_filename_manager = mock.patch.object(ExecutionLoaderSubclass,
+    def mock_methods(self, is_package, filename):
+        is_package_manager = self.mock_is_package(is_package)
+        get_filename_manager = mock.patch.object(self.ExecutionLoaderSubclass,
                 'get_filename', return_value=filename)
         with is_package_manager as mock_is_package:
             with get_filename_manager as mock_get_filename:
@@ -444,7 +571,7 @@
         name = 'blah'
         path = os.path.join('some', 'path', '{}.py'.format(name))
         with self.mock_methods(False, path):
-            loader = ExecutionLoaderSubclass()
+            loader = self.ExecutionLoaderSubclass()
             module = types.ModuleType(name)
             loader.init_module_attrs(module)
         self.assertIs(module.__loader__, loader)
@@ -457,7 +584,7 @@
         name = 'pkg'
         path = os.path.join('some', 'pkg', '__init__.py')
         with self.mock_methods(True, path):
-            loader = ExecutionLoaderSubclass()
+            loader = self.ExecutionLoaderSubclass()
             module = types.ModuleType(name)
             loader.init_module_attrs(module)
         self.assertIs(module.__loader__, loader)
@@ -471,7 +598,7 @@
         name = 'pkg.submodule'
         path = os.path.join('some', 'pkg', 'submodule.py')
         with self.mock_methods(False, path):
-            loader = ExecutionLoaderSubclass()
+            loader = self.ExecutionLoaderSubclass()
             module = types.ModuleType(name)
             loader.init_module_attrs(module)
         self.assertEqual(module.__package__, 'pkg')
@@ -484,14 +611,21 @@
         path = 'blah.py'
         with self.mock_methods(False, path) as mocked_methods:
             mocked_methods['get_filename'].side_effect = ImportError
-            loader = ExecutionLoaderSubclass()
+            loader = self.ExecutionLoaderSubclass()
             module = types.ModuleType(name)
             loader.init_module_attrs(module)
         self.assertFalse(hasattr(module, '__file__'))
 
 
+class Frozen_ELInitModuleTests(ExecutionLoaderInitModuleTests, unittest.TestCase):
+    ExecutionLoaderSubclass = Frozen_EL
+
+class Source_ELInitModuleTests(ExecutionLoaderInitModuleTests, unittest.TestCase):
+    ExecutionLoaderSubclass = Source_EL
+
+
 ##### SourceLoader concrete methods ############################################
-class SourceOnlyLoaderMock(abc.SourceLoader):
+class SourceLoader:
 
     # Globals that should be defined for all modules.
     source = (b"_ = '::'.join([__name__, __file__, __cached__, __package__, "
@@ -512,17 +646,22 @@
         return '<module>'
 
 
-class SourceLoaderMock(SourceOnlyLoaderMock):
+Frozen_SourceOnlyL, Source_SourceOnlyL = make_abc_subclasses(SourceLoader)
+
+
+class SourceLoader(SourceLoader):
 
     source_mtime = 1
 
-    def __init__(self, path, magic=importlib.util.MAGIC_NUMBER):
+    def __init__(self, path, magic=None):
         super().__init__(path)
-        self.bytecode_path = importlib.util.cache_from_source(self.path)
+        self.bytecode_path = self.util.cache_from_source(self.path)
         self.source_size = len(self.source)
+        if magic is None:
+            magic = self.util.MAGIC_NUMBER
         data = bytearray(magic)
-        data.extend(importlib._w_long(self.source_mtime))
-        data.extend(importlib._w_long(self.source_size))
+        data.extend(self.init._w_long(self.source_mtime))
+        data.extend(self.init._w_long(self.source_size))
         code_object = compile(self.source, self.path, 'exec',
                                 dont_inherit=True)
         data.extend(marshal.dumps(code_object))
@@ -547,7 +686,14 @@
         return path == self.bytecode_path
 
 
-class SourceLoaderTestHarness(unittest.TestCase):
+Frozen_SL, Source_SL = make_abc_subclasses(SourceLoader)
+Frozen_SL.util = frozen_util
+Source_SL.util = source_util
+Frozen_SL.init = frozen_init
+Source_SL.init = source_init
+
+
+class SourceLoaderTestHarness:
 
     def setUp(self, *, is_package=True, **kwargs):
         self.package = 'pkg'
@@ -558,7 +704,7 @@
             module_name = 'mod'
             self.path = os.path.join(self.package, '.'.join(['mod', 'py']))
             self.name = '.'.join([self.package, module_name])
-        self.cached = importlib.util.cache_from_source(self.path)
+        self.cached = self.util.cache_from_source(self.path)
         self.loader = self.loader_mock(self.path, **kwargs)
 
     def verify_module(self, module):
@@ -594,8 +740,6 @@
 
     """
 
-    loader_mock = SourceOnlyLoaderMock
-
     def test_get_source(self):
         # Verify the source code is returned as a string.
         # If an OSError is raised by get_data then raise ImportError.
@@ -659,6 +803,15 @@
         self.assertEqual(returned_source, source)
 
 
+class Frozen_SourceOnlyLTests(SourceOnlyLoaderTests, unittest.TestCase):
+    loader_mock = Frozen_SourceOnlyL
+    util = frozen_util
+
+class Source_SourceOnlyLTests(SourceOnlyLoaderTests, unittest.TestCase):
+    loader_mock = Source_SourceOnlyL
+    util = source_util
+
+
 @unittest.skipIf(sys.dont_write_bytecode, "sys.dont_write_bytecode is true")
 class SourceLoaderBytecodeTests(SourceLoaderTestHarness):
 
@@ -668,15 +821,13 @@
 
     """
 
-    loader_mock = SourceLoaderMock
-
     def verify_code(self, code_object, *, bytecode_written=False):
         super().verify_code(code_object)
         if bytecode_written:
             self.assertIn(self.cached, self.loader.written)
-            data = bytearray(importlib.util.MAGIC_NUMBER)
-            data.extend(importlib._w_long(self.loader.source_mtime))
-            data.extend(importlib._w_long(self.loader.source_size))
+            data = bytearray(self.util.MAGIC_NUMBER)
+            data.extend(self.init._w_long(self.loader.source_mtime))
+            data.extend(self.init._w_long(self.loader.source_size))
             data.extend(marshal.dumps(code_object))
             self.assertEqual(self.loader.written[self.cached], bytes(data))
 
@@ -690,7 +841,7 @@
         self.loader.bytecode_path = "<does not exist>"
         # Sanity check
         with self.assertRaises(OSError):
-            bytecode_path = importlib.util.cache_from_source(self.path)
+            bytecode_path = self.util.cache_from_source(self.path)
             self.loader.get_data(bytecode_path)
         code_object = self.loader.get_code(self.name)
         self.verify_code(code_object, bytecode_written=True)
@@ -729,13 +880,13 @@
     def test_no_set_data(self):
         # If set_data is not defined, one can still read bytecode.
         self.setUp(magic=b'0000')
-        original_set_data = self.loader.__class__.set_data
+        original_set_data = self.loader.__class__.mro()[1].set_data
         try:
-            del self.loader.__class__.set_data
+            del self.loader.__class__.mro()[1].set_data
             code_object = self.loader.get_code(self.name)
             self.verify_code(code_object)
         finally:
-            self.loader.__class__.set_data = original_set_data
+            self.loader.__class__.mro()[1].set_data = original_set_data
 
     def test_set_data_raises_exceptions(self):
         # Raising NotImplementedError or OSError is okay for set_data.
@@ -750,14 +901,25 @@
         self.verify_code(code_object)
 
 
-class SourceLoaderGetSourceTests(unittest.TestCase):
+class Frozen_SLBytecodeTests(SourceLoaderBytecodeTests, unittest.TestCase):
+    loader_mock = Frozen_SL
+    init = frozen_init
+    util = frozen_util
+
+class SourceSLBytecodeTests(SourceLoaderBytecodeTests, unittest.TestCase):
+    loader_mock = Source_SL
+    init = source_init
+    util = source_util
+
+
+class SourceLoaderGetSourceTests:
 
     """Tests for importlib.abc.SourceLoader.get_source()."""
 
     def test_default_encoding(self):
         # Should have no problems with UTF-8 text.
         name = 'mod'
-        mock = SourceOnlyLoaderMock('mod.file')
+        mock = self.SourceOnlyLoaderMock('mod.file')
         source = 'x = "ü"'
         mock.source = source.encode('utf-8')
         returned_source = mock.get_source(name)
@@ -766,7 +928,7 @@
     def test_decoded_source(self):
         # Decoding should work.
         name = 'mod'
-        mock = SourceOnlyLoaderMock("mod.file")
+        mock = self.SourceOnlyLoaderMock("mod.file")
         source = "# coding: Latin-1\nx='ü'"
         assert source.encode('latin-1') != source.encode('utf-8')
         mock.source = source.encode('latin-1')
@@ -776,14 +938,21 @@
     def test_universal_newlines(self):
         # PEP 302 says universal newlines should be used.
         name = 'mod'
-        mock = SourceOnlyLoaderMock('mod.file')
+        mock = self.SourceOnlyLoaderMock('mod.file')
         source = "x = 42\r\ny = -13\r\n"
         mock.source = source.encode('utf-8')
         expect = io.IncrementalNewlineDecoder(None, True).decode(source)
         self.assertEqual(mock.get_source(name), expect)
 
 
-class SourceLoaderInitModuleAttrTests(unittest.TestCase):
+class Frozen_SourceOnlyLGetSourceTests(SourceLoaderGetSourceTests, unittest.TestCase):
+    SourceOnlyLoaderMock = Frozen_SourceOnlyL
+
+class Source_SourceOnlyLGetSourceTests(SourceLoaderGetSourceTests, unittest.TestCase):
+    SourceOnlyLoaderMock = Source_SourceOnlyL
+
+
+class SourceLoaderInitModuleAttrTests:
 
     """Tests for importlib.abc.SourceLoader.init_module_attrs()."""
 
@@ -791,14 +960,31 @@
         # If __file__ set, __cached__ == importlib.util.cached_from_source(__file__).
         name = 'blah'
         path = 'blah.py'
-        loader = SourceOnlyLoaderMock(path)
+        loader = self.SourceOnlyLoaderMock(path)
         module = types.ModuleType(name)
         loader.init_module_attrs(module)
         self.assertEqual(module.__loader__, loader)
         self.assertEqual(module.__package__, '')
         self.assertEqual(module.__file__, path)
-        self.assertEqual(module.__cached__, importlib.util.cache_from_source(path))
+        self.assertEqual(module.__cached__, self.util.cache_from_source(path))
 
+    def test_no_get_filename(self):
+        # No __file__, no __cached__.
+        with mock.patch.object(self.SourceOnlyLoaderMock, 'get_filename') as mocked:
+            mocked.side_effect = ImportError
+            name = 'blah'
+            loader = self.SourceOnlyLoaderMock('blah.py')
+            module = types.ModuleType(name)
+            loader.init_module_attrs(module)
+        self.assertFalse(hasattr(module, '__file__'))
+        self.assertFalse(hasattr(module, '__cached__'))
+
+
+class Frozen_SLInitModuleAttrTests(SourceLoaderInitModuleAttrTests, unittest.TestCase):
+    SourceOnlyLoaderMock = Frozen_SourceOnlyL
+    util = frozen_util
+
+    # Difficult to test under source thanks to cross-module mocking needs.
     @mock.patch('importlib._bootstrap.cache_from_source')
     def test_cache_from_source_NotImplementedError(self, mock_cache_from_source):
         # If importlib.util.cache_from_source() raises NotImplementedError don't set
@@ -806,22 +992,16 @@
         mock_cache_from_source.side_effect = NotImplementedError
         name = 'blah'
         path = 'blah.py'
-        loader = SourceOnlyLoaderMock(path)
+        loader = self.SourceOnlyLoaderMock(path)
         module = types.ModuleType(name)
         loader.init_module_attrs(module)
         self.assertEqual(module.__file__, path)
         self.assertFalse(hasattr(module, '__cached__'))
 
-    def test_no_get_filename(self):
-        # No __file__, no __cached__.
-        with mock.patch.object(SourceOnlyLoaderMock, 'get_filename') as mocked:
-            mocked.side_effect = ImportError
-            name = 'blah'
-            loader = SourceOnlyLoaderMock('blah.py')
-            module = types.ModuleType(name)
-            loader.init_module_attrs(module)
-        self.assertFalse(hasattr(module, '__file__'))
-        self.assertFalse(hasattr(module, '__cached__'))
+
+class Source_SLInitModuleAttrTests(SourceLoaderInitModuleAttrTests, unittest.TestCase):
+    SourceOnlyLoaderMock = Source_SourceOnlyL
+    util = source_util
 
 
 
diff --git a/Lib/test/test_importlib/test_api.py b/Lib/test/test_importlib/test_api.py
index 0c0e851..5126634 100644
--- a/Lib/test/test_importlib/test_api.py
+++ b/Lib/test/test_importlib/test_api.py
@@ -1,15 +1,17 @@
 from . import util
 
-import importlib
-from importlib import _bootstrap
-from importlib import machinery
+frozen_init, source_init = util.import_importlib('importlib')
+frozen_util, source_util = util.import_importlib('importlib.util')
+frozen_machinery, source_machinery = util.import_importlib('importlib.machinery')
+
+import os.path
 import sys
 from test import support
 import types
 import unittest
 
 
-class ImportModuleTests(unittest.TestCase):
+class ImportModuleTests:
 
     """Test importlib.import_module."""
 
@@ -17,7 +19,7 @@
         # Test importing a top-level module.
         with util.mock_modules('top_level') as mock:
             with util.import_state(meta_path=[mock]):
-                module = importlib.import_module('top_level')
+                module = self.init.import_module('top_level')
                 self.assertEqual(module.__name__, 'top_level')
 
     def test_absolute_package_import(self):
@@ -27,7 +29,7 @@
         name = '{0}.mod'.format(pkg_name)
         with util.mock_modules(pkg_long_name, name) as mock:
             with util.import_state(meta_path=[mock]):
-                module = importlib.import_module(name)
+                module = self.init.import_module(name)
                 self.assertEqual(module.__name__, name)
 
     def test_shallow_relative_package_import(self):
@@ -39,17 +41,17 @@
         relative_name = '.{0}'.format(module_name)
         with util.mock_modules(pkg_long_name, absolute_name) as mock:
             with util.import_state(meta_path=[mock]):
-                importlib.import_module(pkg_name)
-                module = importlib.import_module(relative_name, pkg_name)
+                self.init.import_module(pkg_name)
+                module = self.init.import_module(relative_name, pkg_name)
                 self.assertEqual(module.__name__, absolute_name)
 
     def test_deep_relative_package_import(self):
         modules = ['a.__init__', 'a.b.__init__', 'a.c']
         with util.mock_modules(*modules) as mock:
             with util.import_state(meta_path=[mock]):
-                importlib.import_module('a')
-                importlib.import_module('a.b')
-                module = importlib.import_module('..c', 'a.b')
+                self.init.import_module('a')
+                self.init.import_module('a.b')
+                module = self.init.import_module('..c', 'a.b')
                 self.assertEqual(module.__name__, 'a.c')
 
     def test_absolute_import_with_package(self):
@@ -60,15 +62,15 @@
         name = '{0}.mod'.format(pkg_name)
         with util.mock_modules(pkg_long_name, name) as mock:
             with util.import_state(meta_path=[mock]):
-                importlib.import_module(pkg_name)
-                module = importlib.import_module(name, pkg_name)
+                self.init.import_module(pkg_name)
+                module = self.init.import_module(name, pkg_name)
                 self.assertEqual(module.__name__, name)
 
     def test_relative_import_wo_package(self):
         # Relative imports cannot happen without the 'package' argument being
         # set.
         with self.assertRaises(TypeError):
-            importlib.import_module('.support')
+            self.init.import_module('.support')
 
 
     def test_loaded_once(self):
@@ -77,7 +79,7 @@
         # module currently being imported.
         b_load_count = 0
         def load_a():
-            importlib.import_module('a.b')
+            self.init.import_module('a.b')
         def load_b():
             nonlocal b_load_count
             b_load_count += 1
@@ -85,11 +87,17 @@
         modules = ['a.__init__', 'a.b']
         with util.mock_modules(*modules, module_code=code) as mock:
             with util.import_state(meta_path=[mock]):
-                importlib.import_module('a.b')
+                self.init.import_module('a.b')
         self.assertEqual(b_load_count, 1)
 
+class Frozen_ImportModuleTests(ImportModuleTests, unittest.TestCase):
+    init = frozen_init
 
-class FindLoaderTests(unittest.TestCase):
+class Source_ImportModuleTests(ImportModuleTests, unittest.TestCase):
+    init = source_init
+
+
+class FindLoaderTests:
 
     class FakeMetaFinder:
         @staticmethod
@@ -103,7 +111,7 @@
             loader = 'a loader!'
             module.__loader__ = loader
             sys.modules[name] = module
-            found = importlib.find_loader(name)
+            found = self.init.find_loader(name)
             self.assertEqual(loader, found)
 
     def test_sys_modules_loader_is_None(self):
@@ -114,7 +122,7 @@
             module.__loader__ = None
             sys.modules[name] = module
             with self.assertRaises(ValueError):
-                importlib.find_loader(name)
+                self.init.find_loader(name)
 
     def test_sys_modules_loader_is_not_set(self):
         # Should raise ValueError
@@ -128,14 +136,14 @@
                 pass
             sys.modules[name] = module
             with self.assertRaises(ValueError):
-                importlib.find_loader(name)
+                self.init.find_loader(name)
 
     def test_success(self):
         # Return the loader found on sys.meta_path.
         name = 'some_mod'
         with util.uncache(name):
             with util.import_state(meta_path=[self.FakeMetaFinder]):
-                self.assertEqual((name, None), importlib.find_loader(name))
+                self.assertEqual((name, None), self.init.find_loader(name))
 
     def test_success_path(self):
         # Searching on a path should work.
@@ -144,14 +152,20 @@
         with util.uncache(name):
             with util.import_state(meta_path=[self.FakeMetaFinder]):
                 self.assertEqual((name, path),
-                                 importlib.find_loader(name, path))
+                                 self.init.find_loader(name, path))
 
     def test_nothing(self):
         # None is returned upon failure to find a loader.
-        self.assertIsNone(importlib.find_loader('nevergoingtofindthismodule'))
+        self.assertIsNone(self.init.find_loader('nevergoingtofindthismodule'))
+
+class Frozen_FindLoaderTests(FindLoaderTests, unittest.TestCase):
+    init = frozen_init
+
+class Source_FindLoaderTests(FindLoaderTests, unittest.TestCase):
+    init = source_init
 
 
-class ReloadTests(unittest.TestCase):
+class ReloadTests:
 
     """Test module reloading for builtin and extension modules."""
 
@@ -159,8 +173,8 @@
         for mod in ('tokenize', 'time', 'marshal'):
             with self.subTest(module=mod):
                 with support.CleanImport(mod):
-                    module = importlib.import_module(mod)
-                    importlib.reload(module)
+                    module = self.init.import_module(mod)
+                    self.init.reload(module)
 
     def test_module_replaced(self):
         def code():
@@ -172,14 +186,138 @@
                                  module_code={'top_level': code})
         with mock:
             with util.import_state(meta_path=[mock]):
-                module = importlib.import_module('top_level')
-                reloaded = importlib.reload(module)
+                module = self.init.import_module('top_level')
+                reloaded = self.init.reload(module)
                 actual = sys.modules['top_level']
                 self.assertEqual(actual.spam, 3)
                 self.assertEqual(reloaded.spam, 3)
 
+    def test_reload_missing_loader(self):
+        with support.CleanImport('types'):
+            import types
+            loader = types.__loader__
+            del types.__loader__
+            reloaded = self.init.reload(types)
 
-class InvalidateCacheTests(unittest.TestCase):
+            self.assertIs(reloaded, types)
+            self.assertIs(sys.modules['types'], types)
+            self.assertEqual(reloaded.__loader__.path, loader.path)
+
+    def test_reload_loader_replaced(self):
+        with support.CleanImport('types'):
+            import types
+            types.__loader__ = None
+            self.init.invalidate_caches()
+            reloaded = self.init.reload(types)
+
+            self.assertIsNot(reloaded.__loader__, None)
+            self.assertIs(reloaded, types)
+            self.assertIs(sys.modules['types'], types)
+
+    def test_reload_location_changed(self):
+        name = 'spam'
+        with support.temp_cwd(None) as cwd:
+            with util.uncache('spam'):
+                with support.DirsOnSysPath(cwd):
+                    self.init.invalidate_caches()
+                    path = os.path.join(cwd, name + '.py')
+                    cached = self.util.cache_from_source(path)
+                    expected = {'__name__': name,
+                                '__package__': '',
+                                '__file__': path,
+                                '__cached__': cached,
+                                '__doc__': None,
+                                '__builtins__': __builtins__,
+                                }
+                    support.create_empty_file(path)
+                    module = self.init.import_module(name)
+                    ns = vars(module)
+                    del ns['__initializing__']
+                    loader = ns.pop('__loader__')
+                    self.assertEqual(loader.path, path)
+                    self.assertEqual(ns, expected)
+
+                    self.init.invalidate_caches()
+                    init_path = os.path.join(cwd, name, '__init__.py')
+                    cached = self.util.cache_from_source(init_path)
+                    expected = {'__name__': name,
+                                '__package__': name,
+                                '__file__': init_path,
+                                '__cached__': cached,
+                                '__path__': [os.path.dirname(init_path)],
+                                '__doc__': None,
+                                '__builtins__': __builtins__,
+                                }
+                    os.mkdir(name)
+                    os.rename(path, init_path)
+                    reloaded = self.init.reload(module)
+                    ns = vars(reloaded)
+                    del ns['__initializing__']
+                    loader = ns.pop('__loader__')
+                    self.assertIs(reloaded, module)
+                    self.assertEqual(loader.path, init_path)
+                    self.assertEqual(ns, expected)
+
+    def test_reload_namespace_changed(self):
+        self.maxDiff = None
+        name = 'spam'
+        with support.temp_cwd(None) as cwd:
+            with util.uncache('spam'):
+                with support.DirsOnSysPath(cwd):
+                    self.init.invalidate_caches()
+                    bad_path = os.path.join(cwd, name, '__init.py')
+                    cached = self.util.cache_from_source(bad_path)
+                    expected = {'__name__': name,
+                                '__package__': name,
+                                '__doc__': None,
+                                }
+                    os.mkdir(name)
+                    with open(bad_path, 'w') as init_file:
+                        init_file.write('eggs = None')
+                    module = self.init.import_module(name)
+                    ns = vars(module)
+                    del ns['__initializing__']
+                    loader = ns.pop('__loader__')
+                    path = ns.pop('__path__')
+                    self.assertEqual(set(path),
+                                     set([os.path.dirname(bad_path)]))
+                    with self.assertRaises(AttributeError):
+                        # a NamespaceLoader
+                        loader.path
+                    self.assertEqual(ns, expected)
+
+                    self.init.invalidate_caches()
+                    init_path = os.path.join(cwd, name, '__init__.py')
+                    cached = self.util.cache_from_source(init_path)
+                    expected = {'__name__': name,
+                                '__package__': name,
+                                '__file__': init_path,
+                                '__cached__': cached,
+                                '__path__': [os.path.dirname(init_path)],
+                                '__doc__': None,
+                                '__builtins__': __builtins__,
+                                'eggs': None,
+                                }
+                    os.rename(bad_path, init_path)
+                    reloaded = self.init.reload(module)
+                    ns = vars(reloaded)
+                    del ns['__initializing__']
+                    loader = ns.pop('__loader__')
+                    self.assertIs(reloaded, module)
+                    self.assertEqual(loader.path, init_path)
+                    self.assertEqual(ns, expected)
+
+
+class Frozen_ReloadTests(ReloadTests, unittest.TestCase):
+    init = frozen_init
+    util = frozen_util
+
+class Source_ReloadTests(ReloadTests, unittest.TestCase):
+    init = source_init
+    util = source_util
+
+
+class InvalidateCacheTests:
 
     def test_method_called(self):
         # If defined the method should be called.
@@ -198,7 +336,7 @@
         self.addCleanup(lambda: sys.path_importer_cache.__delitem__(key))
         sys.path_importer_cache[key] = path_ins
         self.addCleanup(lambda: sys.meta_path.remove(meta_ins))
-        importlib.invalidate_caches()
+        self.init.invalidate_caches()
         self.assertTrue(meta_ins.called)
         self.assertTrue(path_ins.called)
 
@@ -207,19 +345,27 @@
         key = 'gobbledeegook'
         sys.path_importer_cache[key] = None
         self.addCleanup(lambda: sys.path_importer_cache.__delitem__(key))
-        importlib.invalidate_caches()  # Shouldn't trigger an exception.
+        self.init.invalidate_caches()  # Shouldn't trigger an exception.
+
+class Frozen_InvalidateCacheTests(InvalidateCacheTests, unittest.TestCase):
+    init = frozen_init
+
+class Source_InvalidateCacheTests(InvalidateCacheTests, unittest.TestCase):
+    init = source_init
 
 
 class FrozenImportlibTests(unittest.TestCase):
 
     def test_no_frozen_importlib(self):
         # Should be able to import w/o _frozen_importlib being defined.
-        module = support.import_fresh_module('importlib', blocked=['_frozen_importlib'])
-        self.assertFalse(isinstance(module.__loader__,
-                                    machinery.FrozenImporter))
+        # Can't do an isinstance() check since separate copies of importlib
+        # may have been used for import, so just check the name is not for the
+        # frozen loader.
+        self.assertNotEqual(source_init.__loader__.__class__.__name__,
+                            'FrozenImporter')
 
 
-class StartupTests(unittest.TestCase):
+class StartupTests:
 
     def test_everyone_has___loader__(self):
         # Issue #17098: all modules should have __loader__ defined.
@@ -227,11 +373,17 @@
             if isinstance(module, types.ModuleType):
                 self.assertTrue(hasattr(module, '__loader__'),
                                 '{!r} lacks a __loader__ attribute'.format(name))
-                if importlib.machinery.BuiltinImporter.find_module(name):
+                if self.machinery.BuiltinImporter.find_module(name):
                     self.assertIsNot(module.__loader__, None)
-                elif importlib.machinery.FrozenImporter.find_module(name):
+                elif self.machinery.FrozenImporter.find_module(name):
                     self.assertIsNot(module.__loader__, None)
 
+class Frozen_StartupTests(StartupTests, unittest.TestCase):
+    machinery = frozen_machinery
+
+class Source_StartupTests(StartupTests, unittest.TestCase):
+    machinery = source_machinery
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_importlib/test_locks.py b/Lib/test/test_importlib/test_locks.py
index c373b11..dc97ba1 100644
--- a/Lib/test/test_importlib/test_locks.py
+++ b/Lib/test/test_importlib/test_locks.py
@@ -1,4 +1,8 @@
-from importlib import _bootstrap
+from . import util
+frozen_init, source_init = util.import_importlib('importlib')
+frozen_bootstrap = frozen_init._bootstrap
+source_bootstrap = source_init._bootstrap
+
 import sys
 import time
 import unittest
@@ -13,14 +17,9 @@
 else:
     from test import lock_tests
 
-
-LockType = _bootstrap._ModuleLock
-DeadlockError = _bootstrap._DeadlockError
-
-
 if threading is not None:
-    class ModuleLockAsRLockTests(lock_tests.RLockTests):
-        locktype = staticmethod(lambda: LockType("some_lock"))
+    class ModuleLockAsRLockTests:
+        locktype = classmethod(lambda cls: cls.LockType("some_lock"))
 
         # _is_owned() unsupported
         test__is_owned = None
@@ -34,13 +33,21 @@
         # _release_save() unsupported
         test_release_save_unacquired = None
 
+    class Frozen_ModuleLockAsRLockTests(ModuleLockAsRLockTests, lock_tests.RLockTests):
+        LockType = frozen_bootstrap._ModuleLock
+
+    class Source_ModuleLockAsRLockTests(ModuleLockAsRLockTests, lock_tests.RLockTests):
+        LockType = source_bootstrap._ModuleLock
+
 else:
-    class ModuleLockAsRLockTests(unittest.TestCase):
+    class Frozen_ModuleLockAsRLockTests(unittest.TestCase):
+        pass
+
+    class Source_ModuleLockAsRLockTests(unittest.TestCase):
         pass
 
 
-@unittest.skipUnless(threading, "threads needed for this test")
-class DeadlockAvoidanceTests(unittest.TestCase):
+class DeadlockAvoidanceTests:
 
     def setUp(self):
         try:
@@ -55,7 +62,7 @@
 
     def run_deadlock_avoidance_test(self, create_deadlock):
         NLOCKS = 10
-        locks = [LockType(str(i)) for i in range(NLOCKS)]
+        locks = [self.LockType(str(i)) for i in range(NLOCKS)]
         pairs = [(locks[i], locks[(i+1)%NLOCKS]) for i in range(NLOCKS)]
         if create_deadlock:
             NTHREADS = NLOCKS
@@ -67,7 +74,7 @@
             """Try to acquire the lock. Return True on success, False on deadlock."""
             try:
                 lock.acquire()
-            except DeadlockError:
+            except self.DeadlockError:
                 return False
             else:
                 return True
@@ -99,30 +106,50 @@
         self.assertEqual(results.count((True, False)), 0)
         self.assertEqual(results.count((True, True)), len(results))
 
+@unittest.skipUnless(threading, "threads needed for this test")
+class Frozen_DeadlockAvoidanceTests(DeadlockAvoidanceTests, unittest.TestCase):
+    LockType = frozen_bootstrap._ModuleLock
+    DeadlockError = frozen_bootstrap._DeadlockError
 
-class LifetimeTests(unittest.TestCase):
+@unittest.skipUnless(threading, "threads needed for this test")
+class Source_DeadlockAvoidanceTests(DeadlockAvoidanceTests, unittest.TestCase):
+    LockType = source_bootstrap._ModuleLock
+    DeadlockError = source_bootstrap._DeadlockError
+
+
+class LifetimeTests:
 
     def test_lock_lifetime(self):
         name = "xyzzy"
-        self.assertNotIn(name, _bootstrap._module_locks)
-        lock = _bootstrap._get_module_lock(name)
-        self.assertIn(name, _bootstrap._module_locks)
+        self.assertNotIn(name, self.bootstrap._module_locks)
+        lock = self.bootstrap._get_module_lock(name)
+        self.assertIn(name, self.bootstrap._module_locks)
         wr = weakref.ref(lock)
         del lock
         support.gc_collect()
-        self.assertNotIn(name, _bootstrap._module_locks)
+        self.assertNotIn(name, self.bootstrap._module_locks)
         self.assertIsNone(wr())
 
     def test_all_locks(self):
         support.gc_collect()
-        self.assertEqual(0, len(_bootstrap._module_locks), _bootstrap._module_locks)
+        self.assertEqual(0, len(self.bootstrap._module_locks),
+                         self.bootstrap._module_locks)
+
+class Frozen_LifetimeTests(LifetimeTests, unittest.TestCase):
+    bootstrap = frozen_bootstrap
+
+class Source_LifetimeTests(LifetimeTests, unittest.TestCase):
+    bootstrap = source_bootstrap
 
 
 @support.reap_threads
 def test_main():
-    support.run_unittest(ModuleLockAsRLockTests,
-                         DeadlockAvoidanceTests,
-                         LifetimeTests)
+    support.run_unittest(Frozen_ModuleLockAsRLockTests,
+                         Source_ModuleLockAsRLockTests,
+                         Frozen_DeadlockAvoidanceTests,
+                         Source_DeadlockAvoidanceTests,
+                         Frozen_LifetimeTests,
+                         Source_LifetimeTests)
 
 
 if __name__ == '__main__':
diff --git a/Lib/test/test_importlib/test_util.py b/Lib/test/test_importlib/test_util.py
index 5fcbdae..2ac57df 100644
--- a/Lib/test/test_importlib/test_util.py
+++ b/Lib/test/test_importlib/test_util.py
@@ -1,5 +1,6 @@
 from importlib import util
 from . import util as test_util
+frozen_util, source_util = test_util.import_importlib('importlib.util')
 
 import os
 import sys
@@ -9,28 +10,31 @@
 import warnings
 
 
-class DecodeSourceBytesTests(unittest.TestCase):
+class DecodeSourceBytesTests:
 
     source = "string ='ü'"
 
     def test_ut8_default(self):
         source_bytes = self.source.encode('utf-8')
-        self.assertEqual(util.decode_source(source_bytes), self.source)
+        self.assertEqual(self.util.decode_source(source_bytes), self.source)
 
     def test_specified_encoding(self):
         source = '# coding=latin-1\n' + self.source
         source_bytes = source.encode('latin-1')
         assert source_bytes != source.encode('utf-8')
-        self.assertEqual(util.decode_source(source_bytes), source)
+        self.assertEqual(self.util.decode_source(source_bytes), source)
 
     def test_universal_newlines(self):
         source = '\r\n'.join([self.source, self.source])
         source_bytes = source.encode('utf-8')
-        self.assertEqual(util.decode_source(source_bytes),
+        self.assertEqual(self.util.decode_source(source_bytes),
                          '\n'.join([self.source, self.source]))
 
+Frozen_DecodeSourceBytesTests, Source_DecodeSourceBytesTests = test_util.test_both(
+        DecodeSourceBytesTests, util=[frozen_util, source_util])
 
-class ModuleToLoadTests(unittest.TestCase):
+
+class ModuleToLoadTests:
 
     module_name = 'ModuleManagerTest_module'
 
@@ -42,7 +46,7 @@
         # Test a new module is created, inserted into sys.modules, has
         # __initializing__ set to True after entering the context manager,
         # and __initializing__ set to False after exiting.
-        with util.module_to_load(self.module_name) as module:
+        with self.util.module_to_load(self.module_name) as module:
             self.assertIn(self.module_name, sys.modules)
             self.assertIs(sys.modules[self.module_name], module)
             self.assertTrue(module.__initializing__)
@@ -51,7 +55,7 @@
     def test_new_module_failed(self):
         # Test the module is removed from sys.modules.
         try:
-            with util.module_to_load(self.module_name) as module:
+            with self.util.module_to_load(self.module_name) as module:
                 self.assertIn(self.module_name, sys.modules)
                 raise exception
         except Exception:
@@ -63,7 +67,7 @@
         # Test that the same module is in sys.modules.
         created_module = types.ModuleType(self.module_name)
         sys.modules[self.module_name] = created_module
-        with util.module_to_load(self.module_name) as module:
+        with self.util.module_to_load(self.module_name) as module:
             self.assertIs(module, created_module)
 
     def test_reload_failed(self):
@@ -71,7 +75,7 @@
         created_module = types.ModuleType(self.module_name)
         sys.modules[self.module_name] = created_module
         try:
-            with util.module_to_load(self.module_name) as module:
+            with self.util.module_to_load(self.module_name) as module:
                 raise Exception
         except Exception:
             self.assertIn(self.module_name, sys.modules)
@@ -84,29 +88,33 @@
         created_module = types.ModuleType(self.module_name)
         created_module.__name__ = odd_name
         sys.modules[self.module_name] = created_module
-        with util.module_to_load(self.module_name) as module:
+        with self.util.module_to_load(self.module_name) as module:
             self.assertEqual(module.__name__, self.module_name)
         created_module.__name__ = odd_name
-        with util.module_to_load(self.module_name, reset_name=False) as module:
+        with self.util.module_to_load(self.module_name, reset_name=False) as module:
             self.assertEqual(module.__name__, odd_name)
 
+Frozen_ModuleToLoadTests, Source_ModuleToLoadTests = test_util.test_both(
+        ModuleToLoadTests,
+        util=[frozen_util, source_util])
 
-class ModuleForLoaderTests(unittest.TestCase):
+
+class ModuleForLoaderTests:
 
     """Tests for importlib.util.module_for_loader."""
 
-    @staticmethod
-    def module_for_loader(func):
+    @classmethod
+    def module_for_loader(cls, func):
         with warnings.catch_warnings():
             warnings.simplefilter('ignore', PendingDeprecationWarning)
-            return util.module_for_loader(func)
+            return cls.util.module_for_loader(func)
 
     def test_warning(self):
         # Should raise a PendingDeprecationWarning when used.
         with warnings.catch_warnings():
             warnings.simplefilter('error', PendingDeprecationWarning)
             with self.assertRaises(PendingDeprecationWarning):
-                func = util.module_for_loader(lambda x: x)
+                func = self.util.module_for_loader(lambda x: x)
 
     def return_module(self, name):
         fxn = self.module_for_loader(lambda self, module: module)
@@ -216,8 +224,11 @@
             self.assertIs(module.__loader__, loader)
             self.assertEqual(module.__package__, name)
 
+Frozen_ModuleForLoaderTests, Source_ModuleForLoaderTests = test_util.test_both(
+        ModuleForLoaderTests, util=[frozen_util, source_util])
 
-class SetPackageTests(unittest.TestCase):
+
+class SetPackageTests:
 
     """Tests for importlib.util.set_package."""
 
@@ -225,7 +236,7 @@
         """Verify the module has the expected value for __package__ after
         passing through set_package."""
         fxn = lambda: module
-        wrapped = util.set_package(fxn)
+        wrapped = self.util.set_package(fxn)
         wrapped()
         self.assertTrue(hasattr(module, '__package__'))
         self.assertEqual(expect, module.__package__)
@@ -266,12 +277,15 @@
 
     def test_decorator_attrs(self):
         def fxn(module): pass
-        wrapped = util.set_package(fxn)
+        wrapped = self.util.set_package(fxn)
         self.assertEqual(wrapped.__name__, fxn.__name__)
         self.assertEqual(wrapped.__qualname__, fxn.__qualname__)
 
+Frozen_SetPackageTests, Source_SetPackageTests = test_util.test_both(
+        SetPackageTests, util=[frozen_util, source_util])
 
-class SetLoaderTests(unittest.TestCase):
+
+class SetLoaderTests:
 
     """Tests importlib.util.set_loader()."""
 
@@ -301,56 +315,73 @@
         loader.module.__loader__ = 42
         self.assertEqual(42, loader.load_module('blah').__loader__)
 
+class Frozen_SetLoaderTests(SetLoaderTests, unittest.TestCase):
+    class DummyLoader:
+        @frozen_util.set_loader
+        def load_module(self, module):
+            return self.module
 
-class ResolveNameTests(unittest.TestCase):
+class Source_SetLoaderTests(SetLoaderTests, unittest.TestCase):
+    class DummyLoader:
+        @source_util.set_loader
+        def load_module(self, module):
+            return self.module
+
+
+class ResolveNameTests:
 
     """Tests importlib.util.resolve_name()."""
 
     def test_absolute(self):
         # bacon
-        self.assertEqual('bacon', util.resolve_name('bacon', None))
+        self.assertEqual('bacon', self.util.resolve_name('bacon', None))
 
     def test_aboslute_within_package(self):
         # bacon in spam
-        self.assertEqual('bacon', util.resolve_name('bacon', 'spam'))
+        self.assertEqual('bacon', self.util.resolve_name('bacon', 'spam'))
 
     def test_no_package(self):
         # .bacon in ''
         with self.assertRaises(ValueError):
-            util.resolve_name('.bacon', '')
+            self.util.resolve_name('.bacon', '')
 
     def test_in_package(self):
         # .bacon in spam
         self.assertEqual('spam.eggs.bacon',
-                         util.resolve_name('.bacon', 'spam.eggs'))
+                         self.util.resolve_name('.bacon', 'spam.eggs'))
 
     def test_other_package(self):
         # ..bacon in spam.bacon
         self.assertEqual('spam.bacon',
-                         util.resolve_name('..bacon', 'spam.eggs'))
+                         self.util.resolve_name('..bacon', 'spam.eggs'))
 
     def test_escape(self):
         # ..bacon in spam
         with self.assertRaises(ValueError):
-            util.resolve_name('..bacon', 'spam')
+            self.util.resolve_name('..bacon', 'spam')
+
+Frozen_ResolveNameTests, Source_ResolveNameTests = test_util.test_both(
+        ResolveNameTests,
+        util=[frozen_util, source_util])
 
 
-class MagicNumberTests(unittest.TestCase):
+class MagicNumberTests:
 
     def test_length(self):
         # Should be 4 bytes.
-        self.assertEqual(len(util.MAGIC_NUMBER), 4)
+        self.assertEqual(len(self.util.MAGIC_NUMBER), 4)
 
     def test_incorporates_rn(self):
         # The magic number uses \r\n to come out wrong when splitting on lines.
-        self.assertTrue(util.MAGIC_NUMBER.endswith(b'\r\n'))
+        self.assertTrue(self.util.MAGIC_NUMBER.endswith(b'\r\n'))
+
+Frozen_MagicNumberTests, Source_MagicNumberTests = test_util.test_both(
+        MagicNumberTests, util=[frozen_util, source_util])
 
 
-class PEP3147Tests(unittest.TestCase):
-    """Tests of PEP 3147-related functions:
-    cache_from_source and source_from_cache.
+class PEP3147Tests:
 
-    """
+    """Tests of PEP 3147-related functions: cache_from_source and source_from_cache."""
 
     tag = sys.implementation.cache_tag
 
@@ -362,20 +393,20 @@
         path = os.path.join('foo', 'bar', 'baz', 'qux.py')
         expect = os.path.join('foo', 'bar', 'baz', '__pycache__',
                               'qux.{}.pyc'.format(self.tag))
-        self.assertEqual(util.cache_from_source(path, True), expect)
+        self.assertEqual(self.util.cache_from_source(path, True), expect)
 
     def test_cache_from_source_no_cache_tag(self):
         # No cache tag means NotImplementedError.
         with support.swap_attr(sys.implementation, 'cache_tag', None):
             with self.assertRaises(NotImplementedError):
-                util.cache_from_source('whatever.py')
+                self.util.cache_from_source('whatever.py')
 
     def test_cache_from_source_no_dot(self):
         # Directory with a dot, filename without dot.
         path = os.path.join('foo.bar', 'file')
         expect = os.path.join('foo.bar', '__pycache__',
                               'file{}.pyc'.format(self.tag))
-        self.assertEqual(util.cache_from_source(path, True), expect)
+        self.assertEqual(self.util.cache_from_source(path, True), expect)
 
     def test_cache_from_source_optimized(self):
         # Given the path to a .py file, return the path to its PEP 3147
@@ -383,12 +414,12 @@
         path = os.path.join('foo', 'bar', 'baz', 'qux.py')
         expect = os.path.join('foo', 'bar', 'baz', '__pycache__',
                               'qux.{}.pyo'.format(self.tag))
-        self.assertEqual(util.cache_from_source(path, False), expect)
+        self.assertEqual(self.util.cache_from_source(path, False), expect)
 
     def test_cache_from_source_cwd(self):
         path = 'foo.py'
         expect = os.path.join('__pycache__', 'foo.{}.pyc'.format(self.tag))
-        self.assertEqual(util.cache_from_source(path, True), expect)
+        self.assertEqual(self.util.cache_from_source(path, True), expect)
 
     def test_cache_from_source_override(self):
         # When debug_override is not None, it can be any true-ish or false-ish
@@ -396,22 +427,22 @@
         path = os.path.join('foo', 'bar', 'baz.py')
         partial_expect = os.path.join('foo', 'bar', '__pycache__',
                                       'baz.{}.py'.format(self.tag))
-        self.assertEqual(util.cache_from_source(path, []), partial_expect + 'o')
-        self.assertEqual(util.cache_from_source(path, [17]),
+        self.assertEqual(self.util.cache_from_source(path, []), partial_expect + 'o')
+        self.assertEqual(self.util.cache_from_source(path, [17]),
                          partial_expect + 'c')
         # However if the bool-ishness can't be determined, the exception
         # propagates.
         class Bearish:
             def __bool__(self): raise RuntimeError
         with self.assertRaises(RuntimeError):
-            util.cache_from_source('/foo/bar/baz.py', Bearish())
+            self.util.cache_from_source('/foo/bar/baz.py', Bearish())
 
     @unittest.skipUnless(os.sep == '\\' and os.altsep == '/',
                      'test meaningful only where os.altsep is defined')
     def test_sep_altsep_and_sep_cache_from_source(self):
         # Windows path and PEP 3147 where sep is right of altsep.
         self.assertEqual(
-            util.cache_from_source('\\foo\\bar\\baz/qux.py', True),
+            self.util.cache_from_source('\\foo\\bar\\baz/qux.py', True),
             '\\foo\\bar\\baz\\__pycache__\\qux.{}.pyc'.format(self.tag))
 
     @unittest.skipUnless(sys.implementation.cache_tag is not None,
@@ -423,43 +454,47 @@
         path = os.path.join('foo', 'bar', 'baz', '__pycache__',
                             'qux.{}.pyc'.format(self.tag))
         expect = os.path.join('foo', 'bar', 'baz', 'qux.py')
-        self.assertEqual(util.source_from_cache(path), expect)
+        self.assertEqual(self.util.source_from_cache(path), expect)
 
     def test_source_from_cache_no_cache_tag(self):
         # If sys.implementation.cache_tag is None, raise NotImplementedError.
         path = os.path.join('blah', '__pycache__', 'whatever.pyc')
         with support.swap_attr(sys.implementation, 'cache_tag', None):
             with self.assertRaises(NotImplementedError):
-                util.source_from_cache(path)
+                self.util.source_from_cache(path)
 
     def test_source_from_cache_bad_path(self):
         # When the path to a pyc file is not in PEP 3147 format, a ValueError
         # is raised.
         self.assertRaises(
-            ValueError, util.source_from_cache, '/foo/bar/bazqux.pyc')
+            ValueError, self.util.source_from_cache, '/foo/bar/bazqux.pyc')
 
     def test_source_from_cache_no_slash(self):
         # No slashes at all in path -> ValueError
         self.assertRaises(
-            ValueError, util.source_from_cache, 'foo.cpython-32.pyc')
+            ValueError, self.util.source_from_cache, 'foo.cpython-32.pyc')
 
     def test_source_from_cache_too_few_dots(self):
         # Too few dots in final path component -> ValueError
         self.assertRaises(
-            ValueError, util.source_from_cache, '__pycache__/foo.pyc')
+            ValueError, self.util.source_from_cache, '__pycache__/foo.pyc')
 
     def test_source_from_cache_too_many_dots(self):
         # Too many dots in final path component -> ValueError
         self.assertRaises(
-            ValueError, util.source_from_cache,
+            ValueError, self.util.source_from_cache,
             '__pycache__/foo.cpython-32.foo.pyc')
 
     def test_source_from_cache_no__pycache__(self):
         # Another problem with the path -> ValueError
         self.assertRaises(
-            ValueError, util.source_from_cache,
+            ValueError, self.util.source_from_cache,
             '/foo/bar/foo.cpython-32.foo.pyc')
 
+Frozen_PEP3147Tests, Source_PEP3147Tests = test_util.test_both(
+        PEP3147Tests,
+        util=[frozen_util, source_util])
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_importlib/util.py b/Lib/test/test_importlib/util.py
index f97ca72..cb08ce6 100644
--- a/Lib/test/test_importlib/util.py
+++ b/Lib/test/test_importlib/util.py
@@ -6,6 +6,26 @@
 import types
 
 
+def import_importlib(module_name):
+    """Import a module from importlib both w/ and w/o _frozen_importlib."""
+    fresh = ('importlib',) if '.' in module_name else ()
+    frozen = support.import_fresh_module(module_name)
+    source = support.import_fresh_module(module_name, fresh=fresh,
+                                         blocked=('_frozen_importlib',))
+    return frozen, source
+
+
+def test_both(test_class, **kwargs):
+    frozen_tests = types.new_class('Frozen_'+test_class.__name__,
+                                   (test_class, unittest.TestCase))
+    source_tests = types.new_class('Source_'+test_class.__name__,
+                                   (test_class, unittest.TestCase))
+    for attr, (frozen_value, source_value) in kwargs.items():
+        setattr(frozen_tests, attr, frozen_value)
+        setattr(source_tests, attr, source_value)
+    return frozen_tests, source_tests
+
+
 CASE_INSENSITIVE_FS = True
 # Windows is the only OS that is *always* case-insensitive
 # (OS X *can* be case-sensitive).
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index fb5fe17..9d34904 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -126,7 +126,6 @@
     def test_get_slot_members(self):
         class C(object):
             __slots__ = ("a", "b")
-
         x = C()
         x.a = 42
         members = dict(inspect.getmembers(x))
@@ -469,13 +468,13 @@
     A broken data descriptor. See bug #1785.
     """
     def __get__(*args):
-        raise AssertionError("should not __get__ data descriptors")
+        raise AttributeError("broken data descriptor")
 
     def __set__(*args):
         raise RuntimeError
 
     def __getattr__(*args):
-        raise AssertionError("should not __getattr__ data descriptors")
+        raise AttributeError("broken data descriptor")
 
 
 class _BrokenMethodDescriptor(object):
@@ -483,10 +482,10 @@
     A broken method descriptor. See bug #1785.
     """
     def __get__(*args):
-        raise AssertionError("should not __get__ method descriptors")
+        raise AttributeError("broken method descriptor")
 
     def __getattr__(*args):
-        raise AssertionError("should not __getattr__ method descriptors")
+        raise AttributeError("broken method descriptor")
 
 
 # Helper for testing classify_class_attrs.
@@ -656,13 +655,87 @@
             if isinstance(builtin, type):
                 inspect.classify_class_attrs(builtin)
 
-    def test_classify_VirtualAttribute(self):
-        class VA:
+    def test_classify_DynamicClassAttribute(self):
+        class Meta(type):
+            def __getattr__(self, name):
+                if name == 'ham':
+                    return 'spam'
+                return super().__getattr__(name)
+        class VA(metaclass=Meta):
             @types.DynamicClassAttribute
             def ham(self):
                 return 'eggs'
-        should_find = inspect.Attribute('ham', 'data', VA, VA.__dict__['ham'])
-        self.assertIn(should_find, inspect.classify_class_attrs(VA))
+        should_find_dca = inspect.Attribute('ham', 'data', VA, VA.__dict__['ham'])
+        self.assertIn(should_find_dca, inspect.classify_class_attrs(VA))
+        should_find_ga = inspect.Attribute('ham', 'data', Meta, 'spam')
+        self.assertIn(should_find_ga, inspect.classify_class_attrs(VA))
+
+    def test_classify_metaclass_class_attribute(self):
+        class Meta(type):
+            fish = 'slap'
+            def __dir__(self):
+                return ['__class__', '__modules__', '__name__', 'fish']
+        class Class(metaclass=Meta):
+            pass
+        should_find = inspect.Attribute('fish', 'data', Meta, 'slap')
+        self.assertIn(should_find, inspect.classify_class_attrs(Class))
+
+    def test_classify_VirtualAttribute(self):
+        class Meta(type):
+            def __dir__(cls):
+                return ['__class__', '__module__', '__name__', 'BOOM']
+            def __getattr__(self, name):
+                if name =='BOOM':
+                    return 42
+                return super().__getattr(name)
+        class Class(metaclass=Meta):
+            pass
+        should_find = inspect.Attribute('BOOM', 'data', Meta, 42)
+        self.assertIn(should_find, inspect.classify_class_attrs(Class))
+
+    def test_classify_VirtualAttribute_multi_classes(self):
+        class Meta1(type):
+            def __dir__(cls):
+                return ['__class__', '__module__', '__name__', 'one']
+            def __getattr__(self, name):
+                if name =='one':
+                    return 1
+                return super().__getattr__(name)
+        class Meta2(type):
+            def __dir__(cls):
+                return ['__class__', '__module__', '__name__', 'two']
+            def __getattr__(self, name):
+                if name =='two':
+                    return 2
+                return super().__getattr__(name)
+        class Meta3(Meta1, Meta2):
+            def __dir__(cls):
+                return list(sorted(set(['__class__', '__module__', '__name__', 'three'] +
+                    Meta1.__dir__(cls) + Meta2.__dir__(cls))))
+            def __getattr__(self, name):
+                if name =='three':
+                    return 3
+                return super().__getattr__(name)
+        class Class1(metaclass=Meta1):
+            pass
+        class Class2(Class1, metaclass=Meta3):
+            pass
+
+        should_find1 = inspect.Attribute('one', 'data', Meta1, 1)
+        should_find2 = inspect.Attribute('two', 'data', Meta2, 2)
+        should_find3 = inspect.Attribute('three', 'data', Meta3, 3)
+        cca = inspect.classify_class_attrs(Class2)
+        for sf in (should_find1, should_find2, should_find3):
+            self.assertIn(sf, cca)
+
+    def test_classify_class_attrs_with_buggy_dir(self):
+        class M(type):
+            def __dir__(cls):
+                return ['__class__', '__name__', 'missing']
+        class C(metaclass=M):
+            pass
+        attrs = [a[0] for a in inspect.classify_class_attrs(C)]
+        self.assertNotIn('missing', attrs)
 
     def test_getmembers_descriptors(self):
         class A(object):
@@ -708,11 +781,26 @@
         self.assertIn(('f', b.f), inspect.getmembers(b, inspect.ismethod))
 
     def test_getmembers_VirtualAttribute(self):
-        class A:
+        class M(type):
+            def __getattr__(cls, name):
+                if name == 'eggs':
+                    return 'scrambled'
+                return super().__getattr__(name)
+        class A(metaclass=M):
             @types.DynamicClassAttribute
             def eggs(self):
                 return 'spam'
-        self.assertIn(('eggs', A.__dict__['eggs']), inspect.getmembers(A))
+        self.assertIn(('eggs', 'scrambled'), inspect.getmembers(A))
+        self.assertIn(('eggs', 'spam'), inspect.getmembers(A()))
+
+    def test_getmembers_with_buggy_dir(self):
+        class M(type):
+            def __dir__(cls):
+                return ['__class__', '__name__', 'missing']
+        class C(metaclass=M):
+            pass
+        attrs = [a[0] for a in inspect.getmembers(C)]
+        self.assertNotIn('missing', attrs)
 
 
 _global_ref = object()
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
index 99c54f1..f3b1565 100644
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -1319,6 +1319,14 @@
         self.assertEqual(True, ipaddress.ip_network(
                 '127.42.0.0/16').is_loopback)
         self.assertEqual(False, ipaddress.ip_network('128.0.0.0').is_loopback)
+        self.assertEqual(False,
+                         ipaddress.ip_network('100.64.0.0/10').is_private)
+        self.assertEqual(False, ipaddress.ip_network('100.64.0.0/10').is_global)
+
+        self.assertEqual(True,
+                         ipaddress.ip_network('192.0.2.128/25').is_private)
+        self.assertEqual(True,
+                         ipaddress.ip_network('192.0.3.0/24').is_global)
 
         # test addresses
         self.assertEqual(True, ipaddress.ip_address('0.0.0.0').is_unspecified)
@@ -1384,6 +1392,10 @@
         self.assertEqual(False, ipaddress.ip_network('::1').is_unspecified)
         self.assertEqual(False, ipaddress.ip_network('::/127').is_unspecified)
 
+        self.assertEqual(True,
+                         ipaddress.ip_network('2001::1/128').is_private)
+        self.assertEqual(True,
+                         ipaddress.ip_network('200::1/128').is_global)
         # test addresses
         self.assertEqual(True, ipaddress.ip_address('ffff::').is_multicast)
         self.assertEqual(True, ipaddress.ip_address(2**128 - 1).is_multicast)
diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py
index d23e285..35c02de 100644
--- a/Lib/test/test_json/test_decode.py
+++ b/Lib/test/test_json/test_decode.py
@@ -1,5 +1,5 @@
 import decimal
-from io import StringIO
+from io import StringIO, BytesIO
 from collections import OrderedDict
 from test.test_json import PyTest, CTest
 
@@ -70,5 +70,26 @@
         msg = 'escape'
         self.assertRaisesRegex(ValueError, msg, self.loads, s)
 
+    def test_invalid_input_type(self):
+        msg = 'the JSON object must be str'
+        for value in [1, 3.14, b'bytes', b'\xff\x00', [], {}, None]:
+            self.assertRaisesRegex(TypeError, msg, self.loads, value)
+        with self.assertRaisesRegex(TypeError, msg):
+            self.json.load(BytesIO(b'[1,2,3]'))
+
+    def test_string_with_utf8_bom(self):
+        # see #18958
+        bom_json = "[1,2,3]".encode('utf-8-sig').decode('utf-8')
+        with self.assertRaises(ValueError) as cm:
+            self.loads(bom_json)
+        self.assertIn('BOM', str(cm.exception))
+        with self.assertRaises(ValueError) as cm:
+            self.json.load(StringIO(bom_json))
+        self.assertIn('BOM', str(cm.exception))
+        # make sure that the BOM is not detected in the middle of a string
+        bom_in_str = '"{}"'.format(''.encode('utf-8-sig').decode('utf-8'))
+        self.assertEqual(self.loads(bom_in_str), '\ufeff')
+        self.assertEqual(self.json.load(StringIO(bom_in_str)), '\ufeff')
+
 class TestPyDecode(TestDecode, PyTest): pass
 class TestCDecode(TestDecode, CTest): pass
diff --git a/Lib/test/test_lzma.py b/Lib/test/test_lzma.py
index 20d8582..26d19da 100644
--- a/Lib/test/test_lzma.py
+++ b/Lib/test/test_lzma.py
@@ -1,5 +1,6 @@
 from io import BytesIO, UnsupportedOperation
 import os
+import pickle
 import random
 import unittest
 
@@ -216,6 +217,14 @@
         finally:
             input = cdata = ddata = None
 
+    # Pickling raises an exception; there's no way to serialize an lzma_stream.
+
+    def test_pickle(self):
+        with self.assertRaises(TypeError):
+            pickle.dumps(LZMACompressor())
+        with self.assertRaises(TypeError):
+            pickle.dumps(LZMADecompressor())
+
 
 class CompressDecompressFunctionTestCase(unittest.TestCase):
 
@@ -362,6 +371,8 @@
             pass
         with LZMAFile(BytesIO(), "w") as f:
             pass
+        with LZMAFile(BytesIO(), "x") as f:
+            pass
         with LZMAFile(BytesIO(), "a") as f:
             pass
 
@@ -389,13 +400,29 @@
             with LZMAFile(TESTFN, "ab"):
                 pass
 
+    def test_init_with_x_mode(self):
+        self.addCleanup(unlink, TESTFN)
+        for mode in ("x", "xb"):
+            unlink(TESTFN)
+            with LZMAFile(TESTFN, mode):
+                pass
+            with self.assertRaises(FileExistsError):
+                with LZMAFile(TESTFN, mode):
+                    pass
+
     def test_init_bad_mode(self):
         with self.assertRaises(ValueError):
             LZMAFile(BytesIO(COMPRESSED_XZ), (3, "x"))
         with self.assertRaises(ValueError):
             LZMAFile(BytesIO(COMPRESSED_XZ), "")
         with self.assertRaises(ValueError):
-            LZMAFile(BytesIO(COMPRESSED_XZ), "x")
+            LZMAFile(BytesIO(COMPRESSED_XZ), "xt")
+        with self.assertRaises(ValueError):
+            LZMAFile(BytesIO(COMPRESSED_XZ), "x+")
+        with self.assertRaises(ValueError):
+            LZMAFile(BytesIO(COMPRESSED_XZ), "rx")
+        with self.assertRaises(ValueError):
+            LZMAFile(BytesIO(COMPRESSED_XZ), "wx")
         with self.assertRaises(ValueError):
             LZMAFile(BytesIO(COMPRESSED_XZ), "rt")
         with self.assertRaises(ValueError):
@@ -1022,8 +1049,6 @@
         with self.assertRaises(ValueError):
             lzma.open(TESTFN, "")
         with self.assertRaises(ValueError):
-            lzma.open(TESTFN, "x")
-        with self.assertRaises(ValueError):
             lzma.open(TESTFN, "rbt")
         with self.assertRaises(ValueError):
             lzma.open(TESTFN, "rb", encoding="utf-8")
@@ -1072,6 +1097,16 @@
             with lzma.open(bio, "rt", newline="\r") as f:
                 self.assertEqual(f.readlines(), [text])
 
+    def test_x_mode(self):
+        self.addCleanup(unlink, TESTFN)
+        for mode in ("x", "xb", "xt"):
+            unlink(TESTFN)
+            with lzma.open(TESTFN, mode):
+                pass
+            with self.assertRaises(FileExistsError):
+                with lzma.open(TESTFN, mode):
+                    pass
+
 
 class MiscellaneousTestCase(unittest.TestCase):
 
diff --git a/Lib/test/test_macurl2path.py b/Lib/test/test_macurl2path.py
new file mode 100644
index 0000000..3490d6d
--- /dev/null
+++ b/Lib/test/test_macurl2path.py
@@ -0,0 +1,31 @@
+import macurl2path
+import unittest
+
+class MacUrl2PathTestCase(unittest.TestCase):
+    def test_url2pathname(self):
+        self.assertEqual(":index.html", macurl2path.url2pathname("index.html"))
+        self.assertEqual(":bar:index.html", macurl2path.url2pathname("bar/index.html"))
+        self.assertEqual("foo:bar:index.html", macurl2path.url2pathname("/foo/bar/index.html"))
+        self.assertEqual("foo:bar", macurl2path.url2pathname("/foo/bar/"))
+        self.assertEqual("", macurl2path.url2pathname("/"))
+        self.assertRaises(RuntimeError, macurl2path.url2pathname, "http://foo.com")
+        self.assertEqual("index.html", macurl2path.url2pathname("///index.html"))
+        self.assertRaises(RuntimeError, macurl2path.url2pathname, "//index.html")
+        self.assertEqual(":index.html", macurl2path.url2pathname("./index.html"))
+        self.assertEqual(":index.html", macurl2path.url2pathname("foo/../index.html"))
+        self.assertEqual("::index.html", macurl2path.url2pathname("../index.html"))
+
+    def test_pathname2url(self):
+        self.assertEqual("drive", macurl2path.pathname2url("drive:"))
+        self.assertEqual("drive/dir", macurl2path.pathname2url("drive:dir:"))
+        self.assertEqual("drive/dir/file", macurl2path.pathname2url("drive:dir:file"))
+        self.assertEqual("drive/file", macurl2path.pathname2url("drive:file"))
+        self.assertEqual("file", macurl2path.pathname2url("file"))
+        self.assertEqual("file", macurl2path.pathname2url(":file"))
+        self.assertEqual("dir", macurl2path.pathname2url(":dir:"))
+        self.assertEqual("dir/file", macurl2path.pathname2url(":dir:file"))
+        self.assertRaises(RuntimeError, macurl2path.pathname2url, "/")
+        self.assertEqual("dir/../file", macurl2path.pathname2url("dir::file"))
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index 6c679ce..78e2a30 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -868,10 +868,10 @@
         for msg in self._box:
             pass
 
+    @unittest.skipUnless(hasattr(os, 'umask'), 'test needs os.umask()')
+    @unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
     def test_file_permissions(self):
         # Verify that message files are created without execute permissions
-        if not hasattr(os, "stat") or not hasattr(os, "umask"):
-            return
         msg = mailbox.MaildirMessage(self._template % 0)
         orig_umask = os.umask(0)
         try:
@@ -882,12 +882,11 @@
         mode = os.stat(path).st_mode
         self.assertFalse(mode & 0o111)
 
+    @unittest.skipUnless(hasattr(os, 'umask'), 'test needs os.umask()')
+    @unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
     def test_folder_file_perms(self):
         # From bug #3228, we want to verify that the file created inside a Maildir
         # subfolder isn't marked as executable.
-        if not hasattr(os, "stat") or not hasattr(os, "umask"):
-            return
-
         orig_umask = os.umask(0)
         try:
             subfolder = self._box.add_folder('subfolder')
@@ -1097,24 +1096,25 @@
 
     _factory = lambda self, path, factory=None: mailbox.mbox(path, factory)
 
+    @unittest.skipUnless(hasattr(os, 'umask'), 'test needs os.umask()')
+    @unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
     def test_file_perms(self):
         # From bug #3228, we want to verify that the mailbox file isn't executable,
         # even if the umask is set to something that would leave executable bits set.
         # We only run this test on platforms that support umask.
-        if hasattr(os, 'umask') and hasattr(os, 'stat'):
-            try:
-                old_umask = os.umask(0o077)
-                self._box.close()
-                os.unlink(self._path)
-                self._box = mailbox.mbox(self._path, create=True)
-                self._box.add('')
-                self._box.close()
-            finally:
-                os.umask(old_umask)
+        try:
+            old_umask = os.umask(0o077)
+            self._box.close()
+            os.unlink(self._path)
+            self._box = mailbox.mbox(self._path, create=True)
+            self._box.add('')
+            self._box.close()
+        finally:
+            os.umask(old_umask)
 
-            st = os.stat(self._path)
-            perms = st.st_mode
-            self.assertFalse((perms & 0o111)) # Execute bits should all be off.
+        st = os.stat(self._path)
+        perms = st.st_mode
+        self.assertFalse((perms & 0o111)) # Execute bits should all be off.
 
     def test_terminating_newline(self):
         message = email.message.Message()
diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py
index ab06237..255eb87 100644
--- a/Lib/test/test_marshal.py
+++ b/Lib/test/test_marshal.py
@@ -262,11 +262,11 @@
 
     def test_bad_reader(self):
         class BadReader(io.BytesIO):
-            def read(self, n=-1):
-                b = super().read(n)
+            def readinto(self, buf):
+                n = super().readinto(buf)
                 if n is not None and n > 4:
-                    b += b' ' * 10**6
-                return b
+                    n += 10**6
+                return n
         for value in (1.0, 1j, b'0123456789', '0123456789'):
             self.assertRaises(ValueError, marshal.load,
                               BadReader(marshal.dumps(value)))
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py
index 715003a..48f84ba 100644
--- a/Lib/test/test_math.py
+++ b/Lib/test/test_math.py
@@ -980,38 +980,37 @@
     # still fails this part of the test on some platforms.  For now, we only
     # *run* test_exceptions() in verbose mode, so that this isn't normally
     # tested.
+    @unittest.skipUnless(verbose, 'requires verbose mode')
+    def test_exceptions(self):
+        try:
+            x = math.exp(-1000000000)
+        except:
+            # mathmodule.c is failing to weed out underflows from libm, or
+            # we've got an fp format with huge dynamic range
+            self.fail("underflowing exp() should not have raised "
+                        "an exception")
+        if x != 0:
+            self.fail("underflowing exp() should have returned 0")
 
-    if verbose:
-        def test_exceptions(self):
-            try:
-                x = math.exp(-1000000000)
-            except:
-                # mathmodule.c is failing to weed out underflows from libm, or
-                # we've got an fp format with huge dynamic range
-                self.fail("underflowing exp() should not have raised "
-                          "an exception")
-            if x != 0:
-                self.fail("underflowing exp() should have returned 0")
+        # If this fails, probably using a strict IEEE-754 conforming libm, and x
+        # is +Inf afterwards.  But Python wants overflows detected by default.
+        try:
+            x = math.exp(1000000000)
+        except OverflowError:
+            pass
+        else:
+            self.fail("overflowing exp() didn't trigger OverflowError")
 
-            # If this fails, probably using a strict IEEE-754 conforming libm, and x
-            # is +Inf afterwards.  But Python wants overflows detected by default.
-            try:
-                x = math.exp(1000000000)
-            except OverflowError:
-                pass
-            else:
-                self.fail("overflowing exp() didn't trigger OverflowError")
-
-            # If this fails, it could be a puzzle.  One odd possibility is that
-            # mathmodule.c's macros are getting confused while comparing
-            # Inf (HUGE_VAL) to a NaN, and artificially setting errno to ERANGE
-            # as a result (and so raising OverflowError instead).
-            try:
-                x = math.sqrt(-1.0)
-            except ValueError:
-                pass
-            else:
-                self.fail("sqrt(-1) didn't raise ValueError")
+        # If this fails, it could be a puzzle.  One odd possibility is that
+        # mathmodule.c's macros are getting confused while comparing
+        # Inf (HUGE_VAL) to a NaN, and artificially setting errno to ERANGE
+        # as a result (and so raising OverflowError instead).
+        try:
+            x = math.sqrt(-1.0)
+        except ValueError:
+            pass
+        else:
+            self.fail("sqrt(-1) didn't raise ValueError")
 
     @requires_IEEE_754
     def test_testfile(self):
diff --git a/Lib/test/test_mimetypes.py b/Lib/test/test_mimetypes.py
index 593fdb0..0b53032 100644
--- a/Lib/test/test_mimetypes.py
+++ b/Lib/test/test_mimetypes.py
@@ -98,7 +98,8 @@
         # Use file types that should *always* exist:
         eq = self.assertEqual
         eq(self.db.guess_type("foo.txt"), ("text/plain", None))
-
+        eq(self.db.guess_type("image.jpg"), ("image/jpeg", None))
+        eq(self.db.guess_type("image.png"), ("image/png", None))
 
 def test_main():
     support.run_unittest(MimeTypesTestCase,
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index b1cc973..6ca5e1b 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -315,26 +315,25 @@
         mf.close()
         f.close()
 
+    @unittest.skipUnless(hasattr(os, "stat"), "needs os.stat()")
     def test_entire_file(self):
         # test mapping of entire file by passing 0 for map length
-        if hasattr(os, "stat"):
-            f = open(TESTFN, "wb+")
+        f = open(TESTFN, "wb+")
 
-            f.write(2**16 * b'm') # Arbitrary character
-            f.close()
+        f.write(2**16 * b'm') # Arbitrary character
+        f.close()
 
-            f = open(TESTFN, "rb+")
-            mf = mmap.mmap(f.fileno(), 0)
-            self.assertEqual(len(mf), 2**16, "Map size should equal file size.")
-            self.assertEqual(mf.read(2**16), 2**16 * b"m")
-            mf.close()
-            f.close()
+        f = open(TESTFN, "rb+")
+        mf = mmap.mmap(f.fileno(), 0)
+        self.assertEqual(len(mf), 2**16, "Map size should equal file size.")
+        self.assertEqual(mf.read(2**16), 2**16 * b"m")
+        mf.close()
+        f.close()
 
+    @unittest.skipUnless(hasattr(os, "stat"), "needs os.stat()")
     def test_length_0_offset(self):
         # Issue #10916: test mapping of remainder of file by passing 0 for
         # map length with an offset doesn't cause a segfault.
-        if not hasattr(os, "stat"):
-            self.skipTest("needs os.stat")
         # NOTE: allocation granularity is currently 65536 under Win64,
         # and therefore the minimum offset alignment.
         with open(TESTFN, "wb") as f:
@@ -344,12 +343,10 @@
             with mmap.mmap(f.fileno(), 0, offset=65536, access=mmap.ACCESS_READ) as mf:
                 self.assertRaises(IndexError, mf.__getitem__, 80000)
 
+    @unittest.skipUnless(hasattr(os, "stat"), "needs os.stat()")
     def test_length_0_large_offset(self):
         # Issue #10959: test mapping of a file by passing 0 for
         # map length with a large offset doesn't cause a segfault.
-        if not hasattr(os, "stat"):
-            self.skipTest("needs os.stat")
-
         with open(TESTFN, "wb") as f:
             f.write(115699 * b'm') # Arbitrary character
 
@@ -561,9 +558,8 @@
                 return mmap.mmap.__new__(klass, -1, *args, **kwargs)
         anon_mmap(PAGESIZE)
 
+    @unittest.skipUnless(hasattr(mmap, 'PROT_READ'), "needs mmap.PROT_READ")
     def test_prot_readonly(self):
-        if not hasattr(mmap, 'PROT_READ'):
-            return
         mapsize = 10
         with open(TESTFN, "wb") as fp:
             fp.write(b"a"*mapsize)
@@ -617,67 +613,69 @@
             self.assertEqual(m.read_byte(), b)
             m.close()
 
-    if os.name == 'nt':
-        def test_tagname(self):
-            data1 = b"0123456789"
-            data2 = b"abcdefghij"
-            assert len(data1) == len(data2)
+    @unittest.skipUnless(os.name == 'nt', 'requires Windows')
+    def test_tagname(self):
+        data1 = b"0123456789"
+        data2 = b"abcdefghij"
+        assert len(data1) == len(data2)
 
-            # Test same tag
-            m1 = mmap.mmap(-1, len(data1), tagname="foo")
-            m1[:] = data1
-            m2 = mmap.mmap(-1, len(data2), tagname="foo")
-            m2[:] = data2
-            self.assertEqual(m1[:], data2)
-            self.assertEqual(m2[:], data2)
-            m2.close()
-            m1.close()
+        # Test same tag
+        m1 = mmap.mmap(-1, len(data1), tagname="foo")
+        m1[:] = data1
+        m2 = mmap.mmap(-1, len(data2), tagname="foo")
+        m2[:] = data2
+        self.assertEqual(m1[:], data2)
+        self.assertEqual(m2[:], data2)
+        m2.close()
+        m1.close()
 
-            # Test different tag
-            m1 = mmap.mmap(-1, len(data1), tagname="foo")
-            m1[:] = data1
-            m2 = mmap.mmap(-1, len(data2), tagname="boo")
-            m2[:] = data2
-            self.assertEqual(m1[:], data1)
-            self.assertEqual(m2[:], data2)
-            m2.close()
-            m1.close()
+        # Test different tag
+        m1 = mmap.mmap(-1, len(data1), tagname="foo")
+        m1[:] = data1
+        m2 = mmap.mmap(-1, len(data2), tagname="boo")
+        m2[:] = data2
+        self.assertEqual(m1[:], data1)
+        self.assertEqual(m2[:], data2)
+        m2.close()
+        m1.close()
 
-        def test_crasher_on_windows(self):
-            # Should not crash (Issue 1733986)
-            m = mmap.mmap(-1, 1000, tagname="foo")
-            try:
-                mmap.mmap(-1, 5000, tagname="foo")[:] # same tagname, but larger size
-            except:
-                pass
-            m.close()
+    @unittest.skipUnless(os.name == 'nt', 'requires Windows')
+    def test_crasher_on_windows(self):
+        # Should not crash (Issue 1733986)
+        m = mmap.mmap(-1, 1000, tagname="foo")
+        try:
+            mmap.mmap(-1, 5000, tagname="foo")[:] # same tagname, but larger size
+        except:
+            pass
+        m.close()
 
-            # Should not crash (Issue 5385)
-            with open(TESTFN, "wb") as fp:
-                fp.write(b"x"*10)
-            f = open(TESTFN, "r+b")
-            m = mmap.mmap(f.fileno(), 0)
-            f.close()
-            try:
-                m.resize(0) # will raise OSError
-            except:
-                pass
-            try:
-                m[:]
-            except:
-                pass
-            m.close()
+        # Should not crash (Issue 5385)
+        with open(TESTFN, "wb") as fp:
+            fp.write(b"x"*10)
+        f = open(TESTFN, "r+b")
+        m = mmap.mmap(f.fileno(), 0)
+        f.close()
+        try:
+            m.resize(0) # will raise OSError
+        except:
+            pass
+        try:
+            m[:]
+        except:
+            pass
+        m.close()
 
-        def test_invalid_descriptor(self):
-            # socket file descriptors are valid, but out of range
-            # for _get_osfhandle, causing a crash when validating the
-            # parameters to _get_osfhandle.
-            s = socket.socket()
-            try:
-                with self.assertRaises(OSError):
-                    m = mmap.mmap(s.fileno(), 10)
-            finally:
-                s.close()
+    @unittest.skipUnless(os.name == 'nt', 'requires Windows')
+    def test_invalid_descriptor(self):
+        # socket file descriptors are valid, but out of range
+        # for _get_osfhandle, causing a crash when validating the
+        # parameters to _get_osfhandle.
+        s = socket.socket()
+        try:
+            with self.assertRaises(OSError):
+                m = mmap.mmap(s.fileno(), 10)
+        finally:
+            s.close()
 
     def test_context_manager(self):
         with mmap.mmap(-1, 10) as m:
diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py
index 7cf497a..71a4ec0 100644
--- a/Lib/test/test_nntplib.py
+++ b/Lib/test/test_nntplib.py
@@ -6,10 +6,12 @@
 import functools
 import contextlib
 from test import support
-from nntplib import NNTP, GroupInfo, _have_ssl
+from nntplib import NNTP, GroupInfo
 import nntplib
-if _have_ssl:
+try:
     import ssl
+except ImportError:
+    ssl = None
 
 TIMEOUT = 30
 
@@ -199,23 +201,23 @@
         resp, caps = self.server.capabilities()
         _check_caps(caps)
 
-    if _have_ssl:
-        def test_starttls(self):
-            file = self.server.file
-            sock = self.server.sock
-            try:
-                self.server.starttls()
-            except nntplib.NNTPPermanentError:
-                self.skipTest("STARTTLS not supported by server.")
-            else:
-                # Check that the socket and internal pseudo-file really were
-                # changed.
-                self.assertNotEqual(file, self.server.file)
-                self.assertNotEqual(sock, self.server.sock)
-                # Check that the new socket really is an SSL one
-                self.assertIsInstance(self.server.sock, ssl.SSLSocket)
-                # Check that trying starttls when it's already active fails.
-                self.assertRaises(ValueError, self.server.starttls)
+    @unittest.skipUnless(ssl, 'requires SSL support')
+    def test_starttls(self):
+        file = self.server.file
+        sock = self.server.sock
+        try:
+            self.server.starttls()
+        except nntplib.NNTPPermanentError:
+            self.skipTest("STARTTLS not supported by server.")
+        else:
+            # Check that the socket and internal pseudo-file really were
+            # changed.
+            self.assertNotEqual(file, self.server.file)
+            self.assertNotEqual(sock, self.server.sock)
+            # Check that the new socket really is an SSL one
+            self.assertIsInstance(self.server.sock, ssl.SSLSocket)
+            # Check that trying starttls when it's already active fails.
+            self.assertRaises(ValueError, self.server.starttls)
 
     def test_zlogin(self):
         # This test must be the penultimate because further commands will be
@@ -300,25 +302,24 @@
         if cls.server is not None:
             cls.server.quit()
 
+@unittest.skipUnless(ssl, 'requires SSL support')
+class NetworkedNNTP_SSLTests(NetworkedNNTPTests):
 
-if _have_ssl:
-    class NetworkedNNTP_SSLTests(NetworkedNNTPTests):
+    # Technical limits for this public NNTP server (see http://www.aioe.org):
+    # "Only two concurrent connections per IP address are allowed and
+    # 400 connections per day are accepted from each IP address."
 
-        # Technical limits for this public NNTP server (see http://www.aioe.org):
-        # "Only two concurrent connections per IP address are allowed and
-        # 400 connections per day are accepted from each IP address."
+    NNTP_HOST = 'nntp.aioe.org'
+    GROUP_NAME = 'comp.lang.python'
+    GROUP_PAT = 'comp.lang.*'
 
-        NNTP_HOST = 'nntp.aioe.org'
-        GROUP_NAME = 'comp.lang.python'
-        GROUP_PAT = 'comp.lang.*'
+    NNTP_CLASS = getattr(nntplib, 'NNTP_SSL', None)
 
-        NNTP_CLASS = nntplib.NNTP_SSL
+    # Disabled as it produces too much data
+    test_list = None
 
-        # Disabled as it produces too much data
-        test_list = None
-
-        # Disabled as the connection will already be encrypted.
-        test_starttls = None
+    # Disabled as the connection will already be encrypted.
+    test_starttls = None
 
 
 #
@@ -584,6 +585,11 @@
                 <a4929a40-6328-491a-aaaf-cb79ed7309a2@q2g2000vbk.googlegroups.com>
                 <f30c0419-f549-4218-848f-d7d0131da931@y3g2000vbm.googlegroups.com>
                 .""")
+        elif (group == 'comp.lang.python' and
+              date_str in ('20100101', '100101') and
+              time_str == '090000'):
+            self.push_lit('too long line' * 3000 +
+                          '\n.')
         else:
             self.push_lit("""\
                 230 An empty list of newsarticles follows
@@ -1179,6 +1185,11 @@
         self.assertEqual(cm.exception.response,
                          "435 Article not wanted")
 
+    def test_too_long_lines(self):
+        dt = datetime.datetime(2010, 1, 1, 9, 0, 0)
+        self.assertRaises(nntplib.NNTPDataError,
+                          self.server.newnews, "comp.lang.python", dt)
+
 
 class NNTPv1Tests(NNTPv1v2TestsMixin, MockedNNTPTestsMixin, unittest.TestCase):
     """Tests an NNTP v1 server (no capabilities)."""
@@ -1397,12 +1408,13 @@
         gives(2000, 6, 23, "000623", "000000")
         gives(2010, 6, 5, "100605", "000000")
 
+    @unittest.skipUnless(ssl, 'requires SSL support')
+    def test_ssl_support(self):
+        self.assertTrue(hasattr(nntplib, 'NNTP_SSL'))
 
 def test_main():
     tests = [MiscTests, NNTPv1Tests, NNTPv2Tests, CapsAfterLoginNNTPv2Tests,
-            SendReaderNNTPv2Tests, NetworkedNNTPTests]
-    if _have_ssl:
-        tests.append(NetworkedNNTP_SSLTests)
+            SendReaderNNTPv2Tests, NetworkedNNTPTests, NetworkedNNTP_SSLTests]
     support.run_unittest(*tests)
 
 
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 39b0e80..1ffa7da 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -26,6 +26,7 @@
 import codecs
 import decimal
 import fractions
+import pickle
 try:
     import threading
 except ImportError:
@@ -184,10 +185,8 @@
         os.unlink(self.fname)
         os.rmdir(support.TESTFN)
 
+    @unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
     def check_stat_attributes(self, fname):
-        if not hasattr(os, "stat"):
-            return
-
         result = os.stat(fname)
 
         # Make sure direct access works
@@ -264,16 +263,21 @@
             warnings.simplefilter("ignore", DeprecationWarning)
             self.check_stat_attributes(fname)
 
-    def test_statvfs_attributes(self):
-        if not hasattr(os, "statvfs"):
-            return
+    def test_stat_result_pickle(self):
+        result = os.stat(self.fname)
+        p = pickle.dumps(result)
+        self.assertIn(b'\x03cos\nstat_result\n', p)
+        unpickled = pickle.loads(p)
+        self.assertEqual(result, unpickled)
 
+    @unittest.skipUnless(hasattr(os, 'statvfs'), 'test needs os.statvfs()')
+    def test_statvfs_attributes(self):
         try:
             result = os.statvfs(self.fname)
         except OSError as e:
             # On AtheOS, glibc always returns ENOSYS
             if e.errno == errno.ENOSYS:
-                return
+                self.skipTest('os.statvfs() failed with ENOSYS')
 
         # Make sure direct access works
         self.assertEqual(result.f_bfree, result[3])
@@ -310,6 +314,21 @@
         except TypeError:
             pass
 
+    @unittest.skipUnless(hasattr(os, 'statvfs'),
+                         "need os.statvfs()")
+    def test_statvfs_result_pickle(self):
+        try:
+            result = os.statvfs(self.fname)
+        except OSError as e:
+            # On AtheOS, glibc always returns ENOSYS
+            if e.errno == errno.ENOSYS:
+                self.skipTest('os.statvfs() failed with ENOSYS')
+
+        p = pickle.dumps(result)
+        self.assertIn(b'\x03cos\nstatvfs_result\n', p)
+        unpickled = pickle.loads(p)
+        self.assertEqual(result, unpickled)
+
     def test_utime_dir(self):
         delta = 1000000
         st = os.stat(support.TESTFN)
@@ -456,10 +475,10 @@
                 os.close(dirfd)
         self._test_utime_subsecond(set_time)
 
-    # Restrict test to Win32, since there is no guarantee other
+    # Restrict tests to Win32, since there is no guarantee other
     # systems support centiseconds
-    if sys.platform == 'win32':
-        def get_file_system(path):
+    def get_file_system(path):
+        if sys.platform == 'win32':
             root = os.path.splitdrive(os.path.abspath(path))[0] + '\\'
             import ctypes
             kernel32 = ctypes.windll.kernel32
@@ -467,38 +486,45 @@
             if kernel32.GetVolumeInformationW(root, None, 0, None, None, None, buf, len(buf)):
                 return buf.value
 
-        if get_file_system(support.TESTFN) == "NTFS":
-            def test_1565150(self):
-                t1 = 1159195039.25
-                os.utime(self.fname, (t1, t1))
-                self.assertEqual(os.stat(self.fname).st_mtime, t1)
+    @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
+    @unittest.skipUnless(get_file_system(support.TESTFN) == "NTFS",
+                         "requires NTFS")
+    def test_1565150(self):
+        t1 = 1159195039.25
+        os.utime(self.fname, (t1, t1))
+        self.assertEqual(os.stat(self.fname).st_mtime, t1)
 
-            def test_large_time(self):
-                t1 = 5000000000 # some day in 2128
-                os.utime(self.fname, (t1, t1))
-                self.assertEqual(os.stat(self.fname).st_mtime, t1)
+    @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
+    @unittest.skipUnless(get_file_system(support.TESTFN) == "NTFS",
+                         "requires NTFS")
+    def test_large_time(self):
+        t1 = 5000000000 # some day in 2128
+        os.utime(self.fname, (t1, t1))
+        self.assertEqual(os.stat(self.fname).st_mtime, t1)
 
-        def test_1686475(self):
-            # Verify that an open file can be stat'ed
-            try:
-                os.stat(r"c:\pagefile.sys")
-            except FileNotFoundError:
-                pass # file does not exist; cannot run test
-            except OSError as e:
-                self.fail("Could not stat pagefile.sys")
+    @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
+    def test_1686475(self):
+        # Verify that an open file can be stat'ed
+        try:
+            os.stat(r"c:\pagefile.sys")
+        except FileNotFoundError:
+            pass # file does not exist; cannot run test
+        except OSError as e:
+            self.fail("Could not stat pagefile.sys")
 
-        @unittest.skipUnless(hasattr(os, "pipe"), "requires os.pipe()")
-        def test_15261(self):
-            # Verify that stat'ing a closed fd does not cause crash
-            r, w = os.pipe()
-            try:
-                os.stat(r)          # should not raise error
-            finally:
-                os.close(r)
-                os.close(w)
-            with self.assertRaises(OSError) as ctx:
-                os.stat(r)
-            self.assertEqual(ctx.exception.errno, errno.EBADF)
+    @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
+    @unittest.skipUnless(hasattr(os, "pipe"), "requires os.pipe()")
+    def test_15261(self):
+        # Verify that stat'ing a closed fd does not cause crash
+        r, w = os.pipe()
+        try:
+            os.stat(r)          # should not raise error
+        finally:
+            os.close(r)
+            os.close(w)
+        with self.assertRaises(OSError) as ctx:
+            os.stat(r)
+        self.assertEqual(ctx.exception.errno, errno.EBADF)
 
 from test import mapping_tests
 
@@ -1144,6 +1170,7 @@
             self._test_internal_execvpe(bytes)
 
 
+@unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
 class Win32ErrorTests(unittest.TestCase):
     def test_rename(self):
         self.assertRaises(OSError, os.rename, support.TESTFN, support.TESTFN+".bak")
@@ -1190,63 +1217,63 @@
             self.fail("%r didn't raise a OSError with a bad file descriptor"
                       % f)
 
+    @unittest.skipUnless(hasattr(os, 'isatty'), 'test needs os.isatty()')
     def test_isatty(self):
-        if hasattr(os, "isatty"):
-            self.assertEqual(os.isatty(support.make_bad_fd()), False)
+        self.assertEqual(os.isatty(support.make_bad_fd()), False)
 
+    @unittest.skipUnless(hasattr(os, 'closerange'), 'test needs os.closerange()')
     def test_closerange(self):
-        if hasattr(os, "closerange"):
-            fd = support.make_bad_fd()
-            # Make sure none of the descriptors we are about to close are
-            # currently valid (issue 6542).
-            for i in range(10):
-                try: os.fstat(fd+i)
-                except OSError:
-                    pass
-                else:
-                    break
-            if i < 2:
-                raise unittest.SkipTest(
-                    "Unable to acquire a range of invalid file descriptors")
-            self.assertEqual(os.closerange(fd, fd + i-1), None)
+        fd = support.make_bad_fd()
+        # Make sure none of the descriptors we are about to close are
+        # currently valid (issue 6542).
+        for i in range(10):
+            try: os.fstat(fd+i)
+            except OSError:
+                pass
+            else:
+                break
+        if i < 2:
+            raise unittest.SkipTest(
+                "Unable to acquire a range of invalid file descriptors")
+        self.assertEqual(os.closerange(fd, fd + i-1), None)
 
+    @unittest.skipUnless(hasattr(os, 'dup2'), 'test needs os.dup2()')
     def test_dup2(self):
-        if hasattr(os, "dup2"):
-            self.check(os.dup2, 20)
+        self.check(os.dup2, 20)
 
+    @unittest.skipUnless(hasattr(os, 'fchmod'), 'test needs os.fchmod()')
     def test_fchmod(self):
-        if hasattr(os, "fchmod"):
-            self.check(os.fchmod, 0)
+        self.check(os.fchmod, 0)
 
+    @unittest.skipUnless(hasattr(os, 'fchown'), 'test needs os.fchown()')
     def test_fchown(self):
-        if hasattr(os, "fchown"):
-            self.check(os.fchown, -1, -1)
+        self.check(os.fchown, -1, -1)
 
+    @unittest.skipUnless(hasattr(os, 'fpathconf'), 'test needs os.fpathconf()')
     def test_fpathconf(self):
-        if hasattr(os, "fpathconf"):
-            self.check(os.pathconf, "PC_NAME_MAX")
-            self.check(os.fpathconf, "PC_NAME_MAX")
+        self.check(os.pathconf, "PC_NAME_MAX")
+        self.check(os.fpathconf, "PC_NAME_MAX")
 
+    @unittest.skipUnless(hasattr(os, 'ftruncate'), 'test needs os.ftruncate()')
     def test_ftruncate(self):
-        if hasattr(os, "ftruncate"):
-            self.check(os.truncate, 0)
-            self.check(os.ftruncate, 0)
+        self.check(os.truncate, 0)
+        self.check(os.ftruncate, 0)
 
+    @unittest.skipUnless(hasattr(os, 'lseek'), 'test needs os.lseek()')
     def test_lseek(self):
-        if hasattr(os, "lseek"):
-            self.check(os.lseek, 0, 0)
+        self.check(os.lseek, 0, 0)
 
+    @unittest.skipUnless(hasattr(os, 'read'), 'test needs os.read()')
     def test_read(self):
-        if hasattr(os, "read"):
-            self.check(os.read, 1)
+        self.check(os.read, 1)
 
+    @unittest.skipUnless(hasattr(os, 'tcsetpgrp'), 'test needs os.tcsetpgrp()')
     def test_tcsetpgrpt(self):
-        if hasattr(os, "tcsetpgrp"):
-            self.check(os.tcsetpgrp, 0)
+        self.check(os.tcsetpgrp, 0)
 
+    @unittest.skipUnless(hasattr(os, 'write'), 'test needs os.write()')
     def test_write(self):
-        if hasattr(os, "write"):
-            self.check(os.write, b" ")
+        self.check(os.write, b" ")
 
 
 class LinkTests(unittest.TestCase):
@@ -1286,138 +1313,133 @@
         self.file2 = self.file1 + "2"
         self._test_link(self.file1, self.file2)
 
-if sys.platform != 'win32':
-    class Win32ErrorTests(unittest.TestCase):
-        pass
+@unittest.skipIf(sys.platform == "win32", "Posix specific tests")
+class PosixUidGidTests(unittest.TestCase):
+    @unittest.skipUnless(hasattr(os, 'setuid'), 'test needs os.setuid()')
+    def test_setuid(self):
+        if os.getuid() != 0:
+            self.assertRaises(OSError, os.setuid, 0)
+        self.assertRaises(OverflowError, os.setuid, 1<<32)
 
-    class PosixUidGidTests(unittest.TestCase):
-        if hasattr(os, 'setuid'):
-            def test_setuid(self):
-                if os.getuid() != 0:
-                    self.assertRaises(OSError, os.setuid, 0)
-                self.assertRaises(OverflowError, os.setuid, 1<<32)
+    @unittest.skipUnless(hasattr(os, 'setgid'), 'test needs os.setgid()')
+    def test_setgid(self):
+        if os.getuid() != 0 and not HAVE_WHEEL_GROUP:
+            self.assertRaises(OSError, os.setgid, 0)
+        self.assertRaises(OverflowError, os.setgid, 1<<32)
 
-        if hasattr(os, 'setgid'):
-            def test_setgid(self):
-                if os.getuid() != 0 and not HAVE_WHEEL_GROUP:
-                    self.assertRaises(OSError, os.setgid, 0)
-                self.assertRaises(OverflowError, os.setgid, 1<<32)
+    @unittest.skipUnless(hasattr(os, 'seteuid'), 'test needs os.seteuid()')
+    def test_seteuid(self):
+        if os.getuid() != 0:
+            self.assertRaises(OSError, os.seteuid, 0)
+        self.assertRaises(OverflowError, os.seteuid, 1<<32)
 
-        if hasattr(os, 'seteuid'):
-            def test_seteuid(self):
-                if os.getuid() != 0:
-                    self.assertRaises(OSError, os.seteuid, 0)
-                self.assertRaises(OverflowError, os.seteuid, 1<<32)
+    @unittest.skipUnless(hasattr(os, 'setegid'), 'test needs os.setegid()')
+    def test_setegid(self):
+        if os.getuid() != 0 and not HAVE_WHEEL_GROUP:
+            self.assertRaises(OSError, os.setegid, 0)
+        self.assertRaises(OverflowError, os.setegid, 1<<32)
 
-        if hasattr(os, 'setegid'):
-            def test_setegid(self):
-                if os.getuid() != 0 and not HAVE_WHEEL_GROUP:
-                    self.assertRaises(OSError, os.setegid, 0)
-                self.assertRaises(OverflowError, os.setegid, 1<<32)
+    @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()')
+    def test_setreuid(self):
+        if os.getuid() != 0:
+            self.assertRaises(OSError, os.setreuid, 0, 0)
+        self.assertRaises(OverflowError, os.setreuid, 1<<32, 0)
+        self.assertRaises(OverflowError, os.setreuid, 0, 1<<32)
 
-        if hasattr(os, 'setreuid'):
-            def test_setreuid(self):
-                if os.getuid() != 0:
-                    self.assertRaises(OSError, os.setreuid, 0, 0)
-                self.assertRaises(OverflowError, os.setreuid, 1<<32, 0)
-                self.assertRaises(OverflowError, os.setreuid, 0, 1<<32)
+    @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()')
+    def test_setreuid_neg1(self):
+        # Needs to accept -1.  We run this in a subprocess to avoid
+        # altering the test runner's process state (issue8045).
+        subprocess.check_call([
+                sys.executable, '-c',
+                'import os,sys;os.setreuid(-1,-1);sys.exit(0)'])
 
-            def test_setreuid_neg1(self):
-                # Needs to accept -1.  We run this in a subprocess to avoid
-                # altering the test runner's process state (issue8045).
-                subprocess.check_call([
-                        sys.executable, '-c',
-                        'import os,sys;os.setreuid(-1,-1);sys.exit(0)'])
+    @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()')
+    def test_setregid(self):
+        if os.getuid() != 0 and not HAVE_WHEEL_GROUP:
+            self.assertRaises(OSError, os.setregid, 0, 0)
+        self.assertRaises(OverflowError, os.setregid, 1<<32, 0)
+        self.assertRaises(OverflowError, os.setregid, 0, 1<<32)
 
-        if hasattr(os, 'setregid'):
-            def test_setregid(self):
-                if os.getuid() != 0 and not HAVE_WHEEL_GROUP:
-                    self.assertRaises(OSError, os.setregid, 0, 0)
-                self.assertRaises(OverflowError, os.setregid, 1<<32, 0)
-                self.assertRaises(OverflowError, os.setregid, 0, 1<<32)
+    @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()')
+    def test_setregid_neg1(self):
+        # Needs to accept -1.  We run this in a subprocess to avoid
+        # altering the test runner's process state (issue8045).
+        subprocess.check_call([
+                sys.executable, '-c',
+                'import os,sys;os.setregid(-1,-1);sys.exit(0)'])
 
-            def test_setregid_neg1(self):
-                # Needs to accept -1.  We run this in a subprocess to avoid
-                # altering the test runner's process state (issue8045).
-                subprocess.check_call([
-                        sys.executable, '-c',
-                        'import os,sys;os.setregid(-1,-1);sys.exit(0)'])
+@unittest.skipIf(sys.platform == "win32", "Posix specific tests")
+class Pep383Tests(unittest.TestCase):
+    def setUp(self):
+        if support.TESTFN_UNENCODABLE:
+            self.dir = support.TESTFN_UNENCODABLE
+        elif support.TESTFN_NONASCII:
+            self.dir = support.TESTFN_NONASCII
+        else:
+            self.dir = support.TESTFN
+        self.bdir = os.fsencode(self.dir)
 
-    class Pep383Tests(unittest.TestCase):
-        def setUp(self):
-            if support.TESTFN_UNENCODABLE:
-                self.dir = support.TESTFN_UNENCODABLE
-            elif support.TESTFN_NONASCII:
-                self.dir = support.TESTFN_NONASCII
-            else:
-                self.dir = support.TESTFN
-            self.bdir = os.fsencode(self.dir)
-
-            bytesfn = []
-            def add_filename(fn):
-                try:
-                    fn = os.fsencode(fn)
-                except UnicodeEncodeError:
-                    return
-                bytesfn.append(fn)
-            add_filename(support.TESTFN_UNICODE)
-            if support.TESTFN_UNENCODABLE:
-                add_filename(support.TESTFN_UNENCODABLE)
-            if support.TESTFN_NONASCII:
-                add_filename(support.TESTFN_NONASCII)
-            if not bytesfn:
-                self.skipTest("couldn't create any non-ascii filename")
-
-            self.unicodefn = set()
-            os.mkdir(self.dir)
+        bytesfn = []
+        def add_filename(fn):
             try:
-                for fn in bytesfn:
-                    support.create_empty_file(os.path.join(self.bdir, fn))
-                    fn = os.fsdecode(fn)
-                    if fn in self.unicodefn:
-                        raise ValueError("duplicate filename")
-                    self.unicodefn.add(fn)
-            except:
-                shutil.rmtree(self.dir)
-                raise
+                fn = os.fsencode(fn)
+            except UnicodeEncodeError:
+                return
+            bytesfn.append(fn)
+        add_filename(support.TESTFN_UNICODE)
+        if support.TESTFN_UNENCODABLE:
+            add_filename(support.TESTFN_UNENCODABLE)
+        if support.TESTFN_NONASCII:
+            add_filename(support.TESTFN_NONASCII)
+        if not bytesfn:
+            self.skipTest("couldn't create any non-ascii filename")
 
-        def tearDown(self):
+        self.unicodefn = set()
+        os.mkdir(self.dir)
+        try:
+            for fn in bytesfn:
+                support.create_empty_file(os.path.join(self.bdir, fn))
+                fn = os.fsdecode(fn)
+                if fn in self.unicodefn:
+                    raise ValueError("duplicate filename")
+                self.unicodefn.add(fn)
+        except:
             shutil.rmtree(self.dir)
+            raise
 
-        def test_listdir(self):
-            expected = self.unicodefn
-            found = set(os.listdir(self.dir))
-            self.assertEqual(found, expected)
-            # test listdir without arguments
-            current_directory = os.getcwd()
-            try:
-                os.chdir(os.sep)
-                self.assertEqual(set(os.listdir()), set(os.listdir(os.sep)))
-            finally:
-                os.chdir(current_directory)
+    def tearDown(self):
+        shutil.rmtree(self.dir)
 
-        def test_open(self):
-            for fn in self.unicodefn:
-                f = open(os.path.join(self.dir, fn), 'rb')
-                f.close()
+    def test_listdir(self):
+        expected = self.unicodefn
+        found = set(os.listdir(self.dir))
+        self.assertEqual(found, expected)
+        # test listdir without arguments
+        current_directory = os.getcwd()
+        try:
+            os.chdir(os.sep)
+            self.assertEqual(set(os.listdir()), set(os.listdir(os.sep)))
+        finally:
+            os.chdir(current_directory)
 
-        @unittest.skipUnless(hasattr(os, 'statvfs'),
-                             "need os.statvfs()")
-        def test_statvfs(self):
-            # issue #9645
-            for fn in self.unicodefn:
-                # should not fail with file not found error
-                fullname = os.path.join(self.dir, fn)
-                os.statvfs(fullname)
+    def test_open(self):
+        for fn in self.unicodefn:
+            f = open(os.path.join(self.dir, fn), 'rb')
+            f.close()
 
-        def test_stat(self):
-            for fn in self.unicodefn:
-                os.stat(os.path.join(self.dir, fn))
-else:
-    class PosixUidGidTests(unittest.TestCase):
-        pass
-    class Pep383Tests(unittest.TestCase):
-        pass
+    @unittest.skipUnless(hasattr(os, 'statvfs'),
+                            "need os.statvfs()")
+    def test_statvfs(self):
+        # issue #9645
+        for fn in self.unicodefn:
+            # should not fail with file not found error
+            fullname = os.path.join(self.dir, fn)
+            os.statvfs(fullname)
+
+    def test_stat(self):
+        for fn in self.unicodefn:
+            os.stat(os.path.join(self.dir, fn))
 
 @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
 class Win32KillTests(unittest.TestCase):
@@ -1536,6 +1558,52 @@
 
 
 @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
+class Win32ListdirTests(unittest.TestCase):
+    """Test listdir on Windows."""
+
+    def setUp(self):
+        self.created_paths = []
+        for i in range(2):
+            dir_name = 'SUB%d' % i
+            dir_path = os.path.join(support.TESTFN, dir_name)
+            file_name = 'FILE%d' % i
+            file_path = os.path.join(support.TESTFN, file_name)
+            os.makedirs(dir_path)
+            with open(file_path, 'w') as f:
+                f.write("I'm %s and proud of it. Blame test_os.\n" % file_path)
+            self.created_paths.extend([dir_name, file_name])
+        self.created_paths.sort()
+
+    def tearDown(self):
+        shutil.rmtree(support.TESTFN)
+
+    def test_listdir_no_extended_path(self):
+        """Test when the path is not an "extended" path."""
+        # unicode
+        self.assertEqual(
+                sorted(os.listdir(support.TESTFN)),
+                self.created_paths)
+        # bytes
+        self.assertEqual(
+                sorted(os.listdir(os.fsencode(support.TESTFN))),
+                [os.fsencode(path) for path in self.created_paths])
+
+    def test_listdir_extended_path(self):
+        """Test when the path starts with '\\\\?\\'."""
+        # See: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
+        # unicode
+        path = '\\\\?\\' + os.path.abspath(support.TESTFN)
+        self.assertEqual(
+                sorted(os.listdir(path)),
+                self.created_paths)
+        # bytes
+        path = b'\\\\?\\' + os.fsencode(os.path.abspath(support.TESTFN))
+        self.assertEqual(
+                sorted(os.listdir(path)),
+                [os.fsencode(path) for path in self.created_paths])
+
+
+@unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
 @support.skip_unless_symlink
 class Win32SymlinkTests(unittest.TestCase):
     filelink = 'filelinktest'
@@ -1855,6 +1923,8 @@
     SUPPORT_HEADERS_TRAILERS = not sys.platform.startswith("linux") and \
                                not sys.platform.startswith("solaris") and \
                                not sys.platform.startswith("sunos")
+    requires_headers_trailers = unittest.skipUnless(SUPPORT_HEADERS_TRAILERS,
+            'requires headers and trailers support')
 
     @classmethod
     def setUpClass(cls):
@@ -1973,52 +2043,54 @@
 
     # --- headers / trailers tests
 
-    if SUPPORT_HEADERS_TRAILERS:
-
-        def test_headers(self):
-            total_sent = 0
-            sent = os.sendfile(self.sockno, self.fileno, 0, 4096,
-                               headers=[b"x" * 512])
+    @requires_headers_trailers
+    def test_headers(self):
+        total_sent = 0
+        sent = os.sendfile(self.sockno, self.fileno, 0, 4096,
+                            headers=[b"x" * 512])
+        total_sent += sent
+        offset = 4096
+        nbytes = 4096
+        while 1:
+            sent = self.sendfile_wrapper(self.sockno, self.fileno,
+                                                    offset, nbytes)
+            if sent == 0:
+                break
             total_sent += sent
-            offset = 4096
-            nbytes = 4096
-            while 1:
-                sent = self.sendfile_wrapper(self.sockno, self.fileno,
-                                                     offset, nbytes)
-                if sent == 0:
-                    break
-                total_sent += sent
-                offset += sent
+            offset += sent
 
-            expected_data = b"x" * 512 + self.DATA
-            self.assertEqual(total_sent, len(expected_data))
+        expected_data = b"x" * 512 + self.DATA
+        self.assertEqual(total_sent, len(expected_data))
+        self.client.close()
+        self.server.wait()
+        data = self.server.handler_instance.get_data()
+        self.assertEqual(hash(data), hash(expected_data))
+
+    @requires_headers_trailers
+    def test_trailers(self):
+        TESTFN2 = support.TESTFN + "2"
+        file_data = b"abcdef"
+        with open(TESTFN2, 'wb') as f:
+            f.write(file_data)
+        with open(TESTFN2, 'rb')as f:
+            self.addCleanup(os.remove, TESTFN2)
+            os.sendfile(self.sockno, f.fileno(), 0, len(file_data),
+                        trailers=[b"1234"])
             self.client.close()
             self.server.wait()
             data = self.server.handler_instance.get_data()
-            self.assertEqual(hash(data), hash(expected_data))
+            self.assertEqual(data, b"abcdef1234")
 
-        def test_trailers(self):
-            TESTFN2 = support.TESTFN + "2"
-            file_data = b"abcdef"
-            with open(TESTFN2, 'wb') as f:
-                f.write(file_data)
-            with open(TESTFN2, 'rb')as f:
-                self.addCleanup(os.remove, TESTFN2)
-                os.sendfile(self.sockno, f.fileno(), 0, len(file_data),
-                            trailers=[b"1234"])
-                self.client.close()
-                self.server.wait()
-                data = self.server.handler_instance.get_data()
-                self.assertEqual(data, b"abcdef1234")
-
-        if hasattr(os, "SF_NODISKIO"):
-            def test_flags(self):
-                try:
-                    os.sendfile(self.sockno, self.fileno, 0, 4096,
-                                flags=os.SF_NODISKIO)
-                except OSError as err:
-                    if err.errno not in (errno.EBUSY, errno.EAGAIN):
-                        raise
+    @requires_headers_trailers
+    @unittest.skipUnless(hasattr(os, 'SF_NODISKIO'),
+                         'test needs os.SF_NODISKIO')
+    def test_flags(self):
+        try:
+            os.sendfile(self.sockno, self.fileno, 0, 4096,
+                        flags=os.SF_NODISKIO)
+        except OSError as err:
+            if err.errno not in (errno.EBUSY, errno.EAGAIN):
+                raise
 
 
 def supports_extended_attributes():
@@ -2404,6 +2476,7 @@
         PosixUidGidTests,
         Pep383Tests,
         Win32KillTests,
+        Win32ListdirTests,
         Win32SymlinkTests,
         NonLocalSymlinkTests,
         FSEncodingTests,
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 0babaa0..7993d02 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -205,7 +205,8 @@
     ...     'enable 1',
     ...     'clear 1',
     ...     'commands 2',
-    ...     'print 42',
+    ...     'p "42"',
+    ...     'print("42", 7*6)',     # Issue 18764 (not about breakpoints)
     ...     'end',
     ...     'continue',  # will stop at breakpoint 2 (line 4)
     ...     'clear',     # clear all!
@@ -252,11 +253,13 @@
     (Pdb) clear 1
     Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
     (Pdb) commands 2
-    (com) print 42
+    (com) p "42"
+    (com) print("42", 7*6)
     (com) end
     (Pdb) continue
     1
-    42
+    '42'
+    42 42
     > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(4)test_function()
     -> print(2)
     (Pdb) clear
@@ -617,6 +620,36 @@
         stderr = stderr and bytes.decode(stderr)
         return stdout, stderr
 
+    def _assert_find_function(self, file_content, func_name, expected):
+        file_content = textwrap.dedent(file_content)
+
+        with open(support.TESTFN, 'w') as f:
+            f.write(file_content)
+
+        expected = None if not expected else (
+            expected[0], support.TESTFN, expected[1])
+        self.assertEqual(
+            expected, pdb.find_function(func_name, support.TESTFN))
+
+    def test_find_function_empty_file(self):
+        self._assert_find_function('', 'foo', None)
+
+    def test_find_function_found(self):
+        self._assert_find_function(
+            """\
+            def foo():
+                pass
+
+            def bar():
+                pass
+
+            def quux():
+                pass
+            """,
+            'bar',
+            ('bar', 4),
+        )
+
     def test_issue7964(self):
         # open the file as binary so we can force \r\n newline
         with open(support.TESTFN, 'wb') as f:
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index 6abf443..0dcfe05 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -91,15 +91,28 @@
                 ("CPython", "2.6.1", "tags/r261", "67515",
                  ('r261:67515', 'Dec  6 2008 15:26:00'),
                  'GCC 4.0.1 (Apple Computer, Inc. build 5370)'),
+
             ("IronPython 2.0 (2.0.0.0) on .NET 2.0.50727.3053", None, "cli")
             :
                 ("IronPython", "2.0.0", "", "", ("", ""),
                  ".NET 2.0.50727.3053"),
+
+            ("2.6.1 (IronPython 2.6.1 (2.6.10920.0) on .NET 2.0.50727.1433)", None, "cli")
+            :
+                ("IronPython", "2.6.1", "", "", ("", ""),
+                 ".NET 2.0.50727.1433"),
+
+            ("2.7.4 (IronPython 2.7.4 (2.7.0.40) on Mono 4.0.30319.1 (32-bit))", None, "cli")
+            :
+                ("IronPython", "2.7.4", "", "", ("", ""),
+                 "Mono 4.0.30319.1 (32-bit)"),
+
             ("2.5 (trunk:6107, Mar 26 2009, 13:02:18) \n[Java HotSpot(TM) Client VM (\"Apple Computer, Inc.\")]",
             ('Jython', 'trunk', '6107'), "java1.5.0_16")
             :
                 ("Jython", "2.5.0", "trunk", "6107",
                  ('trunk:6107', 'Mar 26 2009'), "java1.5.0_16"),
+
             ("2.5.2 (63378, Mar 26 2009, 18:03:29)\n[PyPy 1.0.0]",
              ('PyPy', 'trunk', '63378'), self.save_platform)
             :
diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
index 935848b..70fe426 100644
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -11,7 +11,7 @@
 import time
 import errno
 
-from unittest import TestCase
+from unittest import TestCase, skipUnless
 from test import support as test_support
 threading = test_support.import_module('threading')
 
@@ -24,6 +24,7 @@
 
     SUPPORTS_SSL = True
     CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "keycert.pem")
+requires_ssl = skipUnless(SUPPORTS_SSL, 'SSL not supported')
 
 # the dummy data returned by server when LIST and RETR commands are issued
 LIST_RESP = b'1 1\r\n2 2\r\n3 3\r\n4 4\r\n5 5\r\n.\r\n'
@@ -94,7 +95,7 @@
 
     def cmd_list(self, arg):
         if arg:
-            self.push('+OK %s %s' %(arg, arg))
+            self.push('+OK %s %s' % (arg, arg))
         else:
             self.push('+OK')
             asynchat.async_chat.push(self, LIST_RESP)
@@ -278,6 +279,10 @@
         foo = self.client.retr('foo')
         self.assertEqual(foo, expected)
 
+    def test_too_long_lines(self):
+        self.assertRaises(poplib.error_proto, self.client._shortcmd,
+                          'echo +%s' % ((poplib._MAXLINE + 10) * 'a'))
+
     def test_dele(self):
         self.assertOK(self.client.dele('foo'))
 
@@ -312,22 +317,23 @@
         self.assertIsNone(self.client.sock)
         self.assertIsNone(self.client.file)
 
-    if SUPPORTS_SSL:
+    @requires_ssl
+    def test_stls_capa(self):
+        capa = self.client.capa()
+        self.assertTrue('STLS' in capa.keys())
 
-        def test_stls_capa(self):
-            capa = self.client.capa()
-            self.assertTrue('STLS' in capa.keys())
+    @requires_ssl
+    def test_stls(self):
+        expected = b'+OK Begin TLS negotiation'
+        resp = self.client.stls()
+        self.assertEqual(resp, expected)
 
-        def test_stls(self):
-            expected = b'+OK Begin TLS negotiation'
-            resp = self.client.stls()
-            self.assertEqual(resp, expected)
-
-        def test_stls_context(self):
-            expected = b'+OK Begin TLS negotiation'
-            ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
-            resp = self.client.stls(context=ctx)
-            self.assertEqual(resp, expected)
+    @requires_ssl
+    def test_stls_context(self):
+        expected = b'+OK Begin TLS negotiation'
+        ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+        resp = self.client.stls(context=ctx)
+        self.assertEqual(resp, expected)
 
 
 if SUPPORTS_SSL:
@@ -350,67 +356,75 @@
             self.push('+OK dummy pop3 server ready. <timestamp>')
 
 
-    class TestPOP3_SSLClass(TestPOP3Class):
-        # repeat previous tests by using poplib.POP3_SSL
+@requires_ssl
+class TestPOP3_SSLClass(TestPOP3Class):
+    # repeat previous tests by using poplib.POP3_SSL
 
-        def setUp(self):
-            self.server = DummyPOP3Server((HOST, PORT))
-            self.server.handler = DummyPOP3_SSLHandler
-            self.server.start()
-            self.client = poplib.POP3_SSL(self.server.host, self.server.port)
+    def setUp(self):
+        self.server = DummyPOP3Server((HOST, PORT))
+        self.server.handler = DummyPOP3_SSLHandler
+        self.server.start()
+        self.client = poplib.POP3_SSL(self.server.host, self.server.port)
 
-        def test__all__(self):
-            self.assertIn('POP3_SSL', poplib.__all__)
+    def test__all__(self):
+        self.assertIn('POP3_SSL', poplib.__all__)
 
-        def test_context(self):
-            ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
-            self.assertRaises(ValueError, poplib.POP3_SSL, self.server.host,
-                              self.server.port, keyfile=CERTFILE, context=ctx)
-            self.assertRaises(ValueError, poplib.POP3_SSL, self.server.host,
-                              self.server.port, certfile=CERTFILE, context=ctx)
-            self.assertRaises(ValueError, poplib.POP3_SSL, self.server.host,
-                              self.server.port, keyfile=CERTFILE,
-                              certfile=CERTFILE, context=ctx)
+    def test_context(self):
+        ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+        self.assertRaises(ValueError, poplib.POP3_SSL, self.server.host,
+                            self.server.port, keyfile=CERTFILE, context=ctx)
+        self.assertRaises(ValueError, poplib.POP3_SSL, self.server.host,
+                            self.server.port, certfile=CERTFILE, context=ctx)
+        self.assertRaises(ValueError, poplib.POP3_SSL, self.server.host,
+                            self.server.port, keyfile=CERTFILE,
+                            certfile=CERTFILE, context=ctx)
 
-            self.client.quit()
-            self.client = poplib.POP3_SSL(self.server.host, self.server.port,
-                                          context=ctx)
-            self.assertIsInstance(self.client.sock, ssl.SSLSocket)
-            self.assertIs(self.client.sock.context, ctx)
-            self.assertTrue(self.client.noop().startswith(b'+OK'))
+        self.client.quit()
+        self.client = poplib.POP3_SSL(self.server.host, self.server.port,
+                                        context=ctx)
+        self.assertIsInstance(self.client.sock, ssl.SSLSocket)
+        self.assertIs(self.client.sock.context, ctx)
+        self.assertTrue(self.client.noop().startswith(b'+OK'))
 
-        def test_stls(self):
-            self.assertRaises(poplib.error_proto, self.client.stls)
+    def test_stls(self):
+        self.assertRaises(poplib.error_proto, self.client.stls)
 
-        test_stls_context = test_stls
+    test_stls_context = test_stls
 
-        def test_stls_capa(self):
-            capa = self.client.capa()
-            self.assertFalse('STLS' in capa.keys())
+    def test_stls_capa(self):
+        capa = self.client.capa()
+        self.assertFalse('STLS' in capa.keys())
 
 
-    class TestPOP3_TLSClass(TestPOP3Class):
-        # repeat previous tests by using poplib.POP3.stls()
+@requires_ssl
+class TestPOP3_TLSClass(TestPOP3Class):
+    # repeat previous tests by using poplib.POP3.stls()
 
-        def setUp(self):
-            self.server = DummyPOP3Server((HOST, PORT))
-            self.server.start()
-            self.client = poplib.POP3(self.server.host, self.server.port, timeout=3)
-            self.client.stls()
+    def setUp(self):
+        self.server = DummyPOP3Server((HOST, PORT))
+        self.server.start()
+        self.client = poplib.POP3(self.server.host, self.server.port, timeout=3)
+        self.client.stls()
 
-        def tearDown(self):
-            if self.client.file is not None and self.client.sock is not None:
+    def tearDown(self):
+        if self.client.file is not None and self.client.sock is not None:
+            try:
                 self.client.quit()
-            self.server.stop()
+            except poplib.error_proto:
+                # happens in the test_too_long_lines case; the overlong
+                # response will be treated as response to QUIT and raise
+                # this exception
+                pass
+        self.server.stop()
 
-        def test_stls(self):
-            self.assertRaises(poplib.error_proto, self.client.stls)
+    def test_stls(self):
+        self.assertRaises(poplib.error_proto, self.client.stls)
 
-        test_stls_context = test_stls
+    test_stls_context = test_stls
 
-        def test_stls_capa(self):
-            capa = self.client.capa()
-            self.assertFalse(b'STLS' in capa.keys())
+    def test_stls_capa(self):
+        capa = self.client.capa()
+        self.assertFalse(b'STLS' in capa.keys())
 
 
 class TestTimeouts(TestCase):
@@ -468,10 +482,8 @@
 
 
 def test_main():
-    tests = [TestPOP3Class, TestTimeouts]
-    if SUPPORTS_SSL:
-        tests.append(TestPOP3_SSLClass)
-        tests.append(TestPOP3_TLSClass)
+    tests = [TestPOP3Class, TestTimeouts,
+             TestPOP3_SSLClass, TestPOP3_TLSClass]
     thread_info = test_support.threading_setup()
     try:
         test_support.run_unittest(*tests)
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index 6cd3393..1eceebe 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -54,47 +54,55 @@
                 posix_func()
                 self.assertRaises(TypeError, posix_func, 1)
 
-    if hasattr(posix, 'getresuid'):
-        def test_getresuid(self):
-            user_ids = posix.getresuid()
-            self.assertEqual(len(user_ids), 3)
-            for val in user_ids:
-                self.assertGreaterEqual(val, 0)
+    @unittest.skipUnless(hasattr(posix, 'getresuid'),
+                         'test needs posix.getresuid()')
+    def test_getresuid(self):
+        user_ids = posix.getresuid()
+        self.assertEqual(len(user_ids), 3)
+        for val in user_ids:
+            self.assertGreaterEqual(val, 0)
 
-    if hasattr(posix, 'getresgid'):
-        def test_getresgid(self):
-            group_ids = posix.getresgid()
-            self.assertEqual(len(group_ids), 3)
-            for val in group_ids:
-                self.assertGreaterEqual(val, 0)
+    @unittest.skipUnless(hasattr(posix, 'getresgid'),
+                         'test needs posix.getresgid()')
+    def test_getresgid(self):
+        group_ids = posix.getresgid()
+        self.assertEqual(len(group_ids), 3)
+        for val in group_ids:
+            self.assertGreaterEqual(val, 0)
 
-    if hasattr(posix, 'setresuid'):
-        def test_setresuid(self):
-            current_user_ids = posix.getresuid()
-            self.assertIsNone(posix.setresuid(*current_user_ids))
-            # -1 means don't change that value.
-            self.assertIsNone(posix.setresuid(-1, -1, -1))
+    @unittest.skipUnless(hasattr(posix, 'setresuid'),
+                         'test needs posix.setresuid()')
+    def test_setresuid(self):
+        current_user_ids = posix.getresuid()
+        self.assertIsNone(posix.setresuid(*current_user_ids))
+        # -1 means don't change that value.
+        self.assertIsNone(posix.setresuid(-1, -1, -1))
 
-        def test_setresuid_exception(self):
-            # Don't do this test if someone is silly enough to run us as root.
-            current_user_ids = posix.getresuid()
-            if 0 not in current_user_ids:
-                new_user_ids = (current_user_ids[0]+1, -1, -1)
-                self.assertRaises(OSError, posix.setresuid, *new_user_ids)
+    @unittest.skipUnless(hasattr(posix, 'setresuid'),
+                         'test needs posix.setresuid()')
+    def test_setresuid_exception(self):
+        # Don't do this test if someone is silly enough to run us as root.
+        current_user_ids = posix.getresuid()
+        if 0 not in current_user_ids:
+            new_user_ids = (current_user_ids[0]+1, -1, -1)
+            self.assertRaises(OSError, posix.setresuid, *new_user_ids)
 
-    if hasattr(posix, 'setresgid'):
-        def test_setresgid(self):
-            current_group_ids = posix.getresgid()
-            self.assertIsNone(posix.setresgid(*current_group_ids))
-            # -1 means don't change that value.
-            self.assertIsNone(posix.setresgid(-1, -1, -1))
+    @unittest.skipUnless(hasattr(posix, 'setresgid'),
+                         'test needs posix.setresgid()')
+    def test_setresgid(self):
+        current_group_ids = posix.getresgid()
+        self.assertIsNone(posix.setresgid(*current_group_ids))
+        # -1 means don't change that value.
+        self.assertIsNone(posix.setresgid(-1, -1, -1))
 
-        def test_setresgid_exception(self):
-            # Don't do this test if someone is silly enough to run us as root.
-            current_group_ids = posix.getresgid()
-            if 0 not in current_group_ids:
-                new_group_ids = (current_group_ids[0]+1, -1, -1)
-                self.assertRaises(OSError, posix.setresgid, *new_group_ids)
+    @unittest.skipUnless(hasattr(posix, 'setresgid'),
+                         'test needs posix.setresgid()')
+    def test_setresgid_exception(self):
+        # Don't do this test if someone is silly enough to run us as root.
+        current_group_ids = posix.getresgid()
+        if 0 not in current_group_ids:
+            new_group_ids = (current_group_ids[0]+1, -1, -1)
+            self.assertRaises(OSError, posix.setresgid, *new_group_ids)
 
     @unittest.skipUnless(hasattr(posix, 'initgroups'),
                          "test needs os.initgroups()")
@@ -121,29 +129,32 @@
             else:
                 self.fail("Expected OSError to be raised by initgroups")
 
+    @unittest.skipUnless(hasattr(posix, 'statvfs'),
+                         'test needs posix.statvfs()')
     def test_statvfs(self):
-        if hasattr(posix, 'statvfs'):
-            self.assertTrue(posix.statvfs(os.curdir))
+        self.assertTrue(posix.statvfs(os.curdir))
 
+    @unittest.skipUnless(hasattr(posix, 'fstatvfs'),
+                         'test needs posix.fstatvfs()')
     def test_fstatvfs(self):
-        if hasattr(posix, 'fstatvfs'):
-            fp = open(support.TESTFN)
-            try:
-                self.assertTrue(posix.fstatvfs(fp.fileno()))
-                self.assertTrue(posix.statvfs(fp.fileno()))
-            finally:
-                fp.close()
+        fp = open(support.TESTFN)
+        try:
+            self.assertTrue(posix.fstatvfs(fp.fileno()))
+            self.assertTrue(posix.statvfs(fp.fileno()))
+        finally:
+            fp.close()
 
+    @unittest.skipUnless(hasattr(posix, 'ftruncate'),
+                         'test needs posix.ftruncate()')
     def test_ftruncate(self):
-        if hasattr(posix, 'ftruncate'):
-            fp = open(support.TESTFN, 'w+')
-            try:
-                # we need to have some data to truncate
-                fp.write('test')
-                fp.flush()
-                posix.ftruncate(fp.fileno(), 0)
-            finally:
-                fp.close()
+        fp = open(support.TESTFN, 'w+')
+        try:
+            # we need to have some data to truncate
+            fp.write('test')
+            fp.flush()
+            posix.ftruncate(fp.fileno(), 0)
+        finally:
+            fp.close()
 
     @unittest.skipUnless(hasattr(posix, 'truncate'), "test needs posix.truncate()")
     def test_truncate(self):
@@ -290,30 +301,33 @@
         finally:
             os.close(fd)
 
+    @unittest.skipUnless(hasattr(posix, 'dup'),
+                         'test needs posix.dup()')
     def test_dup(self):
-        if hasattr(posix, 'dup'):
-            fp = open(support.TESTFN)
-            try:
-                fd = posix.dup(fp.fileno())
-                self.assertIsInstance(fd, int)
-                os.close(fd)
-            finally:
-                fp.close()
+        fp = open(support.TESTFN)
+        try:
+            fd = posix.dup(fp.fileno())
+            self.assertIsInstance(fd, int)
+            os.close(fd)
+        finally:
+            fp.close()
 
+    @unittest.skipUnless(hasattr(posix, 'confstr'),
+                         'test needs posix.confstr()')
     def test_confstr(self):
-        if hasattr(posix, 'confstr'):
-            self.assertRaises(ValueError, posix.confstr, "CS_garbage")
-            self.assertEqual(len(posix.confstr("CS_PATH")) > 0, True)
+        self.assertRaises(ValueError, posix.confstr, "CS_garbage")
+        self.assertEqual(len(posix.confstr("CS_PATH")) > 0, True)
 
+    @unittest.skipUnless(hasattr(posix, 'dup2'),
+                         'test needs posix.dup2()')
     def test_dup2(self):
-        if hasattr(posix, 'dup2'):
-            fp1 = open(support.TESTFN)
-            fp2 = open(support.TESTFN)
-            try:
-                posix.dup2(fp1.fileno(), fp2.fileno())
-            finally:
-                fp1.close()
-                fp2.close()
+        fp1 = open(support.TESTFN)
+        fp2 = open(support.TESTFN)
+        try:
+            posix.dup2(fp1.fileno(), fp2.fileno())
+        finally:
+            fp1.close()
+            fp2.close()
 
     @unittest.skipUnless(hasattr(os, 'O_CLOEXEC'), "needs os.O_CLOEXEC")
     @support.requires_linux_version(2, 6, 23)
@@ -322,65 +336,69 @@
         self.addCleanup(os.close, fd)
         self.assertTrue(fcntl.fcntl(fd, fcntl.F_GETFD) & fcntl.FD_CLOEXEC)
 
+    @unittest.skipUnless(hasattr(posix, 'O_EXLOCK'),
+                         'test needs posix.O_EXLOCK')
     def test_osexlock(self):
-        if hasattr(posix, "O_EXLOCK"):
+        fd = os.open(support.TESTFN,
+                     os.O_WRONLY|os.O_EXLOCK|os.O_CREAT)
+        self.assertRaises(OSError, os.open, support.TESTFN,
+                          os.O_WRONLY|os.O_EXLOCK|os.O_NONBLOCK)
+        os.close(fd)
+
+        if hasattr(posix, "O_SHLOCK"):
             fd = os.open(support.TESTFN,
-                         os.O_WRONLY|os.O_EXLOCK|os.O_CREAT)
+                         os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
             self.assertRaises(OSError, os.open, support.TESTFN,
                               os.O_WRONLY|os.O_EXLOCK|os.O_NONBLOCK)
             os.close(fd)
 
-            if hasattr(posix, "O_SHLOCK"):
-                fd = os.open(support.TESTFN,
-                             os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
-                self.assertRaises(OSError, os.open, support.TESTFN,
-                                  os.O_WRONLY|os.O_EXLOCK|os.O_NONBLOCK)
-                os.close(fd)
-
+    @unittest.skipUnless(hasattr(posix, 'O_SHLOCK'),
+                         'test needs posix.O_SHLOCK')
     def test_osshlock(self):
-        if hasattr(posix, "O_SHLOCK"):
-            fd1 = os.open(support.TESTFN,
+        fd1 = os.open(support.TESTFN,
+                     os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
+        fd2 = os.open(support.TESTFN,
+                      os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
+        os.close(fd2)
+        os.close(fd1)
+
+        if hasattr(posix, "O_EXLOCK"):
+            fd = os.open(support.TESTFN,
                          os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
-            fd2 = os.open(support.TESTFN,
-                          os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
-            os.close(fd2)
-            os.close(fd1)
+            self.assertRaises(OSError, os.open, support.TESTFN,
+                              os.O_RDONLY|os.O_EXLOCK|os.O_NONBLOCK)
+            os.close(fd)
 
-            if hasattr(posix, "O_EXLOCK"):
-                fd = os.open(support.TESTFN,
-                             os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
-                self.assertRaises(OSError, os.open, support.TESTFN,
-                                  os.O_RDONLY|os.O_EXLOCK|os.O_NONBLOCK)
-                os.close(fd)
-
+    @unittest.skipUnless(hasattr(posix, 'fstat'),
+                         'test needs posix.fstat()')
     def test_fstat(self):
-        if hasattr(posix, 'fstat'):
-            fp = open(support.TESTFN)
-            try:
-                self.assertTrue(posix.fstat(fp.fileno()))
-                self.assertTrue(posix.stat(fp.fileno()))
+        fp = open(support.TESTFN)
+        try:
+            self.assertTrue(posix.fstat(fp.fileno()))
+            self.assertTrue(posix.stat(fp.fileno()))
 
-                self.assertRaisesRegex(TypeError,
-                        'should be string, bytes or integer, not',
-                        posix.stat, float(fp.fileno()))
-            finally:
-                fp.close()
+            self.assertRaisesRegex(TypeError,
+                    'should be string, bytes or integer, not',
+                    posix.stat, float(fp.fileno()))
+        finally:
+            fp.close()
 
+    @unittest.skipUnless(hasattr(posix, 'stat'),
+                         'test needs posix.stat()')
     def test_stat(self):
-        if hasattr(posix, 'stat'):
-            self.assertTrue(posix.stat(support.TESTFN))
-            self.assertTrue(posix.stat(os.fsencode(support.TESTFN)))
-            self.assertTrue(posix.stat(bytearray(os.fsencode(support.TESTFN))))
+        self.assertTrue(posix.stat(support.TESTFN))
+        self.assertTrue(posix.stat(os.fsencode(support.TESTFN)))
+        self.assertTrue(posix.stat(bytearray(os.fsencode(support.TESTFN))))
 
-            self.assertRaisesRegex(TypeError,
-                    'can\'t specify None for path argument',
-                    posix.stat, None)
-            self.assertRaisesRegex(TypeError,
-                    'should be string, bytes or integer, not',
-                    posix.stat, list(support.TESTFN))
-            self.assertRaisesRegex(TypeError,
-                    'should be string, bytes or integer, not',
-                    posix.stat, list(os.fsencode(support.TESTFN)))
+        self.assertRaisesRegex(TypeError,
+                'can\'t specify None for path argument',
+                posix.stat, None)
+        self.assertRaisesRegex(TypeError,
+                'should be string, bytes or integer, not',
+                posix.stat, list(support.TESTFN))
+        self.assertRaisesRegex(TypeError,
+                'should be string, bytes or integer, not',
+                posix.stat, list(os.fsencode(support.TESTFN)))
 
     @unittest.skipUnless(hasattr(posix, 'mkfifo'), "don't have mkfifo()")
     def test_mkfifo(self):
@@ -495,10 +513,10 @@
         self._test_all_chown_common(posix.lchown, support.TESTFN,
                                     getattr(posix, 'lstat', None))
 
+    @unittest.skipUnless(hasattr(posix, 'chdir'), 'test needs posix.chdir()')
     def test_chdir(self):
-        if hasattr(posix, 'chdir'):
-            posix.chdir(os.curdir)
-            self.assertRaises(OSError, posix.chdir, support.TESTFN)
+        posix.chdir(os.curdir)
+        self.assertRaises(OSError, posix.chdir, support.TESTFN)
 
     def test_listdir(self):
         self.assertTrue(support.TESTFN in posix.listdir(os.curdir))
@@ -528,25 +546,26 @@
             sorted(posix.listdir(f))
             )
 
+    @unittest.skipUnless(hasattr(posix, 'access'), 'test needs posix.access()')
     def test_access(self):
-        if hasattr(posix, 'access'):
-            self.assertTrue(posix.access(support.TESTFN, os.R_OK))
+        self.assertTrue(posix.access(support.TESTFN, os.R_OK))
 
+    @unittest.skipUnless(hasattr(posix, 'umask'), 'test needs posix.umask()')
     def test_umask(self):
-        if hasattr(posix, 'umask'):
-            old_mask = posix.umask(0)
-            self.assertIsInstance(old_mask, int)
-            posix.umask(old_mask)
+        old_mask = posix.umask(0)
+        self.assertIsInstance(old_mask, int)
+        posix.umask(old_mask)
 
+    @unittest.skipUnless(hasattr(posix, 'strerror'),
+                         'test needs posix.strerror()')
     def test_strerror(self):
-        if hasattr(posix, 'strerror'):
-            self.assertTrue(posix.strerror(0))
+        self.assertTrue(posix.strerror(0))
 
+    @unittest.skipUnless(hasattr(posix, 'pipe'), 'test needs posix.pipe()')
     def test_pipe(self):
-        if hasattr(posix, 'pipe'):
-            reader, writer = posix.pipe()
-            os.close(reader)
-            os.close(writer)
+        reader, writer = posix.pipe()
+        os.close(reader)
+        os.close(writer)
 
     @unittest.skipUnless(hasattr(os, 'pipe2'), "test needs os.pipe2()")
     @support.requires_linux_version(2, 6, 27)
@@ -580,15 +599,15 @@
         self.assertRaises(OverflowError, os.pipe2, _testcapi.INT_MAX + 1)
         self.assertRaises(OverflowError, os.pipe2, _testcapi.UINT_MAX + 1)
 
+    @unittest.skipUnless(hasattr(posix, 'utime'), 'test needs posix.utime()')
     def test_utime(self):
-        if hasattr(posix, 'utime'):
-            now = time.time()
-            posix.utime(support.TESTFN, None)
-            self.assertRaises(TypeError, posix.utime, support.TESTFN, (None, None))
-            self.assertRaises(TypeError, posix.utime, support.TESTFN, (now, None))
-            self.assertRaises(TypeError, posix.utime, support.TESTFN, (None, now))
-            posix.utime(support.TESTFN, (int(now), int(now)))
-            posix.utime(support.TESTFN, (now, now))
+        now = time.time()
+        posix.utime(support.TESTFN, None)
+        self.assertRaises(TypeError, posix.utime, support.TESTFN, (None, None))
+        self.assertRaises(TypeError, posix.utime, support.TESTFN, (now, None))
+        self.assertRaises(TypeError, posix.utime, support.TESTFN, (None, now))
+        posix.utime(support.TESTFN, (int(now), int(now)))
+        posix.utime(support.TESTFN, (now, now))
 
     def _test_chflags_regular_file(self, chflags_func, target_file, **kwargs):
         st = os.stat(target_file)
@@ -665,6 +684,7 @@
             self.assertEqual(type(k), item_type)
             self.assertEqual(type(v), item_type)
 
+    @unittest.skipUnless(hasattr(posix, 'getcwd'), 'test needs posix.getcwd()')
     def test_getcwd_long_pathnames(self):
         dirname = 'getcwd-test-directory-0123456789abcdef-01234567890abcdef'
         curdir = os.getcwd()
diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py
index 2ad9c3a..154c08a 100644
--- a/Lib/test/test_py_compile.py
+++ b/Lib/test/test_py_compile.py
@@ -3,6 +3,7 @@
 import py_compile
 import shutil
 import stat
+import sys
 import tempfile
 import unittest
 
@@ -75,6 +76,8 @@
         self.assertTrue(os.path.exists(self.pyc_path))
         self.assertFalse(os.path.exists(self.cache_path))
 
+    @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0,
+                     'non-root user required')
     @unittest.skipIf(os.name == 'nt',
                      'cannot control directory permissions on Windows')
     def test_exceptions_propagate(self):
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 399f818..cdf28a4 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -11,6 +11,7 @@
 import string
 import test.support
 import time
+import types
 import unittest
 import xml.etree
 import textwrap
@@ -208,6 +209,75 @@
 # output pattern for module with bad imports
 badimport_pattern = "problem in %s - ImportError: No module named %r"
 
+expected_dynamicattribute_pattern = """
+Help on class DA in module %s:
+
+class DA(builtins.object)
+ |  Data descriptors defined here:
+ |\x20\x20
+ |  __dict__%s
+ |\x20\x20
+ |  __weakref__%s
+ |\x20\x20
+ |  ham
+ |\x20\x20
+ |  ----------------------------------------------------------------------
+ |  Data and other attributes inherited from Meta:
+ |\x20\x20
+ |  ham = 'spam'
+""".strip()
+
+expected_virtualattribute_pattern1 = """
+Help on class Class in module %s:
+
+class Class(builtins.object)
+ |  Data and other attributes inherited from Meta:
+ |\x20\x20
+ |  LIFE = 42
+""".strip()
+
+expected_virtualattribute_pattern2 = """
+Help on class Class1 in module %s:
+
+class Class1(builtins.object)
+ |  Data and other attributes inherited from Meta1:
+ |\x20\x20
+ |  one = 1
+""".strip()
+
+expected_virtualattribute_pattern3 = """
+Help on class Class2 in module %s:
+
+class Class2(Class1)
+ |  Method resolution order:
+ |      Class2
+ |      Class1
+ |      builtins.object
+ |\x20\x20
+ |  Data and other attributes inherited from Meta1:
+ |\x20\x20
+ |  one = 1
+ |\x20\x20
+ |  ----------------------------------------------------------------------
+ |  Data and other attributes inherited from Meta3:
+ |\x20\x20
+ |  three = 3
+ |\x20\x20
+ |  ----------------------------------------------------------------------
+ |  Data and other attributes inherited from Meta2:
+ |\x20\x20
+ |  two = 2
+""".strip()
+
+expected_missingattribute_pattern = """
+Help on class C in module %s:
+
+class C(builtins.object)
+ |  Data and other attributes defined here:
+ |\x20\x20
+ |  here = 'present!'
+""".strip()
+
 def run_pydoc(module_name, *args, **env):
     """
     Runs pydoc on the specified module. Returns the stripped
@@ -400,7 +470,7 @@
     def test_namedtuple_public_underscore(self):
         NT = namedtuple('NT', ['abc', 'def'], rename=True)
         with captured_stdout() as help_io:
-            help(NT)
+            pydoc.help(NT)
         helptext = help_io.getvalue()
         self.assertIn('_1', helptext)
         self.assertIn('_replace', helptext)
@@ -636,6 +706,127 @@
         self.assertEqual(sorted(pydoc.Helper.keywords),
                          sorted(keyword.kwlist))
 
+class PydocWithMetaClasses(unittest.TestCase):
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    @unittest.skipIf(hasattr(sys, 'gettrace') and sys.gettrace(),
+                     'trace function introduces __locals__ unexpectedly')
+    def test_DynamicClassAttribute(self):
+        class Meta(type):
+            def __getattr__(self, name):
+                if name == 'ham':
+                    return 'spam'
+                return super().__getattr__(name)
+        class DA(metaclass=Meta):
+            @types.DynamicClassAttribute
+            def ham(self):
+                return 'eggs'
+        expected_text_data_docstrings = tuple('\n |      ' + s if s else ''
+                                      for s in expected_data_docstrings)
+        output = StringIO()
+        helper = pydoc.Helper(output=output)
+        helper(DA)
+        expected_text = expected_dynamicattribute_pattern % (
+                (__name__,) + expected_text_data_docstrings[:2])
+        result = output.getvalue().strip()
+        if result != expected_text:
+            print_diffs(expected_text, result)
+            self.fail("outputs are not equal, see diff above")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    @unittest.skipIf(hasattr(sys, 'gettrace') and sys.gettrace(),
+                     'trace function introduces __locals__ unexpectedly')
+    def test_virtualClassAttributeWithOneMeta(self):
+        class Meta(type):
+            def __dir__(cls):
+                return ['__class__', '__module__', '__name__', 'LIFE']
+            def __getattr__(self, name):
+                if name =='LIFE':
+                    return 42
+                return super().__getattr(name)
+        class Class(metaclass=Meta):
+            pass
+        output = StringIO()
+        helper = pydoc.Helper(output=output)
+        helper(Class)
+        expected_text = expected_virtualattribute_pattern1 % __name__
+        result = output.getvalue().strip()
+        if result != expected_text:
+            print_diffs(expected_text, result)
+            self.fail("outputs are not equal, see diff above")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    @unittest.skipIf(hasattr(sys, 'gettrace') and sys.gettrace(),
+                     'trace function introduces __locals__ unexpectedly')
+    def test_virtualClassAttributeWithTwoMeta(self):
+        class Meta1(type):
+            def __dir__(cls):
+                return ['__class__', '__module__', '__name__', 'one']
+            def __getattr__(self, name):
+                if name =='one':
+                    return 1
+                return super().__getattr__(name)
+        class Meta2(type):
+            def __dir__(cls):
+                return ['__class__', '__module__', '__name__', 'two']
+            def __getattr__(self, name):
+                if name =='two':
+                    return 2
+                return super().__getattr__(name)
+        class Meta3(Meta1, Meta2):
+            def __dir__(cls):
+                return list(sorted(set(
+                    ['__class__', '__module__', '__name__', 'three'] +
+                    Meta1.__dir__(cls) + Meta2.__dir__(cls))))
+            def __getattr__(self, name):
+                if name =='three':
+                    return 3
+                return super().__getattr__(name)
+        class Class1(metaclass=Meta1):
+            pass
+        class Class2(Class1, metaclass=Meta3):
+            pass
+        fail1 = fail2 = False
+        output = StringIO()
+        helper = pydoc.Helper(output=output)
+        helper(Class1)
+        expected_text1 = expected_virtualattribute_pattern2 % __name__
+        result1 = output.getvalue().strip()
+        if result1 != expected_text1:
+            print_diffs(expected_text1, result1)
+            fail1 = True
+        output = StringIO()
+        helper = pydoc.Helper(output=output)
+        helper(Class2)
+        expected_text2 = expected_virtualattribute_pattern3 % __name__
+        result2 = output.getvalue().strip()
+        if result2 != expected_text2:
+            print_diffs(expected_text2, result2)
+            fail2 = True
+        if fail1 or fail2:
+            self.fail("outputs are not equal, see diff above")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    @unittest.skipIf(hasattr(sys, 'gettrace') and sys.gettrace(),
+                     'trace function introduces __locals__ unexpectedly')
+    def test_buggy_dir(self):
+        class M(type):
+            def __dir__(cls):
+                return ['__class__', '__name__', 'missing', 'here']
+        class C(metaclass=M):
+            here = 'present!'
+        output = StringIO()
+        helper = pydoc.Helper(output=output)
+        helper(C)
+        expected_text = expected_missingattribute_pattern % __name__
+        result = output.getvalue().strip()
+        if result != expected_text:
+            print_diffs(expected_text, result)
+            self.fail("outputs are not equal, see diff above")
+
 @reap_threads
 def test_main():
     try:
@@ -645,6 +836,7 @@
                                   PydocServerTest,
                                   PydocUrlHandlerTest,
                                   TestHelper,
+                                  PydocWithMetaClasses,
                                   )
     finally:
         reap_children()
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
index 2104437..8d63fac 100644
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -3,10 +3,12 @@
 import io
 import re
 from re import Scanner
+import sre_compile
 import sre_constants
 import sys
 import string
 import traceback
+import unittest
 from weakref import proxy
 
 # Misc tests from Tim Peters' re.doc
@@ -15,10 +17,26 @@
 # what you're doing. Some of these tests were carefully modeled to
 # cover most of the code.
 
-import unittest
+class S(str):
+    def __getitem__(self, index):
+        return S(super().__getitem__(index))
+
+class B(bytes):
+    def __getitem__(self, index):
+        return B(super().__getitem__(index))
 
 class ReTests(unittest.TestCase):
 
+    def assertTypedEqual(self, actual, expect, msg=None):
+        self.assertEqual(actual, expect, msg)
+        def recurse(actual, expect):
+            if isinstance(expect, (tuple, list)):
+                for x, y in zip(actual, expect):
+                    recurse(x, y)
+            else:
+                self.assertIs(type(actual), type(expect), msg)
+        recurse(actual, expect)
+
     def test_keep_buffer(self):
         # See bug 14212
         b = bytearray(b'x')
@@ -53,6 +71,15 @@
         return str(int_value + 1)
 
     def test_basic_re_sub(self):
+        self.assertTypedEqual(re.sub('y', 'a', 'xyz'), 'xaz')
+        self.assertTypedEqual(re.sub('y', S('a'), S('xyz')), 'xaz')
+        self.assertTypedEqual(re.sub(b'y', b'a', b'xyz'), b'xaz')
+        self.assertTypedEqual(re.sub(b'y', B(b'a'), B(b'xyz')), b'xaz')
+        self.assertTypedEqual(re.sub(b'y', bytearray(b'a'), bytearray(b'xyz')), b'xaz')
+        self.assertTypedEqual(re.sub(b'y', memoryview(b'a'), memoryview(b'xyz')), b'xaz')
+        for y in ("\xe0", "\u0430", "\U0001d49c"):
+            self.assertEqual(re.sub(y, 'a', 'x%sz' % y), 'xaz')
+
         self.assertEqual(re.sub("(?i)b+", "x", "bbbb BBBB"), 'x x')
         self.assertEqual(re.sub(r'\d+', self.bump_num, '08.2 -2 23x99y'),
                          '9.3 -3 24x100y')
@@ -210,10 +237,29 @@
         self.assertEqual(re.subn("b*", "x", "xyz", 2), ('xxxyz', 2))
 
     def test_re_split(self):
-        self.assertEqual(re.split(":", ":a:b::c"), ['', 'a', 'b', '', 'c'])
-        self.assertEqual(re.split(":*", ":a:b::c"), ['', 'a', 'b', 'c'])
-        self.assertEqual(re.split("(:*)", ":a:b::c"),
-                         ['', ':', 'a', ':', 'b', '::', 'c'])
+        for string in ":a:b::c", S(":a:b::c"):
+            self.assertTypedEqual(re.split(":", string),
+                                  ['', 'a', 'b', '', 'c'])
+            self.assertTypedEqual(re.split(":*", string),
+                                  ['', 'a', 'b', 'c'])
+            self.assertTypedEqual(re.split("(:*)", string),
+                                  ['', ':', 'a', ':', 'b', '::', 'c'])
+        for string in (b":a:b::c", B(b":a:b::c"), bytearray(b":a:b::c"),
+                       memoryview(b":a:b::c")):
+            self.assertTypedEqual(re.split(b":", string),
+                                  [b'', b'a', b'b', b'', b'c'])
+            self.assertTypedEqual(re.split(b":*", string),
+                                  [b'', b'a', b'b', b'c'])
+            self.assertTypedEqual(re.split(b"(:*)", string),
+                                  [b'', b':', b'a', b':', b'b', b'::', b'c'])
+        for a, b, c in ("\xe0\xdf\xe7", "\u0430\u0431\u0432",
+                        "\U0001d49c\U0001d49e\U0001d4b5"):
+            string = ":%s:%s::%s" % (a, b, c)
+            self.assertEqual(re.split(":", string), ['', a, b, '', c])
+            self.assertEqual(re.split(":*", string), ['', a, b, c])
+            self.assertEqual(re.split("(:*)", string),
+                             ['', ':', a, ':', b, '::', c])
+
         self.assertEqual(re.split("(?::*)", ":a:b::c"), ['', 'a', 'b', 'c'])
         self.assertEqual(re.split("(:)*", ":a:b::c"),
                          ['', ':', 'a', ':', 'b', ':', 'c'])
@@ -235,22 +281,53 @@
 
     def test_re_findall(self):
         self.assertEqual(re.findall(":+", "abc"), [])
-        self.assertEqual(re.findall(":+", "a:b::c:::d"), [":", "::", ":::"])
-        self.assertEqual(re.findall("(:+)", "a:b::c:::d"), [":", "::", ":::"])
-        self.assertEqual(re.findall("(:)(:*)", "a:b::c:::d"), [(":", ""),
-                                                               (":", ":"),
-                                                               (":", "::")])
+        for string in "a:b::c:::d", S("a:b::c:::d"):
+            self.assertTypedEqual(re.findall(":+", string),
+                                  [":", "::", ":::"])
+            self.assertTypedEqual(re.findall("(:+)", string),
+                                  [":", "::", ":::"])
+            self.assertTypedEqual(re.findall("(:)(:*)", string),
+                                  [(":", ""), (":", ":"), (":", "::")])
+        for string in (b"a:b::c:::d", B(b"a:b::c:::d"), bytearray(b"a:b::c:::d"),
+                       memoryview(b"a:b::c:::d")):
+            self.assertTypedEqual(re.findall(b":+", string),
+                                  [b":", b"::", b":::"])
+            self.assertTypedEqual(re.findall(b"(:+)", string),
+                                  [b":", b"::", b":::"])
+            self.assertTypedEqual(re.findall(b"(:)(:*)", string),
+                                  [(b":", b""), (b":", b":"), (b":", b"::")])
+        for x in ("\xe0", "\u0430", "\U0001d49c"):
+            xx = x * 2
+            xxx = x * 3
+            string = "a%sb%sc%sd" % (x, xx, xxx)
+            self.assertEqual(re.findall("%s+" % x, string), [x, xx, xxx])
+            self.assertEqual(re.findall("(%s+)" % x, string), [x, xx, xxx])
+            self.assertEqual(re.findall("(%s)(%s*)" % (x, x), string),
+                             [(x, ""), (x, x), (x, xx)])
 
     def test_bug_117612(self):
         self.assertEqual(re.findall(r"(a|(b))", "aba"),
                          [("a", ""),("b", "b"),("a", "")])
 
     def test_re_match(self):
-        self.assertEqual(re.match('a', 'a').groups(), ())
-        self.assertEqual(re.match('(a)', 'a').groups(), ('a',))
-        self.assertEqual(re.match(r'(a)', 'a').group(0), 'a')
-        self.assertEqual(re.match(r'(a)', 'a').group(1), 'a')
-        self.assertEqual(re.match(r'(a)', 'a').group(1, 1), ('a', 'a'))
+        for string in 'a', S('a'):
+            self.assertEqual(re.match('a', string).groups(), ())
+            self.assertEqual(re.match('(a)', string).groups(), ('a',))
+            self.assertEqual(re.match('(a)', string).group(0), 'a')
+            self.assertEqual(re.match('(a)', string).group(1), 'a')
+            self.assertEqual(re.match('(a)', string).group(1, 1), ('a', 'a'))
+        for string in b'a', B(b'a'), bytearray(b'a'), memoryview(b'a'):
+            self.assertEqual(re.match(b'a', string).groups(), ())
+            self.assertEqual(re.match(b'(a)', string).groups(), (b'a',))
+            self.assertEqual(re.match(b'(a)', string).group(0), b'a')
+            self.assertEqual(re.match(b'(a)', string).group(1), b'a')
+            self.assertEqual(re.match(b'(a)', string).group(1, 1), (b'a', b'a'))
+        for a in ("\xe0", "\u0430", "\U0001d49c"):
+            self.assertEqual(re.match(a, a).groups(), ())
+            self.assertEqual(re.match('(%s)' % a, a).groups(), (a,))
+            self.assertEqual(re.match('(%s)' % a, a).group(0), a)
+            self.assertEqual(re.match('(%s)' % a, a).group(1), a)
+            self.assertEqual(re.match('(%s)' % a, a).group(1, 1), (a, a))
 
         pat = re.compile('((a)|(b))(c)?')
         self.assertEqual(pat.match('a').groups(), ('a', 'a', None, None))
@@ -428,6 +505,9 @@
                                   "\u2222").group(1), "\u2222")
         self.assertEqual(re.match("([\u2222\u2223])",
                                   "\u2222", re.UNICODE).group(1), "\u2222")
+        r = '[%s]' % ''.join(map(chr, range(256, 2**16, 255)))
+        self.assertEqual(re.match(r,
+                                  "\uff01", re.UNICODE).group(), "\uff01")
 
     def test_big_codesize(self):
         # Issue #1160
@@ -1050,6 +1130,28 @@
                 self.assertEqual(re.compile(pattern, re.S).findall(b'xyz'),
                                  [b'xyz'], msg=pattern)
 
+    def test_match_repr(self):
+        for string in '[abracadabra]', S('[abracadabra]'):
+            m = re.search(r'(.+)(.*?)\1', string)
+            self.assertEqual(repr(m), "<%s.%s object; "
+                             "span=(1, 12), match='abracadabra'>" %
+                             (type(m).__module__, type(m).__qualname__))
+        for string in (b'[abracadabra]', B(b'[abracadabra]'),
+                       bytearray(b'[abracadabra]'),
+                       memoryview(b'[abracadabra]')):
+            m = re.search(rb'(.+)(.*?)\1', string)
+            self.assertEqual(repr(m), "<%s.%s object; "
+                             "span=(1, 12), match=b'abracadabra'>" %
+                             (type(m).__module__, type(m).__qualname__))
+
+        first, second = list(re.finditer("(aa)|(bb)", "aa bb"))
+        self.assertEqual(repr(first), "<%s.%s object; "
+                         "span=(0, 2), match='aa'>" %
+                         (type(second).__module__, type(first).__qualname__))
+        self.assertEqual(repr(second), "<%s.%s object; "
+                         "span=(3, 5), match='bb'>" %
+                         (type(second).__module__, type(second).__qualname__))
+
 
     def test_bug_2537(self):
         # issue 2537: empty submatches
@@ -1061,6 +1163,22 @@
                 self.assertEqual(m.group(1), "")
                 self.assertEqual(m.group(2), "y")
 
+
+class ImplementationTest(unittest.TestCase):
+    """
+    Test implementation details of the re module.
+    """
+
+    def test_overlap_table(self):
+        f = sre_compile._generate_overlap_table
+        self.assertEqual(f(""), [])
+        self.assertEqual(f("a"), [0])
+        self.assertEqual(f("abcd"), [0, 0, 0, 0])
+        self.assertEqual(f("aaaa"), [0, 1, 2, 3])
+        self.assertEqual(f("ababba"), [0, 0, 1, 2, 0, 1])
+        self.assertEqual(f("abcabdac"), [0, 0, 0, 1, 2, 0, 1, 0])
+
+
 def run_re_tests():
     from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR
     if verbose:
@@ -1190,7 +1308,7 @@
 
 
 def test_main():
-    run_unittest(ReTests)
+    run_unittest(__name__)
     run_re_tests()
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
index 1bf2a5a..006198f 100644
--- a/Lib/test/test_resource.py
+++ b/Lib/test/test_resource.py
@@ -1,3 +1,6 @@
+import contextlib
+import sys
+import os
 import unittest
 from test import support
 import time
@@ -129,6 +132,27 @@
         self.assertIsInstance(pagesize, int)
         self.assertGreaterEqual(pagesize, 0)
 
+    @unittest.skipUnless(sys.platform == 'linux', 'test requires Linux')
+    def test_linux_constants(self):
+        for attr in ['MSGQUEUE', 'NICE', 'RTPRIO', 'RTTIME', 'SIGPENDING']:
+            with contextlib.suppress(AttributeError):
+                self.assertIsInstance(getattr(resource, 'RLIMIT_' + attr), int)
+
+    @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
+    @support.requires_linux_version(2, 6, 36)
+    def test_prlimit(self):
+        self.assertRaises(TypeError, resource.prlimit)
+        if os.geteuid() != 0:
+            self.assertRaises(PermissionError, resource.prlimit,
+                              1, resource.RLIMIT_AS)
+        self.assertRaises(ProcessLookupError, resource.prlimit,
+                          -1, resource.RLIMIT_AS)
+        limit = resource.getrlimit(resource.RLIMIT_AS)
+        self.assertEqual(resource.prlimit(0, resource.RLIMIT_AS), limit)
+        self.assertEqual(resource.prlimit(0, resource.RLIMIT_AS, limit),
+                         limit)
+
+
 def test_main(verbose=None):
     support.run_unittest(ResourceTest)
 
diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py
index 6ce4d8a..c64c87a 100644
--- a/Lib/test/test_selectors.py
+++ b/Lib/test/test_selectors.py
@@ -6,6 +6,7 @@
 from test import support
 from time import sleep
 import unittest
+import unittest.mock
 try:
     from time import monotonic as time
 except ImportError:
@@ -124,6 +125,15 @@
         # modify unknown file obj
         self.assertRaises(KeyError, s.modify, 999999, selectors.EVENT_READ)
 
+        # modify use a shortcut
+        d3 = object()
+        s.register = unittest.mock.Mock()
+        s.unregister = unittest.mock.Mock()
+
+        s.modify(rd, selectors.EVENT_READ, d3)
+        self.assertFalse(s.register.called)
+        self.assertFalse(s.unregister.called)
+
     def test_close(self):
         s = self.SELECTOR()
         self.addCleanup(s.close)
@@ -153,6 +163,33 @@
         # unknown file obj
         self.assertRaises(KeyError, s.get_key, 999999)
 
+    def test_get_map(self):
+        s = self.SELECTOR()
+        self.addCleanup(s.close)
+
+        rd, wr = socketpair()
+        self.addCleanup(rd.close)
+        self.addCleanup(wr.close)
+
+        keys = s.get_map()
+        self.assertFalse(keys)
+        self.assertEqual(len(keys), 0)
+        self.assertEqual(list(keys), [])
+        key = s.register(rd, selectors.EVENT_READ, "data")
+        self.assertIn(rd, keys)
+        self.assertEqual(key, keys[rd])
+        self.assertEqual(len(keys), 1)
+        self.assertEqual(list(keys), [rd.fileno()])
+        self.assertEqual(list(keys.values()), [key])
+
+        # unknown file obj
+        with self.assertRaises(KeyError):
+            keys[999999]
+
+        # Read-only mapping
+        with self.assertRaises(TypeError):
+            del keys[rd]
+
     def test_select(self):
         s = self.SELECTOR()
         self.addCleanup(s.close)
@@ -264,22 +301,23 @@
         t = time()
         self.assertEqual(1, len(s.select(0)))
         self.assertEqual(1, len(s.select(-1)))
-        self.assertTrue(time() - t < 0.5)
+        self.assertLess(time() - t, 0.5)
 
         s.unregister(wr)
         s.register(rd, selectors.EVENT_READ)
         t = time()
         self.assertFalse(s.select(0))
         self.assertFalse(s.select(-1))
-        self.assertTrue(time() - t < 0.5)
+        self.assertLess(time() - t, 0.5)
 
-        t = time()
+        t0 = time()
         self.assertFalse(s.select(1))
-        self.assertTrue(0.5 < time() - t < 1.5)
+        t1 = time()
+        self.assertTrue(0.5 < t1 - t0 < 1.5, t1 - t0)
 
     @unittest.skipUnless(hasattr(signal, "alarm"),
                          "signal.alarm() required for this test")
-    def test_interrupted_retry(self):
+    def test_select_interrupt(self):
         s = self.SELECTOR()
         self.addCleanup(s.close)
 
diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py
index 13cefec..bfef621 100644
--- a/Lib/test/test_set.py
+++ b/Lib/test/test_set.py
@@ -625,10 +625,10 @@
         myset >= myobj
         self.assertTrue(myobj.le_called)
 
-    # C API test only available in a debug build
-    if hasattr(set, "test_c_api"):
-        def test_c_api(self):
-            self.assertEqual(set().test_c_api(), True)
+    @unittest.skipUnless(hasattr(set, "test_c_api"),
+                         'C API test only available in a debug build')
+    def test_c_api(self):
+        self.assertEqual(set().test_c_api(), True)
 
 class SetSubclass(set):
     pass
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 0fbe078..deb1577 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -195,37 +195,37 @@
         self.assertIn(errors[1][2][1].filename, possible_args)
 
 
-    # See bug #1071513 for why we don't run this on cygwin
-    # and bug #1076467 for why we don't run this as root.
-    if (hasattr(os, 'chmod') and sys.platform[:6] != 'cygwin'
-        and not (hasattr(os, 'geteuid') and os.geteuid() == 0)):
-        def test_on_error(self):
-            self.errorState = 0
-            os.mkdir(TESTFN)
-            self.addCleanup(shutil.rmtree, TESTFN)
+    @unittest.skipUnless(hasattr(os, 'chmod'), 'requires os.chmod()')
+    @unittest.skipIf(sys.platform[:6] == 'cygwin',
+                     "This test can't be run on Cygwin (issue #1071513).")
+    @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0,
+                     "This test can't be run reliably as root (issue #1076467).")
+    def test_on_error(self):
+        self.errorState = 0
+        os.mkdir(TESTFN)
+        self.addCleanup(shutil.rmtree, TESTFN)
 
-            self.child_file_path = os.path.join(TESTFN, 'a')
-            self.child_dir_path = os.path.join(TESTFN, 'b')
-            support.create_empty_file(self.child_file_path)
-            os.mkdir(self.child_dir_path)
-            old_dir_mode = os.stat(TESTFN).st_mode
-            old_child_file_mode = os.stat(self.child_file_path).st_mode
-            old_child_dir_mode = os.stat(self.child_dir_path).st_mode
-            # Make unwritable.
-            new_mode = stat.S_IREAD|stat.S_IEXEC
-            os.chmod(self.child_file_path, new_mode)
-            os.chmod(self.child_dir_path, new_mode)
-            os.chmod(TESTFN, new_mode)
+        self.child_file_path = os.path.join(TESTFN, 'a')
+        self.child_dir_path = os.path.join(TESTFN, 'b')
+        support.create_empty_file(self.child_file_path)
+        os.mkdir(self.child_dir_path)
+        old_dir_mode = os.stat(TESTFN).st_mode
+        old_child_file_mode = os.stat(self.child_file_path).st_mode
+        old_child_dir_mode = os.stat(self.child_dir_path).st_mode
+        # Make unwritable.
+        new_mode = stat.S_IREAD|stat.S_IEXEC
+        os.chmod(self.child_file_path, new_mode)
+        os.chmod(self.child_dir_path, new_mode)
+        os.chmod(TESTFN, new_mode)
 
-            self.addCleanup(os.chmod, TESTFN, old_dir_mode)
-            self.addCleanup(os.chmod, self.child_file_path, old_child_file_mode)
-            self.addCleanup(os.chmod, self.child_dir_path, old_child_dir_mode)
+        self.addCleanup(os.chmod, TESTFN, old_dir_mode)
+        self.addCleanup(os.chmod, self.child_file_path, old_child_file_mode)
+        self.addCleanup(os.chmod, self.child_dir_path, old_child_dir_mode)
 
-            shutil.rmtree(TESTFN, onerror=self.check_args_to_onerror)
-            # Test whether onerror has actually been called.
-            self.assertEqual(self.errorState, 3,
-                             "Expected call to onerror function did not "
-                             "happen.")
+        shutil.rmtree(TESTFN, onerror=self.check_args_to_onerror)
+        # Test whether onerror has actually been called.
+        self.assertEqual(self.errorState, 3,
+                         "Expected call to onerror function did not happen.")
 
     def check_args_to_onerror(self, func, arg, exc):
         # test_rmtree_errors deliberately runs rmtree
@@ -807,38 +807,39 @@
         finally:
             shutil.rmtree(TESTFN, ignore_errors=True)
 
-    if hasattr(os, "mkfifo"):
-        # Issue #3002: copyfile and copytree block indefinitely on named pipes
-        def test_copyfile_named_pipe(self):
-            os.mkfifo(TESTFN)
-            try:
-                self.assertRaises(shutil.SpecialFileError,
-                                  shutil.copyfile, TESTFN, TESTFN2)
-                self.assertRaises(shutil.SpecialFileError,
-                                  shutil.copyfile, __file__, TESTFN)
-            finally:
-                os.remove(TESTFN)
+    # Issue #3002: copyfile and copytree block indefinitely on named pipes
+    @unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()')
+    def test_copyfile_named_pipe(self):
+        os.mkfifo(TESTFN)
+        try:
+            self.assertRaises(shutil.SpecialFileError,
+                                shutil.copyfile, TESTFN, TESTFN2)
+            self.assertRaises(shutil.SpecialFileError,
+                                shutil.copyfile, __file__, TESTFN)
+        finally:
+            os.remove(TESTFN)
 
-        @support.skip_unless_symlink
-        def test_copytree_named_pipe(self):
-            os.mkdir(TESTFN)
+    @unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()')
+    @support.skip_unless_symlink
+    def test_copytree_named_pipe(self):
+        os.mkdir(TESTFN)
+        try:
+            subdir = os.path.join(TESTFN, "subdir")
+            os.mkdir(subdir)
+            pipe = os.path.join(subdir, "mypipe")
+            os.mkfifo(pipe)
             try:
-                subdir = os.path.join(TESTFN, "subdir")
-                os.mkdir(subdir)
-                pipe = os.path.join(subdir, "mypipe")
-                os.mkfifo(pipe)
-                try:
-                    shutil.copytree(TESTFN, TESTFN2)
-                except shutil.Error as e:
-                    errors = e.args[0]
-                    self.assertEqual(len(errors), 1)
-                    src, dst, error_msg = errors[0]
-                    self.assertEqual("`%s` is a named pipe" % pipe, error_msg)
-                else:
-                    self.fail("shutil.Error should have been raised")
-            finally:
-                shutil.rmtree(TESTFN, ignore_errors=True)
-                shutil.rmtree(TESTFN2, ignore_errors=True)
+                shutil.copytree(TESTFN, TESTFN2)
+            except shutil.Error as e:
+                errors = e.args[0]
+                self.assertEqual(len(errors), 1)
+                src, dst, error_msg = errors[0]
+                self.assertEqual("`%s` is a named pipe" % pipe, error_msg)
+            else:
+                self.fail("shutil.Error should have been raised")
+        finally:
+            shutil.rmtree(TESTFN, ignore_errors=True)
+            shutil.rmtree(TESTFN2, ignore_errors=True)
 
     def test_copytree_special_func(self):
 
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 575d65b..cb7c393 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -179,14 +179,20 @@
         rc = subprocess.call([sys.executable, '-s', '-c',
             'import sys; sys.exit(%r in sys.path)' % usersite],
             env=env)
-        self.assertEqual(rc, 0)
+        if usersite == site.getsitepackages()[0]:
+            self.assertEqual(rc, 1)
+        else:
+            self.assertEqual(rc, 0)
 
         env = os.environ.copy()
         env["PYTHONNOUSERSITE"] = "1"
         rc = subprocess.call([sys.executable, '-c',
             'import sys; sys.exit(%r in sys.path)' % usersite],
             env=env)
-        self.assertEqual(rc, 0)
+        if usersite == site.getsitepackages()[0]:
+            self.assertEqual(rc, 1)
+        else:
+            self.assertEqual(rc, 0)
 
         env = os.environ.copy()
         env["PYTHONUSERBASE"] = "/tmp"
@@ -406,6 +412,8 @@
                 self.fail("sitecustomize not imported automatically")
 
     @test.support.requires_resource('network')
+    @unittest.skipUnless(sys.version_info[3] == 'final',
+                         'only for released versions')
     def test_license_exists_at_url(self):
         # This test is a bit fragile since it depends on the format of the
         # string displayed by license in the absence of a LICENSE file.
@@ -420,5 +428,38 @@
         self.assertEqual(code, 200, msg="Can't find " + url)
 
 
+class StartupImportTests(unittest.TestCase):
+
+    def test_startup_imports(self):
+        # This tests checks which modules are loaded by Python when it
+        # initially starts upon startup.
+        popen = subprocess.Popen([sys.executable, '-I', '-v', '-c',
+                                  'import sys; print(set(sys.modules))'],
+                                 stdout=subprocess.PIPE,
+                                 stderr=subprocess.PIPE)
+        stdout, stderr = popen.communicate()
+        stdout = stdout.decode('utf-8')
+        stderr = stderr.decode('utf-8')
+        modules = eval(stdout)
+
+        self.assertIn('site', modules)
+
+        # http://bugs.python.org/issue19205
+        re_mods = {'re', '_sre', 'sre_compile', 'sre_constants', 'sre_parse'}
+        # _osx_support uses the re module in many placs
+        if sys.platform != 'darwin':
+            self.assertFalse(modules.intersection(re_mods), stderr)
+        # http://bugs.python.org/issue9548
+        self.assertNotIn('locale', modules, stderr)
+        if sys.platform != 'darwin':
+            # http://bugs.python.org/issue19209
+            self.assertNotIn('copyreg', modules, stderr)
+        # http://bugs.python.org/issue19218>
+        collection_mods = {'_collections', 'collections', 'functools',
+                           'heapq', 'itertools', 'keyword', 'operator',
+                           'reprlib', 'types', 'weakref'}
+        self.assertFalse(modules.intersection(collection_mods), stderr)
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py
index a501f40..e6f39de 100644
--- a/Lib/test/test_smtplib.py
+++ b/Lib/test/test_smtplib.py
@@ -819,6 +819,15 @@
             self.assertIn(sim_auth_credentials['cram-md5'], str(err))
         smtp.close()
 
+    def testAUTH_multiple(self):
+        # Test that multiple authentication methods are tried.
+        self.serv.add_feature("AUTH BOGUS PLAIN LOGIN CRAM-MD5")
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        try: smtp.login(sim_auth[0], sim_auth[1])
+        except smtplib.SMTPAuthenticationError as err:
+            self.assertIn(sim_auth_login_password, str(err))
+        smtp.close()
+
     def test_with_statement(self):
         with smtplib.SMTP(HOST, self.port) as smtp:
             code, message = smtp.noop()
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index e995c99..a7c2516 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -817,16 +817,17 @@
         self.assertRaises(TypeError, socket.if_nametoindex, 0)
         self.assertRaises(TypeError, socket.if_indextoname, '_DEADBEEF')
 
+    @unittest.skipUnless(hasattr(sys, 'getrefcount'),
+                         'test needs sys.getrefcount()')
     def testRefCountGetNameInfo(self):
         # Testing reference count for getnameinfo
-        if hasattr(sys, "getrefcount"):
-            try:
-                # On some versions, this loses a reference
-                orig = sys.getrefcount(__name__)
-                socket.getnameinfo(__name__,0)
-            except TypeError:
-                if sys.getrefcount(__name__) != orig:
-                    self.fail("socket.getnameinfo loses a reference")
+        try:
+            # On some versions, this loses a reference
+            orig = sys.getrefcount(__name__)
+            socket.getnameinfo(__name__,0)
+        except TypeError:
+            if sys.getrefcount(__name__) != orig:
+                self.fail("socket.getnameinfo loses a reference")
 
     def testInterpreterCrash(self):
         # Making sure getnameinfo doesn't crash the interpreter
@@ -931,17 +932,17 @@
         # Check that setting it to an invalid type raises TypeError
         self.assertRaises(TypeError, socket.setdefaulttimeout, "spam")
 
+    @unittest.skipUnless(hasattr(socket, 'inet_aton'),
+                         'test needs socket.inet_aton()')
     def testIPv4_inet_aton_fourbytes(self):
-        if not hasattr(socket, 'inet_aton'):
-            return  # No inet_aton, nothing to check
         # Test that issue1008086 and issue767150 are fixed.
         # It must return 4 bytes.
         self.assertEqual(b'\x00'*4, socket.inet_aton('0.0.0.0'))
         self.assertEqual(b'\xff'*4, socket.inet_aton('255.255.255.255'))
 
+    @unittest.skipUnless(hasattr(socket, 'inet_pton'),
+                         'test needs socket.inet_pton()')
     def testIPv4toString(self):
-        if not hasattr(socket, 'inet_pton'):
-            return # No inet_pton() on this platform
         from socket import inet_aton as f, inet_pton, AF_INET
         g = lambda a: inet_pton(AF_INET, a)
 
@@ -970,15 +971,23 @@
         assertInvalid(g, '1.2.3.4.5')
         assertInvalid(g, '::1')
 
+    @unittest.skipUnless(hasattr(socket, 'inet_pton'),
+                         'test needs socket.inet_pton()')
     def testIPv6toString(self):
-        if not hasattr(socket, 'inet_pton'):
-            return # No inet_pton() on this platform
         try:
             from socket import inet_pton, AF_INET6, has_ipv6
             if not has_ipv6:
                 return
         except ImportError:
             return
+
+        if sys.platform == "win32":
+            try:
+                inet_pton(AF_INET6, '::')
+            except OSError as e:
+                if e.winerror == 10022:
+                    return # IPv6 might not be installed on this PC
+
         f = lambda a: inet_pton(AF_INET6, a)
         assertInvalid = lambda a: self.assertRaises(
             (OSError, ValueError), f, a
@@ -1024,9 +1033,9 @@
         assertInvalid('::1.2.3.4:0')
         assertInvalid('0.100.200.0:3:4:5:6:7:8')
 
+    @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
+                         'test needs socket.inet_ntop()')
     def testStringToIPv4(self):
-        if not hasattr(socket, 'inet_ntop'):
-            return # No inet_ntop() on this platform
         from socket import inet_ntoa as f, inet_ntop, AF_INET
         g = lambda a: inet_ntop(AF_INET, a)
         assertInvalid = lambda func,a: self.assertRaises(
@@ -1048,15 +1057,23 @@
         assertInvalid(g, b'\x00' * 5)
         assertInvalid(g, b'\x00' * 16)
 
+    @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
+                         'test needs socket.inet_ntop()')
     def testStringToIPv6(self):
-        if not hasattr(socket, 'inet_ntop'):
-            return # No inet_ntop() on this platform
         try:
             from socket import inet_ntop, AF_INET6, has_ipv6
             if not has_ipv6:
                 return
         except ImportError:
             return
+
+        if sys.platform == "win32":
+            try:
+                inet_ntop(AF_INET6, b'\x00' * 16)
+            except OSError as e:
+                if e.winerror == 10022:
+                    return # IPv6 might not be installed on this PC
+
         f = lambda a: inet_ntop(AF_INET6, a)
         assertInvalid = lambda a: self.assertRaises(
             (OSError, ValueError), f, a
@@ -3660,6 +3677,8 @@
         self.cli.connect((HOST, self.port))
         time.sleep(1.0)
 
+@unittest.skipUnless(hasattr(socket, 'socketpair'),
+                     'test needs socket.socketpair()')
 @unittest.skipUnless(thread, 'Threading required for this test.')
 class BasicSocketPairTest(SocketPairTest):
 
@@ -3722,26 +3741,27 @@
     def _testSetBlocking(self):
         pass
 
-    if hasattr(socket, "SOCK_NONBLOCK"):
-        @support.requires_linux_version(2, 6, 28)
-        def testInitNonBlocking(self):
-            # reinit server socket
-            self.serv.close()
-            self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM |
-                                                      socket.SOCK_NONBLOCK)
-            self.port = support.bind_port(self.serv)
-            self.serv.listen(1)
-            # actual testing
-            start = time.time()
-            try:
-                self.serv.accept()
-            except OSError:
-                pass
-            end = time.time()
-            self.assertTrue((end - start) < 1.0, "Error creating with non-blocking mode.")
-
-        def _testInitNonBlocking(self):
+    @unittest.skipUnless(hasattr(socket, 'SOCK_NONBLOCK'),
+                         'test needs socket.SOCK_NONBLOCK')
+    @support.requires_linux_version(2, 6, 28)
+    def testInitNonBlocking(self):
+        # reinit server socket
+        self.serv.close()
+        self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM |
+                                                  socket.SOCK_NONBLOCK)
+        self.port = support.bind_port(self.serv)
+        self.serv.listen(1)
+        # actual testing
+        start = time.time()
+        try:
+            self.serv.accept()
+        except OSError:
             pass
+        end = time.time()
+        self.assertTrue((end - start) < 1.0, "Error creating with non-blocking mode.")
+
+    def _testInitNonBlocking(self):
+        pass
 
     def testInheritFlags(self):
         # Issue #7995: when calling accept() on a listening socket with a
@@ -4431,12 +4451,12 @@
         if not ok:
             self.fail("accept() returned success when we did not expect it")
 
+    @unittest.skipUnless(hasattr(signal, 'alarm'),
+                         'test needs signal.alarm()')
     def testInterruptedTimeout(self):
         # XXX I don't know how to do this test on MSWindows or any other
         # plaform that doesn't support signal.alarm() or os.kill(), though
         # the bug should have existed on all platforms.
-        if not hasattr(signal, "alarm"):
-            return                  # can only test on *nix
         self.serv.settimeout(5.0)   # must be longer than alarm
         class Alarm(Exception):
             pass
@@ -4496,6 +4516,7 @@
         self.assertTrue(issubclass(socket.gaierror, OSError))
         self.assertTrue(issubclass(socket.timeout, OSError))
 
+@unittest.skipUnless(sys.platform == 'linux', 'Linux specific test')
 class TestLinuxAbstractNamespace(unittest.TestCase):
 
     UNIX_PATH_MAX = 108
@@ -4531,6 +4552,7 @@
         finally:
             s.close()
 
+@unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'test needs socket.AF_UNIX')
 class TestUnixDomain(unittest.TestCase):
 
     def setUp(self):
@@ -4680,10 +4702,10 @@
         for line in f:
             if line.startswith("tipc "):
                 return True
-    if support.verbose:
-        print("TIPC module is not loaded, please 'sudo modprobe tipc'")
     return False
 
+@unittest.skipUnless(isTipcAvailable(),
+                     "TIPC module is not loaded, please 'sudo modprobe tipc'")
 class TIPCTest(unittest.TestCase):
     def testRDM(self):
         srv = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
@@ -4706,6 +4728,8 @@
         self.assertEqual(msg, MSG)
 
 
+@unittest.skipUnless(isTipcAvailable(),
+                     "TIPC module is not loaded, please 'sudo modprobe tipc'")
 class TIPCThreadableTest(unittest.TestCase, ThreadableTest):
     def __init__(self, methodName = 'runTest'):
         unittest.TestCase.__init__(self, methodName = methodName)
@@ -5028,15 +5052,10 @@
         InheritanceTest,
         NonblockConstantTest
     ])
-    if hasattr(socket, "socketpair"):
-        tests.append(BasicSocketPairTest)
-    if hasattr(socket, "AF_UNIX"):
-        tests.append(TestUnixDomain)
-    if sys.platform == 'linux':
-        tests.append(TestLinuxAbstractNamespace)
-    if isTipcAvailable():
-        tests.append(TIPCTest)
-        tests.append(TIPCThreadableTest)
+    tests.append(BasicSocketPairTest)
+    tests.append(TestUnixDomain)
+    tests.append(TestLinuxAbstractNamespace)
+    tests.extend([TIPCTest, TIPCThreadableTest])
     tests.extend([BasicCANTest, CANTest])
     tests.extend([BasicRDSTest, RDSTest])
     tests.extend([
diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py
index 02c6c1e..0617b30 100644
--- a/Lib/test/test_socketserver.py
+++ b/Lib/test/test_socketserver.py
@@ -27,7 +27,10 @@
 HOST = test.support.HOST
 
 HAVE_UNIX_SOCKETS = hasattr(socket, "AF_UNIX")
+requires_unix_sockets = unittest.skipUnless(HAVE_UNIX_SOCKETS,
+                                            'requires Unix sockets')
 HAVE_FORKING = hasattr(os, "fork")
+requires_forking = unittest.skipUnless(HAVE_FORKING, 'requires forking')
 
 def signal_alarm(n):
     """Call signal.alarm when it exists (i.e. not on Windows)."""
@@ -175,31 +178,33 @@
                         socketserver.StreamRequestHandler,
                         self.stream_examine)
 
-    if HAVE_FORKING:
-        def test_ForkingTCPServer(self):
-            with simple_subprocess(self):
-                self.run_server(socketserver.ForkingTCPServer,
-                                socketserver.StreamRequestHandler,
-                                self.stream_examine)
-
-    if HAVE_UNIX_SOCKETS:
-        def test_UnixStreamServer(self):
-            self.run_server(socketserver.UnixStreamServer,
+    @requires_forking
+    def test_ForkingTCPServer(self):
+        with simple_subprocess(self):
+            self.run_server(socketserver.ForkingTCPServer,
                             socketserver.StreamRequestHandler,
                             self.stream_examine)
 
-        def test_ThreadingUnixStreamServer(self):
-            self.run_server(socketserver.ThreadingUnixStreamServer,
+    @requires_unix_sockets
+    def test_UnixStreamServer(self):
+        self.run_server(socketserver.UnixStreamServer,
+                        socketserver.StreamRequestHandler,
+                        self.stream_examine)
+
+    @requires_unix_sockets
+    def test_ThreadingUnixStreamServer(self):
+        self.run_server(socketserver.ThreadingUnixStreamServer,
+                        socketserver.StreamRequestHandler,
+                        self.stream_examine)
+
+    @requires_unix_sockets
+    @requires_forking
+    def test_ForkingUnixStreamServer(self):
+        with simple_subprocess(self):
+            self.run_server(ForkingUnixStreamServer,
                             socketserver.StreamRequestHandler,
                             self.stream_examine)
 
-        if HAVE_FORKING:
-            def test_ForkingUnixStreamServer(self):
-                with simple_subprocess(self):
-                    self.run_server(ForkingUnixStreamServer,
-                                    socketserver.StreamRequestHandler,
-                                    self.stream_examine)
-
     def test_UDPServer(self):
         self.run_server(socketserver.UDPServer,
                         socketserver.DatagramRequestHandler,
@@ -210,12 +215,12 @@
                         socketserver.DatagramRequestHandler,
                         self.dgram_examine)
 
-    if HAVE_FORKING:
-        def test_ForkingUDPServer(self):
-            with simple_subprocess(self):
-                self.run_server(socketserver.ForkingUDPServer,
-                                socketserver.DatagramRequestHandler,
-                                self.dgram_examine)
+    @requires_forking
+    def test_ForkingUDPServer(self):
+        with simple_subprocess(self):
+            self.run_server(socketserver.ForkingUDPServer,
+                            socketserver.DatagramRequestHandler,
+                            self.dgram_examine)
 
     @contextlib.contextmanager
     def mocked_select_module(self):
@@ -252,22 +257,24 @@
     # Alas, on Linux (at least) recvfrom() doesn't return a meaningful
     # client address so this cannot work:
 
-    # if HAVE_UNIX_SOCKETS:
-    #     def test_UnixDatagramServer(self):
-    #         self.run_server(socketserver.UnixDatagramServer,
-    #                         socketserver.DatagramRequestHandler,
-    #                         self.dgram_examine)
+    # @requires_unix_sockets
+    # def test_UnixDatagramServer(self):
+    #     self.run_server(socketserver.UnixDatagramServer,
+    #                     socketserver.DatagramRequestHandler,
+    #                     self.dgram_examine)
     #
-    #     def test_ThreadingUnixDatagramServer(self):
-    #         self.run_server(socketserver.ThreadingUnixDatagramServer,
-    #                         socketserver.DatagramRequestHandler,
-    #                         self.dgram_examine)
+    # @requires_unix_sockets
+    # def test_ThreadingUnixDatagramServer(self):
+    #     self.run_server(socketserver.ThreadingUnixDatagramServer,
+    #                     socketserver.DatagramRequestHandler,
+    #                     self.dgram_examine)
     #
-    #     if HAVE_FORKING:
-    #         def test_ForkingUnixDatagramServer(self):
-    #             self.run_server(socketserver.ForkingUnixDatagramServer,
-    #                             socketserver.DatagramRequestHandler,
-    #                             self.dgram_examine)
+    # @requires_unix_sockets
+    # @requires_forking
+    # def test_ForkingUnixDatagramServer(self):
+    #     self.run_server(socketserver.ForkingUnixDatagramServer,
+    #                     socketserver.DatagramRequestHandler,
+    #                     self.dgram_examine)
 
     @reap_threads
     def test_shutdown(self):
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index 2605e68..b1cb8c5 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -358,11 +358,7 @@
         fail(cert, 'Xa.com')
         fail(cert, '.a.com')
 
-        cert = {'subject': ((('commonName', 'a.*.com'),),)}
-        ok(cert, 'a.foo.com')
-        fail(cert, 'a..com')
-        fail(cert, 'a.com')
-
+        # only match one left-most wildcard
         cert = {'subject': ((('commonName', 'f*.com'),),)}
         ok(cert, 'foo.com')
         ok(cert, 'f.com')
@@ -377,6 +373,36 @@
         fail(cert, 'example.org')
         fail(cert, 'null.python.org')
 
+        # error cases with wildcards
+        cert = {'subject': ((('commonName', '*.*.a.com'),),)}
+        fail(cert, 'bar.foo.a.com')
+        fail(cert, 'a.com')
+        fail(cert, 'Xa.com')
+        fail(cert, '.a.com')
+
+        cert = {'subject': ((('commonName', 'a.*.com'),),)}
+        fail(cert, 'a.foo.com')
+        fail(cert, 'a..com')
+        fail(cert, 'a.com')
+
+        # wildcard doesn't match IDNA prefix 'xn--'
+        idna = 'püthon.python.org'.encode("idna").decode("ascii")
+        cert = {'subject': ((('commonName', idna),),)}
+        ok(cert, idna)
+        cert = {'subject': ((('commonName', 'x*.python.org'),),)}
+        fail(cert, idna)
+        cert = {'subject': ((('commonName', 'xn--p*.python.org'),),)}
+        fail(cert, idna)
+
+        # wildcard in first fragment and  IDNA A-labels in sequent fragments
+        # are supported.
+        idna = 'www*.pythön.org'.encode("idna").decode("ascii")
+        cert = {'subject': ((('commonName', idna),),)}
+        ok(cert, 'www.pythön.org'.encode("idna").decode("ascii"))
+        ok(cert, 'www1.pythön.org'.encode("idna").decode("ascii"))
+        fail(cert, 'ftp.pythön.org'.encode("idna").decode("ascii"))
+        fail(cert, 'pythön.org'.encode("idna").decode("ascii"))
+
         # Slightly fake real-world example
         cert = {'notAfter': 'Jun 26 21:41:46 2011 GMT',
                 'subject': ((('commonName', 'linuxfrz.org'),),),
@@ -437,7 +463,7 @@
         cert = {'subject': ((('commonName', 'a*b.com'),),)}
         ok(cert, 'axxb.com')
         cert = {'subject': ((('commonName', 'a*b.co*'),),)}
-        ok(cert, 'axxb.com')
+        fail(cert, 'axxb.com')
         cert = {'subject': ((('commonName', 'a*b*.com'),),)}
         with self.assertRaises(ssl.CertificateError) as cm:
             ssl.match_hostname(cert, 'axxbxxc.com')
diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py
new file mode 100644
index 0000000..71b3654
--- /dev/null
+++ b/Lib/test/test_statistics.py
@@ -0,0 +1,1534 @@
+"""Test suite for statistics module, including helper NumericTestCase and
+approx_equal function.
+
+"""
+
+import collections
+import decimal
+import doctest
+import math
+import random
+import types
+import unittest
+
+from decimal import Decimal
+from fractions import Fraction
+
+
+# Module to be tested.
+import statistics
+
+
+# === Helper functions and class ===
+
+def _calc_errors(actual, expected):
+    """Return the absolute and relative errors between two numbers.
+
+    >>> _calc_errors(100, 75)
+    (25, 0.25)
+    >>> _calc_errors(100, 100)
+    (0, 0.0)
+
+    Returns the (absolute error, relative error) between the two arguments.
+    """
+    base = max(abs(actual), abs(expected))
+    abs_err = abs(actual - expected)
+    rel_err = abs_err/base if base else float('inf')
+    return (abs_err, rel_err)
+
+
+def approx_equal(x, y, tol=1e-12, rel=1e-7):
+    """approx_equal(x, y [, tol [, rel]]) => True|False
+
+    Return True if numbers x and y are approximately equal, to within some
+    margin of error, otherwise return False. Numbers which compare equal
+    will also compare approximately equal.
+
+    x is approximately equal to y if the difference between them is less than
+    an absolute error tol or a relative error rel, whichever is bigger.
+
+    If given, both tol and rel must be finite, non-negative numbers. If not
+    given, default values are tol=1e-12 and rel=1e-7.
+
+    >>> approx_equal(1.2589, 1.2587, tol=0.0003, rel=0)
+    True
+    >>> approx_equal(1.2589, 1.2587, tol=0.0001, rel=0)
+    False
+
+    Absolute error is defined as abs(x-y); if that is less than or equal to
+    tol, x and y are considered approximately equal.
+
+    Relative error is defined as abs((x-y)/x) or abs((x-y)/y), whichever is
+    smaller, provided x or y are not zero. If that figure is less than or
+    equal to rel, x and y are considered approximately equal.
+
+    Complex numbers are not directly supported. If you wish to compare to
+    complex numbers, extract their real and imaginary parts and compare them
+    individually.
+
+    NANs always compare unequal, even with themselves. Infinities compare
+    approximately equal if they have the same sign (both positive or both
+    negative). Infinities with different signs compare unequal; so do
+    comparisons of infinities with finite numbers.
+    """
+    if tol < 0 or rel < 0:
+        raise ValueError('error tolerances must be non-negative')
+    # NANs are never equal to anything, approximately or otherwise.
+    if math.isnan(x) or math.isnan(y):
+        return False
+    # Numbers which compare equal also compare approximately equal.
+    if x == y:
+        # This includes the case of two infinities with the same sign.
+        return True
+    if math.isinf(x) or math.isinf(y):
+        # This includes the case of two infinities of opposite sign, or
+        # one infinity and one finite number.
+        return False
+    # Two finite numbers.
+    actual_error = abs(x - y)
+    allowed_error = max(tol, rel*max(abs(x), abs(y)))
+    return actual_error <= allowed_error
+
+
+# This class exists only as somewhere to stick a docstring containing
+# doctests. The following docstring and tests were originally in a separate
+# module. Now that it has been merged in here, I need somewhere to hang the.
+# docstring. Ultimately, this class will die, and the information below will
+# either become redundant, or be moved into more appropriate places.
+class _DoNothing:
+    """
+    When doing numeric work, especially with floats, exact equality is often
+    not what you want. Due to round-off error, it is often a bad idea to try
+    to compare floats with equality. Instead the usual procedure is to test
+    them with some (hopefully small!) allowance for error.
+
+    The ``approx_equal`` function allows you to specify either an absolute
+    error tolerance, or a relative error, or both.
+
+    Absolute error tolerances are simple, but you need to know the magnitude
+    of the quantities being compared:
+
+    >>> approx_equal(12.345, 12.346, tol=1e-3)
+    True
+    >>> approx_equal(12.345e6, 12.346e6, tol=1e-3)  # tol is too small.
+    False
+
+    Relative errors are more suitable when the values you are comparing can
+    vary in magnitude:
+
+    >>> approx_equal(12.345, 12.346, rel=1e-4)
+    True
+    >>> approx_equal(12.345e6, 12.346e6, rel=1e-4)
+    True
+
+    but a naive implementation of relative error testing can run into trouble
+    around zero.
+
+    If you supply both an absolute tolerance and a relative error, the
+    comparison succeeds if either individual test succeeds:
+
+    >>> approx_equal(12.345e6, 12.346e6, tol=1e-3, rel=1e-4)
+    True
+
+    """
+    pass
+
+
+
+# We prefer this for testing numeric values that may not be exactly equal,
+# and avoid using TestCase.assertAlmostEqual, because it sucks :-)
+
+class NumericTestCase(unittest.TestCase):
+    """Unit test class for numeric work.
+
+    This subclasses TestCase. In addition to the standard method
+    ``TestCase.assertAlmostEqual``,  ``assertApproxEqual`` is provided.
+    """
+    # By default, we expect exact equality, unless overridden.
+    tol = rel = 0
+
+    def assertApproxEqual(
+            self, first, second, tol=None, rel=None, msg=None
+            ):
+        """Test passes if ``first`` and ``second`` are approximately equal.
+
+        This test passes if ``first`` and ``second`` are equal to
+        within ``tol``, an absolute error, or ``rel``, a relative error.
+
+        If either ``tol`` or ``rel`` are None or not given, they default to
+        test attributes of the same name (by default, 0).
+
+        The objects may be either numbers, or sequences of numbers. Sequences
+        are tested element-by-element.
+
+        >>> class MyTest(NumericTestCase):
+        ...     def test_number(self):
+        ...         x = 1.0/6
+        ...         y = sum([x]*6)
+        ...         self.assertApproxEqual(y, 1.0, tol=1e-15)
+        ...     def test_sequence(self):
+        ...         a = [1.001, 1.001e-10, 1.001e10]
+        ...         b = [1.0, 1e-10, 1e10]
+        ...         self.assertApproxEqual(a, b, rel=1e-3)
+        ...
+        >>> import unittest
+        >>> from io import StringIO  # Suppress test runner output.
+        >>> suite = unittest.TestLoader().loadTestsFromTestCase(MyTest)
+        >>> unittest.TextTestRunner(stream=StringIO()).run(suite)
+        <unittest.runner.TextTestResult run=2 errors=0 failures=0>
+
+        """
+        if tol is None:
+            tol = self.tol
+        if rel is None:
+            rel = self.rel
+        if (
+                isinstance(first, collections.Sequence) and
+                isinstance(second, collections.Sequence)
+            ):
+            check = self._check_approx_seq
+        else:
+            check = self._check_approx_num
+        check(first, second, tol, rel, msg)
+
+    def _check_approx_seq(self, first, second, tol, rel, msg):
+        if len(first) != len(second):
+            standardMsg = (
+                "sequences differ in length: %d items != %d items"
+                % (len(first), len(second))
+                )
+            msg = self._formatMessage(msg, standardMsg)
+            raise self.failureException(msg)
+        for i, (a,e) in enumerate(zip(first, second)):
+            self._check_approx_num(a, e, tol, rel, msg, i)
+
+    def _check_approx_num(self, first, second, tol, rel, msg, idx=None):
+        if approx_equal(first, second, tol, rel):
+            # Test passes. Return early, we are done.
+            return None
+        # Otherwise we failed.
+        standardMsg = self._make_std_err_msg(first, second, tol, rel, idx)
+        msg = self._formatMessage(msg, standardMsg)
+        raise self.failureException(msg)
+
+    @staticmethod
+    def _make_std_err_msg(first, second, tol, rel, idx):
+        # Create the standard error message for approx_equal failures.
+        assert first != second
+        template = (
+            '  %r != %r\n'
+            '  values differ by more than tol=%r and rel=%r\n'
+            '  -> absolute error = %r\n'
+            '  -> relative error = %r'
+            )
+        if idx is not None:
+            header = 'numeric sequences first differ at index %d.\n' % idx
+            template = header + template
+        # Calculate actual errors:
+        abs_err, rel_err = _calc_errors(first, second)
+        return template % (first, second, tol, rel, abs_err, rel_err)
+
+
+# ========================
+# === Test the helpers ===
+# ========================
+
+
+# --- Tests for approx_equal ---
+
+class ApproxEqualSymmetryTest(unittest.TestCase):
+    # Test symmetry of approx_equal.
+
+    def test_relative_symmetry(self):
+        # Check that approx_equal treats relative error symmetrically.
+        # (a-b)/a is usually not equal to (a-b)/b. Ensure that this
+        # doesn't matter.
+        #
+        #   Note: the reason for this test is that an early version
+        #   of approx_equal was not symmetric. A relative error test
+        #   would pass, or fail, depending on which value was passed
+        #   as the first argument.
+        #
+        args1 = [2456, 37.8, -12.45, Decimal('2.54'), Fraction(17, 54)]
+        args2 = [2459, 37.2, -12.41, Decimal('2.59'), Fraction(15, 54)]
+        assert len(args1) == len(args2)
+        for a, b in zip(args1, args2):
+            self.do_relative_symmetry(a, b)
+
+    def do_relative_symmetry(self, a, b):
+        a, b = min(a, b), max(a, b)
+        assert a < b
+        delta = b - a  # The absolute difference between the values.
+        rel_err1, rel_err2 = abs(delta/a), abs(delta/b)
+        # Choose an error margin halfway between the two.
+        rel = (rel_err1 + rel_err2)/2
+        # Now see that values a and b compare approx equal regardless of
+        # which is given first.
+        self.assertTrue(approx_equal(a, b, tol=0, rel=rel))
+        self.assertTrue(approx_equal(b, a, tol=0, rel=rel))
+
+    def test_symmetry(self):
+        # Test that approx_equal(a, b) == approx_equal(b, a)
+        args = [-23, -2, 5, 107, 93568]
+        delta = 2
+        for x in args:
+            for type_ in (int, float, Decimal, Fraction):
+                x = type_(x)*100
+                y = x + delta
+                r = abs(delta/max(x, y))
+                # There are five cases to check:
+                # 1) actual error <= tol, <= rel
+                self.do_symmetry_test(x, y, tol=delta, rel=r)
+                self.do_symmetry_test(x, y, tol=delta+1, rel=2*r)
+                # 2) actual error > tol, > rel
+                self.do_symmetry_test(x, y, tol=delta-1, rel=r/2)
+                # 3) actual error <= tol, > rel
+                self.do_symmetry_test(x, y, tol=delta, rel=r/2)
+                # 4) actual error > tol, <= rel
+                self.do_symmetry_test(x, y, tol=delta-1, rel=r)
+                self.do_symmetry_test(x, y, tol=delta-1, rel=2*r)
+                # 5) exact equality test
+                self.do_symmetry_test(x, x, tol=0, rel=0)
+                self.do_symmetry_test(x, y, tol=0, rel=0)
+
+    def do_symmetry_test(self, a, b, tol, rel):
+        template = "approx_equal comparisons don't match for %r"
+        flag1 = approx_equal(a, b, tol, rel)
+        flag2 = approx_equal(b, a, tol, rel)
+        self.assertEqual(flag1, flag2, template.format((a, b, tol, rel)))
+
+
+class ApproxEqualExactTest(unittest.TestCase):
+    # Test the approx_equal function with exactly equal values.
+    # Equal values should compare as approximately equal.
+    # Test cases for exactly equal values, which should compare approx
+    # equal regardless of the error tolerances given.
+
+    def do_exactly_equal_test(self, x, tol, rel):
+        result = approx_equal(x, x, tol=tol, rel=rel)
+        self.assertTrue(result, 'equality failure for x=%r' % x)
+        result = approx_equal(-x, -x, tol=tol, rel=rel)
+        self.assertTrue(result, 'equality failure for x=%r' % -x)
+
+    def test_exactly_equal_ints(self):
+        # Test that equal int values are exactly equal.
+        for n in [42, 19740, 14974, 230, 1795, 700245, 36587]:
+            self.do_exactly_equal_test(n, 0, 0)
+
+    def test_exactly_equal_floats(self):
+        # Test that equal float values are exactly equal.
+        for x in [0.42, 1.9740, 1497.4, 23.0, 179.5, 70.0245, 36.587]:
+            self.do_exactly_equal_test(x, 0, 0)
+
+    def test_exactly_equal_fractions(self):
+        # Test that equal Fraction values are exactly equal.
+        F = Fraction
+        for f in [F(1, 2), F(0), F(5, 3), F(9, 7), F(35, 36), F(3, 7)]:
+            self.do_exactly_equal_test(f, 0, 0)
+
+    def test_exactly_equal_decimals(self):
+        # Test that equal Decimal values are exactly equal.
+        D = Decimal
+        for d in map(D, "8.2 31.274 912.04 16.745 1.2047".split()):
+            self.do_exactly_equal_test(d, 0, 0)
+
+    def test_exactly_equal_absolute(self):
+        # Test that equal values are exactly equal with an absolute error.
+        for n in [16, 1013, 1372, 1198, 971, 4]:
+            # Test as ints.
+            self.do_exactly_equal_test(n, 0.01, 0)
+            # Test as floats.
+            self.do_exactly_equal_test(n/10, 0.01, 0)
+            # Test as Fractions.
+            f = Fraction(n, 1234)
+            self.do_exactly_equal_test(f, 0.01, 0)
+
+    def test_exactly_equal_absolute_decimals(self):
+        # Test equal Decimal values are exactly equal with an absolute error.
+        self.do_exactly_equal_test(Decimal("3.571"), Decimal("0.01"), 0)
+        self.do_exactly_equal_test(-Decimal("81.3971"), Decimal("0.01"), 0)
+
+    def test_exactly_equal_relative(self):
+        # Test that equal values are exactly equal with a relative error.
+        for x in [8347, 101.3, -7910.28, Fraction(5, 21)]:
+            self.do_exactly_equal_test(x, 0, 0.01)
+        self.do_exactly_equal_test(Decimal("11.68"), 0, Decimal("0.01"))
+
+    def test_exactly_equal_both(self):
+        # Test that equal values are equal when both tol and rel are given.
+        for x in [41017, 16.742, -813.02, Fraction(3, 8)]:
+            self.do_exactly_equal_test(x, 0.1, 0.01)
+        D = Decimal
+        self.do_exactly_equal_test(D("7.2"), D("0.1"), D("0.01"))
+
+
+class ApproxEqualUnequalTest(unittest.TestCase):
+    # Unequal values should compare unequal with zero error tolerances.
+    # Test cases for unequal values, with exact equality test.
+
+    def do_exactly_unequal_test(self, x):
+        for a in (x, -x):
+            result = approx_equal(a, a+1, tol=0, rel=0)
+            self.assertFalse(result, 'inequality failure for x=%r' % a)
+
+    def test_exactly_unequal_ints(self):
+        # Test unequal int values are unequal with zero error tolerance.
+        for n in [951, 572305, 478, 917, 17240]:
+            self.do_exactly_unequal_test(n)
+
+    def test_exactly_unequal_floats(self):
+        # Test unequal float values are unequal with zero error tolerance.
+        for x in [9.51, 5723.05, 47.8, 9.17, 17.24]:
+            self.do_exactly_unequal_test(x)
+
+    def test_exactly_unequal_fractions(self):
+        # Test that unequal Fractions are unequal with zero error tolerance.
+        F = Fraction
+        for f in [F(1, 5), F(7, 9), F(12, 11), F(101, 99023)]:
+            self.do_exactly_unequal_test(f)
+
+    def test_exactly_unequal_decimals(self):
+        # Test that unequal Decimals are unequal with zero error tolerance.
+        for d in map(Decimal, "3.1415 298.12 3.47 18.996 0.00245".split()):
+            self.do_exactly_unequal_test(d)
+
+
+class ApproxEqualInexactTest(unittest.TestCase):
+    # Inexact test cases for approx_error.
+    # Test cases when comparing two values that are not exactly equal.
+
+    # === Absolute error tests ===
+
+    def do_approx_equal_abs_test(self, x, delta):
+        template = "Test failure for x={!r}, y={!r}"
+        for y in (x + delta, x - delta):
+            msg = template.format(x, y)
+            self.assertTrue(approx_equal(x, y, tol=2*delta, rel=0), msg)
+            self.assertFalse(approx_equal(x, y, tol=delta/2, rel=0), msg)
+
+    def test_approx_equal_absolute_ints(self):
+        # Test approximate equality of ints with an absolute error.
+        for n in [-10737, -1975, -7, -2, 0, 1, 9, 37, 423, 9874, 23789110]:
+            self.do_approx_equal_abs_test(n, 10)
+            self.do_approx_equal_abs_test(n, 2)
+
+    def test_approx_equal_absolute_floats(self):
+        # Test approximate equality of floats with an absolute error.
+        for x in [-284.126, -97.1, -3.4, -2.15, 0.5, 1.0, 7.8, 4.23, 3817.4]:
+            self.do_approx_equal_abs_test(x, 1.5)
+            self.do_approx_equal_abs_test(x, 0.01)
+            self.do_approx_equal_abs_test(x, 0.0001)
+
+    def test_approx_equal_absolute_fractions(self):
+        # Test approximate equality of Fractions with an absolute error.
+        delta = Fraction(1, 29)
+        numerators = [-84, -15, -2, -1, 0, 1, 5, 17, 23, 34, 71]
+        for f in (Fraction(n, 29) for n in numerators):
+            self.do_approx_equal_abs_test(f, delta)
+            self.do_approx_equal_abs_test(f, float(delta))
+
+    def test_approx_equal_absolute_decimals(self):
+        # Test approximate equality of Decimals with an absolute error.
+        delta = Decimal("0.01")
+        for d in map(Decimal, "1.0 3.5 36.08 61.79 7912.3648".split()):
+            self.do_approx_equal_abs_test(d, delta)
+            self.do_approx_equal_abs_test(-d, delta)
+
+    def test_cross_zero(self):
+        # Test for the case of the two values having opposite signs.
+        self.assertTrue(approx_equal(1e-5, -1e-5, tol=1e-4, rel=0))
+
+    # === Relative error tests ===
+
+    def do_approx_equal_rel_test(self, x, delta):
+        template = "Test failure for x={!r}, y={!r}"
+        for y in (x*(1+delta), x*(1-delta)):
+            msg = template.format(x, y)
+            self.assertTrue(approx_equal(x, y, tol=0, rel=2*delta), msg)
+            self.assertFalse(approx_equal(x, y, tol=0, rel=delta/2), msg)
+
+    def test_approx_equal_relative_ints(self):
+        # Test approximate equality of ints with a relative error.
+        self.assertTrue(approx_equal(64, 47, tol=0, rel=0.36))
+        self.assertTrue(approx_equal(64, 47, tol=0, rel=0.37))
+        # ---
+        self.assertTrue(approx_equal(449, 512, tol=0, rel=0.125))
+        self.assertTrue(approx_equal(448, 512, tol=0, rel=0.125))
+        self.assertFalse(approx_equal(447, 512, tol=0, rel=0.125))
+
+    def test_approx_equal_relative_floats(self):
+        # Test approximate equality of floats with a relative error.
+        for x in [-178.34, -0.1, 0.1, 1.0, 36.97, 2847.136, 9145.074]:
+            self.do_approx_equal_rel_test(x, 0.02)
+            self.do_approx_equal_rel_test(x, 0.0001)
+
+    def test_approx_equal_relative_fractions(self):
+        # Test approximate equality of Fractions with a relative error.
+        F = Fraction
+        delta = Fraction(3, 8)
+        for f in [F(3, 84), F(17, 30), F(49, 50), F(92, 85)]:
+            for d in (delta, float(delta)):
+                self.do_approx_equal_rel_test(f, d)
+                self.do_approx_equal_rel_test(-f, d)
+
+    def test_approx_equal_relative_decimals(self):
+        # Test approximate equality of Decimals with a relative error.
+        for d in map(Decimal, "0.02 1.0 5.7 13.67 94.138 91027.9321".split()):
+            self.do_approx_equal_rel_test(d, Decimal("0.001"))
+            self.do_approx_equal_rel_test(-d, Decimal("0.05"))
+
+    # === Both absolute and relative error tests ===
+
+    # There are four cases to consider:
+    #   1) actual error <= both absolute and relative error
+    #   2) actual error <= absolute error but > relative error
+    #   3) actual error <= relative error but > absolute error
+    #   4) actual error > both absolute and relative error
+
+    def do_check_both(self, a, b, tol, rel, tol_flag, rel_flag):
+        check = self.assertTrue if tol_flag else self.assertFalse
+        check(approx_equal(a, b, tol=tol, rel=0))
+        check = self.assertTrue if rel_flag else self.assertFalse
+        check(approx_equal(a, b, tol=0, rel=rel))
+        check = self.assertTrue if (tol_flag or rel_flag) else self.assertFalse
+        check(approx_equal(a, b, tol=tol, rel=rel))
+
+    def test_approx_equal_both1(self):
+        # Test actual error <= both absolute and relative error.
+        self.do_check_both(7.955, 7.952, 0.004, 3.8e-4, True, True)
+        self.do_check_both(-7.387, -7.386, 0.002, 0.0002, True, True)
+
+    def test_approx_equal_both2(self):
+        # Test actual error <= absolute error but > relative error.
+        self.do_check_both(7.955, 7.952, 0.004, 3.7e-4, True, False)
+
+    def test_approx_equal_both3(self):
+        # Test actual error <= relative error but > absolute error.
+        self.do_check_both(7.955, 7.952, 0.001, 3.8e-4, False, True)
+
+    def test_approx_equal_both4(self):
+        # Test actual error > both absolute and relative error.
+        self.do_check_both(2.78, 2.75, 0.01, 0.001, False, False)
+        self.do_check_both(971.44, 971.47, 0.02, 3e-5, False, False)
+
+
+class ApproxEqualSpecialsTest(unittest.TestCase):
+    # Test approx_equal with NANs and INFs and zeroes.
+
+    def test_inf(self):
+        for type_ in (float, Decimal):
+            inf = type_('inf')
+            self.assertTrue(approx_equal(inf, inf))
+            self.assertTrue(approx_equal(inf, inf, 0, 0))
+            self.assertTrue(approx_equal(inf, inf, 1, 0.01))
+            self.assertTrue(approx_equal(-inf, -inf))
+            self.assertFalse(approx_equal(inf, -inf))
+            self.assertFalse(approx_equal(inf, 1000))
+
+    def test_nan(self):
+        for type_ in (float, Decimal):
+            nan = type_('nan')
+            for other in (nan, type_('inf'), 1000):
+                self.assertFalse(approx_equal(nan, other))
+
+    def test_float_zeroes(self):
+        nzero = math.copysign(0.0, -1)
+        self.assertTrue(approx_equal(nzero, 0.0, tol=0.1, rel=0.1))
+
+    def test_decimal_zeroes(self):
+        nzero = Decimal("-0.0")
+        self.assertTrue(approx_equal(nzero, Decimal(0), tol=0.1, rel=0.1))
+
+
+class TestApproxEqualErrors(unittest.TestCase):
+    # Test error conditions of approx_equal.
+
+    def test_bad_tol(self):
+        # Test negative tol raises.
+        self.assertRaises(ValueError, approx_equal, 100, 100, -1, 0.1)
+
+    def test_bad_rel(self):
+        # Test negative rel raises.
+        self.assertRaises(ValueError, approx_equal, 100, 100, 1, -0.1)
+
+
+# --- Tests for NumericTestCase ---
+
+# The formatting routine that generates the error messages is complex enough
+# that it too needs testing.
+
+class TestNumericTestCase(unittest.TestCase):
+    # The exact wording of NumericTestCase error messages is *not* guaranteed,
+    # but we need to give them some sort of test to ensure that they are
+    # generated correctly. As a compromise, we look for specific substrings
+    # that are expected to be found even if the overall error message changes.
+
+    def do_test(self, args):
+        actual_msg = NumericTestCase._make_std_err_msg(*args)
+        expected = self.generate_substrings(*args)
+        for substring in expected:
+            self.assertIn(substring, actual_msg)
+
+    def test_numerictestcase_is_testcase(self):
+        # Ensure that NumericTestCase actually is a TestCase.
+        self.assertTrue(issubclass(NumericTestCase, unittest.TestCase))
+
+    def test_error_msg_numeric(self):
+        # Test the error message generated for numeric comparisons.
+        args = (2.5, 4.0, 0.5, 0.25, None)
+        self.do_test(args)
+
+    def test_error_msg_sequence(self):
+        # Test the error message generated for sequence comparisons.
+        args = (3.75, 8.25, 1.25, 0.5, 7)
+        self.do_test(args)
+
+    def generate_substrings(self, first, second, tol, rel, idx):
+        """Return substrings we expect to see in error messages."""
+        abs_err, rel_err = _calc_errors(first, second)
+        substrings = [
+                'tol=%r' % tol,
+                'rel=%r' % rel,
+                'absolute error = %r' % abs_err,
+                'relative error = %r' % rel_err,
+                ]
+        if idx is not None:
+            substrings.append('differ at index %d' % idx)
+        return substrings
+
+
+# =======================================
+# === Tests for the statistics module ===
+# =======================================
+
+
+class GlobalsTest(unittest.TestCase):
+    module = statistics
+    expected_metadata = ["__doc__", "__all__"]
+
+    def test_meta(self):
+        # Test for the existence of metadata.
+        for meta in self.expected_metadata:
+            self.assertTrue(hasattr(self.module, meta),
+                            "%s not present" % meta)
+
+    def test_check_all(self):
+        # Check everything in __all__ exists and is public.
+        module = self.module
+        for name in module.__all__:
+            # No private names in __all__:
+            self.assertFalse(name.startswith("_"),
+                             'private name "%s" in __all__' % name)
+            # And anything in __all__ must exist:
+            self.assertTrue(hasattr(module, name),
+                            'missing name "%s" in __all__' % name)
+
+
+class DocTests(unittest.TestCase):
+    def test_doc_tests(self):
+        failed, tried = doctest.testmod(statistics)
+        self.assertGreater(tried, 0)
+        self.assertEqual(failed, 0)
+
+class StatisticsErrorTest(unittest.TestCase):
+    def test_has_exception(self):
+        errmsg = (
+                "Expected StatisticsError to be a ValueError, but got a"
+                " subclass of %r instead."
+                )
+        self.assertTrue(hasattr(statistics, 'StatisticsError'))
+        self.assertTrue(
+                issubclass(statistics.StatisticsError, ValueError),
+                errmsg % statistics.StatisticsError.__base__
+                )
+
+
+# === Tests for private utility functions ===
+
+class ExactRatioTest(unittest.TestCase):
+    # Test _exact_ratio utility.
+
+    def test_int(self):
+        for i in (-20, -3, 0, 5, 99, 10**20):
+            self.assertEqual(statistics._exact_ratio(i), (i, 1))
+
+    def test_fraction(self):
+        numerators = (-5, 1, 12, 38)
+        for n in numerators:
+            f = Fraction(n, 37)
+            self.assertEqual(statistics._exact_ratio(f), (n, 37))
+
+    def test_float(self):
+        self.assertEqual(statistics._exact_ratio(0.125), (1, 8))
+        self.assertEqual(statistics._exact_ratio(1.125), (9, 8))
+        data = [random.uniform(-100, 100) for _ in range(100)]
+        for x in data:
+            num, den = statistics._exact_ratio(x)
+            self.assertEqual(x, num/den)
+
+    def test_decimal(self):
+        D = Decimal
+        _exact_ratio = statistics._exact_ratio
+        self.assertEqual(_exact_ratio(D("0.125")), (125, 1000))
+        self.assertEqual(_exact_ratio(D("12.345")), (12345, 1000))
+        self.assertEqual(_exact_ratio(D("-1.98")), (-198, 100))
+
+
+class DecimalToRatioTest(unittest.TestCase):
+    # Test _decimal_to_ratio private function.
+
+    def testSpecialsRaise(self):
+        # Test that NANs and INFs raise ValueError.
+        # Non-special values are covered by _exact_ratio above.
+        for d in (Decimal('NAN'), Decimal('sNAN'), Decimal('INF')):
+            self.assertRaises(ValueError, statistics._decimal_to_ratio, d)
+
+
+
+# === Tests for public functions ===
+
+class UnivariateCommonMixin:
+    # Common tests for most univariate functions that take a data argument.
+
+    def test_no_args(self):
+        # Fail if given no arguments.
+        self.assertRaises(TypeError, self.func)
+
+    def test_empty_data(self):
+        # Fail when the data argument (first argument) is empty.
+        for empty in ([], (), iter([])):
+            self.assertRaises(statistics.StatisticsError, self.func, empty)
+
+    def prepare_data(self):
+        """Return int data for various tests."""
+        data = list(range(10))
+        while data == sorted(data):
+            random.shuffle(data)
+        return data
+
+    def test_no_inplace_modifications(self):
+        # Test that the function does not modify its input data.
+        data = self.prepare_data()
+        assert len(data) != 1  # Necessary to avoid infinite loop.
+        assert data != sorted(data)
+        saved = data[:]
+        assert data is not saved
+        _ = self.func(data)
+        self.assertListEqual(data, saved, "data has been modified")
+
+    def test_order_doesnt_matter(self):
+        # Test that the order of data points doesn't change the result.
+
+        # CAUTION: due to floating point rounding errors, the result actually
+        # may depend on the order. Consider this test representing an ideal.
+        # To avoid this test failing, only test with exact values such as ints
+        # or Fractions.
+        data = [1, 2, 3, 3, 3, 4, 5, 6]*100
+        expected = self.func(data)
+        random.shuffle(data)
+        actual = self.func(data)
+        self.assertEqual(expected, actual)
+
+    def test_type_of_data_collection(self):
+        # Test that the type of iterable data doesn't effect the result.
+        class MyList(list):
+            pass
+        class MyTuple(tuple):
+            pass
+        def generator(data):
+            return (obj for obj in data)
+        data = self.prepare_data()
+        expected = self.func(data)
+        for kind in (list, tuple, iter, MyList, MyTuple, generator):
+            result = self.func(kind(data))
+            self.assertEqual(result, expected)
+
+    def test_range_data(self):
+        # Test that functions work with range objects.
+        data = range(20, 50, 3)
+        expected = self.func(list(data))
+        self.assertEqual(self.func(data), expected)
+
+    def test_bad_arg_types(self):
+        # Test that function raises when given data of the wrong type.
+
+        # Don't roll the following into a loop like this:
+        #   for bad in list_of_bad:
+        #       self.check_for_type_error(bad)
+        #
+        # Since assertRaises doesn't show the arguments that caused the test
+        # failure, it is very difficult to debug these test failures when the
+        # following are in a loop.
+        self.check_for_type_error(None)
+        self.check_for_type_error(23)
+        self.check_for_type_error(42.0)
+        self.check_for_type_error(object())
+
+    def check_for_type_error(self, *args):
+        self.assertRaises(TypeError, self.func, *args)
+
+    def test_type_of_data_element(self):
+        # Check the type of data elements doesn't affect the numeric result.
+        # This is a weaker test than UnivariateTypeMixin.testTypesConserved,
+        # because it checks the numeric result by equality, but not by type.
+        class MyFloat(float):
+            def __truediv__(self, other):
+                return type(self)(super().__truediv__(other))
+            def __add__(self, other):
+                return type(self)(super().__add__(other))
+            __radd__ = __add__
+
+        raw = self.prepare_data()
+        expected = self.func(raw)
+        for kind in (float, MyFloat, Decimal, Fraction):
+            data = [kind(x) for x in raw]
+            result = type(expected)(self.func(data))
+            self.assertEqual(result, expected)
+
+
+class UnivariateTypeMixin:
+    """Mixin class for type-conserving functions.
+
+    This mixin class holds test(s) for functions which conserve the type of
+    individual data points. E.g. the mean of a list of Fractions should itself
+    be a Fraction.
+
+    Not all tests to do with types need go in this class. Only those that
+    rely on the function returning the same type as its input data.
+    """
+    def test_types_conserved(self):
+        # Test that functions keeps the same type as their data points.
+        # (Excludes mixed data types.) This only tests the type of the return
+        # result, not the value.
+        class MyFloat(float):
+            def __truediv__(self, other):
+                return type(self)(super().__truediv__(other))
+            def __sub__(self, other):
+                return type(self)(super().__sub__(other))
+            def __rsub__(self, other):
+                return type(self)(super().__rsub__(other))
+            def __pow__(self, other):
+                return type(self)(super().__pow__(other))
+            def __add__(self, other):
+                return type(self)(super().__add__(other))
+            __radd__ = __add__
+
+        data = self.prepare_data()
+        for kind in (float, Decimal, Fraction, MyFloat):
+            d = [kind(x) for x in data]
+            result = self.func(d)
+            self.assertIs(type(result), kind)
+
+
+class TestSum(NumericTestCase, UnivariateCommonMixin, UnivariateTypeMixin):
+    # Test cases for statistics._sum() function.
+
+    def setUp(self):
+        self.func = statistics._sum
+
+    def test_empty_data(self):
+        # Override test for empty data.
+        for data in ([], (), iter([])):
+            self.assertEqual(self.func(data), 0)
+            self.assertEqual(self.func(data, 23), 23)
+            self.assertEqual(self.func(data, 2.3), 2.3)
+
+    def test_ints(self):
+        self.assertEqual(self.func([1, 5, 3, -4, -8, 20, 42, 1]), 60)
+        self.assertEqual(self.func([4, 2, 3, -8, 7], 1000), 1008)
+
+    def test_floats(self):
+        self.assertEqual(self.func([0.25]*20), 5.0)
+        self.assertEqual(self.func([0.125, 0.25, 0.5, 0.75], 1.5), 3.125)
+
+    def test_fractions(self):
+        F = Fraction
+        self.assertEqual(self.func([Fraction(1, 1000)]*500), Fraction(1, 2))
+
+    def test_decimals(self):
+        D = Decimal
+        data = [D("0.001"), D("5.246"), D("1.702"), D("-0.025"),
+                D("3.974"), D("2.328"), D("4.617"), D("2.843"),
+                ]
+        self.assertEqual(self.func(data), Decimal("20.686"))
+
+    def test_compare_with_math_fsum(self):
+        # Compare with the math.fsum function.
+        # Ideally we ought to get the exact same result, but sometimes
+        # we differ by a very slight amount :-(
+        data = [random.uniform(-100, 1000) for _ in range(1000)]
+        self.assertApproxEqual(self.func(data), math.fsum(data), rel=2e-16)
+
+    def test_start_argument(self):
+        # Test that the optional start argument works correctly.
+        data = [random.uniform(1, 1000) for _ in range(100)]
+        t = self.func(data)
+        self.assertEqual(t+42, self.func(data, 42))
+        self.assertEqual(t-23, self.func(data, -23))
+        self.assertEqual(t+1e20, self.func(data, 1e20))
+
+    def test_strings_fail(self):
+        # Sum of strings should fail.
+        self.assertRaises(TypeError, self.func, [1, 2, 3], '999')
+        self.assertRaises(TypeError, self.func, [1, 2, 3, '999'])
+
+    def test_bytes_fail(self):
+        # Sum of bytes should fail.
+        self.assertRaises(TypeError, self.func, [1, 2, 3], b'999')
+        self.assertRaises(TypeError, self.func, [1, 2, 3, b'999'])
+
+    def test_mixed_sum(self):
+        # Mixed sums are allowed.
+
+        # Careful here: order matters. Can't mix Fraction and Decimal directly,
+        # only after they're converted to float.
+        data = [1, 2, Fraction(1, 2), 3.0, Decimal("0.25")]
+        self.assertEqual(self.func(data), 6.75)
+
+
+class SumInternalsTest(NumericTestCase):
+    # Test internals of the sum function.
+
+    def test_ignore_instance_float_method(self):
+        # Test that __float__ methods on data instances are ignored.
+
+        # Python typically calls __dunder__ methods on the class, not the
+        # instance. The ``sum`` implementation calls __float__ directly. To
+        # better match the behaviour of Python, we call it only on the class,
+        # not the instance. This test will fail if somebody "fixes" that code.
+
+        # Create a fake __float__ method.
+        def __float__(self):
+            raise AssertionError('test fails')
+
+        # Inject it into an instance.
+        class MyNumber(Fraction):
+            pass
+        x = MyNumber(3)
+        x.__float__ = types.MethodType(__float__, x)
+
+        # Check it works as expected.
+        self.assertRaises(AssertionError, x.__float__)
+        self.assertEqual(float(x), 3.0)
+        # And now test the function.
+        self.assertEqual(statistics._sum([1.0, 2.0, x, 4.0]), 10.0)
+
+
+class SumTortureTest(NumericTestCase):
+    def test_torture(self):
+        # Tim Peters' torture test for sum, and variants of same.
+        self.assertEqual(statistics._sum([1, 1e100, 1, -1e100]*10000), 20000.0)
+        self.assertEqual(statistics._sum([1e100, 1, 1, -1e100]*10000), 20000.0)
+        self.assertApproxEqual(
+            statistics._sum([1e-100, 1, 1e-100, -1]*10000), 2.0e-96, rel=5e-16
+            )
+
+
+class SumSpecialValues(NumericTestCase):
+    # Test that sum works correctly with IEEE-754 special values.
+
+    def test_nan(self):
+        for type_ in (float, Decimal):
+            nan = type_('nan')
+            result = statistics._sum([1, nan, 2])
+            self.assertIs(type(result), type_)
+            self.assertTrue(math.isnan(result))
+
+    def check_infinity(self, x, inf):
+        """Check x is an infinity of the same type and sign as inf."""
+        self.assertTrue(math.isinf(x))
+        self.assertIs(type(x), type(inf))
+        self.assertEqual(x > 0, inf > 0)
+        assert x == inf
+
+    def do_test_inf(self, inf):
+        # Adding a single infinity gives infinity.
+        result = statistics._sum([1, 2, inf, 3])
+        self.check_infinity(result, inf)
+        # Adding two infinities of the same sign also gives infinity.
+        result = statistics._sum([1, 2, inf, 3, inf, 4])
+        self.check_infinity(result, inf)
+
+    def test_float_inf(self):
+        inf = float('inf')
+        for sign in (+1, -1):
+            self.do_test_inf(sign*inf)
+
+    def test_decimal_inf(self):
+        inf = Decimal('inf')
+        for sign in (+1, -1):
+            self.do_test_inf(sign*inf)
+
+    def test_float_mismatched_infs(self):
+        # Test that adding two infinities of opposite sign gives a NAN.
+        inf = float('inf')
+        result = statistics._sum([1, 2, inf, 3, -inf, 4])
+        self.assertTrue(math.isnan(result))
+
+    def test_decimal_mismatched_infs_to_nan(self):
+        # Test adding Decimal INFs with opposite sign returns NAN.
+        inf = Decimal('inf')
+        data = [1, 2, inf, 3, -inf, 4]
+        with decimal.localcontext(decimal.ExtendedContext):
+            self.assertTrue(math.isnan(statistics._sum(data)))
+
+    def test_decimal_mismatched_infs_to_nan(self):
+        # Test adding Decimal INFs with opposite sign raises InvalidOperation.
+        inf = Decimal('inf')
+        data = [1, 2, inf, 3, -inf, 4]
+        with decimal.localcontext(decimal.BasicContext):
+            self.assertRaises(decimal.InvalidOperation, statistics._sum, data)
+
+    def test_decimal_snan_raises(self):
+        # Adding sNAN should raise InvalidOperation.
+        sNAN = Decimal('sNAN')
+        data = [1, sNAN, 2]
+        self.assertRaises(decimal.InvalidOperation, statistics._sum, data)
+
+
+# === Tests for averages ===
+
+class AverageMixin(UnivariateCommonMixin):
+    # Mixin class holding common tests for averages.
+
+    def test_single_value(self):
+        # Average of a single value is the value itself.
+        for x in (23, 42.5, 1.3e15, Fraction(15, 19), Decimal('0.28')):
+            self.assertEqual(self.func([x]), x)
+
+    def test_repeated_single_value(self):
+        # The average of a single repeated value is the value itself.
+        for x in (3.5, 17, 2.5e15, Fraction(61, 67), Decimal('4.9712')):
+            for count in (2, 5, 10, 20):
+                data = [x]*count
+                self.assertEqual(self.func(data), x)
+
+
+class TestMean(NumericTestCase, AverageMixin, UnivariateTypeMixin):
+    def setUp(self):
+        self.func = statistics.mean
+
+    def test_torture_pep(self):
+        # "Torture Test" from PEP-450.
+        self.assertEqual(self.func([1e100, 1, 3, -1e100]), 1)
+
+    def test_ints(self):
+        # Test mean with ints.
+        data = [0, 1, 2, 3, 3, 3, 4, 5, 5, 6, 7, 7, 7, 7, 8, 9]
+        random.shuffle(data)
+        self.assertEqual(self.func(data), 4.8125)
+
+    def test_floats(self):
+        # Test mean with floats.
+        data = [17.25, 19.75, 20.0, 21.5, 21.75, 23.25, 25.125, 27.5]
+        random.shuffle(data)
+        self.assertEqual(self.func(data), 22.015625)
+
+    def test_decimals(self):
+        # Test mean with ints.
+        D = Decimal
+        data = [D("1.634"), D("2.517"), D("3.912"), D("4.072"), D("5.813")]
+        random.shuffle(data)
+        self.assertEqual(self.func(data), D("3.5896"))
+
+    def test_fractions(self):
+        # Test mean with Fractions.
+        F = Fraction
+        data = [F(1, 2), F(2, 3), F(3, 4), F(4, 5), F(5, 6), F(6, 7), F(7, 8)]
+        random.shuffle(data)
+        self.assertEqual(self.func(data), F(1479, 1960))
+
+    def test_inf(self):
+        # Test mean with infinities.
+        raw = [1, 3, 5, 7, 9]  # Use only ints, to avoid TypeError later.
+        for kind in (float, Decimal):
+            for sign in (1, -1):
+                inf = kind("inf")*sign
+                data = raw + [inf]
+                result = self.func(data)
+                self.assertTrue(math.isinf(result))
+                self.assertEqual(result, inf)
+
+    def test_mismatched_infs(self):
+        # Test mean with infinities of opposite sign.
+        data = [2, 4, 6, float('inf'), 1, 3, 5, float('-inf')]
+        result = self.func(data)
+        self.assertTrue(math.isnan(result))
+
+    def test_nan(self):
+        # Test mean with NANs.
+        raw = [1, 3, 5, 7, 9]  # Use only ints, to avoid TypeError later.
+        for kind in (float, Decimal):
+            inf = kind("nan")
+            data = raw + [inf]
+            result = self.func(data)
+            self.assertTrue(math.isnan(result))
+
+    def test_big_data(self):
+        # Test adding a large constant to every data point.
+        c = 1e9
+        data = [3.4, 4.5, 4.9, 6.7, 6.8, 7.2, 8.0, 8.1, 9.4]
+        expected = self.func(data) + c
+        assert expected != c
+        result = self.func([x+c for x in data])
+        self.assertEqual(result, expected)
+
+    def test_doubled_data(self):
+        # Mean of [a,b,c...z] should be same as for [a,a,b,b,c,c...z,z].
+        data = [random.uniform(-3, 5) for _ in range(1000)]
+        expected = self.func(data)
+        actual = self.func(data*2)
+        self.assertApproxEqual(actual, expected)
+
+
+class TestMedian(NumericTestCase, AverageMixin):
+    # Common tests for median and all median.* functions.
+    def setUp(self):
+        self.func = statistics.median
+
+    def prepare_data(self):
+        """Overload method from UnivariateCommonMixin."""
+        data = super().prepare_data()
+        if len(data)%2 != 1:
+            data.append(2)
+        return data
+
+    def test_even_ints(self):
+        # Test median with an even number of int data points.
+        data = [1, 2, 3, 4, 5, 6]
+        assert len(data)%2 == 0
+        self.assertEqual(self.func(data), 3.5)
+
+    def test_odd_ints(self):
+        # Test median with an odd number of int data points.
+        data = [1, 2, 3, 4, 5, 6, 9]
+        assert len(data)%2 == 1
+        self.assertEqual(self.func(data), 4)
+
+    def test_odd_fractions(self):
+        # Test median works with an odd number of Fractions.
+        F = Fraction
+        data = [F(1, 7), F(2, 7), F(3, 7), F(4, 7), F(5, 7)]
+        assert len(data)%2 == 1
+        random.shuffle(data)
+        self.assertEqual(self.func(data), F(3, 7))
+
+    def test_even_fractions(self):
+        # Test median works with an even number of Fractions.
+        F = Fraction
+        data = [F(1, 7), F(2, 7), F(3, 7), F(4, 7), F(5, 7), F(6, 7)]
+        assert len(data)%2 == 0
+        random.shuffle(data)
+        self.assertEqual(self.func(data), F(1, 2))
+
+    def test_odd_decimals(self):
+        # Test median works with an odd number of Decimals.
+        D = Decimal
+        data = [D('2.5'), D('3.1'), D('4.2'), D('5.7'), D('5.8')]
+        assert len(data)%2 == 1
+        random.shuffle(data)
+        self.assertEqual(self.func(data), D('4.2'))
+
+    def test_even_decimals(self):
+        # Test median works with an even number of Decimals.
+        D = Decimal
+        data = [D('1.2'), D('2.5'), D('3.1'), D('4.2'), D('5.7'), D('5.8')]
+        assert len(data)%2 == 0
+        random.shuffle(data)
+        self.assertEqual(self.func(data), D('3.65'))
+
+
+class TestMedianDataType(NumericTestCase, UnivariateTypeMixin):
+    # Test conservation of data element type for median.
+    def setUp(self):
+        self.func = statistics.median
+
+    def prepare_data(self):
+        data = list(range(15))
+        assert len(data)%2 == 1
+        while data == sorted(data):
+            random.shuffle(data)
+        return data
+
+
+class TestMedianLow(TestMedian, UnivariateTypeMixin):
+    def setUp(self):
+        self.func = statistics.median_low
+
+    def test_even_ints(self):
+        # Test median_low with an even number of ints.
+        data = [1, 2, 3, 4, 5, 6]
+        assert len(data)%2 == 0
+        self.assertEqual(self.func(data), 3)
+
+    def test_even_fractions(self):
+        # Test median_low works with an even number of Fractions.
+        F = Fraction
+        data = [F(1, 7), F(2, 7), F(3, 7), F(4, 7), F(5, 7), F(6, 7)]
+        assert len(data)%2 == 0
+        random.shuffle(data)
+        self.assertEqual(self.func(data), F(3, 7))
+
+    def test_even_decimals(self):
+        # Test median_low works with an even number of Decimals.
+        D = Decimal
+        data = [D('1.1'), D('2.2'), D('3.3'), D('4.4'), D('5.5'), D('6.6')]
+        assert len(data)%2 == 0
+        random.shuffle(data)
+        self.assertEqual(self.func(data), D('3.3'))
+
+
+class TestMedianHigh(TestMedian, UnivariateTypeMixin):
+    def setUp(self):
+        self.func = statistics.median_high
+
+    def test_even_ints(self):
+        # Test median_high with an even number of ints.
+        data = [1, 2, 3, 4, 5, 6]
+        assert len(data)%2 == 0
+        self.assertEqual(self.func(data), 4)
+
+    def test_even_fractions(self):
+        # Test median_high works with an even number of Fractions.
+        F = Fraction
+        data = [F(1, 7), F(2, 7), F(3, 7), F(4, 7), F(5, 7), F(6, 7)]
+        assert len(data)%2 == 0
+        random.shuffle(data)
+        self.assertEqual(self.func(data), F(4, 7))
+
+    def test_even_decimals(self):
+        # Test median_high works with an even number of Decimals.
+        D = Decimal
+        data = [D('1.1'), D('2.2'), D('3.3'), D('4.4'), D('5.5'), D('6.6')]
+        assert len(data)%2 == 0
+        random.shuffle(data)
+        self.assertEqual(self.func(data), D('4.4'))
+
+
+class TestMedianGrouped(TestMedian):
+    # Test median_grouped.
+    # Doesn't conserve data element types, so don't use TestMedianType.
+    def setUp(self):
+        self.func = statistics.median_grouped
+
+    def test_odd_number_repeated(self):
+        # Test median.grouped with repeated median values.
+        data = [12, 13, 14, 14, 14, 15, 15]
+        assert len(data)%2 == 1
+        self.assertEqual(self.func(data), 14)
+        #---
+        data = [12, 13, 14, 14, 14, 14, 15]
+        assert len(data)%2 == 1
+        self.assertEqual(self.func(data), 13.875)
+        #---
+        data = [5, 10, 10, 15, 20, 20, 20, 20, 25, 25, 30]
+        assert len(data)%2 == 1
+        self.assertEqual(self.func(data, 5), 19.375)
+        #---
+        data = [16, 18, 18, 18, 18, 20, 20, 20, 22, 22, 22, 24, 24, 26, 28]
+        assert len(data)%2 == 1
+        self.assertApproxEqual(self.func(data, 2), 20.66666667, tol=1e-8)
+
+    def test_even_number_repeated(self):
+        # Test median.grouped with repeated median values.
+        data = [5, 10, 10, 15, 20, 20, 20, 25, 25, 30]
+        assert len(data)%2 == 0
+        self.assertApproxEqual(self.func(data, 5), 19.16666667, tol=1e-8)
+        #---
+        data = [2, 3, 4, 4, 4, 5]
+        assert len(data)%2 == 0
+        self.assertApproxEqual(self.func(data), 3.83333333, tol=1e-8)
+        #---
+        data = [2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6]
+        assert len(data)%2 == 0
+        self.assertEqual(self.func(data), 4.5)
+        #---
+        data = [3, 4, 4, 4, 5, 5, 5, 5, 6, 6]
+        assert len(data)%2 == 0
+        self.assertEqual(self.func(data), 4.75)
+
+    def test_repeated_single_value(self):
+        # Override method from AverageMixin.
+        # Yet again, failure of median_grouped to conserve the data type
+        # causes me headaches :-(
+        for x in (5.3, 68, 4.3e17, Fraction(29, 101), Decimal('32.9714')):
+            for count in (2, 5, 10, 20):
+                data = [x]*count
+                self.assertEqual(self.func(data), float(x))
+
+    def test_odd_fractions(self):
+        # Test median_grouped works with an odd number of Fractions.
+        F = Fraction
+        data = [F(5, 4), F(9, 4), F(13, 4), F(13, 4), F(17, 4)]
+        assert len(data)%2 == 1
+        random.shuffle(data)
+        self.assertEqual(self.func(data), 3.0)
+
+    def test_even_fractions(self):
+        # Test median_grouped works with an even number of Fractions.
+        F = Fraction
+        data = [F(5, 4), F(9, 4), F(13, 4), F(13, 4), F(17, 4), F(17, 4)]
+        assert len(data)%2 == 0
+        random.shuffle(data)
+        self.assertEqual(self.func(data), 3.25)
+
+    def test_odd_decimals(self):
+        # Test median_grouped works with an odd number of Decimals.
+        D = Decimal
+        data = [D('5.5'), D('6.5'), D('6.5'), D('7.5'), D('8.5')]
+        assert len(data)%2 == 1
+        random.shuffle(data)
+        self.assertEqual(self.func(data), 6.75)
+
+    def test_even_decimals(self):
+        # Test median_grouped works with an even number of Decimals.
+        D = Decimal
+        data = [D('5.5'), D('5.5'), D('6.5'), D('6.5'), D('7.5'), D('8.5')]
+        assert len(data)%2 == 0
+        random.shuffle(data)
+        self.assertEqual(self.func(data), 6.5)
+        #---
+        data = [D('5.5'), D('5.5'), D('6.5'), D('7.5'), D('7.5'), D('8.5')]
+        assert len(data)%2 == 0
+        random.shuffle(data)
+        self.assertEqual(self.func(data), 7.0)
+
+    def test_interval(self):
+        # Test median_grouped with interval argument.
+        data = [2.25, 2.5, 2.5, 2.75, 2.75, 3.0, 3.0, 3.25, 3.5, 3.75]
+        self.assertEqual(self.func(data, 0.25), 2.875)
+        data = [2.25, 2.5, 2.5, 2.75, 2.75, 2.75, 3.0, 3.0, 3.25, 3.5, 3.75]
+        self.assertApproxEqual(self.func(data, 0.25), 2.83333333, tol=1e-8)
+        data = [220, 220, 240, 260, 260, 260, 260, 280, 280, 300, 320, 340]
+        self.assertEqual(self.func(data, 20), 265.0)
+
+
+class TestMode(NumericTestCase, AverageMixin, UnivariateTypeMixin):
+    # Test cases for the discrete version of mode.
+    def setUp(self):
+        self.func = statistics.mode
+
+    def prepare_data(self):
+        """Overload method from UnivariateCommonMixin."""
+        # Make sure test data has exactly one mode.
+        return [1, 1, 1, 1, 3, 4, 7, 9, 0, 8, 2]
+
+    def test_range_data(self):
+        # Override test from UnivariateCommonMixin.
+        data = range(20, 50, 3)
+        self.assertRaises(statistics.StatisticsError, self.func, data)
+
+    def test_nominal_data(self):
+        # Test mode with nominal data.
+        data = 'abcbdb'
+        self.assertEqual(self.func(data), 'b')
+        data = 'fe fi fo fum fi fi'.split()
+        self.assertEqual(self.func(data), 'fi')
+
+    def test_discrete_data(self):
+        # Test mode with discrete numeric data.
+        data = list(range(10))
+        for i in range(10):
+            d = data + [i]
+            random.shuffle(d)
+            self.assertEqual(self.func(d), i)
+
+    def test_bimodal_data(self):
+        # Test mode with bimodal data.
+        data = [1, 1, 2, 2, 2, 2, 3, 4, 5, 6, 6, 6, 6, 7, 8, 9, 9]
+        assert data.count(2) == data.count(6) == 4
+        # Check for an exception.
+        self.assertRaises(statistics.StatisticsError, self.func, data)
+
+    def test_unique_data_failure(self):
+        # Test mode exception when data points are all unique.
+        data = list(range(10))
+        self.assertRaises(statistics.StatisticsError, self.func, data)
+
+    def test_none_data(self):
+        # Test that mode raises TypeError if given None as data.
+
+        # This test is necessary because the implementation of mode uses
+        # collections.Counter, which accepts None and returns an empty dict.
+        self.assertRaises(TypeError, self.func, None)
+
+
+# === Tests for variances and standard deviations ===
+
+class VarianceStdevMixin(UnivariateCommonMixin):
+    # Mixin class holding common tests for variance and std dev.
+
+    # Subclasses should inherit from this before NumericTestClass, in order
+    # to see the rel attribute below. See testShiftData for an explanation.
+
+    rel = 1e-12
+
+    def test_single_value(self):
+        # Deviation of a single value is zero.
+        for x in (11, 19.8, 4.6e14, Fraction(21, 34), Decimal('8.392')):
+            self.assertEqual(self.func([x]), 0)
+
+    def test_repeated_single_value(self):
+        # The deviation of a single repeated value is zero.
+        for x in (7.2, 49, 8.1e15, Fraction(3, 7), Decimal('62.4802')):
+            for count in (2, 3, 5, 15):
+                data = [x]*count
+                self.assertEqual(self.func(data), 0)
+
+    def test_domain_error_regression(self):
+        # Regression test for a domain error exception.
+        # (Thanks to Geremy Condra.)
+        data = [0.123456789012345]*10000
+        # All the items are identical, so variance should be exactly zero.
+        # We allow some small round-off error, but not much.
+        result = self.func(data)
+        self.assertApproxEqual(result, 0.0, tol=5e-17)
+        self.assertGreaterEqual(result, 0)  # A negative result must fail.
+
+    def test_shift_data(self):
+        # Test that shifting the data by a constant amount does not affect
+        # the variance or stdev. Or at least not much.
+
+        # Due to rounding, this test should be considered an ideal. We allow
+        # some tolerance away from "no change at all" by setting tol and/or rel
+        # attributes. Subclasses may set tighter or looser error tolerances.
+        raw = [1.03, 1.27, 1.94, 2.04, 2.58, 3.14, 4.75, 4.98, 5.42, 6.78]
+        expected = self.func(raw)
+        # Don't set shift too high, the bigger it is, the more rounding error.
+        shift = 1e5
+        data = [x + shift for x in raw]
+        self.assertApproxEqual(self.func(data), expected)
+
+    def test_shift_data_exact(self):
+        # Like test_shift_data, but result is always exact.
+        raw = [1, 3, 3, 4, 5, 7, 9, 10, 11, 16]
+        assert all(x==int(x) for x in raw)
+        expected = self.func(raw)
+        shift = 10**9
+        data = [x + shift for x in raw]
+        self.assertEqual(self.func(data), expected)
+
+    def test_iter_list_same(self):
+        # Test that iter data and list data give the same result.
+
+        # This is an explicit test that iterators and lists are treated the
+        # same; justification for this test over and above the similar test
+        # in UnivariateCommonMixin is that an earlier design had variance and
+        # friends swap between one- and two-pass algorithms, which would
+        # sometimes give different results.
+        data = [random.uniform(-3, 8) for _ in range(1000)]
+        expected = self.func(data)
+        self.assertEqual(self.func(iter(data)), expected)
+
+
+class TestPVariance(VarianceStdevMixin, NumericTestCase, UnivariateTypeMixin):
+    # Tests for population variance.
+    def setUp(self):
+        self.func = statistics.pvariance
+
+    def test_exact_uniform(self):
+        # Test the variance against an exact result for uniform data.
+        data = list(range(10000))
+        random.shuffle(data)
+        expected = (10000**2 - 1)/12  # Exact value.
+        self.assertEqual(self.func(data), expected)
+
+    def test_ints(self):
+        # Test population variance with int data.
+        data = [4, 7, 13, 16]
+        exact = 22.5
+        self.assertEqual(self.func(data), exact)
+
+    def test_fractions(self):
+        # Test population variance with Fraction data.
+        F = Fraction
+        data = [F(1, 4), F(1, 4), F(3, 4), F(7, 4)]
+        exact = F(3, 8)
+        result = self.func(data)
+        self.assertEqual(result, exact)
+        self.assertIsInstance(result, Fraction)
+
+    def test_decimals(self):
+        # Test population variance with Decimal data.
+        D = Decimal
+        data = [D("12.1"), D("12.2"), D("12.5"), D("12.9")]
+        exact = D('0.096875')
+        result = self.func(data)
+        self.assertEqual(result, exact)
+        self.assertIsInstance(result, Decimal)
+
+
+class TestVariance(VarianceStdevMixin, NumericTestCase, UnivariateTypeMixin):
+    # Tests for sample variance.
+    def setUp(self):
+        self.func = statistics.variance
+
+    def test_single_value(self):
+        # Override method from VarianceStdevMixin.
+        for x in (35, 24.7, 8.2e15, Fraction(19, 30), Decimal('4.2084')):
+            self.assertRaises(statistics.StatisticsError, self.func, [x])
+
+    def test_ints(self):
+        # Test sample variance with int data.
+        data = [4, 7, 13, 16]
+        exact = 30
+        self.assertEqual(self.func(data), exact)
+
+    def test_fractions(self):
+        # Test sample variance with Fraction data.
+        F = Fraction
+        data = [F(1, 4), F(1, 4), F(3, 4), F(7, 4)]
+        exact = F(1, 2)
+        result = self.func(data)
+        self.assertEqual(result, exact)
+        self.assertIsInstance(result, Fraction)
+
+    def test_decimals(self):
+        # Test sample variance with Decimal data.
+        D = Decimal
+        data = [D(2), D(2), D(7), D(9)]
+        exact = 4*D('9.5')/D(3)
+        result = self.func(data)
+        self.assertEqual(result, exact)
+        self.assertIsInstance(result, Decimal)
+
+
+class TestPStdev(VarianceStdevMixin, NumericTestCase):
+    # Tests for population standard deviation.
+    def setUp(self):
+        self.func = statistics.pstdev
+
+    def test_compare_to_variance(self):
+        # Test that stdev is, in fact, the square root of variance.
+        data = [random.uniform(-17, 24) for _ in range(1000)]
+        expected = math.sqrt(statistics.pvariance(data))
+        self.assertEqual(self.func(data), expected)
+
+
+class TestStdev(VarianceStdevMixin, NumericTestCase):
+    # Tests for sample standard deviation.
+    def setUp(self):
+        self.func = statistics.stdev
+
+    def test_single_value(self):
+        # Override method from VarianceStdevMixin.
+        for x in (81, 203.74, 3.9e14, Fraction(5, 21), Decimal('35.719')):
+            self.assertRaises(statistics.StatisticsError, self.func, [x])
+
+    def test_compare_to_variance(self):
+        # Test that stdev is, in fact, the square root of variance.
+        data = [random.uniform(-2, 9) for _ in range(1000)]
+        expected = math.sqrt(statistics.variance(data))
+        self.assertEqual(self.func(data), expected)
+
+
+# === Run tests ===
+
+def load_tests(loader, tests, ignore):
+    """Used for doctest/unittest integration."""
+    tests.addTests(doctest.DocTestSuite())
+    return tests
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/Lib/test/test_strftime.py b/Lib/test/test_strftime.py
index 6510c36..78604c6 100644
--- a/Lib/test/test_strftime.py
+++ b/Lib/test/test_strftime.py
@@ -177,5 +177,28 @@
                     print("  Expected %s, but got %s" % (e[1], result))
 
 
+class Y1900Tests(unittest.TestCase):
+    """A limitation of the MS C runtime library is that it crashes if
+    a date before 1900 is passed with a format string containing "%y"
+    """
+
+    @unittest.skipUnless(sys.platform == "win32", "Only applies to Windows")
+    def test_y_before_1900_win(self):
+        with self.assertRaises(ValueError):
+            time.strftime("%y", (1899, 1, 1, 0, 0, 0, 0, 0, 0))
+
+    @unittest.skipIf(sys.platform == "win32", "Doesn't apply on Windows")
+    def test_y_before_1900_nonwin(self):
+        self.assertEquals(
+            time.strftime("%y", (1899, 1, 1, 0, 0, 0, 0, 0, 0)), "99")
+
+    def test_y_1900(self):
+        self.assertEquals(
+            time.strftime("%y", (1900, 1, 1, 0, 0, 0, 0, 0, 0)), "00")
+
+    def test_y_after_1900(self):
+        self.assertEquals(
+            time.strftime("%y", (2013, 1, 1, 0, 0, 0, 0, 0, 0)), "13")
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_structseq.py b/Lib/test/test_structseq.py
index a89e955..353d0ea 100644
--- a/Lib/test/test_structseq.py
+++ b/Lib/test/test_structseq.py
@@ -38,7 +38,7 @@
         # os.stat() gives a complicated struct sequence.
         st = os.stat(__file__)
         rep = repr(st)
-        self.assertTrue(rep.startswith(os.name + ".stat_result"))
+        self.assertTrue(rep.startswith("os.stat_result"))
         self.assertIn("st_mode=", rep)
         self.assertIn("st_ino=", rep)
         self.assertIn("st_dev=", rep)
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 4c15ee3..e12f593 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -11,6 +11,7 @@
 import tempfile
 import time
 import re
+import selectors
 import sysconfig
 import warnings
 import select
@@ -883,8 +884,9 @@
         #
         # UTF-16 and UTF-32-BE are sufficient to check both with BOM and
         # without, and UTF-16 and UTF-32.
+        import _bootlocale
         for encoding in ['utf-16', 'utf-32-be']:
-            old_getpreferredencoding = locale.getpreferredencoding
+            old_getpreferredencoding = _bootlocale.getpreferredencoding
             # Indirectly via io.TextIOWrapper, Popen() defaults to
             # locale.getpreferredencoding(False) and earlier in Python 3.2 to
             # locale.getpreferredencoding().
@@ -895,7 +897,7 @@
                     encoding)
             args = [sys.executable, '-c', code]
             try:
-                locale.getpreferredencoding = getpreferredencoding
+                _bootlocale.getpreferredencoding = getpreferredencoding
                 # We set stdin to be non-None because, as of this writing,
                 # a different code path is used when the number of pipes is
                 # zero or one.
@@ -904,7 +906,7 @@
                                          stdout=subprocess.PIPE)
                 stdout, stderr = popen.communicate(input='')
             finally:
-                locale.getpreferredencoding = old_getpreferredencoding
+                _bootlocale.getpreferredencoding = old_getpreferredencoding
             self.assertEqual(stdout, '1\n2\n3\n4')
 
     def test_no_leaking(self):
@@ -1231,7 +1233,7 @@
 
     def test_run_abort(self):
         # returncode handles signal termination
-        with support.SuppressCoreFiles():
+        with support.SuppressCrashReport():
             p = subprocess.Popen([sys.executable, "-c",
                                   'import os; os.abort()'])
             p.wait()
@@ -2157,13 +2159,6 @@
     def test_terminate_dead(self):
         self._kill_dead_process('terminate')
 
-
-# The module says:
-#   "NB This only works (and is only relevant) for UNIX."
-#
-# Actually, getoutput should work on any platform with an os.popen, but
-# I'll take the comment as given, and skip this suite.
-@unittest.skipUnless(os.name == 'posix', "only relevant for UNIX")
 class CommandTests(unittest.TestCase):
     def test_getoutput(self):
         self.assertEqual(subprocess.getoutput('echo xyzzy'), 'xyzzy')
@@ -2177,23 +2172,24 @@
         try:
             dir = tempfile.mkdtemp()
             name = os.path.join(dir, "foo")
-
-            status, output = subprocess.getstatusoutput('cat ' + name)
+            status, output = subprocess.getstatusoutput(
+                ("type " if mswindows else "cat ") + name)
             self.assertNotEqual(status, 0)
         finally:
             if dir is not None:
                 os.rmdir(dir)
 
 
-@unittest.skipUnless(getattr(subprocess, '_has_poll', False),
-                     "poll system call not supported")
+@unittest.skipUnless(hasattr(selectors, 'PollSelector'),
+                     "Test needs selectors.PollSelector")
 class ProcessTestCaseNoPoll(ProcessTestCase):
     def setUp(self):
-        subprocess._has_poll = False
+        self.orig_selector = subprocess._PopenSelector
+        subprocess._PopenSelector = selectors.SelectSelector
         ProcessTestCase.setUp(self)
 
     def tearDown(self):
-        subprocess._has_poll = True
+        subprocess._PopenSelector = self.orig_selector
         ProcessTestCase.tearDown(self)
 
 
diff --git a/Lib/test/test_sunau.py b/Lib/test/test_sunau.py
index 1b0baee..81acd96 100644
--- a/Lib/test/test_sunau.py
+++ b/Lib/test/test_sunau.py
@@ -1,128 +1,130 @@
-from test.support import TESTFN, unlink
+from test.support import TESTFN
 import unittest
-import pickle
-import os
-
+from test import audiotests
+import sys
 import sunau
 
-nchannels = 2
-sampwidth = 2
-framerate = 8000
-nframes = 100
 
-class SunAUTest(unittest.TestCase):
+class SunauPCM8Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = sunau
+    sndfilename = 'pluck-pcm8.au'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 1
+    framerate = 11025
+    nframes = 48
+    comptype = 'NONE'
+    compname = 'not compressed'
+    frames = bytes.fromhex("""\
+      02FF 4B00 3104 8008 CB06 4803 BF01 03FE B8FA B4F3 29EB 1AE6 \
+      EDE4 C6E2 0EE0 EFE0 57E2 FBE8 13EF D8F7 97FB F5FC 08FB DFFB \
+      11FA 3EFB BCFC 66FF CF04 4309 C10E 5112 EE17 8216 7F14 8012 \
+      490E 520D EF0F CE0F E40C 630A 080A 2B0B 510E 8B11 B60E 440A \
+      """)
 
-    def setUp(self):
-        self.f = None
 
-    def tearDown(self):
-        if self.f is not None:
-            self.f.close()
-        unlink(TESTFN)
+class SunauPCM16Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = sunau
+    sndfilename = 'pluck-pcm16.au'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 2
+    framerate = 11025
+    nframes = 48
+    comptype = 'NONE'
+    compname = 'not compressed'
+    frames = bytes.fromhex("""\
+      022EFFEA 4B5C00F9 311404EF 80DB0844 CBE006B0 48AB03F3 BFE601B5 0367FE80 \
+      B853FA42 B4AFF351 2997EBCD 1A5AE6DC EDF9E492 C627E277 0E06E0B7 EF29E029 \
+      5759E271 FB34E83F 1377EF85 D82CF727 978EFB79 F5F7FC12 0864FB9E DF30FB40 \
+      1183FA30 3EEAFB59 BC78FCB4 66D5FF60 CF130415 431A097D C1BA0EC7 512312A0 \
+      EEE11754 82071666 7FFE1448 80001298 49990EB7 52B40DC1 EFAD0F65 CE3A0FBE \
+      E4B70CE6 63490A57 08CC0A1D 2BBC0B09 51480E46 8BCB113C B6F60EE9 44150A5A \
+      """)
 
-    def test_lin(self):
-        self.f = sunau.open(TESTFN, 'w')
-        self.f.setnchannels(nchannels)
-        self.f.setsampwidth(sampwidth)
-        self.f.setframerate(framerate)
-        self.f.setcomptype('NONE', 'not compressed')
-        output = b'\xff\x00\x12\xcc' * (nframes * nchannels * sampwidth // 4)
-        self.f.writeframes(output)
-        self.f.close()
 
-        self.f = sunau.open(TESTFN, 'rb')
-        self.assertEqual(nchannels, self.f.getnchannels())
-        self.assertEqual(sampwidth, self.f.getsampwidth())
-        self.assertEqual(framerate, self.f.getframerate())
-        self.assertEqual(nframes, self.f.getnframes())
-        self.assertEqual('NONE', self.f.getcomptype())
-        self.assertEqual(self.f.readframes(nframes), output)
-        self.f.close()
+class SunauPCM24Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = sunau
+    sndfilename = 'pluck-pcm24.au'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 3
+    framerate = 11025
+    nframes = 48
+    comptype = 'NONE'
+    compname = 'not compressed'
+    frames = bytes.fromhex("""\
+      022D65FFEB9D 4B5A0F00FA54 3113C304EE2B 80DCD6084303 \
+      CBDEC006B261 48A99803F2F8 BFE82401B07D 036BFBFE7B5D \
+      B85756FA3EC9 B4B055F3502B 299830EBCB62 1A5CA7E6D99A \
+      EDFA3EE491BD C625EBE27884 0E05A9E0B6CF EF2929E02922 \
+      5758D8E27067 FB3557E83E16 1377BFEF8402 D82C5BF7272A \
+      978F16FB7745 F5F865FC1013 086635FB9C4E DF30FCFB40EE \
+      117FE0FA3438 3EE6B8FB5AC3 BC77A3FCB2F4 66D6DAFF5F32 \
+      CF13B9041275 431D69097A8C C1BB600EC74E 5120B912A2BA \
+      EEDF641754C0 8207001664B7 7FFFFF14453F 8000001294E6 \
+      499C1B0EB3B2 52B73E0DBCA0 EFB2B20F5FD8 CE3CDB0FBE12 \
+      E4B49C0CEA2D 6344A80A5A7C 08C8FE0A1FFE 2BB9860B0A0E \
+      51486F0E44E1 8BCC64113B05 B6F4EC0EEB36 4413170A5B48 \
+      """)
 
-    def test_ulaw(self):
-        self.f = sunau.open(TESTFN, 'w')
-        self.f.setnchannels(nchannels)
-        self.f.setsampwidth(sampwidth)
-        self.f.setframerate(framerate)
-        self.f.setcomptype('ULAW', '')
-        # u-law compression is lossy, therefore we can't expect non-zero data
-        # to come back unchanged.
-        output = b'\0' * nframes * nchannels * sampwidth
-        self.f.writeframes(output)
-        self.f.close()
 
-        self.f = sunau.open(TESTFN, 'rb')
-        self.assertEqual(nchannels, self.f.getnchannels())
-        self.assertEqual(sampwidth, self.f.getsampwidth())
-        self.assertEqual(framerate, self.f.getframerate())
-        self.assertEqual(nframes, self.f.getnframes())
-        self.assertEqual('ULAW', self.f.getcomptype())
-        self.assertEqual(self.f.readframes(nframes), output)
-        self.f.close()
+class SunauPCM32Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = sunau
+    sndfilename = 'pluck-pcm32.au'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 4
+    framerate = 11025
+    nframes = 48
+    comptype = 'NONE'
+    compname = 'not compressed'
+    frames = bytes.fromhex("""\
+      022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \
+      CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \
+      B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \
+      EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \
+      5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \
+      978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \
+      117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \
+      CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \
+      EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \
+      499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \
+      E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \
+      51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \
+      """)
 
-    def test_getparams(self):
-        self.f = sunau.open(TESTFN, 'w')
-        self.f.setnchannels(nchannels)
-        self.f.setsampwidth(sampwidth)
-        self.f.setframerate(framerate)
-        self.f.setcomptype('ULAW', '')
-        output = b'\0' * nframes * nchannels * sampwidth
-        self.f.writeframes(output)
-        self.f.close()
 
-        self.f = sunau.open(TESTFN, 'rb')
-        params = self.f.getparams()
-        self.assertEqual(params.nchannels, nchannels)
-        self.assertEqual(params.sampwidth, sampwidth)
-        self.assertEqual(params.framerate, framerate)
-        self.assertEqual(params.nframes, nframes)
-        self.assertEqual(params.comptype, 'ULAW')
-
-        dump = pickle.dumps(params)
-        self.assertEqual(pickle.loads(dump), params)
-
-    def test_write_context_manager_calls_close(self):
-        # Close checks for a minimum header and will raise an error
-        # if it is not set, so this proves that close is called.
-        with self.assertRaises(sunau.Error):
-            with sunau.open(TESTFN, 'wb') as f:
-                pass
-        with self.assertRaises(sunau.Error):
-            with open(TESTFN, 'wb') as testfile:
-                with sunau.open(testfile):
-                    pass
-
-    def test_context_manager_with_open_file(self):
-        with open(TESTFN, 'wb') as testfile:
-            with sunau.open(testfile) as f:
-                f.setnchannels(nchannels)
-                f.setsampwidth(sampwidth)
-                f.setframerate(framerate)
-            self.assertFalse(testfile.closed)
-        with open(TESTFN, 'rb') as testfile:
-            with sunau.open(testfile) as f:
-                self.assertFalse(f.getfp().closed)
-                params = f.getparams()
-                self.assertEqual(params[0], nchannels)
-                self.assertEqual(params[1], sampwidth)
-                self.assertEqual(params[2], framerate)
-            self.assertIsNone(f.getfp())
-            self.assertFalse(testfile.closed)
-
-    def test_context_manager_with_filename(self):
-        # If the file doesn't get closed, this test won't fail, but it will
-        # produce a resource leak warning.
-        with sunau.open(TESTFN, 'wb') as f:
-            f.setnchannels(nchannels)
-            f.setsampwidth(sampwidth)
-            f.setframerate(framerate)
-        with sunau.open(TESTFN) as f:
-            self.assertFalse(f.getfp().closed)
-            params = f.getparams()
-            self.assertEqual(params[0], nchannels)
-            self.assertEqual(params[1], sampwidth)
-            self.assertEqual(params[2], framerate)
-        self.assertIsNone(f.getfp())
+class SunauULAWTest(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = sunau
+    sndfilename = 'pluck-ulaw.au'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 2
+    framerate = 11025
+    nframes = 48
+    comptype = 'ULAW'
+    compname = 'CCITT G.711 u-law'
+    frames = bytes.fromhex("""\
+      022CFFE8 497C00F4 307C04DC 8284083C CB84069C 497C03DC BE8401AC 036CFE74 \
+      B684FA24 B684F344 2A7CEC04 19FCE704 EE04E504 C584E204 0E3CE104 EF04DF84 \
+      557CE204 FB24E804 12FCEF04 D784F744 9684FB64 F5C4FC24 083CFBA4 DF84FB24 \
+      11FCFA24 3E7CFB64 BA84FCB4 657CFF5C CF84041C 417C09BC C1840EBC 517C12FC \
+      EF0416FC 828415FC 7D7C13FC 828412FC 497C0EBC 517C0DBC F0040F3C CD840FFC \
+      E5040CBC 617C0A3C 08BC0A3C 2C7C0B3C 517C0E3C 8A8410FC B6840EBC 457C0A3C \
+      """)
+    if sys.byteorder != 'big':
+        frames = audiotests.byteswap2(frames)
 
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_sundry.py b/Lib/test/test_sundry.py
index 77ec9f0..2da3ac0 100644
--- a/Lib/test/test_sundry.py
+++ b/Lib/test/test_sundry.py
@@ -7,7 +7,7 @@
 class TestUntestedModules(unittest.TestCase):
     def test_untested_modules_can_be_imported(self):
         untested = ('bdb', 'encodings', 'formatter', 'imghdr',
-                    'macurl2path', 'nturl2path', 'tabnanny')
+                    'nturl2path', 'tabnanny')
         with support.check_warnings(quiet=True):
             for name in untested:
                 try:
@@ -47,6 +47,7 @@
             import distutils.command.upload
 
             import html.entities
+
             try:
                 import tty  # Not available on Windows
             except ImportError:
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 9afc1d0..16b660b 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -306,7 +306,7 @@
     # args_from_interpreter_flags
     # can_symlink
     # skip_unless_symlink
-    # SuppressCoreFiles
+    # SuppressCrashReport
 
 
 def test_main():
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 30eca4a..0565f39 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -250,7 +250,7 @@
 
             sys.setrecursionlimit(%d)
             f()""")
-        with test.support.suppress_crash_popup():
+        with test.support.SuppressCrashReport():
             for i in (50, 1000):
                 sub = subprocess.Popen([sys.executable, '-c', code % i],
                     stderr=subprocess.PIPE)
@@ -293,15 +293,16 @@
     def test_call_tracing(self):
         self.assertRaises(TypeError, sys.call_tracing, type, 2)
 
+    @unittest.skipUnless(hasattr(sys, "setdlopenflags"),
+                         'test needs sys.setdlopenflags()')
     def test_dlopenflags(self):
-        if hasattr(sys, "setdlopenflags"):
-            self.assertTrue(hasattr(sys, "getdlopenflags"))
-            self.assertRaises(TypeError, sys.getdlopenflags, 42)
-            oldflags = sys.getdlopenflags()
-            self.assertRaises(TypeError, sys.setdlopenflags)
-            sys.setdlopenflags(oldflags+1)
-            self.assertEqual(sys.getdlopenflags(), oldflags+1)
-            sys.setdlopenflags(oldflags)
+        self.assertTrue(hasattr(sys, "getdlopenflags"))
+        self.assertRaises(TypeError, sys.getdlopenflags, 42)
+        oldflags = sys.getdlopenflags()
+        self.assertRaises(TypeError, sys.setdlopenflags)
+        sys.setdlopenflags(oldflags+1)
+        self.assertEqual(sys.getdlopenflags(), oldflags+1)
+        sys.setdlopenflags(oldflags)
 
     @test.support.refcount_test
     def test_refcount(self):
@@ -721,7 +722,7 @@
         samples = [b'', b'u'*100000]
         for sample in samples:
             x = bytearray(sample)
-            check(x, vsize('inP') + x.__alloc__())
+            check(x, vsize('n2Pi') + x.__alloc__())
         # bytearray_iterator
         check(iter(bytearray()), size('nP'))
         # cell
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
index 5293649..2968604 100644
--- a/Lib/test/test_sysconfig.py
+++ b/Lib/test/test_sysconfig.py
@@ -352,8 +352,10 @@
             self.assertTrue(os.path.exists(Python_h), Python_h)
             self.assertTrue(sysconfig._is_python_source_dir(srcdir))
         elif os.name == 'posix':
-            self.assertEqual(os.path.dirname(sysconfig.get_makefile_filename()),
-                                srcdir)
+            makefile_dir = os.path.dirname(sysconfig.get_makefile_filename())
+            # Issue #19340: srcdir has been realpath'ed already
+            makefile_dir = os.path.realpath(makefile_dir)
+            self.assertEqual(makefile_dir, srcdir)
 
     def test_srcdir_independent_of_cwd(self):
         # srcdir should be independent of the current working directory
diff --git a/Lib/test/test_telnetlib.py b/Lib/test/test_telnetlib.py
index c9f2ccb..ba33064 100644
--- a/Lib/test/test_telnetlib.py
+++ b/Lib/test/test_telnetlib.py
@@ -1,10 +1,9 @@
 import socket
-import select
+import selectors
 import telnetlib
 import time
 import contextlib
 
-import unittest
 from unittest import TestCase
 from test import support
 threading = support.import_module('threading')
@@ -112,40 +111,32 @@
         self._messages += out.getvalue()
         return
 
-def mock_select(*s_args):
-    block = False
-    for l in s_args:
-        for fob in l:
-            if isinstance(fob, TelnetAlike):
-                block = fob.sock.block
-    if block:
-        return [[], [], []]
-    else:
-        return s_args
-
-class MockPoller(object):
-    test_case = None  # Set during TestCase setUp.
+class MockSelector(selectors.BaseSelector):
 
     def __init__(self):
-        self._file_objs = []
+        super().__init__()
+        self.keys = {}
 
-    def register(self, fd, eventmask):
-        self.test_case.assertTrue(hasattr(fd, 'fileno'), fd)
-        self.test_case.assertEqual(eventmask, select.POLLIN|select.POLLPRI)
-        self._file_objs.append(fd)
+    def register(self, fileobj, events, data=None):
+        key = selectors.SelectorKey(fileobj, 0, events, data)
+        self.keys[fileobj] = key
+        return key
 
-    def poll(self, timeout=None):
+    def unregister(self, fileobj):
+        key = self.keys.pop(fileobj)
+        return key
+
+    def select(self, timeout=None):
         block = False
-        for fob in self._file_objs:
-            if isinstance(fob, TelnetAlike):
-                block = fob.sock.block
+        for fileobj in self.keys:
+            if isinstance(fileobj, TelnetAlike):
+                block = fileobj.sock.block
+                break
         if block:
             return []
         else:
-            return zip(self._file_objs, [select.POLLIN]*len(self._file_objs))
+            return [(key, key.events) for key in self.keys.values()]
 
-    def unregister(self, fd):
-        self._file_objs.remove(fd)
 
 @contextlib.contextmanager
 def test_socket(reads):
@@ -159,7 +150,7 @@
         socket.create_connection = old_conn
     return
 
-def test_telnet(reads=(), cls=TelnetAlike, use_poll=None):
+def test_telnet(reads=(), cls=TelnetAlike):
     ''' return a telnetlib.Telnet object that uses a SocketStub with
         reads queued up to be read '''
     for x in reads:
@@ -167,29 +158,14 @@
     with test_socket(reads):
         telnet = cls('dummy', 0)
         telnet._messages = '' # debuglevel output
-        if use_poll is not None:
-            if use_poll and not telnet._has_poll:
-                raise unittest.SkipTest('select.poll() required.')
-            telnet._has_poll = use_poll
     return telnet
 
-
 class ExpectAndReadTestCase(TestCase):
     def setUp(self):
-        self.old_select = select.select
-        select.select = mock_select
-        self.old_poll = False
-        if hasattr(select, 'poll'):
-            self.old_poll = select.poll
-            select.poll = MockPoller
-            MockPoller.test_case = self
-
+        self.old_selector = telnetlib._TelnetSelector
+        telnetlib._TelnetSelector = MockSelector
     def tearDown(self):
-        if self.old_poll:
-            MockPoller.test_case = None
-            select.poll = self.old_poll
-        select.select = self.old_select
-
+        telnetlib._TelnetSelector = self.old_selector
 
 class ReadTests(ExpectAndReadTestCase):
     def test_read_until(self):
@@ -208,22 +184,6 @@
         data = telnet.read_until(b'match')
         self.assertEqual(data, expect)
 
-    def test_read_until_with_poll(self):
-        """Use select.poll() to implement telnet.read_until()."""
-        want = [b'x' * 10, b'match', b'y' * 10]
-        telnet = test_telnet(want, use_poll=True)
-        select.select = lambda *_: self.fail('unexpected select() call.')
-        data = telnet.read_until(b'match')
-        self.assertEqual(data, b''.join(want[:-1]))
-
-    def test_read_until_with_select(self):
-        """Use select.select() to implement telnet.read_until()."""
-        want = [b'x' * 10, b'match', b'y' * 10]
-        telnet = test_telnet(want, use_poll=False)
-        if self.old_poll:
-            select.poll = lambda *_: self.fail('unexpected poll() call.')
-        data = telnet.read_until(b'match')
-        self.assertEqual(data, b''.join(want[:-1]))
 
     def test_read_all(self):
         """
@@ -427,23 +387,6 @@
         (_,_,data) = telnet.expect([b'match'])
         self.assertEqual(data, b''.join(want[:-1]))
 
-    def test_expect_with_poll(self):
-        """Use select.poll() to implement telnet.expect()."""
-        want = [b'x' * 10, b'match', b'y' * 10]
-        telnet = test_telnet(want, use_poll=True)
-        select.select = lambda *_: self.fail('unexpected select() call.')
-        (_,_,data) = telnet.expect([b'match'])
-        self.assertEqual(data, b''.join(want[:-1]))
-
-    def test_expect_with_select(self):
-        """Use select.select() to implement telnet.expect()."""
-        want = [b'x' * 10, b'match', b'y' * 10]
-        telnet = test_telnet(want, use_poll=False)
-        if self.old_poll:
-            select.poll = lambda *_: self.fail('unexpected poll() call.')
-        (_,_,data) = telnet.expect([b'match'])
-        self.assertEqual(data, b''.join(want[:-1]))
-
 
 def test_main(verbose=None):
     support.run_unittest(GeneralTests, ReadTests, WriteTests, OptionTests,
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
index 1ee36e2..ac4d860 100644
--- a/Lib/test/test_tempfile.py
+++ b/Lib/test/test_tempfile.py
@@ -478,6 +478,20 @@
 
         self.assertTrue(a is b)
 
+    def test_case_sensitive(self):
+        # gettempdir should not flatten its case
+        # even on a case-insensitive file system
+        case_sensitive_tempdir = tempfile.mkdtemp("-Temp")
+        _tempdir, tempfile.tempdir = tempfile.tempdir, None
+        try:
+            with support.EnvironmentVarGuard() as env:
+                # Fake the first env var which is checked as a candidate
+                env["TMPDIR"] = case_sensitive_tempdir
+                self.assertEqual(tempfile.gettempdir(), case_sensitive_tempdir)
+        finally:
+            tempfile.tempdir = _tempdir
+            support.rmdir(case_sensitive_tempdir)
+
 
 class TestMkstemp(BaseTestCase):
     """Test mkstemp()."""
diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py
index 36c15cc..1bba77e 100644
--- a/Lib/test/test_textwrap.py
+++ b/Lib/test/test_textwrap.py
@@ -42,10 +42,6 @@
                          "\nexpected %r\n"
                          "but got  %r" % (expect, result))
 
-    def check_shorten(self, text, width, expect, **kwargs):
-        result = shorten(text, width, **kwargs)
-        self.check(result, expect)
-
 
 class WrapTestCase(BaseTestCase):
 
@@ -433,6 +429,90 @@
         self.check_wrap(text, 7, ["aa \xe4\xe4-", "\xe4\xe4"])
 
 
+class MaxLinesTestCase(BaseTestCase):
+    text = "Hello there, how are you this fine day?  I'm glad to hear it!"
+
+    def test_simple(self):
+        self.check_wrap(self.text, 12,
+                        ["Hello [...]"],
+                        max_lines=0)
+        self.check_wrap(self.text, 12,
+                        ["Hello [...]"],
+                        max_lines=1)
+        self.check_wrap(self.text, 12,
+                        ["Hello there,",
+                         "how [...]"],
+                        max_lines=2)
+        self.check_wrap(self.text, 13,
+                        ["Hello there,",
+                         "how are [...]"],
+                        max_lines=2)
+        self.check_wrap(self.text, 80, [self.text], max_lines=1)
+        self.check_wrap(self.text, 12,
+                        ["Hello there,",
+                         "how are you",
+                         "this fine",
+                         "day?  I'm",
+                         "glad to hear",
+                         "it!"],
+                        max_lines=6)
+
+    def test_spaces(self):
+        # strip spaces before placeholder
+        self.check_wrap(self.text, 12,
+                        ["Hello there,",
+                         "how are you",
+                         "this fine",
+                         "day? [...]"],
+                        max_lines=4)
+        # placeholder at the start of line
+        self.check_wrap(self.text, 6,
+                        ["Hello",
+                         "[...]"],
+                        max_lines=2)
+        # final spaces
+        self.check_wrap(self.text + ' ' * 10, 12,
+                        ["Hello there,",
+                         "how are you",
+                         "this fine",
+                         "day?  I'm",
+                         "glad to hear",
+                         "it!"],
+                        max_lines=6)
+
+    def test_placeholder(self):
+        self.check_wrap(self.text, 12,
+                        ["Hello..."],
+                        max_lines=1,
+                        placeholder='...')
+        self.check_wrap(self.text, 12,
+                        ["Hello there,",
+                         "how are..."],
+                        max_lines=2,
+                        placeholder='...')
+        # long placeholder and indentation
+        with self.assertRaises(ValueError):
+            wrap(self.text, 16, initial_indent='    ',
+                 max_lines=1, placeholder=' [truncated]...')
+        with self.assertRaises(ValueError):
+            wrap(self.text, 16, subsequent_indent='    ',
+                 max_lines=2, placeholder=' [truncated]...')
+        self.check_wrap(self.text, 16,
+                        ["    Hello there,",
+                         "  [truncated]..."],
+                        max_lines=2,
+                        initial_indent='    ',
+                        subsequent_indent='  ',
+                        placeholder=' [truncated]...')
+        self.check_wrap(self.text, 16,
+                        ["  [truncated]..."],
+                        max_lines=1,
+                        initial_indent='  ',
+                        subsequent_indent='    ',
+                        placeholder=' [truncated]...')
+        self.check_wrap(self.text, 80, [self.text], placeholder='.' * 1000)
+
+
 class LongWordTestCase (BaseTestCase):
     def setUp(self):
         self.wrapper = TextWrapper()
@@ -493,6 +573,14 @@
         result = wrap(self.text, width=30, break_long_words=0)
         self.check(result, expect)
 
+    def test_max_lines_long(self):
+        self.check_wrap(self.text, 12,
+                        ['Did you say ',
+                         '"supercalifr',
+                         'agilisticexp',
+                         '[...]'],
+                        max_lines=4)
+
 
 class IndentTestCases(BaseTestCase):
 
@@ -782,6 +870,10 @@
 
 class ShortenTestCase(BaseTestCase):
 
+    def check_shorten(self, text, width, expect, **kwargs):
+        result = shorten(text, width, **kwargs)
+        self.check(result, expect)
+
     def test_simple(self):
         # Simple case: just words, spaces, and a bit of punctuation
         text = "Hello there, how are you this fine day? I'm glad to hear it!"
@@ -825,10 +917,9 @@
         self.check_shorten("hello      world!  ", 10, "[...]")
 
     def test_width_too_small_for_placeholder(self):
-        wrapper = TextWrapper(width=8)
-        wrapper.shorten("x" * 20, placeholder="(......)")
+        shorten("x" * 20, width=8, placeholder="(......)")
         with self.assertRaises(ValueError):
-            wrapper.shorten("x" * 20, placeholder="(.......)")
+            shorten("x" * 20, width=8, placeholder="(.......)")
 
     def test_first_word_too_long_but_placeholder_fits(self):
         self.check_shorten("Helloo", 5, "[...]")
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index c39d5e2..66eace0 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -599,6 +599,70 @@
             time.sleep(0.01)
         self.assertIn(LOOKING_FOR, repr(t)) # we waited at least 5 seconds
 
+    def test_BoundedSemaphore_limit(self):
+        # BoundedSemaphore should raise ValueError if released too often.
+        for limit in range(1, 10):
+            bs = threading.BoundedSemaphore(limit)
+            threads = [threading.Thread(target=bs.acquire)
+                       for _ in range(limit)]
+            for t in threads:
+                t.start()
+            for t in threads:
+                t.join()
+            threads = [threading.Thread(target=bs.release)
+                       for _ in range(limit)]
+            for t in threads:
+                t.start()
+            for t in threads:
+                t.join()
+            self.assertRaises(ValueError, bs.release)
+
+    def test_locals_at_exit(self):
+        # Issue #19466: thread locals must not be deleted before destructors
+        # are called
+        rc, out, err = assert_python_ok("-c", """if 1:
+            import threading
+
+            class Atexit:
+                def __del__(self):
+                    print("thread_dict.atexit = %r" % thread_dict.atexit)
+
+            thread_dict = threading.local()
+            thread_dict.atexit = "atexit"
+
+            atexit = Atexit()
+        """)
+        self.assertEqual(out.rstrip(), b"thread_dict.atexit = 'atexit'")
+
+    def test_warnings_at_exit(self):
+        # Issue #19466: try to call most destructors at Python shutdown before
+        # destroying Python thread states
+        filename = __file__
+        rc, out, err = assert_python_ok("-Wd", "-c", """if 1:
+            import time
+            import threading
+
+            def open_sleep():
+                # a warning will be emitted when the open file will be
+                # destroyed (without being explicitly closed) while the daemon
+                # thread is destroyed
+                fileobj = open(%a, 'rb')
+                start_event.set()
+                time.sleep(60.0)
+
+            start_event = threading.Event()
+
+            thread = threading.Thread(target=open_sleep)
+            thread.daemon = True
+            thread.start()
+
+            # wait until the thread started
+            start_event.wait()
+        """ % filename)
+        self.assertRegex(err.rstrip(),
+                         b"^sys:1: ResourceWarning: unclosed file ")
+
+
 class ThreadJoinOnShutdown(BaseTestCase):
 
     def _run_and_join(self, script):
@@ -683,6 +747,10 @@
             import sys
             import time
             import threading
+            import warnings
+
+            # ignore "unclosed file ..." warnings
+            warnings.filterwarnings('ignore', '', ResourceWarning)
 
             thread_has_run = set()
 
@@ -839,7 +907,8 @@
 
             _testcapi.run_in_subinterp(%r)
             """ % (subinterp_code,)
-        rc, out, err = assert_python_failure("-c", script)
+        with test.support.SuppressCrashReport():
+            rc, out, err = assert_python_failure("-c", script)
         self.assertIn("Fatal Python error: Py_EndInterpreter: "
                       "not the last thread", err.decode())
 
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index c8fa7f3..727897e 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -1831,7 +1831,7 @@
         # 0-127
         s = bytes(range(128))
         for encoding in (
-            'cp037', 'cp1026',
+            'cp037', 'cp1026', 'cp273',
             'cp437', 'cp500', 'cp720', 'cp737', 'cp775', 'cp850',
             'cp852', 'cp855', 'cp858', 'cp860', 'cp861', 'cp862',
             'cp863', 'cp865', 'cp866',
@@ -1859,7 +1859,7 @@
         # 128-255
         s = bytes(range(128, 256))
         for encoding in (
-            'cp037', 'cp1026',
+            'cp037', 'cp1026', 'cp273',
             'cp437', 'cp500', 'cp720', 'cp737', 'cp775', 'cp850',
             'cp852', 'cp855', 'cp858', 'cp860', 'cp861', 'cp862',
             'cp863', 'cp865', 'cp866',
diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
index 677508b..707b30e 100644
--- a/Lib/test/test_unicodedata.py
+++ b/Lib/test/test_unicodedata.py
@@ -21,7 +21,7 @@
 class UnicodeMethodsTest(unittest.TestCase):
 
     # update this, if the database changes
-    expectedchecksum = 'bf7a78f1a532421b5033600102e23a92044dbba9'
+    expectedchecksum = 'e74e878de71b6e780ffac271785c3cb58f6251f3'
 
     def test_method_checksum(self):
         h = hashlib.sha1()
@@ -80,7 +80,7 @@
 class UnicodeFunctionsTest(UnicodeDatabaseTest):
 
     # update this, if the database changes
-    expectedchecksum = 'ebd64e81553c9cb37f424f5616254499fcd8849e'
+    expectedchecksum = 'f0b74d26776331cc7bdc3a4698f037d73f2cee2b'
     def test_function_checksum(self):
         data = []
         h = hashlib.sha1()
diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py
index 464ff40..87463ac 100644
--- a/Lib/test/test_warnings.py
+++ b/Lib/test/test_warnings.py
@@ -271,11 +271,10 @@
         finally:
             warning_tests.__file__ = filename
 
+    @unittest.skipUnless(hasattr(sys, 'argv'), 'test needs sys.argv')
     def test_missing_filename_main_with_argv(self):
         # If __file__ is not specified and the caller is __main__ and sys.argv
         # exists, then use sys.argv[0] as the file.
-        if not hasattr(sys, 'argv'):
-            return
         filename = warning_tests.__file__
         module_name = warning_tests.__name__
         try:
@@ -331,6 +330,19 @@
             warning_tests.__name__ = module_name
             sys.argv = argv
 
+    def test_warn_explicit_non_ascii_filename(self):
+        with original_warnings.catch_warnings(record=True,
+                module=self.module) as w:
+            self.module.resetwarnings()
+            self.module.filterwarnings("always", category=UserWarning)
+            for filename in ("nonascii\xe9\u20ac", "surrogate\udc80"):
+                try:
+                    os.fsencode(filename)
+                except UnicodeEncodeError:
+                    continue
+                self.module.warn_explicit("text", UserWarning, filename, 1)
+                self.assertEqual(w[-1].filename, filename)
+
     def test_warn_explicit_type_errors(self):
         # warn_explicit() should error out gracefully if it is given objects
         # of the wrong types.
@@ -788,6 +800,25 @@
                 env=env)
             self.assertEqual(retcode, 0)
 
+class FinalizationTest(unittest.TestCase):
+    def test_finalization(self):
+        # Issue #19421: warnings.warn() should not crash
+        # during Python finalization
+        code = """
+import warnings
+warn = warnings.warn
+
+class A:
+    def __del__(self):
+        warn("test")
+
+a=A()
+        """
+        rc, out, err = assert_python_ok("-c", code)
+        # note: "__main__" filename is not correct, it should be the name
+        # of the script
+        self.assertEqual(err, b'__main__:7: UserWarning: test')
+
 
 def setUpModule():
     py_warnings.onceregistry.clear()
diff --git a/Lib/test/test_wave.py b/Lib/test/test_wave.py
index 30dca90b..cf069ae 100644
--- a/Lib/test/test_wave.py
+++ b/Lib/test/test_wave.py
@@ -1,129 +1,112 @@
-from test.support import TESTFN, unlink
-import wave
-import pickle
+from test.support import TESTFN
 import unittest
+from test import audiotests
+import sys
+import wave
 
-nchannels = 2
-sampwidth = 2
-framerate = 8000
-nframes = 100
 
-class TestWave(unittest.TestCase):
+class WavePCM8Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = wave
+    sndfilename = 'pluck-pcm8.wav'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 1
+    framerate = 11025
+    nframes = 48
+    comptype = 'NONE'
+    compname = 'not compressed'
+    frames = bytes.fromhex("""\
+      827F CB80 B184 0088 4B86 C883 3F81 837E 387A 3473 A96B 9A66 \
+      6D64 4662 8E60 6F60 D762 7B68 936F 5877 177B 757C 887B 5F7B \
+      917A BE7B 3C7C E67F 4F84 C389 418E D192 6E97 0296 FF94 0092 \
+      C98E D28D 6F8F 4E8F 648C E38A 888A AB8B D18E 0B91 368E C48A \
+      """)
 
-    def setUp(self):
-        self.f = None
 
-    def tearDown(self):
-        if self.f is not None:
-            self.f.close()
-        unlink(TESTFN)
+class WavePCM16Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = wave
+    sndfilename = 'pluck-pcm16.wav'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 2
+    framerate = 11025
+    nframes = 48
+    comptype = 'NONE'
+    compname = 'not compressed'
+    frames = bytes.fromhex("""\
+      022EFFEA 4B5C00F9 311404EF 80DC0843 CBDF06B2 48AA03F3 BFE701B2 036BFE7C \
+      B857FA3E B4B2F34F 2999EBCA 1A5FE6D7 EDFCE491 C626E279 0E05E0B8 EF27E02D \
+      5754E275 FB31E843 1373EF89 D827F72C 978BFB7A F5F7FC11 0866FB9C DF30FB42 \
+      117FFA36 3EE4FB5D BC75FCB6 66D5FF5F CF16040E 43220978 C1BC0EC8 511F12A4 \
+      EEDF1755 82061666 7FFF1446 80001296 499C0EB2 52BA0DB9 EFB70F5C CE400FBC \
+      E4B50CEB 63440A5A 08CA0A1F 2BBA0B0B 51460E47 8BCB113C B6F50EEA 44150A59 \
+      """)
+    if sys.byteorder != 'big':
+        frames = audiotests.byteswap2(frames)
 
-    def test_it(self, test_rounding=False):
-        self.f = wave.open(TESTFN, 'wb')
-        self.f.setnchannels(nchannels)
-        self.f.setsampwidth(sampwidth)
-        if test_rounding:
-            self.f.setframerate(framerate - 0.1)
-        else:
-            self.f.setframerate(framerate)
-        self.f.setnframes(nframes)
-        output = b'\0' * nframes * nchannels * sampwidth
-        self.f.writeframes(output)
-        self.f.close()
 
-        self.f = wave.open(TESTFN, 'rb')
-        self.assertEqual(nchannels, self.f.getnchannels())
-        self.assertEqual(sampwidth, self.f.getsampwidth())
-        self.assertEqual(framerate, self.f.getframerate())
-        self.assertEqual(nframes, self.f.getnframes())
-        self.assertEqual(self.f.readframes(nframes), output)
+class WavePCM24Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = wave
+    sndfilename = 'pluck-pcm24.wav'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 3
+    framerate = 11025
+    nframes = 48
+    comptype = 'NONE'
+    compname = 'not compressed'
+    frames = bytes.fromhex("""\
+      022D65FFEB9D 4B5A0F00FA54 3113C304EE2B 80DCD6084303 \
+      CBDEC006B261 48A99803F2F8 BFE82401B07D 036BFBFE7B5D \
+      B85756FA3EC9 B4B055F3502B 299830EBCB62 1A5CA7E6D99A \
+      EDFA3EE491BD C625EBE27884 0E05A9E0B6CF EF2929E02922 \
+      5758D8E27067 FB3557E83E16 1377BFEF8402 D82C5BF7272A \
+      978F16FB7745 F5F865FC1013 086635FB9C4E DF30FCFB40EE \
+      117FE0FA3438 3EE6B8FB5AC3 BC77A3FCB2F4 66D6DAFF5F32 \
+      CF13B9041275 431D69097A8C C1BB600EC74E 5120B912A2BA \
+      EEDF641754C0 8207001664B7 7FFFFF14453F 8000001294E6 \
+      499C1B0EB3B2 52B73E0DBCA0 EFB2B20F5FD8 CE3CDB0FBE12 \
+      E4B49C0CEA2D 6344A80A5A7C 08C8FE0A1FFE 2BB9860B0A0E \
+      51486F0E44E1 8BCC64113B05 B6F4EC0EEB36 4413170A5B48 \
+      """)
+    if sys.byteorder != 'big':
+        frames = audiotests.byteswap3(frames)
 
-    def test_fractional_framerate(self):
-        """
-        Addresses [ 1512791 ] module wave does no rounding
-        Floating point framerates should be rounded, rather than truncated.
-        """
-        self.test_it(test_rounding=True)
 
-    def test_issue7681(self):
-        self.f = wave.open(TESTFN, 'wb')
-        self.f.setnchannels(nchannels)
-        self.f.setsampwidth(sampwidth)
-        self.f.setframerate(framerate)
-        # Don't call setnframes, make _write_header divide to figure it out
-        output = b'\0' * nframes * nchannels * sampwidth
-        self.f.writeframes(output)
-
-    def test_getparams(self):
-        self.f = wave.open(TESTFN, 'wb')
-        self.f.setnchannels(nchannels)
-        self.f.setsampwidth(sampwidth)
-        self.f.setframerate(framerate)
-        self.f.close()
-
-        self.f = wave.open(TESTFN, 'rb')
-        params = self.f.getparams()
-        self.assertEqual(params.nchannels, self.f.getnchannels())
-        self.assertEqual(params.nframes, self.f.getnframes())
-        self.assertEqual(params.sampwidth, self.f.getsampwidth())
-        self.assertEqual(params.framerate, self.f.getframerate())
-        self.assertEqual(params.comptype, self.f.getcomptype())
-        self.assertEqual(params.compname, self.f.getcompname())
-
-    def test_getparams_picklable(self):
-        self.f = wave.open(TESTFN, 'wb')
-        self.f.setnchannels(nchannels)
-        self.f.setsampwidth(sampwidth)
-        self.f.setframerate(framerate)
-        self.f.close()
-
-        self.f = wave.open(TESTFN, 'rb')
-        params = self.f.getparams()
-        dump = pickle.dumps(params)
-        self.assertEqual(pickle.loads(dump), params)
-
-    def test_wave_write_context_manager_calls_close(self):
-        # Close checks for a minimum header and will raise an error
-        # if it is not set, so this proves that close is called.
-        with self.assertRaises(wave.Error):
-            with wave.open(TESTFN, 'wb') as f:
-                pass
-        with self.assertRaises(wave.Error):
-            with open(TESTFN, 'wb') as testfile:
-                with wave.open(testfile):
-                    pass
-
-    def test_context_manager_with_open_file(self):
-        with open(TESTFN, 'wb') as testfile:
-            with wave.open(testfile) as f:
-                f.setnchannels(nchannels)
-                f.setsampwidth(sampwidth)
-                f.setframerate(framerate)
-            self.assertFalse(testfile.closed)
-        with open(TESTFN, 'rb') as testfile:
-            with wave.open(testfile) as f:
-                self.assertFalse(f.getfp().closed)
-                params = f.getparams()
-                self.assertEqual(params.nchannels, nchannels)
-                self.assertEqual(params.sampwidth, sampwidth)
-                self.assertEqual(params.framerate, framerate)
-            self.assertIsNone(f.getfp())
-            self.assertFalse(testfile.closed)
-
-    def test_context_manager_with_filename(self):
-        # If the file doesn't get closed, this test won't fail, but it will
-        # produce a resource leak warning.
-        with wave.open(TESTFN, 'wb') as f:
-            f.setnchannels(nchannels)
-            f.setsampwidth(sampwidth)
-            f.setframerate(framerate)
-        with wave.open(TESTFN) as f:
-            self.assertFalse(f.getfp().closed)
-            params = f.getparams()
-            self.assertEqual(params.nchannels, nchannels)
-            self.assertEqual(params.sampwidth, sampwidth)
-            self.assertEqual(params.framerate, framerate)
-        self.assertIsNone(f.getfp())
+class WavePCM32Test(audiotests.AudioWriteTests,
+        audiotests.AudioTestsWithSourceFile,
+        unittest.TestCase):
+    module = wave
+    sndfilename = 'pluck-pcm32.wav'
+    sndfilenframes = 3307
+    nchannels = 2
+    sampwidth = 4
+    framerate = 11025
+    nframes = 48
+    comptype = 'NONE'
+    compname = 'not compressed'
+    frames = bytes.fromhex("""\
+      022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \
+      CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \
+      B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \
+      EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \
+      5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \
+      978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \
+      117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \
+      CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \
+      EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \
+      499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \
+      E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \
+      51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \
+      """)
+    if sys.byteorder != 'big':
+        frames = audiotests.byteswap4(frames)
 
 
 if __name__ == '__main__':
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
index 7fc52e3..99b3eda 100644
--- a/Lib/test/test_xmlrpc.py
+++ b/Lib/test/test_xmlrpc.py
@@ -380,6 +380,11 @@
             if name == 'div':
                 return 'This is the div function'
 
+        class Fixture:
+            @staticmethod
+            def getData():
+                return '42'
+
     def my_function():
         '''This is my function'''
         return True
@@ -411,7 +416,8 @@
         serv.register_function(pow)
         serv.register_function(lambda x,y: x+y, 'add')
         serv.register_function(my_function)
-        serv.register_instance(TestInstanceClass())
+        testInstance = TestInstanceClass()
+        serv.register_instance(testInstance, allow_dotted_names=True)
         evt.set()
 
         # handle up to 'numrequests' requests
@@ -591,7 +597,8 @@
     def test_introspection1(self):
         expected_methods = set(['pow', 'div', 'my_function', 'add',
                                 'system.listMethods', 'system.methodHelp',
-                                'system.methodSignature', 'system.multicall'])
+                                'system.methodSignature', 'system.multicall',
+                                'Fixture'])
         try:
             p = xmlrpclib.ServerProxy(URL)
             meth = p.system.listMethods()
@@ -690,6 +697,12 @@
         # This avoids waiting for the socket timeout.
         self.test_simple1()
 
+    def test_allow_dotted_names_true(self):
+        # XXX also need allow_dotted_names_false test.
+        server = xmlrpclib.ServerProxy("http://%s:%d/RPC2" % (ADDR, PORT))
+        data = server.Fixture.getData()
+        self.assertEqual(data, '42')
+
     def test_unicode_host(self):
         server = xmlrpclib.ServerProxy("http://%s:%d/RPC2" % (ADDR, PORT))
         self.assertEqual(server.add("a", "\xe9"), "a\xe9")
diff --git a/Lib/test/test_xmlrpc_net.py b/Lib/test/test_xmlrpc_net.py
index 457e3fb..00aca19 100644
--- a/Lib/test/test_xmlrpc_net.py
+++ b/Lib/test/test_xmlrpc_net.py
@@ -9,32 +9,7 @@
 
 import xmlrpc.client as xmlrpclib
 
-class CurrentTimeTest(unittest.TestCase):
-
-    def test_current_time(self):
-        # Get the current time from xmlrpc.com.  This code exercises
-        # the minimal HTTP functionality in xmlrpclib.
-        self.skipTest("time.xmlrpc.com is unreliable")
-        server = xmlrpclib.ServerProxy("http://time.xmlrpc.com/RPC2")
-        try:
-            t0 = server.currentTime.getCurrentTime()
-        except OSError as e:
-            self.skipTest("network error: %s" % e)
-            return
-
-        # Perform a minimal sanity check on the result, just to be sure
-        # the request means what we think it means.
-        t1 = xmlrpclib.DateTime()
-
-        dt0 = xmlrpclib._datetime_type(t0.value)
-        dt1 = xmlrpclib._datetime_type(t1.value)
-        if dt0 > dt1:
-            delta = dt0 - dt1
-        else:
-            delta = dt1 - dt0
-        # The difference between the system time here and the system
-        # time on the server should not be too big.
-        self.assertTrue(delta.days <= 1)
+class PythonBuildersTest(unittest.TestCase):
 
     def test_python_builders(self):
         # Get the list of builders from the XMLRPC buildbot interface at
@@ -55,7 +30,7 @@
 
 def test_main():
     support.requires("network")
-    support.run_unittest(CurrentTimeTest)
+    support.run_unittest(PythonBuildersTest)
 
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index 899a3fb..7249b13 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -591,6 +591,34 @@
             self.assertCompiledIn('email/__init__.py', names)
             self.assertCompiledIn('email/mime/text.py', names)
 
+    def test_write_filtered_python_package(self):
+        import test
+        packagedir = os.path.dirname(test.__file__)
+
+        with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
+
+            # first make sure that the test folder gives error messages
+            # (on the badsyntax_... files)
+            with captured_stdout() as reportSIO:
+                zipfp.writepy(packagedir)
+            reportStr = reportSIO.getvalue()
+            self.assertTrue('SyntaxError' in reportStr)
+
+            # then check that the filter works on the whole package
+            with captured_stdout() as reportSIO:
+                zipfp.writepy(packagedir, filterfunc=lambda whatever: False)
+            reportStr = reportSIO.getvalue()
+            self.assertTrue('SyntaxError' not in reportStr)
+
+            # then check that the filter works on individual files
+            with captured_stdout() as reportSIO:
+                zipfp.writepy(packagedir, filterfunc=lambda fn:
+                                                     'bad' not in fn)
+            reportStr = reportSIO.getvalue()
+            if reportStr:
+                print(reportStr)
+            self.assertTrue('SyntaxError' not in reportStr)
+
     def test_write_with_optimization(self):
         import email
         packagedir = os.path.dirname(email.__file__)
@@ -600,7 +628,7 @@
         ext = '.pyo' if optlevel == 1 else '.pyc'
 
         with TemporaryFile() as t, \
-                 zipfile.PyZipFile(t, "w", optimize=optlevel) as zipfp:
+             zipfile.PyZipFile(t, "w", optimize=optlevel) as zipfp:
             zipfp.writepy(packagedir)
 
             names = zipfp.namelist()
@@ -630,6 +658,26 @@
         finally:
             shutil.rmtree(TESTFN2)
 
+    def test_write_python_directory_filtered(self):
+        os.mkdir(TESTFN2)
+        try:
+            with open(os.path.join(TESTFN2, "mod1.py"), "w") as fp:
+                fp.write("print(42)\n")
+
+            with open(os.path.join(TESTFN2, "mod2.py"), "w") as fp:
+                fp.write("print(42 * 42)\n")
+
+            with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
+                zipfp.writepy(TESTFN2, filterfunc=lambda fn:
+                                                  not fn.endswith('mod2.py'))
+
+                names = zipfp.namelist()
+                self.assertCompiledIn('mod1.py', names)
+                self.assertNotIn('mod2.py', names)
+
+        finally:
+            shutil.rmtree(TESTFN2)
+
     def test_write_non_pyfile(self):
         with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
             with open(TESTFN, 'w') as f:
@@ -733,25 +781,25 @@
     def test_extract_hackers_arcnames_windows_only(self):
         """Test combination of path fixing and windows name sanitization."""
         windows_hacknames = [
-                (r'..\foo\bar', 'foo/bar'),
-                (r'..\/foo\/bar', 'foo/bar'),
-                (r'foo/\..\/bar', 'foo/bar'),
-                (r'foo\/../\bar', 'foo/bar'),
-                (r'C:foo/bar', 'foo/bar'),
-                (r'C:/foo/bar', 'foo/bar'),
-                (r'C://foo/bar', 'foo/bar'),
-                (r'C:\foo\bar', 'foo/bar'),
-                (r'//conky/mountpoint/foo/bar', 'foo/bar'),
-                (r'\\conky\mountpoint\foo\bar', 'foo/bar'),
-                (r'///conky/mountpoint/foo/bar', 'conky/mountpoint/foo/bar'),
-                (r'\\\conky\mountpoint\foo\bar', 'conky/mountpoint/foo/bar'),
-                (r'//conky//mountpoint/foo/bar', 'conky/mountpoint/foo/bar'),
-                (r'\\conky\\mountpoint\foo\bar', 'conky/mountpoint/foo/bar'),
-                (r'//?/C:/foo/bar', 'foo/bar'),
-                (r'\\?\C:\foo\bar', 'foo/bar'),
-                (r'C:/../C:/foo/bar', 'C_/foo/bar'),
-                (r'a:b\c<d>e|f"g?h*i', 'b/c_d_e_f_g_h_i'),
-                ('../../foo../../ba..r', 'foo/ba..r'),
+            (r'..\foo\bar', 'foo/bar'),
+            (r'..\/foo\/bar', 'foo/bar'),
+            (r'foo/\..\/bar', 'foo/bar'),
+            (r'foo\/../\bar', 'foo/bar'),
+            (r'C:foo/bar', 'foo/bar'),
+            (r'C:/foo/bar', 'foo/bar'),
+            (r'C://foo/bar', 'foo/bar'),
+            (r'C:\foo\bar', 'foo/bar'),
+            (r'//conky/mountpoint/foo/bar', 'foo/bar'),
+            (r'\\conky\mountpoint\foo\bar', 'foo/bar'),
+            (r'///conky/mountpoint/foo/bar', 'conky/mountpoint/foo/bar'),
+            (r'\\\conky\mountpoint\foo\bar', 'conky/mountpoint/foo/bar'),
+            (r'//conky//mountpoint/foo/bar', 'conky/mountpoint/foo/bar'),
+            (r'\\conky\\mountpoint\foo\bar', 'conky/mountpoint/foo/bar'),
+            (r'//?/C:/foo/bar', 'foo/bar'),
+            (r'\\?\C:\foo\bar', 'foo/bar'),
+            (r'C:/../C:/foo/bar', 'C_/foo/bar'),
+            (r'a:b\c<d>e|f"g?h*i', 'b/c_d_e_f_g_h_i'),
+            ('../../foo../../ba..r', 'foo/ba..r'),
         ]
         self._test_extract_hackers_arcnames(windows_hacknames)
 
@@ -877,10 +925,10 @@
     def test_unsupported_version(self):
         # File has an extract_version of 120
         data = (b'PK\x03\x04x\x00\x00\x00\x00\x00!p\xa1@\x00\x00\x00\x00\x00\x00'
-        b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00xPK\x01\x02x\x03x\x00\x00\x00\x00'
-        b'\x00!p\xa1@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00'
-        b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00xPK\x05\x06'
-        b'\x00\x00\x00\x00\x01\x00\x01\x00/\x00\x00\x00\x1f\x00\x00\x00\x00\x00')
+                b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00xPK\x01\x02x\x03x\x00\x00\x00\x00'
+                b'\x00!p\xa1@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00'
+                b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00xPK\x05\x06'
+                b'\x00\x00\x00\x00\x01\x00\x01\x00/\x00\x00\x00\x1f\x00\x00\x00\x00\x00')
 
         self.assertRaises(NotImplementedError, zipfile.ZipFile,
                           io.BytesIO(data), 'r')
@@ -1066,11 +1114,11 @@
     def test_unsupported_compression(self):
         # data is declared as shrunk, but actually deflated
         data = (b'PK\x03\x04.\x00\x00\x00\x01\x00\xe4C\xa1@\x00\x00\x00'
-        b'\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00x\x03\x00PK\x01'
-        b'\x02.\x03.\x00\x00\x00\x01\x00\xe4C\xa1@\x00\x00\x00\x00\x02\x00\x00'
-        b'\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
-        b'\x80\x01\x00\x00\x00\x00xPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00'
-        b'/\x00\x00\x00!\x00\x00\x00\x00\x00')
+                b'\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00x\x03\x00PK\x01'
+                b'\x02.\x03.\x00\x00\x00\x01\x00\xe4C\xa1@\x00\x00\x00\x00\x02\x00\x00'
+                b'\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                b'\x80\x01\x00\x00\x00\x00xPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00'
+                b'/\x00\x00\x00!\x00\x00\x00\x00\x00')
         with zipfile.ZipFile(io.BytesIO(data), 'r') as zipf:
             self.assertRaises(NotImplementedError, zipf.open, 'x')
 
@@ -1232,57 +1280,57 @@
 class StoredBadCrcTests(AbstractBadCrcTests, unittest.TestCase):
     compression = zipfile.ZIP_STORED
     zip_with_bad_crc = (
-            b'PK\003\004\024\0\0\0\0\0 \213\212;:r'
-            b'\253\377\f\0\0\0\f\0\0\0\005\0\0\000af'
-            b'ilehello,AworldP'
-            b'K\001\002\024\003\024\0\0\0\0\0 \213\212;:'
-            b'r\253\377\f\0\0\0\f\0\0\0\005\0\0\0\0'
-            b'\0\0\0\0\0\0\0\200\001\0\0\0\000afi'
-            b'lePK\005\006\0\0\0\0\001\0\001\0003\000'
-            b'\0\0/\0\0\0\0\0')
+        b'PK\003\004\024\0\0\0\0\0 \213\212;:r'
+        b'\253\377\f\0\0\0\f\0\0\0\005\0\0\000af'
+        b'ilehello,AworldP'
+        b'K\001\002\024\003\024\0\0\0\0\0 \213\212;:'
+        b'r\253\377\f\0\0\0\f\0\0\0\005\0\0\0\0'
+        b'\0\0\0\0\0\0\0\200\001\0\0\0\000afi'
+        b'lePK\005\006\0\0\0\0\001\0\001\0003\000'
+        b'\0\0/\0\0\0\0\0')
 
 @requires_zlib
 class DeflateBadCrcTests(AbstractBadCrcTests, unittest.TestCase):
     compression = zipfile.ZIP_DEFLATED
     zip_with_bad_crc = (
-            b'PK\x03\x04\x14\x00\x00\x00\x08\x00n}\x0c=FA'
-            b'KE\x10\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
-            b'ile\xcbH\xcd\xc9\xc9W(\xcf/\xcaI\xc9\xa0'
-            b'=\x13\x00PK\x01\x02\x14\x03\x14\x00\x00\x00\x08\x00n'
-            b'}\x0c=FAKE\x10\x00\x00\x00n\x00\x00\x00\x05'
-            b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00'
-            b'\x00afilePK\x05\x06\x00\x00\x00\x00\x01\x00'
-            b'\x01\x003\x00\x00\x003\x00\x00\x00\x00\x00')
+        b'PK\x03\x04\x14\x00\x00\x00\x08\x00n}\x0c=FA'
+        b'KE\x10\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
+        b'ile\xcbH\xcd\xc9\xc9W(\xcf/\xcaI\xc9\xa0'
+        b'=\x13\x00PK\x01\x02\x14\x03\x14\x00\x00\x00\x08\x00n'
+        b'}\x0c=FAKE\x10\x00\x00\x00n\x00\x00\x00\x05'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00'
+        b'\x00afilePK\x05\x06\x00\x00\x00\x00\x01\x00'
+        b'\x01\x003\x00\x00\x003\x00\x00\x00\x00\x00')
 
 @requires_bz2
 class Bzip2BadCrcTests(AbstractBadCrcTests, unittest.TestCase):
     compression = zipfile.ZIP_BZIP2
     zip_with_bad_crc = (
-            b'PK\x03\x04\x14\x03\x00\x00\x0c\x00nu\x0c=FA'
-            b'KE8\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
-            b'ileBZh91AY&SY\xd4\xa8\xca'
-            b'\x7f\x00\x00\x0f\x11\x80@\x00\x06D\x90\x80 \x00 \xa5'
-            b'P\xd9!\x03\x03\x13\x13\x13\x89\xa9\xa9\xc2u5:\x9f'
-            b'\x8b\xb9"\x9c(HjTe?\x80PK\x01\x02\x14'
-            b'\x03\x14\x03\x00\x00\x0c\x00nu\x0c=FAKE8'
-            b'\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00'
-            b'\x00 \x80\x80\x81\x00\x00\x00\x00afilePK'
-            b'\x05\x06\x00\x00\x00\x00\x01\x00\x01\x003\x00\x00\x00[\x00'
-            b'\x00\x00\x00\x00')
+        b'PK\x03\x04\x14\x03\x00\x00\x0c\x00nu\x0c=FA'
+        b'KE8\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
+        b'ileBZh91AY&SY\xd4\xa8\xca'
+        b'\x7f\x00\x00\x0f\x11\x80@\x00\x06D\x90\x80 \x00 \xa5'
+        b'P\xd9!\x03\x03\x13\x13\x13\x89\xa9\xa9\xc2u5:\x9f'
+        b'\x8b\xb9"\x9c(HjTe?\x80PK\x01\x02\x14'
+        b'\x03\x14\x03\x00\x00\x0c\x00nu\x0c=FAKE8'
+        b'\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00 \x80\x80\x81\x00\x00\x00\x00afilePK'
+        b'\x05\x06\x00\x00\x00\x00\x01\x00\x01\x003\x00\x00\x00[\x00'
+        b'\x00\x00\x00\x00')
 
 @requires_lzma
 class LzmaBadCrcTests(AbstractBadCrcTests, unittest.TestCase):
     compression = zipfile.ZIP_LZMA
     zip_with_bad_crc = (
-            b'PK\x03\x04\x14\x03\x00\x00\x0e\x00nu\x0c=FA'
-            b'KE\x1b\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
-            b'ile\t\x04\x05\x00]\x00\x00\x00\x04\x004\x19I'
-            b'\xee\x8d\xe9\x17\x89:3`\tq!.8\x00PK'
-            b'\x01\x02\x14\x03\x14\x03\x00\x00\x0e\x00nu\x0c=FA'
-            b'KE\x1b\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00\x00\x00'
-            b'\x00\x00\x00\x00 \x80\x80\x81\x00\x00\x00\x00afil'
-            b'ePK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x003\x00\x00'
-            b'\x00>\x00\x00\x00\x00\x00')
+        b'PK\x03\x04\x14\x03\x00\x00\x0e\x00nu\x0c=FA'
+        b'KE\x1b\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00af'
+        b'ile\t\x04\x05\x00]\x00\x00\x00\x04\x004\x19I'
+        b'\xee\x8d\xe9\x17\x89:3`\tq!.8\x00PK'
+        b'\x01\x02\x14\x03\x14\x03\x00\x00\x0e\x00nu\x0c=FA'
+        b'KE\x1b\x00\x00\x00n\x00\x00\x00\x05\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00 \x80\x80\x81\x00\x00\x00\x00afil'
+        b'ePK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x003\x00\x00'
+        b'\x00>\x00\x00\x00\x00\x00')
 
 
 class DecryptionTests(unittest.TestCase):
@@ -1291,22 +1339,22 @@
     ZIP file."""
 
     data = (
-    b'PK\x03\x04\x14\x00\x01\x00\x00\x00n\x92i.#y\xef?&\x00\x00\x00\x1a\x00'
-    b'\x00\x00\x08\x00\x00\x00test.txt\xfa\x10\xa0gly|\xfa-\xc5\xc0=\xf9y'
-    b'\x18\xe0\xa8r\xb3Z}Lg\xbc\xae\xf9|\x9b\x19\xe4\x8b\xba\xbb)\x8c\xb0\xdbl'
-    b'PK\x01\x02\x14\x00\x14\x00\x01\x00\x00\x00n\x92i.#y\xef?&\x00\x00\x00'
-    b'\x1a\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x01\x00 \x00\xb6\x81'
-    b'\x00\x00\x00\x00test.txtPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x006\x00'
-    b'\x00\x00L\x00\x00\x00\x00\x00' )
+        b'PK\x03\x04\x14\x00\x01\x00\x00\x00n\x92i.#y\xef?&\x00\x00\x00\x1a\x00'
+        b'\x00\x00\x08\x00\x00\x00test.txt\xfa\x10\xa0gly|\xfa-\xc5\xc0=\xf9y'
+        b'\x18\xe0\xa8r\xb3Z}Lg\xbc\xae\xf9|\x9b\x19\xe4\x8b\xba\xbb)\x8c\xb0\xdbl'
+        b'PK\x01\x02\x14\x00\x14\x00\x01\x00\x00\x00n\x92i.#y\xef?&\x00\x00\x00'
+        b'\x1a\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x01\x00 \x00\xb6\x81'
+        b'\x00\x00\x00\x00test.txtPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x006\x00'
+        b'\x00\x00L\x00\x00\x00\x00\x00' )
     data2 = (
-    b'PK\x03\x04\x14\x00\t\x00\x08\x00\xcf}38xu\xaa\xb2\x14\x00\x00\x00\x00\x02'
-    b'\x00\x00\x04\x00\x15\x00zeroUT\t\x00\x03\xd6\x8b\x92G\xda\x8b\x92GUx\x04'
-    b'\x00\xe8\x03\xe8\x03\xc7<M\xb5a\xceX\xa3Y&\x8b{oE\xd7\x9d\x8c\x98\x02\xc0'
-    b'PK\x07\x08xu\xaa\xb2\x14\x00\x00\x00\x00\x02\x00\x00PK\x01\x02\x17\x03'
-    b'\x14\x00\t\x00\x08\x00\xcf}38xu\xaa\xb2\x14\x00\x00\x00\x00\x02\x00\x00'
-    b'\x04\x00\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00ze'
-    b'roUT\x05\x00\x03\xd6\x8b\x92GUx\x00\x00PK\x05\x06\x00\x00\x00\x00\x01'
-    b'\x00\x01\x00?\x00\x00\x00[\x00\x00\x00\x00\x00' )
+        b'PK\x03\x04\x14\x00\t\x00\x08\x00\xcf}38xu\xaa\xb2\x14\x00\x00\x00\x00\x02'
+        b'\x00\x00\x04\x00\x15\x00zeroUT\t\x00\x03\xd6\x8b\x92G\xda\x8b\x92GUx\x04'
+        b'\x00\xe8\x03\xe8\x03\xc7<M\xb5a\xceX\xa3Y&\x8b{oE\xd7\x9d\x8c\x98\x02\xc0'
+        b'PK\x07\x08xu\xaa\xb2\x14\x00\x00\x00\x00\x02\x00\x00PK\x01\x02\x17\x03'
+        b'\x14\x00\t\x00\x08\x00\xcf}38xu\xaa\xb2\x14\x00\x00\x00\x00\x02\x00\x00'
+        b'\x04\x00\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00ze'
+        b'roUT\x05\x00\x03\xd6\x8b\x92GUx\x00\x00PK\x05\x06\x00\x00\x00\x00\x01'
+        b'\x00\x01\x00?\x00\x00\x00[\x00\x00\x00\x00\x00' )
 
     plain = b'zipfile.py encryption test'
     plain2 = b'\x00'*512
diff --git a/Lib/test/test_zipimport_support.py b/Lib/test/test_zipimport_support.py
index f7f3398..84ba5e0 100644
--- a/Lib/test/test_zipimport_support.py
+++ b/Lib/test/test_zipimport_support.py
@@ -227,13 +227,15 @@
             p = spawn_python(script_name)
             p.stdin.write(b'l\n')
             data = kill_python(p)
-            self.assertIn(script_name.encode('utf-8'), data)
+            # bdb/pdb applies normcase to its filename before displaying
+            self.assertIn(os.path.normcase(script_name.encode('utf-8')), data)
             zip_name, run_name = make_zip_script(d, "test_zip",
                                                 script_name, '__main__.py')
             p = spawn_python(zip_name)
             p.stdin.write(b'l\n')
             data = kill_python(p)
-            self.assertIn(run_name.encode('utf-8'), data)
+            # bdb/pdb applies normcase to its filename before displaying
+            self.assertIn(os.path.normcase(run_name.encode('utf-8')), data)
 
 
 def test_main():
diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py
index 2f6f840..1daa8f8 100644
--- a/Lib/test/test_zlib.py
+++ b/Lib/test/test_zlib.py
@@ -7,6 +7,13 @@
 
 zlib = support.import_module('zlib')
 
+requires_Compress_copy = unittest.skipUnless(
+        hasattr(zlib.compressobj(), "copy"),
+        'requires Compress.copy()')
+requires_Decompress_copy = unittest.skipUnless(
+        hasattr(zlib.decompressobj(), "copy"),
+        'requires Decompress.copy()')
+
 
 class VersionTestCase(unittest.TestCase):
 
@@ -381,39 +388,39 @@
                                         "mode=%i, level=%i") % (sync, level))
                 del obj
 
+    @unittest.skipUnless(hasattr(zlib, 'Z_SYNC_FLUSH'),
+                         'requires zlib.Z_SYNC_FLUSH')
     def test_odd_flush(self):
         # Test for odd flushing bugs noted in 2.0, and hopefully fixed in 2.1
         import random
+        # Testing on 17K of "random" data
 
-        if hasattr(zlib, 'Z_SYNC_FLUSH'):
-            # Testing on 17K of "random" data
+        # Create compressor and decompressor objects
+        co = zlib.compressobj(zlib.Z_BEST_COMPRESSION)
+        dco = zlib.decompressobj()
 
-            # Create compressor and decompressor objects
-            co = zlib.compressobj(zlib.Z_BEST_COMPRESSION)
-            dco = zlib.decompressobj()
-
-            # Try 17K of data
-            # generate random data stream
+        # Try 17K of data
+        # generate random data stream
+        try:
+            # In 2.3 and later, WichmannHill is the RNG of the bug report
+            gen = random.WichmannHill()
+        except AttributeError:
             try:
-                # In 2.3 and later, WichmannHill is the RNG of the bug report
-                gen = random.WichmannHill()
+                # 2.2 called it Random
+                gen = random.Random()
             except AttributeError:
-                try:
-                    # 2.2 called it Random
-                    gen = random.Random()
-                except AttributeError:
-                    # others might simply have a single RNG
-                    gen = random
-            gen.seed(1)
-            data = genblock(1, 17 * 1024, generator=gen)
+                # others might simply have a single RNG
+                gen = random
+        gen.seed(1)
+        data = genblock(1, 17 * 1024, generator=gen)
 
-            # compress, sync-flush, and decompress
-            first = co.compress(data)
-            second = co.flush(zlib.Z_SYNC_FLUSH)
-            expanded = dco.decompress(first + second)
+        # compress, sync-flush, and decompress
+        first = co.compress(data)
+        second = co.flush(zlib.Z_SYNC_FLUSH)
+        expanded = dco.decompress(first + second)
 
-            # if decompressed data is different from the input data, choke.
-            self.assertEqual(expanded, data, "17K random source doesn't match")
+        # if decompressed data is different from the input data, choke.
+        self.assertEqual(expanded, data, "17K random source doesn't match")
 
     def test_empty_flush(self):
         # Test that calling .flush() on unused objects works.
@@ -525,67 +532,69 @@
         data = zlib.compress(input2)
         self.assertEqual(dco.flush(), input1[1:])
 
-    if hasattr(zlib.compressobj(), "copy"):
-        def test_compresscopy(self):
-            # Test copying a compression object
-            data0 = HAMLET_SCENE
-            data1 = bytes(str(HAMLET_SCENE, "ascii").swapcase(), "ascii")
-            c0 = zlib.compressobj(zlib.Z_BEST_COMPRESSION)
-            bufs0 = []
-            bufs0.append(c0.compress(data0))
+    @requires_Compress_copy
+    def test_compresscopy(self):
+        # Test copying a compression object
+        data0 = HAMLET_SCENE
+        data1 = bytes(str(HAMLET_SCENE, "ascii").swapcase(), "ascii")
+        c0 = zlib.compressobj(zlib.Z_BEST_COMPRESSION)
+        bufs0 = []
+        bufs0.append(c0.compress(data0))
 
-            c1 = c0.copy()
-            bufs1 = bufs0[:]
+        c1 = c0.copy()
+        bufs1 = bufs0[:]
 
-            bufs0.append(c0.compress(data0))
-            bufs0.append(c0.flush())
-            s0 = b''.join(bufs0)
+        bufs0.append(c0.compress(data0))
+        bufs0.append(c0.flush())
+        s0 = b''.join(bufs0)
 
-            bufs1.append(c1.compress(data1))
-            bufs1.append(c1.flush())
-            s1 = b''.join(bufs1)
+        bufs1.append(c1.compress(data1))
+        bufs1.append(c1.flush())
+        s1 = b''.join(bufs1)
 
-            self.assertEqual(zlib.decompress(s0),data0+data0)
-            self.assertEqual(zlib.decompress(s1),data0+data1)
+        self.assertEqual(zlib.decompress(s0),data0+data0)
+        self.assertEqual(zlib.decompress(s1),data0+data1)
 
-        def test_badcompresscopy(self):
-            # Test copying a compression object in an inconsistent state
-            c = zlib.compressobj()
-            c.compress(HAMLET_SCENE)
-            c.flush()
-            self.assertRaises(ValueError, c.copy)
+    @requires_Compress_copy
+    def test_badcompresscopy(self):
+        # Test copying a compression object in an inconsistent state
+        c = zlib.compressobj()
+        c.compress(HAMLET_SCENE)
+        c.flush()
+        self.assertRaises(ValueError, c.copy)
 
-    if hasattr(zlib.decompressobj(), "copy"):
-        def test_decompresscopy(self):
-            # Test copying a decompression object
-            data = HAMLET_SCENE
-            comp = zlib.compress(data)
-            # Test type of return value
-            self.assertIsInstance(comp, bytes)
+    @requires_Decompress_copy
+    def test_decompresscopy(self):
+        # Test copying a decompression object
+        data = HAMLET_SCENE
+        comp = zlib.compress(data)
+        # Test type of return value
+        self.assertIsInstance(comp, bytes)
 
-            d0 = zlib.decompressobj()
-            bufs0 = []
-            bufs0.append(d0.decompress(comp[:32]))
+        d0 = zlib.decompressobj()
+        bufs0 = []
+        bufs0.append(d0.decompress(comp[:32]))
 
-            d1 = d0.copy()
-            bufs1 = bufs0[:]
+        d1 = d0.copy()
+        bufs1 = bufs0[:]
 
-            bufs0.append(d0.decompress(comp[32:]))
-            s0 = b''.join(bufs0)
+        bufs0.append(d0.decompress(comp[32:]))
+        s0 = b''.join(bufs0)
 
-            bufs1.append(d1.decompress(comp[32:]))
-            s1 = b''.join(bufs1)
+        bufs1.append(d1.decompress(comp[32:]))
+        s1 = b''.join(bufs1)
 
-            self.assertEqual(s0,s1)
-            self.assertEqual(s0,data)
+        self.assertEqual(s0,s1)
+        self.assertEqual(s0,data)
 
-        def test_baddecompresscopy(self):
-            # Test copying a compression object in an inconsistent state
-            data = zlib.compress(HAMLET_SCENE)
-            d = zlib.decompressobj()
-            d.decompress(data)
-            d.flush()
-            self.assertRaises(ValueError, d.copy)
+    @requires_Decompress_copy
+    def test_baddecompresscopy(self):
+        # Test copying a compression object in an inconsistent state
+        data = zlib.compress(HAMLET_SCENE)
+        d = zlib.decompressobj()
+        d.decompress(data)
+        d.flush()
+        self.assertRaises(ValueError, d.copy)
 
     # Memory use of the following functions takes into account overallocation
 
diff --git a/Lib/textwrap.py b/Lib/textwrap.py
index 27ebc16..2489180 100644
--- a/Lib/textwrap.py
+++ b/Lib/textwrap.py
@@ -7,7 +7,7 @@
 
 import re
 
-__all__ = ['TextWrapper', 'wrap', 'fill', 'dedent', 'indent']
+__all__ = ['TextWrapper', 'wrap', 'fill', 'dedent', 'indent', 'shorten']
 
 # Hardcode the recognized whitespace characters to the US-ASCII
 # whitespace characters.  The main reason for doing this is that in
@@ -19,8 +19,6 @@
 # since 0xa0 is not in range(128).
 _whitespace = '\t\n\x0b\x0c\r '
 
-_default_placeholder = ' [...]'
-
 class TextWrapper:
     """
     Object for wrapping/filling text.  The public interface consists of
@@ -64,6 +62,10 @@
         compound words.
       drop_whitespace (default: true)
         Drop leading and trailing whitespace from lines.
+      max_lines (default: None)
+        Truncate wrapped lines.
+      placeholder (default: ' [...]')
+        Append to the last line of truncated text.
     """
 
     unicode_whitespace_trans = {}
@@ -106,7 +108,10 @@
                  break_long_words=True,
                  drop_whitespace=True,
                  break_on_hyphens=True,
-                 tabsize=8):
+                 tabsize=8,
+                 *,
+                 max_lines=None,
+                 placeholder=' [...]'):
         self.width = width
         self.initial_indent = initial_indent
         self.subsequent_indent = subsequent_indent
@@ -117,6 +122,8 @@
         self.drop_whitespace = drop_whitespace
         self.break_on_hyphens = break_on_hyphens
         self.tabsize = tabsize
+        self.max_lines = max_lines
+        self.placeholder = placeholder
 
 
     # -- Private methods -----------------------------------------------
@@ -225,6 +232,13 @@
         lines = []
         if self.width <= 0:
             raise ValueError("invalid width %r (must be > 0)" % self.width)
+        if self.max_lines is not None:
+            if self.max_lines > 1:
+                indent = self.subsequent_indent
+            else:
+                indent = self.initial_indent
+            if len(indent) + len(self.placeholder.lstrip()) > self.width:
+                raise ValueError("placeholder too large for max width")
 
         # Arrange in reverse order so items can be efficiently popped
         # from a stack of chucks.
@@ -267,15 +281,41 @@
             # fit on *any* line (not just this one).
             if chunks and len(chunks[-1]) > width:
                 self._handle_long_word(chunks, cur_line, cur_len, width)
+                cur_len = sum(map(len, cur_line))
 
             # If the last chunk on this line is all whitespace, drop it.
             if self.drop_whitespace and cur_line and cur_line[-1].strip() == '':
+                cur_len -= len(cur_line[-1])
                 del cur_line[-1]
 
-            # Convert current line back to a string and store it in list
-            # of all lines (return value).
             if cur_line:
-                lines.append(indent + ''.join(cur_line))
+                if (self.max_lines is None or
+                    len(lines) + 1 < self.max_lines or
+                    (not chunks or
+                     self.drop_whitespace and
+                     len(chunks) == 1 and
+                     not chunks[0].strip()) and cur_len <= width):
+                    # Convert current line back to a string and store it in
+                    # list of all lines (return value).
+                    lines.append(indent + ''.join(cur_line))
+                else:
+                    while cur_line:
+                        if (cur_line[-1].strip() and
+                            cur_len + len(self.placeholder) <= width):
+                            cur_line.append(self.placeholder)
+                            lines.append(indent + ''.join(cur_line))
+                            break
+                        cur_len -= len(cur_line[-1])
+                        del cur_line[-1]
+                    else:
+                        if lines:
+                            prev_line = lines[-1].rstrip()
+                            if (len(prev_line) + len(self.placeholder) <=
+                                    self.width):
+                                lines[-1] = prev_line + self.placeholder
+                                break
+                        lines.append(indent + self.placeholder.lstrip())
+                    break
 
         return lines
 
@@ -308,36 +348,6 @@
         """
         return "\n".join(self.wrap(text))
 
-    def shorten(self, text, *, placeholder=_default_placeholder):
-        """shorten(text: str) -> str
-
-        Collapse and truncate the given text to fit in 'self.width' columns.
-        """
-        max_length = self.width
-        if max_length < len(placeholder.strip()):
-            raise ValueError("placeholder too large for max width")
-        sep = ' '
-        sep_len = len(sep)
-        parts = []
-        cur_len = 0
-        chunks = self._split_chunks(text)
-        for chunk in chunks:
-            if not chunk.strip():
-                continue
-            chunk_len = len(chunk) + sep_len if parts else len(chunk)
-            if cur_len + chunk_len > max_length:
-                break
-            parts.append(chunk)
-            cur_len += chunk_len
-        else:
-            # No truncation necessary
-            return sep.join(parts)
-        max_truncated_length = max_length - len(placeholder)
-        while parts and cur_len > max_truncated_length:
-            last = parts.pop()
-            cur_len -= len(last) + sep_len
-        return (sep.join(parts) + placeholder).strip()
-
 
 # -- Convenience interface ---------------------------------------------
 
@@ -366,7 +376,7 @@
     w = TextWrapper(width=width, **kwargs)
     return w.fill(text)
 
-def shorten(text, width, *, placeholder=_default_placeholder, **kwargs):
+def shorten(text, width, **kwargs):
     """Collapse and truncate the given text to fit in the given width.
 
     The text first has its whitespace collapsed.  If it then fits in
@@ -378,8 +388,8 @@
         >>> textwrap.shorten("Hello  world!", width=11)
         'Hello [...]'
     """
-    w = TextWrapper(width=width, **kwargs)
-    return w.shorten(text, placeholder=placeholder)
+    w = TextWrapper(width=width, max_lines=1, **kwargs)
+    return w.fill(' '.join(text.strip().split()))
 
 
 # -- Loosely related functionality -------------------------------------
diff --git a/Lib/threading.py b/Lib/threading.py
index 26d1018..d907c89 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -50,10 +50,22 @@
 _trace_hook = None
 
 def setprofile(func):
+    """Set a profile function for all threads started from the threading module.
+
+    The func will be passed to sys.setprofile() for each thread, before its
+    run() method is called.
+
+    """
     global _profile_hook
     _profile_hook = func
 
 def settrace(func):
+    """Set a trace function for all threads started from the threading module.
+
+    The func will be passed to sys.settrace() for each thread, before its run()
+    method is called.
+
+    """
     global _trace_hook
     _trace_hook = func
 
@@ -62,11 +74,27 @@
 Lock = _allocate_lock
 
 def RLock(*args, **kwargs):
+    """Factory function that returns a new reentrant lock.
+
+    A reentrant lock must be released by the thread that acquired it. Once a
+    thread has acquired a reentrant lock, the same thread may acquire it again
+    without blocking; the thread must release it once for each time it has
+    acquired it.
+
+    """
     if _CRLock is None:
         return _PyRLock(*args, **kwargs)
     return _CRLock(*args, **kwargs)
 
 class _RLock:
+    """This class implements reentrant lock objects.
+
+    A reentrant lock must be released by the thread that acquired it. Once a
+    thread has acquired a reentrant lock, the same thread may acquire it
+    again without blocking; the thread must release it once for each time it
+    has acquired it.
+
+    """
 
     def __init__(self):
         self._block = _allocate_lock()
@@ -83,6 +111,31 @@
                 self.__class__.__name__, owner, self._count)
 
     def acquire(self, blocking=True, timeout=-1):
+        """Acquire a lock, blocking or non-blocking.
+
+        When invoked without arguments: if this thread already owns the lock,
+        increment the recursion level by one, and return immediately. Otherwise,
+        if another thread owns the lock, block until the lock is unlocked. Once
+        the lock is unlocked (not owned by any thread), then grab ownership, set
+        the recursion level to one, and return. If more than one thread is
+        blocked waiting until the lock is unlocked, only one at a time will be
+        able to grab ownership of the lock. There is no return value in this
+        case.
+
+        When invoked with the blocking argument set to true, do the same thing
+        as when called without arguments, and return true.
+
+        When invoked with the blocking argument set to false, do not block. If a
+        call without an argument would block, return false immediately;
+        otherwise, do the same thing as when called without arguments, and
+        return true.
+
+        When invoked with the floating-point timeout argument set to a positive
+        value, block for at most the number of seconds specified by timeout
+        and as long as the lock cannot be acquired.  Return true if the lock has
+        been acquired, false if the timeout has elapsed.
+
+        """
         me = get_ident()
         if self._owner == me:
             self._count += 1
@@ -96,6 +149,21 @@
     __enter__ = acquire
 
     def release(self):
+        """Release a lock, decrementing the recursion level.
+
+        If after the decrement it is zero, reset the lock to unlocked (not owned
+        by any thread), and if any other threads are blocked waiting for the
+        lock to become unlocked, allow exactly one of them to proceed. If after
+        the decrement the recursion level is still nonzero, the lock remains
+        locked and owned by the calling thread.
+
+        Only call this method when the calling thread owns the lock. A
+        RuntimeError is raised if this method is called when the lock is
+        unlocked.
+
+        There is no return value.
+
+        """
         if self._owner != get_ident():
             raise RuntimeError("cannot release un-acquired lock")
         self._count = count = self._count - 1
@@ -129,6 +197,16 @@
 
 
 class Condition:
+    """Class that implements a condition variable.
+
+    A condition variable allows one or more threads to wait until they are
+    notified by another thread.
+
+    If the lock argument is given and not None, it must be a Lock or RLock
+    object, and it is used as the underlying lock. Otherwise, a new RLock object
+    is created and used as the underlying lock.
+
+    """
 
     def __init__(self, lock=None):
         if lock is None:
@@ -179,6 +257,28 @@
             return True
 
     def wait(self, timeout=None):
+        """Wait until notified or until a timeout occurs.
+
+        If the calling thread has not acquired the lock when this method is
+        called, a RuntimeError is raised.
+
+        This method releases the underlying lock, and then blocks until it is
+        awakened by a notify() or notify_all() call for the same condition
+        variable in another thread, or until the optional timeout occurs. Once
+        awakened or timed out, it re-acquires the lock and returns.
+
+        When the timeout argument is present and not None, it should be a
+        floating point number specifying a timeout for the operation in seconds
+        (or fractions thereof).
+
+        When the underlying lock is an RLock, it is not released using its
+        release() method, since this may not actually unlock the lock when it
+        was acquired multiple times recursively. Instead, an internal interface
+        of the RLock class is used, which really unlocks it even when it has
+        been recursively acquired several times. Another internal interface is
+        then used to restore the recursion level when the lock is reacquired.
+
+        """
         if not self._is_owned():
             raise RuntimeError("cannot wait on un-acquired lock")
         waiter = _allocate_lock()
@@ -204,6 +304,13 @@
             self._acquire_restore(saved_state)
 
     def wait_for(self, predicate, timeout=None):
+        """Wait until a condition evaluates to True.
+
+        predicate should be a callable which result will be interpreted as a
+        boolean value.  A timeout may be provided giving the maximum time to
+        wait.
+
+        """
         endtime = None
         waittime = timeout
         result = predicate()
@@ -220,6 +327,15 @@
         return result
 
     def notify(self, n=1):
+        """Wake up one or more threads waiting on this condition, if any.
+
+        If the calling thread has not acquired the lock when this method is
+        called, a RuntimeError is raised.
+
+        This method wakes up at most n of the threads waiting for the condition
+        variable; it is a no-op if no threads are waiting.
+
+        """
         if not self._is_owned():
             raise RuntimeError("cannot notify on un-acquired lock")
         all_waiters = self._waiters
@@ -234,12 +350,26 @@
                 pass
 
     def notify_all(self):
+        """Wake up all threads waiting on this condition.
+
+        If the calling thread has not acquired the lock when this method
+        is called, a RuntimeError is raised.
+
+        """
         self.notify(len(self._waiters))
 
     notifyAll = notify_all
 
 
 class Semaphore:
+    """This class implements semaphore objects.
+
+    Semaphores manage a counter representing the number of release() calls minus
+    the number of acquire() calls, plus an initial value. The acquire() method
+    blocks if necessary until it can return without making the counter
+    negative. If not given, value defaults to 1.
+
+    """
 
     # After Tim Peters' semaphore class, but not quite the same (no maximum)
 
@@ -250,6 +380,29 @@
         self._value = value
 
     def acquire(self, blocking=True, timeout=None):
+        """Acquire a semaphore, decrementing the internal counter by one.
+
+        When invoked without arguments: if the internal counter is larger than
+        zero on entry, decrement it by one and return immediately. If it is zero
+        on entry, block, waiting until some other thread has called release() to
+        make it larger than zero. This is done with proper interlocking so that
+        if multiple acquire() calls are blocked, release() will wake exactly one
+        of them up. The implementation may pick one at random, so the order in
+        which blocked threads are awakened should not be relied on. There is no
+        return value in this case.
+
+        When invoked with blocking set to true, do the same thing as when called
+        without arguments, and return true.
+
+        When invoked with blocking set to false, do not block. If a call without
+        an argument would block, return false immediately; otherwise, do the
+        same thing as when called without arguments, and return true.
+
+        When invoked with a timeout other than None, it will block for at
+        most timeout seconds.  If acquire does not complete successfully in
+        that interval, return false.  Return true otherwise.
+
+        """
         if not blocking and timeout is not None:
             raise ValueError("can't specify timeout for non-blocking acquire")
         rc = False
@@ -274,6 +427,12 @@
     __enter__ = acquire
 
     def release(self):
+        """Release a semaphore, incrementing the internal counter by one.
+
+        When the counter is zero on entry and another thread is waiting for it
+        to become larger than zero again, wake up that thread.
+
+        """
         with self._cond:
             self._value += 1
             self._cond.notify()
@@ -283,18 +442,51 @@
 
 
 class BoundedSemaphore(Semaphore):
-    """Semaphore that checks that # releases is <= # acquires"""
+    """Implements a bounded semaphore.
+
+    A bounded semaphore checks to make sure its current value doesn't exceed its
+    initial value. If it does, ValueError is raised. In most situations
+    semaphores are used to guard resources with limited capacity.
+
+    If the semaphore is released too many times it's a sign of a bug. If not
+    given, value defaults to 1.
+
+    Like regular semaphores, bounded semaphores manage a counter representing
+    the number of release() calls minus the number of acquire() calls, plus an
+    initial value. The acquire() method blocks if necessary until it can return
+    without making the counter negative. If not given, value defaults to 1.
+
+    """
+
     def __init__(self, value=1):
         Semaphore.__init__(self, value)
         self._initial_value = value
 
     def release(self):
-        if self._value >= self._initial_value:
-            raise ValueError("Semaphore released too many times")
-        return Semaphore.release(self)
+        """Release a semaphore, incrementing the internal counter by one.
+
+        When the counter is zero on entry and another thread is waiting for it
+        to become larger than zero again, wake up that thread.
+
+        If the number of releases exceeds the number of acquires,
+        raise a ValueError.
+
+        """
+        with self._cond:
+            if self._value >= self._initial_value:
+                raise ValueError("Semaphore released too many times")
+            self._value += 1
+            self._cond.notify()
 
 
 class Event:
+    """Class implementing event objects.
+
+    Events manage a flag that can be set to true with the set() method and reset
+    to false with the clear() method. The wait() method blocks until the flag is
+    true.  The flag is initially false.
+
+    """
 
     # After Tim Peters' event class (without is_posted())
 
@@ -307,11 +499,18 @@
         self._cond.__init__()
 
     def is_set(self):
+        """Return true if and only if the internal flag is true."""
         return self._flag
 
     isSet = is_set
 
     def set(self):
+        """Set the internal flag to true.
+
+        All threads waiting for it to become true are awakened. Threads
+        that call wait() once the flag is true will not block at all.
+
+        """
         self._cond.acquire()
         try:
             self._flag = True
@@ -320,6 +519,12 @@
             self._cond.release()
 
     def clear(self):
+        """Reset the internal flag to false.
+
+        Subsequently, threads calling wait() will block until set() is called to
+        set the internal flag to true again.
+
+        """
         self._cond.acquire()
         try:
             self._flag = False
@@ -327,6 +532,20 @@
             self._cond.release()
 
     def wait(self, timeout=None):
+        """Block until the internal flag is true.
+
+        If the internal flag is true on entry, return immediately. Otherwise,
+        block until another thread calls set() to set the flag to true, or until
+        the optional timeout occurs.
+
+        When the timeout argument is present and not None, it should be a
+        floating point number specifying a timeout for the operation in seconds
+        (or fractions thereof).
+
+        This method returns the internal flag on exit, so it will always return
+        True except if a timeout is given and the operation times out.
+
+        """
         self._cond.acquire()
         try:
             signaled = self._flag
@@ -349,19 +568,22 @@
 # similar to 'draining' except that threads leave with a BrokenBarrierError,
 # and a 'broken' state in which all threads get the exception.
 class Barrier:
+    """Implements a Barrier.
+
+    Useful for synchronizing a fixed number of threads at known synchronization
+    points.  Threads block on 'wait()' and are simultaneously once they have all
+    made that call.
+
     """
-    Barrier.  Useful for synchronizing a fixed number of threads
-    at known synchronization points.  Threads block on 'wait()' and are
-    simultaneously once they have all made that call.
-    """
+
     def __init__(self, parties, action=None, timeout=None):
-        """
-        Create a barrier, initialised to 'parties' threads.
-        'action' is a callable which, when supplied, will be called
-        by one of the threads after they have all entered the
-        barrier and just prior to releasing them all.
-        If a 'timeout' is provided, it is uses as the default for
-        all subsequent 'wait()' calls.
+        """Create a barrier, initialised to 'parties' threads.
+
+        'action' is a callable which, when supplied, will be called by one of
+        the threads after they have all entered the barrier and just prior to
+        releasing them all. If a 'timeout' is provided, it is uses as the
+        default for all subsequent 'wait()' calls.
+
         """
         self._cond = Condition(Lock())
         self._action = action
@@ -371,12 +593,13 @@
         self._count = 0
 
     def wait(self, timeout=None):
-        """
-        Wait for the barrier.  When the specified number of threads have
-        started waiting, they are all simultaneously awoken. If an 'action'
-        was provided for the barrier, one of the threads will have executed
-        that callback prior to returning.
+        """Wait for the barrier.
+
+        When the specified number of threads have started waiting, they are all
+        simultaneously awoken. If an 'action' was provided for the barrier, one
+        of the threads will have executed that callback prior to returning.
         Returns an individual index number from 0 to 'parties-1'.
+
         """
         if timeout is None:
             timeout = self._timeout
@@ -443,10 +666,11 @@
                 self._cond.notify_all()
 
     def reset(self):
-        """
-        Reset the barrier to the initial state.
+        """Reset the barrier to the initial state.
+
         Any threads currently waiting will get the BrokenBarrier exception
         raised.
+
         """
         with self._cond:
             if self._count > 0:
@@ -462,11 +686,11 @@
             self._cond.notify_all()
 
     def abort(self):
-        """
-        Place the barrier into a 'broken' state.
-        Useful in case of error.  Any currently waiting threads and
-        threads attempting to 'wait()' will have BrokenBarrierError
-        raised.
+        """Place the barrier into a 'broken' state.
+
+        Useful in case of error.  Any currently waiting threads and threads
+        attempting to 'wait()' will have BrokenBarrierError raised.
+
         """
         with self._cond:
             self._break()
@@ -479,16 +703,12 @@
 
     @property
     def parties(self):
-        """
-        Return the number of threads required to trip the barrier.
-        """
+        """Return the number of threads required to trip the barrier."""
         return self._parties
 
     @property
     def n_waiting(self):
-        """
-        Return the number of threads that are currently waiting at the barrier.
-        """
+        """Return the number of threads currently waiting at the barrier."""
         # We don't need synchronization here since this is an ephemeral result
         # anyway.  It returns the correct value in the steady state.
         if self._state == 0:
@@ -497,13 +717,12 @@
 
     @property
     def broken(self):
-        """
-        Return True if the barrier is in a broken state
-        """
+        """Return True if the barrier is in a broken state."""
         return self._state == -2
 
-#exception raised by the Barrier class
-class BrokenBarrierError(RuntimeError): pass
+# exception raised by the Barrier class
+class BrokenBarrierError(RuntimeError):
+    pass
 
 
 # Helper to generate new thread names
@@ -522,6 +741,13 @@
 # Main class for threads
 
 class Thread:
+    """A class that represents a thread of control.
+
+    This class can be safely subclassed in a limited fashion. There are two ways
+    to specify the activity: by passing a callable object to the constructor, or
+    by overriding the run() method in a subclass.
+
+    """
 
     __initialized = False
     # Need to store a reference to sys.exc_info for printing
@@ -535,6 +761,27 @@
 
     def __init__(self, group=None, target=None, name=None,
                  args=(), kwargs=None, *, daemon=None):
+        """This constructor should always be called with keyword arguments. Arguments are:
+
+        *group* should be None; reserved for future extension when a ThreadGroup
+        class is implemented.
+
+        *target* is the callable object to be invoked by the run()
+        method. Defaults to None, meaning nothing is called.
+
+        *name* is the thread name. By default, a unique name is constructed of
+        the form "Thread-N" where N is a small decimal number.
+
+        *args* is the argument tuple for the target invocation. Defaults to ().
+
+        *kwargs* is a dictionary of keyword arguments for the target
+        invocation. Defaults to {}.
+
+        If a subclass overrides the constructor, it must make sure to invoke
+        the base class constructor (Thread.__init__()) before doing anything
+        else to the thread.
+
+        """
         assert group is None, "group argument must be None for now"
         if kwargs is None:
             kwargs = {}
@@ -584,6 +831,15 @@
         return "<%s(%s, %s)>" % (self.__class__.__name__, self._name, status)
 
     def start(self):
+        """Start the thread's activity.
+
+        It must be called at most once per thread object. It arranges for the
+        object's run() method to be invoked in a separate thread of control.
+
+        This method will raise a RuntimeError if called more than once on the
+        same thread object.
+
+        """
         if not self._initialized:
             raise RuntimeError("thread.__init__() not called")
 
@@ -600,6 +856,14 @@
         self._started.wait()
 
     def run(self):
+        """Method representing the thread's activity.
+
+        You may override this method in a subclass. The standard run() method
+        invokes the callable object passed to the object's constructor as the
+        target argument, if any, with sequential and keyword arguments taken
+        from the args and kwargs arguments, respectively.
+
+        """
         try:
             if self._target:
                 self._target(*self._args, **self._kwargs)
@@ -763,16 +1027,42 @@
                 raise
 
     def join(self, timeout=None):
+        """Wait until the thread terminates.
+
+        This blocks the calling thread until the thread whose join() method is
+        called terminates -- either normally or through an unhandled exception
+        or until the optional timeout occurs.
+
+        When the timeout argument is present and not None, it should be a
+        floating point number specifying a timeout for the operation in seconds
+        (or fractions thereof). As join() always returns None, you must call
+        isAlive() after join() to decide whether a timeout happened -- if the
+        thread is still alive, the join() call timed out.
+
+        When the timeout argument is not present or None, the operation will
+        block until the thread terminates.
+
+        A thread can be join()ed many times.
+
+        join() raises a RuntimeError if an attempt is made to join the current
+        thread as that would cause a deadlock. It is also an error to join() a
+        thread before it has been started and attempts to do so raises the same
+        exception.
+
+        """
         if not self._initialized:
             raise RuntimeError("Thread.__init__() not called")
         if not self._started.is_set():
             raise RuntimeError("cannot join thread before it is started")
         if self is current_thread():
             raise RuntimeError("cannot join current thread")
+
         if timeout is None:
             self._wait_for_tstate_lock()
         else:
-            self._wait_for_tstate_lock(timeout=timeout)
+            # the behavior of a negative timeout isn't documented, but
+            # historically .join(timeout=x) for x<0 has acted as if timeout=0
+            self._wait_for_tstate_lock(timeout=max(timeout, 0))
 
     def _wait_for_tstate_lock(self, block=True, timeout=-1):
         # Issue #18808: wait for the thread state to be gone.
@@ -790,6 +1080,12 @@
 
     @property
     def name(self):
+        """A string used for identification purposes only.
+
+        It has no semantics. Multiple threads may be given the same name. The
+        initial name is set by the constructor.
+
+        """
         assert self._initialized, "Thread.__init__() not called"
         return self._name
 
@@ -800,10 +1096,24 @@
 
     @property
     def ident(self):
+        """Thread identifier of this thread or None if it has not been started.
+
+        This is a nonzero integer. See the thread.get_ident() function. Thread
+        identifiers may be recycled when a thread exits and another thread is
+        created. The identifier is available even after the thread has exited.
+
+        """
         assert self._initialized, "Thread.__init__() not called"
         return self._ident
 
     def is_alive(self):
+        """Return whether the thread is alive.
+
+        This method returns True just before the run() method starts until just
+        after the run() method terminates. The module function enumerate()
+        returns a list of all alive threads.
+
+        """
         assert self._initialized, "Thread.__init__() not called"
         if self._is_stopped or not self._started.is_set():
             return False
@@ -814,6 +1124,17 @@
 
     @property
     def daemon(self):
+        """A boolean value indicating whether this thread is a daemon thread.
+
+        This must be set before start() is called, otherwise RuntimeError is
+        raised. Its initial value is inherited from the creating thread; the
+        main thread is not a daemon thread and therefore all threads created in
+        the main thread default to daemon = False.
+
+        The entire Python program exits when no alive non-daemon threads are
+        left.
+
+        """
         assert self._initialized, "Thread.__init__() not called"
         return self._daemonic
 
@@ -842,9 +1163,10 @@
 class Timer(Thread):
     """Call a function after a specified number of seconds:
 
-    t = Timer(30.0, f, args=None, kwargs=None)
-    t.start()
-    t.cancel() # stop the timer's action if it's still waiting
+            t = Timer(30.0, f, args=None, kwargs=None)
+            t.start()
+            t.cancel()     # stop the timer's action if it's still waiting
+
     """
 
     def __init__(self, interval, function, args=None, kwargs=None):
@@ -856,7 +1178,7 @@
         self.finished = Event()
 
     def cancel(self):
-        """Stop the timer if it hasn't finished yet"""
+        """Stop the timer if it hasn't finished yet."""
         self.finished.set()
 
     def run(self):
@@ -907,6 +1229,12 @@
 # Global API functions
 
 def current_thread():
+    """Return the current Thread object, corresponding to the caller's thread of control.
+
+    If the caller's thread of control was not created through the threading
+    module, a dummy thread object with limited functionality is returned.
+
+    """
     try:
         return _active[get_ident()]
     except KeyError:
@@ -915,6 +1243,12 @@
 currentThread = current_thread
 
 def active_count():
+    """Return the number of Thread objects currently alive.
+
+    The returned count is equal to the length of the list returned by
+    enumerate().
+
+    """
     with _active_limbo_lock:
         return len(_active) + len(_limbo)
 
@@ -925,6 +1259,13 @@
     return list(_active.values()) + list(_limbo.values())
 
 def enumerate():
+    """Return a list of all Thread objects currently alive.
+
+    The list includes daemonic threads, dummy thread objects created by
+    current_thread(), and the main thread. It excludes terminated threads and
+    threads that have not yet been started.
+
+    """
     with _active_limbo_lock:
         return list(_active.values()) + list(_limbo.values())
 
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index 728ff42..22a41ac 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -2911,11 +2911,11 @@
 
         """
         Widget.__init__(self, master, 'text', cnf, kw)
-    def bbox(self, *args):
+    def bbox(self, index):
         """Return a tuple of (x,y,width,height) which gives the bounding
-        box of the visible part of the character at the index in ARGS."""
+        box of the visible part of the character at the given index."""
         return self._getints(
-            self.tk.call((self._w, 'bbox') + args)) or None
+                self.tk.call(self._w, 'bbox', index)) or None
     def tk_textSelectTo(self, index):
         self.tk.call('tk_textSelectTo', self._w, index)
     def tk_textBackspace(self):
@@ -2951,8 +2951,9 @@
     def debug(self, boolean=None):
         """Turn on the internal consistency checks of the B-Tree inside the text
         widget according to BOOLEAN."""
-        return self.tk.getboolean(self.tk.call(
-            self._w, 'debug', boolean))
+        if boolean is None:
+            return self.tk.call(self._w, 'debug')
+        self.tk.call(self._w, 'debug', boolean)
     def delete(self, index1, index2=None):
         """Delete the characters between INDEX1 and INDEX2 (not included)."""
         self.tk.call(self._w, 'delete', index1, index2)
@@ -3472,7 +3473,7 @@
         bounding box may refer to a region outside the
         visible area of the window.
         """
-        return self.tk.call(self._w, 'bbox', index)
+        return self._getints(self.tk.call(self._w, 'bbox', index)) or None
 
     def delete(self, first, last=None):
         """Delete one or more elements of the spinbox.
diff --git a/Lib/tkinter/test/support.py b/Lib/tkinter/test/support.py
index 6dd6d4a..fcd9ffc 100644
--- a/Lib/tkinter/test/support.py
+++ b/Lib/tkinter/test/support.py
@@ -77,3 +77,57 @@
     widget.event_generate('<Motion>', x=x, y=y)
     widget.event_generate('<ButtonPress-1>', x=x, y=y)
     widget.event_generate('<ButtonRelease-1>', x=x, y=y)
+
+
+import _tkinter
+tcl_version = tuple(map(int, _tkinter.TCL_VERSION.split('.')))
+
+def requires_tcl(*version):
+    return unittest.skipUnless(tcl_version >= version,
+            'requires Tcl version >= ' + '.'.join(map(str, version)))
+
+_tk_patchlevel = None
+def get_tk_patchlevel():
+    global _tk_patchlevel
+    if _tk_patchlevel is None:
+        tcl = tkinter.Tcl()
+        patchlevel = []
+        for x in tcl.call('info', 'patchlevel').split('.'):
+            try:
+                x = int(x, 10)
+            except ValueError:
+                x = -1
+            patchlevel.append(x)
+        _tk_patchlevel = tuple(patchlevel)
+    return _tk_patchlevel
+
+units = {
+    'c': 72 / 2.54,     # centimeters
+    'i': 72,            # inches
+    'm': 72 / 25.4,     # millimeters
+    'p': 1,             # points
+}
+
+def pixels_conv(value):
+    return float(value[:-1]) * units[value[-1:]]
+
+def tcl_obj_eq(actual, expected):
+    if actual == expected:
+        return True
+    if isinstance(actual, _tkinter.Tcl_Obj):
+        if isinstance(expected, str):
+            return str(actual) == expected
+    if isinstance(actual, tuple):
+        if isinstance(expected, tuple):
+            return (len(actual) == len(expected) and
+                    all(tcl_obj_eq(act, exp)
+                        for act, exp in zip(actual, expected)))
+    return False
+
+def widget_eq(actual, expected):
+    if actual == expected:
+        return True
+    if isinstance(actual, (str, tkinter.Widget)):
+        if isinstance(expected, (str, tkinter.Widget)):
+            return str(actual) == str(expected)
+    return False
diff --git a/Lib/tkinter/test/test_tkinter/test_text.py b/Lib/tkinter/test/test_tkinter/test_text.py
index a93c4ce..4c3fa04 100644
--- a/Lib/tkinter/test/test_tkinter/test_text.py
+++ b/Lib/tkinter/test/test_tkinter/test_text.py
@@ -14,6 +14,17 @@
     def tearDown(self):
         self.text.destroy()
 
+    def test_debug(self):
+        text = self.text
+        olddebug = text.debug()
+        try:
+            text.debug(0)
+            self.assertEqual(text.debug(), 0)
+            text.debug(1)
+            self.assertEqual(text.debug(), 1)
+        finally:
+            text.debug(olddebug)
+            self.assertEqual(text.debug(), olddebug)
 
     def test_search(self):
         text = self.text
diff --git a/Lib/tkinter/test/test_tkinter/test_widgets.py b/Lib/tkinter/test/test_tkinter/test_widgets.py
new file mode 100644
index 0000000..4cd8a45
--- /dev/null
+++ b/Lib/tkinter/test/test_tkinter/test_widgets.py
@@ -0,0 +1,950 @@
+import unittest
+import tkinter
+import os
+from test.support import requires
+
+from tkinter.test.support import (tcl_version, requires_tcl,
+                                  get_tk_patchlevel, widget_eq)
+from tkinter.test.widget_tests import (
+    add_standard_options, noconv, pixels_round,
+    AbstractWidgetTest, StandardOptionsTests, IntegerSizeTests, PixelSizeTests)
+
+requires('gui')
+
+
+def float_round(x):
+    return float(round(x))
+
+
+class AbstractToplevelTest(AbstractWidgetTest, PixelSizeTests):
+    _conv_pad_pixels = noconv
+
+    def test_class(self):
+        widget = self.create()
+        self.assertEqual(widget['class'],
+                         widget.__class__.__name__.title())
+        self.checkInvalidParam(widget, 'class', 'Foo',
+                errmsg="can't modify -class option after widget is created")
+        widget2 = self.create(class_='Foo')
+        self.assertEqual(widget2['class'], 'Foo')
+
+    def test_colormap(self):
+        widget = self.create()
+        self.assertEqual(widget['colormap'], '')
+        self.checkInvalidParam(widget, 'colormap', 'new',
+                errmsg="can't modify -colormap option after widget is created")
+        widget2 = self.create(colormap='new')
+        self.assertEqual(widget2['colormap'], 'new')
+
+    def test_container(self):
+        widget = self.create()
+        self.assertEqual(widget['container'], 0 if self.wantobjects else '0')
+        self.checkInvalidParam(widget, 'container', 1,
+                errmsg="can't modify -container option after widget is created")
+        widget2 = self.create(container=True)
+        self.assertEqual(widget2['container'], 1 if self.wantobjects else '1')
+
+    def test_visual(self):
+        widget = self.create()
+        self.assertEqual(widget['visual'], '')
+        self.checkInvalidParam(widget, 'visual', 'default',
+                errmsg="can't modify -visual option after widget is created")
+        widget2 = self.create(visual='default')
+        self.assertEqual(widget2['visual'], 'default')
+
+
+@add_standard_options(StandardOptionsTests)
+class ToplevelTest(AbstractToplevelTest, unittest.TestCase):
+    OPTIONS = (
+        'background', 'borderwidth',
+        'class', 'colormap', 'container', 'cursor', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'menu', 'padx', 'pady', 'relief', 'screen',
+        'takefocus', 'use', 'visual', 'width',
+    )
+
+    def _create(self, **kwargs):
+        return tkinter.Toplevel(self.root, **kwargs)
+
+    def test_menu(self):
+        widget = self.create()
+        menu = tkinter.Menu(self.root)
+        self.checkParam(widget, 'menu', menu, eq=widget_eq)
+        self.checkParam(widget, 'menu', '')
+
+    def test_screen(self):
+        widget = self.create()
+        self.assertEqual(widget['screen'], '')
+        try:
+            display = os.environ['DISPLAY']
+        except KeyError:
+            self.skipTest('No $DISPLAY set.')
+        self.checkInvalidParam(widget, 'screen', display,
+                errmsg="can't modify -screen option after widget is created")
+        widget2 = self.create(screen=display)
+        self.assertEqual(widget2['screen'], display)
+
+    def test_use(self):
+        widget = self.create()
+        self.assertEqual(widget['use'], '')
+        parent = self.create(container=True)
+        wid = parent.winfo_id()
+        widget2 = self.create(use=wid)
+        self.assertEqual(int(widget2['use']), wid)
+
+
+@add_standard_options(StandardOptionsTests)
+class FrameTest(AbstractToplevelTest, unittest.TestCase):
+    OPTIONS = (
+        'background', 'borderwidth',
+        'class', 'colormap', 'container', 'cursor', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'relief', 'takefocus', 'visual', 'width',
+    )
+
+    def _create(self, **kwargs):
+        return tkinter.Frame(self.root, **kwargs)
+
+
+@add_standard_options(StandardOptionsTests)
+class LabelFrameTest(AbstractToplevelTest, unittest.TestCase):
+    OPTIONS = (
+        'background', 'borderwidth',
+        'class', 'colormap', 'container', 'cursor',
+        'font', 'foreground', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'labelanchor', 'labelwidget', 'padx', 'pady', 'relief',
+        'takefocus', 'text', 'visual', 'width',
+    )
+
+    def _create(self, **kwargs):
+        return tkinter.LabelFrame(self.root, **kwargs)
+
+    def test_labelanchor(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'labelanchor',
+                            'e', 'en', 'es', 'n', 'ne', 'nw',
+                            's', 'se', 'sw', 'w', 'wn', 'ws')
+        self.checkInvalidParam(widget, 'labelanchor', 'center')
+
+    def test_labelwidget(self):
+        widget = self.create()
+        label = tkinter.Label(self.root, text='Mupp', name='foo')
+        self.checkParam(widget, 'labelwidget', label, expected='.foo')
+        label.destroy()
+
+
+class AbstractLabelTest(AbstractWidgetTest, IntegerSizeTests):
+    _conv_pixels = noconv
+
+    def test_highlightthickness(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'highlightthickness',
+                              0, 1.3, 2.6, 6, -2, '10p')
+
+
+@add_standard_options(StandardOptionsTests)
+class LabelTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'activebackground', 'activeforeground', 'anchor',
+        'background', 'bitmap', 'borderwidth', 'compound', 'cursor',
+        'disabledforeground', 'font', 'foreground', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'image', 'justify', 'padx', 'pady', 'relief', 'state',
+        'takefocus', 'text', 'textvariable',
+        'underline', 'width', 'wraplength',
+    )
+
+    def _create(self, **kwargs):
+        return tkinter.Label(self.root, **kwargs)
+
+
+@add_standard_options(StandardOptionsTests)
+class ButtonTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'activebackground', 'activeforeground', 'anchor',
+        'background', 'bitmap', 'borderwidth',
+        'command', 'compound', 'cursor', 'default',
+        'disabledforeground', 'font', 'foreground', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'image', 'justify', 'overrelief', 'padx', 'pady', 'relief',
+        'repeatdelay', 'repeatinterval',
+        'state', 'takefocus', 'text', 'textvariable',
+        'underline', 'width', 'wraplength')
+
+    def _create(self, **kwargs):
+        return tkinter.Button(self.root, **kwargs)
+
+    def test_default(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'default', 'active', 'disabled', 'normal')
+
+
+@add_standard_options(StandardOptionsTests)
+class CheckbuttonTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'activebackground', 'activeforeground', 'anchor',
+        'background', 'bitmap', 'borderwidth',
+        'command', 'compound', 'cursor',
+        'disabledforeground', 'font', 'foreground', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'image', 'indicatoron', 'justify',
+        'offrelief', 'offvalue', 'onvalue', 'overrelief',
+        'padx', 'pady', 'relief', 'selectcolor', 'selectimage', 'state',
+        'takefocus', 'text', 'textvariable',
+        'tristateimage', 'tristatevalue',
+        'underline', 'variable', 'width', 'wraplength',
+    )
+
+    def _create(self, **kwargs):
+        return tkinter.Checkbutton(self.root, **kwargs)
+
+
+    def test_offvalue(self):
+        widget = self.create()
+        self.checkParams(widget, 'offvalue', 1, 2.3, '', 'any string')
+
+    def test_onvalue(self):
+        widget = self.create()
+        self.checkParams(widget, 'onvalue', 1, 2.3, '', 'any string')
+
+
+@add_standard_options(StandardOptionsTests)
+class RadiobuttonTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'activebackground', 'activeforeground', 'anchor',
+        'background', 'bitmap', 'borderwidth',
+        'command', 'compound', 'cursor',
+        'disabledforeground', 'font', 'foreground', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'image', 'indicatoron', 'justify', 'offrelief', 'overrelief',
+        'padx', 'pady', 'relief', 'selectcolor', 'selectimage', 'state',
+        'takefocus', 'text', 'textvariable',
+        'tristateimage', 'tristatevalue',
+        'underline', 'value', 'variable', 'width', 'wraplength',
+    )
+
+    def _create(self, **kwargs):
+        return tkinter.Radiobutton(self.root, **kwargs)
+
+    def test_value(self):
+        widget = self.create()
+        self.checkParams(widget, 'value', 1, 2.3, '', 'any string')
+
+
+@add_standard_options(StandardOptionsTests)
+class MenubuttonTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'activebackground', 'activeforeground', 'anchor',
+        'background', 'bitmap', 'borderwidth',
+        'compound', 'cursor', 'direction',
+        'disabledforeground', 'font', 'foreground', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'image', 'indicatoron', 'justify', 'menu',
+        'padx', 'pady', 'relief', 'state',
+        'takefocus', 'text', 'textvariable',
+        'underline', 'width', 'wraplength',
+    )
+    _conv_pixels = staticmethod(pixels_round)
+
+    def _create(self, **kwargs):
+        return tkinter.Menubutton(self.root, **kwargs)
+
+    def test_direction(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'direction',
+                'above', 'below', 'flush', 'left', 'right')
+
+    def test_height(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'height', 100, -100, 0, conv=str)
+
+    test_highlightthickness = StandardOptionsTests.test_highlightthickness
+
+    def test_image(self):
+        widget = self.create()
+        image = tkinter.PhotoImage('image1')
+        self.checkParam(widget, 'image', image, conv=str)
+        errmsg = 'image "spam" doesn\'t exist'
+        with self.assertRaises(tkinter.TclError) as cm:
+            widget['image'] = 'spam'
+        if errmsg is not None:
+            self.assertEqual(str(cm.exception), errmsg)
+        with self.assertRaises(tkinter.TclError) as cm:
+            widget.configure({'image': 'spam'})
+        if errmsg is not None:
+            self.assertEqual(str(cm.exception), errmsg)
+
+    def test_menu(self):
+        widget = self.create()
+        menu = tkinter.Menu(widget, name='menu')
+        self.checkParam(widget, 'menu', menu, eq=widget_eq)
+        menu.destroy()
+
+    def test_padx(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'padx', 3, 4.4, 5.6, '12m')
+        self.checkParam(widget, 'padx', -2, expected=0)
+
+    def test_pady(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'pady', 3, 4.4, 5.6, '12m')
+        self.checkParam(widget, 'pady', -2, expected=0)
+
+    def test_width(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'width', 402, -402, 0, conv=str)
+
+
+class OptionMenuTest(MenubuttonTest, unittest.TestCase):
+
+    def _create(self, default='b', values=('a', 'b', 'c'), **kwargs):
+        return tkinter.OptionMenu(self.root, None, default, *values, **kwargs)
+
+
+@add_standard_options(IntegerSizeTests, StandardOptionsTests)
+class EntryTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'background', 'borderwidth', 'cursor',
+        'disabledbackground', 'disabledforeground',
+        'exportselection', 'font', 'foreground',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'insertbackground', 'insertborderwidth',
+        'insertofftime', 'insertontime', 'insertwidth',
+        'invalidcommand', 'justify', 'readonlybackground', 'relief',
+        'selectbackground', 'selectborderwidth', 'selectforeground',
+        'show', 'state', 'takefocus', 'textvariable',
+        'validate', 'validatecommand', 'width', 'xscrollcommand',
+    )
+
+    def _create(self, **kwargs):
+        return tkinter.Entry(self.root, **kwargs)
+
+    def test_disabledbackground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'disabledbackground')
+
+    def test_insertborderwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'insertborderwidth', 0, 1.3, -2)
+        self.checkParam(widget, 'insertborderwidth', 2, expected=1)
+        self.checkParam(widget, 'insertborderwidth', '10p', expected=1)
+
+    def test_insertwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'insertwidth', 1.3, 3.6, '10p')
+        self.checkParam(widget, 'insertwidth', 0.1, expected=2)
+        self.checkParam(widget, 'insertwidth', -2, expected=2)
+        if pixels_round(0.9) <= 0:
+            self.checkParam(widget, 'insertwidth', 0.9, expected=2)
+        else:
+            self.checkParam(widget, 'insertwidth', 0.9, expected=1)
+
+    def test_invalidcommand(self):
+        widget = self.create()
+        self.checkCommandParam(widget, 'invalidcommand')
+        self.checkCommandParam(widget, 'invcmd')
+
+    def test_readonlybackground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'readonlybackground')
+
+    def test_show(self):
+        widget = self.create()
+        self.checkParam(widget, 'show', '*')
+        self.checkParam(widget, 'show', '')
+        self.checkParam(widget, 'show', ' ')
+
+    def test_state(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'state',
+                            'disabled', 'normal', 'readonly')
+
+    def test_validate(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'validate',
+                'all', 'key', 'focus', 'focusin', 'focusout', 'none')
+
+    def test_validatecommand(self):
+        widget = self.create()
+        self.checkCommandParam(widget, 'validatecommand')
+        self.checkCommandParam(widget, 'vcmd')
+
+
+@add_standard_options(StandardOptionsTests)
+class SpinboxTest(EntryTest, unittest.TestCase):
+    OPTIONS = (
+        'activebackground', 'background', 'borderwidth',
+        'buttonbackground', 'buttoncursor', 'buttondownrelief', 'buttonuprelief',
+        'command', 'cursor', 'disabledbackground', 'disabledforeground',
+        'exportselection', 'font', 'foreground', 'format', 'from',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'increment',
+        'insertbackground', 'insertborderwidth',
+        'insertofftime', 'insertontime', 'insertwidth',
+        'invalidcommand', 'justify', 'relief', 'readonlybackground',
+        'repeatdelay', 'repeatinterval',
+        'selectbackground', 'selectborderwidth', 'selectforeground',
+        'state', 'takefocus', 'textvariable', 'to',
+        'validate', 'validatecommand', 'values',
+        'width', 'wrap', 'xscrollcommand',
+    )
+
+    def _create(self, **kwargs):
+        return tkinter.Spinbox(self.root, **kwargs)
+
+    test_show = None
+
+    def test_buttonbackground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'buttonbackground')
+
+    def test_buttoncursor(self):
+        widget = self.create()
+        self.checkCursorParam(widget, 'buttoncursor')
+
+    def test_buttondownrelief(self):
+        widget = self.create()
+        self.checkReliefParam(widget, 'buttondownrelief')
+
+    def test_buttonuprelief(self):
+        widget = self.create()
+        self.checkReliefParam(widget, 'buttonuprelief')
+
+    def test_format(self):
+        widget = self.create()
+        self.checkParam(widget, 'format', '%2f')
+        self.checkParam(widget, 'format', '%2.2f')
+        self.checkParam(widget, 'format', '%.2f')
+        self.checkParam(widget, 'format', '%2.f')
+        self.checkInvalidParam(widget, 'format', '%2e-1f')
+        self.checkInvalidParam(widget, 'format', '2.2')
+        self.checkInvalidParam(widget, 'format', '%2.-2f')
+        self.checkParam(widget, 'format', '%-2.02f')
+        self.checkParam(widget, 'format', '% 2.02f')
+        self.checkParam(widget, 'format', '% -2.200f')
+        self.checkParam(widget, 'format', '%09.200f')
+        self.checkInvalidParam(widget, 'format', '%d')
+
+    def test_from(self):
+        widget = self.create()
+        self.checkParam(widget, 'to', 100.0)
+        self.checkFloatParam(widget, 'from', -10, 10.2, 11.7)
+        self.checkInvalidParam(widget, 'from', 200,
+                errmsg='-to value must be greater than -from value')
+
+    def test_increment(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'increment', -1, 1, 10.2, 12.8, 0)
+
+    def test_to(self):
+        widget = self.create()
+        self.checkParam(widget, 'from', -100.0)
+        self.checkFloatParam(widget, 'to', -10, 10.2, 11.7)
+        self.checkInvalidParam(widget, 'to', -200,
+                errmsg='-to value must be greater than -from value')
+
+    def test_values(self):
+        # XXX
+        widget = self.create()
+        self.assertEqual(widget['values'], '')
+        self.checkParam(widget, 'values', 'mon tue wed thur')
+        self.checkParam(widget, 'values', ('mon', 'tue', 'wed', 'thur'),
+                        expected='mon tue wed thur')
+        self.checkParam(widget, 'values', (42, 3.14, '', 'any string'),
+                        expected='42 3.14 {} {any string}')
+        self.checkParam(widget, 'values', '')
+
+    def test_wrap(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'wrap')
+
+    def test_bbox(self):
+        widget = self.create()
+        bbox = widget.bbox(0)
+        self.assertEqual(len(bbox), 4)
+        for item in bbox:
+            self.assertIsInstance(item, int)
+
+        self.assertRaises(tkinter.TclError, widget.bbox, 'noindex')
+        self.assertRaises(tkinter.TclError, widget.bbox, None)
+        self.assertRaises(TypeError, widget.bbox)
+        self.assertRaises(TypeError, widget.bbox, 0, 1)
+
+
+@add_standard_options(StandardOptionsTests)
+class TextTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'autoseparators', 'background', 'blockcursor', 'borderwidth',
+        'cursor', 'endline', 'exportselection',
+        'font', 'foreground', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'inactiveselectbackground', 'insertbackground', 'insertborderwidth',
+        'insertofftime', 'insertontime', 'insertunfocussed', 'insertwidth',
+        'maxundo', 'padx', 'pady', 'relief',
+        'selectbackground', 'selectborderwidth', 'selectforeground',
+        'setgrid', 'spacing1', 'spacing2', 'spacing3', 'startline', 'state',
+        'tabs', 'tabstyle', 'takefocus', 'undo', 'width', 'wrap',
+        'xscrollcommand', 'yscrollcommand',
+    )
+    if tcl_version < (8, 5):
+        wantobjects = False
+
+    def _create(self, **kwargs):
+        return tkinter.Text(self.root, **kwargs)
+
+    def test_autoseparators(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'autoseparators')
+
+    @requires_tcl(8, 5)
+    def test_blockcursor(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'blockcursor')
+
+    @requires_tcl(8, 5)
+    def test_endline(self):
+        widget = self.create()
+        text = '\n'.join('Line %d' for i in range(100))
+        widget.insert('end', text)
+        self.checkParam(widget, 'endline', 200, expected='')
+        self.checkParam(widget, 'endline', -10, expected='')
+        self.checkInvalidParam(widget, 'endline', 'spam',
+                errmsg='expected integer but got "spam"')
+        self.checkParam(widget, 'endline', 50)
+        self.checkParam(widget, 'startline', 15)
+        self.checkInvalidParam(widget, 'endline', 10,
+                errmsg='-startline must be less than or equal to -endline')
+
+    def test_height(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'height', 100, 101.2, 102.6, '3c')
+        self.checkParam(widget, 'height', -100, expected=1)
+        self.checkParam(widget, 'height', 0, expected=1)
+
+    def test_maxundo(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'maxundo', 0, 5, -1)
+
+    @requires_tcl(8, 5)
+    def test_inactiveselectbackground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'inactiveselectbackground')
+
+    @requires_tcl(8, 6)
+    def test_insertunfocussed(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'insertunfocussed',
+                            'hollow', 'none', 'solid')
+
+    def test_selectborderwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'selectborderwidth',
+                              1.3, 2.6, -2, '10p', conv=noconv,
+                              keep_orig=tcl_version >= (8, 5))
+
+    def test_spacing1(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'spacing1', 20, 21.4, 22.6, '0.5c')
+        self.checkParam(widget, 'spacing1', -5, expected=0)
+
+    def test_spacing2(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'spacing2', 5, 6.4, 7.6, '0.1c')
+        self.checkParam(widget, 'spacing2', -1, expected=0)
+
+    def test_spacing3(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'spacing3', 20, 21.4, 22.6, '0.5c')
+        self.checkParam(widget, 'spacing3', -10, expected=0)
+
+    @requires_tcl(8, 5)
+    def test_startline(self):
+        widget = self.create()
+        text = '\n'.join('Line %d' for i in range(100))
+        widget.insert('end', text)
+        self.checkParam(widget, 'startline', 200, expected='')
+        self.checkParam(widget, 'startline', -10, expected='')
+        self.checkInvalidParam(widget, 'startline', 'spam',
+                errmsg='expected integer but got "spam"')
+        self.checkParam(widget, 'startline', 10)
+        self.checkParam(widget, 'endline', 50)
+        self.checkInvalidParam(widget, 'startline', 70,
+                errmsg='-startline must be less than or equal to -endline')
+
+    def test_state(self):
+        widget = self.create()
+        if tcl_version < (8, 5):
+            self.checkParams(widget, 'state', 'disabled', 'normal')
+        else:
+            self.checkEnumParam(widget, 'state', 'disabled', 'normal')
+
+    def test_tabs(self):
+        widget = self.create()
+        if get_tk_patchlevel() < (8, 5, 11):
+            self.checkParam(widget, 'tabs', (10.2, 20.7, '1i', '2i'),
+                            expected=('10.2', '20.7', '1i', '2i'))
+        else:
+            self.checkParam(widget, 'tabs', (10.2, 20.7, '1i', '2i'))
+        self.checkParam(widget, 'tabs', '10.2 20.7 1i 2i',
+                        expected=('10.2', '20.7', '1i', '2i'))
+        self.checkParam(widget, 'tabs', '2c left 4c 6c center',
+                        expected=('2c', 'left', '4c', '6c', 'center'))
+        self.checkInvalidParam(widget, 'tabs', 'spam',
+                               errmsg='bad screen distance "spam"',
+                               keep_orig=tcl_version >= (8, 5))
+
+    @requires_tcl(8, 5)
+    def test_tabstyle(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'tabstyle', 'tabular', 'wordprocessor')
+
+    def test_undo(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'undo')
+
+    def test_width(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'width', 402)
+        self.checkParam(widget, 'width', -402, expected=1)
+        self.checkParam(widget, 'width', 0, expected=1)
+
+    def test_wrap(self):
+        widget = self.create()
+        if tcl_version < (8, 5):
+            self.checkParams(widget, 'wrap', 'char', 'none', 'word')
+        else:
+            self.checkEnumParam(widget, 'wrap', 'char', 'none', 'word')
+
+    def test_bbox(self):
+        widget = self.create()
+        bbox = widget.bbox('1.1')
+        self.assertEqual(len(bbox), 4)
+        for item in bbox:
+            self.assertIsInstance(item, int)
+
+        self.assertIsNone(widget.bbox('end'))
+        self.assertRaises(tkinter.TclError, widget.bbox, 'noindex')
+        self.assertRaises(tkinter.TclError, widget.bbox, None)
+        self.assertRaises(TypeError, widget.bbox)
+        self.assertRaises(TypeError, widget.bbox, '1.1', 'end')
+
+
+@add_standard_options(PixelSizeTests, StandardOptionsTests)
+class CanvasTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'background', 'borderwidth',
+        'closeenough', 'confine', 'cursor', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'insertbackground', 'insertborderwidth',
+        'insertofftime', 'insertontime', 'insertwidth',
+        'relief', 'scrollregion',
+        'selectbackground', 'selectborderwidth', 'selectforeground',
+        'state', 'takefocus',
+        'xscrollcommand', 'xscrollincrement',
+        'yscrollcommand', 'yscrollincrement', 'width',
+    )
+
+    _conv_pixels = round
+    wantobjects = False
+
+    def _create(self, **kwargs):
+        return tkinter.Canvas(self.root, **kwargs)
+
+    def test_closeenough(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'closeenough', 24, 2.4, 3.6, -3,
+                             conv=float)
+
+    def test_confine(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'confine')
+
+    def test_scrollregion(self):
+        widget = self.create()
+        self.checkParam(widget, 'scrollregion', '0 0 200 150')
+        self.checkParam(widget, 'scrollregion', (0, 0, 200, 150),
+                        expected='0 0 200 150')
+        self.checkParam(widget, 'scrollregion', '')
+        self.checkInvalidParam(widget, 'scrollregion', 'spam',
+                               errmsg='bad scrollRegion "spam"')
+        self.checkInvalidParam(widget, 'scrollregion', (0, 0, 200, 'spam'))
+        self.checkInvalidParam(widget, 'scrollregion', (0, 0, 200))
+        self.checkInvalidParam(widget, 'scrollregion', (0, 0, 200, 150, 0))
+
+    def test_state(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'state', 'disabled', 'normal',
+                errmsg='bad state value "{}": must be normal or disabled')
+
+    def test_xscrollincrement(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'xscrollincrement',
+                              40, 0, 41.2, 43.6, -40, '0.5i')
+
+    def test_yscrollincrement(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'yscrollincrement',
+                              10, 0, 11.2, 13.6, -10, '0.1i')
+
+
+@add_standard_options(IntegerSizeTests, StandardOptionsTests)
+class ListboxTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'activestyle', 'background', 'borderwidth', 'cursor',
+        'disabledforeground', 'exportselection',
+        'font', 'foreground', 'height',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'listvariable', 'relief',
+        'selectbackground', 'selectborderwidth', 'selectforeground',
+        'selectmode', 'setgrid', 'state',
+        'takefocus', 'width', 'xscrollcommand', 'yscrollcommand',
+    )
+
+    def _create(self, **kwargs):
+        return tkinter.Listbox(self.root, **kwargs)
+
+    def test_activestyle(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'activestyle',
+                            'dotbox', 'none', 'underline')
+
+    def test_listvariable(self):
+        widget = self.create()
+        var = tkinter.DoubleVar()
+        self.checkVariableParam(widget, 'listvariable', var)
+
+    def test_selectmode(self):
+        widget = self.create()
+        self.checkParam(widget, 'selectmode', 'single')
+        self.checkParam(widget, 'selectmode', 'browse')
+        self.checkParam(widget, 'selectmode', 'multiple')
+        self.checkParam(widget, 'selectmode', 'extended')
+
+    def test_state(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'state', 'disabled', 'normal')
+
+@add_standard_options(PixelSizeTests, StandardOptionsTests)
+class ScaleTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'activebackground', 'background', 'bigincrement', 'borderwidth',
+        'command', 'cursor', 'digits', 'font', 'foreground', 'from',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'label', 'length', 'orient', 'relief',
+        'repeatdelay', 'repeatinterval',
+        'resolution', 'showvalue', 'sliderlength', 'sliderrelief', 'state',
+        'takefocus', 'tickinterval', 'to', 'troughcolor', 'variable', 'width',
+    )
+    default_orient = 'vertical'
+
+    def _create(self, **kwargs):
+        return tkinter.Scale(self.root, **kwargs)
+
+    def test_bigincrement(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'bigincrement', 12.4, 23.6, -5)
+
+    def test_digits(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'digits', 5, 0)
+
+    def test_from(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'from', 100, 14.9, 15.1, conv=float_round)
+
+    def test_label(self):
+        widget = self.create()
+        self.checkParam(widget, 'label', 'any string')
+        self.checkParam(widget, 'label', '')
+
+    def test_length(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'length', 130, 131.2, 135.6, '5i')
+
+    def test_resolution(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'resolution', 4.2, 0, 6.7, -2)
+
+    def test_showvalue(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'showvalue')
+
+    def test_sliderlength(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'sliderlength',
+                              10, 11.2, 15.6, -3, '3m')
+
+    def test_sliderrelief(self):
+        widget = self.create()
+        self.checkReliefParam(widget, 'sliderrelief')
+
+    def test_tickinterval(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'tickinterval', 1, 4.3, 7.6, 0,
+                             conv=float_round)
+        self.checkParam(widget, 'tickinterval', -2, expected=2,
+                        conv=float_round)
+
+    def test_to(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'to', 300, 14.9, 15.1, -10,
+                             conv=float_round)
+
+
+@add_standard_options(PixelSizeTests, StandardOptionsTests)
+class ScrollbarTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'activebackground', 'activerelief',
+        'background', 'borderwidth',
+        'command', 'cursor', 'elementborderwidth',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'jump', 'orient', 'relief',
+        'repeatdelay', 'repeatinterval',
+        'takefocus', 'troughcolor', 'width',
+    )
+    _conv_pixels = round
+    wantobjects = False
+    default_orient = 'vertical'
+
+    def _create(self, **kwargs):
+        return tkinter.Scrollbar(self.root, **kwargs)
+
+    def test_activerelief(self):
+        widget = self.create()
+        self.checkReliefParam(widget, 'activerelief')
+
+    def test_elementborderwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'elementborderwidth', 4.3, 5.6, -2, '1m')
+
+    def test_orient(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'orient', 'vertical', 'horizontal',
+                errmsg='bad orientation "{}": must be vertical or horizontal')
+
+
+@add_standard_options(StandardOptionsTests)
+class PanedWindowTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'background', 'borderwidth', 'cursor',
+        'handlepad', 'handlesize', 'height',
+        'opaqueresize', 'orient', 'relief',
+        'sashcursor', 'sashpad', 'sashrelief', 'sashwidth',
+        'showhandle', 'width',
+    )
+    default_orient = 'horizontal'
+
+    def _create(self, **kwargs):
+        return tkinter.PanedWindow(self.root, **kwargs)
+
+    def test_handlepad(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'handlepad', 5, 6.4, 7.6, -3, '1m')
+
+    def test_handlesize(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'handlesize', 8, 9.4, 10.6, -3, '2m',
+                              conv=noconv)
+
+    def test_height(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'height', 100, 101.2, 102.6, -100, 0, '1i',
+                              conv=noconv)
+
+    def test_opaqueresize(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'opaqueresize')
+
+    def test_sashcursor(self):
+        widget = self.create()
+        self.checkCursorParam(widget, 'sashcursor')
+
+    def test_sashpad(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'sashpad', 8, 1.3, 2.6, -2, '2m')
+
+    def test_sashrelief(self):
+        widget = self.create()
+        self.checkReliefParam(widget, 'sashrelief')
+
+    def test_sashwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'sashwidth', 10, 11.1, 15.6, -3, '1m',
+                              conv=noconv)
+
+    def test_showhandle(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'showhandle')
+
+    def test_width(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'width', 402, 403.4, 404.6, -402, 0, '5i',
+                              conv=noconv)
+
+
+@add_standard_options(StandardOptionsTests)
+class MenuTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'activebackground', 'activeborderwidth', 'activeforeground',
+        'background', 'borderwidth', 'cursor',
+        'disabledforeground', 'font', 'foreground',
+        'postcommand', 'relief', 'selectcolor', 'takefocus',
+        'tearoff', 'tearoffcommand', 'title', 'type',
+    )
+    _conv_pixels = noconv
+
+    def _create(self, **kwargs):
+        return tkinter.Menu(self.root, **kwargs)
+
+    def test_postcommand(self):
+        widget = self.create()
+        self.checkCommandParam(widget, 'postcommand')
+
+    def test_tearoff(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'tearoff')
+
+    def test_tearoffcommand(self):
+        widget = self.create()
+        self.checkCommandParam(widget, 'tearoffcommand')
+
+    def test_title(self):
+        widget = self.create()
+        self.checkParam(widget, 'title', 'any string')
+
+    def test_type(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'type',
+                'normal', 'tearoff', 'menubar')
+
+
+@add_standard_options(PixelSizeTests, StandardOptionsTests)
+class MessageTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'anchor', 'aspect', 'background', 'borderwidth',
+        'cursor', 'font', 'foreground',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'justify', 'padx', 'pady', 'relief',
+        'takefocus', 'text', 'textvariable', 'width',
+    )
+    _conv_pad_pixels = noconv
+
+    def _create(self, **kwargs):
+        return tkinter.Message(self.root, **kwargs)
+
+    def test_aspect(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'aspect', 250, 0, -300)
+
+
+tests_gui = (
+        ButtonTest, CanvasTest, CheckbuttonTest, EntryTest,
+        FrameTest, LabelFrameTest,LabelTest, ListboxTest,
+        MenubuttonTest, MenuTest, MessageTest, OptionMenuTest,
+        PanedWindowTest, RadiobuttonTest, ScaleTest, ScrollbarTest,
+        SpinboxTest, TextTest, ToplevelTest,
+)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/tkinter/test/test_ttk/test_widgets.py b/Lib/tkinter/test/test_ttk/test_widgets.py
index 890787b..55dc2f0 100644
--- a/Lib/tkinter/test/test_ttk/test_widgets.py
+++ b/Lib/tkinter/test/test_ttk/test_widgets.py
@@ -1,15 +1,57 @@
 import unittest
 import tkinter
-import os
 from tkinter import ttk
-from test.support import requires, run_unittest
+from test.support import requires
 import sys
 
 import tkinter.test.support as support
-from tkinter.test.test_ttk.test_functions import MockTclObj, MockStateSpec
+from tkinter.test.test_ttk.test_functions import MockTclObj
+from tkinter.test.support import tcl_version
+from tkinter.test.widget_tests import (add_standard_options, noconv,
+    AbstractWidgetTest, StandardOptionsTests, IntegerSizeTests, PixelSizeTests)
 
 requires('gui')
 
+
+class StandardTtkOptionsTests(StandardOptionsTests):
+
+    def test_class(self):
+        widget = self.create()
+        self.assertEqual(widget['class'], '')
+        errmsg='attempt to change read-only option'
+        if tcl_version < (8, 6):
+            errmsg='Attempt to change read-only option'
+        self.checkInvalidParam(widget, 'class', 'Foo', errmsg=errmsg)
+        widget2 = self.create(class_='Foo')
+        self.assertEqual(widget2['class'], 'Foo')
+
+    def test_padding(self):
+        widget = self.create()
+        self.checkParam(widget, 'padding', 0, expected=('0',))
+        self.checkParam(widget, 'padding', 5, expected=('5',))
+        self.checkParam(widget, 'padding', (5, 6), expected=('5', '6'))
+        self.checkParam(widget, 'padding', (5, 6, 7),
+                        expected=('5', '6', '7'))
+        self.checkParam(widget, 'padding', (5, 6, 7, 8),
+                        expected=('5', '6', '7', '8'))
+        self.checkParam(widget, 'padding', ('5p', '6p', '7p', '8p'))
+        self.checkParam(widget, 'padding', (), expected='')
+
+    def test_style(self):
+        widget = self.create()
+        self.assertEqual(widget['style'], '')
+        errmsg = 'Layout Foo not found'
+        if hasattr(self, 'default_orient'):
+            errmsg = ('Layout %s.Foo not found' %
+                      getattr(self, 'default_orient').title())
+        self.checkInvalidParam(widget, 'style', 'Foo',
+                errmsg=errmsg)
+        widget2 = self.create(class_='Foo')
+        self.assertEqual(widget2['class'], 'Foo')
+        # XXX
+        pass
+
+
 class WidgetTest(unittest.TestCase):
     """Tests methods available in every ttk widget."""
 
@@ -73,7 +115,112 @@
         self.assertEqual(self.widget.state(), ('active', ))
 
 
-class ButtonTest(unittest.TestCase):
+class AbstractToplevelTest(AbstractWidgetTest, PixelSizeTests):
+    _conv_pixels = noconv
+
+
+@add_standard_options(StandardTtkOptionsTests)
+class FrameTest(AbstractToplevelTest, unittest.TestCase):
+    OPTIONS = (
+        'borderwidth', 'class', 'cursor', 'height',
+        'padding', 'relief', 'style', 'takefocus',
+        'width',
+    )
+
+    def _create(self, **kwargs):
+        return ttk.Frame(self.root, **kwargs)
+
+
+@add_standard_options(StandardTtkOptionsTests)
+class LabelFrameTest(AbstractToplevelTest, unittest.TestCase):
+    OPTIONS = (
+        'borderwidth', 'class', 'cursor', 'height',
+        'labelanchor', 'labelwidget',
+        'padding', 'relief', 'style', 'takefocus',
+        'text', 'underline', 'width',
+    )
+
+    def _create(self, **kwargs):
+        return ttk.LabelFrame(self.root, **kwargs)
+
+    def test_labelanchor(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'labelanchor',
+                'e', 'en', 'es', 'n', 'ne', 'nw', 's', 'se', 'sw', 'w', 'wn', 'ws',
+                errmsg='Bad label anchor specification {}')
+        self.checkInvalidParam(widget, 'labelanchor', 'center')
+
+    def test_labelwidget(self):
+        widget = self.create()
+        label = ttk.Label(self.root, text='Mupp', name='foo')
+        self.checkParam(widget, 'labelwidget', label, expected='.foo')
+        label.destroy()
+
+
+class AbstractLabelTest(AbstractWidgetTest):
+
+    def checkImageParam(self, widget, name):
+        image = tkinter.PhotoImage('image1')
+        image2 = tkinter.PhotoImage('image2')
+        self.checkParam(widget, name, image, expected=('image1',))
+        self.checkParam(widget, name, 'image1', expected=('image1',))
+        self.checkParam(widget, name, (image,), expected=('image1',))
+        self.checkParam(widget, name, (image, 'active', image2),
+                        expected=('image1', 'active', 'image2'))
+        self.checkParam(widget, name, 'image1 active image2',
+                        expected=('image1', 'active', 'image2'))
+        self.checkInvalidParam(widget, name, 'spam',
+                errmsg='image "spam" doesn\'t exist')
+
+    def test_compound(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'compound',
+                'none', 'text', 'image', 'center',
+                'top', 'bottom', 'left', 'right')
+
+    def test_state(self):
+        widget = self.create()
+        self.checkParams(widget, 'state', 'active', 'disabled', 'normal')
+
+    def test_width(self):
+        widget = self.create()
+        self.checkParams(widget, 'width', 402, -402, 0)
+
+
+@add_standard_options(StandardTtkOptionsTests)
+class LabelTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'anchor', 'background',
+        'class', 'compound', 'cursor', 'font', 'foreground',
+        'image', 'justify', 'padding', 'relief', 'state', 'style',
+        'takefocus', 'text', 'textvariable',
+        'underline', 'width', 'wraplength',
+    )
+    _conv_pixels = noconv
+
+    def _create(self, **kwargs):
+        return ttk.Label(self.root, **kwargs)
+
+    def test_font(self):
+        widget = self.create()
+        self.checkParam(widget, 'font',
+                        '-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*')
+
+
+@add_standard_options(StandardTtkOptionsTests)
+class ButtonTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'command', 'compound', 'cursor', 'default',
+        'image', 'state', 'style', 'takefocus', 'text', 'textvariable',
+        'underline', 'width',
+    )
+
+    def _create(self, **kwargs):
+        return ttk.Button(self.root, **kwargs)
+
+    def test_default(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'default', 'normal', 'active', 'disabled')
 
     def test_invoke(self):
         success = []
@@ -82,7 +229,27 @@
         self.assertTrue(success)
 
 
-class CheckbuttonTest(unittest.TestCase):
+@add_standard_options(StandardTtkOptionsTests)
+class CheckbuttonTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'command', 'compound', 'cursor',
+        'image',
+        'offvalue', 'onvalue',
+        'state', 'style',
+        'takefocus', 'text', 'textvariable',
+        'underline', 'variable', 'width',
+    )
+
+    def _create(self, **kwargs):
+        return ttk.Checkbutton(self.root, **kwargs)
+
+    def test_offvalue(self):
+        widget = self.create()
+        self.checkParams(widget, 'offvalue', 1, 2.3, '', 'any string')
+
+    def test_onvalue(self):
+        widget = self.create()
+        self.checkParams(widget, 'onvalue', 1, 2.3, '', 'any string')
 
     def test_invoke(self):
         success = []
@@ -105,21 +272,40 @@
 
         cbtn['command'] = ''
         res = cbtn.invoke()
-        self.assertEqual(str(res), '')
+        self.assertFalse(str(res))
         self.assertFalse(len(success) > 1)
         self.assertEqual(cbtn['offvalue'],
             cbtn.tk.globalgetvar(cbtn['variable']))
 
 
-class ComboboxTest(unittest.TestCase):
+@add_standard_options(IntegerSizeTests, StandardTtkOptionsTests)
+class ComboboxTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'cursor', 'exportselection', 'height',
+        'justify', 'postcommand', 'state', 'style',
+        'takefocus', 'textvariable', 'values', 'width',
+    )
 
     def setUp(self):
+        super().setUp()
         support.root_deiconify()
-        self.combo = ttk.Combobox()
+        self.combo = self.create()
 
     def tearDown(self):
         self.combo.destroy()
         support.root_withdraw()
+        super().tearDown()
+
+    def _create(self, **kwargs):
+        return ttk.Combobox(self.root, **kwargs)
+
+    def test_height(self):
+        widget = self.create()
+        self.checkParams(widget, 'height', 100, 101.2, 102.6, -100, 0, '1i')
+
+    def test_state(self):
+        widget = self.create()
+        self.checkParams(widget, 'state', 'active', 'disabled', 'normal')
 
     def _show_drop_down_listbox(self):
         width = self.combo.winfo_width()
@@ -167,8 +353,16 @@
             self.assertEqual(self.combo.get(), getval)
             self.assertEqual(self.combo.current(), currval)
 
+        self.assertEqual(self.combo['values'],
+                         () if tcl_version < (8, 5) else '')
         check_get_current('', -1)
 
+        self.checkParam(self.combo, 'values', 'mon tue wed thur',
+                        expected=('mon', 'tue', 'wed', 'thur'))
+        self.checkParam(self.combo, 'values', ('mon', 'tue', 'wed', 'thur'))
+        self.checkParam(self.combo, 'values', (42, 3.14, '', 'any string'))
+        self.checkParam(self.combo, 'values', '', expected=())
+
         self.combo['values'] = ['a', 1, 'c']
 
         self.combo.set('c')
@@ -209,15 +403,52 @@
         combo2.destroy()
 
 
-class EntryTest(unittest.TestCase):
+@add_standard_options(IntegerSizeTests, StandardTtkOptionsTests)
+class EntryTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'background', 'class', 'cursor',
+        'exportselection', 'font',
+        'invalidcommand', 'justify',
+        'show', 'state', 'style', 'takefocus', 'textvariable',
+        'validate', 'validatecommand', 'width', 'xscrollcommand',
+    )
 
     def setUp(self):
+        super().setUp()
         support.root_deiconify()
-        self.entry = ttk.Entry()
+        self.entry = self.create()
 
     def tearDown(self):
         self.entry.destroy()
         support.root_withdraw()
+        super().tearDown()
+
+    def _create(self, **kwargs):
+        return ttk.Entry(self.root, **kwargs)
+
+    def test_invalidcommand(self):
+        widget = self.create()
+        self.checkCommandParam(widget, 'invalidcommand')
+
+    def test_show(self):
+        widget = self.create()
+        self.checkParam(widget, 'show', '*')
+        self.checkParam(widget, 'show', '')
+        self.checkParam(widget, 'show', ' ')
+
+    def test_state(self):
+        widget = self.create()
+        self.checkParams(widget, 'state',
+                         'disabled', 'normal', 'readonly')
+
+    def test_validate(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'validate',
+                'all', 'key', 'focus', 'focusin', 'focusout', 'none')
+
+    def test_validatecommand(self):
+        widget = self.create()
+        self.checkCommandParam(widget, 'validatecommand')
 
 
     def test_bbox(self):
@@ -313,16 +544,36 @@
         self.assertEqual(self.entry.state(), ())
 
 
-class PanedwindowTest(unittest.TestCase):
+@add_standard_options(IntegerSizeTests, StandardTtkOptionsTests)
+class PanedWindowTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'cursor', 'height',
+        'orient', 'style', 'takefocus', 'width',
+    )
 
     def setUp(self):
+        super().setUp()
         support.root_deiconify()
-        self.paned = ttk.Panedwindow()
+        self.paned = self.create()
 
     def tearDown(self):
         self.paned.destroy()
         support.root_withdraw()
+        super().tearDown()
 
+    def _create(self, **kwargs):
+        return ttk.PanedWindow(self.root, **kwargs)
+
+    def test_orient(self):
+        widget = self.create()
+        self.assertEqual(str(widget['orient']), 'vertical')
+        errmsg='attempt to change read-only option'
+        if tcl_version < (8, 6):
+            errmsg='Attempt to change read-only option'
+        self.checkInvalidParam(widget, 'orient', 'horizontal',
+                errmsg=errmsg)
+        widget2 = self.create(orient='horizontal')
+        self.assertEqual(str(widget2['orient']), 'horizontal')
 
     def test_add(self):
         # attempt to add a child that is not a direct child of the paned window
@@ -432,7 +683,22 @@
         self.assertTrue(isinstance(self.paned.sashpos(0), int))
 
 
-class RadiobuttonTest(unittest.TestCase):
+@add_standard_options(StandardTtkOptionsTests)
+class RadiobuttonTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'command', 'compound', 'cursor',
+        'image',
+        'state', 'style',
+        'takefocus', 'text', 'textvariable',
+        'underline', 'value', 'variable', 'width',
+    )
+
+    def _create(self, **kwargs):
+        return ttk.Radiobutton(self.root, **kwargs)
+
+    def test_value(self):
+        widget = self.create()
+        self.checkParams(widget, 'value', 1, 2.3, '', 'any string')
 
     def test_invoke(self):
         success = []
@@ -462,19 +728,68 @@
         self.assertEqual(str(cbtn['variable']), str(cbtn2['variable']))
 
 
+class MenubuttonTest(AbstractLabelTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'compound', 'cursor', 'direction',
+        'image', 'menu', 'state', 'style',
+        'takefocus', 'text', 'textvariable',
+        'underline', 'width',
+    )
 
-class ScaleTest(unittest.TestCase):
+    def _create(self, **kwargs):
+        return ttk.Menubutton(self.root, **kwargs)
+
+    def test_direction(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'direction',
+                'above', 'below', 'left', 'right', 'flush')
+
+    def test_menu(self):
+        widget = self.create()
+        menu = tkinter.Menu(widget, name='menu')
+        self.checkParam(widget, 'menu', menu, conv=str)
+        menu.destroy()
+
+
+@add_standard_options(StandardTtkOptionsTests)
+class ScaleTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'command', 'cursor', 'from', 'length',
+        'orient', 'style', 'takefocus', 'to', 'value', 'variable',
+    )
+    _conv_pixels = noconv
+    default_orient = 'horizontal'
 
     def setUp(self):
+        super().setUp()
         support.root_deiconify()
-        self.scale = ttk.Scale()
+        self.scale = self.create()
         self.scale.pack()
         self.scale.update()
 
     def tearDown(self):
         self.scale.destroy()
         support.root_withdraw()
+        super().tearDown()
 
+    def _create(self, **kwargs):
+        return ttk.Scale(self.root, **kwargs)
+
+    def test_from(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'from', 100, 14.9, 15.1, conv=False)
+
+    def test_length(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'length', 130, 131.2, 135.6, '5i')
+
+    def test_to(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'to', 300, 14.9, 15.1, -10, conv=False)
+
+    def test_value(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'value', 300, 14.9, 15.1, -10, conv=False)
 
     def test_custom_event(self):
         failure = [1, 1, 1] # will need to be empty
@@ -539,11 +854,64 @@
         self.assertRaises(tkinter.TclError, self.scale.set, None)
 
 
-class NotebookTest(unittest.TestCase):
+@add_standard_options(StandardTtkOptionsTests)
+class ProgressbarTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'cursor', 'orient', 'length',
+        'mode', 'maximum', 'phase',
+        'style', 'takefocus', 'value', 'variable',
+    )
+    _conv_pixels = noconv
+    default_orient = 'horizontal'
+
+    def _create(self, **kwargs):
+        return ttk.Progressbar(self.root, **kwargs)
+
+    def test_length(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'length', 100.1, 56.7, '2i')
+
+    def test_maximum(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'maximum', 150.2, 77.7, 0, -10, conv=False)
+
+    def test_mode(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'mode', 'determinate', 'indeterminate')
+
+    def test_phase(self):
+        # XXX
+        pass
+
+    def test_value(self):
+        widget = self.create()
+        self.checkFloatParam(widget, 'value', 150.2, 77.7, 0, -10,
+                             conv=False)
+
+
+@unittest.skipIf(sys.platform == 'darwin',
+                 'ttk.Scrollbar is special on MacOSX')
+@add_standard_options(StandardTtkOptionsTests)
+class ScrollbarTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'command', 'cursor', 'orient', 'style', 'takefocus',
+    )
+    default_orient = 'vertical'
+
+    def _create(self, **kwargs):
+        return ttk.Scrollbar(self.root, **kwargs)
+
+
+@add_standard_options(IntegerSizeTests, StandardTtkOptionsTests)
+class NotebookTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'cursor', 'height', 'padding', 'style', 'takefocus',
+    )
 
     def setUp(self):
+        super().setUp()
         support.root_deiconify()
-        self.nb = ttk.Notebook(padding=0)
+        self.nb = self.create(padding=0)
         self.child1 = ttk.Label()
         self.child2 = ttk.Label()
         self.nb.add(self.child1, text='a')
@@ -554,7 +922,10 @@
         self.child2.destroy()
         self.nb.destroy()
         support.root_withdraw()
+        super().tearDown()
 
+    def _create(self, **kwargs):
+        return ttk.Notebook(self.root, **kwargs)
 
     def test_tab_identifiers(self):
         self.nb.forget(0)
@@ -746,16 +1117,68 @@
         self.assertEqual(self.nb.select(), str(self.child1))
 
 
-class TreeviewTest(unittest.TestCase):
+@add_standard_options(StandardTtkOptionsTests)
+class TreeviewTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'columns', 'cursor', 'displaycolumns',
+        'height', 'padding', 'selectmode', 'show',
+        'style', 'takefocus', 'xscrollcommand', 'yscrollcommand',
+    )
 
     def setUp(self):
+        super().setUp()
         support.root_deiconify()
-        self.tv = ttk.Treeview(padding=0)
+        self.tv = self.create(padding=0)
 
     def tearDown(self):
         self.tv.destroy()
         support.root_withdraw()
+        super().tearDown()
 
+    def _create(self, **kwargs):
+        return ttk.Treeview(self.root, **kwargs)
+
+    def test_columns(self):
+        widget = self.create()
+        self.checkParam(widget, 'columns', 'a b c',
+                        expected=('a', 'b', 'c'))
+        self.checkParam(widget, 'columns', ('a', 'b', 'c'))
+        self.checkParam(widget, 'columns', ())
+
+    def test_displaycolumns(self):
+        widget = self.create()
+        widget['columns'] = ('a', 'b', 'c')
+        self.checkParam(widget, 'displaycolumns', 'b a c',
+                        expected=('b', 'a', 'c'))
+        self.checkParam(widget, 'displaycolumns', ('b', 'a', 'c'))
+        self.checkParam(widget, 'displaycolumns', '#all',
+                        expected=('#all',))
+        self.checkParam(widget, 'displaycolumns', (2, 1, 0))
+        self.checkInvalidParam(widget, 'displaycolumns', ('a', 'b', 'd'),
+                               errmsg='Invalid column index d')
+        self.checkInvalidParam(widget, 'displaycolumns', (1, 2, 3),
+                               errmsg='Column index 3 out of bounds')
+        self.checkInvalidParam(widget, 'displaycolumns', (1, -2),
+                               errmsg='Column index -2 out of bounds')
+
+    def test_height(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'height', 100, -100, 0, '3c', conv=False)
+        self.checkPixelsParam(widget, 'height', 101.2, 102.6, conv=noconv)
+
+    def test_selectmode(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'selectmode',
+                            'none', 'browse', 'extended')
+
+    def test_show(self):
+        widget = self.create()
+        self.checkParam(widget, 'show', 'tree headings',
+                        expected=('tree', 'headings'))
+        self.checkParam(widget, 'show', ('tree', 'headings'))
+        self.checkParam(widget, 'show', ('headings', 'tree'))
+        self.checkParam(widget, 'show', 'tree', expected=('tree',))
+        self.checkParam(widget, 'show', 'headings', expected=('headings',))
 
     def test_bbox(self):
         self.tv.pack()
@@ -946,12 +1369,10 @@
         self.assertRaises(tkinter.TclError, self.tv.heading, '#0',
             anchor=1)
 
-    # XXX skipping for now; should be fixed to work with newer ttk
-    @unittest.skip("skipping pending resolution of Issue #10734")
     def test_heading_callback(self):
         def simulate_heading_click(x, y):
             support.simulate_mouse_click(self.tv, x, y)
-            self.tv.update_idletasks()
+            self.tv.update()
 
         success = [] # no success for now
 
@@ -1149,11 +1570,35 @@
         self.assertTrue(isinstance(self.tv.tag_configure('test'), dict))
 
 
+@add_standard_options(StandardTtkOptionsTests)
+class SeparatorTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'cursor', 'orient', 'style', 'takefocus',
+        # 'state'?
+    )
+    default_orient = 'horizontal'
+
+    def _create(self, **kwargs):
+        return ttk.Separator(self.root, **kwargs)
+
+
+@add_standard_options(StandardTtkOptionsTests)
+class SizegripTest(AbstractWidgetTest, unittest.TestCase):
+    OPTIONS = (
+        'class', 'cursor', 'style', 'takefocus',
+        # 'state'?
+    )
+
+    def _create(self, **kwargs):
+        return ttk.Sizegrip(self.root, **kwargs)
+
 tests_gui = (
-        WidgetTest, ButtonTest, CheckbuttonTest, RadiobuttonTest,
-        ComboboxTest, EntryTest, PanedwindowTest, ScaleTest, NotebookTest,
-        TreeviewTest
+        ButtonTest, CheckbuttonTest, ComboboxTest, EntryTest,
+        FrameTest, LabelFrameTest, LabelTest, MenubuttonTest,
+        NotebookTest, PanedWindowTest, ProgressbarTest,
+        RadiobuttonTest, ScaleTest, ScrollbarTest, SeparatorTest,
+        SizegripTest, TreeviewTest, WidgetTest,
         )
 
 if __name__ == "__main__":
-    run_unittest(*tests_gui)
+    unittest.main()
diff --git a/Lib/tkinter/test/widget_tests.py b/Lib/tkinter/test/widget_tests.py
new file mode 100644
index 0000000..300aa41
--- /dev/null
+++ b/Lib/tkinter/test/widget_tests.py
@@ -0,0 +1,493 @@
+# Common tests for test_tkinter/test_widgets.py and test_ttk/test_widgets.py
+
+import tkinter
+from tkinter.ttk import setup_master, Scale
+from tkinter.test.support import (tcl_version, requires_tcl, get_tk_patchlevel,
+                                  pixels_conv, tcl_obj_eq)
+
+
+noconv = False
+if get_tk_patchlevel() < (8, 5, 11):
+    noconv = str
+
+pixels_round = round
+if get_tk_patchlevel()[:3] == (8, 5, 11):
+    # Issue #19085: Workaround a bug in Tk
+    # http://core.tcl.tk/tk/info/3497848
+    pixels_round = int
+
+
+_sentinel = object()
+
+class AbstractWidgetTest:
+    _conv_pixels = staticmethod(pixels_round)
+    _conv_pad_pixels = None
+    wantobjects = True
+
+    def setUp(self):
+        self.root = setup_master()
+        self.scaling = float(self.root.call('tk', 'scaling'))
+        if not self.root.wantobjects():
+            self.wantobjects = False
+
+    def create(self, **kwargs):
+        widget = self._create(**kwargs)
+        self.addCleanup(widget.destroy)
+        return widget
+
+    def assertEqual2(self, actual, expected, msg=None, eq=object.__eq__):
+        if eq(actual, expected):
+            return
+        self.assertEqual(actual, expected, msg)
+
+    def checkParam(self, widget, name, value, *, expected=_sentinel,
+                   conv=False, eq=None):
+        widget[name] = value
+        if expected is _sentinel:
+            expected = value
+        if conv:
+            expected = conv(expected)
+        if not self.wantobjects:
+            if isinstance(expected, tuple):
+                expected = tkinter._join(expected)
+            else:
+                expected = str(expected)
+        if eq is None:
+            eq = tcl_obj_eq
+        self.assertEqual2(widget[name], expected, eq=eq)
+        self.assertEqual2(widget.cget(name), expected, eq=eq)
+        # XXX
+        if not isinstance(widget, Scale):
+            t = widget.configure(name)
+            self.assertEqual(len(t), 5)
+            ## XXX
+            if not isinstance(t[4], tuple):
+                self.assertEqual2(t[4], expected, eq=eq)
+
+    def checkInvalidParam(self, widget, name, value, errmsg=None, *,
+                          keep_orig=True):
+        orig = widget[name]
+        if errmsg is not None:
+            errmsg = errmsg.format(value)
+        with self.assertRaises(tkinter.TclError) as cm:
+            widget[name] = value
+        if errmsg is not None:
+            self.assertEqual(str(cm.exception), errmsg)
+        if keep_orig:
+            self.assertEqual(widget[name], orig)
+        else:
+            widget[name] = orig
+        with self.assertRaises(tkinter.TclError) as cm:
+            widget.configure({name: value})
+        if errmsg is not None:
+            self.assertEqual(str(cm.exception), errmsg)
+        if keep_orig:
+            self.assertEqual(widget[name], orig)
+        else:
+            widget[name] = orig
+
+    def checkParams(self, widget, name, *values, **kwargs):
+        for value in values:
+            self.checkParam(widget, name, value, **kwargs)
+
+    def checkIntegerParam(self, widget, name, *values, **kwargs):
+        self.checkParams(widget, name, *values, **kwargs)
+        self.checkInvalidParam(widget, name, '',
+                errmsg='expected integer but got ""')
+        self.checkInvalidParam(widget, name, '10p',
+                errmsg='expected integer but got "10p"')
+        self.checkInvalidParam(widget, name, 3.2,
+                errmsg='expected integer but got "3.2"')
+
+    def checkFloatParam(self, widget, name, *values, conv=float, **kwargs):
+        for value in values:
+            self.checkParam(widget, name, value, conv=conv, **kwargs)
+        self.checkInvalidParam(widget, name, '',
+                errmsg='expected floating-point number but got ""')
+        self.checkInvalidParam(widget, name, 'spam',
+                errmsg='expected floating-point number but got "spam"')
+
+    def checkBooleanParam(self, widget, name):
+        for value in (False, 0, 'false', 'no', 'off'):
+            self.checkParam(widget, name, value, expected=0)
+        for value in (True, 1, 'true', 'yes', 'on'):
+            self.checkParam(widget, name, value, expected=1)
+        self.checkInvalidParam(widget, name, '',
+                errmsg='expected boolean value but got ""')
+        self.checkInvalidParam(widget, name, 'spam',
+                errmsg='expected boolean value but got "spam"')
+
+    def checkColorParam(self, widget, name, *, allow_empty=None, **kwargs):
+        self.checkParams(widget, name,
+                         '#ff0000', '#00ff00', '#0000ff', '#123456',
+                         'red', 'green', 'blue', 'white', 'black', 'grey',
+                         **kwargs)
+        self.checkInvalidParam(widget, name, 'spam',
+                errmsg='unknown color name "spam"')
+
+    def checkCursorParam(self, widget, name, **kwargs):
+        self.checkParams(widget, name, 'arrow', 'watch', 'cross', '',**kwargs)
+        if tcl_version >= (8, 5):
+            self.checkParam(widget, name, 'none')
+        self.checkInvalidParam(widget, name, 'spam',
+                errmsg='bad cursor spec "spam"')
+
+    def checkCommandParam(self, widget, name):
+        def command(*args):
+            pass
+        widget[name] = command
+        self.assertTrue(widget[name])
+        self.checkParams(widget, name, '')
+
+    def checkEnumParam(self, widget, name, *values, errmsg=None, **kwargs):
+        self.checkParams(widget, name, *values, **kwargs)
+        if errmsg is None:
+            errmsg2 = ' %s "{}": must be %s%s or %s' % (
+                    name,
+                    ', '.join(values[:-1]),
+                    ',' if len(values) > 2 else '',
+                    values[-1])
+            self.checkInvalidParam(widget, name, '',
+                                   errmsg='ambiguous' + errmsg2)
+            errmsg = 'bad' + errmsg2
+        self.checkInvalidParam(widget, name, 'spam', errmsg=errmsg)
+
+    def checkPixelsParam(self, widget, name, *values,
+                         conv=None, keep_orig=True, **kwargs):
+        if conv is None:
+            conv = self._conv_pixels
+        for value in values:
+            expected = _sentinel
+            conv1 = conv
+            if isinstance(value, str):
+                if conv1 and conv1 is not str:
+                    expected = pixels_conv(value) * self.scaling
+                    conv1 = round
+            self.checkParam(widget, name, value, expected=expected,
+                            conv=conv1, **kwargs)
+        self.checkInvalidParam(widget, name, '6x',
+                errmsg='bad screen distance "6x"', keep_orig=keep_orig)
+        self.checkInvalidParam(widget, name, 'spam',
+                errmsg='bad screen distance "spam"', keep_orig=keep_orig)
+
+    def checkReliefParam(self, widget, name):
+        self.checkParams(widget, name,
+                         'flat', 'groove', 'raised', 'ridge', 'solid', 'sunken')
+        errmsg='bad relief "spam": must be '\
+               'flat, groove, raised, ridge, solid, or sunken'
+        if tcl_version < (8, 6):
+            errmsg = None
+        self.checkInvalidParam(widget, name, 'spam',
+                errmsg=errmsg)
+
+    def checkImageParam(self, widget, name):
+        image = tkinter.PhotoImage('image1')
+        self.checkParam(widget, name, image, conv=str)
+        self.checkInvalidParam(widget, name, 'spam',
+                errmsg='image "spam" doesn\'t exist')
+        widget[name] = ''
+
+    def checkVariableParam(self, widget, name, var):
+        self.checkParam(widget, name, var, conv=str)
+
+
+class StandardOptionsTests:
+    STANDARD_OPTIONS = (
+        'activebackground', 'activeborderwidth', 'activeforeground', 'anchor',
+        'background', 'bitmap', 'borderwidth', 'compound', 'cursor',
+        'disabledforeground', 'exportselection', 'font', 'foreground',
+        'highlightbackground', 'highlightcolor', 'highlightthickness',
+        'image', 'insertbackground', 'insertborderwidth',
+        'insertofftime', 'insertontime', 'insertwidth',
+        'jump', 'justify', 'orient', 'padx', 'pady', 'relief',
+        'repeatdelay', 'repeatinterval',
+        'selectbackground', 'selectborderwidth', 'selectforeground',
+        'setgrid', 'takefocus', 'text', 'textvariable', 'troughcolor',
+        'underline', 'wraplength', 'xscrollcommand', 'yscrollcommand',
+    )
+
+    def test_activebackground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'activebackground')
+
+    def test_activeborderwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'activeborderwidth',
+                              0, 1.3, 2.9, 6, -2, '10p')
+
+    def test_activeforeground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'activeforeground')
+
+    def test_anchor(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'anchor',
+                'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw', 'center')
+
+    def test_background(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'background')
+        if 'bg' in self.OPTIONS:
+            self.checkColorParam(widget, 'bg')
+
+    def test_bitmap(self):
+        widget = self.create()
+        self.checkParam(widget, 'bitmap', 'questhead')
+        self.checkParam(widget, 'bitmap', 'gray50')
+        self.checkInvalidParam(widget, 'bitmap', 'spam',
+                errmsg='bitmap "spam" not defined')
+
+    def test_borderwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'borderwidth',
+                              0, 1.3, 2.6, 6, -2, '10p')
+        if 'bd' in self.OPTIONS:
+            self.checkPixelsParam(widget, 'bd', 0, 1.3, 2.6, 6, -2, '10p')
+
+    def test_compound(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'compound',
+                'bottom', 'center', 'left', 'none', 'right', 'top')
+
+    def test_cursor(self):
+        widget = self.create()
+        self.checkCursorParam(widget, 'cursor')
+
+    def test_disabledforeground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'disabledforeground')
+
+    def test_exportselection(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'exportselection')
+
+    def test_font(self):
+        widget = self.create()
+        self.checkParam(widget, 'font',
+                        '-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*')
+        self.checkInvalidParam(widget, 'font', '',
+                               errmsg='font "" doesn\'t exist')
+
+    def test_foreground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'foreground')
+        if 'fg' in self.OPTIONS:
+            self.checkColorParam(widget, 'fg')
+
+    def test_highlightbackground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'highlightbackground')
+
+    def test_highlightcolor(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'highlightcolor')
+
+    def test_highlightthickness(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'highlightthickness',
+                              0, 1.3, 2.6, 6, '10p')
+        self.checkParam(widget, 'highlightthickness', -2, expected=0,
+                        conv=self._conv_pixels)
+
+    def test_image(self):
+        widget = self.create()
+        self.checkImageParam(widget, 'image')
+
+    def test_insertbackground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'insertbackground')
+
+    def test_insertborderwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'insertborderwidth',
+                              0, 1.3, 2.6, 6, -2, '10p')
+
+    def test_insertofftime(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'insertofftime', 100)
+
+    def test_insertontime(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'insertontime', 100)
+
+    def test_insertwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'insertwidth', 1.3, 2.6, -2, '10p')
+
+    def test_jump(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'jump')
+
+    def test_justify(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'justify', 'left', 'right', 'center',
+                errmsg='bad justification "{}": must be '
+                       'left, right, or center')
+        self.checkInvalidParam(widget, 'justify', '',
+                errmsg='ambiguous justification "": must be '
+                       'left, right, or center')
+
+    def test_orient(self):
+        widget = self.create()
+        self.assertEqual(str(widget['orient']), self.default_orient)
+        self.checkEnumParam(widget, 'orient', 'horizontal', 'vertical')
+
+    def test_padx(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'padx', 3, 4.4, 5.6, -2, '12m',
+                              conv=self._conv_pad_pixels)
+
+    def test_pady(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'pady', 3, 4.4, 5.6, -2, '12m',
+                              conv=self._conv_pad_pixels)
+
+    def test_relief(self):
+        widget = self.create()
+        self.checkReliefParam(widget, 'relief')
+
+    def test_repeatdelay(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'repeatdelay', -500, 500)
+
+    def test_repeatinterval(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'repeatinterval', -500, 500)
+
+    def test_selectbackground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'selectbackground')
+
+    def test_selectborderwidth(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'selectborderwidth', 1.3, 2.6, -2, '10p')
+
+    def test_selectforeground(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'selectforeground')
+
+    def test_setgrid(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'setgrid')
+
+    def test_state(self):
+        widget = self.create()
+        self.checkEnumParam(widget, 'state', 'active', 'disabled', 'normal')
+
+    def test_takefocus(self):
+        widget = self.create()
+        self.checkParams(widget, 'takefocus', '0', '1', '')
+
+    def test_text(self):
+        widget = self.create()
+        self.checkParams(widget, 'text', '', 'any string')
+
+    def test_textvariable(self):
+        widget = self.create()
+        var = tkinter.StringVar()
+        self.checkVariableParam(widget, 'textvariable', var)
+
+    def test_troughcolor(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'troughcolor')
+
+    def test_underline(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'underline', 0, 1, 10)
+
+    def test_wraplength(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'wraplength', 100)
+
+    def test_xscrollcommand(self):
+        widget = self.create()
+        self.checkCommandParam(widget, 'xscrollcommand')
+
+    def test_yscrollcommand(self):
+        widget = self.create()
+        self.checkCommandParam(widget, 'yscrollcommand')
+
+    # non-standard but common options
+
+    def test_command(self):
+        widget = self.create()
+        self.checkCommandParam(widget, 'command')
+
+    def test_indicatoron(self):
+        widget = self.create()
+        self.checkBooleanParam(widget, 'indicatoron')
+
+    def test_offrelief(self):
+        widget = self.create()
+        self.checkReliefParam(widget, 'offrelief')
+
+    def test_overrelief(self):
+        widget = self.create()
+        self.checkReliefParam(widget, 'overrelief')
+
+    def test_selectcolor(self):
+        widget = self.create()
+        self.checkColorParam(widget, 'selectcolor')
+
+    def test_selectimage(self):
+        widget = self.create()
+        self.checkImageParam(widget, 'selectimage')
+
+    @requires_tcl(8, 5)
+    def test_tristateimage(self):
+        widget = self.create()
+        self.checkImageParam(widget, 'tristateimage')
+
+    @requires_tcl(8, 5)
+    def test_tristatevalue(self):
+        widget = self.create()
+        self.checkParam(widget, 'tristatevalue', 'unknowable')
+
+    def test_variable(self):
+        widget = self.create()
+        var = tkinter.DoubleVar()
+        self.checkVariableParam(widget, 'variable', var)
+
+
+class IntegerSizeTests:
+    def test_height(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'height', 100, -100, 0)
+
+    def test_width(self):
+        widget = self.create()
+        self.checkIntegerParam(widget, 'width', 402, -402, 0)
+
+
+class PixelSizeTests:
+    def test_height(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'height', 100, 101.2, 102.6, -100, 0, '3c')
+
+    def test_width(self):
+        widget = self.create()
+        self.checkPixelsParam(widget, 'width', 402, 403.4, 404.6, -402, 0, '5i')
+
+
+def add_standard_options(*source_classes):
+    # This decorator adds test_xxx methods from source classes for every xxx
+    # option in the OPTIONS class attribute if they are not defined explicitly.
+    def decorator(cls):
+        for option in cls.OPTIONS:
+            methodname = 'test_' + option
+            if not hasattr(cls, methodname):
+                for source_class in source_classes:
+                    if hasattr(source_class, methodname):
+                        setattr(cls, methodname,
+                                getattr(source_class, methodname))
+                        break
+                else:
+                    def test(self, option=option):
+                        widget = self.create()
+                        widget[option]
+                        raise AssertionError('Option "%s" is not tested in %s' %
+                                             (option, cls.__name__))
+                    test.__name__ = methodname
+                    setattr(cls, methodname, test)
+        return cls
+    return decorator
diff --git a/Lib/traceback.py b/Lib/traceback.py
index d5b3752..3b2cae7 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -89,7 +89,7 @@
     print_list(extract_tb(tb, limit=limit), file=file)
 
 def format_tb(tb, limit=None):
-    """A shorthand for 'format_list(extract_tb(tb, limit))."""
+    """A shorthand for 'format_list(extract_tb(tb, limit))'."""
     return format_list(extract_tb(tb, limit=limit))
 
 def extract_tb(tb, limit=None):
diff --git a/Lib/types.py b/Lib/types.py
index b0bbfc1..7e4fec2 100644
--- a/Lib/types.py
+++ b/Lib/types.py
@@ -117,7 +117,7 @@
         self.fset = fset
         self.fdel = fdel
         # next two lines make DynamicClassAttribute act the same as property
-        self.__doc__ = doc or fget.__doc__ or self.__doc__
+        self.__doc__ = doc or fget.__doc__
         self.overwrite_doc = doc is None
         # support for abstract methods
         self.__isabstractmethod__ = bool(getattr(fget, '__isabstractmethod__', False))
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py
index ad89cd0..e872fcc 100644
--- a/Lib/unittest/loader.py
+++ b/Lib/unittest/loader.py
@@ -276,8 +276,8 @@
                     yield _make_failed_import_test(name, self.suiteClass)
                 else:
                     mod_file = os.path.abspath(getattr(module, '__file__', full_path))
-                    realpath = _jython_aware_splitext(mod_file)
-                    fullpath_noext = _jython_aware_splitext(full_path)
+                    realpath = _jython_aware_splitext(os.path.realpath(mod_file))
+                    fullpath_noext = _jython_aware_splitext(os.path.realpath(full_path))
                     if realpath.lower() != fullpath_noext.lower():
                         module_dir = os.path.dirname(realpath)
                         mod_name = _jython_aware_splitext(os.path.basename(full_path))
diff --git a/Lib/unittest/test/test_discovery.py b/Lib/unittest/test/test_discovery.py
index 11ec9ed..d4eff40 100644
--- a/Lib/unittest/test/test_discovery.py
+++ b/Lib/unittest/test/test_discovery.py
@@ -366,7 +366,7 @@
         self.assertTrue(program.failfast)
         self.assertTrue(program.catchbreak)
 
-    def test_detect_module_clash(self):
+    def setup_module_clash(self):
         class Module(object):
             __file__ = 'bar/foo.py'
         sys.modules['foo'] = Module
@@ -393,7 +393,10 @@
         os.listdir = listdir
         os.path.isfile = isfile
         os.path.isdir = isdir
+        return full_path
 
+    def test_detect_module_clash(self):
+        full_path = self.setup_module_clash()
         loader = unittest.TestLoader()
 
         mod_dir = os.path.abspath('bar')
@@ -406,6 +409,25 @@
         )
         self.assertEqual(sys.path[0], full_path)
 
+    def test_module_symlink_ok(self):
+        full_path = self.setup_module_clash()
+
+        original_realpath = os.path.realpath
+
+        mod_dir = os.path.abspath('bar')
+        expected_dir = os.path.abspath('foo')
+
+        def cleanup():
+            os.path.realpath = original_realpath
+        self.addCleanup(cleanup)
+
+        def realpath(path):
+            if path == os.path.join(mod_dir, 'foo.py'):
+                return os.path.join(expected_dir, 'foo.py')
+            return path
+        os.path.realpath = realpath
+        loader = unittest.TestLoader()
+        loader.discover(start_dir='foo', pattern='foo.py')
 
     def test_discovery_from_dotted_path(self):
         loader = unittest.TestLoader()
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
index f184328..5a70613 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -345,7 +345,7 @@
     elif not hasattr(sys, 'base_prefix'):
         compatible = False
     if not compatible:
-        raise ValueError('This script is only for use with Python 3.3')
+        raise ValueError('This script is only for use with Python >= 3.3')
     else:
         import argparse
 
diff --git a/Lib/warnings.py b/Lib/warnings.py
index b05a08e..a427e35 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -1,9 +1,5 @@
 """Python part of the warnings subsystem."""
 
-# Note: function level imports should *not* be used
-# in this module as it may cause import lock deadlock.
-# See bug 683658.
-import linecache
 import sys
 
 __all__ = ["warn", "showwarning", "formatwarning", "filterwarnings",
@@ -21,6 +17,7 @@
 
 def formatwarning(message, category, filename, lineno, line=None):
     """Function to format a warning the standard way."""
+    import linecache
     s =  "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message)
     line = linecache.getline(filename, lineno) if line is None else line
     if line:
@@ -233,6 +230,7 @@
 
     # Prime the linecache for formatting, in case the
     # "file" is actually in a zipfile or something.
+    import linecache
     linecache.getlines(filename, module_globals)
 
     if action == "error":
diff --git a/Lib/wave.py b/Lib/wave.py
index 1c6380e..e723423 100644
--- a/Lib/wave.py
+++ b/Lib/wave.py
@@ -80,13 +80,19 @@
 
 WAVE_FORMAT_PCM = 0x0001
 
-_array_fmts = None, 'b', 'h', None, 'l'
+_array_fmts = None, 'b', 'h', None, 'i'
 
 import struct
 import sys
 from chunk import Chunk
 from collections import namedtuple
 
+def _byteswap3(data):
+    ba = bytearray(data)
+    ba[::3] = data[2::3]
+    ba[2::3] = data[::3]
+    return bytes(ba)
+
 _wave_params = namedtuple('_wave_params',
                      'nchannels sampwidth framerate nframes comptype compname')
 
@@ -237,13 +243,14 @@
             self._data_seek_needed = 0
         if nframes == 0:
             return b''
-        if self._sampwidth > 1 and sys.byteorder == 'big':
+        if self._sampwidth in (2, 4) and sys.byteorder == 'big':
             # unfortunately the fromfile() method does not take
             # something that only looks like a file object, so
             # we have to reach into the innards of the chunk object
             import array
             chunk = self._data_chunk
             data = array.array(_array_fmts[self._sampwidth])
+            assert data.itemsize == self._sampwidth
             nitems = nframes * self._nchannels
             if nitems * self._sampwidth > chunk.chunksize - chunk.size_read:
                 nitems = (chunk.chunksize - chunk.size_read) // self._sampwidth
@@ -257,6 +264,8 @@
             data = data.tobytes()
         else:
             data = self._data_chunk.read(nframes * self._framesize)
+            if self._sampwidth == 3 and sys.byteorder == 'big':
+                data = _byteswap3(data)
         if self._convert and data:
             data = self._convert(data)
         self._soundpos = self._soundpos + len(data) // (self._nchannels * self._sampwidth)
@@ -430,13 +439,16 @@
         nframes = len(data) // (self._sampwidth * self._nchannels)
         if self._convert:
             data = self._convert(data)
-        if self._sampwidth > 1 and sys.byteorder == 'big':
+        if self._sampwidth in (2, 4) and sys.byteorder == 'big':
             import array
             data = array.array(_array_fmts[self._sampwidth], data)
+            assert data.itemsize == self._sampwidth
             data.byteswap()
             data.tofile(self._file)
             self._datawritten = self._datawritten + len(data) * self._sampwidth
         else:
+            if self._sampwidth == 3 and sys.byteorder == 'big':
+                data = _byteswap3(data)
             self._file.write(data)
             self._datawritten = self._datawritten + len(data)
         self._nframeswritten = self._nframeswritten + nframes
diff --git a/Lib/wsgiref/simple_server.py b/Lib/wsgiref/simple_server.py
index a6015fb..cd9751a 100644
--- a/Lib/wsgiref/simple_server.py
+++ b/Lib/wsgiref/simple_server.py
@@ -155,3 +155,4 @@
     import webbrowser
     webbrowser.open('http://localhost:8000/xyz?abc')
     httpd.handle_request()  # serve one request, then exit
+    httpd.server_close()
diff --git a/Lib/xml/dom/minicompat.py b/Lib/xml/dom/minicompat.py
index 62725c6..1244500 100644
--- a/Lib/xml/dom/minicompat.py
+++ b/Lib/xml/dom/minicompat.py
@@ -1,4 +1,8 @@
-"""Python version compatibility support for minidom."""
+"""Python version compatibility support for minidom.
+
+This module contains internal implementation details and
+should not be imported; use xml.dom.minidom instead.
+"""
 
 # This module should only be imported using "import *".
 #
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index ff58347..ca2611d 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -211,8 +211,8 @@
     if len(data) != sizeEndCentDir64:
         return endrec
     sig, sz, create_version, read_version, disk_num, disk_dir, \
-            dircount, dircount2, dirsize, diroffset = \
-            struct.unpack(structEndArchive64, data)
+        dircount, dircount2, dirsize, diroffset = \
+        struct.unpack(structEndArchive64, data)
     if sig != stringEndArchive64:
         return endrec
 
@@ -292,26 +292,26 @@
     """Class with attributes describing each file in the ZIP archive."""
 
     __slots__ = (
-            'orig_filename',
-            'filename',
-            'date_time',
-            'compress_type',
-            'comment',
-            'extra',
-            'create_system',
-            'create_version',
-            'extract_version',
-            'reserved',
-            'flag_bits',
-            'volume',
-            'internal_attr',
-            'external_attr',
-            'header_offset',
-            'CRC',
-            'compress_size',
-            'file_size',
-            '_raw_time',
-        )
+        'orig_filename',
+        'filename',
+        'date_time',
+        'compress_type',
+        'comment',
+        'extra',
+        'create_system',
+        'create_version',
+        'extract_version',
+        'reserved',
+        'flag_bits',
+        'volume',
+        'internal_attr',
+        'external_attr',
+        'header_offset',
+        'CRC',
+        'compress_size',
+        'file_size',
+        '_raw_time',
+    )
 
     def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)):
         self.orig_filename = filename   # Original file name in archive
@@ -376,7 +376,7 @@
         if zip64:
             fmt = '<HHQQ'
             extra = extra + struct.pack(fmt,
-                    1, struct.calcsize(fmt)-4, file_size, compress_size)
+                                        1, struct.calcsize(fmt)-4, file_size, compress_size)
         if file_size > ZIP64_LIMIT or compress_size > ZIP64_LIMIT:
             if not zip64:
                 raise LargeZipFile("Filesize would require ZIP64 extensions")
@@ -395,10 +395,10 @@
         self.create_version = max(min_version, self.create_version)
         filename, flag_bits = self._encodeFilenameFlags()
         header = struct.pack(structFileHeader, stringFileHeader,
-                 self.extract_version, self.reserved, flag_bits,
-                 self.compress_type, dostime, dosdate, CRC,
-                 compress_size, file_size,
-                 len(filename), len(extra))
+                             self.extract_version, self.reserved, flag_bits,
+                             self.compress_type, dostime, dosdate, CRC,
+                             compress_size, file_size,
+                             len(filename), len(extra))
         return header + filename + extra
 
     def _encodeFilenameFlags(self):
@@ -511,7 +511,7 @@
     def _init(self):
         props = lzma._encode_filter_properties({'id': lzma.FILTER_LZMA1})
         self._comp = lzma.LZMACompressor(lzma.FORMAT_RAW, filters=[
-                lzma._decode_filter_properties(lzma.FILTER_LZMA1, props)
+            lzma._decode_filter_properties(lzma.FILTER_LZMA1, props)
         ])
         return struct.pack('<BBH', 9, 4, len(props)) + props
 
@@ -543,8 +543,8 @@
                 return b''
 
             self._decomp = lzma.LZMADecompressor(lzma.FORMAT_RAW, filters=[
-                    lzma._decode_filter_properties(lzma.FILTER_LZMA1,
-                            self._unconsumed[4:4 + psize])
+                lzma._decode_filter_properties(lzma.FILTER_LZMA1,
+                                               self._unconsumed[4:4 + psize])
             ])
             data = self._unconsumed[4 + psize:]
             del self._unconsumed
@@ -580,15 +580,15 @@
     elif compression == ZIP_DEFLATED:
         if not zlib:
             raise RuntimeError(
-                    "Compression requires the (missing) zlib module")
+                "Compression requires the (missing) zlib module")
     elif compression == ZIP_BZIP2:
         if not bz2:
             raise RuntimeError(
-                    "Compression requires the (missing) bz2 module")
+                "Compression requires the (missing) bz2 module")
     elif compression == ZIP_LZMA:
         if not lzma:
             raise RuntimeError(
-                    "Compression requires the (missing) lzma module")
+                "Compression requires the (missing) lzma module")
     else:
         raise RuntimeError("That compression method is not supported")
 
@@ -596,7 +596,7 @@
 def _get_compressor(compress_type):
     if compress_type == ZIP_DEFLATED:
         return zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
-             zlib.DEFLATED, -15)
+                                zlib.DEFLATED, -15)
     elif compress_type == ZIP_BZIP2:
         return bz2.BZ2Compressor()
     elif compress_type == ZIP_LZMA:
@@ -836,8 +836,8 @@
             n = max(n, self.MIN_READ_SIZE)
             data = self._decompressor.decompress(data, n)
             self._eof = (self._decompressor.eof or
-                    self._compress_left <= 0 and
-                    not self._decompressor.unconsumed_tail)
+                         self._compress_left <= 0 and
+                         not self._decompressor.unconsumed_tail)
             if self._eof:
                 data += self._decompressor.flush()
         else:
@@ -1016,8 +1016,8 @@
             x.comment = fp.read(centdir[_CD_COMMENT_LENGTH])
             x.header_offset = centdir[_CD_LOCAL_HEADER_OFFSET]
             (x.create_version, x.create_system, x.extract_version, x.reserved,
-                x.flag_bits, x.compress_type, t, d,
-                x.CRC, x.compress_size, x.file_size) = centdir[1:12]
+             x.flag_bits, x.compress_type, t, d,
+             x.CRC, x.compress_size, x.file_size) = centdir[1:12]
             if x.extract_version > MAX_EXTRACT_VERSION:
                 raise NotImplementedError("zip file version %.1f" %
                                           (x.extract_version / 10))
@@ -1025,7 +1025,7 @@
             # Convert date/time code to (year, month, day, hour, min, sec)
             x._raw_time = t
             x.date_time = ( (d>>9)+1980, (d>>5)&0xF, d&0x1F,
-                                     t>>11, (t>>5)&0x3F, (t&0x1F) * 2 )
+                            t>>11, (t>>5)&0x3F, (t&0x1F) * 2 )
 
             x._decodeExtra()
             x.header_offset = x.header_offset + concat
@@ -1103,7 +1103,7 @@
         if len(comment) >= ZIP_MAX_COMMENT:
             if self.debug:
                 print('Archive comment is too long; truncating to %d bytes'
-                        % ZIP_MAX_COMMENT)
+                      % ZIP_MAX_COMMENT)
             comment = comment[:ZIP_MAX_COMMENT]
         self._comment = comment
         self._didModify = True
@@ -1121,7 +1121,7 @@
             raise TypeError("pwd: expected bytes, got %s" % type(pwd))
         if not self.fp:
             raise RuntimeError(
-                  "Attempt to read ZIP archive that was already closed")
+                "Attempt to read ZIP archive that was already closed")
 
         # Only open a new file for instances where we were not
         # given a file object in the constructor
@@ -1294,7 +1294,7 @@
             raise RuntimeError('write() requires mode "w" or "a"')
         if not self.fp:
             raise RuntimeError(
-                  "Attempt to write ZIP archive that was already closed")
+                "Attempt to write ZIP archive that was already closed")
         _check_compression(zinfo.compress_type)
         if zinfo.file_size > ZIP64_LIMIT:
             if not self._allowZip64:
@@ -1302,14 +1302,14 @@
         if zinfo.header_offset > ZIP64_LIMIT:
             if not self._allowZip64:
                 raise LargeZipFile(
-                      "Zipfile size would require ZIP64 extensions")
+                    "Zipfile size would require ZIP64 extensions")
 
     def write(self, filename, arcname=None, compress_type=None):
         """Put the bytes from filename into the archive under the name
         arcname."""
         if not self.fp:
             raise RuntimeError(
-                  "Attempt to write to ZIP archive that was already closed")
+                "Attempt to write to ZIP archive that was already closed")
 
         st = os.stat(filename)
         isdir = stat.S_ISDIR(st.st_mode)
@@ -1356,7 +1356,7 @@
             zinfo.compress_size = compress_size = 0
             # Compressed size can be larger than uncompressed size
             zip64 = self._allowZip64 and \
-                    zinfo.file_size * 1.05 > ZIP64_LIMIT
+                zinfo.file_size * 1.05 > ZIP64_LIMIT
             self.fp.write(zinfo.FileHeader(zip64))
             file_size = 0
             while 1:
@@ -1410,7 +1410,7 @@
 
         if not self.fp:
             raise RuntimeError(
-                  "Attempt to write to ZIP archive that was already closed")
+                "Attempt to write to ZIP archive that was already closed")
 
         zinfo.file_size = len(data)            # Uncompressed size
         zinfo.header_offset = self.fp.tell()    # Start of header data
@@ -1430,7 +1430,7 @@
         else:
             zinfo.compress_size = zinfo.file_size
         zip64 = zinfo.file_size > ZIP64_LIMIT or \
-                zinfo.compress_size > ZIP64_LIMIT
+            zinfo.compress_size > ZIP64_LIMIT
         if zip64 and not self._allowZip64:
             raise LargeZipFile("Filesize would require ZIP64 extensions")
         self.fp.write(zinfo.FileHeader(zip64))
@@ -1439,7 +1439,7 @@
             # Write CRC and file sizes after the file data
             fmt = '<LQQ' if zip64 else '<LLL'
             self.fp.write(struct.pack(fmt, zinfo.CRC, zinfo.compress_size,
-                  zinfo.file_size))
+                                      zinfo.file_size))
         self.fp.flush()
         self.filelist.append(zinfo)
         self.NameToInfo[zinfo.filename] = zinfo
@@ -1465,7 +1465,7 @@
                     dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
                     extra = []
                     if zinfo.file_size > ZIP64_LIMIT \
-                            or zinfo.compress_size > ZIP64_LIMIT:
+                       or zinfo.compress_size > ZIP64_LIMIT:
                         extra.append(zinfo.file_size)
                         extra.append(zinfo.compress_size)
                         file_size = 0xffffffff
@@ -1485,8 +1485,8 @@
                     if extra:
                         # Append a ZIP64 field to the extra's
                         extra_data = struct.pack(
-                                '<HH' + 'Q'*len(extra),
-                                1, 8*len(extra), *extra) + extra_data
+                            '<HH' + 'Q'*len(extra),
+                            1, 8*len(extra), *extra) + extra_data
 
                         min_version = ZIP64_VERSION
 
@@ -1500,21 +1500,21 @@
                     try:
                         filename, flag_bits = zinfo._encodeFilenameFlags()
                         centdir = struct.pack(structCentralDir,
-                            stringCentralDir, create_version,
-                            zinfo.create_system, extract_version, zinfo.reserved,
-                            flag_bits, zinfo.compress_type, dostime, dosdate,
-                            zinfo.CRC, compress_size, file_size,
-                            len(filename), len(extra_data), len(zinfo.comment),
-                            0, zinfo.internal_attr, zinfo.external_attr,
-                            header_offset)
+                                              stringCentralDir, create_version,
+                                              zinfo.create_system, extract_version, zinfo.reserved,
+                                              flag_bits, zinfo.compress_type, dostime, dosdate,
+                                              zinfo.CRC, compress_size, file_size,
+                                              len(filename), len(extra_data), len(zinfo.comment),
+                                              0, zinfo.internal_attr, zinfo.external_attr,
+                                              header_offset)
                     except DeprecationWarning:
                         print((structCentralDir, stringCentralDir, create_version,
-                            zinfo.create_system, extract_version, zinfo.reserved,
-                            zinfo.flag_bits, zinfo.compress_type, dostime, dosdate,
-                            zinfo.CRC, compress_size, file_size,
-                            len(zinfo.filename), len(extra_data), len(zinfo.comment),
-                            0, zinfo.internal_attr, zinfo.external_attr,
-                            header_offset), file=sys.stderr)
+                               zinfo.create_system, extract_version, zinfo.reserved,
+                               zinfo.flag_bits, zinfo.compress_type, dostime, dosdate,
+                               zinfo.CRC, compress_size, file_size,
+                               len(zinfo.filename), len(extra_data), len(zinfo.comment),
+                               0, zinfo.internal_attr, zinfo.external_attr,
+                               header_offset), file=sys.stderr)
                         raise
                     self.fp.write(centdir)
                     self.fp.write(filename)
@@ -1531,22 +1531,22 @@
                     centDirSize > ZIP64_LIMIT):
                     # Need to write the ZIP64 end-of-archive records
                     zip64endrec = struct.pack(
-                            structEndArchive64, stringEndArchive64,
-                            44, 45, 45, 0, 0, centDirCount, centDirCount,
-                            centDirSize, centDirOffset)
+                        structEndArchive64, stringEndArchive64,
+                        44, 45, 45, 0, 0, centDirCount, centDirCount,
+                        centDirSize, centDirOffset)
                     self.fp.write(zip64endrec)
 
                     zip64locrec = struct.pack(
-                            structEndArchive64Locator,
-                            stringEndArchive64Locator, 0, pos2, 1)
+                        structEndArchive64Locator,
+                        stringEndArchive64Locator, 0, pos2, 1)
                     self.fp.write(zip64locrec)
                     centDirCount = min(centDirCount, 0xFFFF)
                     centDirSize = min(centDirSize, 0xFFFFFFFF)
                     centDirOffset = min(centDirOffset, 0xFFFFFFFF)
 
                 endrec = struct.pack(structEndArchive, stringEndArchive,
-                                    0, 0, centDirCount, centDirCount,
-                                    centDirSize, centDirOffset, len(self._comment))
+                                     0, 0, centDirCount, centDirCount,
+                                     centDirSize, centDirOffset, len(self._comment))
                 self.fp.write(endrec)
                 self.fp.write(self._comment)
                 self.fp.flush()
@@ -1566,7 +1566,7 @@
                          allowZip64=allowZip64)
         self._optimize = optimize
 
-    def writepy(self, pathname, basename=""):
+    def writepy(self, pathname, basename="", filterfunc=None):
         """Add all files from "pathname" to the ZIP archive.
 
         If pathname is a package directory, search the directory and
@@ -1577,7 +1577,14 @@
         archive.  Added modules are always module.pyo or module.pyc.
         This method will compile the module.py into module.pyc if
         necessary.
+        If filterfunc(pathname) is given, it is called with every argument.
+        When it is False, the file or directory is skipped.
         """
+        if filterfunc and not filterfunc(pathname):
+            if self.debug:
+                label = 'path' if os.path.isdir(pathname) else 'file'
+                print('%s "%s" skipped by filterfunc' % (label, pathname))
+            return
         dir, name = os.path.split(pathname)
         if os.path.isdir(pathname):
             initname = os.path.join(pathname, "__init__.py")
@@ -1602,10 +1609,15 @@
                     if os.path.isdir(path):
                         if os.path.isfile(os.path.join(path, "__init__.py")):
                             # This is a package directory, add it
-                            self.writepy(path, basename)  # Recursive call
+                            self.writepy(path, basename,
+                                         filterfunc=filterfunc)  # Recursive call
                     elif ext == ".py":
+                        if filterfunc and not filterfunc(path):
+                            if self.debug:
+                                print('file "%s" skipped by filterfunc' % path)
+                            continue
                         fname, arcname = self._get_codename(path[0:-3],
-                                         basename)
+                                                            basename)
                         if self.debug:
                             print("Adding", arcname)
                         self.write(fname, arcname)
@@ -1617,15 +1629,19 @@
                     path = os.path.join(pathname, filename)
                     root, ext = os.path.splitext(filename)
                     if ext == ".py":
+                        if filterfunc and not filterfunc(path):
+                            if self.debug:
+                                print('file "%s" skipped by filterfunc' % path)
+                            continue
                         fname, arcname = self._get_codename(path[0:-3],
-                                         basename)
+                                                            basename)
                         if self.debug:
                             print("Adding", arcname)
                         self.write(fname, arcname)
         else:
             if pathname[-3:] != ".py":
                 raise RuntimeError(
-                      'Files added with writepy() must end with ".py"')
+                    'Files added with writepy() must end with ".py"')
             fname, arcname = self._get_codename(pathname[0:-3], basename)
             if self.debug:
                 print("Adding file", arcname)
@@ -1764,7 +1780,7 @@
             elif os.path.isdir(path):
                 for nm in os.listdir(path):
                     addToZip(zf,
-                            os.path.join(path, nm), os.path.join(zippath, nm))
+                             os.path.join(path, nm), os.path.join(zippath, nm))
             # else: ignore
 
         with ZipFile(args[1], 'w', allowZip64=True) as zf:
diff --git a/Mac/BuildScript/README.txt b/Mac/BuildScript/README.txt
index 6c08dbe..74194a7 100644
--- a/Mac/BuildScript/README.txt
+++ b/Mac/BuildScript/README.txt
@@ -57,41 +57,41 @@
 
         * NCurses 5.9 (http://bugs.python.org/issue15037)
         * SQLite 3.7.13
-        * Tcl 8.5.14
-        * Tk 8.5.14
+        * Tcl 8.5.15
+        * Tk 8.5.15
         * XZ 5.0.3
 
     - uses system-supplied versions of third-party libraries
 
         * readline module links with Apple BSD editline (libedit)
 
-    - requires ActiveState Tcl/Tk 8.5.14 (or later) to be installed for building
+    - requires ActiveState Tcl/Tk 8.5.15 (or later) to be installed for building
 
         * Beginning with Python 3.4 alpha2, this installer now includes its own
-          private copy of Tcl and Tk 8.5.14 libraries and thus is no longer
+          builtin copy of Tcl and Tk 8.5.15 libraries and thus is no longer
           dependent on the buggy releases of Aqua Cocoa Tk 8.5 shipped with
           OS X 10.6 or on installing a newer third-party version of Tcl/Tk
           in /Library/Frameworks, such as from ActiveState.  Because this
           is a new feature, it should be considered somewhat experimental and
           subject to change prior to the final release of Python 3.4.  If it
           is necessary to fallback to using a third-party Tcl/Tk because of
-          a problem with the private Tcl/Tk, there is a backup version of
+          a problem with the builtin Tcl/Tk, there is a backup version of
           the _tkinter extension included which will dynamically link to
           Tcl and Tk frameworks in /Library/Frameworks as in previous releases.
           To enable (for all users of this Python 3.4)::
 
               sudo bash
               cd /Library/Frameworks/Python.framework/Versions/3.4
-              cd ./lib/python3.4/lib-dynload
-              cp -p _tkinter.so.framework _tkinter.so
+              cd ./lib/python3.4
+              cp -p ./lib-tkinter/library/_tkinter.so ./lib-dynload
               exit
 
-          To restore using Python's private versions of Tcl and Tk::
+          To restore using Python's builtin versions of Tcl and Tk::
 
               sudo bash
               cd /Library/Frameworks/Python.framework/Versions/3.4
-              cd ./lib/python3.4/lib-dynload
-              cp -p _tkinter.so.private _tkinter.so
+              cd ./lib/python3.4
+              cp -p ./lib-tkinter/builtin/_tkinter.so ./lib-dynload
               exit
 
     - recommended build environment:
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 19ed8e8..fd5d5c3 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -155,6 +155,7 @@
         '10.6': ('gcc-4.2', 'g++-4.2'),
         '10.7': ('clang', 'clang++'),
         '10.8': ('clang', 'clang++'),
+        '10.9': ('clang', 'clang++'),
 }
 
 CC, CXX = target_cc_map[DEPTARGET]
@@ -192,12 +193,12 @@
 
     LT_10_5 = bool(DEPTARGET < '10.5')
 
-    if DEPTARGET > '10.5':
+    if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)):
         result.extend([
           dict(
-              name="Tcl 8.5.14",
-              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tcl8.5.14-src.tar.gz",
-              checksum='44b50e58ab45dd272f6714dce2129123',
+              name="Tcl 8.5.15",
+              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tcl8.5.15-src.tar.gz",
+              checksum='f3df162f92c69b254079c4d0af7a690f',
               buildDir="unix",
               configure_pre=[
                     '--enable-shared',
@@ -211,9 +212,12 @@
                   },
               ),
           dict(
-              name="Tk 8.5.14",
-              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tk8.5.14-src.tar.gz",
-              checksum='a9c48921b3688020470cd3a6dd4e867d',
+              name="Tk 8.5.15",
+              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tk8.5.15-src.tar.gz",
+              checksum='55b8e33f903210a4e1c8bce0f820657f',
+              patches=[
+                  "issue19373_tk_8_5_15_source.patch",
+                   ],
               buildDir="unix",
               configure_pre=[
                     '--enable-aqua',
@@ -564,11 +568,11 @@
             ]
 
     # For 10.6+ builds, we build two versions of _tkinter:
-    #    - the traditional version (renamed to _tkinter.so.framework) linked
+    #    - the traditional version (renamed to _tkinter_library.so) linked
     #       with /Library/Frameworks/{Tcl,Tk}.framework
-    #    - the default version linked with our private copies of Tcl and Tk
-    if DEPTARGET > '10.5':
-        EXPECTED_SHARED_LIBS['_tkinter.so.framework'] = \
+    #    - the default version linked with our builtin copies of Tcl and Tk
+    if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)):
+        EXPECTED_SHARED_LIBS['_tkinter_library.so'] = \
             EXPECTED_SHARED_LIBS['_tkinter.so']
         EXPECTED_SHARED_LIBS['_tkinter.so'] = [
                 "/Library/Frameworks/Python.framework/Versions/%s/lib/libtcl%s.dylib"
@@ -796,8 +800,6 @@
 
     workDir = extractArchive(buildDir, sourceArchive)
     os.chdir(workDir)
-    if 'buildDir' in recipe:
-        os.chdir(recipe['buildDir'])
 
     for patch in recipe.get('patches', ()):
         if isinstance(patch, tuple):
@@ -824,6 +826,9 @@
         runCommand('sh %s' % shellQuote(fn))
         os.unlink(fn)
 
+    if 'buildDir' in recipe:
+        os.chdir(recipe['buildDir'])
+
     if configure is not None:
         configure_args = [
             "--prefix=/usr/local",
@@ -951,7 +956,7 @@
                "--with-universal-archs=%s "
                "%s "
                "LDFLAGS='-g -L%s/libraries/usr/local/lib' "
-               "OPT='-g -O3 -I%s/libraries/usr/local/include' 2>&1"%(
+               "CFLAGS='-g -I%s/libraries/usr/local/include' 2>&1"%(
         shellQuote(os.path.join(SRCDIR, 'configure')), shellQuote(SDKPATH),
         UNIVERSALARCHS,
         (' ', '--with-computed-gotos ')[PYTHON_3],
@@ -965,18 +970,18 @@
     # of Tcl and Cocoa Aqua Tk libs because the Apple-supplied Tk 8.5 is
     # out-of-date and has critical bugs.  Save the _tkinter.so that was
     # linked with /Library/Frameworks/{Tck,Tk}.framework and build
-    # another _tkinter.so linked with our private Tcl and Tk libs.
-    if DEPTARGET > '10.5':
+    # another _tkinter.so linked with our builtin Tcl and Tk libs.
+    if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)):
         runCommand("find build -name '_tkinter.so' "
-                        " -execdir mv '{}' '{}'.framework \;")
-        print("Running make to rebuild _tkinter")
+                        " -execdir mv '{}' _tkinter_library.so \;")
+        print("Running make to build builtin _tkinter")
         runCommand("make TCLTK_INCLUDES='-I%s/libraries/usr/local/include' "
                 "TCLTK_LIBS='-L%s/libraries/usr/local/lib -ltcl8.5 -ltk8.5'"%(
             shellQuote(WORKDIR)[1:-1],
             shellQuote(WORKDIR)[1:-1]))
-        # make a backup copy, just in case
+        # make a copy which will be moved to lib-tkinter later
         runCommand("find build -name '_tkinter.so' "
-                        " -execdir cp -p '{}' '{}'.private \;")
+                        " -execdir cp -p '{}' _tkinter_builtin.so \;")
 
     print("Running make install")
     runCommand("make install DESTDIR=%s"%(
@@ -998,11 +1003,31 @@
                 'Python.framework', 'Versions', getVersion(),
                 'lib'))))
 
+    path_to_lib = os.path.join(rootDir, 'Library', 'Frameworks',
+                                'Python.framework', 'Versions',
+                                version, 'lib', 'python%s'%(version,))
+
+    # If we made multiple versions of _tkinter, move them to
+    # their own directories under python lib.  This allows
+    # users to select which to import by manipulating sys.path
+    # directly or with PYTHONPATH.
+
+    if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)):
+        TKINTERS = ['builtin', 'library']
+        tkinter_moves = [('_tkinter_' + tkn + '.so',
+                             os.path.join(path_to_lib, 'lib-tkinter', tkn))
+                         for tkn in TKINTERS]
+        # Create the destination directories under lib-tkinter.
+        # The permissions and uid/gid will be fixed up next.
+        for tkm in tkinter_moves:
+            os.makedirs(tkm[1])
+
     print("Fix file modes")
     frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework')
     gid = grp.getgrnam('admin').gr_gid
 
     shared_lib_error = False
+    moves_list = []
     for dirpath, dirnames, filenames in os.walk(frmDir):
         for dn in dirnames:
             os.chmod(os.path.join(dirpath, dn), STAT_0o775)
@@ -1028,9 +1053,25 @@
                                 % (sl, p))
                         shared_lib_error = True
 
+            # If this is a _tkinter variant, move it to its own directory
+            # now that we have fixed its permissions and checked that it
+            # was linked properly.  The directory was created earlier.
+            # The files are moved after the entire tree has been walked
+            # since the shared library checking depends on the files
+            # having unique names.
+            if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)):
+                for tkm in tkinter_moves:
+                    if fn == tkm[0]:
+                        moves_list.append(
+                            (p, os.path.join(tkm[1], '_tkinter.so')))
+
     if shared_lib_error:
         fatal("Unexpected shared library errors.")
 
+    # Now do the moves.
+    for ml in moves_list:
+        shutil.move(ml[0], ml[1])
+
     if PYTHON_3:
         LDVERSION=None
         VERSION=None
@@ -1060,10 +1101,6 @@
     include_path = '-I%s/libraries/usr/local/include' % (WORKDIR,)
     lib_path = '-L%s/libraries/usr/local/lib' % (WORKDIR,)
 
-    path_to_lib = os.path.join(rootDir, 'Library', 'Frameworks',
-                                'Python.framework', 'Versions',
-                                version, 'lib', 'python%s'%(version,))
-
     # fix Makefile
     path = os.path.join(path_to_lib, 'config' + config_suffix, 'Makefile')
     fp = open(path, 'r')
diff --git a/Mac/BuildScript/issue19373_tk_8_5_15_source.patch b/Mac/BuildScript/issue19373_tk_8_5_15_source.patch
new file mode 100644
index 0000000..de5d08e
--- /dev/null
+++ b/Mac/BuildScript/issue19373_tk_8_5_15_source.patch
@@ -0,0 +1,13 @@
+Issue #19373: Patch to Tk 8.5.15 to correct refresh problem on OS x 10.9.
+From upstream checkin https://core.tcl.tk/tk/info/5a5abf71f9
+
+--- tk8.5.15/macosx/tkMacOSXDraw.c	2013-09-16 09:41:21.000000000 -0700
++++ Tk_Source_Code-5a5abf71f9fdb0da/macosx/tkMacOSXDraw.c	2013-10-27 13:27:00.000000000 -0700
+@@ -1688,6 +1688,7 @@
+ {
+     if (dcPtr->context) {
+ 	CGContextSynchronize(dcPtr->context);
++	[[dcPtr->view window] setViewsNeedDisplay:YES];
+ 	[[dcPtr->view window] enableFlushWindow];
+ 	if (dcPtr->focusLocked) {
+ 	    [dcPtr->view unlockFocus];
diff --git a/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py b/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py
index d6803ba..8b8beb9 100644
--- a/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py
+++ b/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py
@@ -48,7 +48,7 @@
 # the interpreter in the framework, by following the symlink
 # exported in PYTHONEXECUTABLE.
 pyex = os.environ['PYTHONEXECUTABLE']
-sys.executable = os.path.join(os.path.dirname(pyex), os.readlink(pyex))
+sys.executable = os.path.join(sys.prefix, 'bin', 'python%d.%d'%(sys.version_info[:2]))
 
 # Remove any sys.path entries for the Resources dir in the IDLE.app bundle.
 p = pyex.partition('.app')
@@ -68,6 +68,8 @@
         break
 
 # Now it is safe to import idlelib.
+from idlelib import macosxSupport
+macosxSupport._appbundle = True
 from idlelib.PyShell import main
 if __name__ == '__main__':
     main()
diff --git a/Mac/Makefile.in b/Mac/Makefile.in
index 354c1fd..5cb664d 100644
--- a/Mac/Makefile.in
+++ b/Mac/Makefile.in
@@ -166,6 +166,10 @@
 	-test -d "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app" && rm -rf "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app"
 	/bin/cp -PR "$(srcdir)/IDLE/IDLE.app" "$(DESTDIR)$(PYTHONAPPSDIR)"
 	ln -sf "$(INSTALLED_PYTHONAPP)" "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/Python"
+ifneq ($(LIPO_32BIT_FLAGS),)
+	rm "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/Python"
+	lipo $(LIPO_32BIT_FLAGS) -output "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/Python" "$(BUILDPYTHON)"
+endif
 	sed -e "s!%prefix%!$(prefix)!g" -e 's!%exe%!$(PYTHONFRAMEWORK)!g' < "$(srcdir)/IDLE/IDLE.app/Contents/MacOS/IDLE" > "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/IDLE"
 	sed "s!%version%!`$(RUNSHARED) $(BUILDPYTHON) -c 'import platform; print(platform.python_version())'`!g" < "$(srcdir)/IDLE/IDLE.app/Contents/Info.plist" > "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/Info.plist"
 	if [ -f "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def" ]; then \
diff --git a/Mac/README b/Mac/README
index 901a324..61634e9 100644
--- a/Mac/README
+++ b/Mac/README
@@ -7,7 +7,7 @@
     Ronald Oussoren (2010-04),
     Ned Deily (2012-06)
 
-:Version: 3.3.0
+:Version: 3.4.0
 
 This document provides a quick overview of some Mac OS X specific features in
 the Python distribution.
@@ -99,6 +99,8 @@
 
   * ``intel``:	  ``i386``, ``x86_64``
 
+  * ``intel-32``: ``i386``
+
   * ``32-bit``:   ``ppc``, ``i386``
 
   * ``3-way``:	  ``i386``, ``x86_64``, ``ppc``
@@ -125,7 +127,7 @@
 
   * 10.7 and 10.8 SDKs with Xcode 4 support ``intel`` only
 
-The makefile for a framework build will also install ``python3.3-32``
+The makefile for a framework build will also install ``python3.4-32``
 binaries when the universal architecture includes at least one 32-bit
 architecture (that is, for all flavors but ``64-bit``).
 
@@ -149,7 +151,7 @@
 not automatically carry through to subprocesses launched by programs and tests
 under that Python.  If you want to ensure that Python interpreters launched in
 subprocesses also run in 32-bit-mode if the main interpreter does, use
-a ``python3.3-32`` binary and use the value of ``sys.executable`` as the
+a ``python3.4-32`` binary and use the value of ``sys.executable`` as the
 ``subprocess`` ``Popen`` executable value.
 
 
@@ -169,7 +171,7 @@
 
 A second reason for using frameworks is that they put Python-related items in
 only two places: "/Library/Framework/Python.framework" and 
-"/Applications/Python <VERSION>" where ``<VERSION>`` can be e.g. "3.3",
+"/Applications/Python <VERSION>" where ``<VERSION>`` can be e.g. "3.4",
 "2.7", etc.  This simplifies matters for users installing
 Python from a binary distribution if they want to get rid of it again. Moreover,
 due to the way frameworks work, a user without admin privileges can install a
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 1d7b7c3..eae8d75 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -688,6 +688,8 @@
 Modules/_testembed.o: $(srcdir)/Modules/_testembed.c
 	$(MAINCC) -c $(PY_CORE_CFLAGS) -o $@ $(srcdir)/Modules/_testembed.c
 
+Modules/_sre.o: $(srcdir)/Modules/_sre.c $(srcdir)/Modules/sre.h $(srcdir)/Modules/sre_constants.h $(srcdir)/Modules/sre_lib.h
+
 Modules/posixmodule.o: $(srcdir)/Modules/posixmodule.c $(srcdir)/Modules/posixmodule.h
 
 Modules/grpmodule.o: $(srcdir)/Modules/grpmodule.c $(srcdir)/Modules/posixmodule.h
@@ -1060,6 +1062,7 @@
 XMLLIBSUBDIRS=  xml xml/dom xml/etree xml/parsers xml/sax
 LIBSUBDIRS=	tkinter tkinter/test tkinter/test/test_tkinter \
 		tkinter/test/test_ttk site-packages test \
+		test/audiodata \
 		test/capath test/data \
 		test/cjkencodings test/decimaltestdata test/xmltestdata \
 		test/subprocessdata test/sndhdrdata test/support \
@@ -1084,15 +1087,19 @@
 		test/namespace_pkgs/project3/parent/child \
                 test/namespace_pkgs/module_and_namespace_package \
                 test/namespace_pkgs/module_and_namespace_package/a_test \
+		asyncio \
+		test/test_asyncio \
 		collections concurrent concurrent/futures encodings \
 		email email/mime test/test_email test/test_email/data \
+		ensurepip ensurepip/_bundled \
 		html json test/test_json http dbm xmlrpc \
 		sqlite3 sqlite3/test \
 		logging csv wsgiref urllib \
 		lib2to3 lib2to3/fixes lib2to3/pgen2 lib2to3/tests \
 		lib2to3/tests/data lib2to3/tests/data/fixers \
 		lib2to3/tests/data/fixers/myfixes \
-		ctypes ctypes/test ctypes/macholib idlelib idlelib/Icons \
+		ctypes ctypes/test ctypes/macholib \
+		idlelib idlelib/Icons idlelib/idle_test \
 		distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \
 		importlib test/test_importlib test/test_importlib/builtin \
 		test/test_importlib/extension test/test_importlib/frozen \
diff --git a/Misc/ACKS b/Misc/ACKS
index bad2c51..34fac02 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -209,6 +209,7 @@
 Matej Cepl
 Carl Cerecke
 Octavian Cerna
+Dave Chambers
 Pascal Chambon
 John Chandler
 Hye-Shik Chang
@@ -327,6 +328,7 @@
 John DuBois
 Paul Dubois
 Jacques Ducasse
+Andrei Dorian Duma
 Graham Dumpleton
 Quinn Dunkan
 Robin Dunn
@@ -341,6 +343,7 @@
 Walter Dörwald
 Hans Eckardt
 Rodolpho Eckhardt
+Ulrich Eckhardt
 David Edelsohn
 John Edmonds
 Grant Edwards
@@ -506,6 +509,7 @@
 Rycharde Hawkes
 Ben Hayden
 Jochen Hayek
+Tim Heaney
 Henrik Heimbuerger
 Christian Heimes
 Thomas Heller
@@ -628,6 +632,7 @@
 Andreas Jung
 Tattoo Mabonzo K.
 Sarah K.
+Sunny K
 Bohuslav Kabrda
 Alexey Kachayev
 Bob Kahn
@@ -817,6 +822,7 @@
 Simon Mathieu
 Laura Matson
 Graham Matthews
+Martin Matusiak
 Dieter Maurer
 Daniel May
 Madison May
@@ -872,6 +878,7 @@
 Florian Mladitsch
 Doug Moen
 The Dragon De Monsyne
+Bastien Montagne
 Skip Montanaro
 Peter Moody
 Paul Moore
@@ -988,6 +995,7 @@
 Roumen Petrov
 Bjorn Pettersen
 Justin D. Pettit
+Esa Peuha
 Ronny Pfannschmidt
 Geoff Philbrick
 Gavrie Philipson
@@ -1001,6 +1009,7 @@
 François Pinard
 Tom Pinckney
 Zach Pincus
+Zero Piraeus
 Michael Piotrowski
 Antoine Pitrou
 Jean-François Piéronne
@@ -1010,6 +1019,7 @@
 Guilherme Polo
 Illia Polosukhin
 Michael Pomraning
+Martin Pool
 Iustin Pop
 Claudiu Popa
 John Popplewell
@@ -1025,6 +1035,7 @@
 Fernando Pérez
 Pierre Quentel
 Brian Quinlan
+Kevin Jing Qiu
 Anders Qvist
 Thomas Rachel
 Ram Rachum
@@ -1233,6 +1244,7 @@
 Serhiy Storchaka
 Ken Stox
 Dan Stromberg
+Donald Stufft
 Daniel Stutzbach
 Andreas Stührk
 Colin Su
@@ -1374,6 +1386,7 @@
 Felix Wiemann
 Gerry Wiener
 Frank Wierzbicki
+Santoso Wijaya
 Bryce "Zooko" Wilcox-O'Hearn
 Timothy Wild
 Jakub Wilk
diff --git a/Misc/NEWS b/Misc/NEWS
index ed2e3f4..16c0475 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -2,14 +2,309 @@
 Python News
 +++++++++++
 
-What's New in Python 3.4.0 Alpha 4?
-================================
+What's New in Python 3.4.0 Beta 1?
+==================================
 
-Projected release date: 2013-10-20
+Projected release date: 2013-11-24
 
 Core and Builtins
 -----------------
 
+- Issue #19466: Clear the frames of daemon threads earlier during the
+  Python shutdown to call objects destructors. So "unclosed file" resource
+  warnings are now corretly emitted for daemon threads.
+
+- Issue #19514: Deduplicate some _Py_IDENTIFIER declarations.
+  Patch by Andrei Dorian Duma.
+
+- Issue #17936: Fix O(n**2) behaviour when adding or removing many subclasses
+  of a given type.
+
+- Issue #19428: zipimport now handles errors when reading truncated or invalid
+  ZIP archive.
+
+- Issue #18408: Add a new PyFrame_FastToLocalsWithError() function to handle
+  exceptions when merging fast locals into f_locals of a frame.
+  PyEval_GetLocals() now raises an exception and return NULL on failure.
+
+- Issue #19369: Optimized the usage of __length_hint__().
+
+- Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
+  Python executable and not removed by the linker's optimizer.
+
+- Issue #19306: Add extra hints to the faulthandler module's stack
+  dumps that these are "upside down".
+
+Library
+-------
+
+- Issue #13674: Prevented time.strftime from crashing on Windows when given
+  a year before 1900 and a format of %y.
+
+- Issue #19406: implementation of the ensurepip module (part of PEP 453).
+  Patch by Donald Stufft and Nick Coghlan.
+
+- Issue #19544 and Issue #6286: Restore use of urllib over http allowing use
+  of http_proxy for Distutils upload command, a feature accidentally lost
+  in the rollback of distutils2.
+
+- Issue #19544 and Issue #7457: Restore the read_pkg_file method to
+  distutils.dist.DistributionMetadata accidentally removed in the undo of
+  distutils2.
+
+- Issue #16685: Added support for any bytes-like objects in the audioop module.
+  Removed support for strings.
+
+- Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton``
+  to socket module. Patch by Atsuo Ishimoto.
+
+- Issue #19261: Added support for writing 24-bit samples in the sunau module.
+
+- Issue #1097797: Added CP273 encoding, used on IBM mainframes in
+  Germany and Austria.  Mapping provided by Michael Bierenfeld.
+
+- Issue #1575020: Fixed support of 24-bit wave files on big-endian platforms.
+
+- Issue #19378: Fixed a number of cases in the dis module where the new
+  "file" parameter was not being honoured correctly
+
+- Issue #19378: Removed the "dis.Bytecode.show_info" method
+
+- Issue #19378: Renamed the "dis.Bytecode.display_code" method to
+  "dis.Bytecode.dis" and converted it to returning a string rather than
+  printing output.
+
+- Issue #19378: the "line_offset" parameter in the new "dis.get_instructions"
+  API has been renamed to "first_line" (and the default value and usage
+  changed accordingly). This should reduce confusion with the more common use
+  of "offset" in the dis docs to refer to bytecode offsets.
+
+- Issue #18678: Corrected spwd struct member names in spwd module:
+  sp_nam->sp_namp, and sp_pwd->sp_pwdp.  The old names are kept as extra
+  structseq members, for backward compatibility.
+
+- Issue #6157: Fixed tkinter.Text.debug().  tkinter.Text.bbox() now raises
+  TypeError instead of TclError on wrong number of arguments.  Original patch
+  by Guilherme Polo.
+
+- Issue #10197: Rework subprocess.get[status]output to use subprocess
+  functionality and thus to work on Windows. Patch by Nick Coghlan
+
+- Issue #6160: The bbox() method of tkinter.Spinbox now returns a tuple of
+  integers instead of a string.  Based on patch by Guilherme Polo.
+
+- Issue #19403: contextlib.redirect_stdout is now reentrant
+
+- Issue #19286: Directories in ``package_data`` are no longer added to
+  the filelist, preventing failure outlined in the ticket.
+
+- Issue #19480: HTMLParser now accepts all valid start-tag names as defined
+  by the HTML5 standard.
+
+- Issue #15114: The html.parser module now raises a DeprecationWarning when the
+  strict argument of HTMLParser or the HTMLParser.error method are used.
+
+- Issue #19410: Undo the special-casing removal of '' for
+  importlib.machinery.FileFinder.
+
+- Issue #19424: Fix the warnings module to accept filename containing surrogate
+  characters.
+
+- Issue #19435: Fix directory traversal attack on CGIHttpRequestHandler.
+
+- Issue #19227: Remove pthread_atfork() handler. The handler was added to
+  solve #18747 but has caused issues.
+
+- Issue #19420: Fix reference leak in module initalization code of
+  _hashopenssl.c
+
+- Issue #19329: Optimized compiling charsets in regular expressions.
+
+- Issue #19227: Try to fix deadlocks caused by re-seeding then OpenSSL
+  pseudo-random number generator on fork().
+
+- Issue #16037: HTTPMessage.readheaders() raises an HTTPException when more than
+  100 headers are read.  Adapted from patch by Jyrki Pulliainen.
+
+- Issue #16040: CVE-2013-1752: nntplib: Limit maximum line lengths to 2048 to
+  prevent readline() calls from consuming too much memory.  Patch by Jyrki
+  Pulliainen.
+
+- Issue #16041: CVE-2013-1752: poplib: Limit maximum line lengths to 2048 to
+  prevent readline() calls from consuming too much memory.  Patch by Jyrki
+  Pulliainen.
+
+- Issue #17997: Change behavior of ``ssl.match_hostname()`` to follow RFC 6125,
+  for security reasons.  It now doesn't match multiple wildcards nor wildcards
+  inside IDN fragments.
+
+- Issue #16039: CVE-2013-1752: Change use of readline in imaplib module to limit
+  line length.  Patch by Emil Lind.
+
+- Issue #19330: the unnecessary wrapper functions have been removed from the
+  implementations of the new contextlib.redirect_stdout and
+  contextlib.suppress context managers, which also ensures they provide
+  reasonable help() output on instances
+
+- Issue #19393: Fix symtable.symtable function to not be confused when there are
+  functions or classes named "top".
+
+- Issue #18685: Restore re performance to pre-PEP 393 levels.
+
+- Issue #19339: telnetlib module is now using time.monotonic() when available
+  to compute timeout.
+
+- Issue #19399: fix sporadic test_subprocess failure.
+
+- Issue #13234: Fix os.listdir to work with extended paths on Windows.
+  Patch by Santoso Wijaya.
+
+- Issue #19375: The site module adding a "site-python" directory to sys.path,
+  if it exists, is now deprecated.
+
+- Issue #19379: Lazily import linecache in the warnings module, to make
+  startup with warnings faster until a warning gets printed.
+
+- Issue #19288: Fixed the "in" operator of dbm.gnu databases for string
+  argument.  Original patch by Arfrever Frehtes Taifersar Arahesis.
+
+- Issue #19287: Fixed the "in" operator of dbm.ndbm databases for string
+  argument.  Original patch by Arfrever Frehtes Taifersar Arahesis.
+
+- Issue #19327: Fixed the working of regular expressions with too big charset.
+
+- Issue #17400: New 'is_global' attribute for ipaddress to tell if an address
+  is allocated by IANA for global or private networks.
+
+- Issue #19350: Increasing the test coverage of macurl2path. Patch by Colin
+  Williams.
+
+- Issue #19365: Optimized the parsing of long replacement string in re.sub*()
+  functions.
+
+- Issue #19352: Fix unittest discovery when a module can be reached
+  through several paths (e.g. under Debian/Ubuntu with virtualenv).
+
+- Issue #15207: Fix mimetypes to read from correct part of Windows registry
+  Original patch by Dave Chambers
+
+- Issue #16595: Add prlimit() to resource module.
+
+- Issue #19324: Expose Linux-specific constants in resource module.
+
+- Issue #17400: ipaddress should make it easy to identify rfc6598 addresses.
+
+- Load SSL's error strings in hashlib.
+
+- Issue #18527: Upgrade internal copy of zlib to 1.2.8.
+
+- Issue #19274: Add a filterfunc parameter to PyZipFile.writepy.
+
+- Issue #8964: fix platform._sys_version to handle IronPython 2.6+.
+  Patch by Martin Matusiak.
+
+- Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
+
+- Issue #18958: Improve error message for json.load(s) while passing a string
+  that starts with a UTF-8 BOM.
+
+- Issue #19307: Improve error message for json.load(s) while passing objects
+  of the wrong type.
+
+- Issue #16038: CVE-2013-1752: ftplib: Limit amount of data read by
+  limiting the call to readline().  Original patch by Michał
+  Jastrzębski and Giampaolo Rodola.
+
+- Issue #17087: Improved the repr for regular expression match objects.
+
+Tests
+-----
+
+- Issue #19440: Clean up test_capi by removing an unnecessary __future__
+  import, converting from test_main to unittest.main, and running the
+  _testcapi module tests as subTests of a unittest TestCase method.
+
+- Issue #19378: the main dis module tests are now run with both stdout
+  redirection *and* passing an explicit file parameter
+
+- Issue #19378: removed the not-actually-helpful assertInstructionMatches
+  and assertBytecodeExactlyMatches helpers from bytecode_helper
+
+- Issue #18702: All skipped tests now reported as skipped.
+
+- Issue #19439: interpreter embedding tests are now executed on Windows
+  (Patch by Zachary Ware)
+
+- Issue #19085: Added basic tests for all tkinter widget options.
+
+- Issue 19384: Fix test_py_compile for root user, patch by Claudiu Popa.
+
+Build
+-----
+
+- Issue #19356: Avoid using a C variabled named "_self", it's a reserved
+  word in some C compilers.
+
+- Issue #15792: Correct build options on Win64. Patch by Jeremy Kloth.
+
+- Issue #19373: Apply upstream change to Tk 8.5.15 fixing OS X 10.9
+  screen refresh problem for OS X installer build.
+
+Tools/Demos
+-----------
+
+- Issue #19390: Argument Clinic no longer accepts malformed Python
+  and C ids.
+
+What's New in Python 3.4.0 Alpha 4?
+===================================
+
+Release date: 2013-10-20
+
+Core and Builtins
+-----------------
+
+- Issue #19301: Give classes and functions that are explicitly marked global a
+  global qualname.
+
+- Issue #19279: UTF-7 decoder no longer produces illegal strings.
+
+- Issue #16612: Add "Argument Clinic", a compile-time preprocessor for
+  C files to generate argument parsing code.  (See PEP 436.)
+
+- Issue #18810: Shift stat calls in importlib.machinery.FileFinder such that
+  the code is optimistic that if something exists in a directory named exactly
+  like the possible package being searched for that it's in actuality a
+  directory.
+
+- Issue #18416: importlib.machinery.PathFinder now treats '' as the cwd and
+  importlib.machinery.FileFinder no longer special-cases '' to '.'. This leads
+  to modules imported from cwd to now possess an absolute file path for
+  __file__ (this does not affect modules specified by path on the CLI but it
+  does affect -m/runpy). It also allows FileFinder to be more consistent by not
+  having an edge case.
+
+- Issue #4555: All exported C symbols are now prefixed with either
+  "Py" or "_Py".
+
+- Issue #19219: Speed up marshal.loads(), and make pyc files slightly
+  (5% to 10%) smaller.
+
+- Issue #19221: Upgrade Unicode database to version 6.3.0.
+
+- Issue #16742: The result of the C callback PyOS_ReadlineFunctionPointer must
+  now be a string allocated by PyMem_RawMalloc() or PyMem_RawRealloc() (or NULL
+  if an error occurred), instead of a string allocated by PyMem_Malloc() or
+  PyMem_Realloc().
+
+- Issue #19199: Remove ``PyThreadState.tick_counter`` field
+
+- Fix macro expansion of _PyErr_OCCURRED(), and make sure to use it in at
+  least one place so as to avoid regressions.
+
+- Issue #19087: Improve bytearray allocation in order to allow cheap popping
+  of data at the front (slice deletion).
+
 - Issue #19014: memoryview.cast() is now allowed on zero-length views.
 
 - Issue #18690: memoryview is now automatically registered with
@@ -21,6 +316,79 @@
 Library
 -------
 
+- Issue #18235: Fix the sysconfig variables LDSHARED and BLDSHARED under AIX.
+  Patch by David Edelsohn.
+
+- Issue #18606: Add the new "statistics" module (PEP 450).  Contributed
+  by Steven D'Aprano.
+
+- Issue #12866: The audioop module now supports 24-bit samples.
+
+- Issue #19254: Provide an optimized Python implementation of pbkdf2_hmac.
+
+- Issues #19201, #19222, #19223: Add "x" mode (exclusive creation) in opening
+  file to bz2, gzip and lzma modules. Patches by Tim Heaney and Vajrasky Kok.
+
+- Fix a reference count leak in _sre.
+
+- Issue #19262: Initial check in of the 'asyncio' package (a.k.a. Tulip,
+  a.k.a. PEP 3156).  There are no docs yet, and the PEP is slightly
+  out of date with the code.  This module will have *provisional* status
+  in Python 3.4.
+
+- Issue #19276: Fixed the wave module on 64-bit big-endian platforms.
+
+- Issue #19266: Rename the new-in-3.4 ``contextlib.ignore`` context manager
+  to ``contextlib.suppress`` in order to be more consistent with existing
+  descriptions of that operation elsewhere in the language and standard
+  library documentation (Patch by Zero Piraeus).
+
+- Issue #18891: Completed the new email package (provisional) API additions
+  by adding new classes EmailMessage, MIMEPart, and ContentManager.
+
+- Issue #18281: Unused stat constants removed from `tarfile`.
+
+- Issue #18468: The re.split, re.findall, and re.sub functions and the group()
+  and groups() methods of match object now always return a string or a bytes
+  object.
+
+- Issue #18725: The textwrap module now supports truncating multiline text.
+
+- Issue #18776: atexit callbacks now display their full traceback when they
+  raise an exception.
+
+- Issue #17827: Add the missing documentation for ``codecs.encode`` and
+  ``codecs.decode``.
+
+- Issue #19218: Rename collections.abc to _collections_abc in order to
+  speed up interpreter start.
+
+- Issue #18582: Add 'pbkdf2_hmac' to the hashlib module. It implements PKCS#5
+  password-based key derivation functions with HMAC as pseudorandom function.
+
+- Issue #19131: The aifc module now correctly reads and writes sampwidth of
+  compressed streams.
+
+- Issue #19209: Remove import of copyreg from the os module to speed up
+  interpreter startup. stat_result and statvfs_result are now hard-coded to
+  reside in the os module.
+
+- Issue #19205: Don't import the 're' module in site and sysconfig module to
+  to speed up interpreter start.
+
+- Issue #9548: Add a minimal "_bootlocale" module that is imported by the
+  _io module instead of the full locale module.
+
+- Issue #18764: remove the 'print' alias for the PDB 'p' command so that it no
+  longer shadows the print function.
+
+- Issue #19158:  a rare race in BoundedSemaphore could allow .release() too
+  often.
+
+- Issue #15805: Add contextlib.redirect_stdout().
+
+- Issue #18716: Deprecate the formatter module.
+
 - Issue #18037: 2to3 now escapes '\u' and '\U' in native strings.
 
 - Issue #17839: base64.decodebytes and base64.encodebytes now accept any
@@ -55,18 +423,63 @@
 - Issue #4366: Fix building extensions on all platforms when --enable-shared
   is used.
 
+- Issue #19030: Fixed `inspect.getmembers` and `inspect.classify_class_attrs`
+  to attempt activating descriptors before falling back to a __dict__ search
+  for faulty descriptors.  `inspect.classify_class_attrs` no longer returns
+  Attributes whose home class is None.
+
+C API
+-----
+
+- Issue #1772673: The type of `char*` arguments now changed to `const char*`.
+
+- Issue #16129: Added a `Py_SetStandardStreamEncoding` pre-initialization API
+  to allow embedding applications like Blender to force a particular
+  encoding and error handler for the standard IO streams (initial patch by
+  Bastien Montagne)
+
+Tests
+-----
+
+- Issue #19275: Fix test_site on AMD64 Snow Leopard
+
+- Issue #14407: Fix unittest test discovery in test_concurrent_futures.
+
+- Issue #18919: Unified and extended tests for audio modules: aifc, sunau and
+  wave.
+
+- Issue #18714: Added tests for ``pdb.find_function()``.
+
+Documentation
+-------------
+
+- Issue #18758: Fixed and improved cross-references.
+
+- Issue #18972: Modernize email examples and use the argparse module in them.
+
 Build
 -----
 
 - Issue #19130: Correct PCbuild/readme.txt, Python 3.3 and 3.4 require VS 2010.
 
+- Issue #15663: Update OS X 10.6+ installer to use Tcl/Tk 8.5.15.
+
+- Issue #14499: Fix several problems with OS X universal build support:
+    1. ppc arch detection for extension module builds broke with Xcode 5
+    2. ppc arch detection in configure did not work on OS X 10.4
+    3. -sysroot and -arch flags were unnecessarily duplicated
+    4. there was no obvious way to configure an intel-32 only build.
+
+- Issue #19019: Change the OS X installer build script to use CFLAGS instead
+  of OPT for special build options.  By setting OPT, some compiler-specific
+  options like -fwrapv were overridden and thus not used, which could result
+  in broken interpreters when building with clang.
 
 What's New in Python 3.4.0 Alpha 3?
 ===================================
 
 Release date: 2013-09-29
 
-
 Core and Builtins
 -----------------
 
@@ -78,6 +491,9 @@
 Library
 -------
 
+- Issue #18929: `inspect.classify_class_attrs()` now correctly finds class
+  attributes returned by `dir()` that are located in the metaclass.
+
 - Issue #18950: Fix miscellaneous bugs in the sunau module.
   Au_read.readframes() now updates current file position and reads correct
   number of frames from multichannel stream.  Au_write.writeframesraw() now
@@ -145,7 +561,6 @@
   the local variables of all the stack frames referenced by a traceback
   object.
 
-
 Tests
 -----
 
@@ -191,6 +606,9 @@
 
 - Issue #18942: sys._debugmallocstats() output was damaged on Windows.
 
+- Issue #18780: %-formatting now prints value instead of str for
+  int subclasses when using %d, %i, and %u codes.
+
 - Issue #18571: Implementation of the PEP 446: file descriptors and file
   handles are now created non-inheritable; add functions
   os.get/set_inheritable(), os.get/set_handle_inheritable() and
@@ -358,7 +776,7 @@
 - Issue #18598: Tweak exception message for importlib.import_module() to
   include the module name when a key argument is missing.
 
-- Issue #19951: Fix docstring and use of _get_suppported_file_loaders() to
+- Issue #19151: Fix docstring and use of _get_supported_file_loaders() to
   reflect 2-tuples.
 
 - Issue #19152: Add ExtensionFileLoader.get_filename().
@@ -440,7 +858,6 @@
 - Issue #18922: Now The Lib/smtpd.py and Tools/i18n/msgfmt.py scripts write
   their version strings to stdout, and not to sderr.
 
-
 What's New in Python 3.4.0 Alpha 1?
 ===================================
 
@@ -610,7 +1027,6 @@
 
 - Issue #14439: Python now prints the traceback on runpy failure at startup.
 
-
 - Issue #17469: Fix _Py_GetAllocatedBlocks() and sys.getallocatedblocks()
   when running on valgrind.
 
@@ -624,9 +1040,242 @@
 - Issue #17323: The "[X refs, Y blocks]" printed by debug builds has been
   disabled by default.  It can be re-enabled with the `-X showrefcount` option.
 
+- Issue #17328: Fix possible refleak in dict.setdefault.
+
+- Issue #17275: Corrected class name in init error messages of the C version of
+  BufferedWriter and BufferedRandom.
+
+- Issue #7963: Fixed misleading error message that issued when object is
+  called without arguments.
+
+- Issue #8745: Small speed up zipimport on Windows. Patch by Catalin Iacob.
+
+- Issue #5308: Raise ValueError when marshalling too large object (a sequence
+  with size >= 2**31), instead of producing illegal marshal data.
+
+- Issue #12983: Bytes literals with invalid \x escape now raise a SyntaxError
+  and a full traceback including line number.
+
+- Issue #16967: In function definition, evaluate positional defaults before
+  keyword-only defaults.
+
+- Issue #17173: Remove uses of locale-dependent C functions (isalpha() etc.)
+  in the interpreter.
+
+- Issue #17137: When an Unicode string is resized, the internal wide character
+  string (wstr) format is now cleared.
+
+- Issue #17043: The unicode-internal decoder no longer read past the end of
+  input buffer.
+
+- Issue #17098: All modules now have __loader__ set even if they pre-exist the
+  bootstrapping of importlib.
+
+- Issue #16979: Fix error handling bugs in the unicode-escape-decode decoder.
+
+- Issue #16772: The base argument to the int constructor no longer accepts
+  floats, or other non-integer objects with an __int__ method.  Objects
+  with an __index__ method are now accepted.
+
+- Issue #10156: In the interpreter's initialization phase, unicode globals
+  are now initialized dynamically as needed.
+
+- Issue #16980: Fix processing of escaped non-ascii bytes in the
+  unicode-escape-decode decoder.
+
+- Issue #16975: Fix error handling bug in the escape-decode bytes decoder.
+
+- Issue #14850: Now a charmap decoder treats U+FFFE as "undefined mapping"
+  in any mapping, not only in a string.
+
+- Issue #16730: importlib.machinery.FileFinder now no longers raises an
+  exception when trying to populate its cache and it finds out the directory is
+  unreadable or has turned into a file. Reported and diagnosed by
+  David Pritchard.
+
+- Issue #16906: Fix a logic error that prevented most static strings from being
+  cleared.
+
+- Issue #11461: Fix the incremental UTF-16 decoder. Original patch by
+  Amaury Forgeot d'Arc.
+
+- Issue #16856: Fix a segmentation fault from calling repr() on a dict with
+  a key whose repr raise an exception.
+
+- Issue #16367: Fix FileIO.readall() on Windows for files larger than 2 GB.
+
+- Issue #16761: Calling int() with base argument only now raises TypeError.
+
+- Issue #16759: Support the full DWORD (unsigned long) range in Reg2Py
+  when retrieving a REG_DWORD value. This corrects functions like
+  winreg.QueryValueEx that may have been returning truncated values.
+
+- Issue #14420: Support the full DWORD (unsigned long) range in Py2Reg
+  when passed a REG_DWORD value. Fixes OverflowError in winreg.SetValueEx.
+
+- Issue #11939: Set the st_dev attribute of stat_result to allow Windows to
+  take advantage of the os.path.samefile/sameopenfile/samestat implementations
+  used by other platforms.
+
+- Issue #16772: The int() constructor's second argument (base) no longer
+  accepts non integer values.  Consistent with the behavior in Python 2.
+
+- Issue #14470: Remove w9xpopen support per PEP 11.
+
+- Issue #9856: Replace deprecation warning with raising TypeError
+  in object.__format__. Patch by Florent Xicluna.
+
+- Issue #16597: In buffered and text IO, call close() on the underlying stream
+  if invoking flush() fails.
+
+- Issue #16722: In the bytes() constructor, try to call __bytes__ on the
+  argument before __index__.
+
+- Issue #16421: loading multiple modules from one shared object is now
+  handled correctly (previously, the first module loaded from that file
+  was silently returned). Patch by Václav Šmilauer.
+
+- Issue #16602: When a weakref's target was part of a long deallocation
+  chain, the object could remain reachable through its weakref even though
+  its refcount had dropped to zero.
+
+- Issue #16495: Remove extraneous NULL encoding check from bytes_decode().
+
+- Issue #16619: Create NameConstant AST class to represent None, True, and False
+  literals. As a result, these constants are never loaded at runtime from
+  builtins.
+
+- Issue #16455: On FreeBSD and Solaris, if the locale is C, the
+  ASCII/surrogateescape codec is now used, instead of the locale encoding, to
+  decode the command line arguments. This change fixes inconsistencies with
+  os.fsencode() and os.fsdecode() because these operating systems announces an
+  ASCII locale encoding, whereas the ISO-8859-1 encoding is used in practice.
+
+- Issue #16562: Optimize dict equality testing.  Patch by Serhiy Storchaka.
+
+- Issue #16588: Silence unused-but-set warnings in Python/thread_pthread
+
+- Issue #16592: stringlib_bytes_join doesn't raise MemoryError on allocation
+  failure.
+
+- Issue #16546: Fix: ast.YieldFrom argument is now mandatory.
+
+- Issue #16514: Fix regression causing a traceback when sys.path[0] is None
+  (actually, any non-string or non-bytes type).
+
+- Issue #16306: Fix multiple error messages when unknown command line
+  parameters where passed to the interpreter.  Patch by Hieu Nguyen.
+
+- Issue #16215: Fix potential double memory free in str.replace().  Patch
+  by Serhiy Storchaka.
+
+- Issue #16290: A float return value from the __complex__ special method is no
+  longer accepted in the complex() constructor.
+
+- Issue #16416: On Mac OS X, operating system data are now always
+  encoded/decoded to/from UTF-8/surrogateescape, instead of the locale encoding
+  (which may be ASCII if no locale environment variable is set), to avoid
+  inconsistencies with os.fsencode() and os.fsdecode() functions which are
+  already using UTF-8/surrogateescape.
+
+- Issue #16453: Fix equality testing of dead weakref objects.
+
+- Issue #9535: Fix pending signals that have been received but not yet
+  handled by Python to not persist after os.fork() in the child process.
+
+- Issue #14794: Fix slice.indices to return correct results for huge values,
+  rather than raising OverflowError.
+
+- Issue #15001: fix segfault on "del sys.modules['__main__']". Patch by Victor
+  Stinner.
+
+- Issue #8271: the utf-8 decoder now outputs the correct number of U+FFFD
+  characters when used with the 'replace' error handler on invalid utf-8
+  sequences.  Patch by Serhiy Storchaka, tests by Ezio Melotti.
+
+- Issue #5765: Apply a hard recursion limit in the compiler instead of
+  blowing the stack and segfaulting. Initial patch by Andrea Griffini.
+
+- Issue #16402: When slicing a range, fix shadowing of exceptions from
+  __index__.
+
+- Issue #16336: fix input checking in the surrogatepass error handler.
+  Patch by Serhiy Storchaka.
+
+- Issue #8401: assigning an int to a bytearray slice (e.g. b[3:4] = 5) now
+  raises an error.
+
+- Issue #7317: Display full tracebacks when an error occurs asynchronously.
+  Patch by Alon Horev with update by Alexey Kachayev.
+
+- Issue #16309: Make PYTHONPATH="" behavior the same as if PYTHONPATH
+  not set at all.
+
+- Issue #10189: Improve the error reporting of SyntaxErrors related to global
+  and nonlocal statements.
+
+- Fix segfaults on setting __qualname__ on builtin types and attempting to
+  delete it on any type.
+
+- Issue #14625: Rewrite the UTF-32 decoder. It is now 3x to 4x faster. Patch
+  written by Serhiy Storchaka.
+
+- Issue #16345: Fix an infinite loop when ``fromkeys`` on a dict subclass
+  received a nonempty dict from the constructor.
+
+- Issue #16271: Fix strange bugs that resulted from __qualname__ appearing in a
+  class's __dict__ and on type.
+
+- Issue #12805: Make bytes.join and bytearray.join faster when the separator
+  is empty.  Patch by Serhiy Storchaka.
+
+- Issue #6074: Ensure cached bytecode files can always be updated by the
+  user that created them, even when the source file is read-only.
+
+- Issue #15958: bytes.join and bytearray.join now accept arbitrary buffer
+  objects.
+
+- Issue #14783: Improve int() docstring and switch docstrings for str(),
+  range(), and slice() to use multi-line signatures.
+
+- Issue #16160: Subclass support now works for types.SimpleNamespace.
+
+- Upgrade Unicode data (UCD) to version 6.2.
+
+- Issue #15379: Fix passing of non-BMP characters as integers for the charmap
+  decoder (already working as unicode strings).  Patch by Serhiy Storchaka.
+
+- Issue #15144: Fix possible integer overflow when handling pointers as integer
+  values, by using `Py_uintptr_t` instead of `size_t`.  Patch by Serhiy
+  Storchaka.
+
+- Issue #15965: Explicitly cast `AT_FDCWD` as (int).  Required on Solaris 10
+  (which defines `AT_FDCWD` as ``0xffd19553``), harmless on other platforms.
+
+- Issue #15839: Convert SystemErrors in `super()` to RuntimeErrors.
+
+- Issue #15448: Buffered IO now frees the buffer when closed, instead
+  of when deallocating.
+
+- Issue #15846: Fix SystemError which happened when using `ast.parse()` in an
+  exception handler on code with syntax errors.
+
+- Issue #15897: zipimport.c doesn't check return value of fseek().
+  Patch by Felipe Cruz.
+
+- Issue #15801: Make sure mappings passed to '%' formatting are actually
+  subscriptable.
+
+- Issue #15111: __import__ should propagate ImportError when raised as a
+  side-effect of a module triggered from using fromlist.
+
+- Issue #15022: Add pickle and comparison support to types.SimpleNamespace.
+
 Library
 -------
 
+- Issue #4331: Added functools.partialmethod (Initial patch by Alon Horev)
+
 - Issue #13461: Fix a crash in the TextIOWrapper.tell method on 64-bit
   platforms.  Patch by Yogesh Chaudhari.
 
@@ -774,7 +1423,6 @@
 - Issue #18357: add tests for dictview set difference.
   Patch by Fraser Tweedale.
 
-
 - importlib.abc.SourceLoader.get_source() no longer changes SyntaxError or
   UnicodeDecodeError into ImportError.
 
@@ -1055,468 +1703,6 @@
 
 - Implement PEP 435 "Adding an Enum type to the Python standard library".
 
-Tests
------
-
-- Issue #1666318: Add a test that shutil.copytree() retains directory
-  permissions.  Patch by Catherine Devlin.
-
-- Issue #18273: move the tests in Lib/test/json_tests to Lib/test/test_json
-  and make them discoverable by unittest.  Patch by Zachary Ware.
-
-- Fix a fcntl test case on KFreeBSD, Debian #708653 (Petr Salinger).
-
-- Issue #18396: Fix spurious test failure in test_signal on Windows when
-  faulthandler is enabled (Patch by Jeremy Kloth)
-
-- Issue #17046: Fix broken test_executable_without_cwd in test_subprocess.
-
-- Issue #15415: Add new temp_dir() and change_cwd() context managers to
-  test.support, and refactor temp_cwd() to use them.  Patch by Chris Jerdonek.
-
-- Issue #15494: test.support is now a package rather than a module (Initial
-  patch by Indra Talip)
-
-- Issue #17944: test_zipfile now discoverable and uses subclassing to
-  generate tests for different compression types.  Fixed a bug with skipping
-  some tests due to use of exhausted iterators.
-
-- Issue #18266: test_largefile now works with unittest test discovery and
-  supports running only selected tests.  Patch by Zachary Ware.
-
-- Issue #17767: test_locale now works with unittest test discovery.
-  Original patch by Zachary Ware.
-
-- Issue #18375: Assume --randomize when --randseed is used for running the
-  testsuite.
-
-- Issue #11185: Fix test_wait4 under AIX.  Patch by Sébastien Sablé.
-
-- Issue #18207: Fix test_ssl for some versions of OpenSSL that ignore seconds
-  in ASN1_TIME fields.
-
-- Issue #18094: test_uuid no more reports skipped tests as passed.
-
-- Issue #17992: Add timeouts to asyncore and asynchat tests so that they won't
-  accidentally hang.
-
-- Issue #17833: Fix test_gdb failures seen on machines where debug symbols
-  for glibc are available (seen on PPC64 Linux).
-
-- Issue #7855: Add tests for ctypes/winreg for issues found in IronPython.
-  Initial patch by Dino Viehland.
-
-- Issue #11078: test___all__ now checks for duplicates in __all__.
-  Initial patch by R. David Murray.
-
-- Issue #17712: Fix test_gdb failures on Ubuntu 13.04.
-
-- Issue #17835: Fix test_io when the default OS pipe buffer size is larger
-  than one million bytes.
-
-- Issue #17065: Use process-unique key for winreg tests to avoid failures if
-  test is run multiple times in parallel (eg: on a buildbot host).
-
-- Issue #12820: add tests for the xml.dom.minicompat module.
-  Patch by John Chandler and Phil Connell.
-
-- Issue #17691: test_univnewlines now works with unittest test discovery.
-  Patch by Zachary Ware.
-
-- Issue #17790: test_set now works with unittest test discovery.
-  Patch by Zachary Ware.
-
-- Issue #17789: test_random now works with unittest test discovery.
-  Patch by Zachary Ware.
-
-- Issue #17779: test_osx_env now works with unittest test discovery.
-  Patch by Zachary Ware.
-
-- Issue #17766: test_iterlen now works with unittest test discovery.
-  Patch by Zachary Ware.
-
-- Issue #17690: test_time now works with unittest test discovery.
-  Patch by Zachary Ware.
-
-- Issue #17692: test_sqlite now works with unittest test discovery.
-  Patch by Zachary Ware.
-
-- Issue #11995: test_pydoc doesn't import all sys.path modules anymore.
-
-Documentation
--------------
-
-- Issue #17701: Improving strftime documentation.
-
-- Issue #18440: Clarify that `hash()` can truncate the value returned from an
-  object's custom `__hash__()` method.
-
-- Issue #17844: Add links to encoders and decoders for bytes-to-bytes codecs.
-
-- Issue #14097: improve the "introduction" page of the tutorial.
-
-- Issue #17977: The documentation for the cadefault argument's default value
-  in urllib.request.urlopen() is fixed to match the code.
-
-- Issue #15940: Specify effect of locale on time functions.
-
-- Issue #6696: add documentation for the Profile objects, and improve
-  profile/cProfile docs.  Patch by Tom Pinckney.
-
-C-API
------
-
-- Issue #18351: Fix various issues in a function in importlib provided to help
-  PyImport_ExecCodeModuleWithPathnames() (and thus by extension PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx()).
-
-- Issue #9369: The types of `char*` arguments of PyObject_CallFunction() and
-  PyObject_CallMethod() now changed to `const char*`.  Based on patches by
-  Jörg Müller and Lars Buitinck.
-
-- Issue #17206: Py_CLEAR(), Py_DECREF(), Py_XINCREF() and Py_XDECREF() now
-  expand their arguments once instead of multiple times.  Patch written by Illia
-  Polosukhin.
-
-- Issue #17522: Add the PyGILState_Check() API.
-
-- Issue #17327: Add PyDict_SetDefault.
-
-IDLE
-----
-
-- Issue #18429: Format / Format Paragraph, now works when comment blocks
-  are selected. As with text blocks, this works best when the selection
-  only includes complete lines.
-
-- Issue #18226: Add docstrings and unittests for FormatParagraph.py.
-  Original patches by Todd Rovito and Phil Webster.
-
-- Issue #18279: Format - Strip trailing whitespace no longer marks a file as
-  changed when it has not been changed. This fix followed the addition of a
-  test file originally written by Phil Webster (the issue's main goal).
-
-- Issue #7136: In the Idle File menu, "New Window" is renamed "New File".
-  Patch by Tal Einat, Roget Serwy, and Todd Rovito.
-
-- Remove dead imports of imp.
-
-- Issue #18196: Avoid displaying spurious SystemExit tracebacks.
-
-- Issue #5492: Avoid traceback when exiting IDLE caused by a race condition.
-
-- Issue #17511: Keep IDLE find dialog open after clicking "Find Next".
-  Original patch by Sarah K.
-
-- Issue #18055: Move IDLE off of imp and on to importlib.
-
-- Issue #15392: Create a unittest framework for IDLE.
-  Initial patch by Rajagopalasarma Jayakrishnan.
-  See Lib/idlelib/idle_test/README.txt for how to run Idle tests.
-
-- Issue #14146: Highlight source line while debugging on Windows.
-
-- Issue #17838: Allow sys.stdin to be reassigned.
-
-- Issue #13495: Avoid loading the color delegator twice in IDLE.
-
-- Issue #17798: Allow IDLE to edit new files when specified on command line.
-
-- Issue #14735: Update IDLE docs to omit "Control-z on Windows".
-
-- Issue #17532: Always include Options menu for IDLE on OS X.
-  Patch by Guilherme Simões.
-
-Windows
--------
-
-- Issue #18569: The installer now adds .py to the PATHEXT variable when extensions
-  are registered. Patch by Paul Moore.
-
-Build
------
-
-- Issue #16067: Add description into MSI file to replace installer's
-  temporary name.
-
-- Issue #18257: Fix readlink usage in python-config.  Install the python
-  version again on Darwin.
-
-- Issue #18481: Add C coverage reporting with gcov and lcov. A new make target
-  "coverage-report" creates an instrumented Python build, runs unit tests
-  and creates a HTML. The report can be updated with "make coverage-lcov".
-
-- Issue #17845: Clarified the message printed when some module are not built.
-
-- Issue #18256: Compilation fix for recent AIX releases.  Patch by
-  David Edelsohn.
-
-- Issue #17547: In configure, explicitly pass -Wformat for the benefit for GCC
-  4.8.
-
-- Issue #15172: Document NASM 2.10+ as requirement for building OpenSSL 1.0.1
-  on Windows.
-
-Tools/Demos
------------
-
-- Issue #18817: Fix a resource warning in Lib/aifc.py demo.  Patch by
-  Vajrasky Kok.
-
-- Issue #18439: Make patchcheck work on Windows for ACKS, NEWS.
-
-- Issue #18448: Fix a typo in Tools/demo/eiffel.py.
-
-- Issue #18457: Fixed saving of formulas and complex numbers in
-  Tools/demo/ss1.py.
-
-- Issue #18449: Make Tools/demo/ss1.py work again on Python 3.  Patch by
-  Févry Thibault.
-
-- Issue #12990: The "Python Launcher" on OSX could not launch python scripts
-  that have paths that include wide characters.
-
-What's New in Python 3.3.1 release candidate 1?
-===============================================
-
-*Release date: 24-Mar-2013*
-
-Core and Builtins
------------------
-
-- Issue #17328: Fix possible refleak in dict.setdefault.
-
-- Issue #17275: Corrected class name in init error messages of the C version of
-  BufferedWriter and BufferedRandom.
-
-- Issue #7963: Fixed misleading error message that issued when object is
-  called without arguments.
-
-- Issue #8745: Small speed up zipimport on Windows. Patch by Catalin Iacob.
-
-- Issue #5308: Raise ValueError when marshalling too large object (a sequence
-  with size >= 2**31), instead of producing illegal marshal data.
-
-- Issue #12983: Bytes literals with invalid \x escape now raise a SyntaxError
-  and a full traceback including line number.
-
-- Issue #16967: In function definition, evaluate positional defaults before
-  keyword-only defaults.
-
-- Issue #17173: Remove uses of locale-dependent C functions (isalpha() etc.)
-  in the interpreter.
-
-- Issue #17137: When an Unicode string is resized, the internal wide character
-  string (wstr) format is now cleared.
-
-- Issue #17043: The unicode-internal decoder no longer read past the end of
-  input buffer.
-
-- Issue #17098: All modules now have __loader__ set even if they pre-exist the
-  bootstrapping of importlib.
-
-- Issue #16979: Fix error handling bugs in the unicode-escape-decode decoder.
-
-- Issue #16772: The base argument to the int constructor no longer accepts
-  floats, or other non-integer objects with an __int__ method.  Objects
-  with an __index__ method are now accepted.
-
-- Issue #10156: In the interpreter's initialization phase, unicode globals
-  are now initialized dynamically as needed.
-
-- Issue #16980: Fix processing of escaped non-ascii bytes in the
-  unicode-escape-decode decoder.
-
-- Issue #16975: Fix error handling bug in the escape-decode bytes decoder.
-
-- Issue #14850: Now a charmap decoder treats U+FFFE as "undefined mapping"
-  in any mapping, not only in a string.
-
-- Issue #16730: importlib.machinery.FileFinder now no longers raises an
-  exception when trying to populate its cache and it finds out the directory is
-  unreadable or has turned into a file. Reported and diagnosed by
-  David Pritchard.
-
-- Issue #16906: Fix a logic error that prevented most static strings from being
-  cleared.
-
-- Issue #11461: Fix the incremental UTF-16 decoder. Original patch by
-  Amaury Forgeot d'Arc.
-
-- Issue #16856: Fix a segmentation fault from calling repr() on a dict with
-  a key whose repr raise an exception.
-
-- Issue #16367: Fix FileIO.readall() on Windows for files larger than 2 GB.
-
-- Issue #16761: Calling int() with base argument only now raises TypeError.
-
-- Issue #16759: Support the full DWORD (unsigned long) range in Reg2Py
-  when retrieving a REG_DWORD value. This corrects functions like
-  winreg.QueryValueEx that may have been returning truncated values.
-
-- Issue #14420: Support the full DWORD (unsigned long) range in Py2Reg
-  when passed a REG_DWORD value. Fixes OverflowError in winreg.SetValueEx.
-
-- Issue #11939: Set the st_dev attribute of stat_result to allow Windows to
-  take advantage of the os.path.samefile/sameopenfile/samestat implementations
-  used by other platforms.
-
-- Issue #16772: The int() constructor's second argument (base) no longer
-  accepts non integer values.  Consistent with the behavior in Python 2.
-
-- Issue #14470: Remove w9xpopen support per PEP 11.
-
-- Issue #9856: Replace deprecation warning with raising TypeError
-  in object.__format__. Patch by Florent Xicluna.
-
-- Issue #16597: In buffered and text IO, call close() on the underlying stream
-  if invoking flush() fails.
-
-- Issue #16722: In the bytes() constructor, try to call __bytes__ on the
-  argument before __index__.
-
-- Issue #16421: loading multiple modules from one shared object is now
-  handled correctly (previously, the first module loaded from that file
-  was silently returned). Patch by Václav Šmilauer.
-
-- Issue #16602: When a weakref's target was part of a long deallocation
-  chain, the object could remain reachable through its weakref even though
-  its refcount had dropped to zero.
-
-- Issue #16495: Remove extraneous NULL encoding check from bytes_decode().
-
-- Issue #16619: Create NameConstant AST class to represent None, True, and False
-  literals. As a result, these constants are never loaded at runtime from
-  builtins.
-
-- Issue #16455: On FreeBSD and Solaris, if the locale is C, the
-  ASCII/surrogateescape codec is now used, instead of the locale encoding, to
-  decode the command line arguments. This change fixes inconsistencies with
-  os.fsencode() and os.fsdecode() because these operating systems announces an
-  ASCII locale encoding, whereas the ISO-8859-1 encoding is used in practice.
-
-- Issue #16562: Optimize dict equality testing.  Patch by Serhiy Storchaka.
-
-- Issue #16588: Silence unused-but-set warnings in Python/thread_pthread
-
-- Issue #16592: stringlib_bytes_join doesn't raise MemoryError on allocation
-  failure.
-
-- Issue #16546: Fix: ast.YieldFrom argument is now mandatory.
-
-- Issue #16514: Fix regression causing a traceback when sys.path[0] is None
-  (actually, any non-string or non-bytes type).
-
-- Issue #16306: Fix multiple error messages when unknown command line
-  parameters where passed to the interpreter.  Patch by Hieu Nguyen.
-
-- Issue #16215: Fix potential double memory free in str.replace().  Patch
-  by Serhiy Storchaka.
-
-- Issue #16290: A float return value from the __complex__ special method is no
-  longer accepted in the complex() constructor.
-
-- Issue #16416: On Mac OS X, operating system data are now always
-  encoded/decoded to/from UTF-8/surrogateescape, instead of the locale encoding
-  (which may be ASCII if no locale environment variable is set), to avoid
-  inconsistencies with os.fsencode() and os.fsdecode() functions which are
-  already using UTF-8/surrogateescape.
-
-- Issue #16453: Fix equality testing of dead weakref objects.
-
-- Issue #9535: Fix pending signals that have been received but not yet
-  handled by Python to not persist after os.fork() in the child process.
-
-- Issue #14794: Fix slice.indices to return correct results for huge values,
-  rather than raising OverflowError.
-
-- Issue #15001: fix segfault on "del sys.modules['__main__']". Patch by Victor
-  Stinner.
-
-- Issue #8271: the utf-8 decoder now outputs the correct number of U+FFFD
-  characters when used with the 'replace' error handler on invalid utf-8
-  sequences.  Patch by Serhiy Storchaka, tests by Ezio Melotti.
-
-- Issue #5765: Apply a hard recursion limit in the compiler instead of
-  blowing the stack and segfaulting. Initial patch by Andrea Griffini.
-
-- Issue #16402: When slicing a range, fix shadowing of exceptions from
-  __index__.
-
-- Issue #16336: fix input checking in the surrogatepass error handler.
-  Patch by Serhiy Storchaka.
-
-- Issue #8401: assigning an int to a bytearray slice (e.g. b[3:4] = 5) now
-  raises an error.
-
-- Issue #7317: Display full tracebacks when an error occurs asynchronously.
-  Patch by Alon Horev with update by Alexey Kachayev.
-
-- Issue #16309: Make PYTHONPATH="" behavior the same as if PYTHONPATH
-  not set at all.
-
-- Issue #10189: Improve the error reporting of SyntaxErrors related to global
-  and nonlocal statements.
-
-- Fix segfaults on setting __qualname__ on builtin types and attempting to
-  delete it on any type.
-
-- Issue #14625: Rewrite the UTF-32 decoder. It is now 3x to 4x faster. Patch
-  written by Serhiy Storchaka.
-
-- Issue #16345: Fix an infinite loop when ``fromkeys`` on a dict subclass
-  received a nonempty dict from the constructor.
-
-- Issue #16271: Fix strange bugs that resulted from __qualname__ appearing in a
-  class's __dict__ and on type.
-
-- Issue #12805: Make bytes.join and bytearray.join faster when the separator
-  is empty.  Patch by Serhiy Storchaka.
-
-- Issue #6074: Ensure cached bytecode files can always be updated by the
-  user that created them, even when the source file is read-only.
-
-- Issue #15958: bytes.join and bytearray.join now accept arbitrary buffer
-  objects.
-
-- Issue #14783: Improve int() docstring and switch docstrings for str(),
-  range(), and slice() to use multi-line signatures.
-
-- Issue #16160: Subclass support now works for types.SimpleNamespace.
-
-- Upgrade Unicode data (UCD) to version 6.2.
-
-- Issue #15379: Fix passing of non-BMP characters as integers for the charmap
-  decoder (already working as unicode strings).  Patch by Serhiy Storchaka.
-
-- Issue #15144: Fix possible integer overflow when handling pointers as integer
-  values, by using `Py_uintptr_t` instead of `size_t`.  Patch by Serhiy
-  Storchaka.
-
-- Issue #15965: Explicitly cast `AT_FDCWD` as (int).  Required on Solaris 10
-  (which defines `AT_FDCWD` as ``0xffd19553``), harmless on other platforms.
-
-- Issue #15839: Convert SystemErrors in `super()` to RuntimeErrors.
-
-- Issue #15448: Buffered IO now frees the buffer when closed, instead
-  of when deallocating.
-
-- Issue #15846: Fix SystemError which happened when using `ast.parse()` in an
-  exception handler on code with syntax errors.
-
-- Issue #15897: zipimport.c doesn't check return value of fseek().
-  Patch by Felipe Cruz.
-
-- Issue #15801: Make sure mappings passed to '%' formatting are actually
-  subscriptable.
-
-- Issue #15111: __import__ should propagate ImportError when raised as a
-  side-effect of a module triggered from using fromlist.
-
-- Issue #15022: Add pickle and comparison support to types.SimpleNamespace.
-
-Library
--------
-
 - Issue #15596: Faster pickling of unicode strings.
 
 - Issue #17572: Avoid chained exceptions while passing bad directives to
@@ -1626,8 +1812,8 @@
 - Issue #17385: Fix quadratic behavior in threading.Condition.  The FIFO
   queue now uses a deque instead of a list.
 
-- Issue #15806: Add contextlib.ignored().  This creates a context manager
-  to ignore specified exceptions, replacing the "except Exc: pass" idiom.
+- Issue #15806: Add contextlib.ignore().  This creates a context manager to
+  ignore specified exceptions, replacing the "except SomeException: pass" idiom.
 
 - Issue #14645: The email generator classes now produce output using the
   specified linesep throughout.  Previously if the prolog, epilog, or
@@ -2225,6 +2411,48 @@
 IDLE
 ----
 
+- Issue #18429: Format / Format Paragraph, now works when comment blocks
+  are selected. As with text blocks, this works best when the selection
+  only includes complete lines.
+
+- Issue #18226: Add docstrings and unittests for FormatParagraph.py.
+  Original patches by Todd Rovito and Phil Webster.
+
+- Issue #18279: Format - Strip trailing whitespace no longer marks a file as
+  changed when it has not been changed. This fix followed the addition of a
+  test file originally written by Phil Webster (the issue's main goal).
+
+- Issue #7136: In the Idle File menu, "New Window" is renamed "New File".
+  Patch by Tal Einat, Roget Serwy, and Todd Rovito.
+
+- Remove dead imports of imp.
+
+- Issue #18196: Avoid displaying spurious SystemExit tracebacks.
+
+- Issue #5492: Avoid traceback when exiting IDLE caused by a race condition.
+
+- Issue #17511: Keep IDLE find dialog open after clicking "Find Next".
+  Original patch by Sarah K.
+
+- Issue #18055: Move IDLE off of imp and on to importlib.
+
+- Issue #15392: Create a unittest framework for IDLE.
+  Initial patch by Rajagopalasarma Jayakrishnan.
+  See Lib/idlelib/idle_test/README.txt for how to run Idle tests.
+
+- Issue #14146: Highlight source line while debugging on Windows.
+
+- Issue #17838: Allow sys.stdin to be reassigned.
+
+- Issue #13495: Avoid loading the color delegator twice in IDLE.
+
+- Issue #17798: Allow IDLE to edit new files when specified on command line.
+
+- Issue #14735: Update IDLE docs to omit "Control-z on Windows".
+
+- Issue #17532: Always include Options menu for IDLE on OS X.
+  Patch by Guilherme Simões.
+
 - Issue #17585: Fixed IDLE regression. Now closes when using exit() or quit().
 
 - Issue #17657: Show full Tk version in IDLE's about dialog.
@@ -2278,6 +2506,91 @@
 Tests
 -----
 
+- Issue #1666318: Add a test that shutil.copytree() retains directory
+  permissions.  Patch by Catherine Devlin.
+
+- Issue #18273: move the tests in Lib/test/json_tests to Lib/test/test_json
+  and make them discoverable by unittest.  Patch by Zachary Ware.
+
+- Fix a fcntl test case on KFreeBSD, Debian #708653 (Petr Salinger).
+
+- Issue #18396: Fix spurious test failure in test_signal on Windows when
+  faulthandler is enabled (Patch by Jeremy Kloth)
+
+- Issue #17046: Fix broken test_executable_without_cwd in test_subprocess.
+
+- Issue #15415: Add new temp_dir() and change_cwd() context managers to
+  test.support, and refactor temp_cwd() to use them.  Patch by Chris Jerdonek.
+
+- Issue #15494: test.support is now a package rather than a module (Initial
+  patch by Indra Talip)
+
+- Issue #17944: test_zipfile now discoverable and uses subclassing to
+  generate tests for different compression types.  Fixed a bug with skipping
+  some tests due to use of exhausted iterators.
+
+- Issue #18266: test_largefile now works with unittest test discovery and
+  supports running only selected tests.  Patch by Zachary Ware.
+
+- Issue #17767: test_locale now works with unittest test discovery.
+  Original patch by Zachary Ware.
+
+- Issue #18375: Assume --randomize when --randseed is used for running the
+  testsuite.
+
+- Issue #11185: Fix test_wait4 under AIX.  Patch by Sébastien Sablé.
+
+- Issue #18207: Fix test_ssl for some versions of OpenSSL that ignore seconds
+  in ASN1_TIME fields.
+
+- Issue #18094: test_uuid no more reports skipped tests as passed.
+
+- Issue #17992: Add timeouts to asyncore and asynchat tests so that they won't
+  accidentally hang.
+
+- Issue #17833: Fix test_gdb failures seen on machines where debug symbols
+  for glibc are available (seen on PPC64 Linux).
+
+- Issue #7855: Add tests for ctypes/winreg for issues found in IronPython.
+  Initial patch by Dino Viehland.
+
+- Issue #11078: test___all__ now checks for duplicates in __all__.
+  Initial patch by R. David Murray.
+
+- Issue #17712: Fix test_gdb failures on Ubuntu 13.04.
+
+- Issue #17835: Fix test_io when the default OS pipe buffer size is larger
+  than one million bytes.
+
+- Issue #17065: Use process-unique key for winreg tests to avoid failures if
+  test is run multiple times in parallel (eg: on a buildbot host).
+
+- Issue #12820: add tests for the xml.dom.minicompat module.
+  Patch by John Chandler and Phil Connell.
+
+- Issue #17691: test_univnewlines now works with unittest test discovery.
+  Patch by Zachary Ware.
+
+- Issue #17790: test_set now works with unittest test discovery.
+  Patch by Zachary Ware.
+
+- Issue #17789: test_random now works with unittest test discovery.
+  Patch by Zachary Ware.
+
+- Issue #17779: test_osx_env now works with unittest test discovery.
+  Patch by Zachary Ware.
+
+- Issue #17766: test_iterlen now works with unittest test discovery.
+  Patch by Zachary Ware.
+
+- Issue #17690: test_time now works with unittest test discovery.
+  Patch by Zachary Ware.
+
+- Issue #17692: test_sqlite now works with unittest test discovery.
+  Patch by Zachary Ware.
+
+- Issue #11995: test_pydoc doesn't import all sys.path modules anymore.
+
 - Issue #17448: test_sax now skips if there are no xml parsers available
   instead of raising an ImportError.
 
@@ -2416,6 +2729,27 @@
 Build
 -----
 
+- Issue #16067: Add description into MSI file to replace installer's
+  temporary name.
+
+- Issue #18257: Fix readlink usage in python-config.  Install the python
+  version again on Darwin.
+
+- Issue #18481: Add C coverage reporting with gcov and lcov. A new make target
+  "coverage-report" creates an instrumented Python build, runs unit tests
+  and creates a HTML. The report can be updated with "make coverage-lcov".
+
+- Issue #17845: Clarified the message printed when some module are not built.
+
+- Issue #18256: Compilation fix for recent AIX releases.  Patch by
+  David Edelsohn.
+
+- Issue #17547: In configure, explicitly pass -Wformat for the benefit for GCC
+  4.8.
+
+- Issue #15172: Document NASM 2.10+ as requirement for building OpenSSL 1.0.1
+  on Windows.
+
 - Issue #17591: Use lowercase filenames when including Windows header files.
   Patch by Roumen Petrov.
 
@@ -2488,10 +2822,23 @@
 C-API
 -----
 
-- Issue #16881: Fix Py_ARRAY_LENGTH macro for GCC < 3.1.
+- Issue #18351: Fix various issues in a function in importlib provided to help
+  PyImport_ExecCodeModuleWithPathnames() (and thus by extension
+  PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx()).
 
-- Issue #15422: Get rid of PyCFunction_New macro. Use PyCFunction_NewEx
-  function (PyCFunction_New func is still present for backward compatibility).
+- Issue #9369: The types of `char*` arguments of PyObject_CallFunction() and
+  PyObject_CallMethod() now changed to `const char*`.  Based on patches by
+  Jörg Müller and Lars Buitinck.
+
+- Issue #17206: Py_CLEAR(), Py_DECREF(), Py_XINCREF() and Py_XDECREF() now
+  expand their arguments once instead of multiple times.  Patch written by Illia
+  Polosukhin.
+
+- Issue #17522: Add the PyGILState_Check() API.
+
+- Issue #17327: Add PyDict_SetDefault.
+
+- Issue #16881: Fix Py_ARRAY_LENGTH macro for GCC < 3.1.
 
 - Issue #16505: Remove unused Py_TPFLAGS_INT_SUBCLASS.
 
@@ -2506,6 +2853,21 @@
 Documentation
 -------------
 
+- Issue #17701: Improving strftime documentation.
+
+- Issue #18440: Clarify that `hash()` can truncate the value returned from an
+  object's custom `__hash__()` method.
+
+- Issue #17844: Add links to encoders and decoders for bytes-to-bytes codecs.
+
+- Issue #14097: improve the "introduction" page of the tutorial.
+
+- Issue #17977: The documentation for the cadefault argument's default value
+  in urllib.request.urlopen() is fixed to match the code.
+
+- Issue #6696: add documentation for the Profile objects, and improve
+  profile/cProfile docs.  Patch by Tom Pinckney.
+
 - Issue #15940: Specify effect of locale on time functions.
 
 - Issue 17538: Document XML vulnerabilties
@@ -2599,6 +2961,22 @@
 Tools/Demos
 -----------
 
+- Issue #18817: Fix a resource warning in Lib/aifc.py demo.  Patch by
+  Vajrasky Kok.
+
+- Issue #18439: Make patchcheck work on Windows for ACKS, NEWS.
+
+- Issue #18448: Fix a typo in Tools/demo/eiffel.py.
+
+- Issue #18457: Fixed saving of formulas and complex numbers in
+  Tools/demo/ss1.py.
+
+- Issue #18449: Make Tools/demo/ss1.py work again on Python 3.  Patch by
+  Févry Thibault.
+
+- Issue #12990: The "Python Launcher" on OSX could not launch python scripts
+  that have paths that include wide characters.
+
 - Issue #15239: Make mkstringprep.py work again on Python 3.
 
 - Issue #17028: Allowed Python arguments to be supplied to the Windows
@@ -2631,6 +3009,12 @@
 - Issue #13301: use ast.literal_eval() instead of eval() in Tools/i18n/msgfmt.py
   Patch by Serhiy Storchaka.
 
+Windows
+-------
+
+- Issue #18569: The installer now adds .py to the PATHEXT variable when extensions
+  are registered. Patch by Paul Moore.
+
 
 What's New in Python 3.3.0?
 ===========================
diff --git a/Misc/RPM/python-3.4.spec b/Misc/RPM/python-3.4.spec
index 4e9a863..a23cb27 100644
--- a/Misc/RPM/python-3.4.spec
+++ b/Misc/RPM/python-3.4.spec
@@ -39,7 +39,7 @@
 
 %define name python
 #--start constants--
-%define version 3.4.0a3
+%define version 3.4.0a4
 %define libvers 3.4
 #--end constants--
 %define release 1pydotorg
diff --git a/Misc/valgrind-python.supp b/Misc/valgrind-python.supp
index 81a07c9..e612555 100644
--- a/Misc/valgrind-python.supp
+++ b/Misc/valgrind-python.supp
@@ -456,6 +456,15 @@
    fun:PyUnicode_FSConverter
 }
 
+{
+   wcscmp_false_positive
+   Memcheck:Addr8
+   fun:wcscmp
+   fun:_PyOS_GetOpt
+   fun:Py_Main
+   fun:main
+}
+
 # Additional suppressions for the unified decimal tests:
 {
    test_decimal
diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c
index faca8cf..02b55d1 100644
--- a/Modules/_bisectmodule.c
+++ b/Modules/_bisectmodule.c
@@ -6,6 +6,8 @@
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 
+_Py_IDENTIFIER(insert);
+
 static Py_ssize_t
 internal_bisect_right(PyObject *list, PyObject *item, Py_ssize_t lo, Py_ssize_t hi)
 {
@@ -90,8 +92,6 @@
         if (PyList_Insert(list, index, item) < 0)
             return NULL;
     } else {
-        _Py_IDENTIFIER(insert);
-
         result = _PyObject_CallMethodId(list, &PyId_insert, "nO", index, item);
         if (result == NULL)
             return NULL;
@@ -195,7 +195,6 @@
         if (PyList_Insert(list, index, item) < 0)
             return NULL;
     } else {
-        _Py_IDENTIFIER(insert);
         result = _PyObject_CallMethodId(list, &PyId_insert, "nO", index, item);
         if (result == NULL)
             return NULL;
diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c
index abc4d5d..fd05de0 100644
--- a/Modules/_bz2module.c
+++ b/Modules/_bz2module.c
@@ -248,6 +248,14 @@
     return result;
 }
 
+static PyObject *
+BZ2Compressor_getstate(BZ2Compressor *self, PyObject *noargs)
+{
+    PyErr_Format(PyExc_TypeError, "cannot serialize '%s' object",
+                 Py_TYPE(self)->tp_name);
+    return NULL;
+}
+
 static void*
 BZ2_Malloc(void* ctx, int items, int size)
 {
@@ -317,10 +325,11 @@
 }
 
 static PyMethodDef BZ2Compressor_methods[] = {
-    {"compress", (PyCFunction)BZ2Compressor_compress, METH_VARARGS,
+    {"compress",     (PyCFunction)BZ2Compressor_compress, METH_VARARGS,
      BZ2Compressor_compress__doc__},
-    {"flush",    (PyCFunction)BZ2Compressor_flush,    METH_NOARGS,
+    {"flush",        (PyCFunction)BZ2Compressor_flush,    METH_NOARGS,
      BZ2Compressor_flush__doc__},
+    {"__getstate__", (PyCFunction)BZ2Compressor_getstate, METH_NOARGS},
     {NULL}
 };
 
@@ -471,6 +480,14 @@
     return result;
 }
 
+static PyObject *
+BZ2Decompressor_getstate(BZ2Decompressor *self, PyObject *noargs)
+{
+    PyErr_Format(PyExc_TypeError, "cannot serialize '%s' object",
+                 Py_TYPE(self)->tp_name);
+    return NULL;
+}
+
 static int
 BZ2Decompressor_init(BZ2Decompressor *self, PyObject *args, PyObject *kwargs)
 {
@@ -521,6 +538,7 @@
 static PyMethodDef BZ2Decompressor_methods[] = {
     {"decompress", (PyCFunction)BZ2Decompressor_decompress, METH_VARARGS,
      BZ2Decompressor_decompress__doc__},
+    {"__getstate__", (PyCFunction)BZ2Decompressor_getstate, METH_NOARGS},
     {NULL}
 };
 
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 3fadb70..310e672 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -1763,17 +1763,17 @@
 static PyObject *
 _count_elements(PyObject *self, PyObject *args)
 {
-    _Py_IDENTIFIER(__getitem__);
+    _Py_IDENTIFIER(get);
     _Py_IDENTIFIER(__setitem__);
     PyObject *it, *iterable, *mapping, *oldval;
     PyObject *newval = NULL;
     PyObject *key = NULL;
     PyObject *zero = NULL;
     PyObject *one = NULL;
-    PyObject *mapping_get = NULL;
-    PyObject *mapping_getitem;
+    PyObject *bound_get = NULL;
+    PyObject *mapping_get;
+    PyObject *dict_get;
     PyObject *mapping_setitem;
-    PyObject *dict_getitem;
     PyObject *dict_setitem;
 
     if (!PyArg_UnpackTuple(args, "_count_elements", 2, 2, &mapping, &iterable))
@@ -1787,15 +1787,16 @@
     if (one == NULL)
         goto done;
 
-    mapping_getitem = _PyType_LookupId(Py_TYPE(mapping), &PyId___getitem__);
-    dict_getitem = _PyType_LookupId(&PyDict_Type, &PyId___getitem__);
+    /* Only take the fast path when get() and __setitem__()
+     * have not been overridden.
+     */
+    mapping_get = _PyType_LookupId(Py_TYPE(mapping), &PyId_get);
+    dict_get = _PyType_LookupId(&PyDict_Type, &PyId_get);
     mapping_setitem = _PyType_LookupId(Py_TYPE(mapping), &PyId___setitem__);
     dict_setitem = _PyType_LookupId(&PyDict_Type, &PyId___setitem__);
 
-    if (mapping_getitem != NULL &&
-        mapping_getitem == dict_getitem &&
-        mapping_setitem != NULL &&
-        mapping_setitem == dict_setitem) {
+    if (mapping_get != NULL && mapping_get == dict_get &&
+        mapping_setitem != NULL && mapping_setitem == dict_setitem) {
         while (1) {
             key = PyIter_Next(it);
             if (key == NULL)
@@ -1815,8 +1816,8 @@
             Py_DECREF(key);
         }
     } else {
-        mapping_get = PyObject_GetAttrString(mapping, "get");
-        if (mapping_get == NULL)
+        bound_get = _PyObject_GetAttrId(mapping, &PyId_get);
+        if (bound_get == NULL)
             goto done;
 
         zero = PyLong_FromLong(0);
@@ -1827,7 +1828,7 @@
             key = PyIter_Next(it);
             if (key == NULL)
                 break;
-            oldval = PyObject_CallFunctionObjArgs(mapping_get, key, zero, NULL);
+            oldval = PyObject_CallFunctionObjArgs(bound_get, key, zero, NULL);
             if (oldval == NULL)
                 break;
             newval = PyNumber_Add(oldval, one);
@@ -1845,7 +1846,7 @@
     Py_DECREF(it);
     Py_XDECREF(key);
     Py_XDECREF(newval);
-    Py_XDECREF(mapping_get);
+    Py_XDECREF(bound_get);
     Py_XDECREF(zero);
     Py_XDECREF(one);
     if (PyErr_Occurred())
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index a93290e..0deffa0 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -143,18 +143,18 @@
 } DictRemoverObject;
 
 static void
-_DictRemover_dealloc(PyObject *_self)
+_DictRemover_dealloc(PyObject *myself)
 {
-    DictRemoverObject *self = (DictRemoverObject *)_self;
+    DictRemoverObject *self = (DictRemoverObject *)myself;
     Py_XDECREF(self->key);
     Py_XDECREF(self->dict);
-    Py_TYPE(self)->tp_free(_self);
+    Py_TYPE(self)->tp_free(myself);
 }
 
 static PyObject *
-_DictRemover_call(PyObject *_self, PyObject *args, PyObject *kw)
+_DictRemover_call(PyObject *myself, PyObject *args, PyObject *kw)
 {
-    DictRemoverObject *self = (DictRemoverObject *)_self;
+    DictRemoverObject *self = (DictRemoverObject *)myself;
     if (self->key && self->dict) {
         if (-1 == PyDict_DelItem(self->dict, self->key))
             /* XXX Error context */
@@ -278,8 +278,10 @@
     if (prefix)
         len += strlen(prefix);
     result = PyMem_Malloc(len + 1);
-    if (result == NULL)
+    if (result == NULL) {
+        PyErr_NoMemory();
         return NULL;
+    }
     if (prefix)
         strcpy(result, prefix);
     else
@@ -1307,8 +1309,10 @@
         goto error;
     stgdict->ndim = itemdict->ndim + 1;
     stgdict->shape = PyMem_Malloc(sizeof(Py_ssize_t) * stgdict->ndim);
-    if (stgdict->shape == NULL)
+    if (stgdict->shape == NULL) {
+        PyErr_NoMemory();
         goto error;
+    }
     stgdict->shape[0] = length;
     memmove(&stgdict->shape[1], itemdict->shape,
         sizeof(Py_ssize_t) * (stgdict->ndim - 1));
@@ -2241,6 +2245,10 @@
        argtypes would be a ctypes type).
     */
     stgdict->format = _ctypes_alloc_format_string(NULL, "X{}");
+    if (stgdict->format == NULL) {
+        Py_DECREF((PyObject *)stgdict);
+        return NULL;
+    }
     stgdict->flags |= TYPEFLAG_ISPOINTER;
 
     /* create the new instance (which is a class,
@@ -2451,17 +2459,17 @@
     { NULL },
 };
 
-static int PyCData_NewGetBuffer(PyObject *_self, Py_buffer *view, int flags)
+static int PyCData_NewGetBuffer(PyObject *myself, Py_buffer *view, int flags)
 {
-    CDataObject *self = (CDataObject *)_self;
-    StgDictObject *dict = PyObject_stgdict(_self);
+    CDataObject *self = (CDataObject *)myself;
+    StgDictObject *dict = PyObject_stgdict(myself);
     Py_ssize_t i;
 
     if (view == NULL) return 0;
 
     view->buf = self->b_ptr;
-    view->obj = _self;
-    Py_INCREF(_self);
+    view->obj = myself;
+    Py_INCREF(myself);
     view->len = self->b_size;
     view->readonly = 0;
     /* use default format character if not set */
@@ -2496,36 +2504,36 @@
 }
 
 static PyObject *
-PyCData_reduce(PyObject *_self, PyObject *args)
+PyCData_reduce(PyObject *myself, PyObject *args)
 {
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
 
-    if (PyObject_stgdict(_self)->flags & (TYPEFLAG_ISPOINTER|TYPEFLAG_HASPOINTER)) {
+    if (PyObject_stgdict(myself)->flags & (TYPEFLAG_ISPOINTER|TYPEFLAG_HASPOINTER)) {
         PyErr_SetString(PyExc_ValueError,
                         "ctypes objects containing pointers cannot be pickled");
         return NULL;
     }
     return Py_BuildValue("O(O(NN))",
                          _unpickle,
-                         Py_TYPE(_self),
-                         PyObject_GetAttrString(_self, "__dict__"),
+                         Py_TYPE(myself),
+                         PyObject_GetAttrString(myself, "__dict__"),
                          PyBytes_FromStringAndSize(self->b_ptr, self->b_size));
 }
 
 static PyObject *
-PyCData_setstate(PyObject *_self, PyObject *args)
+PyCData_setstate(PyObject *myself, PyObject *args)
 {
     void *data;
     Py_ssize_t len;
     int res;
     PyObject *dict, *mydict;
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
     if (!PyArg_ParseTuple(args, "Os#", &dict, &data, &len))
         return NULL;
     if (len > self->b_size)
         len = self->b_size;
     memmove(self->b_ptr, data, len);
-    mydict = PyObject_GetAttrString(_self, "__dict__");
+    mydict = PyObject_GetAttrString(myself, "__dict__");
     res = PyDict_Update(mydict, dict);
     Py_DECREF(mydict);
     if (res == -1)
@@ -4163,9 +4171,9 @@
 }
 
 static PyObject *
-Array_item(PyObject *_self, Py_ssize_t index)
+Array_item(PyObject *myself, Py_ssize_t index)
 {
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
     Py_ssize_t offset, size;
     StgDictObject *stgdict;
 
@@ -4189,9 +4197,9 @@
 }
 
 static PyObject *
-Array_subscript(PyObject *_self, PyObject *item)
+Array_subscript(PyObject *myself, PyObject *item)
 {
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
 
     if (PyIndex_Check(item)) {
         Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
@@ -4200,9 +4208,9 @@
             return NULL;
         if (i < 0)
             i += self->b_length;
-        return Array_item(_self, i);
+        return Array_item(myself, i);
     }
-    else if PySlice_Check(item) {
+    else if (PySlice_Check(item)) {
         StgDictObject *stgdict, *itemdict;
         PyObject *proto;
         PyObject *np;
@@ -4277,7 +4285,11 @@
 
         for (cur = start, i = 0; i < slicelen;
              cur += step, i++) {
-            PyObject *v = Array_item(_self, cur);
+            PyObject *v = Array_item(myself, cur);
+            if (v == NULL) {
+                Py_DECREF(np);
+                return NULL;
+            }
             PyList_SET_ITEM(np, i, v);
         }
         return np;
@@ -4291,9 +4303,9 @@
 }
 
 static int
-Array_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
+Array_ass_item(PyObject *myself, Py_ssize_t index, PyObject *value)
 {
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
     Py_ssize_t size, offset;
     StgDictObject *stgdict;
     char *ptr;
@@ -4320,9 +4332,9 @@
 }
 
 static int
-Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
+Array_ass_subscript(PyObject *myself, PyObject *item, PyObject *value)
 {
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
 
     if (value == NULL) {
         PyErr_SetString(PyExc_TypeError,
@@ -4337,7 +4349,7 @@
             return -1;
         if (i < 0)
             i += self->b_length;
-        return Array_ass_item(_self, i, value);
+        return Array_ass_item(myself, i, value);
     }
     else if (PySlice_Check(item)) {
         Py_ssize_t start, stop, step, slicelen, otherlen, i, cur;
@@ -4362,7 +4374,7 @@
             int result;
             if (item == NULL)
                 return -1;
-            result = Array_ass_item(_self, cur, item);
+            result = Array_ass_item(myself, cur, item);
             Py_DECREF(item);
             if (result == -1)
                 return -1;
@@ -4377,9 +4389,9 @@
 }
 
 static Py_ssize_t
-Array_length(PyObject *_self)
+Array_length(PyObject *myself)
 {
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
     return self->b_length;
 }
 
@@ -4665,9 +4677,9 @@
   PyCPointer_Type
 */
 static PyObject *
-Pointer_item(PyObject *_self, Py_ssize_t index)
+Pointer_item(PyObject *myself, Py_ssize_t index)
 {
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
     Py_ssize_t size;
     Py_ssize_t offset;
     StgDictObject *stgdict, *itemdict;
@@ -4696,9 +4708,9 @@
 }
 
 static int
-Pointer_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value)
+Pointer_ass_item(PyObject *myself, Py_ssize_t index, PyObject *value)
 {
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
     Py_ssize_t size;
     Py_ssize_t offset;
     StgDictObject *stgdict, *itemdict;
@@ -4828,14 +4840,14 @@
 }
 
 static PyObject *
-Pointer_subscript(PyObject *_self, PyObject *item)
+Pointer_subscript(PyObject *myself, PyObject *item)
 {
-    CDataObject *self = (CDataObject *)_self;
+    CDataObject *self = (CDataObject *)myself;
     if (PyIndex_Check(item)) {
         Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
         if (i == -1 && PyErr_Occurred())
             return NULL;
-        return Pointer_item(_self, i);
+        return Pointer_item(myself, i);
     }
     else if (PySlice_Check(item)) {
         PySliceObject *slice = (PySliceObject *)item;
@@ -4948,7 +4960,7 @@
             return NULL;
 
         for (cur = start, i = 0; i < len; cur += step, i++) {
-            PyObject *v = Pointer_item(_self, cur);
+            PyObject *v = Pointer_item(myself, cur);
             PyList_SET_ITEM(np, i, v);
         }
         return np;
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index 8623239..ec8fd12 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -10,9 +10,9 @@
 /**************************************************************/
 
 static void
-CThunkObject_dealloc(PyObject *_self)
+CThunkObject_dealloc(PyObject *myself)
 {
-    CThunkObject *self = (CThunkObject *)_self;
+    CThunkObject *self = (CThunkObject *)myself;
     PyObject_GC_UnTrack(self);
     Py_XDECREF(self->converters);
     Py_XDECREF(self->callable);
@@ -23,9 +23,9 @@
 }
 
 static int
-CThunkObject_traverse(PyObject *_self, visitproc visit, void *arg)
+CThunkObject_traverse(PyObject *myself, visitproc visit, void *arg)
 {
-    CThunkObject *self = (CThunkObject *)_self;
+    CThunkObject *self = (CThunkObject *)myself;
     Py_VISIT(self->converters);
     Py_VISIT(self->callable);
     Py_VISIT(self->restype);
@@ -33,9 +33,9 @@
 }
 
 static int
-CThunkObject_clear(PyObject *_self)
+CThunkObject_clear(PyObject *myself)
 {
-    CThunkObject *self = (CThunkObject *)_self;
+    CThunkObject *self = (CThunkObject *)myself;
     Py_CLEAR(self->converters);
     Py_CLEAR(self->callable);
     Py_CLEAR(self->restype);
diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c
index 25d9996..b95b0a4 100644
--- a/Modules/_ctypes/stgdict.c
+++ b/Modules/_ctypes/stgdict.c
@@ -417,6 +417,8 @@
            that). Use 'B' for bytes. */
         stgdict->format = _ctypes_alloc_format_string(NULL, "B");
     }
+    if (stgdict->format == NULL)
+        return -1;
 
 #define realdict ((PyObject *)&stgdict->dict)
     for (i = 0; i < len; ++i) {
@@ -483,7 +485,7 @@
             char *fieldfmt = dict->format ? dict->format : "B";
             char *fieldname = _PyUnicode_AsString(name);
             char *ptr;
-            Py_ssize_t len; 
+            Py_ssize_t len;
             char *buf;
 
             if (fieldname == NULL)
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index b5af867..1f192dc 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -549,68 +549,141 @@
 
 /* Addch, Addstr, Addnstr */
 
+/*[clinic]
+module curses
+
+class curses.window
+
+curses.window.addch
+
+    [
+    x: int
+      X-coordinate.
+    y: int
+      Y-coordinate.
+    ]
+
+    ch: object
+      Character to add.
+
+    [
+    attr: long
+      Attributes for the character.
+    ]
+    /
+
+Paint character ch at (y, x) with attributes attr.
+
+Paint character ch at (y, x) with attributes attr,
+overwriting any character previously painted at that location.
+By default, the character position and attributes are the
+current settings for the window object.
+[clinic]*/
+
+PyDoc_STRVAR(curses_window_addch__doc__,
+"Paint character ch at (y, x) with attributes attr.\n"
+"\n"
+"curses.window.addch([x, y,] ch, [attr])\n"
+"  x\n"
+"    X-coordinate.\n"
+"  y\n"
+"    Y-coordinate.\n"
+"  ch\n"
+"    Character to add.\n"
+"  attr\n"
+"    Attributes for the character.\n"
+"\n"
+"Paint character ch at (y, x) with attributes attr,\n"
+"overwriting any character previously painted at that location.\n"
+"By default, the character position and attributes are the\n"
+"current settings for the window object.");
+
+#define CURSES_WINDOW_ADDCH_METHODDEF    \
+    {"addch", (PyCFunction)curses_window_addch, METH_VARARGS, curses_window_addch__doc__},
+
 static PyObject *
-PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
+curses_window_addch_impl(PyObject *self, int group_left_1, int x, int y, PyObject *ch, int group_right_1, long attr);
+
+static PyObject *
+curses_window_addch(PyObject *self, PyObject *args)
 {
-    int rtn, x, y, use_xy = FALSE;
-    PyObject *chobj;
+    PyObject *return_value = NULL;
+    int group_left_1 = 0;
+    int x;
+    int y;
+    PyObject *ch;
+    int group_right_1 = 0;
+    long attr;
+
+    switch (PyTuple_Size(args)) {
+        case 1:
+            if (!PyArg_ParseTuple(args, "O:addch", &ch))
+                return NULL;
+            break;
+        case 2:
+            if (!PyArg_ParseTuple(args, "Ol:addch", &ch, &attr))
+                return NULL;
+            group_right_1 = 1;
+            break;
+        case 3:
+            if (!PyArg_ParseTuple(args, "iiO:addch", &x, &y, &ch))
+                return NULL;
+            group_left_1 = 1;
+            break;
+        case 4:
+            if (!PyArg_ParseTuple(args, "iiOl:addch", &x, &y, &ch, &attr))
+                return NULL;
+            group_right_1 = 1;
+            group_left_1 = 1;
+            break;
+        default:
+            PyErr_SetString(PyExc_TypeError, "curses.window.addch requires 1 to 4 arguments");
+            return NULL;
+    }
+    return_value = curses_window_addch_impl(self, group_left_1, x, y, ch, group_right_1, attr);
+
+    return return_value;
+}
+
+static PyObject *
+curses_window_addch_impl(PyObject *self, int group_left_1, int x, int y, PyObject *ch, int group_right_1, long attr)
+/*[clinic checksum: 98ade780397a48d0be48439763424b3b00c92089]*/
+{
+    PyCursesWindowObject *cwself = (PyCursesWindowObject *)self;
+    int coordinates_group = group_left_1;
+    int attr_group = group_right_1;
+    int rtn;
     int type;
-    chtype ch;
+    chtype cch;
 #ifdef HAVE_NCURSESW
     cchar_t wch;
 #endif
-    attr_t attr = A_NORMAL;
-    long lattr;
     const char *funcname;
 
-    switch (PyTuple_Size(args)) {
-    case 1:
-        if (!PyArg_ParseTuple(args, "O;ch or int", &chobj))
-            return NULL;
-        break;
-    case 2:
-        if (!PyArg_ParseTuple(args, "Ol;ch or int,attr", &chobj, &lattr))
-            return NULL;
-        attr = lattr;
-        break;
-    case 3:
-        if (!PyArg_ParseTuple(args,"iiO;y,x,ch or int", &y, &x, &chobj))
-            return NULL;
-        use_xy = TRUE;
-        break;
-    case 4:
-        if (!PyArg_ParseTuple(args,"iiOl;y,x,ch or int, attr",
-                              &y, &x, &chobj, &lattr))
-            return NULL;
-        attr = lattr;
-        use_xy = TRUE;
-        break;
-    default:
-        PyErr_SetString(PyExc_TypeError, "addch requires 1 to 4 arguments");
-        return NULL;
-    }
+    if (!attr_group)
+      attr = A_NORMAL;
 
 #ifdef HAVE_NCURSESW
-    type = PyCurses_ConvertToCchar_t(self, chobj, &ch, &wch);
+    type = PyCurses_ConvertToCchar_t(cwself, ch, &cch, &wch);
     if (type == 2) {
         funcname = "add_wch";
         wch.attr = attr;
-        if (use_xy == TRUE)
-            rtn = mvwadd_wch(self->win,y,x, &wch);
+        if (coordinates_group)
+            rtn = mvwadd_wch(cwself->win,y,x, &wch);
         else {
-            rtn = wadd_wch(self->win, &wch);
+            rtn = wadd_wch(cwself->win, &wch);
         }
     }
     else
 #else
-    type = PyCurses_ConvertToCchar_t(self, chobj, &ch);
+    type = PyCurses_ConvertToCchar_t(cwself, ch, &cch);
 #endif
     if (type == 1) {
         funcname = "addch";
-        if (use_xy == TRUE)
-            rtn = mvwaddch(self->win,y,x, ch | attr);
+        if (coordinates_group)
+            rtn = mvwaddch(cwself->win,y,x, cch | attr);
         else {
-            rtn = waddch(self->win, ch | attr);
+            rtn = waddch(cwself->win, cch | attr);
         }
     }
     else {
@@ -1954,7 +2027,7 @@
 
 
 static PyMethodDef PyCursesWindow_Methods[] = {
-    {"addch",           (PyCFunction)PyCursesWindow_AddCh, METH_VARARGS},
+    CURSES_WINDOW_ADDCH_METHODDEF
     {"addnstr",         (PyCFunction)PyCursesWindow_AddNStr, METH_VARARGS},
     {"addstr",          (PyCFunction)PyCursesWindow_AddStr, METH_VARARGS},
     {"attroff",         (PyCFunction)PyCursesWindow_AttrOff, METH_VARARGS},
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index fb78e6d..1eace71 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -104,6 +104,11 @@
 static PyTypeObject PyDateTime_TZInfoType;
 static PyTypeObject PyDateTime_TimeZoneType;
 
+_Py_IDENTIFIER(as_integer_ratio);
+_Py_IDENTIFIER(fromutc);
+_Py_IDENTIFIER(isoformat);
+_Py_IDENTIFIER(strftime);
+
 /* ---------------------------------------------------------------------------
  * Math utilities.
  */
@@ -1277,8 +1282,6 @@
             goto Done;
         format = PyUnicode_FromString(PyBytes_AS_STRING(newfmt));
         if (format != NULL) {
-            _Py_IDENTIFIER(strftime);
-
             result = _PyObject_CallMethodId(time, &PyId_strftime, "OO",
                                             format, timetuple, NULL);
             Py_DECREF(format);
@@ -1566,7 +1569,6 @@
     PyObject *result = NULL;
     PyObject *pyus_in = NULL, *temp, *pyus_out;
     PyObject *ratio = NULL;
-    _Py_IDENTIFIER(as_integer_ratio);
 
     pyus_in = delta_to_microseconds(delta);
     if (pyus_in == NULL)
@@ -1665,7 +1667,6 @@
     PyObject *result = NULL;
     PyObject *pyus_in = NULL, *temp, *pyus_out;
     PyObject *ratio = NULL;
-    _Py_IDENTIFIER(as_integer_ratio);
 
     pyus_in = delta_to_microseconds(delta);
     if (pyus_in == NULL)
@@ -2635,8 +2636,6 @@
 static PyObject *
 date_str(PyDateTime_Date *self)
 {
-    _Py_IDENTIFIER(isoformat);
-
     return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()");
 }
 
@@ -2676,7 +2675,6 @@
 date_format(PyDateTime_Date *self, PyObject *args)
 {
     PyObject *format;
-    _Py_IDENTIFIER(strftime);
 
     if (!PyArg_ParseTuple(args, "U:__format__", &format))
         return NULL;
@@ -3593,8 +3591,6 @@
 static PyObject *
 time_str(PyDateTime_Time *self)
 {
-    _Py_IDENTIFIER(isoformat);
-
     return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()");
 }
 
@@ -4143,31 +4139,72 @@
                                       tzinfo);
 }
 
-/* Return best possible local time -- this isn't constrained by the
- * precision of a timestamp.
- */
+/*[clinic]
+module datetime
+
+@classmethod
+datetime.now
+
+    tz: object = None
+        Timezone object.
+
+Returns new datetime object representing current time local to tz.
+
+If no tz is specified, uses local timezone.
+[clinic]*/
+
+PyDoc_STRVAR(datetime_now__doc__,
+"Returns new datetime object representing current time local to tz.\n"
+"\n"
+"datetime.now(tz=None)\n"
+"  tz\n"
+"    Timezone object.\n"
+"\n"
+"If no tz is specified, uses local timezone.");
+
+#define DATETIME_NOW_METHODDEF    \
+    {"now", (PyCFunction)datetime_now, METH_VARARGS|METH_KEYWORDS|METH_CLASS, datetime_now__doc__},
+
 static PyObject *
-datetime_now(PyObject *cls, PyObject *args, PyObject *kw)
+datetime_now_impl(PyObject *cls, PyObject *tz);
+
+static PyObject *
+datetime_now(PyObject *cls, PyObject *args, PyObject *kwargs)
+{
+    PyObject *return_value = NULL;
+    static char *_keywords[] = {"tz", NULL};
+    PyObject *tz = Py_None;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+        "|O:now", _keywords,
+        &tz))
+        goto exit;
+    return_value = datetime_now_impl(cls, tz);
+
+exit:
+    return return_value;
+}
+
+static PyObject *
+datetime_now_impl(PyObject *cls, PyObject *tz)
+/*[clinic checksum: 328b54387f4c2f8cb534997e1bd55f8cb38c4992]*/
 {
     PyObject *self;
-    PyObject *tzinfo = Py_None;
-    static char *keywords[] = {"tz", NULL};
 
-    if (! PyArg_ParseTupleAndKeywords(args, kw, "|O:now", keywords,
-                                      &tzinfo))
-        return NULL;
-    if (check_tzinfo_subclass(tzinfo) < 0)
+    /* Return best possible local time -- this isn't constrained by the
+     * precision of a timestamp.
+     */
+    if (check_tzinfo_subclass(tz) < 0)
         return NULL;
 
     self = datetime_best_possible(cls,
-                                  tzinfo == Py_None ? localtime : gmtime,
-                                  tzinfo);
-    if (self != NULL && tzinfo != Py_None) {
+                                  tz == Py_None ? localtime : gmtime,
+                                  tz);
+    if (self != NULL && tz != Py_None) {
         /* Convert UTC to tzinfo's zone. */
         PyObject *temp = self;
-        _Py_IDENTIFIER(fromutc);
 
-        self = _PyObject_CallMethodId(tzinfo, &PyId_fromutc, "O", self);
+        self = _PyObject_CallMethodId(tz, &PyId_fromutc, "O", self);
         Py_DECREF(temp);
     }
     return self;
@@ -4204,7 +4241,6 @@
     if (self != NULL && tzinfo != Py_None) {
         /* Convert UTC to tzinfo's zone. */
         PyObject *temp = self;
-        _Py_IDENTIFIER(fromutc);
 
         self = _PyObject_CallMethodId(tzinfo, &PyId_fromutc, "O", self);
         Py_DECREF(temp);
@@ -4426,6 +4462,9 @@
             delta_us = DATE_GET_MICROSECOND(left) -
                        DATE_GET_MICROSECOND(right);
             result = new_delta(delta_d, delta_s, delta_us, 1);
+            if (result == NULL)
+                return NULL;
+
             if (offdiff != NULL) {
                 PyObject *temp = result;
                 result = delta_subtract(result, offdiff);
@@ -4487,8 +4526,6 @@
 static PyObject *
 datetime_str(PyDateTime_DateTime *self)
 {
-    _Py_IDENTIFIER(isoformat);
-
     return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "(s)", " ");
 }
 
@@ -4767,7 +4804,6 @@
     PyObject *offset;
     PyObject *temp;
     PyObject *tzinfo = Py_None;
-    _Py_IDENTIFIER(fromutc);
     static char *keywords[] = {"tz", NULL};
 
     if (! PyArg_ParseTupleAndKeywords(args, kw, "|O:astimezone", keywords,
@@ -5001,9 +5037,7 @@
 
     /* Class methods: */
 
-    {"now",         (PyCFunction)datetime_now,
-     METH_VARARGS | METH_KEYWORDS | METH_CLASS,
-     PyDoc_STR("[tz] -> new datetime with tz's local day and time.")},
+    DATETIME_NOW_METHODDEF
 
     {"utcnow",         (PyCFunction)datetime_utcnow,
      METH_NOARGS | METH_CLASS,
diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c
index d899480..60802b6 100644
--- a/Modules/_dbmmodule.c
+++ b/Modules/_dbmmodule.c
@@ -44,7 +44,7 @@
 static PyObject *DbmError;
 
 static PyObject *
-newdbmobject(char *file, int flags, int mode)
+newdbmobject(const char *file, int flags, int mode)
 {
     dbmobject *dp;
 
@@ -221,9 +221,9 @@
         if (key.dptr == NULL)
             return -1;
     }
-    if (!PyBytes_Check(arg)) {
+    else if (!PyBytes_Check(arg)) {
         PyErr_Format(PyExc_TypeError,
-                     "dbm key must be string, not %.100s",
+                     "dbm key must be bytes or string, not %.100s",
                      arg->ob_type->tp_name);
         return -1;
     }
@@ -361,16 +361,69 @@
 
 /* ----------------------------------------------------------------- */
 
+/*[clinic]
+module dbm
+
+dbm.open as dbmopen
+
+    filename: str
+        The filename to open.
+
+    flags: str="r"
+        How to open the file.  "r" for reading, "w" for writing, etc.
+
+    mode: int(doc_default="0o666") = 0o666
+        If creating a new file, the mode bits for the new file
+        (e.g. os.O_RDWR).
+
+    /
+
+Return a database object.
+
+[clinic]*/
+
+PyDoc_STRVAR(dbmopen__doc__,
+"Return a database object.\n"
+"\n"
+"dbm.open(filename, flags=\'r\', mode=0o666)\n"
+"  filename\n"
+"    The filename to open.\n"
+"  flags\n"
+"    How to open the file.  \"r\" for reading, \"w\" for writing, etc.\n"
+"  mode\n"
+"    If creating a new file, the mode bits for the new file\n"
+"    (e.g. os.O_RDWR).");
+
+#define DBMOPEN_METHODDEF    \
+    {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__},
+
+static PyObject *
+dbmopen_impl(PyObject *self, const char *filename, const char *flags, int mode);
+
 static PyObject *
 dbmopen(PyObject *self, PyObject *args)
 {
-    char *name;
-    char *flags = "r";
-    int iflags;
-    int mode = 0666;
+    PyObject *return_value = NULL;
+    const char *filename;
+    const char *flags = "r";
+    int mode = 438;
 
-    if ( !PyArg_ParseTuple(args, "s|si:open", &name, &flags, &mode) )
-        return NULL;
+    if (!PyArg_ParseTuple(args,
+        "s|si:open",
+        &filename, &flags, &mode))
+        goto exit;
+    return_value = dbmopen_impl(self, filename, flags, mode);
+
+exit:
+    return return_value;
+}
+
+static PyObject *
+dbmopen_impl(PyObject *self, const char *filename, const char *flags, int mode)
+/*[clinic checksum: 61007c796d38af85c8035afa769fb4bb453429ee]*/
+{
+    int iflags;
+
     if ( strcmp(flags, "r") == 0 )
         iflags = O_RDONLY;
     else if ( strcmp(flags, "w") == 0 )
@@ -386,13 +439,11 @@
                         "arg 2 to open should be 'r', 'w', 'c', or 'n'");
         return NULL;
     }
-    return newdbmobject(name, iflags, mode);
+    return newdbmobject(filename, iflags, mode);
 }
 
 static PyMethodDef dbmmodule_methods[] = {
-    { "open", (PyCFunction)dbmopen, METH_VARARGS,
-      "open(path[, flag[, mode]]) -> mapping\n"
-      "Return a database object."},
+    DBMOPEN_METHODDEF
     { 0, 0 },
 };
 
diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c
index d3e3940..06c2c39 100644
--- a/Modules/_decimal/_decimal.c
+++ b/Modules/_decimal/_decimal.c
@@ -3009,18 +3009,24 @@
             *wcmp = Py_NotImplemented;
         }
     }
-    else if (PyObject_IsInstance(w, Rational)) {
-        *wcmp = numerator_as_decimal(w, context);
-        if (*wcmp && !mpd_isspecial(MPD(v))) {
-            *vcmp = multiply_by_denominator(v, w, context);
-            if (*vcmp == NULL) {
-                Py_CLEAR(*wcmp);
+    else {
+        int is_rational = PyObject_IsInstance(w, Rational);
+        if (is_rational < 0) {
+            *wcmp = NULL;
+        }
+        else if (is_rational > 0) {
+            *wcmp = numerator_as_decimal(w, context);
+            if (*wcmp && !mpd_isspecial(MPD(v))) {
+                *vcmp = multiply_by_denominator(v, w, context);
+                if (*vcmp == NULL) {
+                    Py_CLEAR(*wcmp);
+                }
             }
         }
-    }
-    else {
-        Py_INCREF(Py_NotImplemented);
-        *wcmp = Py_NotImplemented;
+        else {
+            Py_INCREF(Py_NotImplemented);
+            *wcmp = Py_NotImplemented;
+        }
     }
 
     if (*wcmp == NULL || *wcmp == Py_NotImplemented) {
@@ -3102,6 +3108,7 @@
 {
     char *dest = PyMem_Malloc(size+1);
     if (dest == NULL) {
+        PyErr_NoMemory();
         return NULL;
     }
 
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index c7f48cd..cb7069d 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -816,9 +816,9 @@
 }
 
 static PyObject*
-element_sizeof(PyObject* _self, PyObject* args)
+element_sizeof(PyObject* myself, PyObject* args)
 {
-    ElementObject *self = (ElementObject*)_self;
+    ElementObject *self = (ElementObject*)myself;
     Py_ssize_t result = sizeof(ElementObject);
     if (self->extra) {
         result += sizeof(ElementObjectExtra);
diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c
index 1db021a..36c06d1 100644
--- a/Modules/_gdbmmodule.c
+++ b/Modules/_gdbmmodule.c
@@ -290,20 +290,29 @@
 {
     dbmobject *dp = (dbmobject *)self;
     datum key;
+    Py_ssize_t size;
 
     if ((dp)->di_dbm == NULL) {
         PyErr_SetString(DbmError,
                         "GDBM object has already been closed");
         return -1;
     }
-    if (!PyBytes_Check(arg)) {
+    if (PyUnicode_Check(arg)) {
+        key.dptr = PyUnicode_AsUTF8AndSize(arg, &size);
+        key.dsize = size;
+        if (key.dptr == NULL)
+            return -1;
+    }
+    else if (!PyBytes_Check(arg)) {
         PyErr_Format(PyExc_TypeError,
-                     "gdbm key must be bytes, not %.100s",
+                     "gdbm key must be bytes or string, not %.100s",
                      arg->ob_type->tp_name);
         return -1;
     }
-    key.dptr = PyBytes_AS_STRING(arg);
-    key.dsize = PyBytes_GET_SIZE(arg);
+    else {
+        key.dptr = PyBytes_AS_STRING(arg);
+        key.dsize = PyBytes_GET_SIZE(arg);
+    }
     return gdbm_exists(dp->di_dbm, key);
 }
 
diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c
index c8db5ed..1a11bb5 100644
--- a/Modules/_hashopenssl.c
+++ b/Modules/_hashopenssl.c
@@ -20,8 +20,10 @@
 
 /* EVP is the preferred interface to hashing in OpenSSL */
 #include <openssl/evp.h>
+#include <openssl/hmac.h>
 /* We use the object interface to discover what hashes OpenSSL supports. */
 #include <openssl/objects.h>
+#include "openssl/err.h"
 
 #define MUNCH_SIZE INT_MAX
 
@@ -467,6 +469,227 @@
 }
 
 
+
+#if (OPENSSL_VERSION_NUMBER >= 0x10000000 && !defined(OPENSSL_NO_HMAC) \
+     && !defined(OPENSSL_NO_SHA))
+
+#define PY_PBKDF2_HMAC 1
+
+/* Improved implementation of PKCS5_PBKDF2_HMAC()
+ *
+ * PKCS5_PBKDF2_HMAC_fast() hashes the password exactly one time instead of
+ * `iter` times. Today (2013) the iteration count is typically 100,000 or
+ * more. The improved algorithm is not subject to a Denial-of-Service
+ * vulnerability with overly large passwords.
+ *
+ * Also OpenSSL < 1.0 don't provide PKCS5_PBKDF2_HMAC(), only
+ * PKCS5_PBKDF2_SHA1.
+ */
+static int
+PKCS5_PBKDF2_HMAC_fast(const char *pass, int passlen,
+                       const unsigned char *salt, int saltlen,
+                       int iter, const EVP_MD *digest,
+                       int keylen, unsigned char *out)
+{
+    unsigned char digtmp[EVP_MAX_MD_SIZE], *p, itmp[4];
+    int cplen, j, k, tkeylen, mdlen;
+    unsigned long i = 1;
+    HMAC_CTX hctx_tpl, hctx;
+
+    mdlen = EVP_MD_size(digest);
+    if (mdlen < 0)
+        return 0;
+
+    HMAC_CTX_init(&hctx_tpl);
+    HMAC_CTX_init(&hctx);
+    p = out;
+    tkeylen = keylen;
+    if (!pass)
+        passlen = 0;
+    else if(passlen == -1)
+        passlen = strlen(pass);
+    if (!HMAC_Init_ex(&hctx_tpl, pass, passlen, digest, NULL)) {
+        HMAC_CTX_cleanup(&hctx_tpl);
+        return 0;
+    }
+    while(tkeylen) {
+        if(tkeylen > mdlen)
+            cplen = mdlen;
+        else
+            cplen = tkeylen;
+        /* We are unlikely to ever use more than 256 blocks (5120 bits!)
+         * but just in case...
+         */
+        itmp[0] = (unsigned char)((i >> 24) & 0xff);
+        itmp[1] = (unsigned char)((i >> 16) & 0xff);
+        itmp[2] = (unsigned char)((i >> 8) & 0xff);
+        itmp[3] = (unsigned char)(i & 0xff);
+        if (!HMAC_CTX_copy(&hctx, &hctx_tpl)) {
+            HMAC_CTX_cleanup(&hctx_tpl);
+            return 0;
+        }
+        if (!HMAC_Update(&hctx, salt, saltlen)
+                || !HMAC_Update(&hctx, itmp, 4)
+                || !HMAC_Final(&hctx, digtmp, NULL)) {
+            HMAC_CTX_cleanup(&hctx_tpl);
+            HMAC_CTX_cleanup(&hctx);
+            return 0;
+        }
+        HMAC_CTX_cleanup(&hctx);
+        memcpy(p, digtmp, cplen);
+        for (j = 1; j < iter; j++) {
+            if (!HMAC_CTX_copy(&hctx, &hctx_tpl)) {
+                HMAC_CTX_cleanup(&hctx_tpl);
+                return 0;
+            }
+            if (!HMAC_Update(&hctx, digtmp, mdlen)
+                    || !HMAC_Final(&hctx, digtmp, NULL)) {
+                HMAC_CTX_cleanup(&hctx_tpl);
+                HMAC_CTX_cleanup(&hctx);
+                return 0;
+            }
+            HMAC_CTX_cleanup(&hctx);
+            for (k = 0; k < cplen; k++) {
+                p[k] ^= digtmp[k];
+            }
+        }
+        tkeylen-= cplen;
+        i++;
+        p+= cplen;
+    }
+    HMAC_CTX_cleanup(&hctx_tpl);
+    return 1;
+}
+
+static PyObject *
+_setException(PyObject *exc)
+{
+    unsigned long errcode;
+    const char *lib, *func, *reason;
+
+    errcode = ERR_peek_last_error();
+    if (!errcode) {
+        PyErr_SetString(exc, "unknown reasons");
+        return NULL;
+    }
+    ERR_clear_error();
+
+    lib = ERR_lib_error_string(errcode);
+    func = ERR_func_error_string(errcode);
+    reason = ERR_reason_error_string(errcode);
+
+    if (lib && func) {
+        PyErr_Format(exc, "[%s: %s] %s", lib, func, reason);
+    }
+    else if (lib) {
+        PyErr_Format(exc, "[%s] %s", lib, reason);
+    }
+    else {
+        PyErr_SetString(exc, reason);
+    }
+    return NULL;
+}
+
+PyDoc_STRVAR(pbkdf2_hmac__doc__,
+"pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None) -> key\n\
+\n\
+Password based key derivation function 2 (PKCS #5 v2.0) with HMAC as\n\
+pseudorandom function.");
+
+static PyObject *
+pbkdf2_hmac(PyObject *self, PyObject *args, PyObject *kwdict)
+{
+    static char *kwlist[] = {"hash_name", "password", "salt", "iterations",
+                             "dklen", NULL};
+    PyObject *key_obj = NULL, *dklen_obj = Py_None;
+    char *name, *key;
+    Py_buffer password, salt;
+    long iterations, dklen;
+    int retval;
+    const EVP_MD *digest;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwdict, "sy*y*l|O:pbkdf2_hmac",
+                                     kwlist, &name, &password, &salt,
+                                     &iterations, &dklen_obj)) {
+        return NULL;
+    }
+
+    digest = EVP_get_digestbyname(name);
+    if (digest == NULL) {
+        PyErr_SetString(PyExc_ValueError, "unsupported hash type");
+        goto end;
+    }
+
+    if (password.len > INT_MAX) {
+        PyErr_SetString(PyExc_OverflowError,
+                        "password is too long.");
+        goto end;
+    }
+
+    if (salt.len > INT_MAX) {
+        PyErr_SetString(PyExc_OverflowError,
+                        "salt is too long.");
+        goto end;
+    }
+
+    if (iterations < 1) {
+        PyErr_SetString(PyExc_ValueError,
+                        "iteration value must be greater than 0.");
+        goto end;
+    }
+    if (iterations > INT_MAX) {
+        PyErr_SetString(PyExc_OverflowError,
+                        "iteration value is too great.");
+        goto end;
+    }
+
+    if (dklen_obj == Py_None) {
+        dklen = EVP_MD_size(digest);
+    } else {
+        dklen = PyLong_AsLong(dklen_obj);
+        if ((dklen == -1) && PyErr_Occurred()) {
+            goto end;
+        }
+    }
+    if (dklen < 1) {
+        PyErr_SetString(PyExc_ValueError,
+                        "key length must be greater than 0.");
+        goto end;
+    }
+    if (dklen > INT_MAX) {
+        /* INT_MAX is always smaller than dkLen max (2^32 - 1) * hLen */
+        PyErr_SetString(PyExc_OverflowError,
+                        "key length is too great.");
+        goto end;
+    }
+
+    key_obj = PyBytes_FromStringAndSize(NULL, dklen);
+    if (key_obj == NULL) {
+        goto end;
+    }
+    key = PyBytes_AS_STRING(key_obj);
+
+    Py_BEGIN_ALLOW_THREADS
+    retval = PKCS5_PBKDF2_HMAC_fast((char*)password.buf, password.len,
+                                    (unsigned char *)salt.buf, salt.len,
+                                    iterations, digest, dklen,
+                                    (unsigned char *)key);
+    Py_END_ALLOW_THREADS
+
+    if (!retval) {
+        Py_CLEAR(key_obj);
+        _setException(PyExc_ValueError);
+        goto end;
+    }
+
+  end:
+    PyBuffer_Release(&password);
+    PyBuffer_Release(&salt);
+    return key_obj;
+}
+
+#endif
+
 /* State for our callback function so that it can accumulate a result. */
 typedef struct _internal_name_mapper_state {
     PyObject *set;
@@ -495,9 +718,9 @@
         state->error = 1;
     } else {
         if (PySet_Add(state->set, py_name) != 0) {
-            Py_DECREF(py_name);
             state->error = 1;
         }
+        Py_DECREF(py_name);
     }
 }
 
@@ -588,6 +811,10 @@
 
 static struct PyMethodDef EVP_functions[] = {
     {"new", (PyCFunction)EVP_new, METH_VARARGS|METH_KEYWORDS, EVP_new__doc__},
+#ifdef PY_PBKDF2_HMAC
+    {"pbkdf2_hmac", (PyCFunction)pbkdf2_hmac, METH_VARARGS|METH_KEYWORDS,
+     pbkdf2_hmac__doc__},
+#endif
     CONSTRUCTOR_METH_DEF(md5),
     CONSTRUCTOR_METH_DEF(sha1),
 #ifdef _OPENSSL_SUPPORTS_SHA2
@@ -621,6 +848,7 @@
     PyObject *m, *openssl_md_meth_names;
 
     OpenSSL_add_all_digests();
+    ERR_load_crypto_strings();
 
     /* TODO build EVP_functions openssl_* entries dynamically based
      * on what hashes are supported rather than listing many
@@ -645,10 +873,8 @@
         return NULL;
     }
 
-#if HASH_OBJ_CONSTRUCTOR
-    Py_INCREF(&EVPtype);
+    Py_INCREF((PyObject *)&EVPtype);
     PyModule_AddObject(m, "HASH", (PyObject *)&EVPtype);
-#endif
 
     /* these constants are used by the convenience constructors */
     INIT_CONSTRUCTOR_CONSTANTS(md5);
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
index 14457e8..eb701d4 100644
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -546,7 +546,7 @@
         }
         Py_CLEAR(state->locale_module);
     }
-    mod = PyImport_ImportModule("locale");
+    mod = PyImport_ImportModule("_bootlocale");
     if (mod == NULL)
         return NULL;
     state->locale_module = PyWeakref_NewRef(mod, NULL);
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
index 6fe5d58..a04b48d 100644
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -52,7 +52,6 @@
     Py_buffer buf;
     Py_ssize_t len;
     PyObject *data;
-    _Py_IDENTIFIER(read);
 
     if (!PyArg_ParseTuple(args, "w*:readinto", &buf)) {
         return NULL;
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index 27995e5..0e1e709 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -59,6 +59,8 @@
 
 PyTypeObject PyFileIO_Type;
 
+_Py_IDENTIFIER(name);
+
 #define PyFileIO_Check(op) (PyObject_TypeCheck((op), &PyFileIO_Type))
 
 int
@@ -427,7 +429,7 @@
     _setmode(self->fd, O_BINARY);
 #endif
 
-    if (PyObject_SetAttrString((PyObject *)self, "name", nameobj) < 0)
+    if (_PyObject_SetAttrId((PyObject *)self, &PyId_name, nameobj) < 0)
         goto error;
 
     if (self->appending) {
@@ -1036,7 +1038,6 @@
 static PyObject *
 fileio_repr(fileio *self)
 {
-    _Py_IDENTIFIER(name);
     PyObject *nameobj, *res;
 
     if (self->fd < 0)
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index ae188dd..1b7cb0f 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -1,9 +1,9 @@
 /*
     An implementation of the I/O abstract base classes hierarchy
     as defined by PEP 3116 - "New I/O"
-    
+
     Classes defined here: IOBase, RawIOBase.
-    
+
     Written by Amaury Forgeot d'Arc and Antoine Pitrou
 */
 
@@ -19,7 +19,7 @@
 
 typedef struct {
     PyObject_HEAD
-    
+
     PyObject *dict;
     PyObject *weakreflist;
 } iobase;
@@ -63,6 +63,8 @@
 #define IS_CLOSED(self) \
     _PyObject_HasAttrId(self, &PyId___IOBase_closed)
 
+_Py_IDENTIFIER(read);
+
 /* Internal methods */
 static PyObject *
 iobase_unsupported(const char *message)
@@ -180,17 +182,21 @@
 iobase_close(PyObject *self, PyObject *args)
 {
     PyObject *res;
-    _Py_IDENTIFIER(__IOBase_closed);
 
     if (IS_CLOSED(self))
         Py_RETURN_NONE;
 
     res = PyObject_CallMethodObjArgs(self, _PyIO_str_flush, NULL);
-    _PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True);
-    if (res == NULL) {
+
+    if (_PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True) < 0) {
+        Py_XDECREF(res);
         return NULL;
     }
-    Py_XDECREF(res);
+
+    if (res == NULL)
+        return NULL;
+
+    Py_DECREF(res);
     Py_RETURN_NONE;
 }
 
@@ -449,7 +455,6 @@
     int has_peek = 0;
     PyObject *buffer, *result;
     Py_ssize_t old_size = -1;
-    _Py_IDENTIFIER(read);
     _Py_IDENTIFIER(peek);
 
     if (!PyArg_ParseTuple(args, "|O&:readline", &_PyIO_ConvertSsize_t, &limit)) {
@@ -530,7 +535,10 @@
         }
 
         old_size = PyByteArray_GET_SIZE(buffer);
-        PyByteArray_Resize(buffer, old_size + PyBytes_GET_SIZE(b));
+        if (PyByteArray_Resize(buffer, old_size + PyBytes_GET_SIZE(b)) < 0) {
+            Py_DECREF(b);
+            goto fail;
+        }
         memcpy(PyByteArray_AS_STRING(buffer) + old_size,
                PyBytes_AS_STRING(b), PyBytes_GET_SIZE(b));
 
@@ -835,12 +843,11 @@
     int r;
     PyObject *chunks = PyList_New(0);
     PyObject *result;
-    
+
     if (chunks == NULL)
         return NULL;
 
     while (1) {
-        _Py_IDENTIFIER(read);
         PyObject *data = _PyObject_CallMethodId(self, &PyId_read,
                                                 "i", DEFAULT_BUFFER_SIZE);
         if (!data) {
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 2db37d3..fb89a17 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -293,12 +293,12 @@
 #define SEEN_ALL (SEEN_CR | SEEN_LF | SEEN_CRLF)
 
 PyObject *
-_PyIncrementalNewlineDecoder_decode(PyObject *_self,
+_PyIncrementalNewlineDecoder_decode(PyObject *myself,
                                     PyObject *input, int final)
 {
     PyObject *output;
     Py_ssize_t output_len;
-    nldecoder_object *self = (nldecoder_object *) _self;
+    nldecoder_object *self = (nldecoder_object *) myself;
 
     if (self->decoder == NULL) {
         PyErr_SetString(PyExc_ValueError,
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index b196749..400c344 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -151,8 +151,10 @@
     do { \
         if (obj == NULL) \
             goto failed; \
-        if (PyDict_SetItemString(result, key, obj) < 0) \
+        if (PyDict_SetItemString(result, key, obj) < 0) { \
+            Py_DECREF(obj); \
             goto failed; \
+        } \
         Py_DECREF(obj); \
     } while (0)
 
@@ -196,7 +198,6 @@
 
   failed:
     Py_XDECREF(result);
-    Py_XDECREF(x);
     return NULL;
 }
 
diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c
index 5d610bf..1217ed4 100644
--- a/Modules/_lzmamodule.c
+++ b/Modules/_lzmamodule.c
@@ -564,6 +564,14 @@
     return result;
 }
 
+static PyObject *
+Compressor_getstate(Compressor *self, PyObject *noargs)
+{
+    PyErr_Format(PyExc_TypeError, "cannot serialize '%s' object",
+                 Py_TYPE(self)->tp_name);
+    return NULL;
+}
+
 static int
 Compressor_init_xz(lzma_stream *lzs, int check, uint32_t preset,
                    PyObject *filterspecs)
@@ -735,6 +743,7 @@
      Compressor_compress_doc},
     {"flush", (PyCFunction)Compressor_flush, METH_NOARGS,
      Compressor_flush_doc},
+    {"__getstate__", (PyCFunction)Compressor_getstate, METH_NOARGS},
     {NULL}
 };
 
@@ -892,6 +901,14 @@
     return result;
 }
 
+static PyObject *
+Decompressor_getstate(Decompressor *self, PyObject *noargs)
+{
+    PyErr_Format(PyExc_TypeError, "cannot serialize '%s' object",
+                 Py_TYPE(self)->tp_name);
+    return NULL;
+}
+
 static int
 Decompressor_init_raw(lzma_stream *lzs, PyObject *filterspecs)
 {
@@ -1019,6 +1036,7 @@
 static PyMethodDef Decompressor_methods[] = {
     {"decompress", (PyCFunction)Decompressor_decompress, METH_VARARGS,
      Decompressor_decompress_doc},
+    {"__getstate__", (PyCFunction)Decompressor_getstate, METH_NOARGS},
     {NULL}
 };
 
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index f79fad3..75b0441 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -136,6 +136,8 @@
 /* For looking up name pairs in copyreg._extension_registry. */
 static PyObject *two_tuple = NULL;
 
+_Py_IDENTIFIER(modules);
+
 static int
 stack_underflow(void)
 {
@@ -872,18 +874,21 @@
 static int
 _Unpickler_SkipConsumed(UnpicklerObject *self)
 {
-    Py_ssize_t consumed = self->next_read_idx - self->prefetched_idx;
+    Py_ssize_t consumed;
+    PyObject *r;
 
-    if (consumed > 0) {
-        PyObject *r;
-        assert(self->peek);  /* otherwise we did something wrong */
-        /* This makes an useless copy... */
-        r = PyObject_CallFunction(self->read, "n", consumed);
-        if (r == NULL)
-            return -1;
-        Py_DECREF(r);
-        self->prefetched_idx = self->next_read_idx;
-    }
+    consumed = self->next_read_idx - self->prefetched_idx;
+    if (consumed <= 0)
+        return 0;
+
+    assert(self->peek);  /* otherwise we did something wrong */
+    /* This makes an useless copy... */
+    r = PyObject_CallFunction(self->read, "n", consumed);
+    if (r == NULL)
+        return -1;
+    Py_DECREF(r);
+
+    self->prefetched_idx = self->next_read_idx;
     return 0;
 }
 
@@ -1360,7 +1365,7 @@
         return NULL;
 
   search:
-    modules_dict = PySys_GetObject("modules");
+    modules_dict = _PySys_GetObjectId(&PyId_modules);
     if (modules_dict == NULL) {
         PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules");
         return NULL;
@@ -5427,9 +5432,6 @@
         break;                  /* and we are done! */
     }
 
-    if (_Unpickler_SkipConsumed(self) < 0)
-        return NULL;
-
     /* XXX: It is not clear what this is actually for. */
     if ((err = PyErr_Occurred())) {
         if (err == PyExc_EOFError) {
@@ -5438,6 +5440,9 @@
         return NULL;
     }
 
+    if (_Unpickler_SkipConsumed(self) < 0)
+        return NULL;
+
     PDATA_POP(self->stack, value);
     return value;
 }
@@ -5545,7 +5550,7 @@
         }
     }
 
-    modules_dict = PySys_GetObject("modules");
+    modules_dict = _PySys_GetObjectId(&PyId_modules);
     if (modules_dict == NULL) {
         PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules");
         return NULL;
diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c
index 4e6352b..71127d0 100644
--- a/Modules/_sha3/sha3module.c
+++ b/Modules/_sha3/sha3module.c
@@ -576,10 +576,18 @@
 PyMODINIT_FUNC
 PyInit__sha3(void)
 {
+    PyObject *m;
+
     Py_TYPE(&SHA3type) = &PyType_Type;
     if (PyType_Ready(&SHA3type) < 0) {
         return NULL;
     }
 
-    return PyModule_Create(&_SHA3module);
+    m = PyModule_Create(&_SHA3module);
+    if (m == NULL)
+        return NULL;
+
+    Py_INCREF((PyObject *)&SHA3type);
+    PyModule_AddObject(m, "SHA3Type", (PyObject *)&SHA3type);
+    return m;
 }
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 2b12f8b..7365a88 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -41,6 +41,8 @@
 #endif
 #endif
 
+_Py_IDENTIFIER(cursor);
+
 static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level);
 static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self);
 
@@ -1229,9 +1231,8 @@
         return NULL;
     }
 
-    if (!PyArg_ParseTuple(args, "O", &sql)) {
+    if (!PyArg_ParseTuple(args, "O", &sql))
         return NULL;
-    }
 
     _pysqlite_drop_unused_statement_references(self);
 
@@ -1247,7 +1248,6 @@
     statement->in_weakreflist = NULL;
 
     rc = pysqlite_statement_create(statement, self, sql);
-
     if (rc != SQLITE_OK) {
         if (rc == PYSQLITE_TOO_MUCH_SQL) {
             PyErr_SetString(pysqlite_Warning, "You can only execute one statement at a time.");
@@ -1257,25 +1257,23 @@
             (void)pysqlite_statement_reset(statement);
             _pysqlite_seterror(self->db, NULL);
         }
-
-        Py_CLEAR(statement);
-    } else {
-        weakref = PyWeakref_NewRef((PyObject*)statement, NULL);
-        if (!weakref) {
-            Py_CLEAR(statement);
-            goto error;
-        }
-
-        if (PyList_Append(self->statements, weakref) != 0) {
-            Py_CLEAR(weakref);
-            goto error;
-        }
-
-        Py_DECREF(weakref);
+        goto error;
     }
 
-error:
+    weakref = PyWeakref_NewRef((PyObject*)statement, NULL);
+    if (weakref == NULL)
+        goto error;
+    if (PyList_Append(self->statements, weakref) != 0) {
+        Py_DECREF(weakref);
+        goto error;
+    }
+    Py_DECREF(weakref);
+
     return (PyObject*)statement;
+
+error:
+    Py_DECREF(statement);
+    return NULL;
 }
 
 PyObject* pysqlite_connection_execute(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
@@ -1283,7 +1281,6 @@
     PyObject* cursor = 0;
     PyObject* result = 0;
     PyObject* method = 0;
-    _Py_IDENTIFIER(cursor);
 
     cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, "");
     if (!cursor) {
@@ -1313,7 +1310,6 @@
     PyObject* cursor = 0;
     PyObject* result = 0;
     PyObject* method = 0;
-    _Py_IDENTIFIER(cursor);
 
     cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, "");
     if (!cursor) {
@@ -1343,7 +1339,6 @@
     PyObject* cursor = 0;
     PyObject* result = 0;
     PyObject* method = 0;
-    _Py_IDENTIFIER(cursor);
 
     cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, "");
     if (!cursor) {
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c
index bf4bbb4..8d10890 100644
--- a/Modules/_sqlite/cursor.c
+++ b/Modules/_sqlite/cursor.c
@@ -871,10 +871,15 @@
     }
 
     next_row_tuple = self->next_row;
+    assert(next_row_tuple != NULL);
     self->next_row = NULL;
 
     if (self->row_factory != Py_None) {
         next_row = PyObject_CallFunction(self->row_factory, "OO", self, next_row_tuple);
+        if (next_row == NULL) {
+            self->next_row = next_row_tuple;
+            return NULL;
+        }
         Py_DECREF(next_row_tuple);
     } else {
         next_row = next_row_tuple;
@@ -891,6 +896,12 @@
 
         if (rc == SQLITE_ROW) {
             self->next_row = _pysqlite_fetch_one_row(self);
+            if (self->next_row == NULL) {
+                (void)pysqlite_statement_reset(self->statement);
+                Py_DECREF(next_row);
+                _pysqlite_seterror(self->connection->db, NULL);
+                return NULL;
+            }
         }
     }
 
diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c
index 36beef1..b056d8b 100644
--- a/Modules/_sqlite/statement.c
+++ b/Modules/_sqlite/statement.c
@@ -248,7 +248,7 @@
                 current_param = PyDict_GetItemString(parameters, binding_name);
                 Py_XINCREF(current_param);
             } else {
-                current_param = PyMapping_GetItemString(parameters, (char*)binding_name);
+                current_param = PyMapping_GetItemString(parameters, binding_name);
             }
             if (!current_param) {
                 PyErr_Format(pysqlite_ProgrammingError, "You did not supply a value for binding %d.", i);
diff --git a/Modules/_sre.c b/Modules/_sre.c
index 99c3cd5..2d6961b 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -34,8 +34,6 @@
  * other compatibility work.
  */
 
-#ifndef SRE_RECURSIVE
-
 static char copyright[] =
     " SRE 2.2.2 Copyright (c) 1997-2002 by Secret Labs AB ";
 
@@ -46,6 +44,8 @@
 
 #include "sre.h"
 
+#define SRE_CODE_BITS (8 * sizeof(SRE_CODE))
+
 #include <ctype.h>
 
 /* name of this module, minus the leading underscore */
@@ -58,9 +58,6 @@
 /* defining this one enables tracing */
 #undef VERBOSE
 
-/* defining this enables unicode support (default under 1.6a1 and later) */
-#define HAVE_UNICODE
-
 /* -------------------------------------------------------------------- */
 /* optional features */
 
@@ -146,9 +143,6 @@
 /* locale-specific character predicates */
 /* !(c & ~N) == (c < N+1) for any unsigned c, this avoids
  * warnings when c's type supports only numbers < N+1 */
-#define SRE_LOC_IS_DIGIT(ch) (!((ch) & ~255) ? isdigit((ch)) : 0)
-#define SRE_LOC_IS_SPACE(ch) (!((ch) & ~255) ? isspace((ch)) : 0)
-#define SRE_LOC_IS_LINEBREAK(ch) ((ch) == '\n')
 #define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? isalnum((ch)) : 0)
 #define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_')
 
@@ -252,1355 +246,24 @@
 
 /* generate 8-bit version */
 
-#define SRE_CHAR unsigned char
-#define SRE_CHARGET(state, buf, index) ((unsigned char*)buf)[index]
-#define SRE_AT sre_at
-#define SRE_COUNT sre_count
-#define SRE_CHARSET sre_charset
-#define SRE_INFO sre_info
-#define SRE_MATCH sre_match
-#define SRE_MATCH_CONTEXT sre_match_context
-#define SRE_SEARCH sre_search
+#define SRE_CHAR Py_UCS1
+#define SIZEOF_SRE_CHAR 1
+#define SRE(F) sre_ucs1_##F
+#include "sre_lib.h"
 
-#define SRE_RECURSIVE
-#include "_sre.c"
-#undef SRE_RECURSIVE
+/* generate 16-bit unicode version */
 
-#undef SRE_SEARCH
-#undef SRE_MATCH
-#undef SRE_MATCH_CONTEXT
-#undef SRE_INFO
-#undef SRE_CHARSET
-#undef SRE_COUNT
-#undef SRE_AT
-#undef SRE_CHAR
-#undef SRE_CHARGET
+#define SRE_CHAR Py_UCS2
+#define SIZEOF_SRE_CHAR 2
+#define SRE(F) sre_ucs2_##F
+#include "sre_lib.h"
 
-/* generate 8/16/32-bit unicode version */
+/* generate 32-bit unicode version */
 
-#define SRE_CHAR void
-#define SRE_CHARGET(state, buf, index) \
-    ((state->charsize==1) ? ((Py_UCS1*)buf)[index] : \
-     (state->charsize==2) ? ((Py_UCS2*)buf)[index] : \
-     ((Py_UCS4*)buf)[index])
-#define SRE_AT sre_uat
-#define SRE_COUNT sre_ucount
-#define SRE_CHARSET sre_ucharset
-#define SRE_INFO sre_uinfo
-#define SRE_MATCH sre_umatch
-#define SRE_MATCH_CONTEXT sre_umatch_context
-#define SRE_SEARCH sre_usearch
-
-#endif /* SRE_RECURSIVE */
-
-/* -------------------------------------------------------------------- */
-/* String matching engine */
-
-/* the following section is compiled twice, with different character
-   settings */
-
-LOCAL(int)
-SRE_AT(SRE_STATE* state, char* ptr, SRE_CODE at)
-{
-    /* check if pointer is at given position */
-
-    Py_ssize_t thisp, thatp;
-
-    switch (at) {
-
-    case SRE_AT_BEGINNING:
-    case SRE_AT_BEGINNING_STRING:
-        return ((void*) ptr == state->beginning);
-
-    case SRE_AT_BEGINNING_LINE:
-        return ((void*) ptr == state->beginning ||
-                SRE_IS_LINEBREAK((int) SRE_CHARGET(state, ptr, -1)));
-
-    case SRE_AT_END:
-        return (((void*) (ptr+state->charsize) == state->end &&
-                 SRE_IS_LINEBREAK((int) SRE_CHARGET(state, ptr, 0))) ||
-                ((void*) ptr == state->end));
-
-    case SRE_AT_END_LINE:
-        return ((void*) ptr == state->end ||
-                SRE_IS_LINEBREAK((int) SRE_CHARGET(state, ptr, 0)));
-
-    case SRE_AT_END_STRING:
-        return ((void*) ptr == state->end);
-
-    case SRE_AT_BOUNDARY:
-        if (state->beginning == state->end)
-            return 0;
-        thatp = ((void*) ptr > state->beginning) ?
-            SRE_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
-        thisp = ((void*) ptr < state->end) ?
-            SRE_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
-        return thisp != thatp;
-
-    case SRE_AT_NON_BOUNDARY:
-        if (state->beginning == state->end)
-            return 0;
-        thatp = ((void*) ptr > state->beginning) ?
-            SRE_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
-        thisp = ((void*) ptr < state->end) ?
-            SRE_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
-        return thisp == thatp;
-
-    case SRE_AT_LOC_BOUNDARY:
-        if (state->beginning == state->end)
-            return 0;
-        thatp = ((void*) ptr > state->beginning) ?
-            SRE_LOC_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
-        thisp = ((void*) ptr < state->end) ?
-            SRE_LOC_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
-        return thisp != thatp;
-
-    case SRE_AT_LOC_NON_BOUNDARY:
-        if (state->beginning == state->end)
-            return 0;
-        thatp = ((void*) ptr > state->beginning) ?
-            SRE_LOC_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
-        thisp = ((void*) ptr < state->end) ?
-            SRE_LOC_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
-        return thisp == thatp;
-
-    case SRE_AT_UNI_BOUNDARY:
-        if (state->beginning == state->end)
-            return 0;
-        thatp = ((void*) ptr > state->beginning) ?
-            SRE_UNI_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
-        thisp = ((void*) ptr < state->end) ?
-            SRE_UNI_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
-        return thisp != thatp;
-
-    case SRE_AT_UNI_NON_BOUNDARY:
-        if (state->beginning == state->end)
-            return 0;
-        thatp = ((void*) ptr > state->beginning) ?
-            SRE_UNI_IS_WORD((int) SRE_CHARGET(state, ptr, -1)) : 0;
-        thisp = ((void*) ptr < state->end) ?
-            SRE_UNI_IS_WORD((int) SRE_CHARGET(state, ptr, 0)) : 0;
-        return thisp == thatp;
-
-    }
-
-    return 0;
-}
-
-LOCAL(int)
-SRE_CHARSET(SRE_CODE* set, SRE_CODE ch)
-{
-    /* check if character is a member of the given set */
-
-    int ok = 1;
-
-    for (;;) {
-        switch (*set++) {
-
-        case SRE_OP_FAILURE:
-            return !ok;
-
-        case SRE_OP_LITERAL:
-            /* <LITERAL> <code> */
-            if (ch == set[0])
-                return ok;
-            set++;
-            break;
-
-        case SRE_OP_CATEGORY:
-            /* <CATEGORY> <code> */
-            if (sre_category(set[0], (int) ch))
-                return ok;
-            set += 1;
-            break;
-
-        case SRE_OP_CHARSET:
-            if (sizeof(SRE_CODE) == 2) {
-                /* <CHARSET> <bitmap> (16 bits per code word) */
-                if (ch < 256 && (set[ch >> 4] & (1 << (ch & 15))))
-                    return ok;
-                set += 16;
-            }
-            else {
-                /* <CHARSET> <bitmap> (32 bits per code word) */
-                if (ch < 256 && (set[ch >> 5] & (1u << (ch & 31))))
-                    return ok;
-                set += 8;
-            }
-            break;
-
-        case SRE_OP_RANGE:
-            /* <RANGE> <lower> <upper> */
-            if (set[0] <= ch && ch <= set[1])
-                return ok;
-            set += 2;
-            break;
-
-        case SRE_OP_NEGATE:
-            ok = !ok;
-            break;
-
-        case SRE_OP_BIGCHARSET:
-            /* <BIGCHARSET> <blockcount> <256 blockindices> <blocks> */
-        {
-            Py_ssize_t count, block;
-            count = *(set++);
-
-            if (sizeof(SRE_CODE) == 2) {
-                block = ((char*)set)[ch >> 8];
-                set += 128;
-                if (set[block*16 + ((ch & 255)>>4)] & (1 << (ch & 15)))
-                    return ok;
-                set += count*16;
-            }
-            else {
-                /* !(c & ~N) == (c < N+1) for any unsigned c, this avoids
-                 * warnings when c's type supports only numbers < N+1 */
-                if (!(ch & ~65535))
-                    block = ((char*)set)[ch >> 8];
-                else
-                    block = -1;
-                set += 64;
-                if (block >=0 &&
-                    (set[block*8 + ((ch & 255)>>5)] & (1u << (ch & 31))))
-                    return ok;
-                set += count*8;
-            }
-            break;
-        }
-
-        default:
-            /* internal error -- there's not much we can do about it
-               here, so let's just pretend it didn't match... */
-            return 0;
-        }
-    }
-}
-
-LOCAL(Py_ssize_t) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern);
-
-LOCAL(Py_ssize_t)
-SRE_COUNT(SRE_STATE* state, SRE_CODE* pattern, Py_ssize_t maxcount)
-{
-    SRE_CODE chr;
-    char* ptr = (char *)state->ptr;
-    char* end = (char *)state->end;
-    Py_ssize_t i;
-
-    /* adjust end */
-    if (maxcount < (end - ptr) / state->charsize && maxcount != SRE_MAXREPEAT)
-        end = ptr + maxcount*state->charsize;
-
-    switch (pattern[0]) {
-
-    case SRE_OP_IN:
-        /* repeated set */
-        TRACE(("|%p|%p|COUNT IN\n", pattern, ptr));
-        while (ptr < end &&
-               SRE_CHARSET(pattern + 2, SRE_CHARGET(state, ptr, 0)))
-            ptr += state->charsize;
-        break;
-
-    case SRE_OP_ANY:
-        /* repeated dot wildcard. */
-        TRACE(("|%p|%p|COUNT ANY\n", pattern, ptr));
-        while (ptr < end && !SRE_IS_LINEBREAK(SRE_CHARGET(state, ptr, 0)))
-            ptr += state->charsize;
-        break;
-
-    case SRE_OP_ANY_ALL:
-        /* repeated dot wildcard.  skip to the end of the target
-           string, and backtrack from there */
-        TRACE(("|%p|%p|COUNT ANY_ALL\n", pattern, ptr));
-        ptr = end;
-        break;
-
-    case SRE_OP_LITERAL:
-        /* repeated literal */
-        chr = pattern[1];
-        TRACE(("|%p|%p|COUNT LITERAL %d\n", pattern, ptr, chr));
-        while (ptr < end && (SRE_CODE) SRE_CHARGET(state, ptr, 0) == chr)
-            ptr += state->charsize;
-        break;
-
-    case SRE_OP_LITERAL_IGNORE:
-        /* repeated literal */
-        chr = pattern[1];
-        TRACE(("|%p|%p|COUNT LITERAL_IGNORE %d\n", pattern, ptr, chr));
-        while (ptr < end && (SRE_CODE) state->lower(SRE_CHARGET(state, ptr, 0)) == chr)
-            ptr += state->charsize;
-        break;
-
-    case SRE_OP_NOT_LITERAL:
-        /* repeated non-literal */
-        chr = pattern[1];
-        TRACE(("|%p|%p|COUNT NOT_LITERAL %d\n", pattern, ptr, chr));
-        while (ptr < end && (SRE_CODE) SRE_CHARGET(state, ptr, 0) != chr)
-            ptr += state->charsize;
-        break;
-
-    case SRE_OP_NOT_LITERAL_IGNORE:
-        /* repeated non-literal */
-        chr = pattern[1];
-        TRACE(("|%p|%p|COUNT NOT_LITERAL_IGNORE %d\n", pattern, ptr, chr));
-        while (ptr < end && (SRE_CODE) state->lower(SRE_CHARGET(state, ptr, 0)) != chr)
-            ptr += state->charsize;
-        break;
-
-    default:
-        /* repeated single character pattern */
-        TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr));
-        while ((char*) state->ptr < end) {
-            i = SRE_MATCH(state, pattern);
-            if (i < 0)
-                return i;
-            if (!i)
-                break;
-        }
-        TRACE(("|%p|%p|COUNT %" PY_FORMAT_SIZE_T "d\n", pattern, ptr,
-               ((char*)state->ptr - ptr)/state->charsize));
-        return ((char*)state->ptr - ptr)/state->charsize;
-    }
-
-    TRACE(("|%p|%p|COUNT %" PY_FORMAT_SIZE_T "d\n", pattern, ptr,
-           (ptr - (char*) state->ptr)/state->charsize));
-    return (ptr - (char*) state->ptr)/state->charsize;
-}
-
-#if 0 /* not used in this release */
-LOCAL(int)
-SRE_INFO(SRE_STATE* state, SRE_CODE* pattern)
-{
-    /* check if an SRE_OP_INFO block matches at the current position.
-       returns the number of SRE_CODE objects to skip if successful, 0
-       if no match */
-
-    char* end = state->end;
-    char* ptr = state->ptr;
-    Py_ssize_t i;
-
-    /* check minimal length */
-    if (pattern[3] && (end - ptr)/state->charsize < pattern[3])
-        return 0;
-
-    /* check known prefix */
-    if (pattern[2] & SRE_INFO_PREFIX && pattern[5] > 1) {
-        /* <length> <skip> <prefix data> <overlap data> */
-        for (i = 0; i < pattern[5]; i++)
-            if ((SRE_CODE) SRE_CHARGET(state, ptr, i) != pattern[7 + i])
-                return 0;
-        return pattern[0] + 2 * pattern[6];
-    }
-    return pattern[0];
-}
-#endif
-
-/* The macros below should be used to protect recursive SRE_MATCH()
- * calls that *failed* and do *not* return immediately (IOW, those
- * that will backtrack). Explaining:
- *
- * - Recursive SRE_MATCH() returned true: that's usually a success
- *   (besides atypical cases like ASSERT_NOT), therefore there's no
- *   reason to restore lastmark;
- *
- * - Recursive SRE_MATCH() returned false but the current SRE_MATCH()
- *   is returning to the caller: If the current SRE_MATCH() is the
- *   top function of the recursion, returning false will be a matching
- *   failure, and it doesn't matter where lastmark is pointing to.
- *   If it's *not* the top function, it will be a recursive SRE_MATCH()
- *   failure by itself, and the calling SRE_MATCH() will have to deal
- *   with the failure by the same rules explained here (it will restore
- *   lastmark by itself if necessary);
- *
- * - Recursive SRE_MATCH() returned false, and will continue the
- *   outside 'for' loop: must be protected when breaking, since the next
- *   OP could potentially depend on lastmark;
- *
- * - Recursive SRE_MATCH() returned false, and will be called again
- *   inside a local for/while loop: must be protected between each
- *   loop iteration, since the recursive SRE_MATCH() could do anything,
- *   and could potentially depend on lastmark.
- *
- * For more information, check the discussion at SF patch #712900.
- */
-#define LASTMARK_SAVE()     \
-    do { \
-        ctx->lastmark = state->lastmark; \
-        ctx->lastindex = state->lastindex; \
-    } while (0)
-#define LASTMARK_RESTORE()  \
-    do { \
-        state->lastmark = ctx->lastmark; \
-        state->lastindex = ctx->lastindex; \
-    } while (0)
-
-#define RETURN_ERROR(i) do { return i; } while(0)
-#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
-#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
-
-#define RETURN_ON_ERROR(i) \
-    do { if (i < 0) RETURN_ERROR(i); } while (0)
-#define RETURN_ON_SUCCESS(i) \
-    do { RETURN_ON_ERROR(i); if (i > 0) RETURN_SUCCESS; } while (0)
-#define RETURN_ON_FAILURE(i) \
-    do { RETURN_ON_ERROR(i); if (i == 0) RETURN_FAILURE; } while (0)
-
-#define SFY(x) #x
-
-#define DATA_STACK_ALLOC(state, type, ptr) \
-do { \
-    alloc_pos = state->data_stack_base; \
-    TRACE(("allocating %s in %" PY_FORMAT_SIZE_T "d " \
-           "(%" PY_FORMAT_SIZE_T "d)\n", \
-           SFY(type), alloc_pos, sizeof(type))); \
-    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
-        int j = data_stack_grow(state, sizeof(type)); \
-        if (j < 0) return j; \
-        if (ctx_pos != -1) \
-            DATA_STACK_LOOKUP_AT(state, SRE_MATCH_CONTEXT, ctx, ctx_pos); \
-    } \
-    ptr = (type*)(state->data_stack+alloc_pos); \
-    state->data_stack_base += sizeof(type); \
-} while (0)
-
-#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
-do { \
-    TRACE(("looking up %s at %" PY_FORMAT_SIZE_T "d\n", SFY(type), pos)); \
-    ptr = (type*)(state->data_stack+pos); \
-} while (0)
-
-#define DATA_STACK_PUSH(state, data, size) \
-do { \
-    TRACE(("copy data in %p to %" PY_FORMAT_SIZE_T "d " \
-           "(%" PY_FORMAT_SIZE_T "d)\n", \
-           data, state->data_stack_base, size)); \
-    if (size > state->data_stack_size - state->data_stack_base) { \
-        int j = data_stack_grow(state, size); \
-        if (j < 0) return j; \
-        if (ctx_pos != -1) \
-            DATA_STACK_LOOKUP_AT(state, SRE_MATCH_CONTEXT, ctx, ctx_pos); \
-    } \
-    memcpy(state->data_stack+state->data_stack_base, data, size); \
-    state->data_stack_base += size; \
-} while (0)
-
-#define DATA_STACK_POP(state, data, size, discard) \
-do { \
-    TRACE(("copy data to %p from %" PY_FORMAT_SIZE_T "d " \
-           "(%" PY_FORMAT_SIZE_T "d)\n", \
-           data, state->data_stack_base-size, size)); \
-    memcpy(data, state->data_stack+state->data_stack_base-size, size); \
-    if (discard) \
-        state->data_stack_base -= size; \
-} while (0)
-
-#define DATA_STACK_POP_DISCARD(state, size) \
-do { \
-    TRACE(("discard data from %" PY_FORMAT_SIZE_T "d " \
-           "(%" PY_FORMAT_SIZE_T "d)\n", \
-           state->data_stack_base-size, size)); \
-    state->data_stack_base -= size; \
-} while(0)
-
-#define DATA_PUSH(x) \
-    DATA_STACK_PUSH(state, (x), sizeof(*(x)))
-#define DATA_POP(x) \
-    DATA_STACK_POP(state, (x), sizeof(*(x)), 1)
-#define DATA_POP_DISCARD(x) \
-    DATA_STACK_POP_DISCARD(state, sizeof(*(x)))
-#define DATA_ALLOC(t,p) \
-    DATA_STACK_ALLOC(state, t, p)
-#define DATA_LOOKUP_AT(t,p,pos) \
-    DATA_STACK_LOOKUP_AT(state,t,p,pos)
-
-#define MARK_PUSH(lastmark) \
-    do if (lastmark > 0) { \
-        i = lastmark; /* ctx->lastmark may change if reallocated */ \
-        DATA_STACK_PUSH(state, state->mark, (i+1)*sizeof(void*)); \
-    } while (0)
-#define MARK_POP(lastmark) \
-    do if (lastmark > 0) { \
-        DATA_STACK_POP(state, state->mark, (lastmark+1)*sizeof(void*), 1); \
-    } while (0)
-#define MARK_POP_KEEP(lastmark) \
-    do if (lastmark > 0) { \
-        DATA_STACK_POP(state, state->mark, (lastmark+1)*sizeof(void*), 0); \
-    } while (0)
-#define MARK_POP_DISCARD(lastmark) \
-    do if (lastmark > 0) { \
-        DATA_STACK_POP_DISCARD(state, (lastmark+1)*sizeof(void*)); \
-    } while (0)
-
-#define JUMP_NONE            0
-#define JUMP_MAX_UNTIL_1     1
-#define JUMP_MAX_UNTIL_2     2
-#define JUMP_MAX_UNTIL_3     3
-#define JUMP_MIN_UNTIL_1     4
-#define JUMP_MIN_UNTIL_2     5
-#define JUMP_MIN_UNTIL_3     6
-#define JUMP_REPEAT          7
-#define JUMP_REPEAT_ONE_1    8
-#define JUMP_REPEAT_ONE_2    9
-#define JUMP_MIN_REPEAT_ONE  10
-#define JUMP_BRANCH          11
-#define JUMP_ASSERT          12
-#define JUMP_ASSERT_NOT      13
-
-#define DO_JUMP(jumpvalue, jumplabel, nextpattern) \
-    DATA_ALLOC(SRE_MATCH_CONTEXT, nextctx); \
-    nextctx->last_ctx_pos = ctx_pos; \
-    nextctx->jump = jumpvalue; \
-    nextctx->pattern = nextpattern; \
-    ctx_pos = alloc_pos; \
-    ctx = nextctx; \
-    goto entrance; \
-    jumplabel: \
-    while (0) /* gcc doesn't like labels at end of scopes */ \
-
-typedef struct {
-    Py_ssize_t last_ctx_pos;
-    Py_ssize_t jump;
-    char* ptr;
-    SRE_CODE* pattern;
-    Py_ssize_t count;
-    Py_ssize_t lastmark;
-    Py_ssize_t lastindex;
-    union {
-        SRE_CODE chr;
-        SRE_REPEAT* rep;
-    } u;
-} SRE_MATCH_CONTEXT;
-
-/* check if string matches the given pattern.  returns <0 for
-   error, 0 for failure, and 1 for success */
-LOCAL(Py_ssize_t)
-SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern)
-{
-    char* end = (char*)state->end;
-    Py_ssize_t alloc_pos, ctx_pos = -1;
-    Py_ssize_t i, ret = 0;
-    Py_ssize_t jump;
-    unsigned int sigcount=0;
-
-    SRE_MATCH_CONTEXT* ctx;
-    SRE_MATCH_CONTEXT* nextctx;
-
-    TRACE(("|%p|%p|ENTER\n", pattern, state->ptr));
-
-    DATA_ALLOC(SRE_MATCH_CONTEXT, ctx);
-    ctx->last_ctx_pos = -1;
-    ctx->jump = JUMP_NONE;
-    ctx->pattern = pattern;
-    ctx_pos = alloc_pos;
-
-entrance:
-
-    ctx->ptr = (char *)state->ptr;
-
-    if (ctx->pattern[0] == SRE_OP_INFO) {
-        /* optimization info block */
-        /* <INFO> <1=skip> <2=flags> <3=min> ... */
-        if (ctx->pattern[3] && (Py_uintptr_t)(end - ctx->ptr)/state->charsize < ctx->pattern[3]) {
-            TRACE(("reject (got %" PY_FORMAT_SIZE_T "d chars, "
-                   "need %" PY_FORMAT_SIZE_T "d)\n",
-                   (end - ctx->ptr)/state->charsize,
-                   (Py_ssize_t) ctx->pattern[3]));
-            RETURN_FAILURE;
-        }
-        ctx->pattern += ctx->pattern[1] + 1;
-    }
-
-    for (;;) {
-        ++sigcount;
-        if ((0 == (sigcount & 0xfff)) && PyErr_CheckSignals())
-            RETURN_ERROR(SRE_ERROR_INTERRUPTED);
-
-        switch (*ctx->pattern++) {
-
-        case SRE_OP_MARK:
-            /* set mark */
-            /* <MARK> <gid> */
-            TRACE(("|%p|%p|MARK %d\n", ctx->pattern,
-                   ctx->ptr, ctx->pattern[0]));
-            i = ctx->pattern[0];
-            if (i & 1)
-                state->lastindex = i/2 + 1;
-            if (i > state->lastmark) {
-                /* state->lastmark is the highest valid index in the
-                   state->mark array.  If it is increased by more than 1,
-                   the intervening marks must be set to NULL to signal
-                   that these marks have not been encountered. */
-                Py_ssize_t j = state->lastmark + 1;
-                while (j < i)
-                    state->mark[j++] = NULL;
-                state->lastmark = i;
-            }
-            state->mark[i] = ctx->ptr;
-            ctx->pattern++;
-            break;
-
-        case SRE_OP_LITERAL:
-            /* match literal string */
-            /* <LITERAL> <code> */
-            TRACE(("|%p|%p|LITERAL %d\n", ctx->pattern,
-                   ctx->ptr, *ctx->pattern));
-            if (ctx->ptr >= end || (SRE_CODE) SRE_CHARGET(state, ctx->ptr, 0) != ctx->pattern[0])
-                RETURN_FAILURE;
-            ctx->pattern++;
-            ctx->ptr += state->charsize;
-            break;
-
-        case SRE_OP_NOT_LITERAL:
-            /* match anything that is not literal character */
-            /* <NOT_LITERAL> <code> */
-            TRACE(("|%p|%p|NOT_LITERAL %d\n", ctx->pattern,
-                   ctx->ptr, *ctx->pattern));
-            if (ctx->ptr >= end || (SRE_CODE) SRE_CHARGET(state, ctx->ptr, 0) == ctx->pattern[0])
-                RETURN_FAILURE;
-            ctx->pattern++;
-            ctx->ptr += state->charsize;
-            break;
-
-        case SRE_OP_SUCCESS:
-            /* end of pattern */
-            TRACE(("|%p|%p|SUCCESS\n", ctx->pattern, ctx->ptr));
-            state->ptr = ctx->ptr;
-            RETURN_SUCCESS;
-
-        case SRE_OP_AT:
-            /* match at given position */
-            /* <AT> <code> */
-            TRACE(("|%p|%p|AT %d\n", ctx->pattern, ctx->ptr, *ctx->pattern));
-            if (!SRE_AT(state, ctx->ptr, *ctx->pattern))
-                RETURN_FAILURE;
-            ctx->pattern++;
-            break;
-
-        case SRE_OP_CATEGORY:
-            /* match at given category */
-            /* <CATEGORY> <code> */
-            TRACE(("|%p|%p|CATEGORY %d\n", ctx->pattern,
-                   ctx->ptr, *ctx->pattern));
-            if (ctx->ptr >= end || !sre_category(ctx->pattern[0], SRE_CHARGET(state, ctx->ptr, 0)))
-                RETURN_FAILURE;
-            ctx->pattern++;
-            ctx->ptr += state->charsize;
-            break;
-
-        case SRE_OP_ANY:
-            /* match anything (except a newline) */
-            /* <ANY> */
-            TRACE(("|%p|%p|ANY\n", ctx->pattern, ctx->ptr));
-                if (ctx->ptr >= end || SRE_IS_LINEBREAK(SRE_CHARGET(state, ctx->ptr, 0)))
-                    RETURN_FAILURE;
-            ctx->ptr += state->charsize;
-            break;
-
-        case SRE_OP_ANY_ALL:
-            /* match anything */
-            /* <ANY_ALL> */
-            TRACE(("|%p|%p|ANY_ALL\n", ctx->pattern, ctx->ptr));
-            if (ctx->ptr >= end)
-                RETURN_FAILURE;
-            ctx->ptr += state->charsize;
-            break;
-
-        case SRE_OP_IN:
-            /* match set member (or non_member) */
-            /* <IN> <skip> <set> */
-            TRACE(("|%p|%p|IN\n", ctx->pattern, ctx->ptr));
-                if (ctx->ptr >= end || !SRE_CHARSET(ctx->pattern + 1, SRE_CHARGET(state, ctx->ptr, 0)))
-                    RETURN_FAILURE;
-            ctx->pattern += ctx->pattern[0];
-            ctx->ptr += state->charsize;
-            break;
-
-        case SRE_OP_LITERAL_IGNORE:
-            TRACE(("|%p|%p|LITERAL_IGNORE %d\n",
-                   ctx->pattern, ctx->ptr, ctx->pattern[0]));
-            if (ctx->ptr >= end ||
-                state->lower(SRE_CHARGET(state, ctx->ptr, 0)) != state->lower(*ctx->pattern))
-                RETURN_FAILURE;
-            ctx->pattern++;
-            ctx->ptr += state->charsize;
-            break;
-
-        case SRE_OP_NOT_LITERAL_IGNORE:
-            TRACE(("|%p|%p|NOT_LITERAL_IGNORE %d\n",
-                   ctx->pattern, ctx->ptr, *ctx->pattern));
-            if (ctx->ptr >= end ||
-                state->lower(SRE_CHARGET(state, ctx->ptr, 0)) == state->lower(*ctx->pattern))
-                RETURN_FAILURE;
-            ctx->pattern++;
-            ctx->ptr += state->charsize;
-            break;
-
-        case SRE_OP_IN_IGNORE:
-            TRACE(("|%p|%p|IN_IGNORE\n", ctx->pattern, ctx->ptr));
-            if (ctx->ptr >= end
-                || !SRE_CHARSET(ctx->pattern+1,
-                                (SRE_CODE)state->lower(SRE_CHARGET(state, ctx->ptr, 0))))
-                RETURN_FAILURE;
-            ctx->pattern += ctx->pattern[0];
-            ctx->ptr += state->charsize;
-            break;
-
-        case SRE_OP_JUMP:
-        case SRE_OP_INFO:
-            /* jump forward */
-            /* <JUMP> <offset> */
-            TRACE(("|%p|%p|JUMP %d\n", ctx->pattern,
-                   ctx->ptr, ctx->pattern[0]));
-            ctx->pattern += ctx->pattern[0];
-            break;
-
-        case SRE_OP_BRANCH:
-            /* alternation */
-            /* <BRANCH> <0=skip> code <JUMP> ... <NULL> */
-            TRACE(("|%p|%p|BRANCH\n", ctx->pattern, ctx->ptr));
-            LASTMARK_SAVE();
-            ctx->u.rep = state->repeat;
-            if (ctx->u.rep)
-                MARK_PUSH(ctx->lastmark);
-            for (; ctx->pattern[0]; ctx->pattern += ctx->pattern[0]) {
-                if (ctx->pattern[1] == SRE_OP_LITERAL &&
-                    (ctx->ptr >= end ||
-                     (SRE_CODE) SRE_CHARGET(state, ctx->ptr, 0) != ctx->pattern[2]))
-                    continue;
-                if (ctx->pattern[1] == SRE_OP_IN &&
-                    (ctx->ptr >= end ||
-                     !SRE_CHARSET(ctx->pattern + 3, (SRE_CODE) SRE_CHARGET(state, ctx->ptr, 0))))
-                    continue;
-                state->ptr = ctx->ptr;
-                DO_JUMP(JUMP_BRANCH, jump_branch, ctx->pattern+1);
-                if (ret) {
-                    if (ctx->u.rep)
-                        MARK_POP_DISCARD(ctx->lastmark);
-                    RETURN_ON_ERROR(ret);
-                    RETURN_SUCCESS;
-                }
-                if (ctx->u.rep)
-                    MARK_POP_KEEP(ctx->lastmark);
-                LASTMARK_RESTORE();
-            }
-            if (ctx->u.rep)
-                MARK_POP_DISCARD(ctx->lastmark);
-            RETURN_FAILURE;
-
-        case SRE_OP_REPEAT_ONE:
-            /* match repeated sequence (maximizing regexp) */
-
-            /* this operator only works if the repeated item is
-               exactly one character wide, and we're not already
-               collecting backtracking points.  for other cases,
-               use the MAX_REPEAT operator */
-
-            /* <REPEAT_ONE> <skip> <1=min> <2=max> item <SUCCESS> tail */
-
-            TRACE(("|%p|%p|REPEAT_ONE %d %d\n", ctx->pattern, ctx->ptr,
-                   ctx->pattern[1], ctx->pattern[2]));
-
-            if ((Py_ssize_t) ctx->pattern[1] > (end - ctx->ptr) / state->charsize)
-                RETURN_FAILURE; /* cannot match */
-
-            state->ptr = ctx->ptr;
-
-            ret = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[2]);
-            RETURN_ON_ERROR(ret);
-            DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos);
-            ctx->count = ret;
-            ctx->ptr += state->charsize * ctx->count;
-
-            /* when we arrive here, count contains the number of
-               matches, and ctx->ptr points to the tail of the target
-               string.  check if the rest of the pattern matches,
-               and backtrack if not. */
-
-            if (ctx->count < (Py_ssize_t) ctx->pattern[1])
-                RETURN_FAILURE;
-
-            if (ctx->pattern[ctx->pattern[0]] == SRE_OP_SUCCESS) {
-                /* tail is empty.  we're finished */
-                state->ptr = ctx->ptr;
-                RETURN_SUCCESS;
-            }
-
-            LASTMARK_SAVE();
-
-            if (ctx->pattern[ctx->pattern[0]] == SRE_OP_LITERAL) {
-                /* tail starts with a literal. skip positions where
-                   the rest of the pattern cannot possibly match */
-                ctx->u.chr = ctx->pattern[ctx->pattern[0]+1];
-                for (;;) {
-                    while (ctx->count >= (Py_ssize_t) ctx->pattern[1] &&
-                           (ctx->ptr >= end ||
-                            SRE_CHARGET(state, ctx->ptr, 0) != ctx->u.chr)) {
-                        ctx->ptr -= state->charsize;
-                        ctx->count--;
-                    }
-                    if (ctx->count < (Py_ssize_t) ctx->pattern[1])
-                        break;
-                    state->ptr = ctx->ptr;
-                    DO_JUMP(JUMP_REPEAT_ONE_1, jump_repeat_one_1,
-                            ctx->pattern+ctx->pattern[0]);
-                    if (ret) {
-                        RETURN_ON_ERROR(ret);
-                        RETURN_SUCCESS;
-                    }
-
-                    LASTMARK_RESTORE();
-
-                    ctx->ptr -= state->charsize;
-                    ctx->count--;
-                }
-
-            } else {
-                /* general case */
-                while (ctx->count >= (Py_ssize_t) ctx->pattern[1]) {
-                    state->ptr = ctx->ptr;
-                    DO_JUMP(JUMP_REPEAT_ONE_2, jump_repeat_one_2,
-                            ctx->pattern+ctx->pattern[0]);
-                    if (ret) {
-                        RETURN_ON_ERROR(ret);
-                        RETURN_SUCCESS;
-                    }
-                    ctx->ptr -= state->charsize;
-                    ctx->count--;
-                    LASTMARK_RESTORE();
-                }
-            }
-            RETURN_FAILURE;
-
-        case SRE_OP_MIN_REPEAT_ONE:
-            /* match repeated sequence (minimizing regexp) */
-
-            /* this operator only works if the repeated item is
-               exactly one character wide, and we're not already
-               collecting backtracking points.  for other cases,
-               use the MIN_REPEAT operator */
-
-            /* <MIN_REPEAT_ONE> <skip> <1=min> <2=max> item <SUCCESS> tail */
-
-            TRACE(("|%p|%p|MIN_REPEAT_ONE %d %d\n", ctx->pattern, ctx->ptr,
-                   ctx->pattern[1], ctx->pattern[2]));
-
-            if ((Py_ssize_t) ctx->pattern[1] > (end - ctx->ptr) / state->charsize)
-                RETURN_FAILURE; /* cannot match */
-
-            state->ptr = ctx->ptr;
-
-            if (ctx->pattern[1] == 0)
-                ctx->count = 0;
-            else {
-                /* count using pattern min as the maximum */
-                ret = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[1]);
-                RETURN_ON_ERROR(ret);
-                DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos);
-                if (ret < (Py_ssize_t) ctx->pattern[1])
-                    /* didn't match minimum number of times */
-                    RETURN_FAILURE;
-                /* advance past minimum matches of repeat */
-                ctx->count = ret;
-                ctx->ptr += state->charsize * ctx->count;
-            }
-
-            if (ctx->pattern[ctx->pattern[0]] == SRE_OP_SUCCESS) {
-                /* tail is empty.  we're finished */
-                state->ptr = ctx->ptr;
-                RETURN_SUCCESS;
-
-            } else {
-                /* general case */
-                LASTMARK_SAVE();
-                while ((Py_ssize_t)ctx->pattern[2] == SRE_MAXREPEAT
-                       || ctx->count <= (Py_ssize_t)ctx->pattern[2]) {
-                    state->ptr = ctx->ptr;
-                    DO_JUMP(JUMP_MIN_REPEAT_ONE,jump_min_repeat_one,
-                            ctx->pattern+ctx->pattern[0]);
-                    if (ret) {
-                        RETURN_ON_ERROR(ret);
-                        RETURN_SUCCESS;
-                    }
-                    state->ptr = ctx->ptr;
-                    ret = SRE_COUNT(state, ctx->pattern+3, 1);
-                    RETURN_ON_ERROR(ret);
-                    DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos);
-                    if (ret == 0)
-                        break;
-                    assert(ret == 1);
-                    ctx->ptr += state->charsize;
-                    ctx->count++;
-                    LASTMARK_RESTORE();
-                }
-            }
-            RETURN_FAILURE;
-
-        case SRE_OP_REPEAT:
-            /* create repeat context.  all the hard work is done
-               by the UNTIL operator (MAX_UNTIL, MIN_UNTIL) */
-            /* <REPEAT> <skip> <1=min> <2=max> item <UNTIL> tail */
-            TRACE(("|%p|%p|REPEAT %d %d\n", ctx->pattern, ctx->ptr,
-                   ctx->pattern[1], ctx->pattern[2]));
-
-            /* install new repeat context */
-            ctx->u.rep = (SRE_REPEAT*) PyObject_MALLOC(sizeof(*ctx->u.rep));
-            if (!ctx->u.rep) {
-                PyErr_NoMemory();
-                RETURN_FAILURE;
-            }
-            ctx->u.rep->count = -1;
-            ctx->u.rep->pattern = ctx->pattern;
-            ctx->u.rep->prev = state->repeat;
-            ctx->u.rep->last_ptr = NULL;
-            state->repeat = ctx->u.rep;
-
-            state->ptr = ctx->ptr;
-            DO_JUMP(JUMP_REPEAT, jump_repeat, ctx->pattern+ctx->pattern[0]);
-            state->repeat = ctx->u.rep->prev;
-            PyObject_FREE(ctx->u.rep);
-
-            if (ret) {
-                RETURN_ON_ERROR(ret);
-                RETURN_SUCCESS;
-            }
-            RETURN_FAILURE;
-
-        case SRE_OP_MAX_UNTIL:
-            /* maximizing repeat */
-            /* <REPEAT> <skip> <1=min> <2=max> item <MAX_UNTIL> tail */
-
-            /* FIXME: we probably need to deal with zero-width
-               matches in here... */
-
-            ctx->u.rep = state->repeat;
-            if (!ctx->u.rep)
-                RETURN_ERROR(SRE_ERROR_STATE);
-
-            state->ptr = ctx->ptr;
-
-            ctx->count = ctx->u.rep->count+1;
-
-            TRACE(("|%p|%p|MAX_UNTIL %" PY_FORMAT_SIZE_T "d\n", ctx->pattern,
-                   ctx->ptr, ctx->count));
-
-            if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
-                /* not enough matches */
-                ctx->u.rep->count = ctx->count;
-                DO_JUMP(JUMP_MAX_UNTIL_1, jump_max_until_1,
-                        ctx->u.rep->pattern+3);
-                if (ret) {
-                    RETURN_ON_ERROR(ret);
-                    RETURN_SUCCESS;
-                }
-                ctx->u.rep->count = ctx->count-1;
-                state->ptr = ctx->ptr;
-                RETURN_FAILURE;
-            }
-
-            if ((ctx->count < (Py_ssize_t) ctx->u.rep->pattern[2] ||
-                ctx->u.rep->pattern[2] == SRE_MAXREPEAT) &&
-                state->ptr != ctx->u.rep->last_ptr) {
-                /* we may have enough matches, but if we can
-                   match another item, do so */
-                ctx->u.rep->count = ctx->count;
-                LASTMARK_SAVE();
-                MARK_PUSH(ctx->lastmark);
-                /* zero-width match protection */
-                DATA_PUSH(&ctx->u.rep->last_ptr);
-                ctx->u.rep->last_ptr = state->ptr;
-                DO_JUMP(JUMP_MAX_UNTIL_2, jump_max_until_2,
-                        ctx->u.rep->pattern+3);
-                DATA_POP(&ctx->u.rep->last_ptr);
-                if (ret) {
-                    MARK_POP_DISCARD(ctx->lastmark);
-                    RETURN_ON_ERROR(ret);
-                    RETURN_SUCCESS;
-                }
-                MARK_POP(ctx->lastmark);
-                LASTMARK_RESTORE();
-                ctx->u.rep->count = ctx->count-1;
-                state->ptr = ctx->ptr;
-            }
-
-            /* cannot match more repeated items here.  make sure the
-               tail matches */
-            state->repeat = ctx->u.rep->prev;
-            DO_JUMP(JUMP_MAX_UNTIL_3, jump_max_until_3, ctx->pattern);
-            RETURN_ON_SUCCESS(ret);
-            state->repeat = ctx->u.rep;
-            state->ptr = ctx->ptr;
-            RETURN_FAILURE;
-
-        case SRE_OP_MIN_UNTIL:
-            /* minimizing repeat */
-            /* <REPEAT> <skip> <1=min> <2=max> item <MIN_UNTIL> tail */
-
-            ctx->u.rep = state->repeat;
-            if (!ctx->u.rep)
-                RETURN_ERROR(SRE_ERROR_STATE);
-
-            state->ptr = ctx->ptr;
-
-            ctx->count = ctx->u.rep->count+1;
-
-            TRACE(("|%p|%p|MIN_UNTIL %" PY_FORMAT_SIZE_T "d %p\n", ctx->pattern,
-                   ctx->ptr, ctx->count, ctx->u.rep->pattern));
-
-            if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
-                /* not enough matches */
-                ctx->u.rep->count = ctx->count;
-                DO_JUMP(JUMP_MIN_UNTIL_1, jump_min_until_1,
-                        ctx->u.rep->pattern+3);
-                if (ret) {
-                    RETURN_ON_ERROR(ret);
-                    RETURN_SUCCESS;
-                }
-                ctx->u.rep->count = ctx->count-1;
-                state->ptr = ctx->ptr;
-                RETURN_FAILURE;
-            }
-
-            LASTMARK_SAVE();
-
-            /* see if the tail matches */
-            state->repeat = ctx->u.rep->prev;
-            DO_JUMP(JUMP_MIN_UNTIL_2, jump_min_until_2, ctx->pattern);
-            if (ret) {
-                RETURN_ON_ERROR(ret);
-                RETURN_SUCCESS;
-            }
-
-            state->repeat = ctx->u.rep;
-            state->ptr = ctx->ptr;
-
-            LASTMARK_RESTORE();
-
-            if ((ctx->count >= (Py_ssize_t) ctx->u.rep->pattern[2]
-                && ctx->u.rep->pattern[2] != SRE_MAXREPEAT) ||
-                state->ptr == ctx->u.rep->last_ptr)
-                RETURN_FAILURE;
-
-            ctx->u.rep->count = ctx->count;
-            /* zero-width match protection */
-            DATA_PUSH(&ctx->u.rep->last_ptr);
-            ctx->u.rep->last_ptr = state->ptr;
-            DO_JUMP(JUMP_MIN_UNTIL_3,jump_min_until_3,
-                    ctx->u.rep->pattern+3);
-            DATA_POP(&ctx->u.rep->last_ptr);
-            if (ret) {
-                RETURN_ON_ERROR(ret);
-                RETURN_SUCCESS;
-            }
-            ctx->u.rep->count = ctx->count-1;
-            state->ptr = ctx->ptr;
-            RETURN_FAILURE;
-
-        case SRE_OP_GROUPREF:
-            /* match backreference */
-            TRACE(("|%p|%p|GROUPREF %d\n", ctx->pattern,
-                   ctx->ptr, ctx->pattern[0]));
-            i = ctx->pattern[0];
-            {
-                Py_ssize_t groupref = i+i;
-                if (groupref >= state->lastmark) {
-                    RETURN_FAILURE;
-                } else {
-                    char* p = (char*) state->mark[groupref];
-                    char* e = (char*) state->mark[groupref+1];
-                    if (!p || !e || e < p)
-                        RETURN_FAILURE;
-                    while (p < e) {
-                        if (ctx->ptr >= end ||
-                            SRE_CHARGET(state, ctx->ptr, 0) != SRE_CHARGET(state, p, 0))
-                            RETURN_FAILURE;
-                        p += state->charsize;
-                        ctx->ptr += state->charsize;
-                    }
-                }
-            }
-            ctx->pattern++;
-            break;
-
-        case SRE_OP_GROUPREF_IGNORE:
-            /* match backreference */
-            TRACE(("|%p|%p|GROUPREF_IGNORE %d\n", ctx->pattern,
-                   ctx->ptr, ctx->pattern[0]));
-            i = ctx->pattern[0];
-            {
-                Py_ssize_t groupref = i+i;
-                if (groupref >= state->lastmark) {
-                    RETURN_FAILURE;
-                } else {
-                    char* p = (char*) state->mark[groupref];
-                    char* e = (char*) state->mark[groupref+1];
-                    if (!p || !e || e < p)
-                        RETURN_FAILURE;
-                    while (p < e) {
-                        if (ctx->ptr >= end ||
-                            state->lower(SRE_CHARGET(state, ctx->ptr, 0)) !=
-                            state->lower(SRE_CHARGET(state, p, 0)))
-                            RETURN_FAILURE;
-                        p += state->charsize;
-                        ctx->ptr += state->charsize;
-                    }
-                }
-            }
-            ctx->pattern++;
-            break;
-
-        case SRE_OP_GROUPREF_EXISTS:
-            TRACE(("|%p|%p|GROUPREF_EXISTS %d\n", ctx->pattern,
-                   ctx->ptr, ctx->pattern[0]));
-            /* <GROUPREF_EXISTS> <group> <skip> codeyes <JUMP> codeno ... */
-            i = ctx->pattern[0];
-            {
-                Py_ssize_t groupref = i+i;
-                if (groupref >= state->lastmark) {
-                    ctx->pattern += ctx->pattern[1];
-                    break;
-                } else {
-                    SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
-                    SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
-                    if (!p || !e || e < p) {
-                        ctx->pattern += ctx->pattern[1];
-                        break;
-                    }
-                }
-            }
-            ctx->pattern += 2;
-            break;
-
-        case SRE_OP_ASSERT:
-            /* assert subpattern */
-            /* <ASSERT> <skip> <back> <pattern> */
-            TRACE(("|%p|%p|ASSERT %d\n", ctx->pattern,
-                   ctx->ptr, ctx->pattern[1]));
-            state->ptr = ctx->ptr - state->charsize * ctx->pattern[1];
-            if (state->ptr < state->beginning)
-                RETURN_FAILURE;
-            DO_JUMP(JUMP_ASSERT, jump_assert, ctx->pattern+2);
-            RETURN_ON_FAILURE(ret);
-            ctx->pattern += ctx->pattern[0];
-            break;
-
-        case SRE_OP_ASSERT_NOT:
-            /* assert not subpattern */
-            /* <ASSERT_NOT> <skip> <back> <pattern> */
-            TRACE(("|%p|%p|ASSERT_NOT %d\n", ctx->pattern,
-                   ctx->ptr, ctx->pattern[1]));
-            state->ptr = ctx->ptr - state->charsize * ctx->pattern[1];
-            if (state->ptr >= state->beginning) {
-                DO_JUMP(JUMP_ASSERT_NOT, jump_assert_not, ctx->pattern+2);
-                if (ret) {
-                    RETURN_ON_ERROR(ret);
-                    RETURN_FAILURE;
-                }
-            }
-            ctx->pattern += ctx->pattern[0];
-            break;
-
-        case SRE_OP_FAILURE:
-            /* immediate failure */
-            TRACE(("|%p|%p|FAILURE\n", ctx->pattern, ctx->ptr));
-            RETURN_FAILURE;
-
-        default:
-            TRACE(("|%p|%p|UNKNOWN %d\n", ctx->pattern, ctx->ptr,
-                   ctx->pattern[-1]));
-            RETURN_ERROR(SRE_ERROR_ILLEGAL);
-        }
-    }
-
-exit:
-    ctx_pos = ctx->last_ctx_pos;
-    jump = ctx->jump;
-    DATA_POP_DISCARD(ctx);
-    if (ctx_pos == -1)
-        return ret;
-    DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos);
-
-    switch (jump) {
-        case JUMP_MAX_UNTIL_2:
-            TRACE(("|%p|%p|JUMP_MAX_UNTIL_2\n", ctx->pattern, ctx->ptr));
-            goto jump_max_until_2;
-        case JUMP_MAX_UNTIL_3:
-            TRACE(("|%p|%p|JUMP_MAX_UNTIL_3\n", ctx->pattern, ctx->ptr));
-            goto jump_max_until_3;
-        case JUMP_MIN_UNTIL_2:
-            TRACE(("|%p|%p|JUMP_MIN_UNTIL_2\n", ctx->pattern, ctx->ptr));
-            goto jump_min_until_2;
-        case JUMP_MIN_UNTIL_3:
-            TRACE(("|%p|%p|JUMP_MIN_UNTIL_3\n", ctx->pattern, ctx->ptr));
-            goto jump_min_until_3;
-        case JUMP_BRANCH:
-            TRACE(("|%p|%p|JUMP_BRANCH\n", ctx->pattern, ctx->ptr));
-            goto jump_branch;
-        case JUMP_MAX_UNTIL_1:
-            TRACE(("|%p|%p|JUMP_MAX_UNTIL_1\n", ctx->pattern, ctx->ptr));
-            goto jump_max_until_1;
-        case JUMP_MIN_UNTIL_1:
-            TRACE(("|%p|%p|JUMP_MIN_UNTIL_1\n", ctx->pattern, ctx->ptr));
-            goto jump_min_until_1;
-        case JUMP_REPEAT:
-            TRACE(("|%p|%p|JUMP_REPEAT\n", ctx->pattern, ctx->ptr));
-            goto jump_repeat;
-        case JUMP_REPEAT_ONE_1:
-            TRACE(("|%p|%p|JUMP_REPEAT_ONE_1\n", ctx->pattern, ctx->ptr));
-            goto jump_repeat_one_1;
-        case JUMP_REPEAT_ONE_2:
-            TRACE(("|%p|%p|JUMP_REPEAT_ONE_2\n", ctx->pattern, ctx->ptr));
-            goto jump_repeat_one_2;
-        case JUMP_MIN_REPEAT_ONE:
-            TRACE(("|%p|%p|JUMP_MIN_REPEAT_ONE\n", ctx->pattern, ctx->ptr));
-            goto jump_min_repeat_one;
-        case JUMP_ASSERT:
-            TRACE(("|%p|%p|JUMP_ASSERT\n", ctx->pattern, ctx->ptr));
-            goto jump_assert;
-        case JUMP_ASSERT_NOT:
-            TRACE(("|%p|%p|JUMP_ASSERT_NOT\n", ctx->pattern, ctx->ptr));
-            goto jump_assert_not;
-        case JUMP_NONE:
-            TRACE(("|%p|%p|RETURN %" PY_FORMAT_SIZE_T "d\n", ctx->pattern,
-                   ctx->ptr, ret));
-            break;
-    }
-
-    return ret; /* should never get here */
-}
-
-LOCAL(Py_ssize_t)
-SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern)
-{
-    char* ptr = (char*)state->start;
-    char* end = (char*)state->end;
-    Py_ssize_t status = 0;
-    Py_ssize_t prefix_len = 0;
-    Py_ssize_t prefix_skip = 0;
-    SRE_CODE* prefix = NULL;
-    SRE_CODE* charset = NULL;
-    SRE_CODE* overlap = NULL;
-    int flags = 0;
-
-    if (pattern[0] == SRE_OP_INFO) {
-        /* optimization info block */
-        /* <INFO> <1=skip> <2=flags> <3=min> <4=max> <5=prefix info>  */
-
-        flags = pattern[2];
-
-        if (pattern[3] > 1) {
-            /* adjust end point (but make sure we leave at least one
-               character in there, so literal search will work) */
-            end -= (pattern[3]-1) * state->charsize;
-            if (end <= ptr)
-                end = ptr + state->charsize;
-        }
-
-        if (flags & SRE_INFO_PREFIX) {
-            /* pattern starts with a known prefix */
-            /* <length> <skip> <prefix data> <overlap data> */
-            prefix_len = pattern[5];
-            prefix_skip = pattern[6];
-            prefix = pattern + 7;
-            overlap = prefix + prefix_len - 1;
-        } else if (flags & SRE_INFO_CHARSET)
-            /* pattern starts with a character from a known set */
-            /* <charset> */
-            charset = pattern + 5;
-
-        pattern += 1 + pattern[1];
-    }
-
-    TRACE(("prefix = %p %" PY_FORMAT_SIZE_T "d %" PY_FORMAT_SIZE_T "d\n",
-           prefix, prefix_len, prefix_skip));
-    TRACE(("charset = %p\n", charset));
-
-#if defined(USE_FAST_SEARCH)
-    if (prefix_len > 1) {
-        /* pattern starts with a known prefix.  use the overlap
-           table to skip forward as fast as we possibly can */
-        Py_ssize_t i = 0;
-        end = (char *)state->end;
-        while (ptr < end) {
-            for (;;) {
-                if ((SRE_CODE) SRE_CHARGET(state, ptr, 0) != prefix[i]) {
-                    if (!i)
-                        break;
-                    else
-                        i = overlap[i];
-                } else {
-                    if (++i == prefix_len) {
-                        /* found a potential match */
-                        TRACE(("|%p|%p|SEARCH SCAN\n", pattern, ptr));
-                        state->start = ptr - (prefix_len - 1) * state->charsize;
-                        state->ptr = ptr - (prefix_len - prefix_skip - 1) * state->charsize;
-                        if (flags & SRE_INFO_LITERAL)
-                            return 1; /* we got all of it */
-                        status = SRE_MATCH(state, pattern + 2*prefix_skip);
-                        if (status != 0)
-                            return status;
-                        /* close but no cigar -- try again */
-                        i = overlap[i];
-                    }
-                    break;
-                }
-            }
-            ptr += state->charsize;
-        }
-        return 0;
-    }
-#endif
-
-    if (pattern[0] == SRE_OP_LITERAL) {
-        /* pattern starts with a literal character.  this is used
-           for short prefixes, and if fast search is disabled */
-        SRE_CODE chr = pattern[1];
-        end = (char*)state->end;
-        for (;;) {
-            while (ptr < end && (SRE_CODE) SRE_CHARGET(state, ptr, 0) != chr)
-                ptr += state->charsize;
-            if (ptr >= end)
-                return 0;
-            TRACE(("|%p|%p|SEARCH LITERAL\n", pattern, ptr));
-            state->start = ptr;
-            ptr += state->charsize;
-            state->ptr = ptr;
-            if (flags & SRE_INFO_LITERAL)
-                return 1; /* we got all of it */
-            status = SRE_MATCH(state, pattern + 2);
-            if (status != 0)
-                break;
-        }
-    } else if (charset) {
-        /* pattern starts with a character from a known set */
-        end = (char*)state->end;
-        for (;;) {
-            while (ptr < end && !SRE_CHARSET(charset, SRE_CHARGET(state, ptr, 0)))
-                ptr += state->charsize;
-            if (ptr >= end)
-                return 0;
-            TRACE(("|%p|%p|SEARCH CHARSET\n", pattern, ptr));
-            state->start = ptr;
-            state->ptr = ptr;
-            status = SRE_MATCH(state, pattern);
-            if (status != 0)
-                break;
-            ptr += state->charsize;
-        }
-    } else
-        /* general case */
-        while (ptr <= end) {
-            TRACE(("|%p|%p|SEARCH\n", pattern, ptr));
-            state->start = state->ptr = ptr;
-            ptr += state->charsize;
-            status = SRE_MATCH(state, pattern);
-            if (status != 0)
-                break;
-        }
-
-    return status;
-}
-
-#if !defined(SRE_RECURSIVE)
+#define SRE_CHAR Py_UCS4
+#define SIZEOF_SRE_CHAR 4
+#define SRE(F) sre_ucs4_##F
+#include "sre_lib.h"
 
 /* -------------------------------------------------------------------- */
 /* factories and destructors */
@@ -1609,23 +272,6 @@
 static PyObject*pattern_new_match(PatternObject*, SRE_STATE*, int);
 static PyObject*pattern_scanner(PatternObject*, PyObject*, PyObject* kw);
 
-static int
-sre_literal_template(int charsize, char* ptr, Py_ssize_t len)
-{
-    /* check if given string is a literal template (i.e. no escapes) */
-    struct {
-        int charsize;
-    } state = {
-        charsize
-    };
-    while (len-- > 0) {
-        if (SRE_CHARGET((&state), ptr, 0) == '\\')
-            return 0;
-        ptr += charsize;
-    }
-    return 1;
-}
-
 static PyObject *
 sre_codesize(PyObject* self, PyObject *unused)
 {
@@ -1661,72 +307,41 @@
 
 static void*
 getstring(PyObject* string, Py_ssize_t* p_length,
-          int* p_logical_charsize, int* p_charsize,
+          int* p_isbytes, int* p_charsize,
           Py_buffer *view)
 {
     /* given a python object, return a data pointer, a length (in
        characters), and a character size.  return NULL if the object
        is not a string (or not compatible) */
 
-    PyBufferProcs *buffer;
-    Py_ssize_t size, bytes;
-    int charsize;
-    void* ptr;
-
     /* Unicode objects do not support the buffer API. So, get the data
        directly instead. */
     if (PyUnicode_Check(string)) {
         if (PyUnicode_READY(string) == -1)
             return NULL;
-        ptr = PyUnicode_DATA(string);
         *p_length = PyUnicode_GET_LENGTH(string);
         *p_charsize = PyUnicode_KIND(string);
-        *p_logical_charsize = 4;
-        return ptr;
+        *p_isbytes = 0;
+        return PyUnicode_DATA(string);
     }
 
     /* get pointer to byte string buffer */
-    view->len = -1;
-    buffer = Py_TYPE(string)->tp_as_buffer;
-    if (!buffer || !buffer->bf_getbuffer ||
-        (*buffer->bf_getbuffer)(string, view, PyBUF_SIMPLE) < 0) {
-            PyErr_SetString(PyExc_TypeError, "expected string or buffer");
-            return NULL;
+    if (PyObject_GetBuffer(string, view, PyBUF_SIMPLE) != 0) {
+        PyErr_SetString(PyExc_TypeError, "expected string or buffer");
+        return NULL;
     }
 
-    /* determine buffer size */
-    bytes = view->len;
-    ptr = view->buf;
+    *p_length = view->len;
+    *p_charsize = 1;
+    *p_isbytes = 1;
 
-    if (bytes < 0) {
-        PyErr_SetString(PyExc_TypeError, "buffer has negative size");
-        goto err;
+    if (view->buf == NULL) {
+        PyErr_SetString(PyExc_ValueError, "Buffer is NULL");
+        PyBuffer_Release(view);
+        view->buf = NULL;
+        return NULL;
     }
-
-    /* determine character size */
-    size = PyObject_Size(string);
-
-    if (PyBytes_Check(string) || bytes == size)
-        charsize = 1;
-    else {
-        PyErr_SetString(PyExc_TypeError, "buffer size mismatch");
-        goto err;
-    }
-
-    *p_length = size;
-    *p_charsize = charsize;
-    *p_logical_charsize = charsize;
-
-    if (ptr == NULL) {
-            PyErr_SetString(PyExc_ValueError,
-                            "Buffer is NULL");
-            goto err;
-    }
-    return ptr;
-  err:
-    PyBuffer_Release(view);
-    view->buf = NULL;
-    return NULL;
+    return view->buf;
 }
 
 LOCAL(PyObject*)
@@ -1736,7 +351,7 @@
     /* prepare state object */
 
     Py_ssize_t length;
-    int logical_charsize, charsize;
+    int isbytes, charsize;
     void* ptr;
 
     memset(state, 0, sizeof(SRE_STATE));
@@ -1745,16 +360,16 @@
     state->lastindex = -1;
 
     state->buffer.buf = NULL;
-    ptr = getstring(string, &length, &logical_charsize, &charsize, &state->buffer);
+    ptr = getstring(string, &length, &isbytes, &charsize, &state->buffer);
     if (!ptr)
         goto err;
 
-    if (logical_charsize == 1 && pattern->logical_charsize > 1) {
+    if (isbytes && pattern->isbytes == 0) {
         PyErr_SetString(PyExc_TypeError,
                         "can't use a string pattern on a bytes-like object");
         goto err;
     }
-    if (logical_charsize > 1 && pattern->logical_charsize == 1) {
+    if (!isbytes && pattern->isbytes > 0) {
         PyErr_SetString(PyExc_TypeError,
                         "can't use a bytes pattern on a string-like object");
         goto err;
@@ -1771,7 +386,7 @@
     else if (end > length)
         end = length;
 
-    state->logical_charsize = logical_charsize;
+    state->isbytes = isbytes;
     state->charsize = charsize;
 
     state->beginning = ptr;
@@ -1812,6 +427,24 @@
     (((char*)(member) - (char*)(state)->beginning) / (state)->charsize)
 
 LOCAL(PyObject*)
+getslice(int isbytes, const void *ptr,
+         PyObject* string, Py_ssize_t start, Py_ssize_t end)
+{
+    if (isbytes) {
+        if (PyBytes_CheckExact(string) &&
+            start == 0 && end == PyBytes_GET_SIZE(string)) {
+            Py_INCREF(string);
+            return string;
+        }
+        return PyBytes_FromStringAndSize(
+                (const char *)ptr + start, end - start);
+    }
+    else {
+        return PyUnicode_Substring(string, start, end);
+    }
+}
+
+LOCAL(PyObject*)
 state_getslice(SRE_STATE* state, Py_ssize_t index, PyObject* string, int empty)
 {
     Py_ssize_t i, j;
@@ -1831,7 +464,7 @@
         j = STATE_OFFSET(state, state->mark[index+1]);
     }
 
-    return PySequence_GetSlice(string, i, j);
+    return getslice(state->isbytes, state->beginning, string, i, j);
 }
 
 static void
@@ -1864,14 +497,34 @@
 {
     if (self->weakreflist != NULL)
         PyObject_ClearWeakRefs((PyObject *) self);
-    if (self->view.buf)
-        PyBuffer_Release(&self->view);
     Py_XDECREF(self->pattern);
     Py_XDECREF(self->groupindex);
     Py_XDECREF(self->indexgroup);
     PyObject_DEL(self);
 }
 
+LOCAL(Py_ssize_t)
+sre_match(SRE_STATE* state, SRE_CODE* pattern)
+{
+    if (state->charsize == 1)
+        return sre_ucs1_match(state, pattern);
+    if (state->charsize == 2)
+        return sre_ucs2_match(state, pattern);
+    assert(state->charsize == 4);
+    return sre_ucs4_match(state, pattern);
+}
+
+LOCAL(Py_ssize_t)
+sre_search(SRE_STATE* state, SRE_CODE* pattern)
+{
+    if (state->charsize == 1)
+        return sre_ucs1_search(state, pattern);
+    if (state->charsize == 2)
+        return sre_ucs2_search(state, pattern);
+    assert(state->charsize == 4);
+    return sre_ucs4_search(state, pattern);
+}
+
 static PyObject*
 pattern_match(PatternObject* self, PyObject* args, PyObject* kw)
 {
@@ -1894,11 +547,7 @@
 
     TRACE(("|%p|%p|MATCH\n", PatternObject_GetCode(self), state.ptr));
 
-    if (state.logical_charsize == 1) {
-        status = sre_match(&state, PatternObject_GetCode(self));
-    } else {
-        status = sre_umatch(&state, PatternObject_GetCode(self));
-    }
+    status = sre_match(&state, PatternObject_GetCode(self));
 
     TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
     if (PyErr_Occurred())
@@ -1929,11 +578,7 @@
 
     TRACE(("|%p|%p|SEARCH\n", PatternObject_GetCode(self), state.ptr));
 
-    if (state.logical_charsize == 1) {
-        status = sre_search(&state, PatternObject_GetCode(self));
-    } else {
-        status = sre_usearch(&state, PatternObject_GetCode(self));
-    }
+    status = sre_search(&state, PatternObject_GetCode(self));
 
     TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
 
@@ -1993,45 +638,6 @@
 #endif
 
 static PyObject*
-join_list(PyObject* list, PyObject* string)
-{
-    /* join list elements */
-
-    PyObject* joiner;
-    PyObject* function;
-    PyObject* args;
-    PyObject* result;
-
-    joiner = PySequence_GetSlice(string, 0, 0);
-    if (!joiner)
-        return NULL;
-
-    if (PyList_GET_SIZE(list) == 0) {
-        Py_DECREF(list);
-        return joiner;
-    }
-
-    function = PyObject_GetAttrString(joiner, "join");
-    if (!function) {
-        Py_DECREF(joiner);
-        return NULL;
-    }
-    args = PyTuple_New(1);
-    if (!args) {
-        Py_DECREF(function);
-        Py_DECREF(joiner);
-        return NULL;
-    }
-    PyTuple_SET_ITEM(args, 0, list);
-    result = PyObject_CallObject(function, args);
-    Py_DECREF(args); /* also removes list */
-    Py_DECREF(function);
-    Py_DECREF(joiner);
-
-    return result;
-}
-
-static PyObject*
 pattern_findall(PatternObject* self, PyObject* args, PyObject* kw)
 {
     SRE_STATE state;
@@ -2065,12 +671,7 @@
 
         state.ptr = state.start;
 
-        if (state.logical_charsize == 1) {
-            status = sre_search(&state, PatternObject_GetCode(self));
-        } else {
-            status = sre_usearch(&state, PatternObject_GetCode(self));
-        }
-
+        status = sre_search(&state, PatternObject_GetCode(self));
         if (PyErr_Occurred())
             goto error;
 
@@ -2086,7 +687,8 @@
         case 0:
             b = STATE_OFFSET(&state, state.start);
             e = STATE_OFFSET(&state, state.ptr);
-            item = PySequence_GetSlice(string, b, e);
+            item = getslice(state.isbytes, state.beginning,
+                            string, b, e);
             if (!item)
                 goto error;
             break;
@@ -2191,12 +793,7 @@
 
         state.ptr = state.start;
 
-        if (state.logical_charsize == 1) {
-            status = sre_search(&state, PatternObject_GetCode(self));
-        } else {
-            status = sre_usearch(&state, PatternObject_GetCode(self));
-        }
-
+        status = sre_search(&state, PatternObject_GetCode(self));
         if (PyErr_Occurred())
             goto error;
 
@@ -2216,7 +813,7 @@
         }
 
         /* get segment before this match */
-        item = PySequence_GetSlice(
+        item = getslice(state.isbytes, state.beginning,
             string, STATE_OFFSET(&state, last),
             STATE_OFFSET(&state, state.start)
             );
@@ -2245,7 +842,7 @@
     }
 
     /* get segment following last match (even if empty) */
-    item = PySequence_GetSlice(
+    item = getslice(state.isbytes, state.beginning,
         string, STATE_OFFSET(&state, last), state.endpos
         );
     if (!item)
@@ -2271,6 +868,7 @@
 {
     SRE_STATE state;
     PyObject* list;
+    PyObject* joiner;
     PyObject* item;
     PyObject* filter;
     PyObject* args;
@@ -2279,7 +877,7 @@
     Py_ssize_t status;
     Py_ssize_t n;
     Py_ssize_t i, b, e;
-    int logical_charsize, charsize;
+    int isbytes, charsize;
     int filter_is_callable;
     Py_buffer view;
 
@@ -2292,10 +890,13 @@
         /* if not callable, check if it's a literal string */
         int literal;
         view.buf = NULL;
-        ptr = getstring(ptemplate, &n, &logical_charsize, &charsize, &view);
+        ptr = getstring(ptemplate, &n, &isbytes, &charsize, &view);
         b = charsize;
         if (ptr) {
-            literal = sre_literal_template(charsize, ptr, n);
+            if (charsize == 1)
+                literal = memchr(ptr, '\\', n) == NULL;
+            else
+                literal = PyUnicode_FindChar(ptemplate, '\\', 0, n, 1) == -1;
         } else {
             PyErr_Clear();
             literal = 0;
@@ -2339,12 +940,7 @@
 
         state.ptr = state.start;
 
-        if (state.logical_charsize == 1) {
-            status = sre_search(&state, PatternObject_GetCode(self));
-        } else {
-            status = sre_usearch(&state, PatternObject_GetCode(self));
-        }
-
+        status = sre_search(&state, PatternObject_GetCode(self));
         if (PyErr_Occurred())
             goto error;
 
@@ -2360,7 +956,8 @@
 
         if (i < b) {
             /* get segment before this match */
-            item = PySequence_GetSlice(string, i, b);
+            item = getslice(state.isbytes, state.beginning,
+                string, i, b);
             if (!item)
                 goto error;
             status = PyList_Append(list, item);
@@ -2415,7 +1012,8 @@
 
     /* get segment following last match */
     if (i < state.endpos) {
-        item = PySequence_GetSlice(string, i, state.endpos);
+        item = getslice(state.isbytes, state.beginning,
+                        string, i, state.endpos);
         if (!item)
             goto error;
         status = PyList_Append(list, item);
@@ -2429,10 +1027,25 @@
     Py_DECREF(filter);
 
     /* convert list to single string (also removes list) */
-    item = join_list(list, string);
-
-    if (!item)
+    joiner = getslice(state.isbytes, state.beginning, string, 0, 0);
+    if (!joiner) {
+        Py_DECREF(list);
         return NULL;
+    }
+    if (PyList_GET_SIZE(list) == 0) {
+        Py_DECREF(list);
+        item = joiner;
+    }
+    else {
+        if (state.isbytes)
+            item = _PyBytes_Join(joiner, list);
+        else
+            item = PyUnicode_Join(joiner, list);
+        Py_DECREF(joiner);
+        Py_DECREF(list);
+        if (!item)
+            return NULL;
+    }
 
     if (subn)
         return Py_BuildValue("Nn", item, n);
@@ -2654,7 +1267,6 @@
     self->pattern = NULL;
     self->groupindex = NULL;
     self->indexgroup = NULL;
-    self->view.buf = NULL;
 
     self->codesize = n;
 
@@ -2675,16 +1287,20 @@
     }
 
     if (pattern == Py_None) {
-        self->logical_charsize = -1;
-        self->charsize = -1;
+        self->isbytes = -1;
     }
     else {
         Py_ssize_t p_length;
-        if (!getstring(pattern, &p_length, &self->logical_charsize,
-                       &self->charsize, &self->view)) {
+        int charsize;
+        Py_buffer view;
+        view.buf = NULL;
+        if (!getstring(pattern, &p_length, &self->isbytes,
+                       &charsize, &view)) {
             Py_DECREF(self);
             return NULL;
         }
+        if (view.buf)
+            PyBuffer_Release(&view);
     }
 
     Py_INCREF(pattern);
@@ -2732,8 +1348,7 @@
     \_________\_____/        /
                \____________/
 
-   It also helps that SRE_CODE is always an unsigned type, either 2 bytes or 4
-   bytes wide (the latter if Python is compiled for "wide" unicode support).
+   It also helps that SRE_CODE is always an unsigned type.
 */
 
 /* Defining this one enables tracing of the validator */
@@ -2803,7 +1418,7 @@
             break;
 
         case SRE_OP_CHARSET:
-            offset = 32/sizeof(SRE_CODE); /* 32-byte bitmap */
+            offset = 256/SRE_CODE_BITS; /* 256-bit bitmap */
             if (offset > (Py_uintptr_t)(end - code))
                 FAIL;
             code += offset;
@@ -2820,7 +1435,7 @@
                     FAIL;
             }
             code += offset;
-            offset = arg * 32/sizeof(SRE_CODE); /* 32-byte bitmap times arg */
+            offset = arg * (256/SRE_CODE_BITS); /* 256-bit bitmap times arg */
             if (offset > (Py_uintptr_t)(end - code))
                 FAIL;
             code += offset;
@@ -3189,6 +1804,12 @@
 static PyObject*
 match_getslice_by_index(MatchObject* self, Py_ssize_t index, PyObject* def)
 {
+    Py_ssize_t length;
+    int isbytes, charsize;
+    Py_buffer view;
+    PyObject *result;
+    void* ptr;
+
     if (index < 0 || index >= self->groups) {
         /* raise IndexError if we were given a bad group number */
         PyErr_SetString(
@@ -3206,9 +1827,14 @@
         return def;
     }
 
-    return PySequence_GetSlice(
-        self->string, self->mark[index], self->mark[index+1]
-        );
+    ptr = getstring(self->string, &length, &isbytes, &charsize, &view);
+    if (ptr == NULL)
+        return NULL;
+    result = getslice(isbytes, ptr,
+                      self->string, self->mark[index], self->mark[index+1]);
+    if (isbytes && view.buf != NULL)
+        PyBuffer_Release(&view);
+    return result;
 }
 
 static Py_ssize_t
@@ -3628,6 +2254,22 @@
         return match_regs(self);
 }
 
+static PyObject *
+match_repr(MatchObject *self)
+{
+    PyObject *result;
+    PyObject *group0 = match_getslice_by_index(self, 0, Py_None);
+    if (group0 == NULL)
+        return NULL;
+    result = PyUnicode_FromFormat(
+            "<%s object; span=(%d, %d), match=%.50R>",
+            Py_TYPE(self)->tp_name,
+            self->mark[0], self->mark[1], group0);
+    Py_DECREF(group0);
+    return result;
+}
+
+
 static PyGetSetDef match_getset[] = {
     {"lastindex", (getter)match_lastindex_get, (setter)NULL},
     {"lastgroup", (getter)match_lastgroup_get, (setter)NULL},
@@ -3656,7 +2298,7 @@
     0,                          /* tp_getattr */
     0,                          /* tp_setattr */
     0,                          /* tp_reserved */
-    0,                          /* tp_repr */
+    (reprfunc)match_repr,       /* tp_repr */
     0,                          /* tp_as_number */
     0,                          /* tp_as_sequence */
     0,                          /* tp_as_mapping */
@@ -3765,11 +2407,7 @@
 
     state->ptr = state->start;
 
-    if (state->logical_charsize == 1) {
-        status = sre_match(state, PatternObject_GetCode(self->pattern));
-    } else {
-        status = sre_umatch(state, PatternObject_GetCode(self->pattern));
-    }
+    status = sre_match(state, PatternObject_GetCode(self->pattern));
     if (PyErr_Occurred())
         return NULL;
 
@@ -3796,11 +2434,7 @@
 
     state->ptr = state->start;
 
-    if (state->logical_charsize == 1) {
-        status = sre_search(state, PatternObject_GetCode(self->pattern));
-    } else {
-        status = sre_usearch(state, PatternObject_GetCode(self->pattern));
-    }
+    status = sre_search(state, PatternObject_GetCode(self->pattern));
     if (PyErr_Occurred())
         return NULL;
 
@@ -3953,7 +2587,5 @@
     return m;
 }
 
-#endif /* !defined(SRE_RECURSIVE) */
-
 /* vim:ts=4:sw=4:et
 */
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 20d0212..83a271e 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -19,9 +19,6 @@
 #ifdef WITH_THREAD
 #include "pythread.h"
 
-#ifdef HAVE_PTHREAD_ATFORK
-#  include <pthread.h>
-#endif
 
 #define PySSL_BEGIN_ALLOW_THREADS_S(save) \
     do { if (_ssl_locks_count>0) { (save) = PyEval_SaveThread(); } } while (0)
@@ -349,14 +346,18 @@
                                    lib_obj, errstr, lineno);
     else
         msg = PyUnicode_FromFormat("%s (_ssl.c:%d)", errstr, lineno);
-
     if (msg == NULL)
         goto fail;
+
     init_value = Py_BuildValue("iN", ssl_errno, msg);
+    if (init_value == NULL)
+        goto fail;
+
     err_value = PyObject_CallObject(type, init_value);
     Py_DECREF(init_value);
     if (err_value == NULL)
         goto fail;
+
     if (reason_obj == NULL)
         reason_obj = Py_None;
     if (_PyObject_SetAttrId(err_value, &PyId_reason, reason_obj))
@@ -527,6 +528,10 @@
 
     self->socket_type = socket_type;
     self->Socket = PyWeakref_NewRef((PyObject *) sock, NULL);
+    if (self->Socket == NULL) {
+        Py_DECREF(self);
+        return NULL;
+    }
     return self;
 }
 
@@ -2950,64 +2955,6 @@
 Returns number of bytes read.  Raises SSLError if connection to EGD\n\
 fails or if it does not provide enough data to seed PRNG.");
 
-/* Seed OpenSSL's PRNG at fork(), http://bugs.python.org/issue18747
- *
- * The parent handler seeds the PRNG from pseudo-random data like pid, the
- * current time (miliseconds or seconds) and an uninitialized array.
- * The array contains stack variables that are impossible to predict
- * on most systems, e.g. function return address (subject to ASLR), the
- * stack protection canary and automatic variables.
- * The code is inspired by Apache's ssl_rand_seed() function.
- *
- * Note:
- * The code uses pthread_atfork() until Python has a proper atfork API. The
- * handlers are not removed from the child process. A parent handler is used
- * instead of a child handler because fork() is supposed to be async-signal
- * safe but the handler calls unsafe functions.
- */
-
-#if defined(HAVE_PTHREAD_ATFORK) && defined(WITH_THREAD)
-#define PYSSL_RAND_ATFORK 1
-
-static void
-PySSL_RAND_atfork_parent(void)
-{
-    struct {
-        char stack[128];    /* uninitialized (!) stack data, 128 is an
-                               arbitrary number. */
-        pid_t pid;          /* current pid */
-        _PyTime_timeval tp; /* current time */
-    } seed;
-
-#ifdef WITH_VALGRIND
-    VALGRIND_MAKE_MEM_DEFINED(seed.stack, sizeof(seed.stack));
-#endif
-    seed.pid = getpid();
-    _PyTime_gettimeofday(&(seed.tp));
-    RAND_add((unsigned char *)&seed, sizeof(seed), 0.0);
-}
-
-static int
-PySSL_RAND_atfork(void)
-{
-    static int registered = 0;
-    int retval;
-
-    if (registered)
-        return 0;
-
-    retval = pthread_atfork(NULL,                     /* prepare */
-                            PySSL_RAND_atfork_parent, /* parent */
-                            NULL);                    /* child */
-    if (retval != 0) {
-        PyErr_SetFromErrno(PyExc_OSError);
-        return -1;
-    }
-    registered = 1;
-    return 0;
-}
-#endif /* HAVE_PTHREAD_ATFORK */
-
 #endif /* HAVE_OPENSSL_RAND */
 
 
@@ -3622,10 +3569,5 @@
     if (r == NULL || PyModule_AddObject(m, "_OPENSSL_API_VERSION", r))
         return NULL;
 
-#ifdef PYSSL_RAND_ATFORK
-    if (PySSL_RAND_atfork() == -1)
-        return NULL;
-#endif
-
     return m;
 }
diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c
index a4e1643..0c6ef16 100644
--- a/Modules/_testbuffer.c
+++ b/Modules/_testbuffer.c
@@ -1815,7 +1815,7 @@
         if (init_slice(base, key, 0) < 0)
             goto err_occurred;
     }
-    else if PyTuple_Check(key) {
+    else if (PyTuple_Check(key)) {
         /* multi-dimensional slice */
         PyObject *tuple = key;
         Py_ssize_t i, n;
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 34b95c0..3362454 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -65,6 +65,69 @@
 }
 
 static PyObject*
+test_sizeof_c_types(PyObject *self)
+{
+#define CHECK_SIZEOF(TYPE, EXPECTED)         \
+    if (EXPECTED != sizeof(TYPE))  {         \
+        PyErr_Format(TestError,              \
+            "sizeof(%s) = %u instead of %u", \
+            #TYPE, sizeof(TYPE), EXPECTED);  \
+        return (PyObject*)NULL;              \
+    }
+#define IS_SIGNED(TYPE) (((TYPE)-1) < (TYPE)0)
+#define CHECK_SIGNNESS(TYPE, SIGNED)         \
+    if (IS_SIGNED(TYPE) != SIGNED) {         \
+        PyErr_Format(TestError,              \
+            "%s signness is, instead of %i",  \
+            #TYPE, IS_SIGNED(TYPE), SIGNED); \
+        return (PyObject*)NULL;              \
+    }
+
+    /* integer types */
+    CHECK_SIZEOF(Py_UCS1, 1);
+    CHECK_SIZEOF(Py_UCS2, 2);
+    CHECK_SIZEOF(Py_UCS4, 4);
+    CHECK_SIGNNESS(Py_UCS1, 0);
+    CHECK_SIGNNESS(Py_UCS2, 0);
+    CHECK_SIGNNESS(Py_UCS4, 0);
+#ifdef HAVE_INT32_T
+    CHECK_SIZEOF(PY_INT32_T, 4);
+    CHECK_SIGNNESS(PY_INT32_T, 1);
+#endif
+#ifdef HAVE_UINT32_T
+    CHECK_SIZEOF(PY_UINT32_T, 4);
+    CHECK_SIGNNESS(PY_UINT32_T, 0);
+#endif
+#ifdef HAVE_INT64_T
+    CHECK_SIZEOF(PY_INT64_T, 8);
+    CHECK_SIGNNESS(PY_INT64_T, 1);
+#endif
+#ifdef HAVE_UINT64_T
+    CHECK_SIZEOF(PY_UINT64_T, 8);
+    CHECK_SIGNNESS(PY_UINT64_T, 0);
+#endif
+
+    /* pointer/size types */
+    CHECK_SIZEOF(size_t, sizeof(void *));
+    CHECK_SIGNNESS(size_t, 0);
+    CHECK_SIZEOF(Py_ssize_t, sizeof(void *));
+    CHECK_SIGNNESS(Py_ssize_t, 1);
+
+    CHECK_SIZEOF(Py_uintptr_t, sizeof(void *));
+    CHECK_SIGNNESS(Py_uintptr_t, 0);
+    CHECK_SIZEOF(Py_intptr_t, sizeof(void *));
+    CHECK_SIGNNESS(Py_intptr_t, 1);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+
+#undef IS_SIGNED
+#undef CHECK_SIGNESS
+#undef CHECK_SIZEOF
+}
+
+
+static PyObject*
 test_list_api(PyObject *self)
 {
     PyObject* list;
@@ -2783,6 +2846,7 @@
     {"raise_exception",         raise_exception,                 METH_VARARGS},
     {"raise_memoryerror",   (PyCFunction)raise_memoryerror,  METH_NOARGS},
     {"test_config",             (PyCFunction)test_config,        METH_NOARGS},
+    {"test_sizeof_c_types",     (PyCFunction)test_sizeof_c_types, METH_NOARGS},
     {"test_datetime_capi",  test_datetime_capi,              METH_NOARGS},
     {"test_list_api",           (PyCFunction)test_list_api,      METH_NOARGS},
     {"test_dict_iteration",     (PyCFunction)test_dict_iteration,METH_NOARGS},
diff --git a/Modules/_testembed.c b/Modules/_testembed.c
index 51b439f..a21d251 100644
--- a/Modules/_testembed.c
+++ b/Modules/_testembed.c
@@ -1,7 +1,26 @@
 #include <Python.h>
 #include <stdio.h>
 
-void print_subinterp(void)
+/*********************************************************
+ * Embedded interpreter tests that need a custom exe
+ *
+ * Executed via 'EmbeddingTests' in Lib/test/test_capi.py
+ *********************************************************/
+
+static void _testembed_Py_Initialize(void)
+{
+    /* HACK: the "./" at front avoids a search along the PATH in
+       Modules/getpath.c */
+    Py_SetProgramName(L"./_testembed");
+    Py_Initialize();
+}
+
+
+/*****************************************************
+ * Test repeated initalisation and subinterpreters
+ *****************************************************/
+
+static void print_subinterp(void)
 {
     /* Just output some debug stuff */
     PyThreadState *ts = PyThreadState_Get();
@@ -14,7 +33,7 @@
     );
 }
 
-int main(int argc, char *argv[])
+static void test_repeated_init_and_subinterpreters(void)
 {
     PyThreadState *mainstate, *substate;
 #ifdef WITH_THREAD
@@ -24,10 +43,7 @@
 
     for (i=0; i<3; i++) {
         printf("--- Pass %d ---\n", i);
-        /* HACK: the "./" at front avoids a search along the PATH in
-           Modules/getpath.c */
-        Py_SetProgramName(L"./_testembed");
-        Py_Initialize();
+        _testembed_Py_Initialize();
         mainstate = PyThreadState_Get();
 
 #ifdef WITH_THREAD
@@ -54,5 +70,71 @@
         PyEval_RestoreThread(mainstate);
         Py_Finalize();
     }
+}
+
+/*****************************************************
+ * Test forcing a particular IO encoding
+ *****************************************************/
+
+static void check_stdio_details(const char *encoding, const char * errors)
+{
+    /* Output info for the test case to check */
+    if (encoding) {
+        printf("Expected encoding: %s\n", encoding);
+    } else {
+        printf("Expected encoding: default\n");
+    }
+    if (errors) {
+        printf("Expected errors: %s\n", errors);
+    } else {
+        printf("Expected errors: default\n");
+    }
+    fflush(stdout);
+    /* Force the given IO encoding */
+    Py_SetStandardStreamEncoding(encoding, errors);
+    _testembed_Py_Initialize();
+    PyRun_SimpleString(
+        "import sys;"
+        "print('stdin: {0.encoding}:{0.errors}'.format(sys.stdin));"
+        "print('stdout: {0.encoding}:{0.errors}'.format(sys.stdout));"
+        "print('stderr: {0.encoding}:{0.errors}'.format(sys.stderr));"
+        "sys.stdout.flush()"
+    );
+    Py_Finalize();
+}
+
+static void test_forced_io_encoding(void)
+{
+    /* Check various combinations */
+    printf("--- Use defaults ---\n");
+    check_stdio_details(NULL, NULL);
+    printf("--- Set errors only ---\n");
+    check_stdio_details(NULL, "surrogateescape");
+    printf("--- Set encoding only ---\n");
+    check_stdio_details("latin-1", NULL);
+    printf("--- Set encoding and errors ---\n");
+    check_stdio_details("latin-1", "surrogateescape");
+
+    /* Check calling after initialization fails */
+    Py_Initialize();
+
+    if (Py_SetStandardStreamEncoding(NULL, NULL) == 0) {
+        printf("Unexpected success calling Py_SetStandardStreamEncoding");
+    }
+    Py_Finalize();
+}
+
+/* Different embedding tests */
+int main(int argc, char *argv[])
+{
+
+    /* TODO: Check the argument string to allow for more test cases */
+    if (argc > 1) {
+        /* For now: assume "forced_io_encoding */
+        test_forced_io_encoding();
+    } else {
+        /* Run the original embedding test case by default */
+        test_repeated_init_and_subinterpreters();
+    }
     return 0;
 }
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index d83d117..ab0fea4 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -17,6 +17,8 @@
 static long nb_threads = 0;
 static PyObject *str_dict;
 
+_Py_IDENTIFIER(stderr);
+
 /* Lock objects */
 
 typedef struct {
@@ -68,7 +70,7 @@
             Py_BEGIN_ALLOW_THREADS
             r = PyThread_acquire_lock_timed(lock, microseconds, 1);
             Py_END_ALLOW_THREADS
-        } 
+        }
 
         if (r == PY_LOCK_INTR) {
             /* Run signal handlers if we were interrupted.  Propagate
@@ -255,14 +257,17 @@
 static void
 rlock_dealloc(rlockobject *self)
 {
-    assert(self->rlock_lock);
     if (self->in_weakreflist != NULL)
         PyObject_ClearWeakRefs((PyObject *) self);
-    /* Unlock the lock so it's safe to free it */
-    if (self->rlock_count > 0)
-        PyThread_release_lock(self->rlock_lock);
+    /* self->rlock_lock can be NULL if PyThread_allocate_lock() failed
+       in rlock_new() */
+    if (self->rlock_lock != NULL) {
+        /* Unlock the lock so it's safe to free it */
+        if (self->rlock_count > 0)
+            PyThread_release_lock(self->rlock_lock);
 
-    PyThread_free_lock(self->rlock_lock);
+        PyThread_free_lock(self->rlock_lock);
+    }
     Py_TYPE(self)->tp_free(self);
 }
 
@@ -452,15 +457,16 @@
 
     self = (rlockobject *) type->tp_alloc(type, 0);
     if (self != NULL) {
-        self->rlock_lock = PyThread_allocate_lock();
-        if (self->rlock_lock == NULL) {
-            type->tp_free(self);
-            PyErr_SetString(ThreadError, "can't allocate lock");
-            return NULL;
-        }
         self->in_weakreflist = NULL;
         self->rlock_owner = 0;
         self->rlock_count = 0;
+
+        self->rlock_lock = PyThread_allocate_lock();
+        if (self->rlock_lock == NULL) {
+            Py_DECREF(self);
+            PyErr_SetString(ThreadError, "can't allocate lock");
+            return NULL;
+        }
     }
 
     return (PyObject *) self;
@@ -1001,7 +1007,7 @@
             PySys_WriteStderr(
                 "Unhandled exception in thread started by ");
             PyErr_Fetch(&exc, &value, &tb);
-            file = PySys_GetObject("stderr");
+            file = _PySys_GetObjectId(&PyId_stderr);
             if (file != NULL && file != Py_None)
                 PyFile_WriteObject(boot->func, file, 0);
             else
diff --git a/Modules/_weakref.c b/Modules/_weakref.c
index 88995b8..1e8debc 100644
--- a/Modules/_weakref.c
+++ b/Modules/_weakref.c
@@ -4,25 +4,54 @@
 #define GET_WEAKREFS_LISTPTR(o) \
         ((PyWeakReference **) PyObject_GET_WEAKREFS_LISTPTR(o))
 
+/*[clinic]
 
-PyDoc_STRVAR(weakref_getweakrefcount__doc__,
-"getweakrefcount(object) -- return the number of weak references\n"
-"to 'object'.");
+module _weakref
+
+_weakref.getweakrefcount -> Py_ssize_t
+
+  object: object
+  /
+
+Return the number of weak references to 'object'.
+[clinic]*/
+
+PyDoc_STRVAR(_weakref_getweakrefcount__doc__,
+"Return the number of weak references to \'object\'.\n"
+"\n"
+"_weakref.getweakrefcount(object)");
+
+#define _WEAKREF_GETWEAKREFCOUNT_METHODDEF    \
+    {"getweakrefcount", (PyCFunction)_weakref_getweakrefcount, METH_O, _weakref_getweakrefcount__doc__},
+
+static Py_ssize_t
+_weakref_getweakrefcount_impl(PyObject *self, PyObject *object);
 
 static PyObject *
-weakref_getweakrefcount(PyObject *self, PyObject *object)
+_weakref_getweakrefcount(PyObject *self, PyObject *object)
 {
-    PyObject *result = NULL;
+    PyObject *return_value = NULL;
+    Py_ssize_t _return_value;
+    _return_value = _weakref_getweakrefcount_impl(self, object);
+    if ((_return_value == -1) && PyErr_Occurred())
+        goto exit;
+    return_value = PyLong_FromSsize_t(_return_value);
 
-    if (PyType_SUPPORTS_WEAKREFS(Py_TYPE(object))) {
-        PyWeakReference **list = GET_WEAKREFS_LISTPTR(object);
+exit:
+    return return_value;
+}
 
-        result = PyLong_FromSsize_t(_PyWeakref_GetWeakrefCount(*list));
-    }
-    else
-        result = PyLong_FromLong(0);
+static Py_ssize_t
+_weakref_getweakrefcount_impl(PyObject *self, PyObject *object)
+/*[clinic checksum: 0b7e7ddd87d483719ebac0fba364fff0ed0182d9]*/
+{
+    PyWeakReference **list;
 
-    return result;
+    if (!PyType_SUPPORTS_WEAKREFS(Py_TYPE(object)))
+        return 0;
+    
+    list = GET_WEAKREFS_LISTPTR(object);
+    return _PyWeakref_GetWeakrefCount(*list);
 }
 
 
@@ -78,8 +107,7 @@
 
 static PyMethodDef
 weakref_functions[] =  {
-    {"getweakrefcount", weakref_getweakrefcount,        METH_O,
-     weakref_getweakrefcount__doc__},
+    _WEAKREF_GETWEAKREFCOUNT_METHODDEF
     {"getweakrefs",     weakref_getweakrefs,            METH_O,
      weakref_getweakrefs__doc__},
     {"proxy",           weakref_proxy,                  METH_VARARGS,
@@ -106,7 +134,7 @@
     PyObject *m;
 
     m = PyModule_Create(&weakrefmodule);
-                       
+
     if (m != NULL) {
         Py_INCREF(&_PyWeakref_RefType);
         PyModule_AddObject(m, "ref",
diff --git a/Modules/audioop.c b/Modules/audioop.c
index 7175cec..5c83a7d 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -5,18 +5,6 @@
 
 #include "Python.h"
 
-#if SIZEOF_INT == 4
-typedef int Py_Int32;
-typedef unsigned int Py_UInt32;
-#else
-#if SIZEOF_LONG == 4
-typedef long Py_Int32;
-typedef unsigned long Py_UInt32;
-#else
-#error "No 4-byte integral type"
-#endif
-#endif
-
 typedef short PyInt16;
 
 #if defined(__CHAR_UNSIGNED__)
@@ -27,7 +15,8 @@
 #endif
 
 static const int maxvals[] = {0, 0x7F, 0x7FFF, 0x7FFFFF, 0x7FFFFFFF};
-static const int minvals[] = {0, -0x80, -0x8000, -0x800000, -0x80000000};
+/* -1 trick is needed on Windows to support -0x80000000 without a warning */
+static const int minvals[] = {0, -0x80, -0x8000, -0x800000, -0x7FFFFFFF-1};
 static const unsigned int masks[] = {0, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFFF};
 
 static int
@@ -160,9 +149,6 @@
     PyInt16         seg;
     unsigned char   uval;
 
-    /* The original sox code does this in the calling function, not here */
-    pcm_val = pcm_val >> 2;
-
     /* u-law inverts all bits */
     /* Get the sign and the magnitude of the value. */
     if (pcm_val < 0) {
@@ -257,9 +243,6 @@
     short           seg;
     unsigned char   aval;
 
-    /* The original sox code does this in the calling function, not here */
-    pcm_val = pcm_val >> 3;
-
     /* A-law using even bit inversion */
     if (pcm_val >= 0) {
         mask = 0xD5;            /* sign (7th) bit = 1 */
@@ -304,19 +287,91 @@
     15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
 };
 
-#define CHARP(cp, i) ((signed char *)(cp+i))
-#define SHORTP(cp, i) ((short *)(cp+i))
-#define LONGP(cp, i) ((Py_Int32 *)(cp+i))
+#define GETINTX(T, cp, i)  (*(T *)((unsigned char *)(cp) + (i)))
+#define SETINTX(T, cp, i, val)  do {                    \
+        *(T *)((unsigned char *)(cp) + (i)) = (T)(val); \
+    } while (0)
 
 
+#define GETINT8(cp, i)          GETINTX(signed char, (cp), (i))
+#define GETINT16(cp, i)         GETINTX(short, (cp), (i))
+#define GETINT32(cp, i)         GETINTX(PY_INT32_T, (cp), (i))
+
+#if WORDS_BIGENDIAN
+#define GETINT24(cp, i)  (                              \
+        ((unsigned char *)(cp) + (i))[2] +              \
+        (((unsigned char *)(cp) + (i))[1] << 8) +       \
+        (((signed char *)(cp) + (i))[0] << 16) )
+#else
+#define GETINT24(cp, i)  (                              \
+        ((unsigned char *)(cp) + (i))[0] +              \
+        (((unsigned char *)(cp) + (i))[1] << 8) +       \
+        (((signed char *)(cp) + (i))[2] << 16) )
+#endif
+
+
+#define SETINT8(cp, i, val)     SETINTX(signed char, (cp), (i), (val))
+#define SETINT16(cp, i, val)    SETINTX(short, (cp), (i), (val))
+#define SETINT32(cp, i, val)    SETINTX(PY_INT32_T, (cp), (i), (val))
+
+#if WORDS_BIGENDIAN
+#define SETINT24(cp, i, val)  do {                              \
+        ((unsigned char *)(cp) + (i))[2] = (int)(val);          \
+        ((unsigned char *)(cp) + (i))[1] = (int)(val) >> 8;     \
+        ((signed char *)(cp) + (i))[0] = (int)(val) >> 16;      \
+    } while (0)
+#else
+#define SETINT24(cp, i, val)  do {                              \
+        ((unsigned char *)(cp) + (i))[0] = (int)(val);          \
+        ((unsigned char *)(cp) + (i))[1] = (int)(val) >> 8;     \
+        ((signed char *)(cp) + (i))[2] = (int)(val) >> 16;      \
+    } while (0)
+#endif
+
+
+#define GETRAWSAMPLE(size, cp, i)  (                    \
+        (size == 1) ? (int)GETINT8((cp), (i)) :         \
+        (size == 2) ? (int)GETINT16((cp), (i)) :        \
+        (size == 3) ? (int)GETINT24((cp), (i)) :        \
+                      (int)GETINT32((cp), (i)))
+
+#define SETRAWSAMPLE(size, cp, i, val)  do {    \
+        if (size == 1)                          \
+            SETINT8((cp), (i), (val));          \
+        else if (size == 2)                     \
+            SETINT16((cp), (i), (val));         \
+        else if (size == 3)                     \
+            SETINT24((cp), (i), (val));         \
+        else                                    \
+            SETINT32((cp), (i), (val));         \
+    } while(0)
+
+
+#define GETSAMPLE32(size, cp, i)  (                     \
+        (size == 1) ? (int)GETINT8((cp), (i)) << 24 :   \
+        (size == 2) ? (int)GETINT16((cp), (i)) << 16 :  \
+        (size == 3) ? (int)GETINT24((cp), (i)) << 8 :   \
+                      (int)GETINT32((cp), (i)))
+
+#define SETSAMPLE32(size, cp, i, val)  do {     \
+        if (size == 1)                          \
+            SETINT8((cp), (i), (val) >> 24);    \
+        else if (size == 2)                     \
+            SETINT16((cp), (i), (val) >> 16);   \
+        else if (size == 3)                     \
+            SETINT24((cp), (i), (val) >> 8);    \
+        else                                    \
+            SETINT32((cp), (i), (val));         \
+    } while(0)
+
 
 static PyObject *AudioopError;
 
 static int
 audioop_check_size(int size)
 {
-    if (size != 1 && size != 2 && size != 4) {
-        PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
+    if (size < 1 || size > 4) {
+        PyErr_SetString(AudioopError, "Size should be 1, 2, 3 or 4");
         return 0;
     }
     else
@@ -338,121 +393,129 @@
 static PyObject *
 audioop_getsample(PyObject *self, PyObject *args)
 {
-    signed char *cp;
-    Py_ssize_t len, i;
-    int size, val = 0;
+    Py_buffer view;
+    Py_ssize_t i;
+    int size;
+    int val;
 
-    if ( !PyArg_ParseTuple(args, "s#in:getsample", &cp, &len, &size, &i) )
-        return 0;
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*in:getsample", &view, &size, &i))
         return NULL;
-    if ( i < 0 || i >= len/size ) {
+    if (!audioop_check_parameters(view.len, size))
+        goto error;
+    if (i < 0 || i >= view.len/size) {
         PyErr_SetString(AudioopError, "Index out of range");
-        return 0;
+        goto error;
     }
-    if ( size == 1 )      val = (int)*CHARP(cp, i);
-    else if ( size == 2 ) val = (int)*SHORTP(cp, i*2);
-    else if ( size == 4 ) val = (int)*LONGP(cp, i*4);
+    val = GETRAWSAMPLE(size, view.buf, i*size);
+    PyBuffer_Release(&view);
     return PyLong_FromLong(val);
+
+  error:
+    PyBuffer_Release(&view);
+    return NULL;
 }
 
 static PyObject *
 audioop_max(PyObject *self, PyObject *args)
 {
-    signed char *cp;
-    Py_ssize_t len, i;
-    int size, val = 0;
+    Py_buffer view;
+    Py_ssize_t i;
+    int size;
     unsigned int absval, max = 0;
 
-    if ( !PyArg_ParseTuple(args, "s#i:max", &cp, &len, &size) )
-        return 0;
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*i:max", &view, &size))
         return NULL;
-    for ( i=0; i<len; i+= size) {
-        if ( size == 1 )      val = (int)*CHARP(cp, i);
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = (int)*LONGP(cp, i);
+    if (!audioop_check_parameters(view.len, size)) {
+        PyBuffer_Release(&view);
+        return NULL;
+    }
+    for (i = 0; i < view.len; i += size) {
+        int val = GETRAWSAMPLE(size, view.buf, i);
         if (val < 0) absval = (-val);
         else absval = val;
         if (absval > max) max = absval;
     }
+    PyBuffer_Release(&view);
     return PyLong_FromUnsignedLong(max);
 }
 
 static PyObject *
 audioop_minmax(PyObject *self, PyObject *args)
 {
-    signed char *cp;
-    Py_ssize_t len, i;
-    int size, val = 0;
-    int min = 0x7fffffff, max = -0x80000000;
+    Py_buffer view;
+    Py_ssize_t i;
+    int size;
+    /* -1 trick below is needed on Windows to support -0x80000000 without
+    a warning */
+    int min = 0x7fffffff, max = -0x7FFFFFFF-1;
 
-    if (!PyArg_ParseTuple(args, "s#i:minmax", &cp, &len, &size))
+    if (!PyArg_ParseTuple(args, "y*i:minmax", &view, &size))
         return NULL;
-    if (!audioop_check_parameters(len, size))
+    if (!audioop_check_parameters(view.len, size)) {
+        PyBuffer_Release(&view);
         return NULL;
-    for (i = 0; i < len; i += size) {
-        if (size == 1) val = (int) *CHARP(cp, i);
-        else if (size == 2) val = (int) *SHORTP(cp, i);
-        else if (size == 4) val = (int) *LONGP(cp, i);
+    }
+    for (i = 0; i < view.len; i += size) {
+        int val = GETRAWSAMPLE(size, view.buf, i);
         if (val > max) max = val;
         if (val < min) min = val;
     }
+    PyBuffer_Release(&view);
     return Py_BuildValue("(ii)", min, max);
 }
 
 static PyObject *
 audioop_avg(PyObject *self, PyObject *args)
 {
-    signed char *cp;
-    Py_ssize_t len, i;
-    int size, val = 0;
-    double avg = 0.0;
+    Py_buffer view;
+    Py_ssize_t i;
+    int size, avg;
+    double sum = 0.0;
 
-    if ( !PyArg_ParseTuple(args, "s#i:avg", &cp, &len, &size) )
-        return 0;
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*i:avg", &view, &size))
         return NULL;
-    for ( i=0; i<len; i+= size) {
-        if ( size == 1 )      val = (int)*CHARP(cp, i);
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = (int)*LONGP(cp, i);
-        avg += val;
+    if (!audioop_check_parameters(view.len, size)) {
+        PyBuffer_Release(&view);
+        return NULL;
     }
-    if ( len == 0 )
-        val = 0;
+    for (i = 0; i < view.len; i += size)
+        sum += GETRAWSAMPLE(size, view.buf, i);
+    if (view.len == 0)
+        avg = 0;
     else
-        val = (int)floor(avg / (double)(len/size));
-    return PyLong_FromLong(val);
+        avg = (int)floor(sum / (double)(view.len/size));
+    PyBuffer_Release(&view);
+    return PyLong_FromLong(avg);
 }
 
 static PyObject *
 audioop_rms(PyObject *self, PyObject *args)
 {
-    signed char *cp;
-    Py_ssize_t len, i;
-    int size, val = 0;
+    Py_buffer view;
+    Py_ssize_t i;
+    int size;
     unsigned int res;
     double sum_squares = 0.0;
 
-    if ( !PyArg_ParseTuple(args, "s#i:rms", &cp, &len, &size) )
-        return 0;
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*i:rms", &view, &size))
         return NULL;
-    for ( i=0; i<len; i+= size) {
-        if ( size == 1 )      val = (int)*CHARP(cp, i);
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = (int)*LONGP(cp, i);
-        sum_squares += (double)val*(double)val;
+    if (!audioop_check_parameters(view.len, size)) {
+        PyBuffer_Release(&view);
+        return NULL;
     }
-    if ( len == 0 )
+    for (i = 0; i < view.len; i += size) {
+        double val = GETRAWSAMPLE(size, view.buf, i);
+        sum_squares += val*val;
+    }
+    if (view.len == 0)
         res = 0;
     else
-        res = (unsigned int)sqrt(sum_squares / (double)(len/size));
+        res = (unsigned int)sqrt(sum_squares / (double)(view.len/size));
+    PyBuffer_Release(&view);
     return PyLong_FromUnsignedLong(res);
 }
 
-static double _sum2(short *a, short *b, Py_ssize_t len)
+static double _sum2(const short *a, const short *b, Py_ssize_t len)
 {
     Py_ssize_t i;
     double sum = 0.0;
@@ -498,29 +561,28 @@
 static PyObject *
 audioop_findfit(PyObject *self, PyObject *args)
 {
-    short *cp1, *cp2;
+    Py_buffer view1;
+    Py_buffer view2;
+    const short *cp1, *cp2;
     Py_ssize_t len1, len2;
     Py_ssize_t j, best_j;
     double aj_m1, aj_lm1;
     double sum_ri_2, sum_aij_2, sum_aij_ri, result, best_result, factor;
 
-    /* Passing a short** for an 's' argument is correct only
-       if the string contents is aligned for interpretation
-       as short[]. Due to the definition of PyBytesObject,
-       this is currently (Python 2.6) the case. */
-    if ( !PyArg_ParseTuple(args, "s#s#:findfit",
-                           (char**)&cp1, &len1, (char**)&cp2, &len2) )
-        return 0;
-    if ( len1 & 1 || len2 & 1 ) {
+    if (!PyArg_ParseTuple(args, "y*y*:findfit", &view1, &view2))
+        return NULL;
+    if (view1.len & 1 || view2.len & 1) {
         PyErr_SetString(AudioopError, "Strings should be even-sized");
-        return 0;
+        goto error;
     }
-    len1 >>= 1;
-    len2 >>= 1;
+    cp1 = (const short *)view1.buf;
+    len1 = view1.len >> 1;
+    cp2 = (const short *)view2.buf;
+    len2 = view2.len >> 1;
 
-    if ( len1 < len2 ) {
+    if (len1 < len2) {
         PyErr_SetString(AudioopError, "First sample should be longer");
-        return 0;
+        goto error;
     }
     sum_ri_2 = _sum2(cp2, cp2, len2);
     sum_aij_2 = _sum2(cp1, cp1, len2);
@@ -550,7 +612,14 @@
 
     factor = _sum2(cp1+best_j, cp2, len2) / sum_ri_2;
 
+    PyBuffer_Release(&view1);
+    PyBuffer_Release(&view2);
     return Py_BuildValue("(nf)", best_j, factor);
+
+  error:
+    PyBuffer_Release(&view1);
+    PyBuffer_Release(&view2);
+    return NULL;
 }
 
 /*
@@ -560,28 +629,38 @@
 static PyObject *
 audioop_findfactor(PyObject *self, PyObject *args)
 {
-    short *cp1, *cp2;
-    Py_ssize_t len1, len2;
+    Py_buffer view1;
+    Py_buffer view2;
+    const short *cp1, *cp2;
+    Py_ssize_t len;
     double sum_ri_2, sum_aij_ri, result;
 
-    if ( !PyArg_ParseTuple(args, "s#s#:findfactor",
-                           (char**)&cp1, &len1, (char**)&cp2, &len2) )
-        return 0;
-    if ( len1 & 1 || len2 & 1 ) {
+    if (!PyArg_ParseTuple(args, "y*y*:findfactor", &view1, &view2))
+        return NULL;
+    if (view1.len & 1 || view2.len & 1) {
         PyErr_SetString(AudioopError, "Strings should be even-sized");
-        return 0;
+        goto error;
     }
-    if ( len1 != len2 ) {
+    if (view1.len != view2.len) {
         PyErr_SetString(AudioopError, "Samples should be same size");
-        return 0;
+        goto error;
     }
-    len2 >>= 1;
-    sum_ri_2 = _sum2(cp2, cp2, len2);
-    sum_aij_ri = _sum2(cp1, cp2, len2);
+    cp1 = (const short *)view1.buf;
+    cp2 = (const short *)view2.buf;
+    len = view1.len >> 1;
+    sum_ri_2 = _sum2(cp2, cp2, len);
+    sum_aij_ri = _sum2(cp1, cp2, len);
 
     result = sum_aij_ri / sum_ri_2;
 
+    PyBuffer_Release(&view1);
+    PyBuffer_Release(&view2);
     return PyFloat_FromDouble(result);
+
+  error:
+    PyBuffer_Release(&view1);
+    PyBuffer_Release(&view2);
+    return NULL;
 }
 
 /*
@@ -591,24 +670,25 @@
 static PyObject *
 audioop_findmax(PyObject *self, PyObject *args)
 {
-    short *cp1;
+    Py_buffer view;
+    const short *cp1;
     Py_ssize_t len1, len2;
     Py_ssize_t j, best_j;
     double aj_m1, aj_lm1;
     double result, best_result;
 
-    if ( !PyArg_ParseTuple(args, "s#n:findmax",
-                           (char**)&cp1, &len1, &len2) )
-        return 0;
-    if ( len1 & 1 ) {
+    if (!PyArg_ParseTuple(args, "y*n:findmax", &view, &len2))
+        return NULL;
+    if (view.len & 1) {
         PyErr_SetString(AudioopError, "Strings should be even-sized");
-        return 0;
+        goto error;
     }
-    len1 >>= 1;
+    cp1 = (const short *)view.buf;
+    len1 = view.len >> 1;
 
-    if ( len2 < 0 || len1 < len2 ) {
+    if (len2 < 0 || len1 < len2) {
         PyErr_SetString(AudioopError, "Input sample should be longer");
-        return 0;
+        goto error;
     }
 
     result = _sum2(cp1, cp1, len2);
@@ -629,34 +709,39 @@
 
     }
 
+    PyBuffer_Release(&view);
     return PyLong_FromSsize_t(best_j);
+
+  error:
+    PyBuffer_Release(&view);
+    return NULL;
 }
 
 static PyObject *
 audioop_avgpp(PyObject *self, PyObject *args)
 {
-    signed char *cp;
-    Py_ssize_t len, i;
-    int size, val = 0, prevval = 0, prevextremevalid = 0,
+    Py_buffer view;
+    Py_ssize_t i;
+    int size, prevval, prevextremevalid = 0,
         prevextreme = 0;
     double sum = 0.0;
     unsigned int avg;
     int diff, prevdiff, nextreme = 0;
 
-    if ( !PyArg_ParseTuple(args, "s#i:avgpp", &cp, &len, &size) )
-        return 0;
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*i:avgpp", &view, &size))
         return NULL;
-    if (len <= size)
+    if (!audioop_check_parameters(view.len, size)) {
+        PyBuffer_Release(&view);
+        return NULL;
+    }
+    if (view.len <= size) {
+        PyBuffer_Release(&view);
         return PyLong_FromLong(0);
-    if ( size == 1 )      prevval = (int)*CHARP(cp, 0);
-    else if ( size == 2 ) prevval = (int)*SHORTP(cp, 0);
-    else if ( size == 4 ) prevval = (int)*LONGP(cp, 0);
+    }
+    prevval = GETRAWSAMPLE(size, view.buf, 0);
     prevdiff = 17; /* Anything != 0, 1 */
-    for ( i=size; i<len; i+= size) {
-        if ( size == 1 )      val = (int)*CHARP(cp, i);
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = (int)*LONGP(cp, i);
+    for (i = size; i < view.len; i += size) {
+        int val = GETRAWSAMPLE(size, view.buf, i);
         if (val != prevval) {
             diff = val < prevval;
             if (prevdiff == !diff) {
@@ -664,7 +749,12 @@
                 ** extreme value and remember.
                 */
                 if (prevextremevalid) {
-                    sum += fabs((double)prevval - (double)prevextreme);
+                    if (prevval < prevextreme)
+                        sum += (double)((unsigned int)prevextreme -
+                                        (unsigned int)prevval);
+                    else
+                        sum += (double)((unsigned int)prevval -
+                                        (unsigned int)prevextreme);
                     nextreme++;
                 }
                 prevextremevalid = 1;
@@ -678,33 +768,34 @@
         avg = 0;
     else
         avg = (unsigned int)(sum / (double)nextreme);
+    PyBuffer_Release(&view);
     return PyLong_FromUnsignedLong(avg);
 }
 
 static PyObject *
 audioop_maxpp(PyObject *self, PyObject *args)
 {
-    signed char *cp;
-    Py_ssize_t len, i;
-    int size, val = 0, prevval = 0, prevextremevalid = 0,
+    Py_buffer view;
+    Py_ssize_t i;
+    int size, prevval, prevextremevalid = 0,
         prevextreme = 0;
     unsigned int max = 0, extremediff;
     int diff, prevdiff;
 
-    if ( !PyArg_ParseTuple(args, "s#i:maxpp", &cp, &len, &size) )
-        return 0;
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*i:maxpp", &view, &size))
         return NULL;
-    if (len <= size)
+    if (!audioop_check_parameters(view.len, size)) {
+        PyBuffer_Release(&view);
+        return NULL;
+    }
+    if (view.len <= size) {
+        PyBuffer_Release(&view);
         return PyLong_FromLong(0);
-    if ( size == 1 )      prevval = (int)*CHARP(cp, 0);
-    else if ( size == 2 ) prevval = (int)*SHORTP(cp, 0);
-    else if ( size == 4 ) prevval = (int)*LONGP(cp, 0);
+    }
+    prevval = GETRAWSAMPLE(size, view.buf, 0);
     prevdiff = 17; /* Anything != 0, 1 */
-    for ( i=size; i<len; i+= size) {
-        if ( size == 1 )      val = (int)*CHARP(cp, i);
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = (int)*LONGP(cp, i);
+    for (i = size; i < view.len; i += size) {
+        int val = GETRAWSAMPLE(size, view.buf, i);
         if (val != prevval) {
             diff = val < prevval;
             if (prevdiff == !diff) {
@@ -728,68 +819,67 @@
             prevdiff = diff;
         }
     }
+    PyBuffer_Release(&view);
     return PyLong_FromUnsignedLong(max);
 }
 
 static PyObject *
 audioop_cross(PyObject *self, PyObject *args)
 {
-    signed char *cp;
-    Py_ssize_t len, i;
-    int size, val = 0;
+    Py_buffer view;
+    Py_ssize_t i;
+    int size;
     int prevval;
     Py_ssize_t ncross;
 
-    if ( !PyArg_ParseTuple(args, "s#i:cross", &cp, &len, &size) )
-        return 0;
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*i:cross", &view, &size))
         return NULL;
+    if (!audioop_check_parameters(view.len, size)) {
+        PyBuffer_Release(&view);
+        return NULL;
+    }
     ncross = -1;
     prevval = 17; /* Anything <> 0,1 */
-    for ( i=0; i<len; i+= size) {
-        if ( size == 1 )      val = ((int)*CHARP(cp, i)) >> 7;
-        else if ( size == 2 ) val = ((int)*SHORTP(cp, i)) >> 15;
-        else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 31;
-        val = val & 1;
-        if ( val != prevval ) ncross++;
+    for (i = 0; i < view.len; i += size) {
+        int val = GETRAWSAMPLE(size, view.buf, i) < 0;
+        if (val != prevval) ncross++;
         prevval = val;
     }
+    PyBuffer_Release(&view);
     return PyLong_FromSsize_t(ncross);
 }
 
 static PyObject *
 audioop_mul(PyObject *self, PyObject *args)
 {
-    signed char *cp, *ncp;
-    Py_ssize_t len, i;
-    int size, val = 0;
-    double factor, fval, maxval, minval;
-    PyObject *rv;
+    Py_buffer view;
+    signed char *ncp;
+    Py_ssize_t i;
+    int size;
+    double factor, maxval, minval;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#id:mul", &cp, &len, &size, &factor ) )
-        return 0;
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*id:mul", &view, &size, &factor))
         return NULL;
+    if (!audioop_check_parameters(view.len, size))
+        goto exit;
 
     maxval = (double) maxvals[size];
     minval = (double) minvals[size];
 
-    rv = PyBytes_FromStringAndSize(NULL, len);
-    if ( rv == 0 )
-        return 0;
+    rv = PyBytes_FromStringAndSize(NULL, view.len);
+    if (rv == NULL)
+        goto exit;
     ncp = (signed char *)PyBytes_AsString(rv);
 
-
-    for ( i=0; i < len; i += size ) {
-        if ( size == 1 )      val = (int)*CHARP(cp, i);
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = (int)*LONGP(cp, i);
-        fval = (double)val*factor;
-        val = (int)floor(fbound(fval, minval, maxval));
-        if ( size == 1 )      *CHARP(ncp, i) = (signed char)val;
-        else if ( size == 2 ) *SHORTP(ncp, i) = (short)val;
-        else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)val;
+    for (i = 0; i < view.len; i += size) {
+        double val = GETRAWSAMPLE(size, view.buf, i);
+        val *= factor;
+        val = floor(fbound(val, minval, maxval));
+        SETRAWSAMPLE(size, ncp, i, (int)val);
     }
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
@@ -799,49 +889,38 @@
     Py_buffer pcp;
     signed char *cp, *ncp;
     Py_ssize_t len, i;
-    int size, val1 = 0, val2 = 0;
-    double fac1, fac2, fval, maxval, minval;
-    PyObject *rv;
+    int size;
+    double fac1, fac2, maxval, minval;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s*idd:tomono",
-                           &pcp, &size, &fac1, &fac2 ) )
-        return 0;
+    if (!PyArg_ParseTuple(args, "y*idd:tomono",
+                          &pcp, &size, &fac1, &fac2))
+        return NULL;
     cp = pcp.buf;
     len = pcp.len;
-    if (!audioop_check_parameters(len, size)) {
-        PyBuffer_Release(&pcp);
-        return NULL;
-    }
+    if (!audioop_check_parameters(len, size))
+        goto exit;
     if (((len / size) & 1) != 0) {
         PyErr_SetString(AudioopError, "not a whole number of frames");
-        PyBuffer_Release(&pcp);
-        return NULL;
+        goto exit;
     }
 
     maxval = (double) maxvals[size];
     minval = (double) minvals[size];
 
     rv = PyBytes_FromStringAndSize(NULL, len/2);
-    if ( rv == 0 ) {
-        PyBuffer_Release(&pcp);
-        return 0;
-    }
+    if (rv == NULL)
+        goto exit;
     ncp = (signed char *)PyBytes_AsString(rv);
 
-
-    for ( i=0; i < len; i += size*2 ) {
-        if ( size == 1 )      val1 = (int)*CHARP(cp, i);
-        else if ( size == 2 ) val1 = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val1 = (int)*LONGP(cp, i);
-        if ( size == 1 )      val2 = (int)*CHARP(cp, i+1);
-        else if ( size == 2 ) val2 = (int)*SHORTP(cp, i+2);
-        else if ( size == 4 ) val2 = (int)*LONGP(cp, i+4);
-        fval = (double)val1*fac1 + (double)val2*fac2;
-        val1 = (int)floor(fbound(fval, minval, maxval));
-        if ( size == 1 )      *CHARP(ncp, i/2) = (signed char)val1;
-        else if ( size == 2 ) *SHORTP(ncp, i/2) = (short)val1;
-        else if ( size == 4 ) *LONGP(ncp, i/2)= (Py_Int32)val1;
+    for (i = 0; i < len; i += size*2) {
+        double val1 = GETRAWSAMPLE(size, cp, i);
+        double val2 = GETRAWSAMPLE(size, cp, i + size);
+        double val = val1*fac1 + val2*fac2;
+        val = floor(fbound(val, minval, maxval));
+        SETRAWSAMPLE(size, ncp, i/2, val);
     }
+  exit:
     PyBuffer_Release(&pcp);
     return rv;
 }
@@ -849,89 +928,76 @@
 static PyObject *
 audioop_tostereo(PyObject *self, PyObject *args)
 {
-    signed char *cp, *ncp;
-    Py_ssize_t len, i;
-    int size, val1, val2, val = 0;
-    double fac1, fac2, fval, maxval, minval;
-    PyObject *rv;
+    Py_buffer view;
+    signed char *ncp;
+    Py_ssize_t i;
+    int size;
+    double fac1, fac2, maxval, minval;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#idd:tostereo",
-                           &cp, &len, &size, &fac1, &fac2 ) )
-        return 0;
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*idd:tostereo",
+                          &view, &size, &fac1, &fac2))
         return NULL;
+    if (!audioop_check_parameters(view.len, size))
+        goto exit;
 
     maxval = (double) maxvals[size];
     minval = (double) minvals[size];
 
-    if (len > PY_SSIZE_T_MAX/2) {
+    if (view.len > PY_SSIZE_T_MAX/2) {
         PyErr_SetString(PyExc_MemoryError,
                         "not enough memory for output buffer");
-        return 0;
+        goto exit;
     }
 
-    rv = PyBytes_FromStringAndSize(NULL, len*2);
-    if ( rv == 0 )
-        return 0;
+    rv = PyBytes_FromStringAndSize(NULL, view.len*2);
+    if (rv == NULL)
+        goto exit;
     ncp = (signed char *)PyBytes_AsString(rv);
 
-
-    for ( i=0; i < len; i += size ) {
-        if ( size == 1 )      val = (int)*CHARP(cp, i);
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = (int)*LONGP(cp, i);
-
-        fval = (double)val*fac1;
-        val1 = (int)floor(fbound(fval, minval, maxval));
-
-        fval = (double)val*fac2;
-        val2 = (int)floor(fbound(fval, minval, maxval));
-
-        if ( size == 1 )      *CHARP(ncp, i*2) = (signed char)val1;
-        else if ( size == 2 ) *SHORTP(ncp, i*2) = (short)val1;
-        else if ( size == 4 ) *LONGP(ncp, i*2) = (Py_Int32)val1;
-
-        if ( size == 1 )      *CHARP(ncp, i*2+1) = (signed char)val2;
-        else if ( size == 2 ) *SHORTP(ncp, i*2+2) = (short)val2;
-        else if ( size == 4 ) *LONGP(ncp, i*2+4) = (Py_Int32)val2;
+    for (i = 0; i < view.len; i += size) {
+        double val = GETRAWSAMPLE(size, view.buf, i);
+        int val1 = (int)floor(fbound(val*fac1, minval, maxval));
+        int val2 = (int)floor(fbound(val*fac2, minval, maxval));
+        SETRAWSAMPLE(size, ncp, i*2, val1);
+        SETRAWSAMPLE(size, ncp, i*2 + size, val2);
     }
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
 static PyObject *
 audioop_add(PyObject *self, PyObject *args)
 {
-    signed char *cp1, *cp2, *ncp;
-    Py_ssize_t len1, len2, i;
-    int size, val1 = 0, val2 = 0, minval, maxval, newval;
-    PyObject *rv;
+    Py_buffer view1;
+    Py_buffer view2;
+    signed char *ncp;
+    Py_ssize_t i;
+    int size, minval, maxval, newval;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#s#i:add",
-                      &cp1, &len1, &cp2, &len2, &size ) )
-        return 0;
-    if (!audioop_check_parameters(len1, size))
+    if (!PyArg_ParseTuple(args, "y*y*i:add",
+                          &view1, &view2, &size))
         return NULL;
-    if ( len1 != len2 ) {
+    if (!audioop_check_parameters(view1.len, size))
+        goto exit;
+    if (view1.len != view2.len) {
         PyErr_SetString(AudioopError, "Lengths should be the same");
-        return 0;
+        goto exit;
     }
 
     maxval = maxvals[size];
     minval = minvals[size];
 
-    rv = PyBytes_FromStringAndSize(NULL, len1);
-    if ( rv == 0 )
-        return 0;
+    rv = PyBytes_FromStringAndSize(NULL, view1.len);
+    if (rv == NULL)
+        goto exit;
     ncp = (signed char *)PyBytes_AsString(rv);
 
-    for ( i=0; i < len1; i += size ) {
-        if ( size == 1 )      val1 = (int)*CHARP(cp1, i);
-        else if ( size == 2 ) val1 = (int)*SHORTP(cp1, i);
-        else if ( size == 4 ) val1 = (int)*LONGP(cp1, i);
-
-        if ( size == 1 )      val2 = (int)*CHARP(cp2, i);
-        else if ( size == 2 ) val2 = (int)*SHORTP(cp2, i);
-        else if ( size == 4 ) val2 = (int)*LONGP(cp2, i);
+    for (i = 0; i < view1.len; i += size) {
+        int val1 = GETRAWSAMPLE(size, view1.buf, i);
+        int val2 = GETRAWSAMPLE(size, view2.buf, i);
 
         if (size < 4) {
             newval = val1 + val2;
@@ -947,124 +1013,134 @@
             newval = (int)floor(fbound(fval, minval, maxval));
         }
 
-        if ( size == 1 )      *CHARP(ncp, i) = (signed char)newval;
-        else if ( size == 2 ) *SHORTP(ncp, i) = (short)newval;
-        else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)newval;
+        SETRAWSAMPLE(size, ncp, i, newval);
     }
+  exit:
+    PyBuffer_Release(&view1);
+    PyBuffer_Release(&view2);
     return rv;
 }
 
 static PyObject *
 audioop_bias(PyObject *self, PyObject *args)
 {
-    signed char *cp, *ncp;
-    Py_ssize_t len, i;
+    Py_buffer view;
+    signed char *ncp;
+    Py_ssize_t i;
     int size, bias;
     unsigned int val = 0, mask;
-    PyObject *rv;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#ii:bias",
-                      &cp, &len, &size , &bias) )
-        return 0;
-
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*ii:bias",
+                          &view, &size, &bias))
         return NULL;
 
-    rv = PyBytes_FromStringAndSize(NULL, len);
-    if ( rv == 0 )
-        return 0;
+    if (!audioop_check_parameters(view.len, size))
+        goto exit;
+
+    rv = PyBytes_FromStringAndSize(NULL, view.len);
+    if (rv == NULL)
+        goto exit;
     ncp = (signed char *)PyBytes_AsString(rv);
 
     mask = masks[size];
 
-    for ( i=0; i < len; i += size ) {
-        if ( size == 1 )      val = (unsigned int)(unsigned char)*CHARP(cp, i);
-        else if ( size == 2 ) val = (unsigned int)(unsigned short)*SHORTP(cp, i);
-        else if ( size == 4 ) val = (unsigned int)(Py_UInt32)*LONGP(cp, i);
+    for (i = 0; i < view.len; i += size) {
+        if (size == 1)
+            val = GETINTX(unsigned char, view.buf, i);
+        else if (size == 2)
+            val = GETINTX(unsigned short, view.buf, i);
+        else if (size == 3)
+            val = ((unsigned int)GETINT24(view.buf, i)) & 0xffffffu;
+        else {
+            assert(size == 4);
+            val = GETINTX(PY_UINT32_T, view.buf, i);
+        }
 
         val += (unsigned int)bias;
         /* wrap around in case of overflow */
         val &= mask;
 
-        if ( size == 1 )      *CHARP(ncp, i) = (signed char)(unsigned char)val;
-        else if ( size == 2 ) *SHORTP(ncp, i) = (short)(unsigned short)val;
-        else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)(Py_UInt32)val;
+        if (size == 1)
+            SETINTX(unsigned char, ncp, i, val);
+        else if (size == 2)
+            SETINTX(unsigned short, ncp, i, val);
+        else if (size == 3)
+            SETINT24(ncp, i, (int)val);
+        else {
+            assert(size == 4);
+            SETINTX(PY_UINT32_T, ncp, i, val);
+        }
     }
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
 static PyObject *
 audioop_reverse(PyObject *self, PyObject *args)
 {
-    signed char *cp;
+    Py_buffer view;
     unsigned char *ncp;
-    Py_ssize_t len, i, j;
-    int size, val = 0;
-    PyObject *rv;
+    Py_ssize_t i;
+    int size;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#i:reverse",
-                      &cp, &len, &size) )
-        return 0;
-
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*i:reverse",
+                          &view, &size))
         return NULL;
 
-    rv = PyBytes_FromStringAndSize(NULL, len);
-    if ( rv == 0 )
-        return 0;
+    if (!audioop_check_parameters(view.len, size))
+        goto exit;
+
+    rv = PyBytes_FromStringAndSize(NULL, view.len);
+    if (rv == NULL)
+        goto exit;
     ncp = (unsigned char *)PyBytes_AsString(rv);
 
-    for ( i=0; i < len; i += size ) {
-        if ( size == 1 )      val = ((int)*CHARP(cp, i)) << 24;
-        else if ( size == 2 ) val = ((int)*SHORTP(cp, i)) << 16;
-        else if ( size == 4 ) val = (int)*LONGP(cp, i);
-
-        j = len - i - size;
-
-        if ( size == 1 )      *CHARP(ncp, j) = (signed char)(val >> 24);
-        else if ( size == 2 ) *SHORTP(ncp, j) = (short)(val >> 16);
-        else if ( size == 4 ) *LONGP(ncp, j) = (Py_Int32)val;
+    for (i = 0; i < view.len; i += size) {
+        int val = GETRAWSAMPLE(size, view.buf, i);
+        SETRAWSAMPLE(size, ncp, view.len - i - size, val);
     }
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
 static PyObject *
 audioop_lin2lin(PyObject *self, PyObject *args)
 {
-    signed char *cp;
+    Py_buffer view;
     unsigned char *ncp;
-    Py_ssize_t len, i, j;
-    int size, size2, val = 0;
-    PyObject *rv;
+    Py_ssize_t i, j;
+    int size, size2;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#ii:lin2lin",
-                      &cp, &len, &size, &size2) )
-        return 0;
-
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*ii:lin2lin",
+                          &view, &size, &size2))
         return NULL;
+
+    if (!audioop_check_parameters(view.len, size))
+        goto exit;
     if (!audioop_check_size(size2))
-        return NULL;
+        goto exit;
 
-    if (len/size > PY_SSIZE_T_MAX/size2) {
+    if (view.len/size > PY_SSIZE_T_MAX/size2) {
         PyErr_SetString(PyExc_MemoryError,
                         "not enough memory for output buffer");
-        return 0;
+        goto exit;
     }
-    rv = PyBytes_FromStringAndSize(NULL, (len/size)*size2);
-    if ( rv == 0 )
-        return 0;
+    rv = PyBytes_FromStringAndSize(NULL, (view.len/size)*size2);
+    if (rv == NULL)
+        goto exit;
     ncp = (unsigned char *)PyBytes_AsString(rv);
 
-    for ( i=0, j=0; i < len; i += size, j += size2 ) {
-        if ( size == 1 )      val = ((int)*CHARP(cp, i)) << 24;
-        else if ( size == 2 ) val = ((int)*SHORTP(cp, i)) << 16;
-        else if ( size == 4 ) val = (int)*LONGP(cp, i);
-
-        if ( size2 == 1 )  *CHARP(ncp, j) = (signed char)(val >> 24);
-        else if ( size2 == 2 ) *SHORTP(ncp, j) = (short)(val >> 16);
-        else if ( size2 == 4 ) *LONGP(ncp, j) = (Py_Int32)val;
+    for (i = j = 0; i < view.len; i += size, j += size2) {
+        int val = GETSAMPLE32(size, view.buf, i);
+        SETSAMPLE32(size2, ncp, j, val);
     }
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
@@ -1082,6 +1158,7 @@
 static PyObject *
 audioop_ratecv(PyObject *self, PyObject *args)
 {
+    Py_buffer view;
     char *cp, *ncp;
     Py_ssize_t len;
     int size, nchannels, inrate, outrate, weightA, weightB;
@@ -1091,15 +1168,15 @@
 
     weightA = 1;
     weightB = 0;
-    if (!PyArg_ParseTuple(args, "s#iiiiO|ii:ratecv", &cp, &len, &size,
+    if (!PyArg_ParseTuple(args, "y*iiiiO|ii:ratecv", &view, &size,
                           &nchannels, &inrate, &outrate, &state,
                           &weightA, &weightB))
         return NULL;
     if (!audioop_check_size(size))
-        return NULL;
+        goto exit2;
     if (nchannels < 1) {
         PyErr_SetString(AudioopError, "# of channels should be >= 1");
-        return NULL;
+        goto exit2;
     }
     if (size > INT_MAX / nchannels) {
         /* This overflow test is rigorously correct because
@@ -1107,21 +1184,21 @@
            from the docs for the error msg. */
         PyErr_SetString(PyExc_OverflowError,
                         "width * nchannels too big for a C int");
-        return NULL;
+        goto exit2;
     }
     bytes_per_frame = size * nchannels;
     if (weightA < 1 || weightB < 0) {
         PyErr_SetString(AudioopError,
             "weightA should be >= 1, weightB should be >= 0");
-        return NULL;
+        goto exit2;
     }
-    if (len % bytes_per_frame != 0) {
+    if (view.len % bytes_per_frame != 0) {
         PyErr_SetString(AudioopError, "not a whole number of frames");
-        return NULL;
+        goto exit2;
     }
     if (inrate <= 0 || outrate <= 0) {
         PyErr_SetString(AudioopError, "sampling rate not > 0");
-        return NULL;
+        goto exit2;
     }
     /* divide inrate and outrate by their greatest common divisor */
     d = gcd(inrate, outrate);
@@ -1135,7 +1212,7 @@
     if ((size_t)nchannels > PY_SIZE_MAX/sizeof(int)) {
         PyErr_SetString(PyExc_MemoryError,
                         "not enough memory for output buffer");
-        return 0;
+        goto exit2;
     }
     prev_i = (int *) PyMem_Malloc(nchannels * sizeof(int));
     cur_i = (int *) PyMem_Malloc(nchannels * sizeof(int));
@@ -1144,7 +1221,7 @@
         goto exit;
     }
 
-    len /= bytes_per_frame; /* # of frames */
+    len = view.len / bytes_per_frame; /* # of frames */
 
     if (state == Py_None) {
         d = -outrate;
@@ -1194,6 +1271,7 @@
         goto exit;
     }
     ncp = PyBytes_AsString(str);
+    cp = view.buf;
 
     for (;;) {
         while (d < 0) {
@@ -1224,12 +1302,7 @@
             }
             for (chan = 0; chan < nchannels; chan++) {
                 prev_i[chan] = cur_i[chan];
-                if (size == 1)
-                    cur_i[chan] = ((int)*CHARP(cp, 0)) << 24;
-                else if (size == 2)
-                    cur_i[chan] = ((int)*SHORTP(cp, 0)) << 16;
-                else if (size == 4)
-                    cur_i[chan] = (int)*LONGP(cp, 0);
+                cur_i[chan] = GETSAMPLE32(size, cp, 0);
                 cp += size;
                 /* implements a simple digital filter */
                 cur_i[chan] = (int)(
@@ -1245,12 +1318,7 @@
                 cur_o = (int)(((double)prev_i[chan] * (double)d +
                          (double)cur_i[chan] * (double)(outrate - d)) /
                     (double)outrate);
-                if (size == 1)
-                    *CHARP(ncp, 0) = (signed char)(cur_o >> 24);
-                else if (size == 2)
-                    *SHORTP(ncp, 0) = (short)(cur_o >> 16);
-                else if (size == 4)
-                    *LONGP(ncp, 0) = (Py_Int32)(cur_o);
+                SETSAMPLE32(size, ncp, 0, cur_o);
                 ncp += size;
             }
             d -= inrate;
@@ -1259,168 +1327,166 @@
   exit:
     PyMem_Free(prev_i);
     PyMem_Free(cur_i);
+  exit2:
+    PyBuffer_Release(&view);
     return rv;
 }
 
 static PyObject *
 audioop_lin2ulaw(PyObject *self, PyObject *args)
 {
-    signed char *cp;
+    Py_buffer view;
     unsigned char *ncp;
-    Py_ssize_t len, i;
-    int size, val = 0;
-    PyObject *rv;
+    Py_ssize_t i;
+    int size;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#i:lin2ulaw",
-                           &cp, &len, &size) )
-        return 0 ;
-
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*i:lin2ulaw",
+                          &view, &size))
         return NULL;
 
-    rv = PyBytes_FromStringAndSize(NULL, len/size);
-    if ( rv == 0 )
-        return 0;
+    if (!audioop_check_parameters(view.len, size))
+        goto exit;
+
+    rv = PyBytes_FromStringAndSize(NULL, view.len/size);
+    if (rv == NULL)
+        goto exit;
     ncp = (unsigned char *)PyBytes_AsString(rv);
 
-    for ( i=0; i < len; i += size ) {
-        if ( size == 1 )      val = ((int)*CHARP(cp, i)) << 8;
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16;
-
-        *ncp++ = st_14linear2ulaw(val);
+    for (i = 0; i < view.len; i += size) {
+        int val = GETSAMPLE32(size, view.buf, i);
+        *ncp++ = st_14linear2ulaw(val >> 18);
     }
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
 static PyObject *
 audioop_ulaw2lin(PyObject *self, PyObject *args)
 {
+    Py_buffer view;
     unsigned char *cp;
-    unsigned char cval;
     signed char *ncp;
-    Py_ssize_t len, i;
-    int size, val;
-    PyObject *rv;
+    Py_ssize_t i;
+    int size;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#i:ulaw2lin",
-                           &cp, &len, &size) )
-        return 0;
-
-    if (!audioop_check_size(size))
+    if (!PyArg_ParseTuple(args, "y*i:ulaw2lin",
+                          &view, &size))
         return NULL;
 
-    if (len > PY_SSIZE_T_MAX/size) {
+    if (!audioop_check_size(size))
+        goto exit;
+
+    if (view.len > PY_SSIZE_T_MAX/size) {
         PyErr_SetString(PyExc_MemoryError,
                         "not enough memory for output buffer");
-        return 0;
+        goto exit;
     }
-    rv = PyBytes_FromStringAndSize(NULL, len*size);
-    if ( rv == 0 )
-        return 0;
+    rv = PyBytes_FromStringAndSize(NULL, view.len*size);
+    if (rv == NULL)
+        goto exit;
     ncp = (signed char *)PyBytes_AsString(rv);
 
-    for ( i=0; i < len*size; i += size ) {
-        cval = *cp++;
-        val = st_ulaw2linear16(cval);
-
-        if ( size == 1 )      *CHARP(ncp, i) = (signed char)(val >> 8);
-        else if ( size == 2 ) *SHORTP(ncp, i) = (short)(val);
-        else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)(val<<16);
+    cp = view.buf;
+    for (i = 0; i < view.len*size; i += size) {
+        int val = st_ulaw2linear16(*cp++) << 16;
+        SETSAMPLE32(size, ncp, i, val);
     }
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
 static PyObject *
 audioop_lin2alaw(PyObject *self, PyObject *args)
 {
-    signed char *cp;
+    Py_buffer view;
     unsigned char *ncp;
-    Py_ssize_t len, i;
-    int size, val = 0;
-    PyObject *rv;
+    Py_ssize_t i;
+    int size;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#i:lin2alaw",
-                           &cp, &len, &size) )
-        return 0;
-
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*i:lin2alaw",
+                          &view, &size))
         return NULL;
 
-    rv = PyBytes_FromStringAndSize(NULL, len/size);
-    if ( rv == 0 )
-        return 0;
+    if (!audioop_check_parameters(view.len, size))
+        goto exit;
+
+    rv = PyBytes_FromStringAndSize(NULL, view.len/size);
+    if (rv == NULL)
+        goto exit;
     ncp = (unsigned char *)PyBytes_AsString(rv);
 
-    for ( i=0; i < len; i += size ) {
-        if ( size == 1 )      val = ((int)*CHARP(cp, i)) << 8;
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16;
-
-        *ncp++ = st_linear2alaw(val);
+    for (i = 0; i < view.len; i += size) {
+        int val = GETSAMPLE32(size, view.buf, i);
+        *ncp++ = st_linear2alaw(val >> 19);
     }
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
 static PyObject *
 audioop_alaw2lin(PyObject *self, PyObject *args)
 {
+    Py_buffer view;
     unsigned char *cp;
-    unsigned char cval;
     signed char *ncp;
-    Py_ssize_t len, i;
+    Py_ssize_t i;
     int size, val;
-    PyObject *rv;
+    PyObject *rv = NULL;
 
-    if ( !PyArg_ParseTuple(args, "s#i:alaw2lin",
-                           &cp, &len, &size) )
-        return 0;
-
-    if (!audioop_check_size(size))
+    if (!PyArg_ParseTuple(args, "y*i:alaw2lin",
+                          &view, &size))
         return NULL;
 
-    if (len > PY_SSIZE_T_MAX/size) {
+    if (!audioop_check_size(size))
+        goto exit;
+
+    if (view.len > PY_SSIZE_T_MAX/size) {
         PyErr_SetString(PyExc_MemoryError,
                         "not enough memory for output buffer");
-        return 0;
+        goto exit;
     }
-    rv = PyBytes_FromStringAndSize(NULL, len*size);
-    if ( rv == 0 )
-        return 0;
+    rv = PyBytes_FromStringAndSize(NULL, view.len*size);
+    if (rv == NULL)
+        goto exit;
     ncp = (signed char *)PyBytes_AsString(rv);
+    cp = view.buf;
 
-    for ( i=0; i < len*size; i += size ) {
-        cval = *cp++;
-        val = st_alaw2linear16(cval);
-
-        if ( size == 1 )      *CHARP(ncp, i) = (signed char)(val >> 8);
-        else if ( size == 2 ) *SHORTP(ncp, i) = (short)(val);
-        else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)(val<<16);
+    for (i = 0; i < view.len*size; i += size) {
+        val = st_alaw2linear16(*cp++) << 16;
+        SETSAMPLE32(size, ncp, i, val);
     }
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
 static PyObject *
 audioop_lin2adpcm(PyObject *self, PyObject *args)
 {
-    signed char *cp;
+    Py_buffer view;
     signed char *ncp;
-    Py_ssize_t len, i;
-    int size, val = 0, step, valpred, delta,
+    Py_ssize_t i;
+    int size, step, valpred, delta,
         index, sign, vpdiff, diff;
-    PyObject *rv, *state, *str;
+    PyObject *rv = NULL, *state, *str;
     int outputbuffer = 0, bufferstep;
 
-    if ( !PyArg_ParseTuple(args, "s#iO:lin2adpcm",
-                           &cp, &len, &size, &state) )
-        return 0;
-
-    if (!audioop_check_parameters(len, size))
+    if (!PyArg_ParseTuple(args, "y*iO:lin2adpcm",
+                          &view, &size, &state))
         return NULL;
 
-    str = PyBytes_FromStringAndSize(NULL, len/(size*2));
-    if ( str == 0 )
-        return 0;
+    if (!audioop_check_parameters(view.len, size))
+        goto exit;
+
+    str = PyBytes_FromStringAndSize(NULL, view.len/(size*2));
+    if (str == NULL)
+        goto exit;
     ncp = (signed char *)PyBytes_AsString(str);
 
     /* Decode state, should have (value, step) */
@@ -1428,21 +1494,24 @@
         /* First time, it seems. Set defaults */
         valpred = 0;
         index = 0;
-    } else if ( !PyArg_ParseTuple(state, "ii", &valpred, &index) )
-        return 0;
+    } else if (!PyArg_ParseTuple(state, "ii", &valpred, &index))
+        goto exit;
 
     step = stepsizeTable[index];
     bufferstep = 1;
 
-    for ( i=0; i < len; i += size ) {
-        if ( size == 1 )      val = ((int)*CHARP(cp, i)) << 8;
-        else if ( size == 2 ) val = (int)*SHORTP(cp, i);
-        else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16;
+    for (i = 0; i < view.len; i += size) {
+        int val = GETSAMPLE32(size, view.buf, i) >> 16;
 
         /* Step 1 - compute difference with previous value */
-        diff = val - valpred;
-        sign = (diff < 0) ? 8 : 0;
-        if ( sign ) diff = (-diff);
+        if (val < valpred) {
+            diff = valpred - val;
+            sign = 8;
+        }
+        else {
+            diff = val - valpred;
+            sign = 0;
+        }
 
         /* Step 2 - Divide and clamp */
         /* Note:
@@ -1503,48 +1572,53 @@
     }
     rv = Py_BuildValue("(O(ii))", str, valpred, index);
     Py_DECREF(str);
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
 static PyObject *
 audioop_adpcm2lin(PyObject *self, PyObject *args)
 {
+    Py_buffer view;
     signed char *cp;
     signed char *ncp;
-    Py_ssize_t len, i;
+    Py_ssize_t i, outlen;
     int size, valpred, step, delta, index, sign, vpdiff;
-    PyObject *rv, *str, *state;
+    PyObject *rv = NULL, *str, *state;
     int inputbuffer = 0, bufferstep;
 
-    if ( !PyArg_ParseTuple(args, "s#iO:adpcm2lin",
-                           &cp, &len, &size, &state) )
-        return 0;
+    if (!PyArg_ParseTuple(args, "y*iO:adpcm2lin",
+                          &view, &size, &state))
+        return NULL;
 
     if (!audioop_check_size(size))
-        return NULL;
+        goto exit;
 
     /* Decode state, should have (value, step) */
     if ( state == Py_None ) {
         /* First time, it seems. Set defaults */
         valpred = 0;
         index = 0;
-    } else if ( !PyArg_ParseTuple(state, "ii", &valpred, &index) )
-        return 0;
+    } else if (!PyArg_ParseTuple(state, "ii", &valpred, &index))
+        goto exit;
 
-    if (len > (PY_SSIZE_T_MAX/2)/size) {
+    if (view.len > (PY_SSIZE_T_MAX/2)/size) {
         PyErr_SetString(PyExc_MemoryError,
                         "not enough memory for output buffer");
-        return 0;
+        goto exit;
     }
-    str = PyBytes_FromStringAndSize(NULL, len*size*2);
-    if ( str == 0 )
-        return 0;
+    outlen = view.len*size*2;
+    str = PyBytes_FromStringAndSize(NULL, outlen);
+    if (str == NULL)
+        goto exit;
     ncp = (signed char *)PyBytes_AsString(str);
+    cp = view.buf;
 
     step = stepsizeTable[index];
     bufferstep = 0;
 
-    for ( i=0; i < len*size*2; i += size ) {
+    for (i = 0; i < outlen; i += size) {
         /* Step 1 - get the delta value and compute next index */
         if ( bufferstep ) {
             delta = inputbuffer & 0xf;
@@ -1589,13 +1663,13 @@
         step = stepsizeTable[index];
 
         /* Step 6 - Output value */
-        if ( size == 1 ) *CHARP(ncp, i) = (signed char)(valpred >> 8);
-        else if ( size == 2 ) *SHORTP(ncp, i) = (short)(valpred);
-        else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)(valpred<<16);
+        SETSAMPLE32(size, ncp, i, valpred << 16);
     }
 
     rv = Py_BuildValue("(O(ii))", str, valpred, index);
     Py_DECREF(str);
+  exit:
+    PyBuffer_Release(&view);
     return rv;
 }
 
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 386c2de..0f49701 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -1122,7 +1122,8 @@
 PyDoc_STRVAR(doc_hexlify,
 "b2a_hex(data) -> s; Hexadecimal representation of binary data.\n\
 \n\
-This function is also available as \"hexlify()\".");
+The return value is a bytes object.  This function is also\n\
+available as \"hexlify()\".");
 
 
 static int
diff --git a/Modules/cjkcodecs/_codecs_cn.c b/Modules/cjkcodecs/_codecs_cn.c
index 285da1e..013c3fb 100644
--- a/Modules/cjkcodecs/_codecs_cn.c
+++ b/Modules/cjkcodecs/_codecs_cn.c
@@ -23,18 +23,33 @@
  * A844         undefined                       U+2015 HORIZONTAL BAR
  */
 
-#define GBK_DECODE(dc1, dc2, writer) \
-    if ((dc1) == 0xa1 && (dc2) == 0xaa) OUTCHAR(0x2014); \
-    else if ((dc1) == 0xa8 && (dc2) == 0x44) OUTCHAR(0x2015); \
-    else if ((dc1) == 0xa1 && (dc2) == 0xa4) OUTCHAR(0x00b7); \
-    else TRYMAP_DEC(gb2312, writer, dc1 ^ 0x80, dc2 ^ 0x80); \
-    else TRYMAP_DEC(gbkext, writer, dc1, dc2);
+#define GBK_DECODE(dc1, dc2, writer)                                \
+    if ((dc1) == 0xa1 && (dc2) == 0xaa) {                           \
+        OUTCHAR(0x2014);                                            \
+    }                                                               \
+    else if ((dc1) == 0xa8 && (dc2) == 0x44) {                      \
+        OUTCHAR(0x2015);                                            \
+    }                                                               \
+    else if ((dc1) == 0xa1 && (dc2) == 0xa4) {                      \
+        OUTCHAR(0x00b7);                                            \
+    }                                                               \
+    else if (TRYMAP_DEC(gb2312, decoded, dc1 ^ 0x80, dc2 ^ 0x80)) { \
+        OUTCHAR(decoded);                                           \
+    }                                                               \
+    else if (TRYMAP_DEC(gbkext, decoded, dc1, dc2)) {               \
+        OUTCHAR(decoded);                                           \
+    }
 
-#define GBK_ENCODE(code, assi) \
-    if ((code) == 0x2014) (assi) = 0xa1aa; \
-    else if ((code) == 0x2015) (assi) = 0xa844; \
-    else if ((code) == 0x00b7) (assi) = 0xa1a4; \
-    else if ((code) != 0x30fb && TRYMAP_ENC_COND(gbcommon, assi, code));
+#define GBK_ENCODE(code, assi)                                         \
+    if ((code) == 0x2014) {                                            \
+        (assi) = 0xa1aa;                                               \
+    } else if ((code) == 0x2015) {                                     \
+        (assi) = 0xa844;                                               \
+    } else if ((code) == 0x00b7) {                                     \
+        (assi) = 0xa1a4;                                               \
+    } else if ((code) != 0x30fb && TRYMAP_ENC(gbcommon, assi, code)) { \
+        ;                                                              \
+    }
 
 /*
  * GB2312 codec
@@ -47,7 +62,7 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            WRITEBYTE1((unsigned char)c)
+            WRITEBYTE1((unsigned char)c);
             NEXT(1, 1);
             continue;
         }
@@ -55,15 +70,17 @@
         if (c > 0xFFFF)
             return 1;
 
-        REQUIRE_OUTBUF(2)
-        TRYMAP_ENC(gbcommon, code, c);
-        else return 1;
+        REQUIRE_OUTBUF(2);
+        if (TRYMAP_ENC(gbcommon, code, c))
+            ;
+        else
+            return 1;
 
         if (code & 0x8000) /* MSB set: GBK */
             return 1;
 
-        OUTBYTE1((code >> 8) | 0x80)
-        OUTBYTE2((code & 0xFF) | 0x80)
+        OUTBYTE1((code >> 8) | 0x80);
+        OUTBYTE2((code & 0xFF) | 0x80);
         NEXT(1, 2);
     }
 
@@ -74,6 +91,7 @@
 {
     while (inleft > 0) {
         unsigned char c = **inbuf;
+        Py_UCS4 decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -81,11 +99,13 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
-        TRYMAP_DEC(gb2312, writer, c ^ 0x80, INBYTE2 ^ 0x80) {
+        REQUIRE_INBUF(2);
+        if (TRYMAP_DEC(gb2312, decoded, c ^ 0x80, INBYTE2 ^ 0x80)) {
+            OUTCHAR(decoded);
             NEXT_IN(2);
         }
-        else return 1;
+        else
+            return 1;
     }
 
     return 0;
@@ -103,7 +123,7 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            WRITEBYTE1((unsigned char)c)
+            WRITEBYTE1((unsigned char)c);
             NEXT(1, 1);
             continue;
         }
@@ -111,16 +131,17 @@
         if (c > 0xFFFF)
             return 1;
 
-        REQUIRE_OUTBUF(2)
+        REQUIRE_OUTBUF(2);
 
         GBK_ENCODE(c, code)
-        else return 1;
-
-        OUTBYTE1((code >> 8) | 0x80)
-        if (code & 0x8000)
-            OUTBYTE2((code & 0xFF)) /* MSB set: GBK */
         else
-            OUTBYTE2((code & 0xFF) | 0x80) /* MSB unset: GB2312 */
+            return 1;
+
+        OUTBYTE1((code >> 8) | 0x80);
+        if (code & 0x8000)
+            OUTBYTE2((code & 0xFF)); /* MSB set: GBK */
+        else
+            OUTBYTE2((code & 0xFF) | 0x80); /* MSB unset: GB2312 */
         NEXT(1, 2);
     }
 
@@ -131,6 +152,7 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1;
+        Py_UCS4 decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -138,10 +160,11 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
+        REQUIRE_INBUF(2);
 
         GBK_DECODE(c, INBYTE2, writer)
-        else return 1;
+        else
+            return 1;
 
         NEXT_IN(2);
     }
@@ -161,7 +184,7 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            WRITEBYTE1(c)
+            WRITEBYTE1(c);
             NEXT(1, 1);
             continue;
         }
@@ -170,28 +193,29 @@
             Py_UCS4 tc = c - 0x10000;
             assert (c <= 0x10FFFF);
 
-            REQUIRE_OUTBUF(4)
+            REQUIRE_OUTBUF(4);
 
-            OUTBYTE4((unsigned char)(tc % 10) + 0x30)
+            OUTBYTE4((unsigned char)(tc % 10) + 0x30);
             tc /= 10;
-            OUTBYTE3((unsigned char)(tc % 126) + 0x81)
+            OUTBYTE3((unsigned char)(tc % 126) + 0x81);
             tc /= 126;
-            OUTBYTE2((unsigned char)(tc % 10) + 0x30)
+            OUTBYTE2((unsigned char)(tc % 10) + 0x30);
             tc /= 10;
-            OUTBYTE1((unsigned char)(tc + 0x90))
+            OUTBYTE1((unsigned char)(tc + 0x90));
 
             NEXT(1, 4);
             continue;
         }
 
-        REQUIRE_OUTBUF(2)
+        REQUIRE_OUTBUF(2);
 
         GBK_ENCODE(c, code)
-        else TRYMAP_ENC(gb18030ext, code, c);
+        else if (TRYMAP_ENC(gb18030ext, code, c))
+            ;
         else {
             const struct _gb18030_to_unibmp_ranges *utrrange;
 
-            REQUIRE_OUTBUF(4)
+            REQUIRE_OUTBUF(4);
 
             for (utrrange = gb18030_to_unibmp_ranges;
                  utrrange->first != 0;
@@ -203,13 +227,13 @@
                     tc = c - utrrange->first +
                          utrrange->base;
 
-                    OUTBYTE4((unsigned char)(tc % 10) + 0x30)
+                    OUTBYTE4((unsigned char)(tc % 10) + 0x30);
                     tc /= 10;
-                    OUTBYTE3((unsigned char)(tc % 126) + 0x81)
+                    OUTBYTE3((unsigned char)(tc % 126) + 0x81);
                     tc /= 126;
-                    OUTBYTE2((unsigned char)(tc % 10) + 0x30)
+                    OUTBYTE2((unsigned char)(tc % 10) + 0x30);
                     tc /= 10;
-                    OUTBYTE1((unsigned char)tc + 0x81)
+                    OUTBYTE1((unsigned char)tc + 0x81);
 
                     NEXT(1, 4);
                     break;
@@ -220,11 +244,11 @@
             continue;
         }
 
-        OUTBYTE1((code >> 8) | 0x80)
+        OUTBYTE1((code >> 8) | 0x80);
         if (code & 0x8000)
-            OUTBYTE2((code & 0xFF)) /* MSB set: GBK or GB18030ext */
+            OUTBYTE2((code & 0xFF)); /* MSB set: GBK or GB18030ext */
         else
-            OUTBYTE2((code & 0xFF) | 0x80) /* MSB unset: GB2312 */
+            OUTBYTE2((code & 0xFF) | 0x80); /* MSB unset: GB2312 */
 
         NEXT(1, 2);
     }
@@ -236,6 +260,7 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1, c2;
+        Py_UCS4 decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -243,7 +268,7 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
+        REQUIRE_INBUF(2);
 
         c2 = INBYTE2;
         if (c2 >= 0x30 && c2 <= 0x39) { /* 4 bytes seq */
@@ -251,7 +276,7 @@
             unsigned char c3, c4;
             Py_UCS4 lseq;
 
-            REQUIRE_INBUF(4)
+            REQUIRE_INBUF(4);
             c3 = INBYTE3;
             c4 = INBYTE4;
             if (c < 0x81 || c3 < 0x81 || c4 < 0x30 || c4 > 0x39)
@@ -284,8 +309,10 @@
         }
 
         GBK_DECODE(c, c2, writer)
-        else TRYMAP_DEC(gb18030ext, writer, c, c2);
-        else return 1;
+        else if (TRYMAP_DEC(gb18030ext, decoded, c, c2))
+            OUTCHAR(decoded);
+        else
+            return 1;
 
         NEXT_IN(2);
     }
@@ -307,7 +334,7 @@
 ENCODER_RESET(hz)
 {
     if (state->i != 0) {
-        WRITEBYTE2('~', '}')
+        WRITEBYTE2('~', '}');
         state->i = 0;
         NEXT_OUT(2);
     }
@@ -322,11 +349,11 @@
 
         if (c < 0x80) {
             if (state->i == 0) {
-                WRITEBYTE1((unsigned char)c)
+                WRITEBYTE1((unsigned char)c);
                 NEXT(1, 1);
             }
             else {
-                WRITEBYTE3('~', '}', (unsigned char)c)
+                WRITEBYTE3('~', '}', (unsigned char)c);
                 NEXT(1, 3);
                 state->i = 0;
             }
@@ -336,19 +363,21 @@
         if (c > 0xFFFF)
             return 1;
 
-        TRYMAP_ENC(gbcommon, code, c);
-        else return 1;
+        if (TRYMAP_ENC(gbcommon, code, c))
+            ;
+        else
+            return 1;
 
         if (code & 0x8000) /* MSB set: GBK */
             return 1;
 
         if (state->i == 0) {
-            WRITEBYTE4('~', '{', code >> 8, code & 0xff)
+            WRITEBYTE4('~', '{', code >> 8, code & 0xff);
             NEXT(1, 4);
             state->i = 1;
         }
         else {
-            WRITEBYTE2(code >> 8, code & 0xff)
+            WRITEBYTE2(code >> 8, code & 0xff);
             NEXT(1, 2);
         }
     }
@@ -372,11 +401,12 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1;
+        Py_UCS4 decoded;
 
         if (c == '~') {
             unsigned char c2 = INBYTE2;
 
-            REQUIRE_INBUF(2)
+            REQUIRE_INBUF(2);
             if (c2 == '~') {
                 OUTCHAR('~');
                 NEXT_IN(2);
@@ -402,8 +432,9 @@
             NEXT_IN(1);
         }
         else { /* GB mode */
-            REQUIRE_INBUF(2)
-            TRYMAP_DEC(gb2312, writer, c, INBYTE2) {
+            REQUIRE_INBUF(2);
+            if (TRYMAP_DEC(gb2312, decoded, c, INBYTE2)) {
+                OUTCHAR(decoded);
                 NEXT_IN(2);
             }
             else
diff --git a/Modules/cjkcodecs/_codecs_hk.c b/Modules/cjkcodecs/_codecs_hk.c
index fe5f597..b7a7ebd 100644
--- a/Modules/cjkcodecs/_codecs_hk.c
+++ b/Modules/cjkcodecs/_codecs_hk.c
@@ -44,17 +44,17 @@
         Py_ssize_t insize;
 
         if (c < 0x80) {
-            REQUIRE_OUTBUF(1)
+            REQUIRE_OUTBUF(1);
             **outbuf = (unsigned char)c;
             NEXT(1, 1);
             continue;
         }
 
         insize = 1;
-        REQUIRE_OUTBUF(2)
+        REQUIRE_OUTBUF(2);
 
         if (c < 0x10000) {
-            TRYMAP_ENC(big5hkscs_bmp, code, c) {
+            if (TRYMAP_ENC(big5hkscs_bmp, code, c)) {
                 if (code == MULTIC) {
                     Py_UCS4 c2;
                     if (inlen - *inpos >= 2)
@@ -81,20 +81,24 @@
                     }
                 }
             }
-            else TRYMAP_ENC(big5, code, c);
-            else return 1;
+            else if (TRYMAP_ENC(big5, code, c))
+                ;
+            else
+                return 1;
         }
         else if (c < 0x20000)
             return insize;
         else if (c < 0x30000) {
-            TRYMAP_ENC(big5hkscs_nonbmp, code, c & 0xffff);
-            else return insize;
+            if (TRYMAP_ENC(big5hkscs_nonbmp, code, c & 0xffff))
+                ;
+            else
+                return insize;
         }
         else
             return insize;
 
-        OUTBYTE1(code >> 8)
-        OUTBYTE2(code & 0xFF)
+        OUTBYTE1(code >> 8);
+        OUTBYTE2(code & 0xFF);
         NEXT(insize, 2);
     }
 
@@ -115,16 +119,17 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
+        REQUIRE_INBUF(2);
 
         if (0xc6 > c || c > 0xc8 || (c < 0xc7 && INBYTE2 < 0xa1)) {
-            TRYMAP_DEC(big5, writer, c, INBYTE2) {
+            if (TRYMAP_DEC(big5, decoded, c, INBYTE2)) {
+                OUTCHAR(decoded);
                 NEXT_IN(2);
                 continue;
             }
         }
 
-        TRYMAP_DEC_CHAR(big5hkscs, decoded, c, INBYTE2)
+        if (TRYMAP_DEC(big5hkscs, decoded, c, INBYTE2))
         {
             int s = BH2S(c, INBYTE2);
             const unsigned char *hintbase;
diff --git a/Modules/cjkcodecs/_codecs_iso2022.c b/Modules/cjkcodecs/_codecs_iso2022.c
index bb63835..5c401aa 100644
--- a/Modules/cjkcodecs/_codecs_iso2022.c
+++ b/Modules/cjkcodecs/_codecs_iso2022.c
@@ -73,7 +73,7 @@
 #define F_SHIFTED               0x01
 #define F_ESCTHROUGHOUT         0x02
 
-#define STATE_SETG(dn, v)       ((state)->c[dn]) = (v);
+#define STATE_SETG(dn, v)       do { ((state)->c[dn]) = (v); } while (0)
 #define STATE_GETG(dn)          ((state)->c[dn])
 
 #define STATE_G0                STATE_GETG(0)
@@ -85,10 +85,10 @@
 #define STATE_SETG2(v)          STATE_SETG(2, v)
 #define STATE_SETG3(v)          STATE_SETG(3, v)
 
-#define STATE_SETFLAG(f)        ((state)->c[4]) |= (f);
+#define STATE_SETFLAG(f)        do { ((state)->c[4]) |= (f); } while (0)
 #define STATE_GETFLAG(f)        ((state)->c[4] & (f))
-#define STATE_CLEARFLAG(f)      ((state)->c[4]) &= ~(f);
-#define STATE_CLEARFLAGS()      ((state)->c[4]) = 0;
+#define STATE_CLEARFLAG(f)      do { ((state)->c[4]) &= ~(f); } while (0)
+#define STATE_CLEARFLAGS()      do { ((state)->c[4]) = 0; } while (0)
 
 #define ISO2022_CONFIG          ((const struct iso2022_config *)config)
 #define CONFIG_ISSET(flag)      (ISO2022_CONFIG->flags & (flag))
@@ -132,23 +132,23 @@
 
 ENCODER_INIT(iso2022)
 {
-    STATE_CLEARFLAGS()
-    STATE_SETG0(CHARSET_ASCII)
-    STATE_SETG1(CHARSET_ASCII)
+    STATE_CLEARFLAGS();
+    STATE_SETG0(CHARSET_ASCII);
+    STATE_SETG1(CHARSET_ASCII);
     return 0;
 }
 
 ENCODER_RESET(iso2022)
 {
     if (STATE_GETFLAG(F_SHIFTED)) {
-        WRITEBYTE1(SI)
+        WRITEBYTE1(SI);
         NEXT_OUT(1);
-        STATE_CLEARFLAG(F_SHIFTED)
+        STATE_CLEARFLAG(F_SHIFTED);
     }
     if (STATE_G0 != CHARSET_ASCII) {
-        WRITEBYTE3(ESC, '(', 'B')
+        WRITEBYTE3(ESC, '(', 'B');
         NEXT_OUT(3);
-        STATE_SETG0(CHARSET_ASCII)
+        STATE_SETG0(CHARSET_ASCII);
     }
     return 0;
 }
@@ -163,16 +163,16 @@
 
         if (c < 0x80) {
             if (STATE_G0 != CHARSET_ASCII) {
-                WRITEBYTE3(ESC, '(', 'B')
-                STATE_SETG0(CHARSET_ASCII)
+                WRITEBYTE3(ESC, '(', 'B');
+                STATE_SETG0(CHARSET_ASCII);
                 NEXT_OUT(3);
             }
             if (STATE_GETFLAG(F_SHIFTED)) {
-                WRITEBYTE1(SI)
-                STATE_CLEARFLAG(F_SHIFTED)
+                WRITEBYTE1(SI);
+                STATE_CLEARFLAG(F_SHIFTED);
                 NEXT_OUT(1);
             }
-            WRITEBYTE1((unsigned char)c)
+            WRITEBYTE1((unsigned char)c);
             NEXT(1, 1);
             continue;
         }
@@ -210,25 +210,25 @@
         switch (dsg->plane) {
         case 0: /* G0 */
             if (STATE_GETFLAG(F_SHIFTED)) {
-                WRITEBYTE1(SI)
-                STATE_CLEARFLAG(F_SHIFTED)
+                WRITEBYTE1(SI);
+                STATE_CLEARFLAG(F_SHIFTED);
                 NEXT_OUT(1);
             }
             if (STATE_G0 != dsg->mark) {
                 if (dsg->width == 1) {
-                    WRITEBYTE3(ESC, '(', ESCMARK(dsg->mark))
-                    STATE_SETG0(dsg->mark)
+                    WRITEBYTE3(ESC, '(', ESCMARK(dsg->mark));
+                    STATE_SETG0(dsg->mark);
                     NEXT_OUT(3);
                 }
                 else if (dsg->mark == CHARSET_JISX0208) {
-                    WRITEBYTE3(ESC, '$', ESCMARK(dsg->mark))
-                    STATE_SETG0(dsg->mark)
+                    WRITEBYTE3(ESC, '$', ESCMARK(dsg->mark));
+                    STATE_SETG0(dsg->mark);
                     NEXT_OUT(3);
                 }
                 else {
                     WRITEBYTE4(ESC, '$', '(',
-                        ESCMARK(dsg->mark))
-                    STATE_SETG0(dsg->mark)
+                        ESCMARK(dsg->mark));
+                    STATE_SETG0(dsg->mark);
                     NEXT_OUT(4);
                 }
             }
@@ -236,20 +236,19 @@
         case 1: /* G1 */
             if (STATE_G1 != dsg->mark) {
                 if (dsg->width == 1) {
-                    WRITEBYTE3(ESC, ')', ESCMARK(dsg->mark))
-                    STATE_SETG1(dsg->mark)
+                    WRITEBYTE3(ESC, ')', ESCMARK(dsg->mark));
+                    STATE_SETG1(dsg->mark);
                     NEXT_OUT(3);
                 }
                 else {
-                    WRITEBYTE4(ESC, '$', ')',
-                        ESCMARK(dsg->mark))
-                    STATE_SETG1(dsg->mark)
+                    WRITEBYTE4(ESC, '$', ')', ESCMARK(dsg->mark));
+                    STATE_SETG1(dsg->mark);
                     NEXT_OUT(4);
                 }
             }
             if (!STATE_GETFLAG(F_SHIFTED)) {
-                WRITEBYTE1(SO)
-                STATE_SETFLAG(F_SHIFTED)
+                WRITEBYTE1(SO);
+                STATE_SETFLAG(F_SHIFTED);
                 NEXT_OUT(1);
             }
             break;
@@ -259,11 +258,11 @@
         }
 
         if (dsg->width == 1) {
-            WRITEBYTE1((unsigned char)encoded)
+            WRITEBYTE1((unsigned char)encoded);
             NEXT_OUT(1);
         }
         else {
-            WRITEBYTE2(encoded >> 8, encoded & 0xff)
+            WRITEBYTE2(encoded >> 8, encoded & 0xff);
             NEXT_OUT(2);
         }
         NEXT_INCHAR(insize);
@@ -274,17 +273,17 @@
 
 DECODER_INIT(iso2022)
 {
-    STATE_CLEARFLAGS()
-    STATE_SETG0(CHARSET_ASCII)
-    STATE_SETG1(CHARSET_ASCII)
-    STATE_SETG2(CHARSET_ASCII)
+    STATE_CLEARFLAGS();
+    STATE_SETG0(CHARSET_ASCII);
+    STATE_SETG1(CHARSET_ASCII);
+    STATE_SETG2(CHARSET_ASCII);
     return 0;
 }
 
 DECODER_RESET(iso2022)
 {
-    STATE_SETG0(CHARSET_ASCII)
-    STATE_CLEARFLAG(F_SHIFTED)
+    STATE_SETG0(CHARSET_ASCII);
+    STATE_CLEARFLAG(F_SHIFTED);
     return 0;
 }
 
@@ -303,8 +302,9 @@
             break;
         }
         else if (CONFIG_ISSET(USE_JISX0208_EXT) && i+1 < *inleft &&
-                 (*inbuf)[i] == '&' && (*inbuf)[i+1] == '@')
+                 (*inbuf)[i] == '&' && (*inbuf)[i+1] == '@') {
             i += 2;
+        }
     }
 
     if (i >= MAX_ESCSEQLEN)
@@ -318,11 +318,14 @@
         }
         else {
             charset = INBYTE3;
-            if (INBYTE2 == '(') designation = 0;
-            else if (INBYTE2 == ')') designation = 1;
+            if (INBYTE2 == '(')
+                designation = 0;
+            else if (INBYTE2 == ')')
+                designation = 1;
             else if (CONFIG_ISSET(USE_G2) && INBYTE2 == '.')
                 designation = 2;
-            else return 3;
+            else
+                return 3;
         }
         break;
     case 4:
@@ -330,9 +333,12 @@
             return 4;
 
         charset = INBYTE4 | CHARSET_DBCS;
-        if (INBYTE3 == '(') designation = 0;
-        else if (INBYTE3 == ')') designation = 1;
-        else return 4;
+        if (INBYTE3 == '(')
+            designation = 0;
+        else if (INBYTE3 == ')')
+            designation = 1;
+        else
+            return 4;
         break;
     case 6: /* designation with prefix */
         if (CONFIG_ISSET(USE_JISX0208_EXT) &&
@@ -352,29 +358,35 @@
     if (charset != CHARSET_ASCII) {
         const struct iso2022_designation *dsg;
 
-        for (dsg = CONFIG_DESIGNATIONS; dsg->mark; dsg++)
+        for (dsg = CONFIG_DESIGNATIONS; dsg->mark; dsg++) {
             if (dsg->mark == charset)
                 break;
+        }
         if (!dsg->mark)
             return esclen;
     }
 
-    STATE_SETG(designation, charset)
+    STATE_SETG(designation, charset);
     *inleft -= esclen;
     (*inbuf) += esclen;
     return 0;
 }
 
-#define ISO8859_7_DECODE(c, writer)                               \
-    if ((c) < 0xa0) OUTCHAR(c);                                       \
-    else if ((c) < 0xc0 && (0x288f3bc9L & (1L << ((c)-0xa0))))    \
-        OUTCHAR(c);                                                   \
-    else if ((c) >= 0xb4 && (c) <= 0xfe && ((c) >= 0xd4 ||        \
-             (0xbffffd77L & (1L << ((c)-0xb4)))))                 \
-        OUTCHAR(0x02d0 + (c));                                        \
-    else if ((c) == 0xa1) OUTCHAR(0x2018);                            \
-    else if ((c) == 0xa2) OUTCHAR(0x2019);                            \
-    else if ((c) == 0xaf) OUTCHAR(0x2015);
+#define ISO8859_7_DECODE(c, writer)                                \
+    if ((c) < 0xa0) {                                              \
+        OUTCHAR(c);                                                \
+    } else if ((c) < 0xc0 && (0x288f3bc9L & (1L << ((c)-0xa0)))) { \
+        OUTCHAR(c);                                                \
+    } else if ((c) >= 0xb4 && (c) <= 0xfe && ((c) >= 0xd4 ||       \
+             (0xbffffd77L & (1L << ((c)-0xb4))))) {                \
+        OUTCHAR(0x02d0 + (c));                                     \
+    } else if ((c) == 0xa1) {                                      \
+        OUTCHAR(0x2018);                                           \
+    } else if ((c) == 0xa2) {                                      \
+        OUTCHAR(0x2019);                                           \
+    } else if ((c) == 0xaf) {                                      \
+        OUTCHAR(0x2015);                                           \
+    }
 
 static Py_ssize_t
 iso2022processg2(const void *config, MultibyteCodec_State *state,
@@ -391,11 +403,14 @@
     }
     else if (STATE_G2 == CHARSET_ISO8859_7) {
         ISO8859_7_DECODE(INBYTE3 ^ 0x80, writer)
-        else return 3;
+        else
+            return 3;
     }
     else if (STATE_G2 == CHARSET_ASCII) {
-        if (INBYTE3 & 0x80) return 3;
-        else OUTCHAR(INBYTE3);
+        if (INBYTE3 & 0x80)
+            return 3;
+        else
+            OUTCHAR(INBYTE3);
     }
     else
         return MBERR_INTERNAL;
@@ -419,14 +434,14 @@
             OUTCHAR(c); /* assume as ISO-8859-1 */
             NEXT_IN(1);
             if (IS_ESCEND(c)) {
-                STATE_CLEARFLAG(F_ESCTHROUGHOUT)
+                STATE_CLEARFLAG(F_ESCTHROUGHOUT);
             }
             continue;
         }
 
         switch (c) {
         case ESC:
-            REQUIRE_INBUF(2)
+            REQUIRE_INBUF(2);
             if (IS_ISO2022ESC(INBYTE2)) {
                 err = iso2022processesc(config, state,
                                         inbuf, &inleft);
@@ -434,7 +449,7 @@
                     return err;
             }
             else if (CONFIG_ISSET(USE_G2) && INBYTE2 == 'N') {/* SS2 */
-                REQUIRE_INBUF(3)
+                REQUIRE_INBUF(3);
                 err = iso2022processg2(config, state,
                                        inbuf, &inleft, writer);
                 if (err != 0)
@@ -442,24 +457,24 @@
             }
             else {
                 OUTCHAR(ESC);
-                STATE_SETFLAG(F_ESCTHROUGHOUT)
+                STATE_SETFLAG(F_ESCTHROUGHOUT);
                 NEXT_IN(1);
             }
             break;
         case SI:
             if (CONFIG_ISSET(NO_SHIFT))
                 goto bypass;
-            STATE_CLEARFLAG(F_SHIFTED)
+            STATE_CLEARFLAG(F_SHIFTED);
             NEXT_IN(1);
             break;
         case SO:
             if (CONFIG_ISSET(NO_SHIFT))
                 goto bypass;
-            STATE_SETFLAG(F_SHIFTED)
+            STATE_SETFLAG(F_SHIFTED);
             NEXT_IN(1);
             break;
         case LF:
-            STATE_CLEARFLAG(F_SHIFTED)
+            STATE_CLEARFLAG(F_SHIFTED);
             OUTCHAR(LF);
             NEXT_IN(1);
             break;
@@ -479,38 +494,41 @@
                     charset = STATE_G0;
 
                 if (charset == CHARSET_ASCII) {
-bypass:                                 OUTCHAR(c);
-                                        NEXT_IN(1);
-                                        break;
-                                }
+bypass:
+                    OUTCHAR(c);
+                    NEXT_IN(1);
+                    break;
+                }
 
-                                if (dsgcache != NULL &&
-                                    dsgcache->mark == charset)
-                                        dsg = dsgcache;
-                                else {
-                                        for (dsg = CONFIG_DESIGNATIONS;
-                                             dsg->mark != charset
+                if (dsgcache != NULL &&
+                    dsgcache->mark == charset)
+                        dsg = dsgcache;
+                else {
+                    for (dsg = CONFIG_DESIGNATIONS;
+                         dsg->mark != charset
 #ifdef Py_DEBUG
-                                                && dsg->mark != '\0'
+                            && dsg->mark != '\0'
 #endif
-                                             ;dsg++)
-                                                /* noop */;
-                                        assert(dsg->mark != '\0');
-                                        dsgcache = dsg;
-                                }
+                         ; dsg++)
+                    {
+                        /* noop */
+                    }
+                    assert(dsg->mark != '\0');
+                    dsgcache = dsg;
+                }
 
-                                REQUIRE_INBUF(dsg->width)
-                                decoded = dsg->decoder(*inbuf);
-                                if (decoded == MAP_UNMAPPABLE)
-                                        return dsg->width;
+                REQUIRE_INBUF(dsg->width);
+                decoded = dsg->decoder(*inbuf);
+                if (decoded == MAP_UNMAPPABLE)
+                    return dsg->width;
 
-                                if (decoded < 0x10000) {
-                                        OUTCHAR(decoded);
-                                }
-                                else if (decoded < 0x30000) {
-                                        OUTCHAR(decoded);
-                                }
-                                else { /* JIS X 0213 pairs */
+                if (decoded < 0x10000) {
+                    OUTCHAR(decoded);
+                }
+                else if (decoded < 0x30000) {
+                    OUTCHAR(decoded);
+                }
+                else { /* JIS X 0213 pairs */
                     OUTCHAR2(decoded >> 16, decoded & 0xffff);
                 }
                 NEXT_IN(dsg->width);
@@ -566,7 +584,7 @@
 ksx1001_decoder(const unsigned char *data)
 {
     Py_UCS4 u;
-    TRYMAP_DEC_CHAR(ksx1001, u, data[0], data[1])
+    if (TRYMAP_DEC(ksx1001, u, data[0], data[1]))
         return u;
     else
         return MAP_UNMAPPABLE;
@@ -578,9 +596,10 @@
     DBCHAR coded;
     assert(*length == 1);
     if (*data < 0x10000) {
-        TRYMAP_ENC(cp949, coded, *data)
+        if (TRYMAP_ENC(cp949, coded, *data)) {
             if (!(coded & 0x8000))
                 return coded;
+        }
     }
     return MAP_UNMAPPABLE;
 }
@@ -604,7 +623,7 @@
     Py_UCS4 u;
     if (data[0] == 0x21 && data[1] == 0x40) /* F/W REVERSE SOLIDUS */
         return 0xff3c;
-    else TRYMAP_DEC_CHAR(jisx0208, u, data[0], data[1])
+    else if (TRYMAP_DEC(jisx0208, u, data[0], data[1]))
         return u;
     else
         return MAP_UNMAPPABLE;
@@ -618,7 +637,7 @@
     if (*data < 0x10000) {
         if (*data == 0xff3c) /* F/W REVERSE SOLIDUS */
             return 0x2140;
-        else TRYMAP_ENC(jisxcommon, coded, *data) {
+        else if (TRYMAP_ENC(jisxcommon, coded, *data)) {
             if (!(coded & 0x8000))
                 return coded;
         }
@@ -643,7 +662,7 @@
 jisx0212_decoder(const unsigned char *data)
 {
     Py_UCS4 u;
-    TRYMAP_DEC_CHAR(jisx0212, u, data[0], data[1])
+    if (TRYMAP_DEC(jisx0212, u, data[0], data[1]))
         return u;
     else
         return MAP_UNMAPPABLE;
@@ -655,7 +674,7 @@
     DBCHAR coded;
     assert(*length == 1);
     if (*data < 0x10000) {
-        TRYMAP_ENC(jisxcommon, coded, *data) {
+        if (TRYMAP_ENC(jisxcommon, coded, *data)) {
             if (coded & 0x8000)
                 return coded & 0x7fff;
         }
@@ -697,11 +716,14 @@
     EMULATE_JISX0213_2000_DECODE_PLANE1(u, data[0], data[1])
     else if (data[0] == 0x21 && data[1] == 0x40) /* F/W REVERSE SOLIDUS */
         return 0xff3c;
-    else TRYMAP_DEC_CHAR(jisx0208, u, data[0], data[1]);
-    else TRYMAP_DEC_CHAR(jisx0213_1_bmp, u, data[0], data[1]);
-    else TRYMAP_DEC_CHAR(jisx0213_1_emp, u, data[0], data[1])
+    else if (TRYMAP_DEC(jisx0208, u, data[0], data[1]))
+        ;
+    else if (TRYMAP_DEC(jisx0213_1_bmp, u, data[0], data[1]))
+        ;
+    else if (TRYMAP_DEC(jisx0213_1_emp, u, data[0], data[1]))
         u |= 0x20000;
-    else TRYMAP_DEC_CHAR(jisx0213_pair, u, data[0], data[1]);
+    else if (TRYMAP_DEC(jisx0213_pair, u, data[0], data[1]))
+        ;
     else
         return MAP_UNMAPPABLE;
     return u;
@@ -712,8 +734,9 @@
 {
     Py_UCS4 u;
     EMULATE_JISX0213_2000_DECODE_PLANE2_CHAR(u, data[0], data[1])
-    TRYMAP_DEC_CHAR(jisx0213_2_bmp, u, data[0], data[1]);
-    else TRYMAP_DEC_CHAR(jisx0213_2_emp, u, data[0], data[1])
+    if (TRYMAP_DEC(jisx0213_2_bmp, u, data[0], data[1]))
+        ;
+    else if (TRYMAP_DEC(jisx0213_2_emp, u, data[0], data[1]))
         u |= 0x20000;
     else
         return MAP_UNMAPPABLE;
@@ -727,11 +750,14 @@
     Py_UCS4 u;
     if (data[0] == 0x21 && data[1] == 0x40) /* F/W REVERSE SOLIDUS */
         return 0xff3c;
-    else TRYMAP_DEC_CHAR(jisx0208, u, data[0], data[1]);
-    else TRYMAP_DEC_CHAR(jisx0213_1_bmp, u, data[0], data[1]);
-    else TRYMAP_DEC_CHAR(jisx0213_1_emp, u, data[0], data[1])
+    else if (TRYMAP_DEC(jisx0208, u, data[0], data[1]))
+        ;
+    else if (TRYMAP_DEC(jisx0213_1_bmp, u, data[0], data[1]))
+        ;
+    else if (TRYMAP_DEC(jisx0213_1_emp, u, data[0], data[1]))
         u |= 0x20000;
-    else TRYMAP_DEC_CHAR(jisx0213_pair, u, data[0], data[1]);
+    else if (TRYMAP_DEC(jisx0213_pair, u, data[0], data[1]))
+        ;
     else
         return MAP_UNMAPPABLE;
     return u;
@@ -741,8 +767,9 @@
 jisx0213_2004_2_decoder(const unsigned char *data)
 {
     Py_UCS4 u;
-    TRYMAP_DEC_CHAR(jisx0213_2_bmp, u, data[0], data[1]);
-    else TRYMAP_DEC_CHAR(jisx0213_2_emp, u, data[0], data[1])
+    if (TRYMAP_DEC(jisx0213_2_bmp, u, data[0], data[1]))
+        ;
+    else if (TRYMAP_DEC(jisx0213_2_emp, u, data[0], data[1]))
         u |= 0x20000;
     else
         return MAP_UNMAPPABLE;
@@ -759,28 +786,28 @@
         if (*data >= 0x10000) {
             if ((*data) >> 16 == 0x20000 >> 16) {
                 EMULATE_JISX0213_2000_ENCODE_EMP(coded, *data)
-                else TRYMAP_ENC(jisx0213_emp, coded,
-                                (*data) & 0xffff)
+                else if (TRYMAP_ENC(jisx0213_emp, coded, (*data) & 0xffff))
                     return coded;
             }
             return MAP_UNMAPPABLE;
         }
 
         EMULATE_JISX0213_2000_ENCODE_BMP(coded, *data)
-        else TRYMAP_ENC(jisx0213_bmp, coded, *data) {
+        else if (TRYMAP_ENC(jisx0213_bmp, coded, *data)) {
             if (coded == MULTIC)
                 return MAP_MULTIPLE_AVAIL;
         }
-        else TRYMAP_ENC(jisxcommon, coded, *data) {
+        else if (TRYMAP_ENC(jisxcommon, coded, *data)) {
             if (coded & 0x8000)
                 return MAP_UNMAPPABLE;
         }
         else
             return MAP_UNMAPPABLE;
         return coded;
+
     case 2: /* second character of unicode pair */
         coded = find_pairencmap((ucs2_t)data[0], (ucs2_t)data[1],
-                        jisx0213_pair_encmap, JISX0213_ENCPAIRS);
+                                jisx0213_pair_encmap, JISX0213_ENCPAIRS);
         if (coded == DBCINV) {
             *length = 1;
             coded = find_pairencmap((ucs2_t)data[0], 0,
@@ -790,14 +817,17 @@
         }
         else
             return coded;
+
     case -1: /* flush unterminated */
         *length = 1;
         coded = find_pairencmap((ucs2_t)data[0], 0,
-                        jisx0213_pair_encmap, JISX0213_ENCPAIRS);
+                                jisx0213_pair_encmap, JISX0213_ENCPAIRS);
         if (coded == DBCINV)
             return MAP_UNMAPPABLE;
         else
             return coded;
+        break;
+
     default:
         return MAP_UNMAPPABLE;
     }
@@ -902,7 +932,8 @@
 {
     Py_UCS4 u;
     JISX0201_R_DECODE_CHAR(*data, u)
-    else return MAP_UNMAPPABLE;
+    else
+        return MAP_UNMAPPABLE;
     return u;
 }
 
@@ -911,7 +942,8 @@
 {
     DBCHAR coded;
     JISX0201_R_ENCODE(*data, coded)
-    else return MAP_UNMAPPABLE;
+    else
+        return MAP_UNMAPPABLE;
     return coded;
 }
 
@@ -920,7 +952,8 @@
 {
     Py_UCS4 u;
     JISX0201_K_DECODE_CHAR(*data ^ 0x80, u)
-    else return MAP_UNMAPPABLE;
+    else
+        return MAP_UNMAPPABLE;
     return u;
 }
 
@@ -929,7 +962,8 @@
 {
     DBCHAR coded;
     JISX0201_K_ENCODE(*data, coded)
-    else return MAP_UNMAPPABLE;
+    else
+        return MAP_UNMAPPABLE;
     return coded - 0x80;
 }
 
@@ -950,7 +984,7 @@
 gb2312_decoder(const unsigned char *data)
 {
     Py_UCS4 u;
-    TRYMAP_DEC_CHAR(gb2312, u, data[0], data[1])
+    if (TRYMAP_DEC(gb2312, u, data[0], data[1]))
         return u;
     else
         return MAP_UNMAPPABLE;
@@ -962,7 +996,7 @@
     DBCHAR coded;
     assert(*length == 1);
     if (*data < 0x10000) {
-        TRYMAP_ENC(gbcommon, coded, *data) {
+        if (TRYMAP_ENC(gbcommon, coded, *data)) {
             if (!(coded & 0x8000))
                 return coded;
         }
diff --git a/Modules/cjkcodecs/_codecs_jp.c b/Modules/cjkcodecs/_codecs_jp.c
index 7ab318b..2c7788a 100644
--- a/Modules/cjkcodecs/_codecs_jp.c
+++ b/Modules/cjkcodecs/_codecs_jp.c
@@ -25,35 +25,35 @@
         unsigned char c1, c2;
 
         if (c <= 0x80) {
-            WRITEBYTE1((unsigned char)c)
+            WRITEBYTE1((unsigned char)c);
             NEXT(1, 1);
             continue;
         }
         else if (c >= 0xff61 && c <= 0xff9f) {
-            WRITEBYTE1(c - 0xfec0)
+            WRITEBYTE1(c - 0xfec0);
             NEXT(1, 1);
             continue;
         }
         else if (c >= 0xf8f0 && c <= 0xf8f3) {
             /* Windows compatibility */
-            REQUIRE_OUTBUF(1)
+            REQUIRE_OUTBUF(1);
             if (c == 0xf8f0)
-                OUTBYTE1(0xa0)
+                OUTBYTE1(0xa0);
             else
-                OUTBYTE1(c - 0xfef1 + 0xfd)
+                OUTBYTE1(c - 0xfef1 + 0xfd);
             NEXT(1, 1);
             continue;
         }
 
         if (c > 0xFFFF)
             return 1;
-        REQUIRE_OUTBUF(2)
+        REQUIRE_OUTBUF(2);
 
-        TRYMAP_ENC(cp932ext, code, c) {
-            OUTBYTE1(code >> 8)
-            OUTBYTE2(code & 0xff)
+        if (TRYMAP_ENC(cp932ext, code, c)) {
+            OUTBYTE1(code >> 8);
+            OUTBYTE2(code & 0xff);
         }
-        else TRYMAP_ENC(jisxcommon, code, c) {
+        else if (TRYMAP_ENC(jisxcommon, code, c)) {
             if (code & 0x8000) /* MSB set: JIS X 0212 */
                 return 1;
 
@@ -62,15 +62,15 @@
             c2 = code & 0xff;
             c2 = (((c1 - 0x21) & 1) ? 0x5e : 0) + (c2 - 0x21);
             c1 = (c1 - 0x21) >> 1;
-            OUTBYTE1(c1 < 0x1f ? c1 + 0x81 : c1 + 0xc1)
-            OUTBYTE2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41)
+            OUTBYTE1(c1 < 0x1f ? c1 + 0x81 : c1 + 0xc1);
+            OUTBYTE2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41);
         }
         else if (c >= 0xe000 && c < 0xe758) {
             /* User-defined area */
             c1 = (Py_UCS4)(c - 0xe000) / 188;
             c2 = (Py_UCS4)(c - 0xe000) % 188;
-            OUTBYTE1(c1 + 0xf0)
-            OUTBYTE2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41)
+            OUTBYTE1(c1 + 0xf0);
+            OUTBYTE2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41);
         }
         else
             return 1;
@@ -85,6 +85,7 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1, c2;
+        Py_UCS4 decoded;
 
         if (c <= 0x80) {
             OUTCHAR(c);
@@ -106,10 +107,11 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
+        REQUIRE_INBUF(2);
         c2 = INBYTE2;
 
-        TRYMAP_DEC(cp932ext, writer, c, c2);
+        if (TRYMAP_DEC(cp932ext, decoded, c, c2))
+            OUTCHAR(decoded);
         else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)){
             if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc)
                 return 1;
@@ -119,8 +121,10 @@
             c = (2 * c + (c2 < 0x5e ? 0 : 1) + 0x21);
             c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21;
 
-            TRYMAP_DEC(jisx0208, writer, c, c2);
-            else return 1;
+            if (TRYMAP_DEC(jisx0208, decoded, c, c2))
+                OUTCHAR(decoded);
+            else
+                return 1;
         }
         else if (c >= 0xf0 && c <= 0xf9) {
             if ((c2 >= 0x40 && c2 <= 0x7e) ||
@@ -152,7 +156,7 @@
         Py_ssize_t insize;
 
         if (c < 0x80) {
-            WRITEBYTE1(c)
+            WRITEBYTE1(c);
             NEXT(1, 1);
             continue;
         }
@@ -161,7 +165,7 @@
 
         if (c <= 0xFFFF) {
             EMULATE_JISX0213_2000_ENCODE_BMP(code, c)
-            else TRYMAP_ENC(jisx0213_bmp, code, c) {
+            else if (TRYMAP_ENC(jisx0213_bmp, code, c)) {
                 if (code == MULTIC) {
                     if (inlen - *inpos < 2) {
                         if (flags & MBENC_FLUSH) {
@@ -193,10 +197,11 @@
                     }
                 }
             }
-            else TRYMAP_ENC(jisxcommon, code, c);
+            else if (TRYMAP_ENC(jisxcommon, code, c))
+                ;
             else if (c >= 0xff61 && c <= 0xff9f) {
                 /* JIS X 0201 half-width katakana */
-                WRITEBYTE2(0x8e, c - 0xfec0)
+                WRITEBYTE2(0x8e, c - 0xfec0);
                 NEXT(1, 2);
                 continue;
             }
@@ -211,19 +216,21 @@
         }
         else if (c >> 16 == EMPBASE >> 16) {
             EMULATE_JISX0213_2000_ENCODE_EMP(code, c)
-            else TRYMAP_ENC(jisx0213_emp, code, c & 0xffff);
-            else return insize;
+            else if (TRYMAP_ENC(jisx0213_emp, code, c & 0xffff))
+                ;
+            else
+                return insize;
         }
         else
             return insize;
 
         if (code & 0x8000) {
             /* Codeset 2 */
-            WRITEBYTE3(0x8f, code >> 8, (code & 0xFF) | 0x80)
+            WRITEBYTE3(0x8f, code >> 8, (code & 0xFF) | 0x80);
             NEXT(insize, 3);
         } else {
             /* Codeset 1 */
-            WRITEBYTE2((code >> 8) | 0x80, (code & 0xFF) | 0x80)
+            WRITEBYTE2((code >> 8) | 0x80, (code & 0xFF) | 0x80);
             NEXT(insize, 2);
         }
     }
@@ -235,7 +242,7 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1;
-        Py_UCS4 code;
+        Py_UCS4 code, decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -247,7 +254,7 @@
             /* JIS X 0201 half-width katakana */
             unsigned char c2;
 
-            REQUIRE_INBUF(2)
+            REQUIRE_INBUF(2);
             c2 = INBYTE2;
             if (c2 >= 0xa1 && c2 <= 0xdf) {
                 OUTCHAR(0xfec0 + c2);
@@ -259,46 +266,54 @@
         else if (c == 0x8f) {
             unsigned char c2, c3;
 
-            REQUIRE_INBUF(3)
+            REQUIRE_INBUF(3);
             c2 = INBYTE2 ^ 0x80;
             c3 = INBYTE3 ^ 0x80;
 
             /* JIS X 0213 Plane 2 or JIS X 0212 (see NOTES) */
             EMULATE_JISX0213_2000_DECODE_PLANE2(writer, c2, c3)
-            else TRYMAP_DEC(jisx0213_2_bmp, writer, c2, c3) ;
-            else TRYMAP_DEC_CHAR(jisx0213_2_emp, code, c2, c3) {
+            else if (TRYMAP_DEC(jisx0213_2_bmp, decoded, c2, c3))
+                OUTCHAR(decoded);
+            else if (TRYMAP_DEC(jisx0213_2_emp, code, c2, c3)) {
                 OUTCHAR(EMPBASE | code);
                 NEXT_IN(3);
                 continue;
             }
-            else TRYMAP_DEC(jisx0212, writer, c2, c3) ;
-            else return 1;
+            else if (TRYMAP_DEC(jisx0212, decoded, c2, c3))
+                OUTCHAR(decoded);
+            else
+                return 1;
             NEXT_IN(3);
         }
         else {
             unsigned char c2;
 
-            REQUIRE_INBUF(2)
+            REQUIRE_INBUF(2);
             c ^= 0x80;
             c2 = INBYTE2 ^ 0x80;
 
             /* JIS X 0213 Plane 1 */
             EMULATE_JISX0213_2000_DECODE_PLANE1(writer, c, c2)
-            else if (c == 0x21 && c2 == 0x40) OUTCHAR(0xff3c);
-            else if (c == 0x22 && c2 == 0x32) OUTCHAR(0xff5e);
-            else TRYMAP_DEC(jisx0208, writer, c, c2);
-            else TRYMAP_DEC(jisx0213_1_bmp, writer, c, c2);
-            else TRYMAP_DEC_CHAR(jisx0213_1_emp, code, c, c2) {
+            else if (c == 0x21 && c2 == 0x40)
+                OUTCHAR(0xff3c);
+            else if (c == 0x22 && c2 == 0x32)
+                OUTCHAR(0xff5e);
+            else if (TRYMAP_DEC(jisx0208, decoded, c, c2))
+                OUTCHAR(decoded);
+            else if (TRYMAP_DEC(jisx0213_1_bmp, decoded, c, c2))
+                OUTCHAR(decoded);
+            else if (TRYMAP_DEC(jisx0213_1_emp, code, c, c2)) {
                 OUTCHAR(EMPBASE | code);
                 NEXT_IN(2);
                 continue;
             }
-            else TRYMAP_DEC_CHAR(jisx0213_pair, code, c, c2) {
+            else if (TRYMAP_DEC(jisx0213_pair, code, c, c2)) {
                 OUTCHAR2(code >> 16, code & 0xffff);
                 NEXT_IN(2);
                 continue;
             }
-            else return 1;
+            else
+                return 1;
             NEXT_IN(2);
         }
     }
@@ -318,7 +333,7 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            WRITEBYTE1((unsigned char)c)
+            WRITEBYTE1((unsigned char)c);
             NEXT(1, 1);
             continue;
         }
@@ -326,10 +341,11 @@
         if (c > 0xFFFF)
             return 1;
 
-        TRYMAP_ENC(jisxcommon, code, c);
+        if (TRYMAP_ENC(jisxcommon, code, c))
+            ;
         else if (c >= 0xff61 && c <= 0xff9f) {
             /* JIS X 0201 half-width katakana */
-            WRITEBYTE2(0x8e, c - 0xfec0)
+            WRITEBYTE2(0x8e, c - 0xfec0);
             NEXT(1, 2);
             continue;
         }
@@ -351,11 +367,11 @@
 
         if (code & 0x8000) {
             /* JIS X 0212 */
-            WRITEBYTE3(0x8f, code >> 8, (code & 0xFF) | 0x80)
+            WRITEBYTE3(0x8f, code >> 8, (code & 0xFF) | 0x80);
             NEXT(1, 3);
         } else {
             /* JIS X 0208 */
-            WRITEBYTE2((code >> 8) | 0x80, (code & 0xFF) | 0x80)
+            WRITEBYTE2((code >> 8) | 0x80, (code & 0xFF) | 0x80);
             NEXT(1, 2);
         }
     }
@@ -367,6 +383,7 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1;
+        Py_UCS4 decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -378,7 +395,7 @@
             /* JIS X 0201 half-width katakana */
             unsigned char c2;
 
-            REQUIRE_INBUF(2)
+            REQUIRE_INBUF(2);
             c2 = INBYTE2;
             if (c2 >= 0xa1 && c2 <= 0xdf) {
                 OUTCHAR(0xfec0 + c2);
@@ -390,11 +407,12 @@
         else if (c == 0x8f) {
             unsigned char c2, c3;
 
-            REQUIRE_INBUF(3)
+            REQUIRE_INBUF(3);
             c2 = INBYTE2;
             c3 = INBYTE3;
             /* JIS X 0212 */
-            TRYMAP_DEC(jisx0212, writer, c2 ^ 0x80, c3 ^ 0x80) {
+            if (TRYMAP_DEC(jisx0212, decoded, c2 ^ 0x80, c3 ^ 0x80)) {
+                OUTCHAR(decoded);
                 NEXT_IN(3);
             }
             else
@@ -403,7 +421,7 @@
         else {
             unsigned char c2;
 
-            REQUIRE_INBUF(2)
+            REQUIRE_INBUF(2);
             c2 = INBYTE2;
             /* JIS X 0208 */
 #ifndef STRICT_BUILD
@@ -412,9 +430,10 @@
                 OUTCHAR(0xff3c);
             else
 #endif
-                TRYMAP_DEC(jisx0208, writer,
-                           c ^ 0x80, c2 ^ 0x80) ;
-            else return 1;
+            if (TRYMAP_DEC(jisx0208, decoded, c ^ 0x80, c2 ^ 0x80))
+                OUTCHAR(decoded);
+            else
+                return 1;
             NEXT_IN(2);
         }
     }
@@ -437,9 +456,12 @@
 #ifdef STRICT_BUILD
         JISX0201_R_ENCODE(c, code)
 #else
-        if (c < 0x80) code = c;
-        else if (c == 0x00a5) code = 0x5c; /* YEN SIGN */
-        else if (c == 0x203e) code = 0x7e; /* OVERLINE */
+        if (c < 0x80)
+            code = c;
+        else if (c == 0x00a5)
+            code = 0x5c; /* YEN SIGN */
+        else if (c == 0x203e)
+            code = 0x7e; /* OVERLINE */
 #endif
         else JISX0201_K_ENCODE(c, code)
         else if (c > 0xFFFF)
@@ -448,17 +470,18 @@
             code = NOCHAR;
 
         if (code < 0x80 || (code >= 0xa1 && code <= 0xdf)) {
-            REQUIRE_OUTBUF(1)
+            REQUIRE_OUTBUF(1);
 
-            OUTBYTE1((unsigned char)code)
+            OUTBYTE1((unsigned char)code);
             NEXT(1, 1);
             continue;
         }
 
-        REQUIRE_OUTBUF(2)
+        REQUIRE_OUTBUF(2);
 
         if (code == NOCHAR) {
-            TRYMAP_ENC(jisxcommon, code, c);
+            if (TRYMAP_ENC(jisxcommon, code, c))
+                ;
 #ifndef STRICT_BUILD
             else if (c == 0xff3c)
                 code = 0x2140; /* FULL-WIDTH REVERSE SOLIDUS */
@@ -474,8 +497,8 @@
         c2 = code & 0xff;
         c2 = (((c1 - 0x21) & 1) ? 0x5e : 0) + (c2 - 0x21);
         c1 = (c1 - 0x21) >> 1;
-        OUTBYTE1(c1 < 0x1f ? c1 + 0x81 : c1 + 0xc1)
-        OUTBYTE2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41)
+        OUTBYTE1(c1 < 0x1f ? c1 + 0x81 : c1 + 0xc1);
+        OUTBYTE2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41);
         NEXT(1, 2);
     }
 
@@ -486,17 +509,19 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1;
+        Py_UCS4 decoded;
 
 #ifdef STRICT_BUILD
         JISX0201_R_DECODE(c, writer)
 #else
-        if (c < 0x80) OUTCHAR(c);
+        if (c < 0x80)
+            OUTCHAR(c);
 #endif
         else JISX0201_K_DECODE(c, writer)
         else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)){
             unsigned char c1, c2;
 
-            REQUIRE_INBUF(2)
+            REQUIRE_INBUF(2);
             c2 = INBYTE2;
             if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc)
                 return 1;
@@ -514,7 +539,8 @@
                 continue;
             }
 #endif
-            TRYMAP_DEC(jisx0208, writer, c1, c2) {
+            if (TRYMAP_DEC(jisx0208, decoded, c1, c2)) {
+                OUTCHAR(decoded);
                 NEXT_IN(2);
                 continue;
             }
@@ -546,18 +572,18 @@
         JISX0201_ENCODE(c, code)
 
         if (code < 0x80 || (code >= 0xa1 && code <= 0xdf)) {
-            WRITEBYTE1((unsigned char)code)
+            WRITEBYTE1((unsigned char)code);
             NEXT(1, 1);
             continue;
         }
 
-        REQUIRE_OUTBUF(2)
+        REQUIRE_OUTBUF(2);
         insize = 1;
 
         if (code == NOCHAR) {
             if (c <= 0xffff) {
                 EMULATE_JISX0213_2000_ENCODE_BMP(code, c)
-                else TRYMAP_ENC(jisx0213_bmp, code, c) {
+                else if (TRYMAP_ENC(jisx0213_bmp, code, c)) {
                     if (code == MULTIC) {
                         if (inlen - *inpos < 2) {
                             if (flags & MBENC_FLUSH) {
@@ -590,17 +616,20 @@
                         }
                     }
                 }
-                else TRYMAP_ENC(jisxcommon, code, c) {
+                else if (TRYMAP_ENC(jisxcommon, code, c)) {
                     /* abandon JIS X 0212 codes */
                     if (code & 0x8000)
                         return 1;
                 }
-                else return 1;
+                else
+                    return 1;
             }
             else if (c >> 16 == EMPBASE >> 16) {
                 EMULATE_JISX0213_2000_ENCODE_EMP(code, c)
-                else TRYMAP_ENC(jisx0213_emp, code, c&0xffff);
-                else return insize;
+                else if (TRYMAP_ENC(jisx0213_emp, code, c&0xffff))
+                    ;
+                else
+                    return insize;
             }
             else
                 return insize;
@@ -609,18 +638,25 @@
         c1 = code >> 8;
         c2 = (code & 0xff) - 0x21;
 
-        if (c1 & 0x80) { /* Plane 2 */
-            if (c1 >= 0xee) c1 -= 0x87;
-            else if (c1 >= 0xac || c1 == 0xa8) c1 -= 0x49;
-            else c1 -= 0x43;
+        if (c1 & 0x80) {
+            /* Plane 2 */
+            if (c1 >= 0xee)
+                c1 -= 0x87;
+            else if (c1 >= 0xac || c1 == 0xa8)
+                c1 -= 0x49;
+            else
+                c1 -= 0x43;
         }
-        else /* Plane 1 */
+        else {
+            /* Plane 1 */
             c1 -= 0x21;
+        }
 
-        if (c1 & 1) c2 += 0x5e;
+        if (c1 & 1)
+            c2 += 0x5e;
         c1 >>= 1;
-        OUTBYTE1(c1 + (c1 < 0x1f ? 0x81 : 0xc1))
-        OUTBYTE2(c2 + (c2 < 0x3f ? 0x40 : 0x41))
+        OUTBYTE1(c1 + (c1 < 0x1f ? 0x81 : 0xc1));
+        OUTBYTE2(c2 + (c2 < 0x3f ? 0x40 : 0x41));
 
         NEXT(insize, 2);
     }
@@ -636,9 +672,9 @@
         JISX0201_DECODE(c, writer)
         else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xfc)){
             unsigned char c1, c2;
-            Py_UCS4 code;
+            Py_UCS4 code, decoded;
 
-            REQUIRE_INBUF(2)
+            REQUIRE_INBUF(2);
             c2 = INBYTE2;
             if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc)
                 return 1;
@@ -652,31 +688,31 @@
                 c1 += 0x21;
                 EMULATE_JISX0213_2000_DECODE_PLANE1(writer,
                                 c1, c2)
-                else TRYMAP_DEC(jisx0208, writer, c1, c2) {
-                }
-                else TRYMAP_DEC(jisx0213_1_bmp, writer,
-                                c1, c2) {
-                }
-                else TRYMAP_DEC_CHAR(jisx0213_1_emp, code, c1, c2) {
+                else if (TRYMAP_DEC(jisx0208, decoded, c1, c2))
+                    OUTCHAR(decoded);
+                else if (TRYMAP_DEC(jisx0213_1_bmp, decoded, c1, c2))
+                    OUTCHAR(decoded);
+                else if (TRYMAP_DEC(jisx0213_1_emp, code, c1, c2))
                     OUTCHAR(EMPBASE | code);
-                }
-                else TRYMAP_DEC_CHAR(jisx0213_pair, code, c1, c2) {
+                else if (TRYMAP_DEC(jisx0213_pair, code, c1, c2))
                     OUTCHAR2(code >> 16, code & 0xffff);
-                }
                 else
                     return 1;
                 NEXT_IN(2);
             }
             else { /* Plane 2 */
-                if (c1 >= 0x67) c1 += 0x07;
-                else if (c1 >= 0x63 || c1 == 0x5f) c1 -= 0x37;
-                else c1 -= 0x3d;
+                if (c1 >= 0x67)
+                    c1 += 0x07;
+                else if (c1 >= 0x63 || c1 == 0x5f)
+                    c1 -= 0x37;
+                else
+                    c1 -= 0x3d;
 
                 EMULATE_JISX0213_2000_DECODE_PLANE2(writer,
                                 c1, c2)
-                else TRYMAP_DEC(jisx0213_2_bmp, writer,
-                                c1, c2) {
-                } else TRYMAP_DEC_CHAR(jisx0213_2_emp, code, c1, c2) {
+                else if (TRYMAP_DEC(jisx0213_2_bmp, decoded, c1, c2))
+                    OUTCHAR(decoded);
+                else if (TRYMAP_DEC(jisx0213_2_emp, code, c1, c2)) {
                     OUTCHAR(EMPBASE | code);
                     NEXT_IN(2);
                     continue;
diff --git a/Modules/cjkcodecs/_codecs_kr.c b/Modules/cjkcodecs/_codecs_kr.c
index 0c2309d..1ad41a7 100644
--- a/Modules/cjkcodecs/_codecs_kr.c
+++ b/Modules/cjkcodecs/_codecs_kr.c
@@ -38,7 +38,7 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            WRITEBYTE1((unsigned char)c)
+            WRITEBYTE1((unsigned char)c);
             NEXT(1, 1);
             continue;
         }
@@ -46,39 +46,42 @@
         if (c > 0xFFFF)
             return 1;
 
-        REQUIRE_OUTBUF(2)
-        TRYMAP_ENC(cp949, code, c);
-        else return 1;
+        REQUIRE_OUTBUF(2);
+        if (TRYMAP_ENC(cp949, code, c))
+            ;
+        else
+            return 1;
 
         if ((code & 0x8000) == 0) {
             /* KS X 1001 coded character */
-            OUTBYTE1((code >> 8) | 0x80)
-            OUTBYTE2((code & 0xFF) | 0x80)
+            OUTBYTE1((code >> 8) | 0x80);
+            OUTBYTE2((code & 0xFF) | 0x80);
             NEXT(1, 2);
         }
-        else {          /* Mapping is found in CP949 extension,
-                 * but we encode it in KS X 1001:1998 Annex 3,
-                 * make-up sequence for EUC-KR. */
+        else {
+            /* Mapping is found in CP949 extension,
+               but we encode it in KS X 1001:1998 Annex 3,
+               make-up sequence for EUC-KR. */
 
-            REQUIRE_OUTBUF(8)
+            REQUIRE_OUTBUF(8);
 
             /* syllable composition precedence */
-            OUTBYTE1(EUCKR_JAMO_FIRSTBYTE)
-            OUTBYTE2(EUCKR_JAMO_FILLER)
+            OUTBYTE1(EUCKR_JAMO_FIRSTBYTE);
+            OUTBYTE2(EUCKR_JAMO_FILLER);
 
             /* All codepoints in CP949 extension are in unicode
              * Hangul Syllable area. */
             assert(0xac00 <= c && c <= 0xd7a3);
             c -= 0xac00;
 
-            OUTBYTE3(EUCKR_JAMO_FIRSTBYTE)
-            OUTBYTE4(u2cgk_choseong[c / 588])
+            OUTBYTE3(EUCKR_JAMO_FIRSTBYTE);
+            OUTBYTE4(u2cgk_choseong[c / 588]);
             NEXT_OUT(4);
 
-            OUTBYTE1(EUCKR_JAMO_FIRSTBYTE)
-            OUTBYTE2(u2cgk_jungseong[(c / 28) % 21])
-            OUTBYTE3(EUCKR_JAMO_FIRSTBYTE)
-            OUTBYTE4(u2cgk_jongseong[c % 28])
+            OUTBYTE1(EUCKR_JAMO_FIRSTBYTE);
+            OUTBYTE2(u2cgk_jungseong[(c / 28) % 21]);
+            OUTBYTE3(EUCKR_JAMO_FIRSTBYTE);
+            OUTBYTE4(u2cgk_jongseong[c % 28]);
             NEXT(1, 4);
         }
     }
@@ -105,6 +108,7 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1;
+        Py_UCS4 decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -112,14 +116,14 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
+        REQUIRE_INBUF(2);
 
         if (c == EUCKR_JAMO_FIRSTBYTE &&
             INBYTE2 == EUCKR_JAMO_FILLER) {
             /* KS X 1001:1998 Annex 3 make-up sequence */
             DBCHAR cho, jung, jong;
 
-            REQUIRE_INBUF(8)
+            REQUIRE_INBUF(8);
             if ((*inbuf)[2] != EUCKR_JAMO_FIRSTBYTE ||
                 (*inbuf)[4] != EUCKR_JAMO_FIRSTBYTE ||
                 (*inbuf)[6] != EUCKR_JAMO_FIRSTBYTE)
@@ -148,7 +152,8 @@
             OUTCHAR(0xac00 + cho*588 + jung*28 + jong);
             NEXT_IN(8);
         }
-        else TRYMAP_DEC(ksx1001, writer, c ^ 0x80, INBYTE2 ^ 0x80) {
+        else if (TRYMAP_DEC(ksx1001, decoded, c ^ 0x80, INBYTE2 ^ 0x80)) {
+            OUTCHAR(decoded);
             NEXT_IN(2);
         }
         else
@@ -171,7 +176,7 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            WRITEBYTE1((unsigned char)c)
+            WRITEBYTE1((unsigned char)c);
             NEXT(1, 1);
             continue;
         }
@@ -179,15 +184,17 @@
         if (c > 0xFFFF)
             return 1;
 
-        REQUIRE_OUTBUF(2)
-        TRYMAP_ENC(cp949, code, c);
-        else return 1;
-
-        OUTBYTE1((code >> 8) | 0x80)
-        if (code & 0x8000)
-            OUTBYTE2(code & 0xFF) /* MSB set: CP949 */
+        REQUIRE_OUTBUF(2);
+        if (TRYMAP_ENC(cp949, code, c))
+            ;
         else
-            OUTBYTE2((code & 0xFF) | 0x80) /* MSB unset: ks x 1001 */
+            return 1;
+
+        OUTBYTE1((code >> 8) | 0x80);
+        if (code & 0x8000)
+            OUTBYTE2(code & 0xFF); /* MSB set: CP949 */
+        else
+            OUTBYTE2((code & 0xFF) | 0x80); /* MSB unset: ks x 1001 */
         NEXT(1, 2);
     }
 
@@ -198,6 +205,7 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1;
+        Py_UCS4 decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -205,10 +213,13 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
-        TRYMAP_DEC(ksx1001, writer, c ^ 0x80, INBYTE2 ^ 0x80);
-        else TRYMAP_DEC(cp949ext, writer, c, INBYTE2);
-        else return 1;
+        REQUIRE_INBUF(2);
+        if (TRYMAP_DEC(ksx1001, decoded, c ^ 0x80, INBYTE2 ^ 0x80))
+            OUTCHAR(decoded);
+        else if (TRYMAP_DEC(cp949ext, decoded, c, INBYTE2))
+            OUTCHAR(decoded);
+        else
+            return 1;
 
         NEXT_IN(2);
     }
@@ -255,7 +266,7 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            WRITEBYTE1((unsigned char)c)
+            WRITEBYTE1((unsigned char)c);
             NEXT(1, 1);
             continue;
         }
@@ -263,7 +274,7 @@
         if (c > 0xFFFF)
             return 1;
 
-        REQUIRE_OUTBUF(2)
+        REQUIRE_OUTBUF(2);
 
         if (c >= 0xac00 && c <= 0xd7a3) {
             c -= 0xac00;
@@ -274,7 +285,7 @@
         }
         else if (c >= 0x3131 && c <= 0x3163)
             code = u2johabjamo[c - 0x3131];
-        else TRYMAP_ENC(cp949, code, c) {
+        else if (TRYMAP_ENC(cp949, code, c)) {
             unsigned char c1, c2, t2;
             unsigned short t1;
 
@@ -287,8 +298,8 @@
                 t1 = (c1 < 0x4a ? (c1 - 0x21 + 0x1b2) :
                           (c1 - 0x21 + 0x197));
                 t2 = ((t1 & 1) ? 0x5e : 0) + (c2 - 0x21);
-                OUTBYTE1(t1 >> 1)
-                OUTBYTE2(t2 < 0x4e ? t2 + 0x31 : t2 + 0x43)
+                OUTBYTE1(t1 >> 1);
+                OUTBYTE2(t2 < 0x4e ? t2 + 0x31 : t2 + 0x43);
                 NEXT(1, 2);
                 continue;
             }
@@ -298,8 +309,8 @@
         else
             return 1;
 
-        OUTBYTE1(code >> 8)
-        OUTBYTE2(code & 0xff)
+        OUTBYTE1(code >> 8);
+        OUTBYTE2(code & 0xff);
         NEXT(1, 2);
     }
 
@@ -350,7 +361,8 @@
 DECODER(johab)
 {
     while (inleft > 0) {
-        unsigned char    c = INBYTE1, c2;
+        unsigned char c = INBYTE1, c2;
+        Py_UCS4 decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -358,7 +370,7 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
+        REQUIRE_INBUF(2);
         c2 = INBYTE2;
 
         if (c < 0xd8) {
@@ -424,9 +436,13 @@
                 t1 = t1 + (t2 < 0x5e ? 0 : 1) + 0x21;
                 t2 = (t2 < 0x5e ? t2 : t2 - 0x5e) + 0x21;
 
-                TRYMAP_DEC(ksx1001, writer, t1, t2);
-                else return 1;
-                NEXT_IN(2);
+                if (TRYMAP_DEC(ksx1001, decoded, t1, t2)) {
+                    OUTCHAR(decoded);
+                    NEXT_IN(2);
+                }
+                else {
+                    return 1;
+                }
             }
         }
     }
diff --git a/Modules/cjkcodecs/_codecs_tw.c b/Modules/cjkcodecs/_codecs_tw.c
index 80e0b81..722b26b 100644
--- a/Modules/cjkcodecs/_codecs_tw.c
+++ b/Modules/cjkcodecs/_codecs_tw.c
@@ -18,7 +18,7 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            REQUIRE_OUTBUF(1)
+            REQUIRE_OUTBUF(1);
             **outbuf = (unsigned char)c;
             NEXT(1, 1);
             continue;
@@ -27,13 +27,15 @@
         if (c > 0xFFFF)
             return 1;
 
-        REQUIRE_OUTBUF(2)
+        REQUIRE_OUTBUF(2);
 
-        TRYMAP_ENC(big5, code, c);
-        else return 1;
+        if (TRYMAP_ENC(big5, code, c))
+            ;
+        else
+            return 1;
 
-        OUTBYTE1(code >> 8)
-        OUTBYTE2(code & 0xFF)
+        OUTBYTE1(code >> 8);
+        OUTBYTE2(code & 0xFF);
         NEXT(1, 2);
     }
 
@@ -44,6 +46,7 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1;
+        Py_UCS4 decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -51,8 +54,9 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
-        TRYMAP_DEC(big5, writer, c, INBYTE2) {
+        REQUIRE_INBUF(2);
+        if (TRYMAP_DEC(big5, decoded, c, INBYTE2)) {
+            OUTCHAR(decoded);
             NEXT_IN(2);
         }
         else return 1;
@@ -73,7 +77,7 @@
         DBCHAR code;
 
         if (c < 0x80) {
-            WRITEBYTE1((unsigned char)c)
+            WRITEBYTE1((unsigned char)c);
             NEXT(1, 1);
             continue;
         }
@@ -81,13 +85,16 @@
         if (c > 0xFFFF)
             return 1;
 
-        REQUIRE_OUTBUF(2)
-        TRYMAP_ENC(cp950ext, code, c);
-        else TRYMAP_ENC(big5, code, c);
-        else return 1;
+        REQUIRE_OUTBUF(2);
+        if (TRYMAP_ENC(cp950ext, code, c))
+            ;
+        else if (TRYMAP_ENC(big5, code, c))
+            ;
+        else
+            return 1;
 
-        OUTBYTE1(code >> 8)
-        OUTBYTE2(code & 0xFF)
+        OUTBYTE1(code >> 8);
+        OUTBYTE2(code & 0xFF);
         NEXT(1, 2);
     }
 
@@ -98,6 +105,7 @@
 {
     while (inleft > 0) {
         unsigned char c = INBYTE1;
+        Py_UCS4 decoded;
 
         if (c < 0x80) {
             OUTCHAR(c);
@@ -105,11 +113,14 @@
             continue;
         }
 
-        REQUIRE_INBUF(2)
+        REQUIRE_INBUF(2);
 
-        TRYMAP_DEC(cp950ext, writer, c, INBYTE2);
-        else TRYMAP_DEC(big5, writer, c, INBYTE2);
-        else return 1;
+        if (TRYMAP_DEC(cp950ext, decoded, c, INBYTE2))
+            OUTCHAR(decoded);
+        else if (TRYMAP_DEC(big5, decoded, c, INBYTE2))
+            OUTCHAR(decoded);
+        else
+            return 1;
 
         NEXT_IN(2);
     }
diff --git a/Modules/cjkcodecs/alg_jisx0201.h b/Modules/cjkcodecs/alg_jisx0201.h
index 98c63e6..3034b5a 100644
--- a/Modules/cjkcodecs/alg_jisx0201.h
+++ b/Modules/cjkcodecs/alg_jisx0201.h
@@ -1,33 +1,65 @@
 #define JISX0201_R_ENCODE(c, assi)                      \
-    if ((c) < 0x80 && (c) != 0x5c && (c) != 0x7e)       \
+    if ((c) < 0x80 && (c) != 0x5c && (c) != 0x7e) {     \
         (assi) = (c);                                   \
-    else if ((c) == 0x00a5) (assi) = 0x5c;              \
-    else if ((c) == 0x203e) (assi) = 0x7e;
+    }                                                   \
+    else if ((c) == 0x00a5) {                           \
+        (assi) = 0x5c;                                  \
+    }                                                   \
+    else if ((c) == 0x203e) {                           \
+        (assi) = 0x7e;                                  \
+    }
+
 #define JISX0201_K_ENCODE(c, assi)                      \
-    if ((c) >= 0xff61 && (c) <= 0xff9f)                 \
-        (assi) = (c) - 0xfec0;
+    if ((c) >= 0xff61 && (c) <= 0xff9f) {               \
+        (assi) = (c) - 0xfec0;                          \
+    }
+
 #define JISX0201_ENCODE(c, assi)                        \
     JISX0201_R_ENCODE(c, assi)                          \
     else JISX0201_K_ENCODE(c, assi)
 
 #define JISX0201_R_DECODE_CHAR(c, assi)                 \
-    if ((c) < 0x5c) (assi) = (c);                       \
-    else if ((c) == 0x5c) (assi) = 0x00a5;              \
-    else if ((c) < 0x7e) (assi) = (c);                  \
-    else if ((c) == 0x7e) (assi) = 0x203e;              \
-    else if ((c) == 0x7f) (assi) = 0x7f;
+    if ((c) < 0x5c) {                                   \
+        (assi) = (c);                                   \
+    }                                                   \
+    else if ((c) == 0x5c) {                             \
+        (assi) = 0x00a5;                                \
+    }                                                   \
+    else if ((c) < 0x7e) {                              \
+        (assi) = (c);                                   \
+    }                                                   \
+    else if ((c) == 0x7e) {                             \
+        (assi) = 0x203e;                                \
+    }                                                   \
+    else if ((c) == 0x7f) {                             \
+        (assi) = 0x7f;                                  \
+    }
+
 #define JISX0201_R_DECODE(c, writer)                    \
-    if ((c) < 0x5c) OUTCHAR(c);                             \
-    else if ((c) == 0x5c) OUTCHAR(0x00a5);                  \
-    else if ((c) < 0x7e) OUTCHAR(c);                        \
-    else if ((c) == 0x7e) OUTCHAR(0x203e);                  \
-    else if ((c) == 0x7f) OUTCHAR(0x7f);
+    if ((c) < 0x5c) {                                   \
+        OUTCHAR(c);                                     \
+    }                                                   \
+    else if ((c) == 0x5c) {                             \
+        OUTCHAR(0x00a5);                                \
+    }                                                   \
+    else if ((c) < 0x7e) {                              \
+        OUTCHAR(c);                                     \
+    }                                                   \
+    else if ((c) == 0x7e) {                             \
+        OUTCHAR(0x203e);                                \
+    }                                                   \
+    else if ((c) == 0x7f) {                             \
+        OUTCHAR(0x7f);                                  \
+    }
+
 #define JISX0201_K_DECODE(c, writer)                    \
-    if ((c) >= 0xa1 && (c) <= 0xdf)                     \
-        OUTCHAR(0xfec0 + (c));
+    if ((c) >= 0xa1 && (c) <= 0xdf) {                   \
+        OUTCHAR(0xfec0 + (c));                          \
+    }
 #define JISX0201_K_DECODE_CHAR(c, assi)                 \
-    if ((c) >= 0xa1 && (c) <= 0xdf)                     \
-        (assi) = 0xfec0 + (c);
+    if ((c) >= 0xa1 && (c) <= 0xdf) {                   \
+        (assi) = 0xfec0 + (c);                          \
+    }
 #define JISX0201_DECODE(c, writer)                      \
     JISX0201_R_DECODE(c, writer)                        \
     else JISX0201_K_DECODE(c, writer)
diff --git a/Modules/cjkcodecs/cjkcodecs.h b/Modules/cjkcodecs/cjkcodecs.h
index 9e92db2..25bab41 100644
--- a/Modules/cjkcodecs/cjkcodecs.h
+++ b/Modules/cjkcodecs/cjkcodecs.h
@@ -108,24 +108,29 @@
     } while (0)
 #define NEXT(i, o)                              \
     do {                                        \
-        NEXT_INCHAR(i);                        \
-        NEXT_OUT(o);                        \
+        NEXT_INCHAR(i);                         \
+        NEXT_OUT(o);                            \
     } while (0)
 
 #define REQUIRE_INBUF(n)                        \
-    if (inleft < (n))                           \
-        return MBERR_TOOFEW;
+    do {                                        \
+        if (inleft < (n))                       \
+            return MBERR_TOOFEW;                \
+    } while (0)
+
 #define REQUIRE_OUTBUF(n)                       \
-    if (outleft < (n))                          \
-        return MBERR_TOOSMALL;
+    do {                                        \
+        if (outleft < (n))                      \
+            return MBERR_TOOSMALL;              \
+    } while (0)
 
 #define INBYTE1 ((*inbuf)[0])
 #define INBYTE2 ((*inbuf)[1])
 #define INBYTE3 ((*inbuf)[2])
 #define INBYTE4 ((*inbuf)[3])
 
-#define INCHAR1 PyUnicode_READ(kind, data, *inpos)
-#define INCHAR2 PyUnicode_READ(kind, data, *inpos + 1)
+#define INCHAR1 (PyUnicode_READ(kind, data, *inpos))
+#define INCHAR2 (PyUnicode_READ(kind, data, *inpos + 1))
 
 #define OUTCHAR(c)                                                         \
     do {                                                                   \
@@ -138,80 +143,62 @@
         Py_UCS4 _c1 = (c1);                                                \
         Py_UCS4 _c2 = (c2);                                                \
         if (_PyUnicodeWriter_Prepare(writer, 2, Py_MAX(_c1, c2)) < 0)      \
-            return MBERR_EXCEPTION;                                         \
+            return MBERR_EXCEPTION;                                        \
         PyUnicode_WRITE(writer->kind, writer->data, writer->pos, _c1);     \
         PyUnicode_WRITE(writer->kind, writer->data, writer->pos + 1, _c2); \
         writer->pos += 2;                                                  \
     } while (0)
 
-#define OUTBYTE1(c) ((*outbuf)[0]) = (c);
-#define OUTBYTE2(c) ((*outbuf)[1]) = (c);
-#define OUTBYTE3(c) ((*outbuf)[2]) = (c);
-#define OUTBYTE4(c) ((*outbuf)[3]) = (c);
+#define OUTBYTE1(c) \
+    do { ((*outbuf)[0]) = (c); } while (0)
+#define OUTBYTE2(c) \
+    do { ((*outbuf)[1]) = (c); } while (0)
+#define OUTBYTE3(c) \
+    do { ((*outbuf)[2]) = (c); } while (0)
+#define OUTBYTE4(c) \
+    do { ((*outbuf)[3]) = (c); } while (0)
 
 #define WRITEBYTE1(c1)              \
-    REQUIRE_OUTBUF(1)           \
-    (*outbuf)[0] = (c1);
+    do {                            \
+        REQUIRE_OUTBUF(1);          \
+        (*outbuf)[0] = (c1);        \
+    } while (0)
 #define WRITEBYTE2(c1, c2)          \
-    REQUIRE_OUTBUF(2)           \
-    (*outbuf)[0] = (c1);        \
-    (*outbuf)[1] = (c2);
+    do {                            \
+        REQUIRE_OUTBUF(2);          \
+        (*outbuf)[0] = (c1);        \
+        (*outbuf)[1] = (c2);        \
+    } while (0)
 #define WRITEBYTE3(c1, c2, c3)      \
-    REQUIRE_OUTBUF(3)           \
-    (*outbuf)[0] = (c1);        \
-    (*outbuf)[1] = (c2);        \
-    (*outbuf)[2] = (c3);
+    do {                            \
+        REQUIRE_OUTBUF(3);          \
+        (*outbuf)[0] = (c1);        \
+        (*outbuf)[1] = (c2);        \
+        (*outbuf)[2] = (c3);        \
+    } while (0)
 #define WRITEBYTE4(c1, c2, c3, c4)  \
-    REQUIRE_OUTBUF(4)           \
-    (*outbuf)[0] = (c1);        \
-    (*outbuf)[1] = (c2);        \
-    (*outbuf)[2] = (c3);        \
-    (*outbuf)[3] = (c4);
+    do {                            \
+        REQUIRE_OUTBUF(4);          \
+        (*outbuf)[0] = (c1);        \
+        (*outbuf)[1] = (c2);        \
+        (*outbuf)[2] = (c3);        \
+        (*outbuf)[3] = (c4);        \
+    } while (0)
 
 #define _TRYMAP_ENC(m, assi, val)                               \
     ((m)->map != NULL && (val) >= (m)->bottom &&                \
         (val)<= (m)->top && ((assi) = (m)->map[(val) -          \
         (m)->bottom]) != NOCHAR)
-#define TRYMAP_ENC_COND(charset, assi, uni)                     \
+#define TRYMAP_ENC(charset, assi, uni)                     \
     _TRYMAP_ENC(&charset##_encmap[(uni) >> 8], assi, (uni) & 0xff)
-#define TRYMAP_ENC(charset, assi, uni)                          \
-    if TRYMAP_ENC_COND(charset, assi, uni)
 
-Py_LOCAL_INLINE(int)
-_TRYMAP_DEC_WRITE(_PyUnicodeWriter *writer, Py_UCS4 c)
-{
-    if (c == UNIINV || _PyUnicodeWriter_WriteChar(writer, c) < 0)
-        return UNIINV;
-    else
-        return c;
-}
-
-#define _TRYMAP_DEC(m, writer, val)                             \
-    ((m)->map != NULL &&                                        \
-     (val) >= (m)->bottom &&                                    \
-     (val)<= (m)->top &&                                        \
-     _TRYMAP_DEC_WRITE(writer, (m)->map[(val) - (m)->bottom]) != UNIINV)
-#define _TRYMAP_DEC_CHAR(m, assi, val)                             \
+#define _TRYMAP_DEC(m, assi, val)                             \
     ((m)->map != NULL &&                                        \
      (val) >= (m)->bottom &&                                    \
      (val)<= (m)->top &&                                        \
      ((assi) = (m)->map[(val) - (m)->bottom]) != UNIINV)
-#define TRYMAP_DEC(charset, writer, c1, c2)                     \
-    if _TRYMAP_DEC(&charset##_decmap[c1], writer, c2)
-#define TRYMAP_DEC_CHAR(charset, assi, c1, c2)                     \
-    if _TRYMAP_DEC_CHAR(&charset##_decmap[c1], assi, c2)
-
-#define _TRYMAP_ENC_MPLANE(m, assplane, asshi, asslo, val)        \
-    ((m)->map != NULL && (val) >= (m)->bottom &&                  \
-        (val)<= (m)->top &&                                       \
-        ((assplane) = (m)->map[((val) - (m)->bottom)*3]) != 0 &&  \
-        (((asshi) = (m)->map[((val) - (m)->bottom)*3 + 1]), 1) && \
-        (((asslo) = (m)->map[((val) - (m)->bottom)*3 + 2]), 1))
-#define TRYMAP_ENC_MPLANE(charset, assplane, asshi, asslo, uni) \
-    if _TRYMAP_ENC_MPLANE(&charset##_encmap[(uni) >> 8], \
-                       assplane, asshi, asslo, (uni) & 0xff)
-#define TRYMAP_DEC_MPLANE(charset, writer, plane, c1, c2)         \
-    if _TRYMAP_DEC(&charset##_decmap[plane][c1], writer, c2)
+#define TRYMAP_DEC(charset, assi, c1, c2)                     \
+    _TRYMAP_DEC(&charset##_decmap[c1], assi, c2)
 
 #define BEGIN_MAPPINGS_LIST static const struct dbcs_map _mapping_list[] = {
 #define MAPPING_ENCONLY(enc) {#enc, (void*)enc##_encmap, NULL},
@@ -371,7 +358,7 @@
 {
     PyObject *o, *mod;
 
-    mod = PyImport_ImportModule((char *)modname);
+    mod = PyImport_ImportModule(modname);
     if (mod == NULL)
         return -1;
 
diff --git a/Modules/cjkcodecs/emu_jisx0213_2000.h b/Modules/cjkcodecs/emu_jisx0213_2000.h
index 877337e..a5d5a70 100644
--- a/Modules/cjkcodecs/emu_jisx0213_2000.h
+++ b/Modules/cjkcodecs/emu_jisx0213_2000.h
@@ -2,7 +2,7 @@
  * standards. */
 
 #ifndef EMULATE_JISX0213_2000_ENCODE_INVALID
-#define EMULATE_JISX0213_2000_ENCODE_INVALID 1
+#  define EMULATE_JISX0213_2000_ENCODE_INVALID 1
 #endif
 
 #define EMULATE_JISX0213_2000_ENCODE_BMP(assi, c)                       \
@@ -11,17 +11,20 @@
                     (c) == 0x525D || (c) == 0x541E ||                   \
                     (c) == 0x5653 || (c) == 0x59F8 ||                   \
                     (c) == 0x5C5B || (c) == 0x5E77 ||                   \
-                    (c) == 0x7626 || (c) == 0x7E6B))                    \
+                    (c) == 0x7626 || (c) == 0x7E6B)) {                  \
         return EMULATE_JISX0213_2000_ENCODE_INVALID;                    \
-    else if (config == (void *)2000 && (c) == 0x9B1D)                   \
+    }                                                                   \
+    else if (config == (void *)2000 && (c) == 0x9B1D) {                 \
         (assi) = 0x8000 | 0x7d3b;                                       \
+    }
 
 #define EMULATE_JISX0213_2000_ENCODE_EMP(assi, c)                       \
-    if (config == (void *)2000 && (c) == 0x20B9F)                       \
-        return EMULATE_JISX0213_2000_ENCODE_INVALID;
+    if (config == (void *)2000 && (c) == 0x20B9F) {                     \
+        return EMULATE_JISX0213_2000_ENCODE_INVALID;                    \
+    }
 
 #ifndef EMULATE_JISX0213_2000_DECODE_INVALID
-#define EMULATE_JISX0213_2000_DECODE_INVALID 2
+#  define EMULATE_JISX0213_2000_DECODE_INVALID 2
 #endif
 
 #define EMULATE_JISX0213_2000_DECODE_PLANE1(assi, c1, c2)               \
@@ -35,12 +38,17 @@
                      ((c1) == 0x7E && (c2) == 0x7B) ||                  \
                      ((c1) == 0x7E && (c2) == 0x7C) ||                  \
                      ((c1) == 0x7E && (c2) == 0x7D) ||                  \
-                     ((c1) == 0x7E && (c2) == 0x7E)))                   \
-        return EMULATE_JISX0213_2000_DECODE_INVALID;
+                     ((c1) == 0x7E && (c2) == 0x7E))) {                 \
+        return EMULATE_JISX0213_2000_DECODE_INVALID;                    \
+    }
 
-#define EMULATE_JISX0213_2000_DECODE_PLANE2(writer, c1, c2)               \
-    if (config == (void *)2000 && (c1) == 0x7D && (c2) == 0x3B)         \
-        OUTCHAR(0x9B1D);
-#define EMULATE_JISX0213_2000_DECODE_PLANE2_CHAR(assi, c1, c2)               \
-    if (config == (void *)2000 && (c1) == 0x7D && (c2) == 0x3B)         \
-        (assi) = 0x9B1D;
+#define EMULATE_JISX0213_2000_DECODE_PLANE2(writer, c1, c2)             \
+    if (config == (void *)2000 && (c1) == 0x7D && (c2) == 0x3B) {       \
+        OUTCHAR(0x9B1D);                                                \
+    }
+
+#define EMULATE_JISX0213_2000_DECODE_PLANE2_CHAR(assi, c1, c2)          \
+    if (config == (void *)2000 && (c1) == 0x7D && (c2) == 0x3B) {       \
+        (assi) = 0x9B1D;                                                \
+    }
+
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index 3c5173f..087ae9b 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -51,6 +51,8 @@
 
 #define MBENC_RESET     MBENC_MAX<<1 /* reset after an encoding session */
 
+_Py_IDENTIFIER(write);
+
 static PyObject *
 make_tuple(PyObject *object, Py_ssize_t len)
 {
@@ -1569,7 +1571,6 @@
                       PyObject *unistr)
 {
     PyObject *str, *wr;
-    _Py_IDENTIFIER(write);
 
     str = encoder_encode_stateful(STATEFUL_ECTX(self), unistr, 0);
     if (str == NULL)
@@ -1639,7 +1640,6 @@
     assert(PyBytes_Check(pwrt));
     if (PyBytes_Size(pwrt) > 0) {
         PyObject *wr;
-        _Py_IDENTIFIER(write);
 
         wr = _PyObject_CallMethodId(self->stream, &PyId_write, "O", pwrt);
         if (wr == NULL) {
diff --git a/Modules/cjkcodecs/multibytecodec.h b/Modules/cjkcodecs/multibytecodec.h
index 7cde8e3..5b8c222 100644
--- a/Modules/cjkcodecs/multibytecodec.h
+++ b/Modules/cjkcodecs/multibytecodec.h
@@ -118,11 +118,11 @@
 #define ERROR_IGNORE            (PyObject *)(2)
 #define ERROR_REPLACE           (PyObject *)(3)
 #define ERROR_ISCUSTOM(p)       ((p) < ERROR_STRICT || ERROR_REPLACE < (p))
-#define ERROR_DECREF(p) do {                    \
-    if (p != NULL && ERROR_ISCUSTOM(p)) {       \
-        Py_DECREF(p);                           \
-    }                                           \
-} while (0);
+#define ERROR_DECREF(p)                             \
+    do {                                            \
+        if (p != NULL && ERROR_ISCUSTOM(p))         \
+            Py_DECREF(p);                           \
+    } while (0);
 
 #define MBENC_FLUSH             0x0001 /* encode all characters encodable */
 #define MBENC_MAX               MBENC_FLUSH
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
index 47bc9e8..27b1d54 100644
--- a/Modules/faulthandler.c
+++ b/Modules/faulthandler.c
@@ -26,6 +26,11 @@
    (anyway, the length is smaller than 30 characters) */
 #define PUTS(fd, str) write(fd, str, (int)strlen(str))
 
+_Py_IDENTIFIER(enable);
+_Py_IDENTIFIER(fileno);
+_Py_IDENTIFIER(flush);
+_Py_IDENTIFIER(stderr);
+
 #ifdef HAVE_SIGACTION
 typedef struct sigaction _Py_sighandler_t;
 #else
@@ -130,13 +135,11 @@
 faulthandler_get_fileno(PyObject *file, int *p_fd)
 {
     PyObject *result;
-    _Py_IDENTIFIER(fileno);
-    _Py_IDENTIFIER(flush);
     long fd_long;
     int fd;
 
     if (file == NULL || file == Py_None) {
-        file = PySys_GetObject("stderr");
+        file = _PySys_GetObjectId(&PyId_stderr);
         if (file == NULL) {
             PyErr_SetString(PyExc_RuntimeError, "unable to get sys.stderr");
             return NULL;
@@ -1047,7 +1050,6 @@
 faulthandler_env_options(void)
 {
     PyObject *xoptions, *key, *module, *res;
-    _Py_IDENTIFIER(enable);
     char *p;
 
     if (!((p = Py_GETENV("PYTHONFAULTHANDLER")) && *p != '\0')) {
diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c
index 0ce1235..e54c8e0 100644
--- a/Modules/fcntlmodule.c
+++ b/Modules/fcntlmodule.c
@@ -27,7 +27,7 @@
 }
 
 
-/* fcntl(fd, opt, [arg]) */
+/* fcntl(fd, op, [arg]) */
 
 static PyObject *
 fcntl_fcntl(PyObject *self, PyObject *args)
@@ -77,11 +77,12 @@
 }
 
 PyDoc_STRVAR(fcntl_doc,
-"fcntl(fd, opt, [arg])\n\
+"fcntl(fd, op, [arg])\n\
 \n\
-Perform the requested operation on file descriptor fd.  The operation\n\
-is defined by op and is operating system dependent.  These constants are\n\
-available from the fcntl module.  The argument arg is optional, and\n\
+Perform the operation op on file descriptor fd.  The values used\n\
+for op are operating system dependent, and are available\n\
+as constants in the fcntl module, using the same names as used in\n\
+the relevant C header files.  The argument arg is optional, and\n\
 defaults to 0; it may be an int or a string.  If arg is given as a string,\n\
 the return value of fcntl is a string of that length, containing the\n\
 resulting value put in the arg buffer by the operating system.  The length\n\
@@ -90,7 +91,7 @@
 corresponding to the return value of the fcntl call in the C code.");
 
 
-/* ioctl(fd, opt, [arg]) */
+/* ioctl(fd, op, [arg]) */
 
 static PyObject *
 fcntl_ioctl(PyObject *self, PyObject *args)
@@ -104,7 +105,7 @@
        whereas the system expects it to be a 32bit bit field value
        regardless of it being passed as an int or unsigned long on
        various platforms.  See the termios.TIOCSWINSZ constant across
-       platforms for an example of thise.
+       platforms for an example of this.
 
        If any of the 64bit platforms ever decide to use more than 32bits
        in their unsigned long ioctl codes this will break and need
@@ -222,11 +223,12 @@
 }
 
 PyDoc_STRVAR(ioctl_doc,
-"ioctl(fd, opt[, arg[, mutate_flag]])\n\
+"ioctl(fd, op[, arg[, mutate_flag]])\n\
 \n\
-Perform the requested operation on file descriptor fd.  The operation is\n\
-defined by opt and is operating system dependent.  Typically these codes are\n\
-retrieved from the fcntl or termios library modules.\n\
+Perform the operation op on file descriptor fd.  The values used for op\n\
+are operating system dependent, and are available as constants in the\n\
+fcntl or termios library modules, using the same names as used in the\n\
+relevant C header files.\n\
 \n\
 The argument arg is optional, and defaults to 0; it may be an int or a\n\
 buffer containing character data (most likely a string or an array). \n\
diff --git a/Modules/md5module.c b/Modules/md5module.c
index bb91b6c..5cb3d36 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -572,8 +572,17 @@
 PyMODINIT_FUNC
 PyInit__md5(void)
 {
+    PyObject *m;
+
     Py_TYPE(&MD5type) = &PyType_Type;
     if (PyType_Ready(&MD5type) < 0)
         return NULL;
-    return PyModule_Create(&_md5module);
+
+    m = PyModule_Create(&_md5module);
+    if (m == NULL)
+        return NULL;
+
+    Py_INCREF((PyObject *)&MD5type);
+    PyModule_AddObject(m, "MD5Type", (PyObject *)&MD5type);
+    return m;
 }
diff --git a/Modules/overlapped.c b/Modules/overlapped.c
new file mode 100644
index 0000000..625c76e
--- /dev/null
+++ b/Modules/overlapped.c
@@ -0,0 +1,1378 @@
+/*
+ * Support for overlapped IO
+ *
+ * Some code borrowed from Modules/_winapi.c of CPython
+ */
+
+/* XXX check overflow and DWORD <-> Py_ssize_t conversions
+   Check itemsize */
+
+#include "Python.h"
+#include "structmember.h"
+
+#define WINDOWS_LEAN_AND_MEAN
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <mswsock.h>
+
+#if defined(MS_WIN32) && !defined(MS_WIN64)
+#  define F_POINTER "k"
+#  define T_POINTER T_ULONG
+#else
+#  define F_POINTER "K"
+#  define T_POINTER T_ULONGLONG
+#endif
+
+#define F_HANDLE F_POINTER
+#define F_ULONG_PTR F_POINTER
+#define F_DWORD "k"
+#define F_BOOL "i"
+#define F_UINT "I"
+
+#define T_HANDLE T_POINTER
+
+enum {TYPE_NONE, TYPE_NOT_STARTED, TYPE_READ, TYPE_WRITE, TYPE_ACCEPT,
+      TYPE_CONNECT, TYPE_DISCONNECT, TYPE_CONNECT_NAMED_PIPE,
+      TYPE_WAIT_NAMED_PIPE_AND_CONNECT};
+
+typedef struct {
+    PyObject_HEAD
+    OVERLAPPED overlapped;
+    /* For convenience, we store the file handle too */
+    HANDLE handle;
+    /* Error returned by last method call */
+    DWORD error;
+    /* Type of operation */
+    DWORD type;
+    union {
+        /* Buffer used for reading (optional) */
+        PyObject *read_buffer;
+        /* Buffer used for writing (optional) */
+        Py_buffer write_buffer;
+    };
+} OverlappedObject;
+
+typedef struct {
+    OVERLAPPED *Overlapped;
+    HANDLE IocpHandle;
+    char Address[1];
+} WaitNamedPipeAndConnectContext;
+
+/*
+ * Map Windows error codes to subclasses of OSError
+ */
+
+static PyObject *
+SetFromWindowsErr(DWORD err)
+{
+    PyObject *exception_type;
+
+    if (err == 0)
+        err = GetLastError();
+    switch (err) {
+        case ERROR_CONNECTION_REFUSED:
+            exception_type = PyExc_ConnectionRefusedError;
+            break;
+        case ERROR_CONNECTION_ABORTED:
+            exception_type = PyExc_ConnectionAbortedError;
+            break;
+        default:
+            exception_type = PyExc_OSError;
+    }
+    return PyErr_SetExcFromWindowsErr(exception_type, err);
+}
+
+/*
+ * Some functions should be loaded at runtime
+ */
+
+static LPFN_ACCEPTEX Py_AcceptEx = NULL;
+static LPFN_CONNECTEX Py_ConnectEx = NULL;
+static LPFN_DISCONNECTEX Py_DisconnectEx = NULL;
+static BOOL (CALLBACK *Py_CancelIoEx)(HANDLE, LPOVERLAPPED) = NULL;
+
+#define GET_WSA_POINTER(s, x)                                           \
+    (SOCKET_ERROR != WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER,    \
+                              &Guid##x, sizeof(Guid##x), &Py_##x,       \
+                              sizeof(Py_##x), &dwBytes, NULL, NULL))
+
+static int
+initialize_function_pointers(void)
+{
+    GUID GuidAcceptEx = WSAID_ACCEPTEX;
+    GUID GuidConnectEx = WSAID_CONNECTEX;
+    GUID GuidDisconnectEx = WSAID_DISCONNECTEX;
+    HINSTANCE hKernel32;
+    SOCKET s;
+    DWORD dwBytes;
+
+    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+    if (s == INVALID_SOCKET) {
+        SetFromWindowsErr(WSAGetLastError());
+        return -1;
+    }
+
+    if (!GET_WSA_POINTER(s, AcceptEx) ||
+        !GET_WSA_POINTER(s, ConnectEx) ||
+        !GET_WSA_POINTER(s, DisconnectEx))
+    {
+        closesocket(s);
+        SetFromWindowsErr(WSAGetLastError());
+        return -1;
+    }
+
+    closesocket(s);
+
+    /* On WinXP we will have Py_CancelIoEx == NULL */
+    hKernel32 = GetModuleHandle("KERNEL32");
+    *(FARPROC *)&Py_CancelIoEx = GetProcAddress(hKernel32, "CancelIoEx");
+    return 0;
+}
+
+/*
+ * Completion port stuff
+ */
+
+PyDoc_STRVAR(
+    CreateIoCompletionPort_doc,
+    "CreateIoCompletionPort(handle, port, key, concurrency) -> port\n\n"
+    "Create a completion port or register a handle with a port.");
+
+static PyObject *
+overlapped_CreateIoCompletionPort(PyObject *self, PyObject *args)
+{
+    HANDLE FileHandle;
+    HANDLE ExistingCompletionPort;
+    ULONG_PTR CompletionKey;
+    DWORD NumberOfConcurrentThreads;
+    HANDLE ret;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE F_HANDLE F_ULONG_PTR F_DWORD,
+                          &FileHandle, &ExistingCompletionPort, &CompletionKey,
+                          &NumberOfConcurrentThreads))
+        return NULL;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = CreateIoCompletionPort(FileHandle, ExistingCompletionPort,
+                                 CompletionKey, NumberOfConcurrentThreads);
+    Py_END_ALLOW_THREADS
+
+    if (ret == NULL)
+        return SetFromWindowsErr(0);
+    return Py_BuildValue(F_HANDLE, ret);
+}
+
+PyDoc_STRVAR(
+    GetQueuedCompletionStatus_doc,
+    "GetQueuedCompletionStatus(port, msecs) -> (err, bytes, key, address)\n\n"
+    "Get a message from completion port.  Wait for up to msecs milliseconds.");
+
+static PyObject *
+overlapped_GetQueuedCompletionStatus(PyObject *self, PyObject *args)
+{
+    HANDLE CompletionPort = NULL;
+    DWORD NumberOfBytes = 0;
+    ULONG_PTR CompletionKey = 0;
+    OVERLAPPED *Overlapped = NULL;
+    DWORD Milliseconds;
+    DWORD err;
+    BOOL ret;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE F_DWORD,
+                          &CompletionPort, &Milliseconds))
+        return NULL;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = GetQueuedCompletionStatus(CompletionPort, &NumberOfBytes,
+                                    &CompletionKey, &Overlapped, Milliseconds);
+    Py_END_ALLOW_THREADS
+
+    err = ret ? ERROR_SUCCESS : GetLastError();
+    if (Overlapped == NULL) {
+        if (err == WAIT_TIMEOUT)
+            Py_RETURN_NONE;
+        else
+            return SetFromWindowsErr(err);
+    }
+    return Py_BuildValue(F_DWORD F_DWORD F_ULONG_PTR F_POINTER,
+                         err, NumberOfBytes, CompletionKey, Overlapped);
+}
+
+PyDoc_STRVAR(
+    PostQueuedCompletionStatus_doc,
+    "PostQueuedCompletionStatus(port, bytes, key, address) -> None\n\n"
+    "Post a message to completion port.");
+
+static PyObject *
+overlapped_PostQueuedCompletionStatus(PyObject *self, PyObject *args)
+{
+    HANDLE CompletionPort;
+    DWORD NumberOfBytes;
+    ULONG_PTR CompletionKey;
+    OVERLAPPED *Overlapped;
+    BOOL ret;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE F_DWORD F_ULONG_PTR F_POINTER,
+                          &CompletionPort, &NumberOfBytes, &CompletionKey,
+                          &Overlapped))
+        return NULL;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = PostQueuedCompletionStatus(CompletionPort, NumberOfBytes,
+                                     CompletionKey, Overlapped);
+    Py_END_ALLOW_THREADS
+
+    if (!ret)
+        return SetFromWindowsErr(0);
+    Py_RETURN_NONE;
+}
+
+/*
+ * Wait for a handle
+ */
+
+struct PostCallbackData {
+    HANDLE CompletionPort;
+    LPOVERLAPPED Overlapped;
+};
+
+static VOID CALLBACK
+PostToQueueCallback(PVOID lpParameter, BOOL TimerOrWaitFired)
+{
+    struct PostCallbackData *p = (struct PostCallbackData*) lpParameter;
+
+    PostQueuedCompletionStatus(p->CompletionPort, TimerOrWaitFired,
+                               0, p->Overlapped);
+    /* ignore possible error! */
+    PyMem_Free(p);
+}
+
+PyDoc_STRVAR(
+    RegisterWaitWithQueue_doc,
+    "RegisterWaitWithQueue(Object, CompletionPort, Overlapped, Timeout)\n"
+    "    -> WaitHandle\n\n"
+    "Register wait for Object; when complete CompletionPort is notified.\n");
+
+static PyObject *
+overlapped_RegisterWaitWithQueue(PyObject *self, PyObject *args)
+{
+    HANDLE NewWaitObject;
+    HANDLE Object;
+    ULONG Milliseconds;
+    struct PostCallbackData data, *pdata;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE F_HANDLE F_POINTER F_DWORD,
+                          &Object,
+                          &data.CompletionPort,
+                          &data.Overlapped,
+                          &Milliseconds))
+        return NULL;
+
+    pdata = PyMem_Malloc(sizeof(struct PostCallbackData));
+    if (pdata == NULL)
+        return SetFromWindowsErr(0);
+
+    *pdata = data;
+
+    if (!RegisterWaitForSingleObject(
+            &NewWaitObject, Object, (WAITORTIMERCALLBACK)PostToQueueCallback,
+            pdata, Milliseconds,
+            WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE))
+    {
+        PyMem_Free(pdata);
+        return SetFromWindowsErr(0);
+    }
+
+    return Py_BuildValue(F_HANDLE, NewWaitObject);
+}
+
+PyDoc_STRVAR(
+    UnregisterWait_doc,
+    "UnregisterWait(WaitHandle) -> None\n\n"
+    "Unregister wait handle.\n");
+
+static PyObject *
+overlapped_UnregisterWait(PyObject *self, PyObject *args)
+{
+    HANDLE WaitHandle;
+    BOOL ret;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE, &WaitHandle))
+        return NULL;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = UnregisterWait(WaitHandle);
+    Py_END_ALLOW_THREADS
+
+    if (!ret)
+        return SetFromWindowsErr(0);
+    Py_RETURN_NONE;
+}
+
+/*
+ * Event functions -- currently only used by tests
+ */
+
+PyDoc_STRVAR(
+    CreateEvent_doc,
+    "CreateEvent(EventAttributes, ManualReset, InitialState, Name)"
+    " -> Handle\n\n"
+    "Create an event.  EventAttributes must be None.\n");
+
+static PyObject *
+overlapped_CreateEvent(PyObject *self, PyObject *args)
+{
+    PyObject *EventAttributes;
+    BOOL ManualReset;
+    BOOL InitialState;
+    Py_UNICODE *Name;
+    HANDLE Event;
+
+    if (!PyArg_ParseTuple(args, "O" F_BOOL F_BOOL "Z",
+                          &EventAttributes, &ManualReset,
+                          &InitialState, &Name))
+        return NULL;
+
+    if (EventAttributes != Py_None) {
+        PyErr_SetString(PyExc_ValueError, "EventAttributes must be None");
+        return NULL;
+    }
+
+    Py_BEGIN_ALLOW_THREADS
+    Event = CreateEventW(NULL, ManualReset, InitialState, Name);
+    Py_END_ALLOW_THREADS
+
+    if (Event == NULL)
+        return SetFromWindowsErr(0);
+    return Py_BuildValue(F_HANDLE, Event);
+}
+
+PyDoc_STRVAR(
+    SetEvent_doc,
+    "SetEvent(Handle) -> None\n\n"
+    "Set event.\n");
+
+static PyObject *
+overlapped_SetEvent(PyObject *self, PyObject *args)
+{
+    HANDLE Handle;
+    BOOL ret;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE, &Handle))
+        return NULL;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = SetEvent(Handle);
+    Py_END_ALLOW_THREADS
+
+    if (!ret)
+        return SetFromWindowsErr(0);
+    Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(
+    ResetEvent_doc,
+    "ResetEvent(Handle) -> None\n\n"
+    "Reset event.\n");
+
+static PyObject *
+overlapped_ResetEvent(PyObject *self, PyObject *args)
+{
+    HANDLE Handle;
+    BOOL ret;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE, &Handle))
+        return NULL;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = ResetEvent(Handle);
+    Py_END_ALLOW_THREADS
+
+    if (!ret)
+        return SetFromWindowsErr(0);
+    Py_RETURN_NONE;
+}
+
+/*
+ * Bind socket handle to local port without doing slow getaddrinfo()
+ */
+
+PyDoc_STRVAR(
+    BindLocal_doc,
+    "BindLocal(handle, family) -> None\n\n"
+    "Bind a socket handle to an arbitrary local port.\n"
+    "family should AF_INET or AF_INET6.\n");
+
+static PyObject *
+overlapped_BindLocal(PyObject *self, PyObject *args)
+{
+    SOCKET Socket;
+    int Family;
+    BOOL ret;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE "i", &Socket, &Family))
+        return NULL;
+
+    if (Family == AF_INET) {
+        struct sockaddr_in addr;
+        memset(&addr, 0, sizeof(addr));
+        addr.sin_family = AF_INET;
+        addr.sin_port = 0;
+        addr.sin_addr.S_un.S_addr = INADDR_ANY;
+        ret = bind(Socket, (SOCKADDR*)&addr, sizeof(addr)) != SOCKET_ERROR;
+    } else if (Family == AF_INET6) {
+        struct sockaddr_in6 addr;
+        memset(&addr, 0, sizeof(addr));
+        addr.sin6_family = AF_INET6;
+        addr.sin6_port = 0;
+        addr.sin6_addr = in6addr_any;
+        ret = bind(Socket, (SOCKADDR*)&addr, sizeof(addr)) != SOCKET_ERROR;
+    } else {
+        PyErr_SetString(PyExc_ValueError, "expected tuple of length 2 or 4");
+        return NULL;
+    }
+
+    if (!ret)
+        return SetFromWindowsErr(WSAGetLastError());
+    Py_RETURN_NONE;
+}
+
+/*
+ * Windows equivalent of os.strerror() -- compare _ctypes/callproc.c
+ */
+
+PyDoc_STRVAR(
+    FormatMessage_doc,
+    "FormatMessage(error_code) -> error_message\n\n"
+    "Return error message for an error code.");
+
+static PyObject *
+overlapped_FormatMessage(PyObject *ignore, PyObject *args)
+{
+    DWORD code, n;
+    WCHAR *lpMsgBuf;
+    PyObject *res;
+
+    if (!PyArg_ParseTuple(args, F_DWORD, &code))
+        return NULL;
+
+    n = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                       FORMAT_MESSAGE_FROM_SYSTEM,
+                       NULL,
+                       code,
+                       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                       (LPWSTR) &lpMsgBuf,
+                       0,
+                       NULL);
+    if (n) {
+        while (iswspace(lpMsgBuf[n-1]))
+            --n;
+        lpMsgBuf[n] = L'\0';
+        res = Py_BuildValue("u", lpMsgBuf);
+    } else {
+        res = PyUnicode_FromFormat("unknown error code %u", code);
+    }
+    LocalFree(lpMsgBuf);
+    return res;
+}
+
+
+/*
+ * Mark operation as completed - used when reading produces ERROR_BROKEN_PIPE
+ */
+
+static void
+mark_as_completed(OVERLAPPED *ov)
+{
+    ov->Internal = 0;
+    if (ov->hEvent != NULL)
+        SetEvent(ov->hEvent);
+}
+
+/*
+ * A Python object wrapping an OVERLAPPED structure and other useful data
+ * for overlapped I/O
+ */
+
+PyDoc_STRVAR(
+    Overlapped_doc,
+    "Overlapped object");
+
+static PyObject *
+Overlapped_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    OverlappedObject *self;
+    HANDLE event = INVALID_HANDLE_VALUE;
+    static char *kwlist[] = {"event", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|" F_HANDLE, kwlist, &event))
+        return NULL;
+
+    if (event == INVALID_HANDLE_VALUE) {
+        event = CreateEvent(NULL, TRUE, FALSE, NULL);
+        if (event == NULL)
+            return SetFromWindowsErr(0);
+    }
+
+    self = PyObject_New(OverlappedObject, type);
+    if (self == NULL) {
+        if (event != NULL)
+            CloseHandle(event);
+        return NULL;
+    }
+
+    self->handle = NULL;
+    self->error = 0;
+    self->type = TYPE_NONE;
+    self->read_buffer = NULL;
+    memset(&self->overlapped, 0, sizeof(OVERLAPPED));
+    memset(&self->write_buffer, 0, sizeof(Py_buffer));
+    if (event)
+        self->overlapped.hEvent = event;
+    return (PyObject *)self;
+}
+
+static void
+Overlapped_dealloc(OverlappedObject *self)
+{
+    DWORD bytes;
+    DWORD olderr = GetLastError();
+    BOOL wait = FALSE;
+    BOOL ret;
+
+    if (!HasOverlappedIoCompleted(&self->overlapped) &&
+        self->type != TYPE_NOT_STARTED)
+    {
+        if (Py_CancelIoEx && Py_CancelIoEx(self->handle, &self->overlapped))
+            wait = TRUE;
+
+        Py_BEGIN_ALLOW_THREADS
+        ret = GetOverlappedResult(self->handle, &self->overlapped,
+                                  &bytes, wait);
+        Py_END_ALLOW_THREADS
+
+        switch (ret ? ERROR_SUCCESS : GetLastError()) {
+            case ERROR_SUCCESS:
+            case ERROR_NOT_FOUND:
+            case ERROR_OPERATION_ABORTED:
+                break;
+            default:
+                PyErr_Format(
+                    PyExc_RuntimeError,
+                    "%R still has pending operation at "
+                    "deallocation, the process may crash", self);
+                PyErr_WriteUnraisable(NULL);
+        }
+    }
+
+    if (self->overlapped.hEvent != NULL)
+        CloseHandle(self->overlapped.hEvent);
+
+    if (self->write_buffer.obj)
+        PyBuffer_Release(&self->write_buffer);
+
+    switch (self->type) {
+        case TYPE_READ:
+        case TYPE_ACCEPT:
+            Py_CLEAR(self->read_buffer);
+    }
+    PyObject_Del(self);
+    SetLastError(olderr);
+}
+
+PyDoc_STRVAR(
+    Overlapped_cancel_doc,
+    "cancel() -> None\n\n"
+    "Cancel overlapped operation");
+
+static PyObject *
+Overlapped_cancel(OverlappedObject *self)
+{
+    BOOL ret = TRUE;
+
+    if (self->type == TYPE_NOT_STARTED
+        || self->type == TYPE_WAIT_NAMED_PIPE_AND_CONNECT)
+        Py_RETURN_NONE;
+
+    if (!HasOverlappedIoCompleted(&self->overlapped)) {
+        Py_BEGIN_ALLOW_THREADS
+        if (Py_CancelIoEx)
+            ret = Py_CancelIoEx(self->handle, &self->overlapped);
+        else
+            ret = CancelIo(self->handle);
+        Py_END_ALLOW_THREADS
+    }
+
+    /* CancelIoEx returns ERROR_NOT_FOUND if the I/O completed in-between */
+    if (!ret && GetLastError() != ERROR_NOT_FOUND)
+        return SetFromWindowsErr(0);
+    Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(
+    Overlapped_getresult_doc,
+    "getresult(wait=False) -> result\n\n"
+    "Retrieve result of operation.  If wait is true then it blocks\n"
+    "until the operation is finished.  If wait is false and the\n"
+    "operation is still pending then an error is raised.");
+
+static PyObject *
+Overlapped_getresult(OverlappedObject *self, PyObject *args)
+{
+    BOOL wait = FALSE;
+    DWORD transferred = 0;
+    BOOL ret;
+    DWORD err;
+
+    if (!PyArg_ParseTuple(args, "|" F_BOOL, &wait))
+        return NULL;
+
+    if (self->type == TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation not yet attempted");
+        return NULL;
+    }
+
+    if (self->type == TYPE_NOT_STARTED) {
+        PyErr_SetString(PyExc_ValueError, "operation failed to start");
+        return NULL;
+    }
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = GetOverlappedResult(self->handle, &self->overlapped, &transferred,
+                              wait);
+    Py_END_ALLOW_THREADS
+
+    self->error = err = ret ? ERROR_SUCCESS : GetLastError();
+    switch (err) {
+        case ERROR_SUCCESS:
+        case ERROR_MORE_DATA:
+            break;
+        case ERROR_BROKEN_PIPE:
+            if (self->read_buffer != NULL)
+                break;
+            /* fall through */
+        default:
+            return SetFromWindowsErr(err);
+    }
+
+    switch (self->type) {
+        case TYPE_READ:
+            assert(PyBytes_CheckExact(self->read_buffer));
+            if (transferred != PyBytes_GET_SIZE(self->read_buffer) &&
+                _PyBytes_Resize(&self->read_buffer, transferred))
+                return NULL;
+            Py_INCREF(self->read_buffer);
+            return self->read_buffer;
+        default:
+            return PyLong_FromUnsignedLong((unsigned long) transferred);
+    }
+}
+
+PyDoc_STRVAR(
+    Overlapped_ReadFile_doc,
+    "ReadFile(handle, size) -> Overlapped[message]\n\n"
+    "Start overlapped read");
+
+static PyObject *
+Overlapped_ReadFile(OverlappedObject *self, PyObject *args)
+{
+    HANDLE handle;
+    DWORD size;
+    DWORD nread;
+    PyObject *buf;
+    BOOL ret;
+    DWORD err;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE F_DWORD, &handle, &size))
+        return NULL;
+
+    if (self->type != TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation already attempted");
+        return NULL;
+    }
+
+#if SIZEOF_SIZE_T <= SIZEOF_LONG
+    size = Py_MIN(size, (DWORD)PY_SSIZE_T_MAX);
+#endif
+    buf = PyBytes_FromStringAndSize(NULL, Py_MAX(size, 1));
+    if (buf == NULL)
+        return NULL;
+
+    self->type = TYPE_READ;
+    self->handle = handle;
+    self->read_buffer = buf;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = ReadFile(handle, PyBytes_AS_STRING(buf), size, &nread,
+                   &self->overlapped);
+    Py_END_ALLOW_THREADS
+
+    self->error = err = ret ? ERROR_SUCCESS : GetLastError();
+    switch (err) {
+        case ERROR_BROKEN_PIPE:
+            mark_as_completed(&self->overlapped);
+            Py_RETURN_NONE;
+        case ERROR_SUCCESS:
+        case ERROR_MORE_DATA:
+        case ERROR_IO_PENDING:
+            Py_RETURN_NONE;
+        default:
+            self->type = TYPE_NOT_STARTED;
+            return SetFromWindowsErr(err);
+    }
+}
+
+PyDoc_STRVAR(
+    Overlapped_WSARecv_doc,
+    "RecvFile(handle, size, flags) -> Overlapped[message]\n\n"
+    "Start overlapped receive");
+
+static PyObject *
+Overlapped_WSARecv(OverlappedObject *self, PyObject *args)
+{
+    HANDLE handle;
+    DWORD size;
+    DWORD flags = 0;
+    DWORD nread;
+    PyObject *buf;
+    WSABUF wsabuf;
+    int ret;
+    DWORD err;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE F_DWORD "|" F_DWORD,
+                          &handle, &size, &flags))
+        return NULL;
+
+    if (self->type != TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation already attempted");
+        return NULL;
+    }
+
+#if SIZEOF_SIZE_T <= SIZEOF_LONG
+    size = Py_MIN(size, (DWORD)PY_SSIZE_T_MAX);
+#endif
+    buf = PyBytes_FromStringAndSize(NULL, Py_MAX(size, 1));
+    if (buf == NULL)
+        return NULL;
+
+    self->type = TYPE_READ;
+    self->handle = handle;
+    self->read_buffer = buf;
+    wsabuf.len = size;
+    wsabuf.buf = PyBytes_AS_STRING(buf);
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = WSARecv((SOCKET)handle, &wsabuf, 1, &nread, &flags,
+                  &self->overlapped, NULL);
+    Py_END_ALLOW_THREADS
+
+    self->error = err = (ret < 0 ? WSAGetLastError() : ERROR_SUCCESS);
+    switch (err) {
+        case ERROR_BROKEN_PIPE:
+            mark_as_completed(&self->overlapped);
+            Py_RETURN_NONE;
+        case ERROR_SUCCESS:
+        case ERROR_MORE_DATA:
+        case ERROR_IO_PENDING:
+            Py_RETURN_NONE;
+        default:
+            self->type = TYPE_NOT_STARTED;
+            return SetFromWindowsErr(err);
+    }
+}
+
+PyDoc_STRVAR(
+    Overlapped_WriteFile_doc,
+    "WriteFile(handle, buf) -> Overlapped[bytes_transferred]\n\n"
+    "Start overlapped write");
+
+static PyObject *
+Overlapped_WriteFile(OverlappedObject *self, PyObject *args)
+{
+    HANDLE handle;
+    PyObject *bufobj;
+    DWORD written;
+    BOOL ret;
+    DWORD err;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE "O", &handle, &bufobj))
+        return NULL;
+
+    if (self->type != TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation already attempted");
+        return NULL;
+    }
+
+    if (!PyArg_Parse(bufobj, "y*", &self->write_buffer))
+        return NULL;
+
+#if SIZEOF_SIZE_T > SIZEOF_LONG
+    if (self->write_buffer.len > (Py_ssize_t)ULONG_MAX) {
+        PyBuffer_Release(&self->write_buffer);
+        PyErr_SetString(PyExc_ValueError, "buffer to large");
+        return NULL;
+    }
+#endif
+
+    self->type = TYPE_WRITE;
+    self->handle = handle;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = WriteFile(handle, self->write_buffer.buf,
+                    (DWORD)self->write_buffer.len,
+                    &written, &self->overlapped);
+    Py_END_ALLOW_THREADS
+
+    self->error = err = ret ? ERROR_SUCCESS : GetLastError();
+    switch (err) {
+        case ERROR_SUCCESS:
+        case ERROR_IO_PENDING:
+            Py_RETURN_NONE;
+        default:
+            self->type = TYPE_NOT_STARTED;
+            return SetFromWindowsErr(err);
+    }
+}
+
+PyDoc_STRVAR(
+    Overlapped_WSASend_doc,
+    "WSASend(handle, buf, flags) -> Overlapped[bytes_transferred]\n\n"
+    "Start overlapped send");
+
+static PyObject *
+Overlapped_WSASend(OverlappedObject *self, PyObject *args)
+{
+    HANDLE handle;
+    PyObject *bufobj;
+    DWORD flags;
+    DWORD written;
+    WSABUF wsabuf;
+    int ret;
+    DWORD err;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE "O" F_DWORD,
+                          &handle, &bufobj, &flags))
+        return NULL;
+
+    if (self->type != TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation already attempted");
+        return NULL;
+    }
+
+    if (!PyArg_Parse(bufobj, "y*", &self->write_buffer))
+        return NULL;
+
+#if SIZEOF_SIZE_T > SIZEOF_LONG
+    if (self->write_buffer.len > (Py_ssize_t)ULONG_MAX) {
+        PyBuffer_Release(&self->write_buffer);
+        PyErr_SetString(PyExc_ValueError, "buffer to large");
+        return NULL;
+    }
+#endif
+
+    self->type = TYPE_WRITE;
+    self->handle = handle;
+    wsabuf.len = (DWORD)self->write_buffer.len;
+    wsabuf.buf = self->write_buffer.buf;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = WSASend((SOCKET)handle, &wsabuf, 1, &written, flags,
+                  &self->overlapped, NULL);
+    Py_END_ALLOW_THREADS
+
+    self->error = err = (ret < 0 ? WSAGetLastError() : ERROR_SUCCESS);
+    switch (err) {
+        case ERROR_SUCCESS:
+        case ERROR_IO_PENDING:
+            Py_RETURN_NONE;
+        default:
+            self->type = TYPE_NOT_STARTED;
+            return SetFromWindowsErr(err);
+    }
+}
+
+PyDoc_STRVAR(
+    Overlapped_AcceptEx_doc,
+    "AcceptEx(listen_handle, accept_handle) -> Overlapped[address_as_bytes]\n\n"
+    "Start overlapped wait for client to connect");
+
+static PyObject *
+Overlapped_AcceptEx(OverlappedObject *self, PyObject *args)
+{
+    SOCKET ListenSocket;
+    SOCKET AcceptSocket;
+    DWORD BytesReceived;
+    DWORD size;
+    PyObject *buf;
+    BOOL ret;
+    DWORD err;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE F_HANDLE,
+                          &ListenSocket, &AcceptSocket))
+        return NULL;
+
+    if (self->type != TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation already attempted");
+        return NULL;
+    }
+
+    size = sizeof(struct sockaddr_in6) + 16;
+    buf = PyBytes_FromStringAndSize(NULL, size*2);
+    if (!buf)
+        return NULL;
+
+    self->type = TYPE_ACCEPT;
+    self->handle = (HANDLE)ListenSocket;
+    self->read_buffer = buf;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = Py_AcceptEx(ListenSocket, AcceptSocket, PyBytes_AS_STRING(buf),
+                      0, size, size, &BytesReceived, &self->overlapped);
+    Py_END_ALLOW_THREADS
+
+    self->error = err = ret ? ERROR_SUCCESS : WSAGetLastError();
+    switch (err) {
+        case ERROR_SUCCESS:
+        case ERROR_IO_PENDING:
+            Py_RETURN_NONE;
+        default:
+            self->type = TYPE_NOT_STARTED;
+            return SetFromWindowsErr(err);
+    }
+}
+
+
+static int
+parse_address(PyObject *obj, SOCKADDR *Address, int Length)
+{
+    char *Host;
+    unsigned short Port;
+    unsigned long FlowInfo;
+    unsigned long ScopeId;
+
+    memset(Address, 0, Length);
+
+    if (PyArg_ParseTuple(obj, "sH", &Host, &Port))
+    {
+        Address->sa_family = AF_INET;
+        if (WSAStringToAddressA(Host, AF_INET, NULL, Address, &Length) < 0) {
+            SetFromWindowsErr(WSAGetLastError());
+            return -1;
+        }
+        ((SOCKADDR_IN*)Address)->sin_port = htons(Port);
+        return Length;
+    }
+    else if (PyArg_ParseTuple(obj, "sHkk", &Host, &Port, &FlowInfo, &ScopeId))
+    {
+        PyErr_Clear();
+        Address->sa_family = AF_INET6;
+        if (WSAStringToAddressA(Host, AF_INET6, NULL, Address, &Length) < 0) {
+            SetFromWindowsErr(WSAGetLastError());
+            return -1;
+        }
+        ((SOCKADDR_IN6*)Address)->sin6_port = htons(Port);
+        ((SOCKADDR_IN6*)Address)->sin6_flowinfo = FlowInfo;
+        ((SOCKADDR_IN6*)Address)->sin6_scope_id = ScopeId;
+        return Length;
+    }
+
+    return -1;
+}
+
+
+PyDoc_STRVAR(
+    Overlapped_ConnectEx_doc,
+    "ConnectEx(client_handle, address_as_bytes) -> Overlapped[None]\n\n"
+    "Start overlapped connect.  client_handle should be unbound.");
+
+static PyObject *
+Overlapped_ConnectEx(OverlappedObject *self, PyObject *args)
+{
+    SOCKET ConnectSocket;
+    PyObject *AddressObj;
+    char AddressBuf[sizeof(struct sockaddr_in6)];
+    SOCKADDR *Address = (SOCKADDR*)AddressBuf;
+    int Length;
+    BOOL ret;
+    DWORD err;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE "O", &ConnectSocket, &AddressObj))
+        return NULL;
+
+    if (self->type != TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation already attempted");
+        return NULL;
+    }
+
+    Length = sizeof(AddressBuf);
+    Length = parse_address(AddressObj, Address, Length);
+    if (Length < 0)
+        return NULL;
+
+    self->type = TYPE_CONNECT;
+    self->handle = (HANDLE)ConnectSocket;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = Py_ConnectEx(ConnectSocket, Address, Length,
+                       NULL, 0, NULL, &self->overlapped);
+    Py_END_ALLOW_THREADS
+
+    self->error = err = ret ? ERROR_SUCCESS : WSAGetLastError();
+    switch (err) {
+        case ERROR_SUCCESS:
+        case ERROR_IO_PENDING:
+            Py_RETURN_NONE;
+        default:
+            self->type = TYPE_NOT_STARTED;
+            return SetFromWindowsErr(err);
+    }
+}
+
+PyDoc_STRVAR(
+    Overlapped_DisconnectEx_doc,
+    "DisconnectEx(handle, flags) -> Overlapped[None]\n\n"
+    "Start overlapped connect.  client_handle should be unbound.");
+
+static PyObject *
+Overlapped_DisconnectEx(OverlappedObject *self, PyObject *args)
+{
+    SOCKET Socket;
+    DWORD flags;
+    BOOL ret;
+    DWORD err;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE F_DWORD, &Socket, &flags))
+        return NULL;
+
+    if (self->type != TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation already attempted");
+        return NULL;
+    }
+
+    self->type = TYPE_DISCONNECT;
+    self->handle = (HANDLE)Socket;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = Py_DisconnectEx(Socket, &self->overlapped, flags, 0);
+    Py_END_ALLOW_THREADS
+
+    self->error = err = ret ? ERROR_SUCCESS : WSAGetLastError();
+    switch (err) {
+        case ERROR_SUCCESS:
+        case ERROR_IO_PENDING:
+            Py_RETURN_NONE;
+        default:
+            self->type = TYPE_NOT_STARTED;
+            return SetFromWindowsErr(err);
+    }
+}
+
+PyDoc_STRVAR(
+    Overlapped_ConnectNamedPipe_doc,
+    "ConnectNamedPipe(handle) -> Overlapped[None]\n\n"
+    "Start overlapped wait for a client to connect.");
+
+static PyObject *
+Overlapped_ConnectNamedPipe(OverlappedObject *self, PyObject *args)
+{
+    HANDLE Pipe;
+    BOOL ret;
+    DWORD err;
+
+    if (!PyArg_ParseTuple(args, F_HANDLE, &Pipe))
+        return NULL;
+
+    if (self->type != TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation already attempted");
+        return NULL;
+    }
+
+    self->type = TYPE_CONNECT_NAMED_PIPE;
+    self->handle = Pipe;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = ConnectNamedPipe(Pipe, &self->overlapped);
+    Py_END_ALLOW_THREADS
+
+    self->error = err = ret ? ERROR_SUCCESS : GetLastError();
+    switch (err) {
+        case ERROR_PIPE_CONNECTED:
+            mark_as_completed(&self->overlapped);
+            Py_RETURN_NONE;
+        case ERROR_SUCCESS:
+        case ERROR_IO_PENDING:
+            Py_RETURN_NONE;
+        default:
+            self->type = TYPE_NOT_STARTED;
+            return SetFromWindowsErr(err);
+    }
+}
+
+/* Unfortunately there is no way to do an overlapped connect to a
+   pipe.  We instead use WaitNamedPipe() and CreateFile() in a thread
+   pool thread.  If a connection succeeds within a time limit (10
+   seconds) then PostQueuedCompletionStatus() is used to return the
+   pipe handle to the completion port. */
+
+static DWORD WINAPI
+WaitNamedPipeAndConnectInThread(WaitNamedPipeAndConnectContext *ctx)
+{
+    HANDLE PipeHandle = INVALID_HANDLE_VALUE;
+    DWORD Start = GetTickCount();
+    DWORD Deadline = Start + 10*1000;
+    DWORD Error = 0;
+    DWORD Timeout;
+    BOOL Success;
+
+    for ( ; ; ) {
+        Timeout = Deadline - GetTickCount();
+        if ((int)Timeout < 0)
+            break;
+        Success = WaitNamedPipe(ctx->Address, Timeout);
+        Error = Success ? ERROR_SUCCESS : GetLastError();
+        switch (Error) {
+            case ERROR_SUCCESS:
+                PipeHandle = CreateFile(ctx->Address,
+                                        GENERIC_READ | GENERIC_WRITE,
+                                        0, NULL, OPEN_EXISTING,
+                                        FILE_FLAG_OVERLAPPED, NULL);
+                if (PipeHandle == INVALID_HANDLE_VALUE)
+                    continue;
+                break;
+            case ERROR_SEM_TIMEOUT:
+                continue;
+        }
+        break;
+    }
+    if (!PostQueuedCompletionStatus(ctx->IocpHandle, Error,
+                                    (ULONG_PTR)PipeHandle, ctx->Overlapped))
+        CloseHandle(PipeHandle);
+    free(ctx);
+    return 0;
+}
+
+PyDoc_STRVAR(
+    Overlapped_WaitNamedPipeAndConnect_doc,
+    "WaitNamedPipeAndConnect(addr, iocp_handle) -> Overlapped[pipe_handle]\n\n"
+    "Start overlapped connection to address, notifying iocp_handle when\n"
+    "finished");
+
+static PyObject *
+Overlapped_WaitNamedPipeAndConnect(OverlappedObject *self, PyObject *args)
+{
+    char *Address;
+    Py_ssize_t AddressLength;
+    HANDLE IocpHandle;
+    OVERLAPPED Overlapped;
+    BOOL ret;
+    DWORD err;
+    WaitNamedPipeAndConnectContext *ctx;
+    Py_ssize_t ContextLength;
+
+    if (!PyArg_ParseTuple(args, "s#" F_HANDLE F_POINTER,
+                          &Address, &AddressLength, &IocpHandle, &Overlapped))
+        return NULL;
+
+    if (self->type != TYPE_NONE) {
+        PyErr_SetString(PyExc_ValueError, "operation already attempted");
+        return NULL;
+    }
+
+    ContextLength = (AddressLength +
+                     offsetof(WaitNamedPipeAndConnectContext, Address));
+    ctx = calloc(1, ContextLength + 1);
+    if (ctx == NULL)
+        return PyErr_NoMemory();
+    memcpy(ctx->Address, Address, AddressLength + 1);
+    ctx->Overlapped = &self->overlapped;
+    ctx->IocpHandle = IocpHandle;
+
+    self->type = TYPE_WAIT_NAMED_PIPE_AND_CONNECT;
+    self->handle = NULL;
+
+    Py_BEGIN_ALLOW_THREADS
+    ret = QueueUserWorkItem(WaitNamedPipeAndConnectInThread, ctx,
+                            WT_EXECUTELONGFUNCTION);
+    Py_END_ALLOW_THREADS
+
+    mark_as_completed(&self->overlapped);
+
+    self->error = err = ret ? ERROR_SUCCESS : GetLastError();
+    if (!ret)
+        return SetFromWindowsErr(err);
+    Py_RETURN_NONE;
+}
+
+static PyObject*
+Overlapped_getaddress(OverlappedObject *self)
+{
+    return PyLong_FromVoidPtr(&self->overlapped);
+}
+
+static PyObject*
+Overlapped_getpending(OverlappedObject *self)
+{
+    return PyBool_FromLong(!HasOverlappedIoCompleted(&self->overlapped) &&
+                           self->type != TYPE_NOT_STARTED);
+}
+
+static PyMethodDef Overlapped_methods[] = {
+    {"getresult", (PyCFunction) Overlapped_getresult,
+     METH_VARARGS, Overlapped_getresult_doc},
+    {"cancel", (PyCFunction) Overlapped_cancel,
+     METH_NOARGS, Overlapped_cancel_doc},
+    {"ReadFile", (PyCFunction) Overlapped_ReadFile,
+     METH_VARARGS, Overlapped_ReadFile_doc},
+    {"WSARecv", (PyCFunction) Overlapped_WSARecv,
+     METH_VARARGS, Overlapped_WSARecv_doc},
+    {"WriteFile", (PyCFunction) Overlapped_WriteFile,
+     METH_VARARGS, Overlapped_WriteFile_doc},
+    {"WSASend", (PyCFunction) Overlapped_WSASend,
+     METH_VARARGS, Overlapped_WSASend_doc},
+    {"AcceptEx", (PyCFunction) Overlapped_AcceptEx,
+     METH_VARARGS, Overlapped_AcceptEx_doc},
+    {"ConnectEx", (PyCFunction) Overlapped_ConnectEx,
+     METH_VARARGS, Overlapped_ConnectEx_doc},
+    {"DisconnectEx", (PyCFunction) Overlapped_DisconnectEx,
+     METH_VARARGS, Overlapped_DisconnectEx_doc},
+    {"ConnectNamedPipe", (PyCFunction) Overlapped_ConnectNamedPipe,
+     METH_VARARGS, Overlapped_ConnectNamedPipe_doc},
+    {"WaitNamedPipeAndConnect",
+     (PyCFunction) Overlapped_WaitNamedPipeAndConnect,
+     METH_VARARGS, Overlapped_WaitNamedPipeAndConnect_doc},
+    {NULL}
+};
+
+static PyMemberDef Overlapped_members[] = {
+    {"error", T_ULONG,
+     offsetof(OverlappedObject, error),
+     READONLY, "Error from last operation"},
+    {"event", T_HANDLE,
+     offsetof(OverlappedObject, overlapped) + offsetof(OVERLAPPED, hEvent),
+     READONLY, "Overlapped event handle"},
+    {NULL}
+};
+
+static PyGetSetDef Overlapped_getsets[] = {
+    {"address", (getter)Overlapped_getaddress, NULL,
+     "Address of overlapped structure"},
+    {"pending", (getter)Overlapped_getpending, NULL,
+     "Whether the operation is pending"},
+    {NULL},
+};
+
+PyTypeObject OverlappedType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    /* tp_name           */ "_overlapped.Overlapped",
+    /* tp_basicsize      */ sizeof(OverlappedObject),
+    /* tp_itemsize       */ 0,
+    /* tp_dealloc        */ (destructor) Overlapped_dealloc,
+    /* tp_print          */ 0,
+    /* tp_getattr        */ 0,
+    /* tp_setattr        */ 0,
+    /* tp_reserved       */ 0,
+    /* tp_repr           */ 0,
+    /* tp_as_number      */ 0,
+    /* tp_as_sequence    */ 0,
+    /* tp_as_mapping     */ 0,
+    /* tp_hash           */ 0,
+    /* tp_call           */ 0,
+    /* tp_str            */ 0,
+    /* tp_getattro       */ 0,
+    /* tp_setattro       */ 0,
+    /* tp_as_buffer      */ 0,
+    /* tp_flags          */ Py_TPFLAGS_DEFAULT,
+    /* tp_doc            */ "OVERLAPPED structure wrapper",
+    /* tp_traverse       */ 0,
+    /* tp_clear          */ 0,
+    /* tp_richcompare    */ 0,
+    /* tp_weaklistoffset */ 0,
+    /* tp_iter           */ 0,
+    /* tp_iternext       */ 0,
+    /* tp_methods        */ Overlapped_methods,
+    /* tp_members        */ Overlapped_members,
+    /* tp_getset         */ Overlapped_getsets,
+    /* tp_base           */ 0,
+    /* tp_dict           */ 0,
+    /* tp_descr_get      */ 0,
+    /* tp_descr_set      */ 0,
+    /* tp_dictoffset     */ 0,
+    /* tp_init           */ 0,
+    /* tp_alloc          */ 0,
+    /* tp_new            */ Overlapped_new,
+};
+
+static PyMethodDef overlapped_functions[] = {
+    {"CreateIoCompletionPort", overlapped_CreateIoCompletionPort,
+     METH_VARARGS, CreateIoCompletionPort_doc},
+    {"GetQueuedCompletionStatus", overlapped_GetQueuedCompletionStatus,
+     METH_VARARGS, GetQueuedCompletionStatus_doc},
+    {"PostQueuedCompletionStatus", overlapped_PostQueuedCompletionStatus,
+     METH_VARARGS, PostQueuedCompletionStatus_doc},
+    {"FormatMessage", overlapped_FormatMessage,
+     METH_VARARGS, FormatMessage_doc},
+    {"BindLocal", overlapped_BindLocal,
+     METH_VARARGS, BindLocal_doc},
+    {"RegisterWaitWithQueue", overlapped_RegisterWaitWithQueue,
+     METH_VARARGS, RegisterWaitWithQueue_doc},
+    {"UnregisterWait", overlapped_UnregisterWait,
+     METH_VARARGS, UnregisterWait_doc},
+    {"CreateEvent", overlapped_CreateEvent,
+     METH_VARARGS, CreateEvent_doc},
+    {"SetEvent", overlapped_SetEvent,
+     METH_VARARGS, SetEvent_doc},
+    {"ResetEvent", overlapped_ResetEvent,
+     METH_VARARGS, ResetEvent_doc},
+    {NULL}
+};
+
+static struct PyModuleDef overlapped_module = {
+    PyModuleDef_HEAD_INIT,
+    "_overlapped",
+    NULL,
+    -1,
+    overlapped_functions,
+    NULL,
+    NULL,
+    NULL,
+    NULL
+};
+
+#define WINAPI_CONSTANT(fmt, con) \
+    PyDict_SetItemString(d, #con, Py_BuildValue(fmt, con))
+
+PyMODINIT_FUNC
+PyInit__overlapped(void)
+{
+    PyObject *m, *d;
+
+    /* Ensure WSAStartup() called before initializing function pointers */
+    m = PyImport_ImportModule("_socket");
+    if (!m)
+        return NULL;
+    Py_DECREF(m);
+
+    if (initialize_function_pointers() < 0)
+        return NULL;
+
+    if (PyType_Ready(&OverlappedType) < 0)
+        return NULL;
+
+    m = PyModule_Create(&overlapped_module);
+    if (PyModule_AddObject(m, "Overlapped", (PyObject *)&OverlappedType) < 0)
+        return NULL;
+
+    d = PyModule_GetDict(m);
+
+    WINAPI_CONSTANT(F_DWORD,  ERROR_IO_PENDING);
+    WINAPI_CONSTANT(F_DWORD,  ERROR_NETNAME_DELETED);
+    WINAPI_CONSTANT(F_DWORD,  ERROR_SEM_TIMEOUT);
+    WINAPI_CONSTANT(F_DWORD,  INFINITE);
+    WINAPI_CONSTANT(F_HANDLE, INVALID_HANDLE_VALUE);
+    WINAPI_CONSTANT(F_HANDLE, NULL);
+    WINAPI_CONSTANT(F_DWORD,  SO_UPDATE_ACCEPT_CONTEXT);
+    WINAPI_CONSTANT(F_DWORD,  SO_UPDATE_CONNECT_CONTEXT);
+    WINAPI_CONSTANT(F_DWORD,  TF_REUSE_SOCKET);
+
+    return m;
+}
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index df0d81b..f282f99 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -8,6 +8,8 @@
    of the compiler used.  Different compilers define their own feature
    test macro, e.g. '__BORLANDC__' or '_MSC_VER'. */
 
+
+
 #ifdef __APPLE__
    /*
     * Step 1 of support for weak-linking a number of symbols existing on
@@ -485,7 +487,7 @@
      * but this value would get interpreted as (uid_t)-1  by chown
      * and its siblings.   That's not what the user meant!  So we
      * throw an overflow exception instead.   (We already
-     * handled a real -1 with PyLong_AsLongAndOverflow() above.) 
+     * handled a real -1 with PyLong_AsLongAndOverflow() above.)
      */
     if (uid == (uid_t)-1)
         goto overflow;
@@ -592,7 +594,7 @@
      * but this value would get interpreted as (gid_t)-1  by chown
      * and its siblings.   That's not what the user meant!  So we
      * throw an overflow exception instead.   (We already
-     * handled a real -1 with PyLong_AsLongAndOverflow() above.) 
+     * handled a real -1 with PyLong_AsLongAndOverflow() above.)
      */
     if (gid == (gid_t)-1)
         goto overflow;
@@ -712,7 +714,7 @@
  *   path.function_name
  *     If non-NULL, path_converter will use that as the name
  *     of the function in error messages.
- *     (If path.argument_name is NULL it omits the function name.)
+ *     (If path.function_name is NULL it omits the function name.)
  *   path.argument_name
  *     If non-NULL, path_converter will use that as the name
  *     of the parameter in error messages.
@@ -776,6 +778,9 @@
     PyObject *cleanup;
 } path_t;
 
+#define PATH_T_INITIALIZE(function_name, nullable, allow_fd) \
+    {function_name, NULL, nullable, allow_fd, NULL, NULL, 0, 0, NULL, NULL}
+
 static void
 path_cleanup(path_t *path) {
     if (path->cleanup) {
@@ -1313,6 +1318,7 @@
 #endif
 }
 
+
 /* POSIX generic methods */
 
 static PyObject *
@@ -2347,48 +2353,145 @@
     return _pystat_fromstructstat(&st);
 }
 
-PyDoc_STRVAR(posix_stat__doc__,
-"stat(path, *, dir_fd=None, follow_symlinks=True) -> stat result\n\n\
-Perform a stat system call on the given path.\n\
-\n\
-path may be specified as either a string or as an open file descriptor.\n\
-\n\
-If dir_fd is not None, it should be a file descriptor open to a directory,\n\
-  and path should be relative; path will then be relative to that directory.\n\
-  dir_fd may not be supported on your platform; if it is unavailable, using\n\
-  it will raise a NotImplementedError.\n\
-If follow_symlinks is False, and the last element of the path is a symbolic\n\
-  link, stat will examine the symbolic link itself instead of the file the\n\
-  link points to.\n\
-It is an error to use dir_fd or follow_symlinks when specifying path as\n\
-  an open file descriptor.");
+#ifdef HAVE_FSTATAT
+    #define OS_STAT_DIR_FD_CONVERTER dir_fd_converter
+#else
+    #define OS_STAT_DIR_FD_CONVERTER dir_fd_unavailable
+#endif
+
+
+/*[python]
+
+class path_t_converter(CConverter):
+
+    type = "path_t"
+    impl_by_reference = True
+    parse_by_reference = True
+
+    converter = 'path_converter'
+
+    def converter_init(self, *, allow_fd=False, nullable=False):
+        def strify(value):
+            return str(int(bool(value)))
+
+        # right now path_t doesn't support default values.
+        # to support a default value, you'll need to override initialize().
+
+        assert self.default is unspecified
+
+        self.nullable = nullable
+        self.allow_fd = allow_fd
+
+        self.c_default = 'PATH_T_INITIALIZE("{}", {}, {})'.format(
+            self.function.name,
+            strify(nullable),
+            strify(allow_fd),
+            )
+
+    def cleanup(self):
+        return "path_cleanup(&" + self.name + ");\n"
+
+
+class dir_fd_converter(CConverter):
+    type = 'int'
+    converter = 'OS_STAT_DIR_FD_CONVERTER'
+
+    def converter_init(self):
+        if self.default in (unspecified, None):
+            self.c_default = 'DEFAULT_DIR_FD'
+
+
+[python]*/
+/*[python checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+
+/*[clinic]
+module os
+
+os.stat -> object(doc_default='stat_result')
+
+    path : path_t(allow_fd=True)
+        Path to be examined; can be string, bytes, or open-file-descriptor int.
+
+    *
+
+    dir_fd : dir_fd = None
+        If not None, it should be a file descriptor open to a directory,
+        and path should be a relative string; path will then be relative to
+        that directory.
+
+    follow_symlinks: bool = True
+        If False, and the last element of the path is a symbolic link,
+        stat will examine the symbolic link itself instead of the file
+        the link points to.
+
+Perform a stat system call on the given path.
+
+dir_fd and follow_symlinks may not be implemented
+  on your platform.  If they are unavailable, using them will raise a
+  NotImplementedError.
+
+It's an error to use dir_fd or follow_symlinks when specifying path as
+  an open file descriptor.
+
+[clinic]*/
+
+PyDoc_STRVAR(os_stat__doc__,
+"Perform a stat system call on the given path.\n"
+"\n"
+"os.stat(path, *, dir_fd=None, follow_symlinks=True) -> stat_result\n"
+"  path\n"
+"    Path to be examined; can be string, bytes, or open-file-descriptor int.\n"
+"  dir_fd\n"
+"    If not None, it should be a file descriptor open to a directory,\n"
+"    and path should be a relative string; path will then be relative to\n"
+"    that directory.\n"
+"  follow_symlinks\n"
+"    If False, and the last element of the path is a symbolic link,\n"
+"    stat will examine the symbolic link itself instead of the file\n"
+"    the link points to.\n"
+"\n"
+"dir_fd and follow_symlinks may not be implemented\n"
+"  on your platform.  If they are unavailable, using them will raise a\n"
+"  NotImplementedError.\n"
+"\n"
+"It\'s an error to use dir_fd or follow_symlinks when specifying path as\n"
+"  an open file descriptor.");
+
+#define OS_STAT_METHODDEF    \
+    {"stat", (PyCFunction)os_stat, METH_VARARGS|METH_KEYWORDS, os_stat__doc__},
 
 static PyObject *
-posix_stat(PyObject *self, PyObject *args, PyObject *kwargs)
+os_stat_impl(PyObject *self, path_t *path, int dir_fd, int follow_symlinks);
+
+static PyObject *
+os_stat(PyObject *self, PyObject *args, PyObject *kwargs)
 {
-    static char *keywords[] = {"path", "dir_fd", "follow_symlinks", NULL};
-    path_t path;
+    PyObject *return_value = NULL;
+    static char *_keywords[] = {"path", "dir_fd", "follow_symlinks", NULL};
+    path_t path = PATH_T_INITIALIZE("stat", 0, 1);
     int dir_fd = DEFAULT_DIR_FD;
     int follow_symlinks = 1;
-    PyObject *return_value;
 
-    memset(&path, 0, sizeof(path));
-    path.function_name = "stat";
-    path.allow_fd = 1;
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|$O&p:stat", keywords,
-        path_converter, &path,
-#ifdef HAVE_FSTATAT
-        dir_fd_converter, &dir_fd,
-#else
-        dir_fd_unavailable, &dir_fd,
-#endif
-        &follow_symlinks))
-        return NULL;
-    return_value = posix_do_stat("stat", &path, dir_fd, follow_symlinks);
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+        "O&|$O&p:stat", _keywords,
+        path_converter, &path, OS_STAT_DIR_FD_CONVERTER, &dir_fd, &follow_symlinks))
+        goto exit;
+    return_value = os_stat_impl(self, &path, dir_fd, follow_symlinks);
+
+exit:
+    /* Cleanup for path */
     path_cleanup(&path);
+
     return return_value;
 }
 
+static PyObject *
+os_stat_impl(PyObject *self, path_t *path, int dir_fd, int follow_symlinks)
+/*[clinic checksum: 9d9af08e8cfafd12f94e73ea3065eb3056f99515]*/
+{
+    return posix_do_stat("stat", path, dir_fd, follow_symlinks);
+}
+
 PyDoc_STRVAR(posix_lstat__doc__,
 "lstat(path, *, dir_fd=None) -> stat result\n\n\
 Like stat(), but do not follow symbolic links.\n\
@@ -2414,44 +2517,120 @@
 #endif
         ))
         return NULL;
-    return_value = posix_do_stat("stat", &path, dir_fd, follow_symlinks);
+    return_value = posix_do_stat("lstat", &path, dir_fd, follow_symlinks);
     path_cleanup(&path);
     return return_value;
 }
 
-PyDoc_STRVAR(posix_access__doc__,
-"access(path, mode, *, dir_fd=None, effective_ids=False,\
- follow_symlinks=True)\n\n\
-Use the real uid/gid to test for access to a path.  Returns True if granted,\n\
-False otherwise.\n\
-\n\
-If dir_fd is not None, it should be a file descriptor open to a directory,\n\
-  and path should be relative; path will then be relative to that directory.\n\
-If effective_ids is True, access will use the effective uid/gid instead of\n\
-  the real uid/gid.\n\
-If follow_symlinks is False, and the last element of the path is a symbolic\n\
-  link, access will examine the symbolic link itself instead of the file the\n\
-  link points to.\n\
-dir_fd, effective_ids, and follow_symlinks may not be implemented\n\
-  on your platform.  If they are unavailable, using them will raise a\n\
-  NotImplementedError.\n\
-\n\
-Note that most operations will use the effective uid/gid, therefore this\n\
-  routine can be used in a suid/sgid environment to test if the invoking user\n\
-  has the specified access to the path.\n\
-The mode argument can be F_OK to test existence, or the inclusive-OR\n\
-  of R_OK, W_OK, and X_OK.");
+
+#ifdef HAVE_FACCESSAT
+    #define OS_ACCESS_DIR_FD_CONVERTER dir_fd_converter
+#else
+    #define OS_ACCESS_DIR_FD_CONVERTER dir_fd_unavailable
+#endif
+/*[clinic]
+os.access -> object(doc_default='True if granted, False otherwise')
+
+    path: path_t(allow_fd=True)
+        Path to be tested; can be string, bytes, or open-file-descriptor int.
+
+    mode: int
+        Operating-system mode bitfield.  Can be F_OK to test existence,
+        or the inclusive-OR of R_OK, W_OK, and X_OK.
+
+    *
+
+    dir_fd : dir_fd = None
+        If not None, it should be a file descriptor open to a directory,
+        and path should be relative; path will then be relative to that
+        directory.
+
+    effective_ids: bool = False
+        If True, access will use the effective uid/gid instead of
+        the real uid/gid.
+
+    follow_symlinks: bool = True
+        If False, and the last element of the path is a symbolic link,
+        access will examine the symbolic link itself instead of the file
+        the link points to.
+
+Use the real uid/gid to test for access to a path.
+
+{parameters}
+dir_fd, effective_ids, and follow_symlinks may not be implemented
+  on your platform.  If they are unavailable, using them will raise a
+  NotImplementedError.
+
+Note that most operations will use the effective uid/gid, therefore this
+  routine can be used in a suid/sgid environment to test if the invoking user
+  has the specified access to the path.
+
+[clinic]*/
+
+PyDoc_STRVAR(os_access__doc__,
+"Use the real uid/gid to test for access to a path.\n"
+"\n"
+"os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True) -> True if granted, False otherwise\n"
+"  path\n"
+"    Path to be tested; can be string, bytes, or open-file-descriptor int.\n"
+"  mode\n"
+"    Operating-system mode bitfield.  Can be F_OK to test existence,\n"
+"    or the inclusive-OR of R_OK, W_OK, and X_OK.\n"
+"  dir_fd\n"
+"    If not None, it should be a file descriptor open to a directory,\n"
+"    and path should be relative; path will then be relative to that\n"
+"    directory.\n"
+"  effective_ids\n"
+"    If True, access will use the effective uid/gid instead of\n"
+"    the real uid/gid.\n"
+"  follow_symlinks\n"
+"    If False, and the last element of the path is a symbolic link,\n"
+"    access will examine the symbolic link itself instead of the file\n"
+"    the link points to.\n"
+"\n"
+"{parameters}\n"
+"dir_fd, effective_ids, and follow_symlinks may not be implemented\n"
+"  on your platform.  If they are unavailable, using them will raise a\n"
+"  NotImplementedError.\n"
+"\n"
+"Note that most operations will use the effective uid/gid, therefore this\n"
+"  routine can be used in a suid/sgid environment to test if the invoking user\n"
+"  has the specified access to the path.");
+
+#define OS_ACCESS_METHODDEF    \
+    {"access", (PyCFunction)os_access, METH_VARARGS|METH_KEYWORDS, os_access__doc__},
 
 static PyObject *
-posix_access(PyObject *self, PyObject *args, PyObject *kwargs)
+os_access_impl(PyObject *self, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks);
+
+static PyObject *
+os_access(PyObject *self, PyObject *args, PyObject *kwargs)
 {
-    static char *keywords[] = {"path", "mode", "dir_fd", "effective_ids",
-                                "follow_symlinks", NULL};
-    path_t path;
+    PyObject *return_value = NULL;
+    static char *_keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL};
+    path_t path = PATH_T_INITIALIZE("access", 0, 1);
     int mode;
     int dir_fd = DEFAULT_DIR_FD;
     int effective_ids = 0;
     int follow_symlinks = 1;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+        "O&i|$O&pp:access", _keywords,
+        path_converter, &path, &mode, OS_STAT_DIR_FD_CONVERTER, &dir_fd, &effective_ids, &follow_symlinks))
+        goto exit;
+    return_value = os_access_impl(self, &path, mode, dir_fd, effective_ids, follow_symlinks);
+
+exit:
+    /* Cleanup for path */
+    path_cleanup(&path);
+
+    return return_value;
+}
+
+static PyObject *
+os_access_impl(PyObject *self, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks)
+/*[clinic checksum: 0147557eb43243df57ba616cc7c35f232c69bc6a]*/
+{
     PyObject *return_value = NULL;
 
 #ifdef MS_WINDOWS
@@ -2460,17 +2639,6 @@
     int result;
 #endif
 
-    memset(&path, 0, sizeof(path));
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&i|$O&pp:access", keywords,
-        path_converter, &path, &mode,
-#ifdef HAVE_FACCESSAT
-        dir_fd_converter, &dir_fd,
-#else
-        dir_fd_unavailable, &dir_fd,
-#endif
-        &effective_ids, &follow_symlinks))
-        return NULL;
-
 #ifndef HAVE_FACCESSAT
     if (follow_symlinks_specified("access", follow_symlinks))
         goto exit;
@@ -2483,10 +2651,10 @@
 
 #ifdef MS_WINDOWS
     Py_BEGIN_ALLOW_THREADS
-    if (path.wide != NULL)
-        attr = GetFileAttributesW(path.wide);
+    if (path->wide != NULL)
+        attr = GetFileAttributesW(path->wide);
     else
-        attr = GetFileAttributesA(path.narrow);
+        attr = GetFileAttributesA(path->narrow);
     Py_END_ALLOW_THREADS
 
     /*
@@ -2498,7 +2666,7 @@
      * (Directories cannot be read-only on Windows.)
     */
     return_value = PyBool_FromLong(
-        (attr != 0xFFFFFFFF) &&
+        (attr != INVALID_FILE_ATTRIBUTES) &&
             (!(mode & 2) ||
             !(attr & FILE_ATTRIBUTE_READONLY) ||
             (attr & FILE_ATTRIBUTE_DIRECTORY)));
@@ -2514,11 +2682,11 @@
             flags |= AT_SYMLINK_NOFOLLOW;
         if (effective_ids)
             flags |= AT_EACCESS;
-        result = faccessat(dir_fd, path.narrow, mode, flags);
+        result = faccessat(dir_fd, path->narrow, mode, flags);
     }
     else
 #endif
-        result = access(path.narrow, mode);
+        result = access(path->narrow, mode);
     Py_END_ALLOW_THREADS
     return_value = PyBool_FromLong(!result);
 #endif
@@ -2526,7 +2694,6 @@
 #ifndef HAVE_FACCESSAT
 exit:
 #endif
-    path_cleanup(&path);
     return return_value;
 }
 
@@ -2543,35 +2710,76 @@
 #define X_OK 1
 #endif
 
+
 #ifdef HAVE_TTYNAME
-PyDoc_STRVAR(posix_ttyname__doc__,
-"ttyname(fd) -> string\n\n\
-Return the name of the terminal device connected to 'fd'.");
+
+/*[clinic]
+os.ttyname -> DecodeFSDefault
+
+    fd: int
+        Integer file descriptor handle.
+
+    /
+
+Return the name of the terminal device connected to 'fd'.
+[clinic]*/
+
+PyDoc_STRVAR(os_ttyname__doc__,
+"Return the name of the terminal device connected to \'fd\'.\n"
+"\n"
+"os.ttyname(fd)\n"
+"  fd\n"
+"    Integer file descriptor handle.");
+
+#define OS_TTYNAME_METHODDEF    \
+    {"ttyname", (PyCFunction)os_ttyname, METH_VARARGS, os_ttyname__doc__},
+
+static char *
+os_ttyname_impl(PyObject *self, int fd);
 
 static PyObject *
-posix_ttyname(PyObject *self, PyObject *args)
+os_ttyname(PyObject *self, PyObject *args)
 {
-    int id;
-    char *ret;
+    PyObject *return_value = NULL;
+    int fd;
+    char *_return_value;
 
-    if (!PyArg_ParseTuple(args, "i:ttyname", &id))
-        return NULL;
+    if (!PyArg_ParseTuple(args,
+        "i:ttyname",
+        &fd))
+        goto exit;
+    _return_value = os_ttyname_impl(self, fd);
+    if (_return_value == NULL)
+        goto exit;
+    return_value = PyUnicode_DecodeFSDefault(_return_value);
+
+exit:
+    return return_value;
+}
+
+static char *
+os_ttyname_impl(PyObject *self, int fd)
+/*[clinic checksum: ea680155d87bb733f542d67653eca732dd0981a8]*/
+{
+    char *ret;
 
 #if defined(__VMS)
     /* file descriptor 0 only, the default input device (stdin) */
-    if (id == 0) {
+    if (fd == 0) {
         ret = ttyname();
     }
     else {
         ret = NULL;
     }
 #else
-    ret = ttyname(id);
+    ret = ttyname(fd);
 #endif
     if (ret == NULL)
-        return posix_error();
-    return PyUnicode_DecodeFSDefault(ret);
+        posix_error();
+    return ret;
 }
+#else
+#define OS_TTYNAME_METHODDEF
 #endif
 
 #ifdef HAVE_CTERMID
@@ -2730,7 +2938,7 @@
         attr = GetFileAttributesW(path.wide);
     else
         attr = GetFileAttributesA(path.narrow);
-    if (attr == 0xFFFFFFFF)
+    if (attr == INVALID_FILE_ATTRIBUTES)
         result = 0;
     else {
         if (mode & _S_IWRITE)
@@ -3400,8 +3608,8 @@
         wcscpy(wnamebuf, po_wchars);
         if (len > 0) {
             wchar_t wch = wnamebuf[len-1];
-            if (wch != L'/' && wch != L'\\' && wch != L':')
-                wnamebuf[len++] = L'\\';
+            if (wch != SEP && wch != ALTSEP && wch != L':')
+                wnamebuf[len++] = SEP;
             wcscpy(wnamebuf + len, L"*.*");
         }
         if ((list = PyList_New(0)) == NULL) {
@@ -3455,8 +3663,8 @@
     len = path->length;
     if (len > 0) {
         char ch = namebuf[len-1];
-        if (ch != SEP && ch != ALTSEP && ch != ':')
-            namebuf[len++] = '/';
+        if (ch != '\\' && ch != '/' && ch != ':')
+            namebuf[len++] = '\\';
         strcpy(namebuf + len, "*.*");
     }
 
@@ -4845,8 +5053,10 @@
         return 0;
     size = PyBytes_GET_SIZE(bytes);
     *out = PyMem_Malloc(size+1);
-    if (!*out)
+    if (!*out) {
+        PyErr_NoMemory();
         return 0;
+    }
     memcpy(*out, PyBytes_AsString(bytes), size+1);
     Py_DECREF(bytes);
     return 1;
@@ -7587,7 +7797,7 @@
 
     if (!PyArg_ParseTuple(args, "i:dup", &fd))
         return NULL;
-    
+
     fd = _Py_dup(fd);
     if (fd == -1)
         return NULL;
@@ -8965,6 +9175,10 @@
     PyStructSequence_SET_ITEM(v, 8, PyLong_FromLong((long) st.f_flag));
     PyStructSequence_SET_ITEM(v, 9, PyLong_FromLong((long) st.f_namemax));
 #endif
+    if (PyErr_Occurred()) {
+        Py_DECREF(v);
+        return NULL;
+    }
 
     return v;
 }
@@ -10912,13 +11126,13 @@
 #endif   /* MS_WINDOWS */
 
 
+
 static PyMethodDef posix_methods[] = {
-    {"access",          (PyCFunction)posix_access,
-                        METH_VARARGS | METH_KEYWORDS,
-                        posix_access__doc__},
-#ifdef HAVE_TTYNAME
-    {"ttyname",         posix_ttyname, METH_VARARGS, posix_ttyname__doc__},
-#endif
+
+    OS_STAT_METHODDEF
+    OS_ACCESS_METHODDEF
+    OS_TTYNAME_METHODDEF
+
     {"chdir",           (PyCFunction)posix_chdir,
                         METH_VARARGS | METH_KEYWORDS,
                         posix_chdir__doc__},
@@ -11002,9 +11216,6 @@
     {"rmdir",           (PyCFunction)posix_rmdir,
                         METH_VARARGS | METH_KEYWORDS,
                         posix_rmdir__doc__},
-    {"stat",            (PyCFunction)posix_stat,
-                        METH_VARARGS | METH_KEYWORDS,
-                        posix_stat__doc__},
     {"stat_float_times", stat_float_times, METH_VARARGS, stat_float_times__doc__},
 #if defined(HAVE_SYMLINK)
     {"symlink",         (PyCFunction)posix_symlink,
@@ -11974,7 +12185,7 @@
             return NULL;
 #endif
 
-        stat_result_desc.name = MODNAME ".stat_result";
+        stat_result_desc.name = "os.stat_result"; /* see issue #19209 */
         stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
         stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
         stat_result_desc.fields[9].name = PyStructSequence_UnnamedField;
@@ -11983,7 +12194,7 @@
         structseq_new = StatResultType.tp_new;
         StatResultType.tp_new = statresult_new;
 
-        statvfs_result_desc.name = MODNAME ".statvfs_result";
+        statvfs_result_desc.name = "os.statvfs_result"; /* see issue #19209 */
         if (PyStructSequence_InitType2(&StatVFSResultType,
                                        &statvfs_result_desc) < 0)
             return NULL;
diff --git a/Modules/readline.c b/Modules/readline.c
index c154e1d..f255a87 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -55,11 +55,11 @@
  * with the "real" readline and cannot be detected at compile-time,
  * hence we use a runtime check to detect if we're using libedit
  *
- * Currently there is one know API incompatibility:
+ * Currently there is one known API incompatibility:
  * - 'get_history' has a 1-based index with GNU readline, and a 0-based
- *   index with libedit's emulation.
+ *   index with older versions of libedit's emulation.
  * - Note that replace_history and remove_history use a 0-based index
- *   with both implementation.
+ *   with both implementations.
  */
 static int using_libedit_emulation = 0;
 static const char libedit_version_tag[] = "EditLine wrapper";
@@ -1043,7 +1043,7 @@
 extern PyThreadState* _PyOS_ReadlineTState;
 
 static char *
-readline_until_enter_or_signal(char *prompt, int *signal)
+readline_until_enter_or_signal(const char *prompt, int *signal)
 {
     char * not_done_reading = "";
     fd_set selectset;
@@ -1145,7 +1145,7 @@
 
 
 static char *
-call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
+call_readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
 {
     size_t n;
     char *p, *q;
@@ -1176,7 +1176,7 @@
 
     /* We got an EOF, return a empty string. */
     if (p == NULL) {
-        p = PyMem_Malloc(1);
+        p = PyMem_RawMalloc(1);
         if (p != NULL)
             *p = '\0';
         RESTORE_LOCALE(saved_locale)
@@ -1204,7 +1204,7 @@
     /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
        release the original. */
     q = p;
-    p = PyMem_Malloc(n+2);
+    p = PyMem_RawMalloc(n+2);
     if (p != NULL) {
         strncpy(p, q, n);
         p[n] = '\n';
diff --git a/Modules/resource.c b/Modules/resource.c
index 8768315..c12ce34 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -106,6 +106,44 @@
     return result;
 }
 
+static int
+py2rlimit(PyObject *curobj, PyObject *maxobj, struct rlimit *rl_out)
+{
+#if !defined(HAVE_LARGEFILE_SUPPORT)
+    rl_out->rlim_cur = PyLong_AsLong(curobj);
+    if (rl_out->rlim_cur == (rlim_t)-1 && PyErr_Occurred())
+        return -1;
+    rl_out->rlim_max = PyLong_AsLong(maxobj);
+    if (rl_out->rlim_max == (rlim_t)-1 && PyErr_Occurred())
+        return -1;
+#else
+    /* The limits are probably bigger than a long */
+    rl_out->rlim_cur = PyLong_AsLongLong(curobj);
+    if (rl_out->rlim_cur == (rlim_t)-1 && PyErr_Occurred())
+        return -1;
+    rl_out->rlim_max = PyLong_AsLongLong(maxobj);
+    if (rl_out->rlim_max == (rlim_t)-1 && PyErr_Occurred())
+        return -1;
+#endif
+
+    rl_out->rlim_cur = rl_out->rlim_cur & RLIM_INFINITY;
+    rl_out->rlim_max = rl_out->rlim_max & RLIM_INFINITY;
+    return 0;
+
+}
+
+static PyObject*
+rlimit2py(struct rlimit rl)
+{
+#if defined(HAVE_LONG_LONG)
+    if (sizeof(rl.rlim_cur) > sizeof(long)) {
+        return Py_BuildValue("LL",
+                             (PY_LONG_LONG) rl.rlim_cur,
+                             (PY_LONG_LONG) rl.rlim_max);
+    }
+#endif
+    return Py_BuildValue("ll", (long) rl.rlim_cur, (long) rl.rlim_max);
+}
 
 static PyObject *
 resource_getrlimit(PyObject *self, PyObject *args)
@@ -126,15 +164,7 @@
         PyErr_SetFromErrno(PyExc_OSError);
         return NULL;
     }
-
-#if defined(HAVE_LONG_LONG)
-    if (sizeof(rl.rlim_cur) > sizeof(long)) {
-        return Py_BuildValue("LL",
-                             (PY_LONG_LONG) rl.rlim_cur,
-                             (PY_LONG_LONG) rl.rlim_max);
-    }
-#endif
-    return Py_BuildValue("ll", (long) rl.rlim_cur, (long) rl.rlim_max);
+    return rlimit2py(rl);
 }
 
 static PyObject *
@@ -166,25 +196,10 @@
     curobj = PyTuple_GET_ITEM(limits, 0);
     maxobj = PyTuple_GET_ITEM(limits, 1);
 
-#if !defined(HAVE_LARGEFILE_SUPPORT)
-    rl.rlim_cur = PyLong_AsLong(curobj);
-    if (rl.rlim_cur == (rlim_t)-1 && PyErr_Occurred())
+    if (py2rlimit(curobj, maxobj, &rl) < 0) {
         goto error;
-    rl.rlim_max = PyLong_AsLong(maxobj);
-    if (rl.rlim_max == (rlim_t)-1 && PyErr_Occurred())
-        goto error;
-#else
-    /* The limits are probably bigger than a long */
-    rl.rlim_cur = PyLong_AsLongLong(curobj);
-    if (rl.rlim_cur == (rlim_t)-1 && PyErr_Occurred())
-        goto error;
-    rl.rlim_max = PyLong_AsLongLong(maxobj);
-    if (rl.rlim_max == (rlim_t)-1 && PyErr_Occurred())
-        goto error;
-#endif
+    }
 
-    rl.rlim_cur = rl.rlim_cur & RLIM_INFINITY;
-    rl.rlim_max = rl.rlim_max & RLIM_INFINITY;
     if (setrlimit(resource, &rl) == -1) {
         if (errno == EINVAL)
             PyErr_SetString(PyExc_ValueError,
@@ -205,6 +220,48 @@
     return NULL;
 }
 
+#ifdef HAVE_PRLIMIT
+static PyObject *
+resource_prlimit(PyObject *self, PyObject *args)
+{
+    struct rlimit old_limit, new_limit;
+    int resource, retval;
+    pid_t pid;
+    PyObject *curobj=NULL, *maxobj=NULL;
+
+    if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i|(OO):prlimit",
+                          &pid, &resource, &curobj, &maxobj))
+        return NULL;
+
+    if (resource < 0 || resource >= RLIM_NLIMITS) {
+        PyErr_SetString(PyExc_ValueError,
+                        "invalid resource specified");
+        return NULL;
+    }
+
+    if (curobj != NULL) {
+        if (py2rlimit(curobj, maxobj, &new_limit) < 0) {
+            return NULL;
+        }
+        retval = prlimit(pid, resource, &new_limit, &old_limit);
+    }
+    else {
+        retval = prlimit(pid, resource, NULL, &old_limit);
+    }
+
+    if (retval == -1) {
+        if (errno == EINVAL) {
+            PyErr_SetString(PyExc_ValueError,
+                            "current limit exceeds maximum limit");
+        } else {
+            PyErr_SetFromErrno(PyExc_OSError);
+        }
+        return NULL;
+    }
+    return rlimit2py(old_limit);
+}
+#endif /* HAVE_PRLIMIT */
+
 static PyObject *
 resource_getpagesize(PyObject *self, PyObject *unused)
 {
@@ -229,6 +286,9 @@
 resource_methods[] = {
     {"getrusage",    resource_getrusage,   METH_VARARGS},
     {"getrlimit",    resource_getrlimit,   METH_VARARGS},
+#ifdef HAVE_PRLIMIT
+    {"prlimit",      resource_prlimit,     METH_VARARGS},
+#endif
     {"setrlimit",    resource_setrlimit,   METH_VARARGS},
     {"getpagesize",  resource_getpagesize, METH_NOARGS},
     {NULL, NULL}                             /* sentinel */
@@ -326,6 +386,28 @@
     PyModule_AddIntMacro(m, RLIMIT_SBSIZE);
 #endif
 
+/* Linux specific */
+#ifdef RLIMIT_MSGQUEUE
+    PyModule_AddIntMacro(m, RLIMIT_MSGQUEUE);
+#endif
+
+#ifdef RLIMIT_NICE
+    PyModule_AddIntMacro(m, RLIMIT_NICE);
+#endif
+
+#ifdef RLIMIT_RTPRIO
+    PyModule_AddIntMacro(m, RLIMIT_RTPRIO);
+#endif
+
+#ifdef RLIMIT_RTTIME
+    PyModule_AddIntMacro(m, RLIMIT_RTTIME);
+#endif
+
+#ifdef RLIMIT_SIGPENDING
+    PyModule_AddIntMacro(m, RLIMIT_SIGPENDING);
+#endif
+
+/* target */
 #ifdef RUSAGE_SELF
     PyModule_AddIntMacro(m, RUSAGE_SELF);
 #endif
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 22106b1..6291a2d 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -1459,7 +1459,6 @@
 
     evs = PyMem_New(struct epoll_event, maxevents);
     if (evs == NULL) {
-        Py_DECREF(self);
         PyErr_NoMemory();
         return NULL;
     }
diff --git a/Modules/sha1module.c b/Modules/sha1module.c
index 403194c..b44fe18 100644
--- a/Modules/sha1module.c
+++ b/Modules/sha1module.c
@@ -544,8 +544,17 @@
 PyMODINIT_FUNC
 PyInit__sha1(void)
 {
+    PyObject *m;
+
     Py_TYPE(&SHA1type) = &PyType_Type;
     if (PyType_Ready(&SHA1type) < 0)
         return NULL;
-    return PyModule_Create(&_sha1module);
+
+    m = PyModule_Create(&_sha1module);
+    if (m == NULL)
+        return NULL;
+
+    Py_INCREF((PyObject *)&SHA1type);
+    PyModule_AddObject(m, "SHA1Type", (PyObject *)&SHA1type);
+    return m;
 }
diff --git a/Modules/sha256module.c b/Modules/sha256module.c
index e60111a..b05bfc1 100644
--- a/Modules/sha256module.c
+++ b/Modules/sha256module.c
@@ -706,11 +706,23 @@
 PyMODINIT_FUNC
 PyInit__sha256(void)
 {
+    PyObject *m;
+
     Py_TYPE(&SHA224type) = &PyType_Type;
     if (PyType_Ready(&SHA224type) < 0)
         return NULL;
     Py_TYPE(&SHA256type) = &PyType_Type;
     if (PyType_Ready(&SHA256type) < 0)
         return NULL;
-    return PyModule_Create(&_sha256module);
+
+    m = PyModule_Create(&_sha256module);
+    if (m == NULL)
+        return NULL;
+
+    Py_INCREF((PyObject *)&SHA224type);
+    PyModule_AddObject(m, "SHA224Type", (PyObject *)&SHA224type);
+    Py_INCREF((PyObject *)&SHA256type);
+    PyModule_AddObject(m, "SHA256Type", (PyObject *)&SHA256type);
+    return m;
+
 }
diff --git a/Modules/sha512module.c b/Modules/sha512module.c
index 2841eab..47c57e5 100644
--- a/Modules/sha512module.c
+++ b/Modules/sha512module.c
@@ -772,13 +772,24 @@
 PyMODINIT_FUNC
 PyInit__sha512(void)
 {
+    PyObject *m;
+
     Py_TYPE(&SHA384type) = &PyType_Type;
     if (PyType_Ready(&SHA384type) < 0)
         return NULL;
     Py_TYPE(&SHA512type) = &PyType_Type;
     if (PyType_Ready(&SHA512type) < 0)
         return NULL;
-    return PyModule_Create(&_sha512module);
+
+    m = PyModule_Create(&_sha512module);
+    if (m == NULL)
+        return NULL;
+
+    Py_INCREF((PyObject *)&SHA384type);
+    PyModule_AddObject(m, "SHA384Type", (PyObject *)&SHA384type);
+    Py_INCREF((PyObject *)&SHA512type);
+    PyModule_AddObject(m, "SHA512Type", (PyObject *)&SHA512type);
+    return m;
 }
 
 #endif
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 02cf540..fa61cfd 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -5023,7 +5023,7 @@
     return PyUnicode_FromString(inet_ntoa(packed_addr));
 }
 
-#ifdef HAVE_INET_PTON
+#if defined(HAVE_INET_PTON) || defined(MS_WINDOWS)
 
 PyDoc_STRVAR(inet_pton_doc,
 "inet_pton(af, ip) -> packed IP address string\n\
@@ -5031,6 +5031,10 @@
 Convert an IP address from string format to a packed string suitable\n\
 for use with low-level network functions.");
 
+#endif
+
+#ifdef HAVE_INET_PTON
+
 static PyObject *
 socket_inet_pton(PyObject *self, PyObject *args)
 {
@@ -5075,12 +5079,52 @@
         return NULL;
     }
 }
+#elif defined(MS_WINDOWS)
+
+static PyObject *
+socket_inet_pton(PyObject *self, PyObject *args)
+{
+    int af;
+    char* ip;
+    struct sockaddr_in6 addr;
+    INT ret, size;
+
+    if (!PyArg_ParseTuple(args, "is:inet_pton", &af, &ip)) {
+        return NULL;
+    }
+
+    size = sizeof(addr); 
+    ret = WSAStringToAddressA(ip, af, NULL, (LPSOCKADDR)&addr, &size);
+
+    if (ret) {
+        PyErr_SetExcFromWindowsErr(PyExc_OSError, WSAGetLastError());
+        return NULL;
+    } else if(af == AF_INET) {
+        struct sockaddr_in *addr4 = (struct sockaddr_in*)&addr;
+        return PyBytes_FromStringAndSize((const char *)&(addr4->sin_addr), 
+                                         sizeof(addr4->sin_addr));
+    } else if (af == AF_INET6) {
+        return PyBytes_FromStringAndSize((const char *)&(addr.sin6_addr), 
+                                          sizeof(addr.sin6_addr));
+    } else {
+        PyErr_SetString(PyExc_OSError, "unknown address family");
+        return NULL;
+    }
+}
+
+#endif
+
+#if defined(HAVE_INET_PTON) || defined(MS_WINDOWS)
 
 PyDoc_STRVAR(inet_ntop_doc,
 "inet_ntop(af, packed_ip) -> string formatted IP address\n\
 \n\
 Convert a packed IP address of the given family to string format.");
 
+#endif
+
+
+#ifdef HAVE_INET_PTON
 static PyObject *
 socket_inet_ntop(PyObject *self, PyObject *args)
 {
@@ -5134,6 +5178,70 @@
     return NULL;
 }
 
+#elif defined(MS_WINDOWS)
+
+static PyObject *
+socket_inet_ntop(PyObject *self, PyObject *args)
+{
+    int af;
+    char* packed;
+    int len;
+    struct sockaddr_in6 addr;
+    DWORD addrlen, ret, retlen;
+#ifdef ENABLE_IPV6
+    char ip[Py_MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) + 1];
+#else
+    char ip[INET_ADDRSTRLEN + 1];
+#endif
+
+    /* Guarantee NUL-termination for PyUnicode_FromString() below */
+    memset((void *) &ip[0], '\0', sizeof(ip));
+
+    if (!PyArg_ParseTuple(args, "iy#:inet_ntop", &af, &packed, &len)) {
+        return NULL;
+    }
+
+    if (af == AF_INET) {
+        struct sockaddr_in * addr4 = (struct sockaddr_in *)&addr;
+
+        if (len != sizeof(struct in_addr)) {
+            PyErr_SetString(PyExc_ValueError,
+                "invalid length of packed IP address string");
+            return NULL;
+        }
+        memset(addr4, 0, sizeof(struct sockaddr_in));
+        addr4->sin_family = AF_INET;
+        memcpy(&(addr4->sin_addr), packed, sizeof(addr4->sin_addr));
+        addrlen = sizeof(struct sockaddr_in);
+    } else if (af == AF_INET6) {
+        if (len != sizeof(struct in6_addr)) {
+            PyErr_SetString(PyExc_ValueError,
+                "invalid length of packed IP address string");
+            return NULL;
+        }
+
+        memset(&addr, 0, sizeof(addr));
+        addr.sin6_family = AF_INET6;
+        memcpy(&(addr.sin6_addr), packed, sizeof(addr.sin6_addr));
+        addrlen = sizeof(addr);
+    } else {
+        PyErr_Format(PyExc_ValueError,
+            "unknown address family %d", af);
+        return NULL;
+    }
+
+    retlen = sizeof(ip);
+    ret = WSAAddressToStringA((struct sockaddr*)&addr, addrlen, NULL, 
+                              ip, &retlen);
+
+    if (ret) {
+        PyErr_SetExcFromWindowsErr(PyExc_OSError, WSAGetLastError());
+        return NULL;
+    } else {
+        return PyUnicode_FromString(ip);
+    }
+}
+
 #endif /* HAVE_INET_PTON */
 
 /* Python interface to getaddrinfo(host, port). */
@@ -5155,7 +5263,7 @@
     PyObject *all = (PyObject *)NULL;
     PyObject *idna = NULL;
 
-    family = socktype = protocol = flags = 0;
+    socktype = protocol = flags = 0;
     family = AF_UNSPEC;
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|iiii:getaddrinfo",
                           kwnames, &hobj, &pobj, &family, &socktype,
@@ -5600,7 +5708,7 @@
      METH_VARARGS, inet_aton_doc},
     {"inet_ntoa",               socket_inet_ntoa,
      METH_VARARGS, inet_ntoa_doc},
-#ifdef HAVE_INET_PTON
+#if defined(HAVE_INET_PTON) || defined(MS_WINDOWS)
     {"inet_pton",               socket_inet_pton,
      METH_VARARGS, inet_pton_doc},
     {"inet_ntop",               socket_inet_ntop,
diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c
index d06f8ce..68ea1b5 100644
--- a/Modules/spwdmodule.c
+++ b/Modules/spwdmodule.c
@@ -26,22 +26,24 @@
 #if defined(HAVE_GETSPNAM) || defined(HAVE_GETSPENT)
 
 static PyStructSequence_Field struct_spwd_type_fields[] = {
-    {"sp_nam", "login name"},
-    {"sp_pwd", "encrypted password"},
+    {"sp_namp", "login name"},
+    {"sp_pwdp", "encrypted password"},
     {"sp_lstchg", "date of last change"},
     {"sp_min", "min #days between changes"},
     {"sp_max", "max #days between changes"},
     {"sp_warn", "#days before pw expires to warn user about it"},
-    {"sp_inact", "#days after pw expires until account is blocked"},
-    {"sp_expire", "#days since 1970-01-01 until account is disabled"},
+    {"sp_inact", "#days after pw expires until account is disabled"},
+    {"sp_expire", "#days since 1970-01-01 when account expires"},
     {"sp_flag", "reserved"},
+    {"sp_nam", "login name; deprecated"}, /* Backward compatibility */
+    {"sp_pwd", "encrypted password; deprecated"}, /* Backward compatibility */
     {0}
 };
 
 PyDoc_STRVAR(struct_spwd__doc__,
 "spwd.struct_spwd: Results from getsp*() routines.\n\n\
 This object may be accessed either as a 9-tuple of\n\
-  (sp_nam,sp_pwd,sp_lstchg,sp_min,sp_max,sp_warn,sp_inact,sp_expire,sp_flag)\n\
+  (sp_namp,sp_pwdp,sp_lstchg,sp_min,sp_max,sp_warn,sp_inact,sp_expire,sp_flag)\n\
 or via the object attributes as named in the above tuple.");
 
 static PyStructSequence_Desc struct_spwd_type_desc = {
@@ -86,6 +88,8 @@
     SETI(setIndex++, p->sp_inact);
     SETI(setIndex++, p->sp_expire);
     SETI(setIndex++, p->sp_flag);
+    SETS(setIndex++, p->sp_namp); /* Backward compatibility for sp_nam */
+    SETS(setIndex++, p->sp_pwdp); /* Backward compatibility for sp_pwd */
 
 #undef SETS
 #undef SETI
diff --git a/Modules/sre.h b/Modules/sre.h
index 0a8f0cf..42fe28d 100644
--- a/Modules/sre.h
+++ b/Modules/sre.h
@@ -31,9 +31,7 @@
     PyObject* pattern; /* pattern source (or None) */
     int flags; /* flags used when compiling pattern source */
     PyObject *weakreflist; /* List of weak references */
-    int logical_charsize; /* pattern charsize (or -1) */
-    int charsize;
-    Py_buffer view;
+    int isbytes; /* pattern type (1 - bytes, 0 - string, -1 - None) */
     /* pattern code */
     Py_ssize_t codesize;
     SRE_CODE code[1];
@@ -73,9 +71,8 @@
     /* attributes for the match object */
     PyObject* string;
     Py_ssize_t pos, endpos;
-    /* character size */
-    int logical_charsize; /* kind of thing: 1 - bytes, 2/4 - unicode */
-    int charsize;
+    int isbytes;
+    int charsize; /* character size */
     /* registers */
     Py_ssize_t lastindex;
     Py_ssize_t lastmark;
diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h
new file mode 100644
index 0000000..214c22a
--- /dev/null
+++ b/Modules/sre_lib.h
@@ -0,0 +1,1329 @@
+/*
+ * Secret Labs' Regular Expression Engine
+ *
+ * regular expression matching engine
+ *
+ * Copyright (c) 1997-2001 by Secret Labs AB.  All rights reserved.
+ *
+ * See the _sre.c file for information on usage and redistribution.
+ */
+
+/* String matching engine */
+
+/* This file is included three times, with different character settings */
+
+LOCAL(int)
+SRE(at)(SRE_STATE* state, SRE_CHAR* ptr, SRE_CODE at)
+{
+    /* check if pointer is at given position */
+
+    Py_ssize_t thisp, thatp;
+
+    switch (at) {
+
+    case SRE_AT_BEGINNING:
+    case SRE_AT_BEGINNING_STRING:
+        return ((void*) ptr == state->beginning);
+
+    case SRE_AT_BEGINNING_LINE:
+        return ((void*) ptr == state->beginning ||
+                SRE_IS_LINEBREAK((int) ptr[-1]));
+
+    case SRE_AT_END:
+        return (((void*) (ptr+1) == state->end &&
+                 SRE_IS_LINEBREAK((int) ptr[0])) ||
+                ((void*) ptr == state->end));
+
+    case SRE_AT_END_LINE:
+        return ((void*) ptr == state->end ||
+                SRE_IS_LINEBREAK((int) ptr[0]));
+
+    case SRE_AT_END_STRING:
+        return ((void*) ptr == state->end);
+
+    case SRE_AT_BOUNDARY:
+        if (state->beginning == state->end)
+            return 0;
+        thatp = ((void*) ptr > state->beginning) ?
+            SRE_IS_WORD((int) ptr[-1]) : 0;
+        thisp = ((void*) ptr < state->end) ?
+            SRE_IS_WORD((int) ptr[0]) : 0;
+        return thisp != thatp;
+
+    case SRE_AT_NON_BOUNDARY:
+        if (state->beginning == state->end)
+            return 0;
+        thatp = ((void*) ptr > state->beginning) ?
+            SRE_IS_WORD((int) ptr[-1]) : 0;
+        thisp = ((void*) ptr < state->end) ?
+            SRE_IS_WORD((int) ptr[0]) : 0;
+        return thisp == thatp;
+
+    case SRE_AT_LOC_BOUNDARY:
+        if (state->beginning == state->end)
+            return 0;
+        thatp = ((void*) ptr > state->beginning) ?
+            SRE_LOC_IS_WORD((int) ptr[-1]) : 0;
+        thisp = ((void*) ptr < state->end) ?
+            SRE_LOC_IS_WORD((int) ptr[0]) : 0;
+        return thisp != thatp;
+
+    case SRE_AT_LOC_NON_BOUNDARY:
+        if (state->beginning == state->end)
+            return 0;
+        thatp = ((void*) ptr > state->beginning) ?
+            SRE_LOC_IS_WORD((int) ptr[-1]) : 0;
+        thisp = ((void*) ptr < state->end) ?
+            SRE_LOC_IS_WORD((int) ptr[0]) : 0;
+        return thisp == thatp;
+
+    case SRE_AT_UNI_BOUNDARY:
+        if (state->beginning == state->end)
+            return 0;
+        thatp = ((void*) ptr > state->beginning) ?
+            SRE_UNI_IS_WORD((int) ptr[-1]) : 0;
+        thisp = ((void*) ptr < state->end) ?
+            SRE_UNI_IS_WORD((int) ptr[0]) : 0;
+        return thisp != thatp;
+
+    case SRE_AT_UNI_NON_BOUNDARY:
+        if (state->beginning == state->end)
+            return 0;
+        thatp = ((void*) ptr > state->beginning) ?
+            SRE_UNI_IS_WORD((int) ptr[-1]) : 0;
+        thisp = ((void*) ptr < state->end) ?
+            SRE_UNI_IS_WORD((int) ptr[0]) : 0;
+        return thisp == thatp;
+
+    }
+
+    return 0;
+}
+
+LOCAL(int)
+SRE(charset)(SRE_CODE* set, SRE_CODE ch)
+{
+    /* check if character is a member of the given set */
+
+    int ok = 1;
+
+    for (;;) {
+        switch (*set++) {
+
+        case SRE_OP_FAILURE:
+            return !ok;
+
+        case SRE_OP_LITERAL:
+            /* <LITERAL> <code> */
+            if (ch == set[0])
+                return ok;
+            set++;
+            break;
+
+        case SRE_OP_CATEGORY:
+            /* <CATEGORY> <code> */
+            if (sre_category(set[0], (int) ch))
+                return ok;
+            set++;
+            break;
+
+        case SRE_OP_CHARSET:
+            /* <CHARSET> <bitmap> */
+            if (ch < 256 &&
+                (set[ch/SRE_CODE_BITS] & (1u << (ch & (SRE_CODE_BITS-1)))))
+                return ok;
+            set += 256/SRE_CODE_BITS;
+            break;
+
+        case SRE_OP_RANGE:
+            /* <RANGE> <lower> <upper> */
+            if (set[0] <= ch && ch <= set[1])
+                return ok;
+            set += 2;
+            break;
+
+        case SRE_OP_NEGATE:
+            ok = !ok;
+            break;
+
+        case SRE_OP_BIGCHARSET:
+            /* <BIGCHARSET> <blockcount> <256 blockindices> <blocks> */
+        {
+            Py_ssize_t count, block;
+            count = *(set++);
+
+            if (ch < 0x10000u)
+                block = ((unsigned char*)set)[ch >> 8];
+            else
+                block = -1;
+            set += 256/sizeof(SRE_CODE);
+            if (block >=0 &&
+                (set[(block * 256 + (ch & 255))/SRE_CODE_BITS] &
+                    (1u << (ch & (SRE_CODE_BITS-1)))))
+                return ok;
+            set += count * (256/SRE_CODE_BITS);
+            break;
+        }
+
+        default:
+            /* internal error -- there's not much we can do about it
+               here, so let's just pretend it didn't match... */
+            return 0;
+        }
+    }
+}
+
+LOCAL(Py_ssize_t) SRE(match)(SRE_STATE* state, SRE_CODE* pattern);
+
+LOCAL(Py_ssize_t)
+SRE(count)(SRE_STATE* state, SRE_CODE* pattern, Py_ssize_t maxcount)
+{
+    SRE_CODE chr;
+    SRE_CHAR c;
+    SRE_CHAR* ptr = (SRE_CHAR *)state->ptr;
+    SRE_CHAR* end = (SRE_CHAR *)state->end;
+    Py_ssize_t i;
+
+    /* adjust end */
+    if (maxcount < end - ptr && maxcount != SRE_MAXREPEAT)
+        end = ptr + maxcount;
+
+    switch (pattern[0]) {
+
+    case SRE_OP_IN:
+        /* repeated set */
+        TRACE(("|%p|%p|COUNT IN\n", pattern, ptr));
+        while (ptr < end && SRE(charset)(pattern + 2, *ptr))
+            ptr++;
+        break;
+
+    case SRE_OP_ANY:
+        /* repeated dot wildcard. */
+        TRACE(("|%p|%p|COUNT ANY\n", pattern, ptr));
+        while (ptr < end && !SRE_IS_LINEBREAK(*ptr))
+            ptr++;
+        break;
+
+    case SRE_OP_ANY_ALL:
+        /* repeated dot wildcard.  skip to the end of the target
+           string, and backtrack from there */
+        TRACE(("|%p|%p|COUNT ANY_ALL\n", pattern, ptr));
+        ptr = end;
+        break;
+
+    case SRE_OP_LITERAL:
+        /* repeated literal */
+        chr = pattern[1];
+        TRACE(("|%p|%p|COUNT LITERAL %d\n", pattern, ptr, chr));
+        c = (SRE_CHAR) chr;
+#if SIZEOF_SRE_CHAR < 4
+        if ((SRE_CODE) c != chr)
+            ; /* literal can't match: doesn't fit in char width */
+        else
+#endif
+        while (ptr < end && *ptr == c)
+            ptr++;
+        break;
+
+    case SRE_OP_LITERAL_IGNORE:
+        /* repeated literal */
+        chr = pattern[1];
+        TRACE(("|%p|%p|COUNT LITERAL_IGNORE %d\n", pattern, ptr, chr));
+        while (ptr < end && (SRE_CODE) state->lower(*ptr) == chr)
+            ptr++;
+        break;
+
+    case SRE_OP_NOT_LITERAL:
+        /* repeated non-literal */
+        chr = pattern[1];
+        TRACE(("|%p|%p|COUNT NOT_LITERAL %d\n", pattern, ptr, chr));
+        c = (SRE_CHAR) chr;
+#if SIZEOF_SRE_CHAR < 4
+        if ((SRE_CODE) c != chr)
+            ptr = end; /* literal can't match: doesn't fit in char width */
+        else
+#endif
+        while (ptr < end && *ptr != c)
+            ptr++;
+        break;
+
+    case SRE_OP_NOT_LITERAL_IGNORE:
+        /* repeated non-literal */
+        chr = pattern[1];
+        TRACE(("|%p|%p|COUNT NOT_LITERAL_IGNORE %d\n", pattern, ptr, chr));
+        while (ptr < end && (SRE_CODE) state->lower(*ptr) != chr)
+            ptr++;
+        break;
+
+    default:
+        /* repeated single character pattern */
+        TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr));
+        while ((SRE_CHAR*) state->ptr < end) {
+            i = SRE(match)(state, pattern);
+            if (i < 0)
+                return i;
+            if (!i)
+                break;
+        }
+        TRACE(("|%p|%p|COUNT %" PY_FORMAT_SIZE_T "d\n", pattern, ptr,
+               (SRE_CHAR*) state->ptr - ptr));
+        return (SRE_CHAR*) state->ptr - ptr;
+    }
+
+    TRACE(("|%p|%p|COUNT %" PY_FORMAT_SIZE_T "d\n", pattern, ptr,
+           ptr - (SRE_CHAR*) state->ptr));
+    return ptr - (SRE_CHAR*) state->ptr;
+}
+
+#if 0 /* not used in this release */
+LOCAL(int)
+SRE(info)(SRE_STATE* state, SRE_CODE* pattern)
+{
+    /* check if an SRE_OP_INFO block matches at the current position.
+       returns the number of SRE_CODE objects to skip if successful, 0
+       if no match */
+
+    SRE_CHAR* end = (SRE_CHAR*) state->end;
+    SRE_CHAR* ptr = (SRE_CHAR*) state->ptr;
+    Py_ssize_t i;
+
+    /* check minimal length */
+    if (pattern[3] && end - ptr < pattern[3])
+        return 0;
+
+    /* check known prefix */
+    if (pattern[2] & SRE_INFO_PREFIX && pattern[5] > 1) {
+        /* <length> <skip> <prefix data> <overlap data> */
+        for (i = 0; i < pattern[5]; i++)
+            if ((SRE_CODE) ptr[i] != pattern[7 + i])
+                return 0;
+        return pattern[0] + 2 * pattern[6];
+    }
+    return pattern[0];
+}
+#endif
+
+/* The macros below should be used to protect recursive SRE(match)()
+ * calls that *failed* and do *not* return immediately (IOW, those
+ * that will backtrack). Explaining:
+ *
+ * - Recursive SRE(match)() returned true: that's usually a success
+ *   (besides atypical cases like ASSERT_NOT), therefore there's no
+ *   reason to restore lastmark;
+ *
+ * - Recursive SRE(match)() returned false but the current SRE(match)()
+ *   is returning to the caller: If the current SRE(match)() is the
+ *   top function of the recursion, returning false will be a matching
+ *   failure, and it doesn't matter where lastmark is pointing to.
+ *   If it's *not* the top function, it will be a recursive SRE(match)()
+ *   failure by itself, and the calling SRE(match)() will have to deal
+ *   with the failure by the same rules explained here (it will restore
+ *   lastmark by itself if necessary);
+ *
+ * - Recursive SRE(match)() returned false, and will continue the
+ *   outside 'for' loop: must be protected when breaking, since the next
+ *   OP could potentially depend on lastmark;
+ *
+ * - Recursive SRE(match)() returned false, and will be called again
+ *   inside a local for/while loop: must be protected between each
+ *   loop iteration, since the recursive SRE(match)() could do anything,
+ *   and could potentially depend on lastmark.
+ *
+ * For more information, check the discussion at SF patch #712900.
+ */
+#define LASTMARK_SAVE()     \
+    do { \
+        ctx->lastmark = state->lastmark; \
+        ctx->lastindex = state->lastindex; \
+    } while (0)
+#define LASTMARK_RESTORE()  \
+    do { \
+        state->lastmark = ctx->lastmark; \
+        state->lastindex = ctx->lastindex; \
+    } while (0)
+
+#define RETURN_ERROR(i) do { return i; } while(0)
+#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
+#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
+
+#define RETURN_ON_ERROR(i) \
+    do { if (i < 0) RETURN_ERROR(i); } while (0)
+#define RETURN_ON_SUCCESS(i) \
+    do { RETURN_ON_ERROR(i); if (i > 0) RETURN_SUCCESS; } while (0)
+#define RETURN_ON_FAILURE(i) \
+    do { RETURN_ON_ERROR(i); if (i == 0) RETURN_FAILURE; } while (0)
+
+#define SFY(x) #x
+
+#define DATA_STACK_ALLOC(state, type, ptr) \
+do { \
+    alloc_pos = state->data_stack_base; \
+    TRACE(("allocating %s in %" PY_FORMAT_SIZE_T "d " \
+           "(%" PY_FORMAT_SIZE_T "d)\n", \
+           SFY(type), alloc_pos, sizeof(type))); \
+    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
+        int j = data_stack_grow(state, sizeof(type)); \
+        if (j < 0) return j; \
+        if (ctx_pos != -1) \
+            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
+    } \
+    ptr = (type*)(state->data_stack+alloc_pos); \
+    state->data_stack_base += sizeof(type); \
+} while (0)
+
+#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
+do { \
+    TRACE(("looking up %s at %" PY_FORMAT_SIZE_T "d\n", SFY(type), pos)); \
+    ptr = (type*)(state->data_stack+pos); \
+} while (0)
+
+#define DATA_STACK_PUSH(state, data, size) \
+do { \
+    TRACE(("copy data in %p to %" PY_FORMAT_SIZE_T "d " \
+           "(%" PY_FORMAT_SIZE_T "d)\n", \
+           data, state->data_stack_base, size)); \
+    if (size > state->data_stack_size - state->data_stack_base) { \
+        int j = data_stack_grow(state, size); \
+        if (j < 0) return j; \
+        if (ctx_pos != -1) \
+            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
+    } \
+    memcpy(state->data_stack+state->data_stack_base, data, size); \
+    state->data_stack_base += size; \
+} while (0)
+
+#define DATA_STACK_POP(state, data, size, discard) \
+do { \
+    TRACE(("copy data to %p from %" PY_FORMAT_SIZE_T "d " \
+           "(%" PY_FORMAT_SIZE_T "d)\n", \
+           data, state->data_stack_base-size, size)); \
+    memcpy(data, state->data_stack+state->data_stack_base-size, size); \
+    if (discard) \
+        state->data_stack_base -= size; \
+} while (0)
+
+#define DATA_STACK_POP_DISCARD(state, size) \
+do { \
+    TRACE(("discard data from %" PY_FORMAT_SIZE_T "d " \
+           "(%" PY_FORMAT_SIZE_T "d)\n", \
+           state->data_stack_base-size, size)); \
+    state->data_stack_base -= size; \
+} while(0)
+
+#define DATA_PUSH(x) \
+    DATA_STACK_PUSH(state, (x), sizeof(*(x)))
+#define DATA_POP(x) \
+    DATA_STACK_POP(state, (x), sizeof(*(x)), 1)
+#define DATA_POP_DISCARD(x) \
+    DATA_STACK_POP_DISCARD(state, sizeof(*(x)))
+#define DATA_ALLOC(t,p) \
+    DATA_STACK_ALLOC(state, t, p)
+#define DATA_LOOKUP_AT(t,p,pos) \
+    DATA_STACK_LOOKUP_AT(state,t,p,pos)
+
+#define MARK_PUSH(lastmark) \
+    do if (lastmark > 0) { \
+        i = lastmark; /* ctx->lastmark may change if reallocated */ \
+        DATA_STACK_PUSH(state, state->mark, (i+1)*sizeof(void*)); \
+    } while (0)
+#define MARK_POP(lastmark) \
+    do if (lastmark > 0) { \
+        DATA_STACK_POP(state, state->mark, (lastmark+1)*sizeof(void*), 1); \
+    } while (0)
+#define MARK_POP_KEEP(lastmark) \
+    do if (lastmark > 0) { \
+        DATA_STACK_POP(state, state->mark, (lastmark+1)*sizeof(void*), 0); \
+    } while (0)
+#define MARK_POP_DISCARD(lastmark) \
+    do if (lastmark > 0) { \
+        DATA_STACK_POP_DISCARD(state, (lastmark+1)*sizeof(void*)); \
+    } while (0)
+
+#define JUMP_NONE            0
+#define JUMP_MAX_UNTIL_1     1
+#define JUMP_MAX_UNTIL_2     2
+#define JUMP_MAX_UNTIL_3     3
+#define JUMP_MIN_UNTIL_1     4
+#define JUMP_MIN_UNTIL_2     5
+#define JUMP_MIN_UNTIL_3     6
+#define JUMP_REPEAT          7
+#define JUMP_REPEAT_ONE_1    8
+#define JUMP_REPEAT_ONE_2    9
+#define JUMP_MIN_REPEAT_ONE  10
+#define JUMP_BRANCH          11
+#define JUMP_ASSERT          12
+#define JUMP_ASSERT_NOT      13
+
+#define DO_JUMP(jumpvalue, jumplabel, nextpattern) \
+    DATA_ALLOC(SRE(match_context), nextctx); \
+    nextctx->last_ctx_pos = ctx_pos; \
+    nextctx->jump = jumpvalue; \
+    nextctx->pattern = nextpattern; \
+    ctx_pos = alloc_pos; \
+    ctx = nextctx; \
+    goto entrance; \
+    jumplabel: \
+    while (0) /* gcc doesn't like labels at end of scopes */ \
+
+typedef struct {
+    Py_ssize_t last_ctx_pos;
+    Py_ssize_t jump;
+    SRE_CHAR* ptr;
+    SRE_CODE* pattern;
+    Py_ssize_t count;
+    Py_ssize_t lastmark;
+    Py_ssize_t lastindex;
+    union {
+        SRE_CODE chr;
+        SRE_REPEAT* rep;
+    } u;
+} SRE(match_context);
+
+/* check if string matches the given pattern.  returns <0 for
+   error, 0 for failure, and 1 for success */
+LOCAL(Py_ssize_t)
+SRE(match)(SRE_STATE* state, SRE_CODE* pattern)
+{
+    SRE_CHAR* end = (SRE_CHAR *)state->end;
+    Py_ssize_t alloc_pos, ctx_pos = -1;
+    Py_ssize_t i, ret = 0;
+    Py_ssize_t jump;
+    unsigned int sigcount=0;
+
+    SRE(match_context)* ctx;
+    SRE(match_context)* nextctx;
+
+    TRACE(("|%p|%p|ENTER\n", pattern, state->ptr));
+
+    DATA_ALLOC(SRE(match_context), ctx);
+    ctx->last_ctx_pos = -1;
+    ctx->jump = JUMP_NONE;
+    ctx->pattern = pattern;
+    ctx_pos = alloc_pos;
+
+entrance:
+
+    ctx->ptr = (SRE_CHAR *)state->ptr;
+
+    if (ctx->pattern[0] == SRE_OP_INFO) {
+        /* optimization info block */
+        /* <INFO> <1=skip> <2=flags> <3=min> ... */
+        if (ctx->pattern[3] && (Py_uintptr_t)(end - ctx->ptr) < ctx->pattern[3]) {
+            TRACE(("reject (got %" PY_FORMAT_SIZE_T "d chars, "
+                   "need %" PY_FORMAT_SIZE_T "d)\n",
+                   end - ctx->ptr, (Py_ssize_t) ctx->pattern[3]));
+            RETURN_FAILURE;
+        }
+        ctx->pattern += ctx->pattern[1] + 1;
+    }
+
+    for (;;) {
+        ++sigcount;
+        if ((0 == (sigcount & 0xfff)) && PyErr_CheckSignals())
+            RETURN_ERROR(SRE_ERROR_INTERRUPTED);
+
+        switch (*ctx->pattern++) {
+
+        case SRE_OP_MARK:
+            /* set mark */
+            /* <MARK> <gid> */
+            TRACE(("|%p|%p|MARK %d\n", ctx->pattern,
+                   ctx->ptr, ctx->pattern[0]));
+            i = ctx->pattern[0];
+            if (i & 1)
+                state->lastindex = i/2 + 1;
+            if (i > state->lastmark) {
+                /* state->lastmark is the highest valid index in the
+                   state->mark array.  If it is increased by more than 1,
+                   the intervening marks must be set to NULL to signal
+                   that these marks have not been encountered. */
+                Py_ssize_t j = state->lastmark + 1;
+                while (j < i)
+                    state->mark[j++] = NULL;
+                state->lastmark = i;
+            }
+            state->mark[i] = ctx->ptr;
+            ctx->pattern++;
+            break;
+
+        case SRE_OP_LITERAL:
+            /* match literal string */
+            /* <LITERAL> <code> */
+            TRACE(("|%p|%p|LITERAL %d\n", ctx->pattern,
+                   ctx->ptr, *ctx->pattern));
+            if (ctx->ptr >= end || (SRE_CODE) ctx->ptr[0] != ctx->pattern[0])
+                RETURN_FAILURE;
+            ctx->pattern++;
+            ctx->ptr++;
+            break;
+
+        case SRE_OP_NOT_LITERAL:
+            /* match anything that is not literal character */
+            /* <NOT_LITERAL> <code> */
+            TRACE(("|%p|%p|NOT_LITERAL %d\n", ctx->pattern,
+                   ctx->ptr, *ctx->pattern));
+            if (ctx->ptr >= end || (SRE_CODE) ctx->ptr[0] == ctx->pattern[0])
+                RETURN_FAILURE;
+            ctx->pattern++;
+            ctx->ptr++;
+            break;
+
+        case SRE_OP_SUCCESS:
+            /* end of pattern */
+            TRACE(("|%p|%p|SUCCESS\n", ctx->pattern, ctx->ptr));
+            state->ptr = ctx->ptr;
+            RETURN_SUCCESS;
+
+        case SRE_OP_AT:
+            /* match at given position */
+            /* <AT> <code> */
+            TRACE(("|%p|%p|AT %d\n", ctx->pattern, ctx->ptr, *ctx->pattern));
+            if (!SRE(at)(state, ctx->ptr, *ctx->pattern))
+                RETURN_FAILURE;
+            ctx->pattern++;
+            break;
+
+        case SRE_OP_CATEGORY:
+            /* match at given category */
+            /* <CATEGORY> <code> */
+            TRACE(("|%p|%p|CATEGORY %d\n", ctx->pattern,
+                   ctx->ptr, *ctx->pattern));
+            if (ctx->ptr >= end || !sre_category(ctx->pattern[0], ctx->ptr[0]))
+                RETURN_FAILURE;
+            ctx->pattern++;
+            ctx->ptr++;
+            break;
+
+        case SRE_OP_ANY:
+            /* match anything (except a newline) */
+            /* <ANY> */
+            TRACE(("|%p|%p|ANY\n", ctx->pattern, ctx->ptr));
+            if (ctx->ptr >= end || SRE_IS_LINEBREAK(ctx->ptr[0]))
+                RETURN_FAILURE;
+            ctx->ptr++;
+            break;
+
+        case SRE_OP_ANY_ALL:
+            /* match anything */
+            /* <ANY_ALL> */
+            TRACE(("|%p|%p|ANY_ALL\n", ctx->pattern, ctx->ptr));
+            if (ctx->ptr >= end)
+                RETURN_FAILURE;
+            ctx->ptr++;
+            break;
+
+        case SRE_OP_IN:
+            /* match set member (or non_member) */
+            /* <IN> <skip> <set> */
+            TRACE(("|%p|%p|IN\n", ctx->pattern, ctx->ptr));
+            if (ctx->ptr >= end || !SRE(charset)(ctx->pattern + 1, *ctx->ptr))
+                RETURN_FAILURE;
+            ctx->pattern += ctx->pattern[0];
+            ctx->ptr++;
+            break;
+
+        case SRE_OP_LITERAL_IGNORE:
+            TRACE(("|%p|%p|LITERAL_IGNORE %d\n",
+                   ctx->pattern, ctx->ptr, ctx->pattern[0]));
+            if (ctx->ptr >= end ||
+                state->lower(*ctx->ptr) != state->lower(*ctx->pattern))
+                RETURN_FAILURE;
+            ctx->pattern++;
+            ctx->ptr++;
+            break;
+
+        case SRE_OP_NOT_LITERAL_IGNORE:
+            TRACE(("|%p|%p|NOT_LITERAL_IGNORE %d\n",
+                   ctx->pattern, ctx->ptr, *ctx->pattern));
+            if (ctx->ptr >= end ||
+                state->lower(*ctx->ptr) == state->lower(*ctx->pattern))
+                RETURN_FAILURE;
+            ctx->pattern++;
+            ctx->ptr++;
+            break;
+
+        case SRE_OP_IN_IGNORE:
+            TRACE(("|%p|%p|IN_IGNORE\n", ctx->pattern, ctx->ptr));
+            if (ctx->ptr >= end
+                || !SRE(charset)(ctx->pattern+1,
+                                 (SRE_CODE)state->lower(*ctx->ptr)))
+                RETURN_FAILURE;
+            ctx->pattern += ctx->pattern[0];
+            ctx->ptr++;
+            break;
+
+        case SRE_OP_JUMP:
+        case SRE_OP_INFO:
+            /* jump forward */
+            /* <JUMP> <offset> */
+            TRACE(("|%p|%p|JUMP %d\n", ctx->pattern,
+                   ctx->ptr, ctx->pattern[0]));
+            ctx->pattern += ctx->pattern[0];
+            break;
+
+        case SRE_OP_BRANCH:
+            /* alternation */
+            /* <BRANCH> <0=skip> code <JUMP> ... <NULL> */
+            TRACE(("|%p|%p|BRANCH\n", ctx->pattern, ctx->ptr));
+            LASTMARK_SAVE();
+            ctx->u.rep = state->repeat;
+            if (ctx->u.rep)
+                MARK_PUSH(ctx->lastmark);
+            for (; ctx->pattern[0]; ctx->pattern += ctx->pattern[0]) {
+                if (ctx->pattern[1] == SRE_OP_LITERAL &&
+                    (ctx->ptr >= end ||
+                     (SRE_CODE) *ctx->ptr != ctx->pattern[2]))
+                    continue;
+                if (ctx->pattern[1] == SRE_OP_IN &&
+                    (ctx->ptr >= end ||
+                     !SRE(charset)(ctx->pattern + 3, (SRE_CODE) *ctx->ptr)))
+                    continue;
+                state->ptr = ctx->ptr;
+                DO_JUMP(JUMP_BRANCH, jump_branch, ctx->pattern+1);
+                if (ret) {
+                    if (ctx->u.rep)
+                        MARK_POP_DISCARD(ctx->lastmark);
+                    RETURN_ON_ERROR(ret);
+                    RETURN_SUCCESS;
+                }
+                if (ctx->u.rep)
+                    MARK_POP_KEEP(ctx->lastmark);
+                LASTMARK_RESTORE();
+            }
+            if (ctx->u.rep)
+                MARK_POP_DISCARD(ctx->lastmark);
+            RETURN_FAILURE;
+
+        case SRE_OP_REPEAT_ONE:
+            /* match repeated sequence (maximizing regexp) */
+
+            /* this operator only works if the repeated item is
+               exactly one character wide, and we're not already
+               collecting backtracking points.  for other cases,
+               use the MAX_REPEAT operator */
+
+            /* <REPEAT_ONE> <skip> <1=min> <2=max> item <SUCCESS> tail */
+
+            TRACE(("|%p|%p|REPEAT_ONE %d %d\n", ctx->pattern, ctx->ptr,
+                   ctx->pattern[1], ctx->pattern[2]));
+
+            if ((Py_ssize_t) ctx->pattern[1] > end - ctx->ptr)
+                RETURN_FAILURE; /* cannot match */
+
+            state->ptr = ctx->ptr;
+
+            ret = SRE(count)(state, ctx->pattern+3, ctx->pattern[2]);
+            RETURN_ON_ERROR(ret);
+            DATA_LOOKUP_AT(SRE(match_context), ctx, ctx_pos);
+            ctx->count = ret;
+            ctx->ptr += ctx->count;
+
+            /* when we arrive here, count contains the number of
+               matches, and ctx->ptr points to the tail of the target
+               string.  check if the rest of the pattern matches,
+               and backtrack if not. */
+
+            if (ctx->count < (Py_ssize_t) ctx->pattern[1])
+                RETURN_FAILURE;
+
+            if (ctx->pattern[ctx->pattern[0]] == SRE_OP_SUCCESS) {
+                /* tail is empty.  we're finished */
+                state->ptr = ctx->ptr;
+                RETURN_SUCCESS;
+            }
+
+            LASTMARK_SAVE();
+
+            if (ctx->pattern[ctx->pattern[0]] == SRE_OP_LITERAL) {
+                /* tail starts with a literal. skip positions where
+                   the rest of the pattern cannot possibly match */
+                ctx->u.chr = ctx->pattern[ctx->pattern[0]+1];
+                for (;;) {
+                    while (ctx->count >= (Py_ssize_t) ctx->pattern[1] &&
+                           (ctx->ptr >= end || *ctx->ptr != ctx->u.chr)) {
+                        ctx->ptr--;
+                        ctx->count--;
+                    }
+                    if (ctx->count < (Py_ssize_t) ctx->pattern[1])
+                        break;
+                    state->ptr = ctx->ptr;
+                    DO_JUMP(JUMP_REPEAT_ONE_1, jump_repeat_one_1,
+                            ctx->pattern+ctx->pattern[0]);
+                    if (ret) {
+                        RETURN_ON_ERROR(ret);
+                        RETURN_SUCCESS;
+                    }
+
+                    LASTMARK_RESTORE();
+
+                    ctx->ptr--;
+                    ctx->count--;
+                }
+
+            } else {
+                /* general case */
+                while (ctx->count >= (Py_ssize_t) ctx->pattern[1]) {
+                    state->ptr = ctx->ptr;
+                    DO_JUMP(JUMP_REPEAT_ONE_2, jump_repeat_one_2,
+                            ctx->pattern+ctx->pattern[0]);
+                    if (ret) {
+                        RETURN_ON_ERROR(ret);
+                        RETURN_SUCCESS;
+                    }
+                    ctx->ptr--;
+                    ctx->count--;
+                    LASTMARK_RESTORE();
+                }
+            }
+            RETURN_FAILURE;
+
+        case SRE_OP_MIN_REPEAT_ONE:
+            /* match repeated sequence (minimizing regexp) */
+
+            /* this operator only works if the repeated item is
+               exactly one character wide, and we're not already
+               collecting backtracking points.  for other cases,
+               use the MIN_REPEAT operator */
+
+            /* <MIN_REPEAT_ONE> <skip> <1=min> <2=max> item <SUCCESS> tail */
+
+            TRACE(("|%p|%p|MIN_REPEAT_ONE %d %d\n", ctx->pattern, ctx->ptr,
+                   ctx->pattern[1], ctx->pattern[2]));
+
+            if ((Py_ssize_t) ctx->pattern[1] > end - ctx->ptr)
+                RETURN_FAILURE; /* cannot match */
+
+            state->ptr = ctx->ptr;
+
+            if (ctx->pattern[1] == 0)
+                ctx->count = 0;
+            else {
+                /* count using pattern min as the maximum */
+                ret = SRE(count)(state, ctx->pattern+3, ctx->pattern[1]);
+                RETURN_ON_ERROR(ret);
+                DATA_LOOKUP_AT(SRE(match_context), ctx, ctx_pos);
+                if (ret < (Py_ssize_t) ctx->pattern[1])
+                    /* didn't match minimum number of times */
+                    RETURN_FAILURE;
+                /* advance past minimum matches of repeat */
+                ctx->count = ret;
+                ctx->ptr += ctx->count;
+            }
+
+            if (ctx->pattern[ctx->pattern[0]] == SRE_OP_SUCCESS) {
+                /* tail is empty.  we're finished */
+                state->ptr = ctx->ptr;
+                RETURN_SUCCESS;
+
+            } else {
+                /* general case */
+                LASTMARK_SAVE();
+                while ((Py_ssize_t)ctx->pattern[2] == SRE_MAXREPEAT
+                       || ctx->count <= (Py_ssize_t)ctx->pattern[2]) {
+                    state->ptr = ctx->ptr;
+                    DO_JUMP(JUMP_MIN_REPEAT_ONE,jump_min_repeat_one,
+                            ctx->pattern+ctx->pattern[0]);
+                    if (ret) {
+                        RETURN_ON_ERROR(ret);
+                        RETURN_SUCCESS;
+                    }
+                    state->ptr = ctx->ptr;
+                    ret = SRE(count)(state, ctx->pattern+3, 1);
+                    RETURN_ON_ERROR(ret);
+                    DATA_LOOKUP_AT(SRE(match_context), ctx, ctx_pos);
+                    if (ret == 0)
+                        break;
+                    assert(ret == 1);
+                    ctx->ptr++;
+                    ctx->count++;
+                    LASTMARK_RESTORE();
+                }
+            }
+            RETURN_FAILURE;
+
+        case SRE_OP_REPEAT:
+            /* create repeat context.  all the hard work is done
+               by the UNTIL operator (MAX_UNTIL, MIN_UNTIL) */
+            /* <REPEAT> <skip> <1=min> <2=max> item <UNTIL> tail */
+            TRACE(("|%p|%p|REPEAT %d %d\n", ctx->pattern, ctx->ptr,
+                   ctx->pattern[1], ctx->pattern[2]));
+
+            /* install new repeat context */
+            ctx->u.rep = (SRE_REPEAT*) PyObject_MALLOC(sizeof(*ctx->u.rep));
+            if (!ctx->u.rep) {
+                PyErr_NoMemory();
+                RETURN_FAILURE;
+            }
+            ctx->u.rep->count = -1;
+            ctx->u.rep->pattern = ctx->pattern;
+            ctx->u.rep->prev = state->repeat;
+            ctx->u.rep->last_ptr = NULL;
+            state->repeat = ctx->u.rep;
+
+            state->ptr = ctx->ptr;
+            DO_JUMP(JUMP_REPEAT, jump_repeat, ctx->pattern+ctx->pattern[0]);
+            state->repeat = ctx->u.rep->prev;
+            PyObject_FREE(ctx->u.rep);
+
+            if (ret) {
+                RETURN_ON_ERROR(ret);
+                RETURN_SUCCESS;
+            }
+            RETURN_FAILURE;
+
+        case SRE_OP_MAX_UNTIL:
+            /* maximizing repeat */
+            /* <REPEAT> <skip> <1=min> <2=max> item <MAX_UNTIL> tail */
+
+            /* FIXME: we probably need to deal with zero-width
+               matches in here... */
+
+            ctx->u.rep = state->repeat;
+            if (!ctx->u.rep)
+                RETURN_ERROR(SRE_ERROR_STATE);
+
+            state->ptr = ctx->ptr;
+
+            ctx->count = ctx->u.rep->count+1;
+
+            TRACE(("|%p|%p|MAX_UNTIL %" PY_FORMAT_SIZE_T "d\n", ctx->pattern,
+                   ctx->ptr, ctx->count));
+
+            if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
+                /* not enough matches */
+                ctx->u.rep->count = ctx->count;
+                DO_JUMP(JUMP_MAX_UNTIL_1, jump_max_until_1,
+                        ctx->u.rep->pattern+3);
+                if (ret) {
+                    RETURN_ON_ERROR(ret);
+                    RETURN_SUCCESS;
+                }
+                ctx->u.rep->count = ctx->count-1;
+                state->ptr = ctx->ptr;
+                RETURN_FAILURE;
+            }
+
+            if ((ctx->count < (Py_ssize_t) ctx->u.rep->pattern[2] ||
+                ctx->u.rep->pattern[2] == SRE_MAXREPEAT) &&
+                state->ptr != ctx->u.rep->last_ptr) {
+                /* we may have enough matches, but if we can
+                   match another item, do so */
+                ctx->u.rep->count = ctx->count;
+                LASTMARK_SAVE();
+                MARK_PUSH(ctx->lastmark);
+                /* zero-width match protection */
+                DATA_PUSH(&ctx->u.rep->last_ptr);
+                ctx->u.rep->last_ptr = state->ptr;
+                DO_JUMP(JUMP_MAX_UNTIL_2, jump_max_until_2,
+                        ctx->u.rep->pattern+3);
+                DATA_POP(&ctx->u.rep->last_ptr);
+                if (ret) {
+                    MARK_POP_DISCARD(ctx->lastmark);
+                    RETURN_ON_ERROR(ret);
+                    RETURN_SUCCESS;
+                }
+                MARK_POP(ctx->lastmark);
+                LASTMARK_RESTORE();
+                ctx->u.rep->count = ctx->count-1;
+                state->ptr = ctx->ptr;
+            }
+
+            /* cannot match more repeated items here.  make sure the
+               tail matches */
+            state->repeat = ctx->u.rep->prev;
+            DO_JUMP(JUMP_MAX_UNTIL_3, jump_max_until_3, ctx->pattern);
+            RETURN_ON_SUCCESS(ret);
+            state->repeat = ctx->u.rep;
+            state->ptr = ctx->ptr;
+            RETURN_FAILURE;
+
+        case SRE_OP_MIN_UNTIL:
+            /* minimizing repeat */
+            /* <REPEAT> <skip> <1=min> <2=max> item <MIN_UNTIL> tail */
+
+            ctx->u.rep = state->repeat;
+            if (!ctx->u.rep)
+                RETURN_ERROR(SRE_ERROR_STATE);
+
+            state->ptr = ctx->ptr;
+
+            ctx->count = ctx->u.rep->count+1;
+
+            TRACE(("|%p|%p|MIN_UNTIL %" PY_FORMAT_SIZE_T "d %p\n", ctx->pattern,
+                   ctx->ptr, ctx->count, ctx->u.rep->pattern));
+
+            if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
+                /* not enough matches */
+                ctx->u.rep->count = ctx->count;
+                DO_JUMP(JUMP_MIN_UNTIL_1, jump_min_until_1,
+                        ctx->u.rep->pattern+3);
+                if (ret) {
+                    RETURN_ON_ERROR(ret);
+                    RETURN_SUCCESS;
+                }
+                ctx->u.rep->count = ctx->count-1;
+                state->ptr = ctx->ptr;
+                RETURN_FAILURE;
+            }
+
+            LASTMARK_SAVE();
+
+            /* see if the tail matches */
+            state->repeat = ctx->u.rep->prev;
+            DO_JUMP(JUMP_MIN_UNTIL_2, jump_min_until_2, ctx->pattern);
+            if (ret) {
+                RETURN_ON_ERROR(ret);
+                RETURN_SUCCESS;
+            }
+
+            state->repeat = ctx->u.rep;
+            state->ptr = ctx->ptr;
+
+            LASTMARK_RESTORE();
+
+            if ((ctx->count >= (Py_ssize_t) ctx->u.rep->pattern[2]
+                && ctx->u.rep->pattern[2] != SRE_MAXREPEAT) ||
+                state->ptr == ctx->u.rep->last_ptr)
+                RETURN_FAILURE;
+
+            ctx->u.rep->count = ctx->count;
+            /* zero-width match protection */
+            DATA_PUSH(&ctx->u.rep->last_ptr);
+            ctx->u.rep->last_ptr = state->ptr;
+            DO_JUMP(JUMP_MIN_UNTIL_3,jump_min_until_3,
+                    ctx->u.rep->pattern+3);
+            DATA_POP(&ctx->u.rep->last_ptr);
+            if (ret) {
+                RETURN_ON_ERROR(ret);
+                RETURN_SUCCESS;
+            }
+            ctx->u.rep->count = ctx->count-1;
+            state->ptr = ctx->ptr;
+            RETURN_FAILURE;
+
+        case SRE_OP_GROUPREF:
+            /* match backreference */
+            TRACE(("|%p|%p|GROUPREF %d\n", ctx->pattern,
+                   ctx->ptr, ctx->pattern[0]));
+            i = ctx->pattern[0];
+            {
+                Py_ssize_t groupref = i+i;
+                if (groupref >= state->lastmark) {
+                    RETURN_FAILURE;
+                } else {
+                    SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
+                    SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
+                    if (!p || !e || e < p)
+                        RETURN_FAILURE;
+                    while (p < e) {
+                        if (ctx->ptr >= end || *ctx->ptr != *p)
+                            RETURN_FAILURE;
+                        p++;
+                        ctx->ptr++;
+                    }
+                }
+            }
+            ctx->pattern++;
+            break;
+
+        case SRE_OP_GROUPREF_IGNORE:
+            /* match backreference */
+            TRACE(("|%p|%p|GROUPREF_IGNORE %d\n", ctx->pattern,
+                   ctx->ptr, ctx->pattern[0]));
+            i = ctx->pattern[0];
+            {
+                Py_ssize_t groupref = i+i;
+                if (groupref >= state->lastmark) {
+                    RETURN_FAILURE;
+                } else {
+                    SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
+                    SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
+                    if (!p || !e || e < p)
+                        RETURN_FAILURE;
+                    while (p < e) {
+                        if (ctx->ptr >= end ||
+                            state->lower(*ctx->ptr) != state->lower(*p))
+                            RETURN_FAILURE;
+                        p++;
+                        ctx->ptr++;
+                    }
+                }
+            }
+            ctx->pattern++;
+            break;
+
+        case SRE_OP_GROUPREF_EXISTS:
+            TRACE(("|%p|%p|GROUPREF_EXISTS %d\n", ctx->pattern,
+                   ctx->ptr, ctx->pattern[0]));
+            /* <GROUPREF_EXISTS> <group> <skip> codeyes <JUMP> codeno ... */
+            i = ctx->pattern[0];
+            {
+                Py_ssize_t groupref = i+i;
+                if (groupref >= state->lastmark) {
+                    ctx->pattern += ctx->pattern[1];
+                    break;
+                } else {
+                    SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
+                    SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
+                    if (!p || !e || e < p) {
+                        ctx->pattern += ctx->pattern[1];
+                        break;
+                    }
+                }
+            }
+            ctx->pattern += 2;
+            break;
+
+        case SRE_OP_ASSERT:
+            /* assert subpattern */
+            /* <ASSERT> <skip> <back> <pattern> */
+            TRACE(("|%p|%p|ASSERT %d\n", ctx->pattern,
+                   ctx->ptr, ctx->pattern[1]));
+            state->ptr = ctx->ptr - ctx->pattern[1];
+            if (state->ptr < state->beginning)
+                RETURN_FAILURE;
+            DO_JUMP(JUMP_ASSERT, jump_assert, ctx->pattern+2);
+            RETURN_ON_FAILURE(ret);
+            ctx->pattern += ctx->pattern[0];
+            break;
+
+        case SRE_OP_ASSERT_NOT:
+            /* assert not subpattern */
+            /* <ASSERT_NOT> <skip> <back> <pattern> */
+            TRACE(("|%p|%p|ASSERT_NOT %d\n", ctx->pattern,
+                   ctx->ptr, ctx->pattern[1]));
+            state->ptr = ctx->ptr - ctx->pattern[1];
+            if (state->ptr >= state->beginning) {
+                DO_JUMP(JUMP_ASSERT_NOT, jump_assert_not, ctx->pattern+2);
+                if (ret) {
+                    RETURN_ON_ERROR(ret);
+                    RETURN_FAILURE;
+                }
+            }
+            ctx->pattern += ctx->pattern[0];
+            break;
+
+        case SRE_OP_FAILURE:
+            /* immediate failure */
+            TRACE(("|%p|%p|FAILURE\n", ctx->pattern, ctx->ptr));
+            RETURN_FAILURE;
+
+        default:
+            TRACE(("|%p|%p|UNKNOWN %d\n", ctx->pattern, ctx->ptr,
+                   ctx->pattern[-1]));
+            RETURN_ERROR(SRE_ERROR_ILLEGAL);
+        }
+    }
+
+exit:
+    ctx_pos = ctx->last_ctx_pos;
+    jump = ctx->jump;
+    DATA_POP_DISCARD(ctx);
+    if (ctx_pos == -1)
+        return ret;
+    DATA_LOOKUP_AT(SRE(match_context), ctx, ctx_pos);
+
+    switch (jump) {
+        case JUMP_MAX_UNTIL_2:
+            TRACE(("|%p|%p|JUMP_MAX_UNTIL_2\n", ctx->pattern, ctx->ptr));
+            goto jump_max_until_2;
+        case JUMP_MAX_UNTIL_3:
+            TRACE(("|%p|%p|JUMP_MAX_UNTIL_3\n", ctx->pattern, ctx->ptr));
+            goto jump_max_until_3;
+        case JUMP_MIN_UNTIL_2:
+            TRACE(("|%p|%p|JUMP_MIN_UNTIL_2\n", ctx->pattern, ctx->ptr));
+            goto jump_min_until_2;
+        case JUMP_MIN_UNTIL_3:
+            TRACE(("|%p|%p|JUMP_MIN_UNTIL_3\n", ctx->pattern, ctx->ptr));
+            goto jump_min_until_3;
+        case JUMP_BRANCH:
+            TRACE(("|%p|%p|JUMP_BRANCH\n", ctx->pattern, ctx->ptr));
+            goto jump_branch;
+        case JUMP_MAX_UNTIL_1:
+            TRACE(("|%p|%p|JUMP_MAX_UNTIL_1\n", ctx->pattern, ctx->ptr));
+            goto jump_max_until_1;
+        case JUMP_MIN_UNTIL_1:
+            TRACE(("|%p|%p|JUMP_MIN_UNTIL_1\n", ctx->pattern, ctx->ptr));
+            goto jump_min_until_1;
+        case JUMP_REPEAT:
+            TRACE(("|%p|%p|JUMP_REPEAT\n", ctx->pattern, ctx->ptr));
+            goto jump_repeat;
+        case JUMP_REPEAT_ONE_1:
+            TRACE(("|%p|%p|JUMP_REPEAT_ONE_1\n", ctx->pattern, ctx->ptr));
+            goto jump_repeat_one_1;
+        case JUMP_REPEAT_ONE_2:
+            TRACE(("|%p|%p|JUMP_REPEAT_ONE_2\n", ctx->pattern, ctx->ptr));
+            goto jump_repeat_one_2;
+        case JUMP_MIN_REPEAT_ONE:
+            TRACE(("|%p|%p|JUMP_MIN_REPEAT_ONE\n", ctx->pattern, ctx->ptr));
+            goto jump_min_repeat_one;
+        case JUMP_ASSERT:
+            TRACE(("|%p|%p|JUMP_ASSERT\n", ctx->pattern, ctx->ptr));
+            goto jump_assert;
+        case JUMP_ASSERT_NOT:
+            TRACE(("|%p|%p|JUMP_ASSERT_NOT\n", ctx->pattern, ctx->ptr));
+            goto jump_assert_not;
+        case JUMP_NONE:
+            TRACE(("|%p|%p|RETURN %" PY_FORMAT_SIZE_T "d\n", ctx->pattern,
+                   ctx->ptr, ret));
+            break;
+    }
+
+    return ret; /* should never get here */
+}
+
+LOCAL(Py_ssize_t)
+SRE(search)(SRE_STATE* state, SRE_CODE* pattern)
+{
+    SRE_CHAR* ptr = (SRE_CHAR *)state->start;
+    SRE_CHAR* end = (SRE_CHAR *)state->end;
+    Py_ssize_t status = 0;
+    Py_ssize_t prefix_len = 0;
+    Py_ssize_t prefix_skip = 0;
+    SRE_CODE* prefix = NULL;
+    SRE_CODE* charset = NULL;
+    SRE_CODE* overlap = NULL;
+    int flags = 0;
+
+    if (pattern[0] == SRE_OP_INFO) {
+        /* optimization info block */
+        /* <INFO> <1=skip> <2=flags> <3=min> <4=max> <5=prefix info>  */
+
+        flags = pattern[2];
+
+        if (pattern[3] > 1) {
+            /* adjust end point (but make sure we leave at least one
+               character in there, so literal search will work) */
+            end -= pattern[3] - 1;
+            if (end <= ptr)
+                end = ptr;
+        }
+
+        if (flags & SRE_INFO_PREFIX) {
+            /* pattern starts with a known prefix */
+            /* <length> <skip> <prefix data> <overlap data> */
+            prefix_len = pattern[5];
+            prefix_skip = pattern[6];
+            prefix = pattern + 7;
+            overlap = prefix + prefix_len - 1;
+        } else if (flags & SRE_INFO_CHARSET)
+            /* pattern starts with a character from a known set */
+            /* <charset> */
+            charset = pattern + 5;
+
+        pattern += 1 + pattern[1];
+    }
+
+    TRACE(("prefix = %p %" PY_FORMAT_SIZE_T "d %" PY_FORMAT_SIZE_T "d\n",
+           prefix, prefix_len, prefix_skip));
+    TRACE(("charset = %p\n", charset));
+
+#if defined(USE_FAST_SEARCH)
+    if (prefix_len > 1) {
+        /* pattern starts with a known prefix.  use the overlap
+           table to skip forward as fast as we possibly can */
+        Py_ssize_t i = 0;
+
+        end = (SRE_CHAR *)state->end;
+        if (prefix_len > end - ptr)
+            return 0;
+#if SIZEOF_SRE_CHAR < 4
+        for (i = 0; i < prefix_len; i++)
+            if ((SRE_CODE)(SRE_CHAR) prefix[i] != prefix[i])
+                return 0; /* literal can't match: doesn't fit in char width */
+#endif
+        while (ptr < end) {
+            SRE_CHAR c = (SRE_CHAR) prefix[0];
+            while (*ptr++ != c) {
+                if (ptr >= end)
+                    return 0;
+            }
+            if (ptr >= end)
+                return 0;
+
+            i = 1;
+            do {
+                if (*ptr == (SRE_CHAR) prefix[i]) {
+                    if (++i != prefix_len) {
+                        if (++ptr >= end)
+                            return 0;
+                        continue;
+                    }
+                    /* found a potential match */
+                    TRACE(("|%p|%p|SEARCH SCAN\n", pattern, ptr));
+                    state->start = ptr - (prefix_len - 1);
+                    state->ptr = ptr - (prefix_len - prefix_skip - 1);
+                    if (flags & SRE_INFO_LITERAL)
+                        return 1; /* we got all of it */
+                    status = SRE(match)(state, pattern + 2*prefix_skip);
+                    if (status != 0)
+                        return status;
+                    /* close but no cigar -- try again */
+                    if (++ptr >= end)
+                        return 0;
+                }
+                i = overlap[i];
+            } while (i != 0);
+        }
+        return 0;
+    }
+#endif
+
+    if (pattern[0] == SRE_OP_LITERAL) {
+        /* pattern starts with a literal character.  this is used
+           for short prefixes, and if fast search is disabled */
+        SRE_CHAR c = (SRE_CHAR) pattern[1];
+#if SIZEOF_SRE_CHAR < 4
+        if ((SRE_CODE) c != pattern[1])
+            return 0; /* literal can't match: doesn't fit in char width */
+#endif
+        end = (SRE_CHAR *)state->end;
+        while (ptr < end) {
+            while (*ptr != c) {
+                if (++ptr >= end)
+                    return 0;
+            }
+            TRACE(("|%p|%p|SEARCH LITERAL\n", pattern, ptr));
+            state->start = ptr;
+            state->ptr = ++ptr;
+            if (flags & SRE_INFO_LITERAL)
+                return 1; /* we got all of it */
+            status = SRE(match)(state, pattern + 2);
+            if (status != 0)
+                break;
+        }
+    } else if (charset) {
+        /* pattern starts with a character from a known set */
+        end = (SRE_CHAR *)state->end;
+        for (;;) {
+            while (ptr < end && !SRE(charset)(charset, *ptr))
+                ptr++;
+            if (ptr >= end)
+                return 0;
+            TRACE(("|%p|%p|SEARCH CHARSET\n", pattern, ptr));
+            state->start = ptr;
+            state->ptr = ptr;
+            status = SRE(match)(state, pattern);
+            if (status != 0)
+                break;
+            ptr++;
+        }
+    } else
+        /* general case */
+        while (ptr <= end) {
+            TRACE(("|%p|%p|SEARCH\n", pattern, ptr));
+            state->start = state->ptr = ptr++;
+            status = SRE(match)(state, pattern);
+            if (status != 0)
+                break;
+        }
+
+    return status;
+}
+
+#undef SRE_CHAR
+#undef SIZEOF_SRE_CHAR
+#undef SRE
+
+/* vim:ts=4:sw=4:et
+*/
diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c
index 036fdb9..cdb4ffc 100644
--- a/Modules/symtablemodule.c
+++ b/Modules/symtablemodule.c
@@ -34,7 +34,7 @@
     Py_DECREF(filename);
     if (st == NULL)
         return NULL;
-    t = st->st_blocks;
+    t = (PyObject *)st->st_top;
     Py_INCREF(t);
     PyMem_Free((void *)st->st_future);
     PySymtable_Free(st);
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 8d161d4..2e48007 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -642,6 +642,13 @@
             Py_DECREF(format);
             return NULL;
         }
+        if ((outbuf[1] == 'y') && buf.tm_year < 0)
+        {
+            PyErr_SetString(PyExc_ValueError,
+                        "format %y requires year >= 1900 on Windows");
+            Py_DECREF(format);
+            return NULL;
+        }
     }
 #endif
 
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index 75c1626..5097d44 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -107,24 +107,62 @@
 
 /* --- Module API --------------------------------------------------------- */
 
+/*[clinic]
+module unicodedata
+unicodedata.decimal
+
+    unichr: object(type='str')
+    default: object=NULL
+    /
+
+Converts a Unicode character into its equivalent decimal value.
+
+Returns the decimal value assigned to the Unicode character unichr
+as integer. If no such value is defined, default is returned, or, if
+not given, ValueError is raised.
+[clinic]*/
+
 PyDoc_STRVAR(unicodedata_decimal__doc__,
-"decimal(unichr[, default])\n\
-\n\
-Returns the decimal value assigned to the Unicode character unichr\n\
-as integer. If no such value is defined, default is returned, or, if\n\
-not given, ValueError is raised.");
+"Converts a Unicode character into its equivalent decimal value.\n"
+"\n"
+"unicodedata.decimal(unichr, default=None)\n"
+"\n"
+"Returns the decimal value assigned to the Unicode character unichr\n"
+"as integer. If no such value is defined, default is returned, or, if\n"
+"not given, ValueError is raised.");
+
+#define UNICODEDATA_DECIMAL_METHODDEF    \
+    {"decimal", (PyCFunction)unicodedata_decimal, METH_VARARGS, unicodedata_decimal__doc__},
+
+static PyObject *
+unicodedata_decimal_impl(PyObject *self, PyObject *unichr, PyObject *default_value);
 
 static PyObject *
 unicodedata_decimal(PyObject *self, PyObject *args)
 {
-    PyUnicodeObject *v;
-    PyObject *defobj = NULL;
+    PyObject *return_value = NULL;
+    PyObject *unichr;
+    PyObject *default_value = NULL;
+
+    if (!PyArg_ParseTuple(args,
+        "O!|O:decimal",
+        &PyUnicode_Type, &unichr, &default_value))
+        goto exit;
+    return_value = unicodedata_decimal_impl(self, unichr, default_value);
+
+exit:
+    return return_value;
+}
+
+static PyObject *
+unicodedata_decimal_impl(PyObject *self, PyObject *unichr, PyObject *default_value)
+/*[clinic checksum: 76c8d1c3dbee495d4cfd86ca6829543a3129344a]*/
+{
+    PyUnicodeObject *v = (PyUnicodeObject *)unichr;
     int have_old = 0;
     long rc;
     Py_UCS4 c;
 
-    if (!PyArg_ParseTuple(args, "O!|O:decimal", &PyUnicode_Type, &v, &defobj))
-        return NULL;
     c = getuchar(v);
     if (c == (Py_UCS4)-1)
         return NULL;
@@ -145,14 +183,14 @@
     if (!have_old)
         rc = Py_UNICODE_TODECIMAL(c);
     if (rc < 0) {
-        if (defobj == NULL) {
+        if (default_value == NULL) {
             PyErr_SetString(PyExc_ValueError,
                             "not a decimal");
             return NULL;
         }
         else {
-            Py_INCREF(defobj);
-            return defobj;
+            Py_INCREF(default_value);
+            return default_value;
         }
     }
     return PyLong_FromLong(rc);
@@ -1250,7 +1288,7 @@
 /* XXX Add doc strings. */
 
 static PyMethodDef unicodedata_functions[] = {
-    {"decimal", unicodedata_decimal, METH_VARARGS, unicodedata_decimal__doc__},
+    UNICODEDATA_DECIMAL_METHODDEF
     {"digit", unicodedata_digit, METH_VARARGS, unicodedata_digit__doc__},
     {"numeric", unicodedata_numeric, METH_VARARGS, unicodedata_numeric__doc__},
     {"category", unicodedata_category, METH_VARARGS,
@@ -1322,12 +1360,10 @@
 "This module provides access to the Unicode Character Database which\n\
 defines character properties for all Unicode characters. The data in\n\
 this database is based on the UnicodeData.txt file version\n\
-6.0.0 which is publically available from ftp://ftp.unicode.org/.\n\
+" UNIDATA_VERSION " which is publically available from ftp://ftp.unicode.org/.\n\
 \n\
 The module uses the same names and symbols as defined by the\n\
-UnicodeData File Format 6.0.0 (see\n\
-http://www.unicode.org/reports/tr44/tr44-6.html).");
-
+UnicodeData File Format " UNIDATA_VERSION ".");
 
 static struct PyModuleDef unicodedatamodule = {
         PyModuleDef_HEAD_INIT,
diff --git a/Modules/unicodedata_db.h b/Modules/unicodedata_db.h
index 93a09cd..ec11fa1 100644
--- a/Modules/unicodedata_db.h
+++ b/Modules/unicodedata_db.h
@@ -1,6 +1,6 @@
 /* this file was generated by Tools/unicode/makeunicodedata.py 3.2 */
 
-#define UNIDATA_VERSION "6.2.0"
+#define UNIDATA_VERSION "6.3.0"
 /* a list of unique database records */
 const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
     {0, 0, 0, 0, 0, 0},
@@ -120,6 +120,7 @@
     {4, 30, 14, 0, 5, 0},
     {4, 31, 14, 0, 5, 0},
     {4, 32, 14, 0, 5, 0},
+    {14, 0, 5, 0, 5, 0},
     {19, 0, 5, 0, 5, 0},
     {19, 0, 5, 0, 5, 10},
     {18, 0, 5, 0, 5, 0},
@@ -136,7 +137,6 @@
     {19, 0, 5, 0, 5, 136},
     {7, 0, 9, 0, 5, 0},
     {30, 0, 5, 0, 5, 0},
-    {14, 0, 5, 0, 5, 0},
     {4, 36, 14, 0, 5, 0},
     {4, 0, 14, 0, 5, 0},
     {7, 0, 4, 0, 5, 0},
@@ -177,6 +177,7 @@
     {19, 0, 1, 0, 5, 80},
     {10, 0, 18, 0, 5, 0},
     {8, 0, 1, 0, 5, 0},
+    {14, 0, 15, 0, 5, 0},
     {5, 9, 1, 0, 5, 0},
     {4, 1, 14, 0, 5, 0},
     {4, 234, 14, 0, 5, 0},
@@ -190,7 +191,6 @@
     {29, 0, 19, 0, 5, 170},
     {10, 0, 18, 0, 5, 170},
     {10, 0, 18, 0, 5, 136},
-    {14, 0, 15, 0, 5, 0},
     {14, 0, 1, 0, 5, 0},
     {14, 0, 4, 0, 5, 0},
     {21, 0, 19, 0, 4, 0},
@@ -213,6 +213,10 @@
     {26, 0, 11, 0, 5, 136},
     {20, 0, 19, 0, 5, 0},
     {27, 0, 13, 0, 5, 0},
+    {14, 0, 20, 0, 5, 0},
+    {14, 0, 21, 0, 5, 0},
+    {14, 0, 22, 0, 5, 0},
+    {14, 0, 23, 0, 5, 0},
     {9, 0, 9, 0, 5, 136},
     {27, 0, 10, 0, 5, 136},
     {27, 0, 19, 0, 5, 136},
@@ -638,6 +642,10 @@
     "S",
     "WS",
     "ON",
+    "LRI",
+    "RLI",
+    "FSI",
+    "PDI",
     NULL
 };
 const char *_PyUnicode_EastAsianWidthNames[] = {
@@ -1273,35 +1281,35 @@
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 
     0, 107, 107, 107, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, 
     108, 108, 108, 0, 78, 78, 109, 110, 110, 111, 112, 113, 26, 26, 81, 81, 
-    81, 81, 81, 81, 81, 81, 114, 115, 116, 113, 0, 0, 113, 113, 117, 117, 
-    118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 120, 
-    121, 122, 114, 115, 116, 123, 124, 125, 125, 126, 86, 81, 81, 81, 81, 81, 
-    86, 81, 81, 86, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 110, 
-    128, 128, 113, 117, 117, 129, 117, 117, 117, 117, 130, 130, 130, 130, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 118, 117, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 118, 113, 117, 81, 81, 81, 81, 81, 81, 81, 
-    108, 26, 81, 81, 81, 81, 86, 81, 119, 119, 81, 81, 26, 86, 81, 81, 86, 
-    117, 117, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 117, 117, 
-    117, 132, 132, 117, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 
-    113, 113, 113, 113, 0, 133, 117, 134, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 81, 86, 81, 81, 86, 81, 81, 
+    81, 81, 81, 81, 81, 81, 114, 115, 116, 113, 117, 0, 113, 113, 118, 118, 
+    119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 121, 
+    122, 123, 114, 115, 116, 124, 125, 126, 126, 127, 86, 81, 81, 81, 81, 81, 
+    86, 81, 81, 86, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 110, 
+    129, 129, 113, 118, 118, 130, 118, 118, 118, 118, 131, 131, 131, 131, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 119, 118, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 119, 113, 118, 81, 81, 81, 81, 81, 81, 81, 
+    108, 26, 81, 81, 81, 81, 86, 81, 120, 120, 81, 81, 26, 86, 81, 81, 86, 
+    118, 118, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 118, 118, 
+    118, 133, 133, 118, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 
+    113, 113, 113, 113, 0, 117, 118, 134, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 81, 86, 81, 81, 86, 81, 81, 
     86, 86, 86, 81, 86, 86, 81, 86, 81, 81, 81, 86, 81, 86, 81, 86, 81, 86, 
-    81, 81, 0, 0, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 
-    117, 117, 117, 117, 117, 117, 117, 135, 135, 135, 135, 135, 135, 135, 
-    135, 135, 135, 135, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 
+    81, 81, 0, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 
+    118, 118, 118, 118, 118, 118, 118, 135, 135, 135, 135, 135, 135, 135, 
+    135, 135, 135, 135, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 
     136, 136, 136, 136, 136, 136, 136, 136, 136, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 81, 
@@ -1314,11 +1322,11 @@
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 86, 86, 86, 
     0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 117, 
-    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 118, 
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 
-    81, 86, 81, 81, 86, 81, 81, 81, 86, 86, 86, 120, 121, 122, 81, 81, 81, 
+    81, 86, 81, 81, 86, 81, 81, 81, 86, 86, 86, 121, 122, 123, 81, 81, 81, 
     86, 81, 81, 86, 86, 81, 81, 81, 81, 0, 135, 135, 135, 139, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 48, 
@@ -1521,7 +1529,7 @@
     83, 53, 83, 83, 83, 85, 48, 81, 0, 0, 144, 144, 144, 144, 144, 144, 144, 
     144, 144, 144, 0, 0, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 153, 
     153, 153, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138, 84, 138, 138, 
-    138, 138, 135, 135, 135, 172, 0, 144, 144, 144, 144, 144, 144, 144, 144, 
+    138, 138, 135, 135, 135, 174, 0, 144, 144, 144, 144, 144, 144, 144, 144, 
     144, 144, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
@@ -1550,7 +1558,7 @@
     0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
-    48, 48, 48, 48, 48, 81, 86, 139, 139, 139, 0, 0, 83, 83, 48, 48, 48, 48, 
+    48, 48, 48, 48, 48, 81, 86, 139, 139, 135, 0, 0, 83, 83, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 139, 135, 
@@ -1566,17 +1574,17 @@
     140, 48, 140, 48, 140, 48, 140, 48, 48, 48, 140, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 146, 135, 135, 135, 135, 135, 
-    147, 135, 147, 139, 139, 147, 147, 135, 147, 174, 48, 48, 48, 48, 48, 48, 
+    147, 135, 147, 139, 139, 147, 147, 135, 147, 175, 48, 48, 48, 48, 48, 48, 
     48, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 83, 83, 
     83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 86, 81, 
     81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 135, 
     135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 135, 135, 
-    135, 135, 139, 139, 135, 135, 174, 142, 139, 139, 48, 48, 144, 144, 144, 
+    135, 135, 139, 139, 135, 135, 175, 142, 139, 139, 48, 48, 144, 144, 144, 
     144, 144, 144, 144, 144, 144, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 
-    139, 135, 135, 139, 139, 139, 135, 139, 135, 135, 135, 174, 174, 0, 0, 0, 
+    139, 135, 135, 139, 139, 139, 135, 139, 135, 135, 135, 175, 175, 0, 0, 0, 
     0, 0, 0, 0, 0, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 139, 139, 139, 139, 139, 
@@ -1588,8 +1596,8 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 
-    83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 83, 175, 86, 86, 86, 86, 86, 
-    81, 81, 86, 86, 86, 86, 81, 139, 175, 175, 175, 175, 175, 175, 175, 48, 
+    83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 83, 176, 86, 86, 86, 86, 86, 
+    81, 81, 86, 86, 86, 86, 81, 139, 176, 176, 176, 176, 176, 176, 176, 48, 
     48, 48, 48, 86, 48, 48, 48, 48, 139, 139, 81, 48, 48, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 
@@ -1602,9 +1610,9 @@
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 51, 51, 51, 51, 51, 
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 81, 81, 86, 81, 
-    81, 81, 81, 81, 81, 81, 86, 81, 81, 176, 177, 86, 178, 81, 81, 81, 81, 
+    81, 81, 81, 81, 81, 81, 86, 81, 81, 177, 178, 86, 179, 81, 81, 81, 81, 
     81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 86, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 86, 
     81, 86, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 
     38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 
     38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 
@@ -1613,7 +1621,7 @@
     38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 
     38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 
     38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 
-    38, 43, 38, 43, 38, 43, 38, 43, 43, 43, 43, 43, 35, 180, 47, 47, 44, 47, 
+    38, 43, 38, 43, 38, 43, 38, 43, 43, 43, 43, 43, 35, 181, 47, 47, 44, 47, 
     38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 
     38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 
     38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 
@@ -1625,65 +1633,65 @@
     43, 43, 43, 43, 43, 43, 43, 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 43, 
     43, 43, 43, 0, 0, 38, 38, 38, 38, 38, 38, 0, 0, 43, 43, 43, 43, 43, 43, 
     43, 43, 0, 38, 0, 38, 0, 38, 0, 38, 43, 43, 43, 43, 43, 43, 43, 43, 38, 
-    38, 38, 38, 38, 38, 38, 38, 43, 181, 43, 181, 43, 181, 43, 181, 43, 181, 
-    43, 181, 43, 181, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 182, 182, 182, 
-    182, 182, 182, 182, 182, 43, 43, 43, 43, 43, 43, 43, 43, 182, 182, 182, 
-    182, 182, 182, 182, 182, 43, 43, 43, 43, 43, 43, 43, 43, 182, 182, 182, 
-    182, 182, 182, 182, 182, 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 183, 
-    182, 58, 181, 58, 58, 76, 43, 43, 43, 0, 43, 43, 38, 183, 38, 183, 182, 
-    76, 76, 76, 43, 43, 43, 181, 0, 0, 43, 43, 38, 38, 38, 183, 0, 76, 76, 
-    76, 43, 43, 43, 181, 43, 43, 43, 43, 38, 38, 38, 183, 38, 76, 184, 184, 
-    0, 0, 43, 43, 43, 0, 43, 43, 38, 183, 38, 183, 182, 184, 58, 0, 185, 185, 
-    186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 188, 189, 
+    38, 38, 38, 38, 38, 38, 38, 43, 182, 43, 182, 43, 182, 43, 182, 43, 182, 
+    43, 182, 43, 182, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 183, 183, 183, 
+    183, 183, 183, 183, 183, 43, 43, 43, 43, 43, 43, 43, 43, 183, 183, 183, 
+    183, 183, 183, 183, 183, 43, 43, 43, 43, 43, 43, 43, 43, 183, 183, 183, 
+    183, 183, 183, 183, 183, 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 184, 
+    183, 58, 182, 58, 58, 76, 43, 43, 43, 0, 43, 43, 38, 184, 38, 184, 183, 
+    76, 76, 76, 43, 43, 43, 182, 0, 0, 43, 43, 38, 38, 38, 184, 0, 76, 76, 
+    76, 43, 43, 43, 182, 43, 43, 43, 43, 38, 38, 38, 184, 38, 76, 185, 185, 
+    0, 0, 43, 43, 43, 0, 43, 43, 38, 184, 38, 184, 183, 185, 58, 0, 186, 186, 
+    187, 187, 187, 187, 187, 187, 187, 187, 187, 174, 174, 174, 188, 189, 
     190, 191, 84, 190, 190, 190, 22, 192, 193, 194, 195, 196, 193, 194, 195, 
     196, 22, 22, 22, 138, 197, 197, 197, 22, 198, 199, 200, 201, 202, 203, 
     204, 21, 205, 110, 205, 206, 207, 22, 192, 192, 138, 28, 36, 22, 192, 
     138, 197, 208, 208, 138, 138, 138, 209, 163, 164, 192, 192, 192, 138, 
     138, 138, 138, 138, 138, 138, 138, 78, 138, 208, 138, 138, 192, 138, 138, 
-    138, 138, 138, 138, 138, 186, 187, 187, 187, 187, 187, 0, 0, 0, 0, 0, 
-    187, 187, 187, 187, 187, 187, 210, 51, 0, 0, 34, 210, 210, 210, 210, 210, 
-    211, 211, 212, 213, 214, 215, 210, 34, 34, 34, 34, 210, 210, 210, 210, 
-    210, 211, 211, 212, 213, 214, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 
-    51, 51, 51, 0, 0, 0, 85, 85, 85, 85, 85, 85, 85, 85, 216, 217, 85, 85, 
-    23, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 175, 175, 81, 
-    81, 81, 81, 175, 175, 175, 81, 81, 82, 82, 82, 82, 81, 82, 82, 82, 175, 
-    175, 81, 86, 81, 175, 175, 86, 86, 86, 86, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 218, 218, 49, 219, 26, 219, 218, 49, 26, 219, 35, 49, 
-    49, 49, 35, 35, 49, 49, 49, 46, 26, 49, 219, 26, 78, 49, 49, 49, 49, 49, 
-    26, 26, 218, 219, 219, 26, 49, 26, 220, 26, 49, 26, 183, 220, 49, 49, 
-    221, 35, 49, 49, 44, 49, 35, 156, 156, 156, 156, 35, 26, 218, 35, 35, 49, 
-    49, 222, 78, 78, 78, 78, 49, 35, 35, 35, 35, 26, 78, 26, 26, 47, 80, 223, 
-    223, 223, 37, 37, 223, 223, 223, 223, 223, 223, 37, 37, 37, 37, 223, 224, 
-    224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 
-    225, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 
-    225, 225, 225, 173, 173, 173, 44, 47, 173, 173, 173, 173, 37, 0, 0, 0, 0, 
-    0, 0, 40, 40, 40, 40, 40, 30, 30, 30, 30, 30, 226, 226, 26, 26, 26, 26, 
-    78, 26, 26, 78, 26, 26, 78, 26, 26, 26, 26, 26, 26, 26, 226, 26, 26, 26, 
+    138, 138, 138, 138, 138, 187, 174, 174, 174, 174, 174, 0, 210, 211, 212, 
+    213, 174, 174, 174, 174, 174, 174, 214, 51, 0, 0, 34, 214, 214, 214, 214, 
+    214, 215, 215, 216, 217, 218, 219, 214, 34, 34, 34, 34, 214, 214, 214, 
+    214, 214, 215, 215, 216, 217, 218, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, 
+    51, 51, 51, 51, 0, 0, 0, 85, 85, 85, 85, 85, 85, 85, 85, 220, 221, 85, 
+    85, 23, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 176, 176, 
+    81, 81, 81, 81, 176, 176, 176, 81, 81, 82, 82, 82, 82, 81, 82, 82, 82, 
+    176, 176, 81, 86, 81, 176, 176, 86, 86, 86, 86, 81, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 49, 223, 26, 223, 222, 49, 26, 223, 35, 
+    49, 49, 49, 35, 35, 49, 49, 49, 46, 26, 49, 223, 26, 78, 49, 49, 49, 49, 
+    49, 26, 26, 222, 223, 223, 26, 49, 26, 224, 26, 49, 26, 184, 224, 49, 49, 
+    225, 35, 49, 49, 44, 49, 35, 156, 156, 156, 156, 35, 26, 222, 35, 35, 49, 
+    49, 226, 78, 78, 78, 78, 49, 35, 35, 35, 35, 26, 78, 26, 26, 47, 80, 227, 
+    227, 227, 37, 37, 227, 227, 227, 227, 227, 227, 37, 37, 37, 37, 227, 228, 
+    228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 
+    229, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 
+    229, 229, 229, 173, 173, 173, 44, 47, 173, 173, 173, 173, 37, 0, 0, 0, 0, 
+    0, 0, 40, 40, 40, 40, 40, 30, 30, 30, 30, 30, 230, 230, 26, 26, 26, 26, 
+    78, 26, 26, 78, 26, 26, 78, 26, 26, 26, 26, 26, 26, 26, 230, 26, 26, 26, 
     26, 26, 26, 26, 26, 26, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 227, 226, 226, 26, 26, 40, 26, 40, 
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 231, 230, 230, 26, 26, 40, 26, 40, 
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 78, 78, 78, 78, 78, 
-    78, 78, 78, 78, 78, 78, 78, 40, 228, 229, 229, 230, 78, 78, 40, 229, 230, 
-    228, 229, 230, 228, 78, 40, 78, 229, 231, 232, 78, 229, 228, 78, 78, 78, 
-    229, 228, 228, 229, 40, 229, 229, 228, 228, 40, 230, 40, 230, 40, 40, 40, 
-    40, 229, 233, 222, 229, 222, 222, 228, 228, 228, 40, 40, 40, 40, 78, 228, 
-    78, 228, 229, 229, 228, 228, 228, 230, 228, 228, 230, 228, 228, 230, 229, 
-    230, 228, 228, 229, 78, 78, 78, 78, 78, 229, 228, 228, 228, 78, 78, 78, 
-    78, 78, 78, 78, 78, 78, 228, 234, 40, 230, 78, 229, 229, 229, 229, 228, 
-    228, 229, 229, 78, 226, 234, 234, 230, 230, 228, 228, 230, 230, 228, 228, 
-    230, 230, 228, 228, 228, 228, 228, 228, 230, 230, 229, 229, 230, 230, 
-    229, 229, 230, 230, 228, 228, 228, 78, 78, 228, 228, 228, 228, 78, 78, 
-    40, 78, 78, 228, 40, 78, 78, 78, 78, 78, 78, 78, 78, 228, 228, 78, 40, 
-    228, 228, 228, 228, 228, 228, 230, 230, 230, 230, 228, 228, 228, 228, 
-    228, 228, 228, 228, 228, 78, 78, 78, 78, 78, 228, 229, 78, 78, 78, 78, 
-    78, 78, 78, 78, 78, 228, 228, 228, 228, 228, 78, 78, 228, 228, 78, 78, 
-    78, 78, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 230, 230, 230, 
-    230, 228, 228, 228, 228, 228, 228, 230, 230, 230, 230, 78, 78, 228, 228, 
-    228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 26, 
-    26, 26, 26, 26, 26, 26, 26, 228, 228, 228, 228, 26, 26, 26, 26, 26, 26, 
-    30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 228, 228, 26, 26, 
-    26, 26, 26, 26, 26, 235, 236, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
+    78, 78, 78, 78, 78, 78, 78, 40, 232, 233, 233, 234, 78, 78, 40, 233, 234, 
+    232, 233, 234, 232, 78, 40, 78, 233, 235, 236, 78, 233, 232, 78, 78, 78, 
+    233, 232, 232, 233, 40, 233, 233, 232, 232, 40, 234, 40, 234, 40, 40, 40, 
+    40, 233, 237, 226, 233, 226, 226, 232, 232, 232, 40, 40, 40, 40, 78, 232, 
+    78, 232, 233, 233, 232, 232, 232, 234, 232, 232, 234, 232, 232, 234, 233, 
+    234, 232, 232, 233, 78, 78, 78, 78, 78, 233, 232, 232, 232, 78, 78, 78, 
+    78, 78, 78, 78, 78, 78, 232, 238, 40, 234, 78, 233, 233, 233, 233, 232, 
+    232, 233, 233, 78, 230, 238, 238, 234, 234, 232, 232, 234, 234, 232, 232, 
+    234, 234, 232, 232, 232, 232, 232, 232, 234, 234, 233, 233, 234, 234, 
+    233, 233, 234, 234, 232, 232, 232, 78, 78, 232, 232, 232, 232, 78, 78, 
+    40, 78, 78, 232, 40, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 78, 40, 
+    232, 232, 232, 232, 232, 232, 234, 234, 234, 234, 232, 232, 232, 232, 
+    232, 232, 232, 232, 232, 78, 78, 78, 78, 78, 232, 233, 78, 78, 78, 78, 
+    78, 78, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 232, 232, 78, 78, 
+    78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 234, 234, 234, 
+    234, 232, 232, 232, 232, 232, 232, 234, 234, 234, 234, 78, 78, 232, 232, 
+    232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 26, 
+    26, 26, 26, 26, 26, 26, 26, 163, 164, 163, 164, 26, 26, 26, 26, 26, 26, 
+    30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 232, 232, 26, 26, 
+    26, 26, 26, 26, 26, 239, 240, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
@@ -1703,14 +1711,14 @@
     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 
     37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 34, 
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
-    34, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 
-    237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 
-    237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 
-    237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 
-    237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 
-    237, 237, 237, 237, 237, 237, 237, 237, 223, 238, 238, 238, 238, 238, 
-    238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 
-    238, 238, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
+    34, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 241, 241, 241, 227, 242, 242, 242, 242, 242, 
+    242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 
+    242, 242, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
     30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
     30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
     30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
@@ -1745,14 +1753,14 @@
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 26, 26, 26, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 
-    163, 164, 163, 164, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 
+    163, 164, 163, 164, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 
     153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 
     153, 153, 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 228, 78, 78, 
-    228, 228, 163, 164, 78, 228, 228, 78, 228, 228, 228, 78, 78, 78, 78, 78, 
-    228, 228, 228, 228, 78, 78, 78, 78, 78, 228, 228, 228, 78, 78, 78, 228, 
-    228, 228, 228, 9, 10, 9, 10, 9, 10, 9, 10, 163, 164, 78, 78, 78, 78, 78, 
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 232, 78, 78, 
+    232, 232, 163, 164, 78, 232, 232, 78, 232, 232, 232, 78, 78, 78, 78, 78, 
+    232, 232, 232, 232, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 78, 232, 
+    232, 232, 232, 9, 10, 9, 10, 9, 10, 9, 10, 163, 164, 78, 78, 78, 78, 78, 
     78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
@@ -1769,30 +1777,30 @@
     78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 
     78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 
     163, 164, 9, 10, 163, 164, 163, 164, 163, 164, 163, 164, 163, 164, 163, 
-    164, 163, 164, 163, 164, 163, 164, 78, 78, 228, 228, 228, 228, 228, 228, 
-    228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-    228, 78, 78, 78, 78, 78, 78, 78, 78, 228, 78, 78, 78, 78, 78, 78, 78, 
-    228, 228, 228, 228, 228, 228, 78, 78, 78, 228, 78, 78, 78, 78, 228, 228, 
-    228, 228, 228, 78, 228, 228, 78, 78, 163, 164, 163, 164, 228, 78, 78, 78, 
-    78, 228, 78, 228, 228, 228, 78, 78, 228, 228, 78, 78, 78, 78, 78, 78, 78, 
-    78, 78, 78, 228, 228, 228, 228, 228, 228, 78, 78, 163, 164, 78, 78, 78, 
-    78, 78, 78, 78, 78, 78, 78, 78, 78, 228, 228, 222, 228, 228, 228, 228, 
-    228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 78, 228, 228, 
-    228, 228, 78, 78, 228, 78, 228, 78, 78, 228, 78, 228, 228, 228, 228, 78, 
-    78, 78, 78, 78, 228, 228, 78, 78, 78, 78, 78, 78, 228, 228, 228, 78, 78, 
+    164, 163, 164, 163, 164, 163, 164, 78, 78, 232, 232, 232, 232, 232, 232, 
+    232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 
+    232, 78, 78, 78, 78, 78, 78, 78, 78, 232, 78, 78, 78, 78, 78, 78, 78, 
+    232, 232, 232, 232, 232, 232, 78, 78, 78, 232, 78, 78, 78, 78, 232, 232, 
+    232, 232, 232, 78, 232, 232, 78, 78, 163, 164, 163, 164, 232, 78, 78, 78, 
+    78, 232, 78, 232, 232, 232, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 
+    78, 78, 78, 232, 232, 232, 232, 232, 232, 78, 78, 163, 164, 78, 78, 78, 
+    78, 78, 78, 78, 78, 78, 78, 78, 78, 232, 232, 226, 232, 232, 232, 232, 
+    232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 232, 232, 
+    232, 232, 78, 78, 232, 78, 232, 78, 78, 232, 78, 232, 232, 232, 232, 78, 
+    78, 78, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 232, 232, 232, 78, 78, 
     78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 
-    78, 78, 78, 78, 228, 228, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 
-    228, 228, 78, 78, 78, 78, 228, 228, 228, 228, 78, 228, 228, 78, 78, 228, 
-    222, 212, 212, 78, 78, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-    228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-    228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-    228, 228, 228, 228, 228, 78, 78, 228, 228, 228, 228, 228, 228, 228, 228, 
-    78, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-    228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
-    228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 78, 78, 78, 
-    78, 78, 239, 78, 228, 78, 78, 78, 228, 228, 228, 228, 228, 78, 78, 78, 
-    78, 78, 228, 228, 228, 78, 78, 78, 78, 228, 78, 78, 78, 228, 228, 228, 
-    228, 228, 78, 228, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
+    78, 78, 78, 78, 232, 232, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 
+    232, 232, 78, 78, 78, 78, 232, 232, 232, 232, 78, 232, 232, 78, 78, 232, 
+    226, 216, 216, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 
+    232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 
+    232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 
+    232, 232, 232, 232, 232, 78, 78, 232, 232, 232, 232, 232, 232, 232, 232, 
+    78, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 
+    232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 
+    232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 78, 78, 78, 
+    78, 78, 243, 78, 232, 78, 78, 78, 232, 232, 232, 232, 232, 78, 78, 78, 
+    78, 78, 232, 232, 232, 78, 78, 78, 78, 232, 78, 78, 78, 232, 232, 232, 
+    232, 232, 78, 232, 78, 78, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 
@@ -1838,105 +1846,105 @@
     138, 52, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 84, 84, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 0, 240, 240, 240, 240, 241, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 0, 0, 0, 0, 242, 243, 243, 243, 
-    240, 244, 170, 245, 246, 247, 246, 247, 246, 247, 246, 247, 246, 247, 
-    240, 240, 246, 247, 246, 247, 246, 247, 246, 247, 248, 249, 250, 250, 
-    240, 245, 245, 245, 245, 245, 245, 245, 245, 245, 251, 252, 253, 254, 
-    255, 255, 248, 244, 244, 244, 244, 244, 241, 240, 256, 256, 256, 244, 
-    170, 243, 240, 26, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
-    170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 
-    170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 170, 257, 170, 
-    257, 170, 257, 170, 170, 170, 170, 170, 170, 257, 257, 170, 257, 257, 
-    170, 257, 257, 170, 257, 257, 170, 257, 257, 170, 170, 170, 170, 170, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 0, 244, 244, 244, 244, 245, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 
+    245, 245, 245, 245, 245, 245, 245, 245, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 0, 0, 0, 0, 246, 247, 247, 247, 
+    244, 248, 170, 249, 250, 251, 250, 251, 250, 251, 250, 251, 250, 251, 
+    244, 244, 250, 251, 250, 251, 250, 251, 250, 251, 252, 253, 254, 254, 
+    244, 249, 249, 249, 249, 249, 249, 249, 249, 249, 255, 256, 257, 258, 
+    259, 259, 252, 248, 248, 248, 248, 248, 245, 244, 260, 260, 260, 248, 
+    170, 247, 244, 26, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
+    170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 
+    170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 170, 261, 170, 
+    261, 170, 261, 170, 170, 170, 170, 170, 170, 261, 261, 170, 261, 261, 
+    170, 261, 261, 170, 261, 261, 170, 261, 261, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
-    170, 170, 170, 257, 170, 170, 0, 0, 258, 258, 259, 259, 244, 260, 261, 
-    248, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 257, 170, 
-    257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 257, 170, 
-    257, 170, 257, 170, 257, 170, 257, 170, 170, 257, 170, 257, 170, 257, 
-    170, 170, 170, 170, 170, 170, 257, 257, 170, 257, 257, 170, 257, 257, 
-    170, 257, 257, 170, 257, 257, 170, 170, 170, 170, 170, 170, 170, 170, 
+    170, 170, 170, 261, 170, 170, 0, 0, 262, 262, 263, 263, 248, 264, 265, 
+    252, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 261, 170, 
+    261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 261, 170, 
+    261, 170, 261, 170, 261, 170, 261, 170, 170, 261, 170, 261, 170, 261, 
+    170, 170, 170, 170, 170, 170, 261, 261, 170, 261, 261, 170, 261, 261, 
+    170, 261, 261, 170, 261, 261, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
-    257, 170, 170, 257, 257, 257, 257, 243, 244, 244, 260, 261, 0, 0, 0, 0, 
+    261, 170, 170, 261, 261, 261, 261, 247, 248, 248, 264, 265, 0, 0, 0, 0, 
     0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 
-    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
-    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
-    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
-    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
-    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
-    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
-    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, 262, 262, 263, 263, 
-    263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 170, 170, 
+    265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 
+    265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 
+    265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 
+    265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 
+    265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 
+    265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 
+    265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 0, 266, 266, 267, 267, 
+    267, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
-    170, 170, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 241, 241, 0, 263, 263, 263, 263, 263, 263, 263, 263, 263, 
-    263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 265, 265, 265, 265, 265, 265, 265, 265, 241, 266, 266, 
-    266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 241, 
-    241, 241, 262, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 266, 266, 266, 266, 
-    266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 241, 241, 241, 241, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 0, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 241, 241, 241, 
-    241, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 241, 241, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 241, 170, 170, 170, 170, 170, 170, 
+    170, 170, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 245, 245, 0, 267, 267, 267, 267, 267, 267, 267, 267, 267, 
+    267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 269, 269, 269, 269, 269, 269, 269, 269, 245, 270, 270, 
+    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 
+    245, 245, 266, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 270, 270, 270, 270, 
+    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 245, 245, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 245, 245, 245, 
+    245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 245, 245, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 245, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
@@ -1962,7 +1970,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
-    170, 170, 170, 170, 170, 170, 170, 170, 244, 170, 170, 170, 170, 170, 
+    170, 170, 170, 170, 170, 170, 170, 170, 248, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
@@ -1971,11 +1979,11 @@
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
-    170, 170, 0, 0, 0, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 
-    240, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
+    170, 170, 0, 0, 0, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 
+    244, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, 
     53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 138, 138, 
@@ -1999,7 +2007,7 @@
     44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 
     44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 
     44, 47, 44, 47, 44, 47, 51, 47, 47, 47, 47, 47, 47, 47, 47, 44, 47, 44, 
-    47, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 52, 267, 267, 44, 47, 44, 
+    47, 44, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 52, 271, 271, 44, 47, 44, 
     47, 0, 44, 47, 44, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 47, 44, 
     47, 44, 47, 44, 47, 44, 47, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -2008,7 +2016,7 @@
     48, 48, 48, 135, 48, 48, 48, 142, 48, 48, 48, 48, 135, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 139, 139, 135, 135, 139, 26, 26, 26, 26, 0, 0, 0, 0, 148, 148, 148, 
-    148, 148, 148, 80, 80, 85, 221, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 
+    148, 148, 148, 80, 80, 85, 225, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 138, 138, 138, 138, 0, 0, 0, 0, 
@@ -2024,13 +2032,13 @@
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 86, 
     86, 86, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 135, 
-    135, 135, 135, 135, 139, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 170, 
+    135, 135, 135, 135, 139, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
     170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 
     0, 0, 135, 135, 135, 139, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 145, 
-    139, 139, 135, 135, 135, 135, 139, 139, 135, 139, 139, 139, 174, 83, 83, 
+    139, 139, 135, 135, 135, 135, 139, 139, 135, 139, 139, 139, 175, 83, 83, 
     83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, 53, 144, 144, 144, 144, 
     144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -2060,144 +2068,144 @@
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 139, 139, 135, 139, 139, 135, 139, 139, 83, 139, 
     142, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 
-    0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 
-    257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 0, 0, 0, 0, 0, 0, 
+    0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 
+    261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
-    48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 268, 268, 268, 268, 268, 268, 
-    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
-    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
-    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
-    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
-    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
-    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
-    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
-    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
-    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    170, 170, 270, 170, 270, 170, 170, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 170, 270, 170, 270, 170, 170, 270, 270, 170, 170, 170, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 0, 0, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 272, 272, 272, 272, 272, 272, 
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    170, 170, 274, 170, 274, 170, 170, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 170, 274, 170, 274, 170, 170, 274, 274, 170, 170, 170, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 0, 0, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 
-    35, 35, 35, 35, 0, 0, 0, 0, 0, 271, 272, 271, 273, 273, 273, 273, 273, 
-    273, 273, 273, 273, 211, 271, 271, 271, 271, 271, 271, 271, 271, 271, 
-    271, 271, 271, 271, 0, 271, 271, 271, 271, 271, 0, 271, 0, 271, 271, 0, 
-    271, 271, 0, 271, 271, 271, 271, 271, 271, 271, 271, 271, 273, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 274, 274, 
-    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 195, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, 0, 0, 0, 0, 
+    35, 35, 35, 35, 0, 0, 0, 0, 0, 275, 276, 275, 277, 277, 277, 277, 277, 
+    277, 277, 277, 277, 215, 275, 275, 275, 275, 275, 275, 275, 275, 275, 
+    275, 275, 275, 275, 0, 275, 275, 275, 275, 275, 0, 275, 0, 275, 275, 0, 
+    275, 275, 0, 275, 275, 275, 275, 275, 275, 275, 275, 275, 277, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 278, 278, 
+    278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 195, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 276, 26, 0, 0, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
-    71, 71, 71, 71, 277, 277, 277, 277, 277, 277, 277, 278, 279, 277, 0, 0, 
-    0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 
-    280, 280, 281, 281, 278, 279, 278, 279, 278, 279, 278, 279, 278, 279, 
-    278, 279, 278, 279, 278, 279, 243, 243, 278, 279, 277, 277, 277, 277, 
-    281, 281, 281, 282, 277, 282, 0, 277, 282, 277, 277, 280, 283, 284, 283, 
-    284, 283, 284, 285, 277, 277, 286, 287, 288, 288, 289, 0, 277, 290, 285, 
-    277, 0, 0, 0, 0, 130, 130, 130, 117, 130, 0, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 0, 0, 187, 0, 291, 291, 292, 293, 292, 291, 291, 294, 
-    295, 291, 296, 297, 298, 297, 297, 299, 299, 299, 299, 299, 299, 299, 
-    299, 299, 299, 297, 291, 300, 301, 300, 291, 291, 302, 302, 302, 302, 
-    302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 
-    302, 302, 302, 302, 302, 302, 302, 302, 294, 291, 295, 303, 304, 303, 
-    305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 
-    305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 294, 301, 
-    295, 301, 294, 295, 306, 307, 308, 306, 306, 309, 309, 309, 309, 309, 
-    309, 309, 309, 309, 309, 310, 309, 309, 309, 309, 309, 309, 309, 309, 
+    0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 280, 26, 0, 0, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
+    71, 71, 71, 71, 281, 281, 281, 281, 281, 281, 281, 282, 283, 281, 0, 0, 
+    0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 
+    284, 284, 285, 285, 282, 283, 282, 283, 282, 283, 282, 283, 282, 283, 
+    282, 283, 282, 283, 282, 283, 247, 247, 282, 283, 281, 281, 281, 281, 
+    285, 285, 285, 286, 281, 286, 0, 281, 286, 281, 281, 284, 287, 288, 287, 
+    288, 287, 288, 289, 281, 281, 290, 291, 292, 292, 293, 0, 281, 294, 289, 
+    281, 0, 0, 0, 0, 131, 131, 131, 118, 131, 0, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 0, 0, 174, 0, 295, 295, 296, 297, 296, 295, 295, 298, 
+    299, 295, 300, 301, 302, 301, 301, 303, 303, 303, 303, 303, 303, 303, 
+    303, 303, 303, 301, 295, 304, 305, 304, 295, 295, 306, 306, 306, 306, 
+    306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 
+    306, 306, 306, 306, 306, 306, 306, 306, 298, 295, 299, 307, 308, 307, 
     309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 
-    309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 
-    309, 309, 309, 309, 309, 309, 309, 309, 309, 310, 310, 309, 309, 309, 
-    309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 
-    309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 0, 
-    0, 0, 309, 309, 309, 309, 309, 309, 0, 0, 309, 309, 309, 309, 309, 309, 
-    0, 0, 309, 309, 309, 309, 309, 309, 0, 0, 309, 309, 309, 0, 0, 0, 293, 
-    293, 301, 303, 311, 293, 293, 0, 312, 313, 313, 313, 313, 312, 312, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 314, 314, 314, 26, 30, 0, 0, 48, 48, 48, 48, 48, 
+    309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 298, 305, 
+    299, 305, 298, 299, 310, 311, 312, 310, 310, 313, 313, 313, 313, 313, 
+    313, 313, 313, 313, 313, 314, 313, 313, 313, 313, 313, 313, 313, 313, 
+    313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 
+    313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 
+    313, 313, 313, 313, 313, 313, 313, 313, 313, 314, 314, 313, 313, 313, 
+    313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 
+    313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 0, 
+    0, 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 313, 313, 313, 
+    0, 0, 313, 313, 313, 313, 313, 313, 0, 0, 313, 313, 313, 0, 0, 0, 297, 
+    297, 305, 307, 315, 297, 297, 0, 316, 317, 317, 317, 317, 316, 316, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 318, 318, 318, 26, 30, 0, 0, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
@@ -2215,11 +2223,11 @@
     148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 
     148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 
     148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, 0, 80, 80, 
-    80, 80, 80, 80, 80, 80, 80, 315, 315, 315, 315, 315, 315, 315, 315, 315, 
-    315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 
-    315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 
-    315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 
-    315, 315, 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
+    80, 80, 80, 80, 80, 80, 80, 319, 319, 319, 319, 319, 319, 319, 319, 319, 
+    319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 
+    319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 
+    319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 
+    319, 319, 153, 153, 153, 153, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 26, 26, 26, 153, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -2264,11 +2272,11 @@
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
     107, 0, 107, 107, 0, 0, 0, 107, 0, 0, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
-    107, 107, 0, 104, 316, 316, 316, 316, 316, 316, 316, 316, 0, 0, 0, 0, 0, 
+    107, 107, 0, 104, 320, 320, 320, 320, 320, 320, 320, 320, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 316, 316, 316, 316, 316, 
-    316, 0, 0, 0, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 320, 320, 320, 320, 320, 
+    320, 0, 0, 0, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
     107, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -2283,20 +2291,20 @@
     107, 135, 135, 135, 0, 135, 135, 0, 0, 0, 0, 0, 135, 86, 135, 81, 107, 
     107, 107, 107, 0, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
-    107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 81, 175, 86, 0, 0, 0, 0, 142, 
-    316, 316, 316, 316, 316, 316, 316, 316, 0, 0, 0, 0, 0, 0, 0, 0, 104, 104, 
+    107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 81, 176, 86, 0, 0, 0, 0, 142, 
+    320, 320, 320, 320, 320, 320, 320, 320, 0, 0, 0, 0, 0, 0, 0, 0, 104, 104, 
     104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 316, 316, 
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 320, 320, 
     104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 
     138, 138, 138, 138, 138, 138, 138, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
-    107, 0, 0, 316, 316, 316, 316, 316, 316, 316, 316, 107, 107, 107, 107, 
+    107, 0, 0, 320, 320, 320, 320, 320, 320, 320, 320, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
-    107, 0, 0, 0, 0, 0, 316, 316, 316, 316, 316, 316, 316, 316, 107, 107, 
+    107, 0, 0, 0, 0, 0, 320, 320, 320, 320, 320, 320, 320, 320, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 
@@ -2308,9 +2316,9 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 
-    317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 
-    317, 317, 317, 317, 317, 317, 317, 0, 139, 135, 139, 48, 48, 48, 48, 48, 
+    0, 0, 0, 0, 0, 0, 0, 0, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 
+    321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 
+    321, 321, 321, 321, 321, 321, 321, 0, 139, 135, 139, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 
@@ -2335,13 +2343,13 @@
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 139, 139, 139, 135, 135, 135, 
-    135, 135, 135, 135, 135, 135, 139, 174, 48, 48, 48, 48, 83, 83, 83, 83, 
+    135, 135, 135, 135, 135, 135, 139, 175, 48, 48, 48, 48, 83, 83, 83, 83, 
     0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 
-    139, 135, 139, 139, 135, 135, 135, 135, 135, 135, 174, 145, 0, 0, 0, 0, 
+    139, 135, 139, 139, 135, 135, 135, 135, 135, 135, 175, 145, 0, 0, 0, 0, 
     0, 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -2403,12 +2411,12 @@
     0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
-    318, 318, 318, 318, 318, 318, 318, 319, 319, 175, 175, 175, 80, 80, 80, 
-    320, 319, 319, 319, 319, 319, 187, 187, 187, 187, 187, 187, 187, 187, 86, 
+    322, 322, 322, 322, 322, 322, 322, 323, 323, 176, 176, 176, 80, 80, 80, 
+    324, 323, 323, 323, 323, 323, 174, 174, 174, 174, 174, 174, 174, 174, 86, 
     86, 86, 86, 86, 86, 86, 86, 80, 80, 81, 81, 81, 81, 81, 86, 86, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 80, 80, 80, 80, 
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 318, 318, 318, 318, 318, 318, 80, 80, 
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 322, 322, 322, 322, 322, 322, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
     80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 
@@ -2463,38 +2471,38 @@
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
     35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 321, 
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 325, 
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 222, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 
+    35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 
-    49, 49, 49, 321, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 222, 35, 35, 35, 35, 35, 35, 
+    49, 49, 49, 325, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
+    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 
-    49, 49, 49, 49, 49, 49, 49, 321, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 222, 35, 35, 
+    49, 49, 49, 49, 49, 49, 49, 325, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
+    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 226, 35, 35, 
     35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 321, 35, 35, 35, 35, 35, 35, 
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 325, 35, 35, 35, 35, 35, 35, 
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 222, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 321, 35, 35, 
+    35, 226, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 325, 35, 35, 
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 222, 35, 35, 35, 35, 35, 35, 49, 35, 0, 0, 322, 322, 
-    322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 
-    322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 
-    322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 
-    322, 322, 322, 322, 322, 322, 130, 130, 130, 130, 0, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 130, 130, 0, 130, 0, 0, 
-    130, 0, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 130, 130, 
-    130, 130, 0, 130, 0, 130, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 130, 0, 130, 
-    0, 130, 0, 130, 130, 130, 0, 130, 130, 0, 130, 0, 0, 130, 0, 130, 0, 130, 
-    0, 130, 0, 130, 0, 130, 130, 0, 130, 0, 0, 130, 130, 130, 130, 0, 130, 
-    130, 130, 130, 130, 130, 130, 0, 130, 130, 130, 130, 0, 130, 130, 130, 
-    130, 0, 130, 0, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, 130, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 0, 0, 0, 0, 0, 130, 130, 130, 0, 130, 130, 130, 130, 130, 0, 
-    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
-    130, 130, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    35, 35, 35, 35, 35, 226, 35, 35, 35, 35, 35, 35, 49, 35, 0, 0, 326, 326, 
+    326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 
+    326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 
+    326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 
+    326, 326, 326, 326, 326, 326, 131, 131, 131, 131, 0, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131, 0, 131, 0, 0, 
+    131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131, 
+    131, 131, 0, 131, 0, 131, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 131, 0, 131, 
+    0, 131, 0, 131, 131, 131, 0, 131, 131, 0, 131, 0, 0, 131, 0, 131, 0, 131, 
+    0, 131, 0, 131, 0, 131, 131, 0, 131, 0, 0, 131, 131, 131, 131, 0, 131, 
+    131, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 0, 131, 131, 131, 
+    131, 0, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 0, 131, 131, 131, 131, 131, 0, 
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 
+    131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
@@ -2511,26 +2519,26 @@
     26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
-    34, 34, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 
-    237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 
-    237, 237, 237, 237, 237, 237, 323, 0, 237, 237, 237, 237, 237, 237, 237, 
-    237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 
-    237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 324, 324, 324, 
-    324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 
-    324, 324, 324, 324, 324, 324, 324, 324, 324, 218, 218, 0, 0, 0, 0, 324, 
-    324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 
-    324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 
-    324, 324, 324, 237, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 0, 
+    34, 34, 0, 0, 0, 0, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 241, 327, 0, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 328, 328, 328, 
+    328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 
+    328, 328, 328, 328, 328, 328, 328, 328, 328, 222, 222, 0, 0, 0, 0, 328, 
+    328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 
+    328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 
+    328, 328, 328, 241, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 264, 264, 264, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 264, 264, 0, 0, 0, 0, 0, 264, 264, 264, 264, 264, 264, 264, 
-    264, 264, 0, 0, 0, 0, 0, 0, 0, 264, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 268, 268, 268, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 268, 268, 0, 0, 0, 0, 0, 268, 268, 268, 268, 268, 268, 268, 
+    268, 268, 0, 0, 0, 0, 0, 0, 0, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 
@@ -2614,21 +2622,21 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 
-    270, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 
+    274, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 187, 187, 187, 187, 187, 187, 
-    187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 
-    187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 
-    187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 
-    187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 
-    187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 
-    187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 
-    187, 187, 187, 187, 187, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
+    0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 174, 174, 174, 174, 
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 
+    174, 174, 174, 174, 174, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
@@ -2642,16 +2650,16 @@
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 
-    269, 269, 269, 269, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 
+    273, 273, 273, 273, 0, 0, 
 };
 
 /* decomposition data */
@@ -5176,7 +5184,6 @@
 	{ 255, 7, 8, 255, 0 },
 	{ 255, 7, 9, 255, 0 },
 	{ 1, 5, 255, 255, 0 },
-	{ 15, 14, 255, 255, 0 },
 	{ 255, 10, 255, 255, 0 },
 	{ 18, 255, 255, 255, 0 },
 	{ 19, 255, 255, 255, 0 },
@@ -5189,6 +5196,7 @@
 	{ 255, 255, 9, 255, 0 },
 	{ 19, 30, 255, 255, 0 },
 	{ 255, 8, 255, 255, 0 },
+	{ 255, 27, 255, 255, 0 },
 	{ 255, 22, 255, 255, 0 },
 	{ 255, 23, 255, 255, 0 },
 	{ 9, 255, 255, 255, 0 },
@@ -5203,8 +5211,8 @@
 static unsigned char changes_3_2_0_index[] = {
     0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
     19, 20, 21, 22, 23, 24, 2, 2, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 
-    36, 2, 2, 2, 37, 38, 2, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 
-    51, 2, 52, 2, 2, 53, 54, 55, 56, 57, 2, 2, 58, 59, 60, 2, 2, 61, 62, 63, 
+    36, 2, 2, 2, 37, 38, 2, 39, 2, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 
+    50, 2, 51, 2, 2, 52, 53, 54, 55, 56, 2, 57, 58, 59, 60, 2, 2, 61, 62, 63, 
     64, 65, 65, 2, 2, 2, 2, 66, 2, 67, 68, 69, 70, 71, 2, 2, 2, 72, 73, 74, 
     75, 76, 77, 78, 79, 80, 81, 2, 2, 2, 2, 2, 2, 82, 2, 2, 2, 2, 2, 83, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
@@ -5215,8 +5223,8 @@
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 92, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 93, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 94, 95, 2, 2, 2, 2, 2, 2, 2, 2, 96, 50, 50, 
-    97, 98, 50, 99, 100, 101, 102, 103, 104, 105, 106, 107, 2, 2, 2, 2, 2, 2, 
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 94, 95, 2, 2, 2, 2, 2, 2, 2, 2, 96, 49, 49, 
+    97, 98, 49, 99, 100, 101, 102, 103, 104, 105, 106, 107, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
@@ -5227,13 +5235,13 @@
     119, 120, 121, 122, 2, 123, 124, 125, 126, 127, 2, 2, 2, 2, 2, 2, 128, 2, 
     129, 130, 131, 2, 132, 2, 133, 2, 2, 2, 134, 2, 2, 2, 135, 136, 137, 138, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 139, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
-    2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 140, 2, 141, 2, 2, 2, 2, 2, 2, 2, 2, 
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 50, 50, 50, 
-    50, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
+    2, 2, 2, 2, 49, 49, 49, 49, 49, 49, 140, 2, 141, 2, 2, 2, 2, 2, 2, 2, 2, 
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 49, 49, 49, 49, 49, 49, 
+    49, 142, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 50, 143, 2, 2, 2, 2, 2, 2, 2, 
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 49, 49, 49, 143, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 144, 145, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
@@ -5260,9 +5268,9 @@
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 
-    50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 
-    50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 179, 2, 2, 2, 2, 2, 
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 49, 49, 
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 178, 49, 179, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
@@ -5503,7 +5511,7 @@
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 180, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 180, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
@@ -5625,7 +5633,7 @@
     9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 0, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 0, 9, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 
     9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -5785,709 +5793,267 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 
-    0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 
-    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, 
+    9, 0, 0, 0, 0, 0, 0, 35, 4, 0, 0, 36, 37, 38, 39, 40, 41, 1, 1, 0, 0, 0, 
+    4, 35, 8, 6, 7, 36, 37, 38, 39, 40, 41, 1, 1, 0, 0, 0, 0, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 9, 
     9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    45, 46, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 
+    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 
+    47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 
+    0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 
+    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 
+    9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 
+    9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 
+    9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
-    0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 4, 0, 0, 37, 38, 39, 40, 
-    41, 42, 1, 1, 0, 0, 0, 4, 36, 8, 6, 7, 37, 38, 39, 40, 41, 42, 1, 1, 0, 
-    0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 
+    0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 
-    0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 44, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 
-    46, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 
-    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 
-    47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 
-    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 
-    9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 
-    9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 
-    9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 
-    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 
-    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 
-    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 
     0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 
-    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 
-    0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 
-    0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 
-    0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 
-    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 9, 
-    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9, 
-    0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 
-    9, 0, 9, 0, 9, 0, 9, 9, 0, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 
-    0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 
-    9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -6495,15 +6061,20 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -6513,33 +6084,470 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
+    0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 
+    0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    53, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 
+    0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 
+    0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 0, 0, 
+    0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 
+    9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 
+    0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 
+    0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 
+    9, 0, 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 
+    9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 
+    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 
+    0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 
 };
 
 static const change_record* get_change_3_2_0(Py_UCS4 n)
diff --git a/Modules/unicodename_db.h b/Modules/unicodename_db.h
index 084f011..7ccb126 100644
--- a/Modules/unicodename_db.h
+++ b/Modules/unicodename_db.h
@@ -6,7 +6,7 @@
 static unsigned char lexicon[] = {
     76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 89, 76, 76, 65, 66, 76, 
     197, 83, 77, 65, 76, 204, 83, 73, 71, 206, 67, 65, 80, 73, 84, 65, 204, 
-    76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 65, 82, 65, 66, 73, 195, 77, 
+    76, 65, 84, 73, 206, 89, 201, 65, 82, 65, 66, 73, 195, 67, 74, 203, 77, 
     65, 84, 72, 69, 77, 65, 84, 73, 67, 65, 204, 69, 71, 89, 80, 84, 73, 65, 
     206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 67, 79, 77, 80, 65, 84, 73, 
     66, 73, 76, 73, 84, 217, 67, 85, 78, 69, 73, 70, 79, 82, 205, 83, 89, 77, 
@@ -27,24 +27,24 @@
     75, 65, 78, 193, 194, 77, 79, 68, 73, 70, 73, 69, 210, 68, 79, 212, 75, 
     65, 78, 71, 88, 201, 65, 128, 76, 73, 78, 69, 65, 210, 84, 73, 66, 69, 
     84, 65, 206, 79, 198, 73, 78, 73, 84, 73, 65, 204, 77, 69, 69, 205, 86, 
-    69, 82, 84, 73, 67, 65, 204, 77, 89, 65, 78, 77, 65, 210, 75, 72, 77, 69, 
-    210, 85, 128, 87, 72, 73, 84, 197, 67, 65, 82, 82, 73, 69, 210, 73, 128, 
-    65, 82, 82, 79, 87, 128, 79, 128, 65, 66, 79, 86, 197, 77, 65, 82, 75, 
-    128, 89, 69, 200, 65, 82, 82, 79, 215, 67, 79, 80, 84, 73, 195, 80, 72, 
-    65, 83, 69, 45, 197, 77, 79, 78, 71, 79, 76, 73, 65, 206, 68, 69, 86, 65, 
-    78, 65, 71, 65, 82, 201, 66, 76, 65, 67, 203, 84, 73, 76, 197, 83, 89, 
-    77, 66, 79, 76, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 90, 69, 196, 
-    84, 72, 65, 205, 74, 79, 78, 71, 83, 69, 79, 78, 199, 83, 84, 82, 79, 75, 
-    69, 128, 83, 81, 85, 65, 82, 69, 196, 66, 79, 216, 72, 69, 66, 82, 69, 
-    215, 77, 73, 65, 207, 80, 76, 85, 211, 82, 73, 71, 72, 84, 87, 65, 82, 
-    68, 211, 71, 69, 79, 82, 71, 73, 65, 206, 68, 82, 65, 87, 73, 78, 71, 
-    211, 67, 72, 79, 83, 69, 79, 78, 199, 72, 65, 76, 70, 87, 73, 68, 84, 
+    69, 82, 84, 73, 67, 65, 204, 77, 89, 65, 78, 77, 65, 210, 85, 128, 75, 
+    72, 77, 69, 210, 87, 72, 73, 84, 197, 65, 66, 79, 86, 197, 67, 65, 82, 
+    82, 73, 69, 210, 73, 128, 65, 82, 82, 79, 87, 128, 89, 69, 200, 79, 128, 
+    77, 65, 82, 75, 128, 65, 82, 82, 79, 215, 67, 79, 80, 84, 73, 195, 80, 
+    72, 65, 83, 69, 45, 197, 77, 79, 78, 71, 79, 76, 73, 65, 206, 68, 69, 86, 
+    65, 78, 65, 71, 65, 82, 201, 66, 76, 65, 67, 203, 84, 73, 76, 197, 83, 
+    89, 77, 66, 79, 76, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 90, 69, 
+    196, 84, 72, 65, 205, 74, 79, 78, 71, 83, 69, 79, 78, 199, 83, 84, 82, 
+    79, 75, 69, 128, 83, 81, 85, 65, 82, 69, 196, 66, 79, 216, 72, 69, 66, 
+    82, 69, 215, 77, 73, 65, 207, 80, 76, 85, 211, 82, 73, 71, 72, 84, 87, 
+    65, 82, 68, 211, 71, 69, 79, 82, 71, 73, 65, 206, 68, 82, 65, 87, 73, 78, 
+    71, 211, 67, 72, 79, 83, 69, 79, 78, 199, 72, 65, 76, 70, 87, 73, 68, 84, 
     200, 66, 65, 76, 73, 78, 69, 83, 197, 72, 79, 79, 75, 128, 213, 84, 87, 
     79, 128, 73, 68, 69, 79, 71, 82, 65, 205, 80, 72, 65, 83, 69, 45, 196, 
-    65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 73, 195, 79, 78, 69, 128, 84, 79, 128, 65, 76, 69, 198, 84, 87, 207, 
-    72, 69, 65, 86, 217, 67, 79, 78, 83, 79, 78, 65, 78, 212, 79, 86, 69, 
-    210, 66, 82, 65, 72, 77, 201, 83, 67, 82, 73, 80, 212, 85, 208, 76, 79, 
+    65, 76, 67, 72, 69, 77, 73, 67, 65, 204, 65, 76, 69, 198, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 73, 195, 79, 78, 69, 128, 84, 79, 128, 84, 87, 207, 
+    72, 69, 65, 86, 217, 79, 86, 69, 210, 67, 79, 78, 83, 79, 78, 65, 78, 
+    212, 66, 82, 65, 72, 77, 201, 83, 67, 82, 73, 80, 212, 85, 208, 76, 79, 
     215, 72, 65, 200, 79, 78, 197, 68, 79, 87, 206, 72, 73, 71, 200, 70, 85, 
     76, 76, 87, 73, 68, 84, 200, 66, 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 
     65, 204, 84, 65, 199, 66, 65, 82, 128, 68, 79, 77, 73, 78, 207, 78, 85, 
@@ -65,49 +65,49 @@
     76, 85, 197, 83, 72, 65, 82, 65, 68, 193, 83, 73, 78, 72, 65, 76, 193, 
     75, 65, 128, 82, 85, 78, 73, 195, 83, 65, 85, 82, 65, 83, 72, 84, 82, 
     193, 84, 69, 84, 82, 65, 71, 82, 65, 205, 68, 69, 83, 69, 82, 69, 212, 
-    83, 89, 82, 73, 65, 195, 84, 73, 76, 68, 69, 128, 71, 85, 82, 77, 85, 75, 
-    72, 201, 77, 65, 128, 77, 65, 89, 69, 203, 77, 69, 69, 84, 69, 201, 78, 
-    79, 84, 65, 84, 73, 79, 206, 70, 73, 86, 69, 128, 80, 65, 128, 89, 65, 
-    128, 76, 73, 71, 72, 212, 83, 73, 88, 128, 69, 73, 71, 72, 84, 128, 76, 
-    69, 80, 67, 72, 193, 78, 65, 128, 83, 69, 86, 69, 78, 128, 76, 79, 78, 
-    199, 78, 73, 78, 69, 128, 84, 85, 82, 75, 73, 195, 72, 65, 77, 90, 193, 
-    72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 79, 80, 69, 206, 82, 65, 128, 
-    83, 65, 128, 83, 85, 78, 68, 65, 78, 69, 83, 197, 86, 73, 69, 212, 76, 
-    65, 207, 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, 88, 
-    128, 90, 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, 90, 
-    90, 89, 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, 85, 
-    82, 128, 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, 128, 
-    90, 90, 83, 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80, 128, 90, 90, 
-    79, 128, 90, 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90, 73, 80, 128, 
-    90, 90, 73, 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90, 73, 69, 80, 
-    128, 90, 90, 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88, 128, 90, 90, 
-    69, 80, 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, 128, 
-    90, 90, 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, 90, 
-    65, 128, 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, 74, 
-    128, 90, 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 65, 82, 65, 
-    75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85, 79, 88, 128, 
-    90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90, 85, 66, 85, 
-    82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 83, 72, 65, 128, 90, 82, 65, 
-    128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, 79, 128, 90, 79, 
-    65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, 90, 74, 69, 
-    128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, 78, 79, 82, 
-    128, 90, 73, 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, 128, 
-    90, 73, 68, 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, 201, 
-    90, 72, 89, 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, 90, 
-    72, 89, 82, 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, 69, 
-    128, 90, 72, 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, 90, 
-    72, 85, 82, 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, 72, 
-    85, 79, 88, 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, 72, 
-    85, 128, 90, 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, 128, 
-    90, 72, 79, 79, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, 69, 128, 
-    90, 72, 73, 128, 90, 72, 69, 88, 128, 90, 72, 69, 84, 128, 90, 72, 69, 
-    80, 128, 90, 72, 69, 69, 128, 90, 72, 69, 128, 90, 72, 197, 90, 72, 65, 
-    88, 128, 90, 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, 128, 
-    90, 72, 65, 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, 72, 
-    128, 90, 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90, 69, 
-    78, 128, 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128, 90, 
-    69, 50, 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 128, 90, 
-    65, 89, 73, 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, 
+    72, 65, 77, 90, 193, 83, 89, 82, 73, 65, 195, 84, 73, 76, 68, 69, 128, 
+    71, 85, 82, 77, 85, 75, 72, 201, 77, 65, 128, 77, 65, 89, 69, 203, 77, 
+    69, 69, 84, 69, 201, 78, 79, 84, 65, 84, 73, 79, 206, 70, 73, 86, 69, 
+    128, 80, 65, 128, 89, 65, 128, 76, 73, 71, 72, 212, 83, 73, 88, 128, 69, 
+    73, 71, 72, 84, 128, 76, 69, 80, 67, 72, 193, 78, 65, 128, 83, 69, 86, 
+    69, 78, 128, 76, 79, 78, 199, 78, 73, 78, 69, 128, 84, 85, 82, 75, 73, 
+    195, 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 79, 80, 69, 206, 82, 65, 
+    128, 83, 65, 128, 83, 85, 78, 68, 65, 78, 69, 83, 197, 86, 73, 69, 212, 
+    76, 65, 207, 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, 
+    88, 128, 90, 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, 
+    90, 90, 89, 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, 
+    85, 82, 128, 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, 
+    128, 90, 90, 83, 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80, 128, 90, 
+    90, 79, 128, 90, 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90, 73, 80, 
+    128, 90, 90, 73, 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90, 73, 69, 
+    80, 128, 90, 90, 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88, 128, 90, 
+    90, 69, 80, 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, 
+    128, 90, 90, 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, 
+    90, 65, 128, 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, 
+    74, 128, 90, 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 65, 82, 
+    65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85, 79, 88, 
+    128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90, 85, 66, 
+    85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 83, 72, 65, 128, 90, 82, 
+    65, 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, 79, 128, 90, 
+    79, 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, 90, 74, 
+    69, 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, 78, 79, 
+    82, 128, 90, 73, 76, 68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, 
+    128, 90, 73, 68, 193, 90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, 
+    201, 90, 72, 89, 88, 128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, 
+    90, 72, 89, 82, 128, 90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, 
+    69, 128, 90, 72, 87, 65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, 
+    90, 72, 85, 82, 88, 128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, 
+    72, 85, 79, 88, 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, 
+    72, 85, 128, 90, 72, 79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, 
+    128, 90, 72, 79, 79, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, 69, 
+    128, 90, 72, 73, 128, 90, 72, 69, 88, 128, 90, 72, 69, 84, 128, 90, 72, 
+    69, 80, 128, 90, 72, 69, 69, 128, 90, 72, 69, 128, 90, 72, 197, 90, 72, 
+    65, 88, 128, 90, 72, 65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, 
+    128, 90, 72, 65, 73, 78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, 
+    72, 128, 90, 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90, 
+    69, 78, 128, 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128, 
+    90, 69, 50, 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 128, 
+    90, 65, 89, 73, 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, 
     128, 90, 65, 82, 81, 65, 128, 90, 65, 81, 69, 198, 90, 65, 77, 88, 128, 
     90, 65, 204, 90, 65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, 128, 90, 
     65, 72, 128, 90, 65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, 90, 48, 
@@ -796,409 +796,410 @@
     69, 84, 128, 83, 85, 65, 69, 78, 128, 83, 85, 65, 69, 128, 83, 85, 65, 
     128, 83, 213, 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, 84, 85, 68, 89, 
     128, 83, 84, 85, 67, 75, 45, 79, 85, 212, 83, 84, 83, 128, 83, 84, 82, 
-    79, 75, 69, 83, 128, 83, 84, 82, 79, 75, 69, 211, 83, 84, 82, 79, 75, 69, 
-    45, 57, 128, 83, 84, 82, 79, 75, 69, 45, 56, 128, 83, 84, 82, 79, 75, 69, 
-    45, 55, 128, 83, 84, 82, 79, 75, 69, 45, 54, 128, 83, 84, 82, 79, 75, 69, 
-    45, 53, 128, 83, 84, 82, 79, 75, 69, 45, 52, 128, 83, 84, 82, 79, 75, 69, 
-    45, 51, 128, 83, 84, 82, 79, 75, 69, 45, 50, 128, 83, 84, 82, 79, 75, 69, 
-    45, 49, 49, 128, 83, 84, 82, 79, 75, 69, 45, 49, 48, 128, 83, 84, 82, 79, 
-    75, 69, 45, 49, 128, 83, 84, 82, 79, 75, 197, 83, 84, 82, 73, 80, 69, 
-    128, 83, 84, 82, 73, 78, 71, 128, 83, 84, 82, 73, 78, 199, 83, 84, 82, 
-    73, 75, 69, 84, 72, 82, 79, 85, 71, 72, 128, 83, 84, 82, 73, 68, 69, 128, 
-    83, 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, 69, 84, 67, 72, 69, 196, 83, 
-    84, 82, 69, 83, 211, 83, 84, 82, 69, 78, 71, 84, 72, 128, 83, 84, 82, 69, 
-    65, 77, 69, 82, 128, 83, 84, 82, 65, 87, 66, 69, 82, 82, 89, 128, 83, 84, 
-    82, 65, 84, 85, 77, 45, 50, 128, 83, 84, 82, 65, 84, 85, 77, 128, 83, 84, 
-    82, 65, 84, 85, 205, 83, 84, 82, 65, 84, 73, 65, 206, 83, 84, 82, 65, 73, 
-    78, 69, 82, 128, 83, 84, 82, 65, 73, 71, 72, 84, 78, 69, 83, 83, 128, 83, 
-    84, 82, 65, 73, 71, 72, 212, 83, 84, 82, 65, 73, 70, 128, 83, 84, 82, 65, 
-    71, 71, 73, 83, 77, 65, 84, 65, 128, 83, 84, 79, 86, 69, 128, 83, 84, 79, 
-    82, 69, 128, 83, 84, 79, 80, 87, 65, 84, 67, 72, 128, 83, 84, 79, 80, 80, 
-    73, 78, 71, 128, 83, 84, 79, 80, 80, 65, 71, 69, 128, 83, 84, 79, 80, 
-    128, 83, 84, 79, 208, 83, 84, 79, 78, 69, 128, 83, 84, 79, 67, 75, 128, 
-    83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204, 83, 84, 73, 76, 197, 
-    83, 84, 73, 71, 77, 65, 128, 83, 84, 69, 80, 128, 83, 84, 69, 77, 128, 
-    83, 84, 69, 65, 77, 73, 78, 199, 83, 84, 69, 65, 77, 128, 83, 84, 69, 65, 
-    205, 83, 84, 65, 86, 82, 79, 85, 128, 83, 84, 65, 86, 82, 79, 83, 128, 
-    83, 84, 65, 86, 82, 79, 211, 83, 84, 65, 85, 82, 79, 83, 128, 83, 84, 65, 
-    84, 85, 197, 83, 84, 65, 84, 73, 79, 78, 128, 83, 84, 65, 84, 69, 82, 83, 
-    128, 83, 84, 65, 84, 69, 128, 83, 84, 65, 82, 212, 83, 84, 65, 82, 83, 
-    128, 83, 84, 65, 82, 82, 69, 196, 83, 84, 65, 82, 75, 128, 83, 84, 65, 
-    82, 128, 83, 84, 65, 210, 83, 84, 65, 78, 68, 83, 84, 73, 76, 76, 128, 
-    83, 84, 65, 78, 68, 65, 82, 196, 83, 84, 65, 78, 68, 128, 83, 84, 65, 78, 
-    128, 83, 84, 65, 76, 76, 73, 79, 78, 128, 83, 84, 65, 70, 70, 128, 83, 
-    84, 65, 70, 198, 83, 84, 65, 67, 67, 65, 84, 79, 128, 83, 84, 65, 67, 67, 
-    65, 84, 73, 83, 83, 73, 77, 79, 128, 83, 84, 50, 128, 83, 83, 89, 88, 
-    128, 83, 83, 89, 84, 128, 83, 83, 89, 82, 88, 128, 83, 83, 89, 82, 128, 
-    83, 83, 89, 80, 128, 83, 83, 89, 128, 83, 83, 85, 88, 128, 83, 83, 85, 
-    85, 128, 83, 83, 85, 84, 128, 83, 83, 85, 80, 128, 83, 83, 79, 88, 128, 
-    83, 83, 79, 84, 128, 83, 83, 79, 80, 128, 83, 83, 79, 79, 128, 83, 83, 
-    79, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, 73, 80, 128, 
-    83, 83, 73, 73, 128, 83, 83, 73, 69, 88, 128, 83, 83, 73, 69, 80, 128, 
-    83, 83, 73, 69, 128, 83, 83, 73, 128, 83, 83, 72, 69, 128, 83, 83, 69, 
-    88, 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, 83, 83, 65, 88, 128, 
-    83, 83, 65, 85, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, 
-    65, 78, 71, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 83, 83, 65, 
-    78, 71, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, 
-    78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 84, 72, 73, 69, 
-    85, 84, 72, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 84, 73, 75, 69, 
-    85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 
-    128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 
-    83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 83, 65, 78, 71, 82, 73, 69, 
-    85, 76, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 83, 65, 78, 71, 82, 73, 
-    69, 85, 76, 128, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 83, 83, 65, 
-    78, 71, 78, 73, 69, 85, 78, 128, 83, 83, 65, 78, 71, 77, 73, 69, 85, 77, 
-    128, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71, 
-    73, 69, 85, 78, 71, 128, 83, 83, 65, 78, 71, 72, 73, 69, 85, 72, 128, 83, 
-    83, 65, 78, 71, 67, 73, 69, 85, 67, 45, 72, 73, 69, 85, 72, 128, 83, 83, 
-    65, 78, 71, 67, 73, 69, 85, 67, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 
-    65, 128, 83, 83, 65, 73, 128, 83, 83, 65, 65, 128, 83, 83, 51, 128, 83, 
-    83, 50, 128, 83, 82, 128, 83, 81, 85, 73, 83, 200, 83, 81, 85, 73, 82, 
-    82, 69, 204, 83, 81, 85, 73, 71, 71, 76, 197, 83, 81, 85, 65, 212, 83, 
-    81, 85, 65, 82, 69, 83, 128, 83, 81, 85, 65, 82, 69, 68, 128, 83, 81, 85, 
-    65, 82, 69, 128, 83, 80, 87, 65, 128, 83, 80, 85, 78, 71, 211, 83, 80, 
-    82, 79, 85, 84, 128, 83, 80, 82, 73, 78, 71, 83, 128, 83, 80, 82, 73, 78, 
-    71, 128, 83, 80, 82, 69, 67, 72, 71, 69, 83, 65, 78, 199, 83, 80, 79, 85, 
-    84, 73, 78, 199, 83, 80, 79, 84, 128, 83, 80, 79, 79, 78, 128, 83, 80, 
-    76, 73, 84, 84, 73, 78, 199, 83, 80, 76, 65, 83, 72, 73, 78, 199, 83, 80, 
-    73, 82, 73, 84, 85, 211, 83, 80, 73, 82, 73, 84, 128, 83, 80, 73, 82, 73, 
-    212, 83, 80, 73, 82, 65, 78, 84, 128, 83, 80, 73, 82, 65, 76, 128, 83, 
-    80, 73, 82, 65, 204, 83, 80, 73, 68, 69, 82, 217, 83, 80, 73, 67, 69, 
-    128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, 83, 77, 73, 76, 
-    207, 83, 80, 69, 69, 68, 66, 79, 65, 84, 128, 83, 80, 69, 69, 67, 72, 
-    128, 83, 80, 69, 69, 67, 200, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 
-    69, 65, 82, 128, 83, 80, 69, 65, 75, 69, 82, 128, 83, 80, 69, 65, 75, 69, 
-    210, 83, 80, 69, 65, 75, 45, 78, 79, 45, 69, 86, 73, 204, 83, 80, 65, 84, 
-    72, 73, 128, 83, 80, 65, 82, 75, 76, 73, 78, 199, 83, 80, 65, 82, 75, 76, 
-    69, 83, 128, 83, 80, 65, 82, 75, 76, 69, 82, 128, 83, 80, 65, 82, 75, 76, 
-    69, 128, 83, 80, 65, 71, 72, 69, 84, 84, 73, 128, 83, 80, 65, 68, 69, 83, 
-    128, 83, 80, 65, 68, 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 65, 67, 
-    197, 83, 80, 65, 128, 83, 79, 89, 128, 83, 79, 87, 73, 76, 207, 83, 79, 
-    87, 128, 83, 79, 85, 84, 72, 69, 82, 206, 83, 79, 85, 84, 72, 45, 83, 76, 
-    65, 86, 69, 217, 83, 79, 85, 84, 200, 83, 79, 85, 82, 67, 69, 128, 83, 
-    79, 85, 78, 68, 128, 83, 79, 85, 78, 196, 83, 79, 85, 78, 65, 80, 128, 
-    83, 79, 85, 128, 83, 79, 83, 128, 83, 79, 82, 193, 83, 79, 81, 128, 83, 
-    79, 79, 206, 83, 79, 78, 74, 65, 77, 128, 83, 79, 78, 71, 128, 83, 79, 
-    78, 128, 83, 79, 77, 80, 69, 78, 199, 83, 79, 77, 128, 83, 79, 76, 73, 
-    68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 83, 79, 72, 128, 83, 79, 
-    71, 68, 73, 65, 206, 83, 79, 70, 84, 87, 65, 82, 69, 45, 70, 85, 78, 67, 
-    84, 73, 79, 206, 83, 79, 70, 84, 78, 69, 83, 83, 128, 83, 79, 70, 212, 
-    83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 
-    83, 79, 65, 80, 128, 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65, 
-    78, 128, 83, 78, 79, 87, 77, 65, 206, 83, 78, 79, 87, 70, 76, 65, 75, 69, 
-    128, 83, 78, 79, 87, 66, 79, 65, 82, 68, 69, 82, 128, 83, 78, 79, 87, 
-    128, 83, 78, 79, 85, 84, 128, 83, 78, 79, 85, 212, 83, 78, 65, 208, 83, 
-    78, 65, 75, 69, 128, 83, 78, 65, 75, 197, 83, 78, 65, 73, 76, 128, 83, 
-    78, 193, 83, 77, 79, 75, 73, 78, 199, 83, 77, 73, 82, 75, 73, 78, 199, 
-    83, 77, 73, 76, 73, 78, 199, 83, 77, 73, 76, 69, 128, 83, 77, 69, 65, 82, 
-    128, 83, 77, 65, 83, 200, 83, 77, 65, 76, 76, 69, 210, 83, 77, 65, 76, 
-    76, 128, 83, 76, 85, 82, 128, 83, 76, 79, 87, 76, 89, 128, 83, 76, 79, 
-    215, 83, 76, 79, 86, 79, 128, 83, 76, 79, 212, 83, 76, 79, 80, 73, 78, 
-    199, 83, 76, 79, 80, 69, 128, 83, 76, 73, 78, 71, 128, 83, 76, 73, 68, 
-    73, 78, 71, 128, 83, 76, 73, 67, 69, 128, 83, 76, 73, 67, 197, 83, 76, 
-    69, 69, 80, 217, 83, 76, 69, 69, 80, 73, 78, 199, 83, 76, 65, 86, 79, 78, 
-    73, 195, 83, 76, 65, 86, 69, 128, 83, 76, 65, 83, 72, 128, 83, 76, 65, 
-    83, 200, 83, 76, 65, 78, 84, 69, 196, 83, 75, 87, 65, 128, 83, 75, 87, 
-    128, 83, 75, 85, 76, 76, 128, 83, 75, 85, 76, 204, 83, 75, 76, 73, 82, 
-    79, 206, 83, 75, 73, 78, 128, 83, 75, 73, 69, 82, 128, 83, 75, 201, 83, 
-    75, 69, 87, 69, 196, 83, 75, 65, 84, 69, 128, 83, 75, 128, 83, 74, 69, 
-    128, 83, 73, 88, 84, 89, 45, 70, 79, 85, 82, 84, 200, 83, 73, 88, 84, 89, 
-    128, 83, 73, 88, 84, 217, 83, 73, 88, 84, 72, 83, 128, 83, 73, 88, 84, 
-    72, 211, 83, 73, 88, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 83, 
-    128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 
-    84, 200, 83, 73, 88, 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 
-    83, 73, 88, 45, 84, 72, 73, 82, 84, 89, 128, 83, 73, 88, 45, 83, 84, 82, 
-    73, 78, 199, 83, 73, 88, 45, 80, 69, 82, 45, 69, 205, 83, 73, 88, 45, 76, 
-    73, 78, 197, 83, 73, 216, 83, 73, 84, 69, 128, 83, 73, 83, 65, 128, 83, 
-    73, 82, 73, 78, 71, 85, 128, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 
-    72, 128, 83, 73, 79, 83, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 
-    73, 79, 83, 45, 82, 73, 69, 85, 76, 128, 83, 73, 79, 83, 45, 80, 73, 69, 
-    85, 80, 45, 75, 73, 89, 69, 79, 75, 128, 83, 73, 79, 83, 45, 80, 72, 73, 
-    69, 85, 80, 72, 128, 83, 73, 79, 83, 45, 80, 65, 78, 83, 73, 79, 83, 128, 
-    83, 73, 79, 83, 45, 78, 73, 69, 85, 78, 128, 83, 73, 79, 83, 45, 77, 73, 
-    69, 85, 77, 128, 83, 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 
-    73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 
-    83, 73, 79, 83, 45, 73, 69, 85, 78, 71, 128, 83, 73, 79, 83, 45, 72, 73, 
-    69, 85, 72, 128, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 83, 73, 79, 
-    83, 45, 67, 72, 73, 69, 85, 67, 72, 128, 83, 73, 79, 211, 83, 73, 78, 75, 
-    73, 78, 71, 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 51, 
-    128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 50, 128, 83, 73, 
-    78, 71, 76, 69, 45, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, 73, 
-    78, 71, 76, 197, 83, 73, 78, 71, 65, 65, 84, 128, 83, 73, 78, 197, 83, 
-    73, 78, 68, 72, 201, 83, 73, 206, 83, 73, 77, 80, 76, 73, 70, 73, 69, 
-    196, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 77, 73, 76, 65, 210, 83, 
-    73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, 76, 85, 78, 71, 85, 206, 83, 
-    73, 77, 65, 128, 83, 73, 76, 86, 69, 82, 128, 83, 73, 76, 75, 128, 83, 
-    73, 76, 73, 81, 85, 193, 83, 73, 76, 72, 79, 85, 69, 84, 84, 69, 128, 83, 
-    73, 76, 72, 79, 85, 69, 84, 84, 197, 83, 73, 76, 65, 51, 128, 83, 73, 75, 
-    73, 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 71, 78, 83, 128, 
-    83, 73, 71, 77, 65, 128, 83, 73, 71, 77, 193, 83, 73, 71, 69, 204, 83, 
-    73, 71, 52, 128, 83, 73, 71, 180, 83, 73, 71, 128, 83, 73, 69, 69, 128, 
-    83, 73, 68, 69, 87, 65, 89, 211, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83, 
-    73, 67, 75, 76, 69, 128, 83, 73, 66, 197, 83, 201, 83, 72, 89, 88, 128, 
-    83, 72, 89, 84, 128, 83, 72, 89, 82, 88, 128, 83, 72, 89, 82, 128, 83, 
-    72, 89, 80, 128, 83, 72, 89, 69, 128, 83, 72, 89, 65, 128, 83, 72, 89, 
-    128, 83, 72, 87, 79, 89, 128, 83, 72, 87, 79, 79, 128, 83, 72, 87, 79, 
-    128, 83, 72, 87, 73, 73, 128, 83, 72, 87, 73, 128, 83, 72, 87, 69, 128, 
-    83, 72, 87, 65, 65, 128, 83, 72, 87, 65, 128, 83, 72, 85, 88, 128, 83, 
-    72, 85, 85, 128, 83, 72, 85, 84, 128, 83, 72, 85, 82, 88, 128, 83, 72, 
-    85, 82, 128, 83, 72, 85, 80, 128, 83, 72, 85, 79, 88, 128, 83, 72, 85, 
-    79, 80, 128, 83, 72, 85, 79, 128, 83, 72, 85, 77, 128, 83, 72, 85, 70, 
-    70, 76, 197, 83, 72, 85, 69, 81, 128, 83, 72, 85, 69, 78, 83, 72, 85, 69, 
-    84, 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85, 50, 128, 83, 72, 85, 
-    178, 83, 72, 85, 128, 83, 72, 213, 83, 72, 84, 65, 80, 73, 67, 128, 83, 
-    72, 84, 65, 128, 83, 72, 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80, 
-    128, 83, 72, 82, 73, 73, 128, 83, 72, 79, 89, 128, 83, 72, 79, 88, 128, 
-    83, 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83, 
-    72, 79, 84, 128, 83, 72, 79, 82, 84, 83, 128, 83, 72, 79, 82, 84, 211, 
-    83, 72, 79, 82, 84, 69, 78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 
-    69, 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 
-    79, 82, 84, 45, 84, 87, 73, 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 
-    84, 87, 73, 71, 45, 83, 79, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 
-    45, 79, 83, 211, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 
-    196, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 
-    79, 82, 84, 45, 84, 87, 73, 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 
-    82, 84, 45, 84, 87, 73, 71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 
-    82, 84, 45, 84, 87, 73, 71, 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 
-    79, 82, 212, 83, 72, 79, 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 128, 
-    83, 72, 79, 79, 84, 73, 78, 199, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 
-    128, 83, 72, 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 69, 128, 83, 72, 
-    79, 197, 83, 72, 79, 65, 128, 83, 72, 79, 128, 83, 72, 73, 89, 89, 65, 
-    65, 76, 65, 65, 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, 
-    72, 73, 82, 212, 83, 72, 73, 82, 65, 69, 128, 83, 72, 73, 82, 128, 83, 
-    72, 73, 210, 83, 72, 73, 81, 128, 83, 72, 73, 80, 128, 83, 72, 73, 78, 
-    84, 207, 83, 72, 73, 78, 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72, 
-    73, 78, 128, 83, 72, 73, 206, 83, 72, 73, 77, 65, 128, 83, 72, 73, 77, 
-    193, 83, 72, 73, 77, 128, 83, 72, 73, 205, 83, 72, 73, 73, 78, 128, 83, 
-    72, 73, 73, 128, 83, 72, 73, 70, 212, 83, 72, 73, 69, 76, 68, 128, 83, 
-    72, 73, 68, 128, 83, 72, 73, 196, 83, 72, 72, 65, 128, 83, 72, 72, 193, 
-    83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, 128, 
-    83, 72, 69, 85, 79, 81, 128, 83, 72, 69, 85, 65, 69, 81, 84, 85, 128, 83, 
-    72, 69, 85, 65, 69, 81, 128, 83, 72, 69, 85, 65, 69, 128, 83, 72, 69, 84, 
-    128, 83, 72, 69, 212, 83, 72, 69, 83, 72, 76, 65, 77, 128, 83, 72, 69, 
-    83, 72, 73, 71, 128, 83, 72, 69, 83, 72, 73, 199, 83, 72, 69, 83, 72, 50, 
-    128, 83, 72, 69, 83, 72, 128, 83, 72, 69, 81, 69, 204, 83, 72, 69, 80, 
-    128, 83, 72, 69, 78, 128, 83, 72, 69, 76, 76, 128, 83, 72, 69, 76, 204, 
-    83, 72, 69, 76, 70, 128, 83, 72, 69, 73, 128, 83, 72, 69, 71, 57, 128, 
-    83, 72, 69, 69, 80, 128, 83, 72, 69, 69, 78, 85, 128, 83, 72, 69, 69, 78, 
-    128, 83, 72, 69, 69, 206, 83, 72, 69, 69, 128, 83, 72, 69, 45, 71, 79, 
-    65, 84, 128, 83, 72, 197, 83, 72, 67, 72, 65, 128, 83, 72, 65, 89, 128, 
-    83, 72, 65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 
-    86, 73, 65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 85, 128, 83, 72, 
-    65, 84, 128, 83, 72, 65, 82, 85, 128, 83, 72, 65, 82, 213, 83, 72, 65, 
-    82, 80, 128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 65, 128, 83, 72, 65, 
-    82, 50, 128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, 128, 83, 
-    72, 65, 80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, 128, 83, 
-    72, 65, 78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, 72, 65, 
-    77, 82, 79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, 128, 83, 
-    72, 65, 75, 84, 73, 128, 83, 72, 65, 73, 128, 83, 72, 65, 68, 79, 87, 69, 
-    196, 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, 
-    68, 68, 193, 83, 72, 65, 68, 128, 83, 72, 65, 196, 83, 72, 65, 66, 54, 
-    128, 83, 72, 65, 65, 128, 83, 72, 65, 54, 128, 83, 72, 65, 51, 128, 83, 
-    72, 65, 179, 83, 71, 82, 193, 83, 71, 79, 210, 83, 71, 67, 128, 83, 71, 
-    65, 215, 83, 71, 65, 194, 83, 71, 128, 83, 69, 88, 84, 85, 76, 193, 83, 
-    69, 88, 84, 73, 76, 69, 128, 83, 69, 88, 84, 65, 78, 211, 83, 69, 86, 69, 
-    82, 65, 78, 67, 69, 128, 83, 69, 86, 69, 78, 84, 89, 128, 83, 69, 86, 69, 
-    78, 84, 217, 83, 69, 86, 69, 78, 84, 72, 128, 83, 69, 86, 69, 78, 84, 69, 
-    69, 78, 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, 83, 69, 86, 69, 78, 45, 
-    84, 72, 73, 82, 84, 89, 128, 83, 69, 86, 69, 206, 83, 69, 85, 88, 128, 
-    83, 69, 85, 78, 89, 65, 77, 128, 83, 69, 85, 65, 69, 81, 128, 83, 69, 84, 
-    70, 79, 78, 128, 83, 69, 83, 84, 69, 82, 84, 73, 85, 211, 83, 69, 83, 81, 
-    85, 73, 81, 85, 65, 68, 82, 65, 84, 69, 128, 83, 69, 83, 65, 77, 197, 83, 
-    69, 82, 86, 73, 67, 197, 83, 69, 82, 73, 70, 83, 128, 83, 69, 82, 73, 70, 
-    211, 83, 69, 81, 85, 69, 78, 67, 197, 83, 69, 80, 84, 69, 77, 66, 69, 82, 
-    128, 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, 69, 80, 65, 82, 65, 84, 
-    79, 210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, 73, 128, 83, 69, 77, 
-    85, 78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, 128, 83, 69, 77, 75, 
-    128, 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, 77, 73, 83, 79, 70, 
-    212, 83, 69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 77, 73, 77, 
-    73, 78, 73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, 67, 212, 83, 69, 77, 
-    73, 67, 79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, 76, 79, 206, 83, 69, 
-    77, 73, 67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, 73, 67, 73, 82, 67, 
-    76, 197, 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, 69, 77, 73, 45, 86, 
-    79, 73, 67, 69, 196, 83, 69, 76, 70, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 57, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 56, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 57, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 53, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 50, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 55, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 52, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 49, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 57, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 
-    55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 54, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 
-    52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 51, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 
-    49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 48, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 57, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 54, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 51, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 48, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 56, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 53, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 50, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 55, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 52, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 49, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 57, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 54, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 51, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 48, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 56, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 54, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 50, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 50, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 51, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 50, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 50, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    50, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 50, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 50, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 55, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 54, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 50, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    50, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 51, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 50, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 50, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 
-    48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 50, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    50, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 55, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 54, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 50, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 
-    52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 51, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 50, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 50, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 48, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 50, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 
-    56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 55, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 50, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 50, 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 52, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 51, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 50, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 
-    50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 48, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 50, 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 56, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 55, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 50, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 
-    49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 52, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 50, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 50, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 49, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 48, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 
-    48, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 56, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 50, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 50, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 53, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 52, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 50, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    50, 48, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 49, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 48, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 57, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 49, 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 
-    55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 54, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 49, 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 49, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 51, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 50, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 49, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
-    57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 49, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 49, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 55, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 54, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 49, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
-    56, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 51, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 49, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 49, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 48, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 49, 55, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
-    55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 55, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 49, 55, 54, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 49, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 52, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 51, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 49, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    49, 55, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 48, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 49, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 56, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 55, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 49, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    49, 54, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 52, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 51, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 49, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 
-    49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 48, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    49, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 56, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 55, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 49, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 
-    53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 52, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 49, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 49, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 49, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 48, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 
-    57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 56, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 49, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 49, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 53, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 52, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 49, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
-    52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 49, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 49, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 57, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 56, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 49, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
-    51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 53, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 49, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 49, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 50, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 49, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 49, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 57, 128, 83, 69, 
-    76, 69, 67, 84, 79, 82, 45, 49, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, 
-    82, 45, 49, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 54, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 53, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 49, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    49, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 50, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 49, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 49, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 
-    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 57, 128, 83, 69, 76, 69, 
-    67, 84, 79, 82, 45, 49, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
-    49, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 54, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 53, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 49, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 
-    51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 50, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 49, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 49, 49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 128, 83, 
-    69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 57, 128, 83, 69, 76, 69, 67, 84, 
-    79, 82, 45, 49, 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 
-    55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 54, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 49, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
-    45, 49, 48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 51, 128, 
-    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 50, 128, 83, 69, 76, 69, 67, 
-    84, 79, 82, 45, 49, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
-    48, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 128, 83, 69, 76, 
-    69, 67, 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, 84, 79, 210, 83, 69, 
-    76, 69, 67, 84, 69, 196, 83, 69, 73, 83, 77, 65, 128, 83, 69, 73, 83, 77, 
-    193, 83, 69, 72, 128, 83, 69, 71, 79, 76, 128, 83, 69, 71, 78, 79, 128, 
-    83, 69, 71, 77, 69, 78, 84, 128, 83, 69, 69, 78, 85, 128, 83, 69, 69, 78, 
+    79, 78, 199, 83, 84, 82, 79, 75, 69, 83, 128, 83, 84, 82, 79, 75, 69, 
+    211, 83, 84, 82, 79, 75, 69, 45, 57, 128, 83, 84, 82, 79, 75, 69, 45, 56, 
+    128, 83, 84, 82, 79, 75, 69, 45, 55, 128, 83, 84, 82, 79, 75, 69, 45, 54, 
+    128, 83, 84, 82, 79, 75, 69, 45, 53, 128, 83, 84, 82, 79, 75, 69, 45, 52, 
+    128, 83, 84, 82, 79, 75, 69, 45, 51, 128, 83, 84, 82, 79, 75, 69, 45, 50, 
+    128, 83, 84, 82, 79, 75, 69, 45, 49, 49, 128, 83, 84, 82, 79, 75, 69, 45, 
+    49, 48, 128, 83, 84, 82, 79, 75, 69, 45, 49, 128, 83, 84, 82, 79, 75, 
+    197, 83, 84, 82, 73, 80, 69, 128, 83, 84, 82, 73, 78, 71, 128, 83, 84, 
+    82, 73, 78, 199, 83, 84, 82, 73, 75, 69, 84, 72, 82, 79, 85, 71, 72, 128, 
+    83, 84, 82, 73, 68, 69, 128, 83, 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, 
+    69, 84, 67, 72, 69, 196, 83, 84, 82, 69, 83, 211, 83, 84, 82, 69, 78, 71, 
+    84, 72, 128, 83, 84, 82, 69, 65, 77, 69, 82, 128, 83, 84, 82, 65, 87, 66, 
+    69, 82, 82, 89, 128, 83, 84, 82, 65, 84, 85, 77, 45, 50, 128, 83, 84, 82, 
+    65, 84, 85, 77, 128, 83, 84, 82, 65, 84, 85, 205, 83, 84, 82, 65, 84, 73, 
+    65, 206, 83, 84, 82, 65, 73, 78, 69, 82, 128, 83, 84, 82, 65, 73, 71, 72, 
+    84, 78, 69, 83, 83, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, 84, 82, 65, 
+    73, 70, 128, 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, 128, 83, 84, 
+    79, 86, 69, 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, 87, 65, 84, 67, 
+    72, 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, 80, 80, 65, 71, 
+    69, 128, 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, 78, 69, 128, 
+    83, 84, 79, 67, 75, 128, 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 
+    204, 83, 84, 73, 76, 197, 83, 84, 73, 71, 77, 65, 128, 83, 84, 69, 80, 
+    128, 83, 84, 69, 77, 128, 83, 84, 69, 65, 77, 73, 78, 199, 83, 84, 69, 
+    65, 77, 128, 83, 84, 69, 65, 205, 83, 84, 65, 86, 82, 79, 85, 128, 83, 
+    84, 65, 86, 82, 79, 83, 128, 83, 84, 65, 86, 82, 79, 211, 83, 84, 65, 85, 
+    82, 79, 83, 128, 83, 84, 65, 84, 85, 197, 83, 84, 65, 84, 73, 79, 78, 
+    128, 83, 84, 65, 84, 69, 82, 83, 128, 83, 84, 65, 84, 69, 128, 83, 84, 
+    65, 82, 212, 83, 84, 65, 82, 83, 128, 83, 84, 65, 82, 82, 69, 196, 83, 
+    84, 65, 82, 75, 128, 83, 84, 65, 82, 128, 83, 84, 65, 210, 83, 84, 65, 
+    78, 68, 83, 84, 73, 76, 76, 128, 83, 84, 65, 78, 68, 65, 82, 196, 83, 84, 
+    65, 78, 68, 128, 83, 84, 65, 78, 128, 83, 84, 65, 76, 76, 73, 79, 78, 
+    128, 83, 84, 65, 70, 70, 128, 83, 84, 65, 70, 198, 83, 84, 65, 67, 67, 
+    65, 84, 79, 128, 83, 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, 79, 128, 
+    83, 84, 50, 128, 83, 83, 89, 88, 128, 83, 83, 89, 84, 128, 83, 83, 89, 
+    82, 88, 128, 83, 83, 89, 82, 128, 83, 83, 89, 80, 128, 83, 83, 89, 128, 
+    83, 83, 85, 88, 128, 83, 83, 85, 85, 128, 83, 83, 85, 84, 128, 83, 83, 
+    85, 80, 128, 83, 83, 79, 88, 128, 83, 83, 79, 84, 128, 83, 83, 79, 80, 
+    128, 83, 83, 79, 79, 128, 83, 83, 79, 128, 83, 83, 73, 88, 128, 83, 83, 
+    73, 84, 128, 83, 83, 73, 80, 128, 83, 83, 73, 73, 128, 83, 83, 73, 69, 
+    88, 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, 73, 128, 
+    83, 83, 72, 69, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, 
+    69, 69, 128, 83, 83, 65, 88, 128, 83, 83, 65, 85, 128, 83, 83, 65, 84, 
+    128, 83, 83, 65, 80, 128, 83, 83, 65, 78, 71, 89, 69, 79, 82, 73, 78, 72, 
+    73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 45, 80, 
+    73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 
+    83, 65, 78, 71, 84, 72, 73, 69, 85, 84, 72, 128, 83, 83, 65, 78, 71, 83, 
+    73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 
+    79, 83, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 
+    45, 75, 73, 89, 69, 79, 75, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 
+    83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 45, 75, 72, 73, 69, 85, 75, 72, 
+    128, 83, 83, 65, 78, 71, 82, 73, 69, 85, 76, 128, 83, 83, 65, 78, 71, 80, 
+    73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 83, 83, 
+    65, 78, 71, 77, 73, 69, 85, 77, 128, 83, 83, 65, 78, 71, 75, 73, 89, 69, 
+    79, 75, 128, 83, 83, 65, 78, 71, 73, 69, 85, 78, 71, 128, 83, 83, 65, 78, 
+    71, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 45, 
+    72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 83, 
+    83, 65, 78, 71, 65, 82, 65, 69, 65, 128, 83, 83, 65, 73, 128, 83, 83, 65, 
+    65, 128, 83, 83, 51, 128, 83, 83, 50, 128, 83, 82, 128, 83, 81, 85, 73, 
+    83, 200, 83, 81, 85, 73, 82, 82, 69, 204, 83, 81, 85, 73, 71, 71, 76, 
+    197, 83, 81, 85, 65, 212, 83, 81, 85, 65, 82, 69, 83, 128, 83, 81, 85, 
+    65, 82, 69, 68, 128, 83, 81, 85, 65, 82, 69, 128, 83, 80, 87, 65, 128, 
+    83, 80, 85, 78, 71, 211, 83, 80, 82, 79, 85, 84, 128, 83, 80, 82, 73, 78, 
+    71, 83, 128, 83, 80, 82, 73, 78, 71, 128, 83, 80, 82, 69, 67, 72, 71, 69, 
+    83, 65, 78, 199, 83, 80, 79, 85, 84, 73, 78, 199, 83, 80, 79, 84, 128, 
+    83, 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 83, 80, 76, 
+    65, 83, 72, 73, 78, 199, 83, 80, 73, 82, 73, 84, 85, 211, 83, 80, 73, 82, 
+    73, 84, 128, 83, 80, 73, 82, 73, 212, 83, 80, 73, 82, 65, 78, 84, 128, 
+    83, 80, 73, 82, 65, 76, 128, 83, 80, 73, 82, 65, 204, 83, 80, 73, 68, 69, 
+    82, 217, 83, 80, 73, 67, 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 
+    83, 80, 69, 83, 77, 73, 76, 207, 83, 80, 69, 69, 68, 66, 79, 65, 84, 128, 
+    83, 80, 69, 69, 67, 72, 128, 83, 80, 69, 69, 67, 200, 83, 80, 69, 67, 73, 
+    65, 76, 128, 83, 80, 69, 65, 82, 128, 83, 80, 69, 65, 75, 69, 82, 128, 
+    83, 80, 69, 65, 75, 69, 210, 83, 80, 69, 65, 75, 45, 78, 79, 45, 69, 86, 
+    73, 204, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 73, 78, 
+    199, 83, 80, 65, 82, 75, 76, 69, 83, 128, 83, 80, 65, 82, 75, 76, 69, 82, 
+    128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 71, 72, 69, 84, 84, 73, 
+    128, 83, 80, 65, 68, 69, 83, 128, 83, 80, 65, 68, 197, 83, 80, 65, 67, 
+    73, 78, 199, 83, 80, 65, 67, 197, 83, 80, 65, 128, 83, 79, 89, 128, 83, 
+    79, 87, 73, 76, 207, 83, 79, 87, 128, 83, 79, 85, 84, 72, 69, 82, 206, 
+    83, 79, 85, 84, 72, 45, 83, 76, 65, 86, 69, 217, 83, 79, 85, 84, 200, 83, 
+    79, 85, 82, 67, 69, 128, 83, 79, 85, 78, 68, 128, 83, 79, 85, 78, 196, 
+    83, 79, 85, 78, 65, 80, 128, 83, 79, 85, 128, 83, 79, 83, 128, 83, 79, 
+    82, 193, 83, 79, 81, 128, 83, 79, 79, 206, 83, 79, 78, 74, 65, 77, 128, 
+    83, 79, 78, 71, 128, 83, 79, 78, 128, 83, 79, 77, 80, 69, 78, 199, 83, 
+    79, 77, 128, 83, 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 
+    211, 83, 79, 72, 128, 83, 79, 71, 68, 73, 65, 206, 83, 79, 70, 84, 87, 
+    65, 82, 69, 45, 70, 85, 78, 67, 84, 73, 79, 206, 83, 79, 70, 84, 78, 69, 
+    83, 83, 128, 83, 79, 70, 212, 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 
+    128, 83, 79, 67, 67, 69, 210, 83, 79, 65, 80, 128, 83, 79, 65, 128, 83, 
+    207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, 87, 77, 65, 206, 83, 
+    78, 79, 87, 70, 76, 65, 75, 69, 128, 83, 78, 79, 87, 66, 79, 65, 82, 68, 
+    69, 82, 128, 83, 78, 79, 87, 128, 83, 78, 79, 85, 84, 128, 83, 78, 79, 
+    85, 212, 83, 78, 65, 208, 83, 78, 65, 75, 69, 128, 83, 78, 65, 75, 197, 
+    83, 78, 65, 73, 76, 128, 83, 78, 193, 83, 77, 79, 75, 73, 78, 199, 83, 
+    77, 73, 82, 75, 73, 78, 199, 83, 77, 73, 76, 73, 78, 199, 83, 77, 73, 76, 
+    69, 128, 83, 77, 69, 65, 82, 128, 83, 77, 65, 83, 200, 83, 77, 65, 76, 
+    76, 69, 210, 83, 77, 65, 76, 76, 128, 83, 76, 85, 82, 128, 83, 76, 79, 
+    87, 76, 89, 128, 83, 76, 79, 215, 83, 76, 79, 86, 79, 128, 83, 76, 79, 
+    212, 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, 128, 83, 76, 73, 
+    78, 71, 128, 83, 76, 73, 68, 73, 78, 71, 128, 83, 76, 73, 67, 69, 128, 
+    83, 76, 73, 67, 197, 83, 76, 69, 69, 80, 217, 83, 76, 69, 69, 80, 73, 78, 
+    199, 83, 76, 65, 86, 79, 78, 73, 195, 83, 76, 65, 86, 69, 128, 83, 76, 
+    65, 83, 72, 128, 83, 76, 65, 83, 200, 83, 76, 65, 78, 84, 69, 196, 83, 
+    75, 87, 65, 128, 83, 75, 87, 128, 83, 75, 85, 76, 76, 128, 83, 75, 85, 
+    76, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, 78, 128, 83, 75, 73, 
+    69, 82, 128, 83, 75, 201, 83, 75, 69, 87, 69, 196, 83, 75, 65, 84, 69, 
+    128, 83, 75, 128, 83, 74, 69, 128, 83, 73, 88, 84, 89, 45, 70, 79, 85, 
+    82, 84, 200, 83, 73, 88, 84, 89, 128, 83, 73, 88, 84, 217, 83, 73, 88, 
+    84, 72, 83, 128, 83, 73, 88, 84, 72, 211, 83, 73, 88, 84, 72, 128, 83, 
+    73, 88, 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, 88, 84, 69, 69, 78, 84, 
+    72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, 73, 88, 84, 69, 69, 78, 
+    128, 83, 73, 88, 84, 69, 69, 206, 83, 73, 88, 45, 84, 72, 73, 82, 84, 89, 
+    128, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, 73, 88, 45, 80, 69, 82, 
+    45, 69, 205, 83, 73, 88, 45, 76, 73, 78, 197, 83, 73, 216, 83, 73, 84, 
+    69, 128, 83, 73, 83, 65, 128, 83, 73, 82, 73, 78, 71, 85, 128, 83, 73, 
+    79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 83, 73, 79, 83, 45, 83, 83, 
+    65, 78, 71, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, 82, 73, 69, 85, 76, 
+    128, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 45, 75, 73, 89, 69, 79, 75, 
+    128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, 128, 83, 73, 79, 83, 
+    45, 80, 65, 78, 83, 73, 79, 83, 128, 83, 73, 79, 83, 45, 78, 73, 69, 85, 
+    78, 128, 83, 73, 79, 83, 45, 77, 73, 69, 85, 77, 128, 83, 73, 79, 83, 45, 
+    75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 
+    79, 85, 78, 80, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, 73, 69, 85, 78, 
+    71, 128, 83, 73, 79, 83, 45, 72, 73, 69, 85, 72, 128, 83, 73, 79, 83, 45, 
+    67, 73, 69, 85, 67, 128, 83, 73, 79, 83, 45, 67, 72, 73, 69, 85, 67, 72, 
+    128, 83, 73, 79, 211, 83, 73, 78, 75, 73, 78, 71, 128, 83, 73, 78, 71, 
+    76, 69, 45, 83, 72, 73, 70, 84, 45, 51, 128, 83, 73, 78, 71, 76, 69, 45, 
+    83, 72, 73, 70, 84, 45, 50, 128, 83, 73, 78, 71, 76, 69, 45, 76, 73, 78, 
+    197, 83, 73, 78, 71, 76, 69, 128, 83, 73, 78, 71, 76, 197, 83, 73, 78, 
+    71, 65, 65, 84, 128, 83, 73, 78, 197, 83, 73, 78, 68, 72, 201, 83, 73, 
+    206, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, 
+    128, 83, 73, 77, 73, 76, 65, 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, 
+    73, 77, 65, 76, 85, 78, 71, 85, 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, 
+    69, 82, 128, 83, 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, 
+    76, 72, 79, 85, 69, 84, 84, 69, 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, 
+    197, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 
+    83, 73, 75, 178, 83, 73, 71, 78, 83, 128, 83, 73, 71, 77, 65, 128, 83, 
+    73, 71, 77, 193, 83, 73, 71, 69, 204, 83, 73, 71, 52, 128, 83, 73, 71, 
+    180, 83, 73, 71, 128, 83, 73, 69, 69, 128, 83, 73, 68, 69, 87, 65, 89, 
+    211, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83, 73, 67, 75, 76, 69, 128, 
+    83, 73, 66, 197, 83, 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, 128, 83, 
+    72, 89, 82, 88, 128, 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, 83, 72, 
+    89, 69, 128, 83, 72, 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, 79, 89, 
+    128, 83, 72, 87, 79, 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, 73, 73, 
+    128, 83, 72, 87, 73, 128, 83, 72, 87, 69, 128, 83, 72, 87, 65, 65, 128, 
+    83, 72, 87, 65, 128, 83, 72, 85, 88, 128, 83, 72, 85, 85, 128, 83, 72, 
+    85, 84, 128, 83, 72, 85, 82, 88, 128, 83, 72, 85, 82, 128, 83, 72, 85, 
+    80, 128, 83, 72, 85, 79, 88, 128, 83, 72, 85, 79, 80, 128, 83, 72, 85, 
+    79, 128, 83, 72, 85, 77, 128, 83, 72, 85, 70, 70, 76, 197, 83, 72, 85, 
+    69, 81, 128, 83, 72, 85, 69, 78, 83, 72, 85, 69, 84, 128, 83, 72, 85, 66, 
+    85, 82, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, 83, 72, 85, 128, 83, 
+    72, 213, 83, 72, 84, 65, 80, 73, 67, 128, 83, 72, 84, 65, 128, 83, 72, 
+    82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80, 128, 83, 72, 82, 73, 73, 
+    128, 83, 72, 79, 89, 128, 83, 72, 79, 88, 128, 83, 72, 79, 87, 69, 82, 
+    128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83, 72, 79, 84, 128, 83, 
+    72, 79, 82, 84, 83, 128, 83, 72, 79, 82, 84, 211, 83, 72, 79, 82, 84, 69, 
+    78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, 128, 83, 72, 79, 82, 
+    84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, 82, 84, 45, 84, 87, 
+    73, 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 83, 
+    79, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 79, 83, 211, 83, 72, 
+    79, 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 196, 83, 72, 79, 82, 84, 
+    45, 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 79, 82, 84, 45, 84, 87, 
+    73, 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 
+    71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 82, 84, 45, 84, 87, 73, 
+    71, 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 79, 82, 212, 83, 72, 
+    79, 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 128, 83, 72, 79, 79, 84, 
+    73, 78, 199, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, 83, 72, 79, 
+    71, 201, 83, 72, 79, 199, 83, 72, 79, 69, 128, 83, 72, 79, 197, 83, 72, 
+    79, 65, 128, 83, 72, 79, 128, 83, 72, 73, 89, 89, 65, 65, 76, 65, 65, 
+    128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, 72, 73, 82, 212, 
+    83, 72, 73, 82, 65, 69, 128, 83, 72, 73, 82, 128, 83, 72, 73, 210, 83, 
+    72, 73, 81, 128, 83, 72, 73, 80, 128, 83, 72, 73, 78, 84, 207, 83, 72, 
+    73, 78, 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72, 73, 78, 128, 83, 
+    72, 73, 206, 83, 72, 73, 77, 65, 128, 83, 72, 73, 77, 193, 83, 72, 73, 
+    77, 128, 83, 72, 73, 205, 83, 72, 73, 73, 78, 128, 83, 72, 73, 73, 128, 
+    83, 72, 73, 70, 212, 83, 72, 73, 69, 76, 68, 128, 83, 72, 73, 68, 128, 
+    83, 72, 73, 196, 83, 72, 72, 65, 128, 83, 72, 72, 193, 83, 72, 69, 88, 
+    128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, 128, 83, 72, 69, 85, 
+    79, 81, 128, 83, 72, 69, 85, 65, 69, 81, 84, 85, 128, 83, 72, 69, 85, 65, 
+    69, 81, 128, 83, 72, 69, 85, 65, 69, 128, 83, 72, 69, 84, 128, 83, 72, 
+    69, 212, 83, 72, 69, 83, 72, 76, 65, 77, 128, 83, 72, 69, 83, 72, 73, 71, 
+    128, 83, 72, 69, 83, 72, 73, 199, 83, 72, 69, 83, 72, 50, 128, 83, 72, 
+    69, 83, 72, 128, 83, 72, 69, 81, 69, 204, 83, 72, 69, 80, 128, 83, 72, 
+    69, 78, 128, 83, 72, 69, 76, 76, 128, 83, 72, 69, 76, 204, 83, 72, 69, 
+    76, 70, 128, 83, 72, 69, 73, 128, 83, 72, 69, 71, 57, 128, 83, 72, 69, 
+    69, 80, 128, 83, 72, 69, 69, 78, 85, 128, 83, 72, 69, 69, 78, 128, 83, 
+    72, 69, 69, 206, 83, 72, 69, 69, 128, 83, 72, 69, 45, 71, 79, 65, 84, 
+    128, 83, 72, 197, 83, 72, 67, 72, 65, 128, 83, 72, 65, 89, 128, 83, 72, 
+    65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, 73, 
+    65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 85, 128, 83, 72, 65, 84, 
+    128, 83, 72, 65, 82, 85, 128, 83, 72, 65, 82, 213, 83, 72, 65, 82, 80, 
+    128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 65, 128, 83, 72, 65, 82, 50, 
+    128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, 128, 83, 72, 65, 
+    80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, 128, 83, 72, 65, 
+    78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, 72, 65, 77, 82, 
+    79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, 128, 83, 72, 65, 
+    75, 84, 73, 128, 83, 72, 65, 73, 128, 83, 72, 65, 68, 79, 87, 69, 196, 
+    83, 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, 68, 68, 
+    193, 83, 72, 65, 68, 128, 83, 72, 65, 196, 83, 72, 65, 66, 54, 128, 83, 
+    72, 65, 65, 128, 83, 72, 65, 54, 128, 83, 72, 65, 51, 128, 83, 72, 65, 
+    179, 83, 71, 82, 193, 83, 71, 79, 210, 83, 71, 67, 128, 83, 71, 65, 215, 
+    83, 71, 65, 194, 83, 71, 128, 83, 69, 88, 84, 85, 76, 193, 83, 69, 88, 
+    84, 73, 76, 69, 128, 83, 69, 88, 84, 65, 78, 211, 83, 69, 86, 69, 82, 65, 
+    78, 67, 69, 128, 83, 69, 86, 69, 78, 84, 89, 128, 83, 69, 86, 69, 78, 84, 
+    217, 83, 69, 86, 69, 78, 84, 72, 128, 83, 69, 86, 69, 78, 84, 69, 69, 78, 
+    128, 83, 69, 86, 69, 78, 84, 69, 69, 206, 83, 69, 86, 69, 78, 45, 84, 72, 
+    73, 82, 84, 89, 128, 83, 69, 86, 69, 206, 83, 69, 85, 88, 128, 83, 69, 
+    85, 78, 89, 65, 77, 128, 83, 69, 85, 65, 69, 81, 128, 83, 69, 84, 70, 79, 
+    78, 128, 83, 69, 83, 84, 69, 82, 84, 73, 85, 211, 83, 69, 83, 81, 85, 73, 
+    81, 85, 65, 68, 82, 65, 84, 69, 128, 83, 69, 83, 65, 77, 197, 83, 69, 82, 
+    86, 73, 67, 197, 83, 69, 82, 73, 70, 83, 128, 83, 69, 82, 73, 70, 211, 
+    83, 69, 81, 85, 69, 78, 67, 197, 83, 69, 80, 84, 69, 77, 66, 69, 82, 128, 
+    83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 83, 69, 80, 65, 82, 65, 84, 79, 
+    210, 83, 69, 78, 84, 79, 128, 83, 69, 78, 84, 73, 128, 83, 69, 77, 85, 
+    78, 67, 73, 193, 83, 69, 77, 75, 65, 84, 72, 128, 83, 69, 77, 75, 128, 
+    83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 69, 77, 73, 83, 79, 70, 212, 83, 
+    69, 77, 73, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 77, 73, 77, 73, 78, 
+    73, 77, 193, 83, 69, 77, 73, 68, 73, 82, 69, 67, 212, 83, 69, 77, 73, 67, 
+    79, 76, 79, 78, 128, 83, 69, 77, 73, 67, 79, 76, 79, 206, 83, 69, 77, 73, 
+    67, 73, 82, 67, 85, 76, 65, 210, 83, 69, 77, 73, 67, 73, 82, 67, 76, 197, 
+    83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, 69, 77, 73, 45, 86, 79, 73, 
+    67, 69, 196, 83, 69, 76, 70, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 
+    57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 56, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 
+    54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 53, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 
+    51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 50, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 
+    48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 56, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 55, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 53, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 52, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 56, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 50, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 49, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 56, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 57, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 55, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 54, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 52, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 51, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 49, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 48, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 57, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 54, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 51, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 48, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 53, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 56, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 53, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 50, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 55, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 52, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 49, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 57, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 
+    55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 54, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 
+    52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 51, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 
+    49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 48, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 57, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 56, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 54, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 54, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 50, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    50, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 51, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 50, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 50, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 
+    48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 50, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    50, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 55, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 54, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 50, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 
+    52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 51, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 50, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 50, 52, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 48, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 52, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 50, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 
+    56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 55, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 50, 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 50, 51, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 52, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 51, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 50, 51, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 
+    51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 48, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 50, 50, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 56, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 55, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 50, 50, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 
+    50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 52, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 50, 50, 51, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 50, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 49, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 50, 48, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 
+    49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 56, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 50, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 50, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 53, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 52, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 50, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    50, 49, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 49, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 50, 49, 48, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 57, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 56, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 50, 48, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    50, 48, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 53, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 52, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 50, 48, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 
+    50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 49, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 50, 48, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 49, 57, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 49, 57, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 55, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 54, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 49, 57, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
+    57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 51, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 49, 57, 50, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 49, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 48, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 57, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 49, 56, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
+    56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 55, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 49, 56, 54, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 49, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 52, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 51, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 49, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    49, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 48, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 49, 55, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 56, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 55, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 49, 55, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    49, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 52, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 51, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 49, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 
+    49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 48, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    49, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 56, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 55, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 49, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 
+    53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 52, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 49, 54, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 49, 54, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 49, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 54, 48, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 
+    57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 56, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 49, 53, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 49, 53, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 53, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 52, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 49, 53, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
+    53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 53, 49, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 49, 53, 48, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 57, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 56, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 49, 52, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
+    52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 53, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 49, 52, 52, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 49, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 50, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 49, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 49, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 57, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 49, 51, 56, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 49, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 54, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 53, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 49, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    49, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 50, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 49, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 49, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 51, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 57, 128, 83, 69, 76, 69, 
+    67, 84, 79, 82, 45, 49, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 
+    49, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 54, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 53, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 49, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 
+    51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 50, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 49, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 49, 50, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 50, 128, 83, 
+    69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 57, 128, 83, 69, 76, 69, 67, 84, 
+    79, 82, 45, 49, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 
+    55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 54, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 49, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 49, 49, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 51, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 50, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 49, 49, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
+    49, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 49, 128, 83, 69, 76, 
+    69, 67, 84, 79, 82, 45, 49, 48, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 
+    45, 49, 48, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 55, 128, 
+    83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 54, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 49, 48, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 
+    48, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 51, 128, 83, 69, 
+    76, 69, 67, 84, 79, 82, 45, 49, 48, 50, 128, 83, 69, 76, 69, 67, 84, 79, 
+    82, 45, 49, 48, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 48, 
+    128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 48, 128, 83, 69, 76, 69, 67, 
+    84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, 84, 79, 210, 83, 69, 76, 69, 
+    67, 84, 69, 196, 83, 69, 73, 83, 77, 65, 128, 83, 69, 73, 83, 77, 193, 
+    83, 69, 72, 128, 83, 69, 71, 79, 76, 128, 83, 69, 71, 78, 79, 128, 83, 
+    69, 71, 77, 69, 78, 84, 128, 83, 69, 69, 78, 85, 128, 83, 69, 69, 78, 
     128, 83, 69, 69, 206, 83, 69, 69, 68, 76, 73, 78, 71, 128, 83, 69, 69, 
     45, 78, 79, 45, 69, 86, 73, 204, 83, 69, 67, 84, 79, 82, 128, 83, 69, 67, 
     84, 73, 79, 78, 128, 83, 69, 67, 84, 73, 79, 206, 83, 69, 67, 82, 69, 84, 
@@ -1292,2731 +1293,2733 @@
     67, 203, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, 82, 79, 65, 83, 84, 
     69, 196, 82, 79, 65, 82, 128, 82, 79, 65, 128, 82, 78, 89, 73, 78, 199, 
     82, 78, 79, 79, 78, 128, 82, 78, 79, 79, 206, 82, 78, 65, 205, 82, 77, 
-    84, 128, 82, 76, 79, 128, 82, 76, 77, 128, 82, 76, 69, 128, 82, 74, 69, 
-    211, 82, 74, 69, 128, 82, 74, 197, 82, 73, 86, 69, 82, 128, 82, 73, 84, 
-    85, 65, 76, 128, 82, 73, 84, 84, 79, 82, 85, 128, 82, 73, 84, 83, 73, 
-    128, 82, 73, 83, 73, 78, 199, 82, 73, 83, 72, 128, 82, 73, 82, 65, 128, 
-    82, 73, 80, 128, 82, 73, 78, 71, 211, 82, 73, 78, 70, 79, 82, 90, 65, 78, 
-    68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66, 65, 128, 82, 73, 75, 82, 
-    73, 75, 128, 82, 73, 71, 86, 69, 68, 73, 195, 82, 73, 71, 72, 84, 87, 65, 
-    82, 68, 83, 128, 82, 73, 71, 72, 84, 72, 65, 78, 196, 82, 73, 71, 72, 84, 
-    45, 84, 79, 45, 76, 69, 70, 212, 82, 73, 71, 72, 84, 45, 83, 73, 68, 197, 
-    82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 79, 87, 69, 196, 82, 73, 71, 72, 
-    84, 45, 83, 72, 65, 68, 69, 196, 82, 73, 71, 72, 84, 45, 80, 79, 73, 78, 
-    84, 73, 78, 199, 82, 73, 71, 72, 84, 45, 72, 65, 78, 68, 69, 196, 82, 73, 
-    71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 70, 65, 67, 73, 
-    78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 69, 85, 76, 45, 89, 69, 83, 73, 
-    69, 85, 78, 71, 128, 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, 72, 
-    73, 69, 85, 72, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 89, 
-    69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 84, 
-    73, 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 
-    84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 84, 72, 73, 69, 85, 
-    84, 72, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 84, 73, 75, 69, 
-    85, 84, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 
-    128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 
-    82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 
-    82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80, 
-    73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 
-    80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80, 
-    73, 69, 85, 80, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 
-    45, 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 
-    45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 
-    80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78, 83, 73, 79, 83, 128, 82, 
-    73, 69, 85, 76, 45, 78, 73, 69, 85, 78, 128, 82, 73, 69, 85, 76, 45, 77, 
-    73, 69, 85, 77, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 77, 73, 
-    69, 85, 77, 45, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 77, 
-    73, 69, 85, 77, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 77, 
-    73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45, 
-    83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45, 
-    72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 
-    128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 
-    85, 80, 128, 82, 73, 69, 85, 76, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 
-    85, 76, 45, 67, 73, 69, 85, 67, 128, 82, 73, 69, 85, 204, 82, 73, 69, 76, 
-    128, 82, 73, 69, 69, 128, 82, 73, 67, 69, 77, 128, 82, 73, 67, 69, 128, 
-    82, 73, 67, 197, 82, 73, 66, 66, 79, 78, 128, 82, 73, 65, 204, 82, 72, 
-    79, 84, 73, 195, 82, 72, 79, 128, 82, 72, 207, 82, 72, 65, 128, 82, 71, 
-    89, 73, 78, 71, 83, 128, 82, 71, 89, 65, 78, 128, 82, 71, 89, 193, 82, 
-    69, 86, 79, 76, 86, 73, 78, 199, 82, 69, 86, 79, 76, 85, 84, 73, 79, 78, 
-    128, 82, 69, 86, 77, 65, 128, 82, 69, 86, 73, 65, 128, 82, 69, 86, 69, 
-    82, 83, 69, 68, 128, 82, 69, 86, 69, 82, 83, 69, 196, 82, 69, 86, 69, 82, 
-    83, 197, 82, 69, 85, 88, 128, 82, 69, 85, 128, 82, 69, 84, 85, 82, 78, 
-    128, 82, 69, 84, 85, 82, 206, 82, 69, 84, 82, 79, 70, 76, 69, 216, 82, 
-    69, 84, 82, 69, 65, 84, 128, 82, 69, 84, 79, 82, 84, 128, 82, 69, 83, 85, 
-    80, 73, 78, 85, 83, 128, 82, 69, 83, 84, 82, 79, 79, 77, 128, 82, 69, 83, 
-    84, 82, 73, 67, 84, 69, 196, 82, 69, 83, 84, 128, 82, 69, 83, 80, 79, 78, 
-    83, 69, 128, 82, 69, 83, 79, 85, 82, 67, 69, 128, 82, 69, 83, 79, 76, 85, 
-    84, 73, 79, 78, 128, 82, 69, 83, 73, 83, 84, 65, 78, 67, 69, 128, 82, 69, 
-    83, 73, 68, 69, 78, 67, 69, 128, 82, 69, 83, 200, 82, 69, 82, 69, 78, 71, 
-    71, 65, 78, 128, 82, 69, 82, 69, 75, 65, 78, 128, 82, 69, 80, 82, 69, 83, 
-    69, 78, 84, 128, 82, 69, 80, 76, 65, 67, 69, 77, 69, 78, 212, 82, 69, 80, 
-    72, 128, 82, 69, 80, 69, 84, 73, 84, 73, 79, 206, 82, 69, 80, 69, 65, 84, 
-    69, 196, 82, 69, 80, 69, 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69, 
-    80, 65, 89, 65, 128, 82, 69, 80, 65, 128, 82, 69, 80, 193, 82, 69, 78, 
-    84, 79, 71, 69, 78, 128, 82, 69, 78, 128, 82, 69, 206, 82, 69, 77, 85, 
-    128, 82, 69, 77, 69, 68, 89, 128, 82, 69, 76, 73, 71, 73, 79, 78, 128, 
-    82, 69, 76, 73, 69, 86, 69, 196, 82, 69, 76, 69, 65, 83, 69, 128, 82, 69, 
-    76, 65, 84, 73, 79, 78, 65, 204, 82, 69, 76, 65, 84, 73, 79, 78, 128, 82, 
-    69, 76, 65, 65, 128, 82, 69, 74, 65, 78, 199, 82, 69, 73, 196, 82, 69, 
-    71, 85, 76, 85, 83, 45, 52, 128, 82, 69, 71, 85, 76, 85, 83, 45, 51, 128, 
-    82, 69, 71, 85, 76, 85, 83, 45, 50, 128, 82, 69, 71, 85, 76, 85, 83, 128, 
-    82, 69, 71, 85, 76, 85, 211, 82, 69, 71, 73, 83, 84, 69, 82, 69, 196, 82, 
-    69, 71, 73, 79, 78, 65, 204, 82, 69, 71, 73, 65, 45, 50, 128, 82, 69, 71, 
-    73, 65, 128, 82, 69, 70, 79, 82, 77, 69, 196, 82, 69, 70, 69, 82, 69, 78, 
-    67, 197, 82, 69, 68, 85, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 82, 69, 
-    67, 89, 67, 76, 73, 78, 199, 82, 69, 67, 89, 67, 76, 69, 196, 82, 69, 67, 
-    84, 73, 76, 73, 78, 69, 65, 210, 82, 69, 67, 84, 65, 78, 71, 85, 76, 65, 
-    210, 82, 69, 67, 84, 65, 78, 71, 76, 69, 128, 82, 69, 67, 84, 65, 78, 71, 
-    76, 197, 82, 69, 67, 82, 69, 65, 84, 73, 79, 78, 65, 204, 82, 69, 67, 79, 
-    82, 68, 73, 78, 199, 82, 69, 67, 79, 82, 68, 69, 82, 128, 82, 69, 67, 79, 
-    82, 196, 82, 69, 67, 69, 80, 84, 73, 86, 197, 82, 69, 67, 69, 73, 86, 69, 
-    82, 128, 82, 69, 65, 76, 71, 65, 82, 45, 50, 128, 82, 69, 65, 76, 71, 65, 
-    82, 128, 82, 69, 65, 72, 77, 85, 75, 128, 82, 69, 65, 67, 72, 128, 82, 
-    68, 207, 82, 68, 69, 204, 82, 66, 65, 83, 193, 82, 65, 89, 83, 128, 82, 
-    65, 89, 65, 78, 78, 65, 128, 82, 65, 84, 73, 79, 128, 82, 65, 84, 72, 65, 
-    128, 82, 65, 84, 72, 193, 82, 65, 84, 65, 128, 82, 65, 84, 128, 82, 65, 
-    83, 87, 65, 68, 73, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 
-    128, 82, 65, 81, 128, 82, 65, 80, 73, 83, 77, 65, 128, 82, 65, 78, 71, 
-    197, 82, 65, 78, 65, 128, 82, 65, 78, 128, 82, 65, 77, 211, 82, 65, 77, 
-    66, 65, 84, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 75, 65, 65, 82, 
-    65, 65, 78, 83, 65, 89, 65, 128, 82, 65, 73, 83, 73, 78, 199, 82, 65, 73, 
-    83, 69, 196, 82, 65, 73, 78, 66, 79, 87, 128, 82, 65, 73, 76, 87, 65, 89, 
-    128, 82, 65, 73, 76, 87, 65, 217, 82, 65, 73, 76, 128, 82, 65, 73, 68, 
-    207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, 
-    200, 82, 65, 72, 128, 82, 65, 70, 69, 128, 82, 65, 69, 77, 128, 82, 65, 
-    68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 73, 79, 128, 82, 65, 68, 
-    73, 207, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, 67, 81, 
-    85, 69, 212, 82, 65, 67, 73, 78, 71, 128, 82, 65, 66, 66, 73, 84, 128, 
-    82, 65, 66, 66, 73, 212, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 
-    51, 128, 82, 65, 50, 128, 82, 65, 45, 50, 128, 82, 48, 50, 57, 128, 82, 
-    48, 50, 56, 128, 82, 48, 50, 55, 128, 82, 48, 50, 54, 128, 82, 48, 50, 
-    53, 128, 82, 48, 50, 52, 128, 82, 48, 50, 51, 128, 82, 48, 50, 50, 128, 
-    82, 48, 50, 49, 128, 82, 48, 50, 48, 128, 82, 48, 49, 57, 128, 82, 48, 
-    49, 56, 128, 82, 48, 49, 55, 128, 82, 48, 49, 54, 65, 128, 82, 48, 49, 
-    54, 128, 82, 48, 49, 53, 128, 82, 48, 49, 52, 128, 82, 48, 49, 51, 128, 
-    82, 48, 49, 50, 128, 82, 48, 49, 49, 128, 82, 48, 49, 48, 65, 128, 82, 
-    48, 49, 48, 128, 82, 48, 48, 57, 128, 82, 48, 48, 56, 128, 82, 48, 48, 
-    55, 128, 82, 48, 48, 54, 128, 82, 48, 48, 53, 128, 82, 48, 48, 52, 128, 
-    82, 48, 48, 51, 66, 128, 82, 48, 48, 51, 65, 128, 82, 48, 48, 51, 128, 
-    82, 48, 48, 50, 65, 128, 82, 48, 48, 50, 128, 82, 48, 48, 49, 128, 82, 
-    45, 67, 82, 69, 197, 81, 89, 88, 128, 81, 89, 85, 128, 81, 89, 84, 128, 
-    81, 89, 82, 88, 128, 81, 89, 82, 128, 81, 89, 80, 128, 81, 89, 79, 128, 
-    81, 89, 73, 128, 81, 89, 69, 69, 128, 81, 89, 69, 128, 81, 89, 65, 65, 
-    128, 81, 89, 65, 128, 81, 89, 128, 81, 87, 73, 128, 81, 87, 69, 69, 128, 
-    81, 87, 69, 128, 81, 87, 65, 65, 128, 81, 87, 65, 128, 81, 85, 88, 128, 
-    81, 85, 86, 128, 81, 85, 85, 86, 128, 81, 85, 85, 128, 81, 85, 84, 128, 
-    81, 85, 83, 72, 83, 72, 65, 89, 65, 128, 81, 85, 82, 88, 128, 81, 85, 82, 
-    128, 81, 85, 80, 128, 81, 85, 79, 88, 128, 81, 85, 79, 84, 197, 81, 85, 
-    79, 84, 65, 84, 73, 79, 206, 81, 85, 79, 84, 128, 81, 85, 79, 80, 128, 
-    81, 85, 79, 128, 81, 85, 75, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69, 78, 
-    67, 69, 128, 81, 85, 73, 78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85, 73, 
-    78, 67, 85, 78, 88, 128, 81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85, 73, 
-    76, 76, 128, 81, 85, 73, 67, 203, 81, 85, 73, 128, 81, 85, 70, 128, 81, 
-    85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85, 69, 83, 84, 73, 79, 78, 128, 
-    81, 85, 69, 83, 84, 73, 79, 206, 81, 85, 69, 69, 78, 128, 81, 85, 69, 69, 
-    206, 81, 85, 69, 128, 81, 85, 66, 85, 84, 83, 128, 81, 85, 65, 84, 69, 
-    82, 78, 73, 79, 206, 81, 85, 65, 82, 84, 69, 82, 83, 128, 81, 85, 65, 82, 
-    84, 69, 82, 211, 81, 85, 65, 82, 84, 69, 82, 128, 81, 85, 65, 82, 84, 69, 
-    210, 81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65, 68, 82, 85, 80, 76, 
-    197, 81, 85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65, 68, 82, 65, 78, 
-    212, 81, 85, 65, 68, 128, 81, 85, 65, 196, 81, 85, 65, 128, 81, 85, 128, 
-    81, 208, 81, 79, 88, 128, 81, 79, 84, 128, 81, 79, 80, 72, 128, 81, 79, 
-    80, 65, 128, 81, 79, 80, 128, 81, 79, 79, 128, 81, 79, 207, 81, 79, 70, 
-    128, 81, 79, 198, 81, 79, 65, 128, 81, 79, 128, 81, 78, 128, 81, 73, 88, 
-    128, 81, 73, 84, 83, 65, 128, 81, 73, 84, 128, 81, 73, 80, 128, 81, 73, 
-    73, 128, 81, 73, 69, 88, 128, 81, 73, 69, 84, 128, 81, 73, 69, 80, 128, 
-    81, 73, 69, 128, 81, 73, 128, 81, 72, 87, 73, 128, 81, 72, 87, 69, 69, 
-    128, 81, 72, 87, 69, 128, 81, 72, 87, 65, 65, 128, 81, 72, 87, 65, 128, 
-    81, 72, 85, 128, 81, 72, 79, 128, 81, 72, 73, 128, 81, 72, 69, 69, 128, 
-    81, 72, 69, 128, 81, 72, 65, 65, 128, 81, 72, 65, 128, 81, 71, 65, 128, 
-    81, 69, 84, 65, 78, 65, 128, 81, 69, 69, 128, 81, 69, 128, 81, 65, 85, 
-    128, 81, 65, 84, 65, 78, 128, 81, 65, 82, 78, 69, 217, 81, 65, 82, 128, 
-    81, 65, 81, 128, 81, 65, 80, 72, 128, 81, 65, 77, 65, 84, 83, 128, 81, 
-    65, 77, 65, 84, 211, 81, 65, 76, 193, 81, 65, 73, 82, 84, 72, 82, 65, 
-    128, 81, 65, 73, 128, 81, 65, 70, 128, 81, 65, 198, 81, 65, 68, 77, 65, 
-    128, 81, 65, 65, 73, 128, 81, 65, 65, 70, 85, 128, 81, 65, 65, 70, 128, 
-    81, 48, 48, 55, 128, 81, 48, 48, 54, 128, 81, 48, 48, 53, 128, 81, 48, 
-    48, 52, 128, 81, 48, 48, 51, 128, 81, 48, 48, 50, 128, 81, 48, 48, 49, 
-    128, 80, 90, 128, 80, 89, 88, 128, 80, 89, 84, 128, 80, 89, 82, 88, 128, 
-    80, 89, 82, 128, 80, 89, 80, 128, 80, 89, 128, 80, 87, 79, 89, 128, 80, 
-    87, 79, 79, 128, 80, 87, 79, 128, 80, 87, 207, 80, 87, 73, 73, 128, 80, 
-    87, 73, 128, 80, 87, 69, 69, 128, 80, 87, 69, 128, 80, 87, 65, 65, 128, 
-    80, 87, 128, 80, 86, 128, 80, 85, 88, 128, 80, 85, 85, 84, 128, 80, 85, 
-    85, 128, 80, 85, 84, 82, 69, 70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84, 
-    128, 80, 85, 212, 80, 85, 83, 72, 80, 73, 78, 128, 80, 85, 83, 72, 80, 
-    73, 75, 65, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, 80, 
-    85, 82, 83, 69, 128, 80, 85, 82, 80, 76, 197, 80, 85, 82, 78, 65, 77, 65, 
-    128, 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 73, 70, 89, 128, 80, 85, 
-    82, 128, 80, 85, 81, 128, 80, 85, 80, 128, 80, 85, 79, 88, 128, 80, 85, 
-    79, 80, 128, 80, 85, 79, 128, 80, 85, 78, 71, 65, 65, 77, 128, 80, 85, 
-    78, 71, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 78, 128, 80, 85, 78, 
-    67, 84, 85, 65, 84, 73, 79, 206, 80, 85, 77, 80, 128, 80, 85, 77, 128, 
-    80, 85, 69, 128, 80, 85, 66, 76, 73, 195, 80, 85, 65, 81, 128, 80, 85, 
-    65, 69, 128, 80, 85, 50, 128, 80, 85, 49, 128, 80, 85, 128, 80, 84, 72, 
-    65, 72, 193, 80, 84, 69, 128, 80, 83, 73, 76, 201, 80, 83, 73, 70, 73, 
-    83, 84, 79, 83, 89, 78, 65, 71, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 
-    79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 80, 83, 73, 70, 73, 
-    83, 84, 79, 206, 80, 83, 73, 70, 73, 83, 84, 79, 76, 89, 71, 73, 83, 77, 
-    65, 128, 80, 83, 73, 128, 80, 83, 128, 80, 82, 79, 86, 69, 128, 80, 82, 
-    79, 84, 79, 86, 65, 82, 89, 211, 80, 82, 79, 84, 79, 211, 80, 82, 79, 84, 
-    69, 67, 84, 69, 196, 80, 82, 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 
-    73, 128, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 65, 204, 80, 82, 79, 80, 
-    79, 82, 84, 73, 79, 78, 128, 80, 82, 79, 80, 69, 82, 84, 217, 80, 82, 79, 
-    80, 69, 76, 76, 69, 210, 80, 82, 79, 79, 70, 128, 80, 82, 79, 76, 79, 78, 
-    71, 69, 196, 80, 82, 79, 76, 65, 84, 73, 79, 78, 197, 80, 82, 79, 74, 69, 
-    67, 84, 73, 86, 69, 128, 80, 82, 79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 
-    82, 79, 71, 82, 69, 83, 83, 128, 80, 82, 79, 71, 82, 65, 205, 80, 82, 79, 
-    70, 79, 85, 78, 68, 128, 80, 82, 79, 68, 85, 67, 84, 128, 80, 82, 79, 68, 
-    85, 67, 212, 80, 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86, 65, 84, 
-    197, 80, 82, 73, 86, 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65, 77, 65, 
-    84, 82, 193, 80, 82, 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 128, 80, 
-    82, 73, 78, 212, 80, 82, 73, 78, 67, 69, 83, 83, 128, 80, 82, 73, 77, 69, 
-    128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 80, 82, 69, 
-    83, 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, 79, 206, 80, 82, 
-    69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, 79, 78, 68, 69, 
-    82, 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, 80, 82, 69, 70, 
-    65, 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80, 82, 69, 
-    67, 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80, 82, 69, 
-    67, 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69, 67, 69, 
-    68, 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 77, 45, 80, 73, 73, 
-    128, 80, 82, 65, 77, 45, 80, 73, 201, 80, 82, 65, 77, 45, 77, 85, 79, 89, 
-    128, 80, 82, 65, 77, 45, 77, 85, 79, 217, 80, 82, 65, 77, 45, 66, 85, 79, 
-    78, 128, 80, 82, 65, 77, 45, 66, 85, 79, 206, 80, 82, 65, 77, 45, 66, 69, 
-    73, 128, 80, 82, 65, 77, 45, 66, 69, 201, 80, 82, 65, 77, 128, 80, 82, 
-    65, 205, 80, 82, 128, 80, 80, 86, 128, 80, 80, 77, 128, 80, 80, 65, 128, 
-    80, 79, 89, 128, 80, 79, 88, 128, 80, 79, 87, 69, 82, 211, 80, 79, 87, 
-    69, 82, 128, 80, 79, 87, 68, 69, 82, 69, 196, 80, 79, 87, 68, 69, 82, 
-    128, 80, 79, 85, 78, 196, 80, 79, 85, 76, 84, 82, 217, 80, 79, 85, 67, 
-    72, 128, 80, 79, 84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197, 80, 
-    79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, 
-    66, 79, 88, 128, 80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80, 79, 
-    83, 212, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 82, 82, 69, 
-    67, 84, 85, 83, 128, 80, 79, 82, 82, 69, 67, 84, 85, 211, 80, 79, 80, 80, 
-    69, 82, 128, 80, 79, 80, 128, 80, 79, 208, 80, 79, 79, 68, 76, 69, 128, 
-    80, 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 206, 80, 79, 77, 77, 
-    69, 69, 128, 80, 79, 77, 77, 69, 197, 80, 79, 76, 73, 83, 72, 128, 80, 
-    79, 76, 73, 67, 197, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 76, 
-    197, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, 
-    80, 79, 73, 78, 84, 211, 80, 79, 73, 78, 84, 79, 128, 80, 79, 73, 78, 84, 
-    69, 82, 128, 80, 79, 73, 78, 84, 69, 196, 80, 79, 73, 78, 84, 128, 80, 
-    79, 73, 78, 212, 80, 79, 69, 84, 82, 217, 80, 79, 69, 84, 73, 195, 80, 
-    79, 68, 65, 84, 85, 83, 128, 80, 79, 65, 128, 80, 79, 128, 80, 207, 80, 
-    78, 69, 85, 77, 65, 84, 65, 128, 80, 76, 85, 84, 79, 128, 80, 76, 85, 83, 
-    45, 77, 73, 78, 85, 211, 80, 76, 85, 83, 128, 80, 76, 85, 82, 65, 76, 
-    128, 80, 76, 85, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128, 
-    80, 76, 85, 71, 128, 80, 76, 85, 128, 80, 76, 79, 87, 128, 80, 76, 79, 
-    80, 72, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, 128, 80, 76, 68, 128, 
-    80, 76, 65, 89, 73, 78, 199, 80, 76, 65, 83, 84, 73, 67, 83, 128, 80, 76, 
-    65, 78, 69, 128, 80, 76, 65, 78, 197, 80, 76, 65, 78, 67, 203, 80, 76, 
-    65, 75, 128, 80, 76, 65, 71, 73, 79, 211, 80, 76, 65, 67, 69, 72, 79, 76, 
-    68, 69, 210, 80, 76, 65, 67, 197, 80, 76, 65, 128, 80, 73, 90, 90, 73, 
-    67, 65, 84, 79, 128, 80, 73, 90, 90, 65, 128, 80, 73, 88, 128, 80, 73, 
-    87, 82, 128, 80, 73, 84, 67, 72, 70, 79, 82, 75, 128, 80, 73, 84, 67, 72, 
-    70, 79, 82, 203, 80, 73, 84, 128, 80, 73, 83, 84, 79, 76, 128, 80, 73, 
-    83, 69, 76, 69, 72, 128, 80, 73, 83, 67, 69, 83, 128, 80, 73, 82, 73, 71, 
-    128, 80, 73, 82, 73, 199, 80, 73, 82, 73, 69, 69, 78, 128, 80, 73, 80, 
-    73, 78, 71, 128, 80, 73, 80, 65, 69, 77, 71, 66, 73, 69, 69, 128, 80, 73, 
-    80, 65, 69, 77, 66, 65, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 
-    204, 80, 73, 78, 69, 65, 80, 80, 76, 69, 128, 80, 73, 78, 197, 80, 73, 
-    78, 65, 82, 66, 79, 82, 65, 83, 128, 80, 73, 76, 76, 128, 80, 73, 76, 
-    197, 80, 73, 76, 67, 82, 79, 215, 80, 73, 75, 85, 82, 85, 128, 80, 73, 
-    75, 79, 128, 80, 73, 71, 128, 80, 73, 199, 80, 73, 69, 88, 128, 80, 73, 
-    69, 85, 80, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, 
-    83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, 73, 69, 85, 80, 45, 83, 73, 
-    79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 80, 73, 69, 85, 80, 45, 83, 73, 
-    79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, 83, 
-    73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 73, 69, 85, 80, 45, 83, 73, 
-    79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 80, 73, 69, 85, 80, 45, 83, 73, 
-    79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 82, 73, 69, 
-    85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 80, 73, 69, 85, 80, 45, 82, 
-    73, 69, 85, 76, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 128, 80, 
-    73, 69, 85, 80, 45, 77, 73, 69, 85, 77, 128, 80, 73, 69, 85, 80, 45, 75, 
-    72, 73, 69, 85, 75, 72, 128, 80, 73, 69, 85, 80, 45, 67, 73, 69, 85, 67, 
-    128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69, 85, 67, 72, 128, 80, 73, 69, 
-    85, 208, 80, 73, 69, 84, 128, 80, 73, 69, 80, 128, 80, 73, 69, 69, 84, 
-    128, 80, 73, 69, 69, 81, 128, 80, 73, 69, 67, 69, 128, 80, 73, 69, 128, 
-    80, 73, 67, 75, 69, 84, 128, 80, 73, 67, 75, 128, 80, 73, 65, 83, 85, 84, 
-    79, 82, 85, 128, 80, 73, 65, 83, 77, 193, 80, 73, 65, 78, 79, 128, 80, 
-    201, 80, 72, 87, 65, 128, 80, 72, 85, 84, 72, 65, 79, 128, 80, 72, 85, 
-    210, 80, 72, 85, 78, 71, 128, 80, 72, 82, 65, 83, 69, 128, 80, 72, 79, 
-    78, 69, 83, 128, 80, 72, 79, 69, 78, 73, 67, 73, 65, 206, 80, 72, 79, 65, 
-    128, 80, 72, 79, 128, 80, 72, 207, 80, 72, 78, 65, 69, 203, 80, 72, 73, 
-    78, 84, 72, 85, 128, 80, 72, 73, 76, 79, 83, 79, 80, 72, 69, 82, 211, 80, 
-    72, 73, 76, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, 45, 84, 
-    72, 73, 69, 85, 84, 72, 128, 80, 72, 73, 69, 85, 80, 72, 45, 83, 73, 79, 
-    83, 128, 80, 72, 73, 69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128, 80, 72, 
-    73, 69, 85, 80, 72, 45, 72, 73, 69, 85, 72, 128, 80, 72, 73, 69, 85, 80, 
-    200, 80, 72, 73, 128, 80, 72, 201, 80, 72, 69, 69, 128, 80, 72, 69, 128, 
-    80, 72, 65, 83, 69, 45, 198, 80, 72, 65, 83, 69, 45, 194, 80, 72, 65, 82, 
-    89, 78, 71, 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, 
-    72, 65, 77, 128, 80, 72, 65, 73, 83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 
-    80, 193, 80, 72, 65, 65, 82, 75, 65, 65, 128, 80, 72, 65, 65, 128, 80, 
-    72, 65, 128, 80, 71, 128, 80, 70, 128, 80, 69, 85, 88, 128, 80, 69, 85, 
-    84, 65, 69, 128, 80, 69, 85, 84, 128, 80, 69, 84, 65, 83, 84, 79, 75, 79, 
-    85, 70, 73, 83, 77, 65, 128, 80, 69, 84, 65, 83, 84, 73, 128, 80, 69, 84, 
-    65, 83, 77, 65, 128, 80, 69, 84, 65, 76, 76, 69, 196, 80, 69, 83, 79, 
-    128, 80, 69, 83, 207, 80, 69, 83, 72, 50, 128, 80, 69, 83, 69, 84, 193, 
-    80, 69, 211, 80, 69, 82, 84, 72, 207, 80, 69, 82, 83, 80, 69, 67, 84, 73, 
-    86, 69, 128, 80, 69, 82, 83, 79, 78, 65, 204, 80, 69, 82, 83, 79, 78, 
-    128, 80, 69, 82, 83, 79, 206, 80, 69, 82, 83, 73, 65, 206, 80, 69, 82, 
-    83, 69, 86, 69, 82, 73, 78, 199, 80, 69, 82, 80, 69, 78, 68, 73, 67, 85, 
-    76, 65, 82, 128, 80, 69, 82, 80, 69, 78, 68, 73, 67, 85, 76, 65, 210, 80, 
-    69, 82, 77, 73, 84, 84, 69, 196, 80, 69, 82, 77, 65, 78, 69, 78, 212, 80, 
-    69, 82, 73, 83, 80, 79, 77, 69, 78, 73, 128, 80, 69, 82, 73, 83, 80, 79, 
-    77, 69, 78, 201, 80, 69, 82, 70, 79, 82, 77, 73, 78, 199, 80, 69, 82, 70, 
-    69, 67, 84, 85, 205, 80, 69, 82, 70, 69, 67, 84, 65, 128, 80, 69, 82, 70, 
-    69, 67, 84, 193, 80, 69, 82, 67, 85, 83, 83, 73, 86, 69, 128, 80, 69, 82, 
-    67, 69, 78, 212, 80, 69, 80, 69, 84, 128, 80, 69, 80, 69, 212, 80, 69, 
-    79, 82, 84, 200, 80, 69, 79, 80, 76, 69, 128, 80, 69, 78, 84, 65, 83, 69, 
-    77, 69, 128, 80, 69, 78, 84, 65, 71, 82, 65, 77, 128, 80, 69, 78, 84, 65, 
-    71, 79, 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 83, 73, 86, 197, 
-    80, 69, 78, 78, 217, 80, 69, 78, 73, 72, 73, 128, 80, 69, 78, 71, 85, 73, 
-    78, 128, 80, 69, 78, 71, 75, 65, 76, 128, 80, 69, 78, 69, 84, 82, 65, 84, 
-    73, 79, 78, 128, 80, 69, 78, 67, 73, 76, 128, 80, 69, 76, 65, 83, 84, 79, 
-    78, 128, 80, 69, 76, 65, 83, 84, 79, 206, 80, 69, 73, 84, 72, 128, 80, 
-    69, 72, 69, 72, 128, 80, 69, 72, 69, 200, 80, 69, 72, 128, 80, 69, 200, 
-    80, 69, 69, 90, 73, 128, 80, 69, 69, 83, 72, 73, 128, 80, 69, 69, 80, 
-    128, 80, 69, 69, 77, 128, 80, 69, 69, 128, 80, 69, 68, 69, 83, 84, 82, 
-    73, 65, 78, 83, 128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 128, 80, 69, 
-    68, 69, 83, 84, 65, 76, 128, 80, 69, 68, 69, 83, 84, 65, 204, 80, 69, 68, 
-    65, 204, 80, 69, 65, 67, 72, 128, 80, 69, 65, 67, 69, 128, 80, 69, 65, 
-    67, 197, 80, 68, 70, 128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82, 
-    128, 80, 65, 89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128, 
-    80, 65, 89, 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80, 
-    65, 86, 73, 89, 65, 78, 73, 128, 80, 65, 85, 128, 80, 65, 84, 84, 69, 82, 
-    78, 128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, 200, 
-    80, 65, 84, 65, 75, 128, 80, 65, 84, 65, 72, 128, 80, 65, 84, 128, 80, 
-    65, 83, 85, 81, 128, 80, 65, 83, 83, 80, 79, 82, 212, 80, 65, 83, 83, 73, 
-    86, 69, 45, 80, 85, 76, 76, 45, 85, 80, 45, 79, 85, 84, 80, 85, 212, 80, 
-    65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 68, 79, 87, 78, 45, 79, 
-    85, 84, 80, 85, 212, 80, 65, 83, 72, 84, 65, 128, 80, 65, 83, 72, 65, 69, 
-    128, 80, 65, 83, 69, 81, 128, 80, 65, 83, 65, 78, 71, 65, 206, 80, 65, 
-    82, 85, 77, 128, 80, 65, 82, 84, 217, 80, 65, 82, 84, 78, 69, 82, 83, 72, 
-    73, 208, 80, 65, 82, 84, 73, 65, 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 
-    69, 196, 80, 65, 82, 84, 73, 65, 204, 80, 65, 82, 84, 72, 73, 65, 206, 
-    80, 65, 82, 212, 80, 65, 82, 73, 67, 72, 79, 78, 128, 80, 65, 82, 69, 83, 
-    84, 73, 71, 77, 69, 78, 79, 206, 80, 65, 82, 69, 82, 69, 78, 128, 80, 65, 
-    82, 69, 78, 84, 72, 69, 83, 73, 83, 128, 80, 65, 82, 69, 78, 84, 72, 69, 
-    83, 73, 211, 80, 65, 82, 65, 80, 72, 82, 65, 83, 197, 80, 65, 82, 65, 76, 
-    76, 69, 76, 79, 71, 82, 65, 77, 128, 80, 65, 82, 65, 76, 76, 69, 76, 128, 
-    80, 65, 82, 65, 76, 76, 69, 204, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75, 
-    73, 128, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75, 201, 80, 65, 82, 65, 75, 
-    65, 76, 69, 83, 77, 193, 80, 65, 82, 65, 71, 82, 65, 80, 72, 79, 83, 128, 
-    80, 65, 82, 65, 71, 82, 65, 80, 72, 128, 80, 65, 82, 65, 71, 82, 65, 80, 
-    200, 80, 65, 82, 65, 128, 80, 65, 82, 128, 80, 65, 80, 89, 82, 85, 83, 
-    128, 80, 65, 80, 69, 82, 67, 76, 73, 80, 128, 80, 65, 80, 69, 210, 80, 
-    65, 80, 128, 80, 65, 208, 80, 65, 207, 80, 65, 78, 89, 85, 75, 85, 128, 
-    80, 65, 78, 89, 73, 75, 85, 128, 80, 65, 78, 89, 69, 67, 69, 75, 128, 80, 
-    65, 78, 89, 65, 78, 71, 71, 65, 128, 80, 65, 78, 89, 65, 75, 82, 65, 128, 
-    80, 65, 78, 84, 73, 128, 80, 65, 78, 83, 73, 79, 83, 45, 80, 73, 69, 85, 
-    80, 128, 80, 65, 78, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78, 
-    80, 73, 69, 85, 80, 128, 80, 65, 78, 79, 78, 71, 79, 78, 65, 78, 128, 80, 
-    65, 78, 79, 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 
-    80, 65, 78, 71, 82, 65, 78, 71, 75, 69, 80, 128, 80, 65, 78, 71, 79, 76, 
-    65, 84, 128, 80, 65, 78, 71, 76, 79, 78, 71, 128, 80, 65, 78, 71, 76, 65, 
-    89, 65, 82, 128, 80, 65, 78, 71, 75, 79, 78, 128, 80, 65, 78, 71, 75, 65, 
-    84, 128, 80, 65, 78, 71, 72, 85, 76, 85, 128, 80, 65, 78, 71, 128, 80, 
-    65, 78, 69, 85, 76, 69, 85, 78, 71, 128, 80, 65, 78, 68, 193, 80, 65, 78, 
-    65, 69, 76, 65, 69, 78, 71, 128, 80, 65, 78, 128, 80, 65, 77, 85, 78, 71, 
-    75, 65, 72, 128, 80, 65, 77, 85, 68, 80, 79, 68, 128, 80, 65, 77, 83, 72, 
-    65, 69, 128, 80, 65, 77, 80, 72, 89, 76, 73, 65, 206, 80, 65, 77, 73, 78, 
-    71, 75, 65, 76, 128, 80, 65, 77, 69, 80, 69, 84, 128, 80, 65, 77, 69, 78, 
-    69, 78, 71, 128, 80, 65, 77, 65, 68, 65, 128, 80, 65, 77, 65, 65, 69, 72, 
-    128, 80, 65, 76, 85, 84, 65, 128, 80, 65, 76, 79, 67, 72, 75, 65, 128, 
-    80, 65, 76, 205, 80, 65, 76, 76, 65, 87, 65, 128, 80, 65, 76, 76, 65, 83, 
-    128, 80, 65, 76, 69, 84, 84, 69, 128, 80, 65, 76, 65, 85, 78, 199, 80, 
-    65, 76, 65, 84, 65, 76, 73, 90, 69, 196, 80, 65, 76, 65, 84, 65, 76, 73, 
-    90, 65, 84, 73, 79, 78, 128, 80, 65, 76, 65, 84, 65, 204, 80, 65, 75, 80, 
-    65, 203, 80, 65, 73, 89, 65, 78, 78, 79, 73, 128, 80, 65, 73, 82, 84, 72, 
-    82, 65, 128, 80, 65, 73, 82, 69, 196, 80, 65, 73, 128, 80, 65, 72, 76, 
-    65, 86, 201, 80, 65, 72, 128, 80, 65, 71, 69, 82, 128, 80, 65, 71, 197, 
-    80, 65, 68, 77, 193, 80, 65, 68, 68, 73, 78, 199, 80, 65, 68, 193, 80, 
-    65, 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69, 
-    128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80, 
-    65, 65, 82, 65, 69, 128, 80, 65, 65, 77, 128, 80, 65, 65, 73, 128, 80, 
-    65, 65, 45, 80, 73, 76, 76, 65, 128, 80, 65, 65, 128, 80, 50, 128, 80, 
-    48, 49, 49, 128, 80, 48, 49, 48, 128, 80, 48, 48, 57, 128, 80, 48, 48, 
-    56, 128, 80, 48, 48, 55, 128, 80, 48, 48, 54, 128, 80, 48, 48, 53, 128, 
-    80, 48, 48, 52, 128, 80, 48, 48, 51, 65, 128, 80, 48, 48, 51, 128, 80, 
-    48, 48, 50, 128, 80, 48, 48, 49, 65, 128, 80, 48, 48, 49, 128, 79, 89, 
-    82, 65, 78, 73, 83, 77, 193, 79, 89, 65, 78, 78, 65, 128, 79, 88, 73, 65, 
-    128, 79, 88, 73, 193, 79, 88, 69, 73, 65, 201, 79, 88, 69, 73, 193, 79, 
-    86, 69, 82, 82, 73, 68, 69, 128, 79, 86, 69, 82, 76, 79, 78, 199, 79, 86, 
-    69, 82, 76, 73, 78, 69, 128, 79, 86, 69, 82, 76, 65, 89, 128, 79, 86, 69, 
-    82, 76, 65, 80, 80, 73, 78, 199, 79, 86, 69, 82, 76, 65, 73, 68, 128, 79, 
-    86, 69, 82, 66, 65, 82, 128, 79, 86, 65, 204, 79, 86, 128, 79, 85, 84, 
-    76, 73, 78, 69, 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 
-    210, 79, 85, 84, 66, 79, 216, 79, 85, 78, 75, 73, 193, 79, 85, 78, 67, 
-    69, 128, 79, 85, 78, 67, 197, 79, 84, 85, 128, 79, 84, 84, 65, 86, 193, 
-    79, 84, 84, 128, 79, 84, 72, 65, 76, 65, 206, 79, 84, 72, 65, 76, 128, 
-    79, 83, 77, 65, 78, 89, 193, 79, 83, 67, 128, 79, 82, 84, 72, 79, 71, 79, 
-    78, 65, 204, 79, 82, 84, 72, 79, 68, 79, 216, 79, 82, 78, 65, 84, 197, 
-    79, 82, 78, 65, 77, 69, 78, 84, 128, 79, 82, 78, 65, 77, 69, 78, 212, 79, 
-    82, 75, 72, 79, 206, 79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 
-    78, 128, 79, 82, 69, 45, 50, 128, 79, 82, 68, 73, 78, 65, 204, 79, 82, 
-    68, 69, 210, 79, 82, 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 197, 79, 
-    80, 84, 73, 79, 206, 79, 80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 
-    83, 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 
-    80, 79, 83, 73, 78, 199, 79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 
-    67, 72, 85, 83, 128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 
-    65, 84, 79, 210, 79, 80, 69, 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73, 
-    78, 199, 79, 80, 69, 78, 45, 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 
-    73, 78, 69, 196, 79, 80, 69, 78, 45, 72, 69, 65, 68, 69, 196, 79, 80, 69, 
-    78, 45, 67, 73, 82, 67, 85, 73, 84, 45, 79, 85, 84, 80, 85, 212, 79, 79, 
-    90, 69, 128, 79, 79, 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 
-    77, 85, 128, 79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73, 76, 73, 128, 
-    79, 78, 85, 128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79, 78, 75, 65, 
-    82, 128, 79, 78, 69, 83, 69, 76, 70, 128, 79, 78, 69, 45, 87, 65, 217, 
-    79, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 79, 78, 69, 45, 76, 73, 78, 
-    197, 79, 78, 67, 79, 77, 73, 78, 199, 79, 78, 65, 80, 128, 79, 77, 73, 
-    83, 83, 73, 79, 206, 79, 77, 73, 67, 82, 79, 78, 128, 79, 77, 73, 67, 82, 
-    79, 206, 79, 77, 69, 71, 65, 128, 79, 77, 69, 71, 193, 79, 77, 65, 76, 
-    79, 78, 128, 79, 76, 73, 86, 69, 128, 79, 76, 73, 71, 79, 206, 79, 76, 
-    68, 128, 79, 75, 84, 207, 79, 75, 65, 82, 65, 128, 79, 75, 65, 82, 193, 
-    79, 74, 73, 66, 87, 65, 217, 79, 74, 69, 79, 78, 128, 79, 73, 76, 128, 
-    79, 72, 77, 128, 79, 72, 205, 79, 71, 82, 69, 128, 79, 71, 79, 78, 69, 
-    75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 70, 70, 73, 
-    67, 69, 82, 128, 79, 70, 70, 73, 67, 69, 128, 79, 70, 70, 73, 67, 197, 
-    79, 70, 70, 128, 79, 69, 89, 128, 79, 69, 75, 128, 79, 68, 69, 78, 128, 
-    79, 68, 196, 79, 67, 84, 79, 80, 85, 83, 128, 79, 67, 84, 79, 66, 69, 82, 
-    128, 79, 67, 84, 69, 212, 79, 67, 210, 79, 67, 76, 79, 67, 75, 128, 79, 
-    67, 67, 76, 85, 83, 73, 79, 78, 128, 79, 66, 83, 84, 82, 85, 67, 84, 73, 
-    79, 78, 128, 79, 66, 79, 76, 211, 79, 66, 79, 204, 79, 66, 79, 70, 73, 
-    76, 73, 128, 79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, 67, 212, 79, 
-    66, 69, 76, 85, 83, 128, 79, 66, 69, 76, 79, 83, 128, 79, 66, 128, 79, 
-    65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, 76, 73, 128, 
-    79, 193, 79, 48, 53, 49, 128, 79, 48, 53, 48, 66, 128, 79, 48, 53, 48, 
-    65, 128, 79, 48, 53, 48, 128, 79, 48, 52, 57, 128, 79, 48, 52, 56, 128, 
-    79, 48, 52, 55, 128, 79, 48, 52, 54, 128, 79, 48, 52, 53, 128, 79, 48, 
-    52, 52, 128, 79, 48, 52, 51, 128, 79, 48, 52, 50, 128, 79, 48, 52, 49, 
-    128, 79, 48, 52, 48, 128, 79, 48, 51, 57, 128, 79, 48, 51, 56, 128, 79, 
-    48, 51, 55, 128, 79, 48, 51, 54, 68, 128, 79, 48, 51, 54, 67, 128, 79, 
-    48, 51, 54, 66, 128, 79, 48, 51, 54, 65, 128, 79, 48, 51, 54, 128, 79, 
-    48, 51, 53, 128, 79, 48, 51, 52, 128, 79, 48, 51, 51, 65, 128, 79, 48, 
-    51, 51, 128, 79, 48, 51, 50, 128, 79, 48, 51, 49, 128, 79, 48, 51, 48, 
-    65, 128, 79, 48, 51, 48, 128, 79, 48, 50, 57, 65, 128, 79, 48, 50, 57, 
-    128, 79, 48, 50, 56, 128, 79, 48, 50, 55, 128, 79, 48, 50, 54, 128, 79, 
-    48, 50, 53, 65, 128, 79, 48, 50, 53, 128, 79, 48, 50, 52, 65, 128, 79, 
-    48, 50, 52, 128, 79, 48, 50, 51, 128, 79, 48, 50, 50, 128, 79, 48, 50, 
-    49, 128, 79, 48, 50, 48, 65, 128, 79, 48, 50, 48, 128, 79, 48, 49, 57, 
-    65, 128, 79, 48, 49, 57, 128, 79, 48, 49, 56, 128, 79, 48, 49, 55, 128, 
-    79, 48, 49, 54, 128, 79, 48, 49, 53, 128, 79, 48, 49, 52, 128, 79, 48, 
-    49, 51, 128, 79, 48, 49, 50, 128, 79, 48, 49, 49, 128, 79, 48, 49, 48, 
-    67, 128, 79, 48, 49, 48, 66, 128, 79, 48, 49, 48, 65, 128, 79, 48, 49, 
-    48, 128, 79, 48, 48, 57, 128, 79, 48, 48, 56, 128, 79, 48, 48, 55, 128, 
-    79, 48, 48, 54, 70, 128, 79, 48, 48, 54, 69, 128, 79, 48, 48, 54, 68, 
-    128, 79, 48, 48, 54, 67, 128, 79, 48, 48, 54, 66, 128, 79, 48, 48, 54, 
-    65, 128, 79, 48, 48, 54, 128, 79, 48, 48, 53, 65, 128, 79, 48, 48, 53, 
-    128, 79, 48, 48, 52, 128, 79, 48, 48, 51, 128, 79, 48, 48, 50, 128, 79, 
-    48, 48, 49, 65, 128, 79, 48, 48, 49, 128, 79, 45, 89, 69, 128, 79, 45, 
-    79, 45, 73, 128, 79, 45, 69, 128, 78, 90, 89, 88, 128, 78, 90, 89, 84, 
-    128, 78, 90, 89, 82, 88, 128, 78, 90, 89, 82, 128, 78, 90, 89, 80, 128, 
-    78, 90, 89, 128, 78, 90, 85, 88, 128, 78, 90, 85, 82, 88, 128, 78, 90, 
-    85, 82, 128, 78, 90, 85, 81, 128, 78, 90, 85, 80, 128, 78, 90, 85, 79, 
-    88, 128, 78, 90, 85, 79, 128, 78, 90, 85, 206, 78, 90, 85, 128, 78, 90, 
-    79, 88, 128, 78, 90, 79, 80, 128, 78, 90, 73, 88, 128, 78, 90, 73, 84, 
-    128, 78, 90, 73, 80, 128, 78, 90, 73, 69, 88, 128, 78, 90, 73, 69, 80, 
-    128, 78, 90, 73, 69, 128, 78, 90, 73, 128, 78, 90, 69, 88, 128, 78, 90, 
-    69, 85, 77, 128, 78, 90, 69, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 
-    128, 78, 90, 65, 81, 128, 78, 90, 65, 80, 128, 78, 90, 65, 128, 78, 90, 
-    193, 78, 89, 87, 65, 128, 78, 89, 85, 88, 128, 78, 89, 85, 85, 128, 78, 
-    89, 85, 84, 128, 78, 89, 85, 80, 128, 78, 89, 85, 79, 88, 128, 78, 89, 
-    85, 79, 80, 128, 78, 89, 85, 79, 128, 78, 89, 85, 69, 128, 78, 89, 85, 
-    128, 78, 89, 79, 88, 128, 78, 89, 79, 84, 128, 78, 89, 79, 80, 128, 78, 
-    89, 79, 79, 128, 78, 89, 79, 65, 128, 78, 89, 79, 128, 78, 89, 74, 65, 
-    128, 78, 89, 73, 88, 128, 78, 89, 73, 84, 128, 78, 89, 73, 212, 78, 89, 
-    73, 211, 78, 89, 73, 210, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, 68, 
-    79, 128, 78, 89, 73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69, 
-    84, 128, 78, 89, 73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, 128, 
-    78, 89, 201, 78, 89, 72, 65, 128, 78, 89, 69, 84, 128, 78, 89, 69, 212, 
-    78, 89, 69, 72, 128, 78, 89, 69, 200, 78, 89, 69, 69, 128, 78, 89, 69, 
-    128, 78, 89, 196, 78, 89, 67, 65, 128, 78, 89, 65, 85, 128, 78, 89, 65, 
-    73, 128, 78, 89, 65, 72, 128, 78, 89, 65, 69, 77, 65, 69, 128, 78, 89, 
-    65, 65, 128, 78, 87, 79, 79, 128, 78, 87, 79, 128, 78, 87, 73, 73, 128, 
-    78, 87, 73, 128, 78, 87, 69, 128, 78, 87, 65, 65, 128, 78, 87, 65, 128, 
-    78, 87, 128, 78, 86, 128, 78, 85, 88, 128, 78, 85, 85, 78, 128, 78, 85, 
-    85, 128, 78, 85, 84, 73, 76, 76, 85, 128, 78, 85, 84, 128, 78, 85, 212, 
-    78, 85, 82, 88, 128, 78, 85, 82, 128, 78, 85, 80, 128, 78, 85, 79, 88, 
-    128, 78, 85, 79, 80, 128, 78, 85, 79, 128, 78, 85, 78, 85, 90, 128, 78, 
-    85, 78, 85, 218, 78, 85, 78, 71, 128, 78, 85, 78, 65, 86, 85, 212, 78, 
-    85, 78, 65, 86, 73, 203, 78, 85, 78, 128, 78, 85, 206, 78, 85, 77, 69, 
-    82, 207, 78, 85, 77, 69, 82, 65, 84, 79, 210, 78, 85, 77, 69, 82, 65, 
-    204, 78, 85, 77, 66, 69, 82, 83, 128, 78, 85, 77, 66, 69, 82, 128, 78, 
-    85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 76, 128, 78, 
-    85, 75, 84, 65, 128, 78, 85, 69, 78, 71, 128, 78, 85, 69, 128, 78, 85, 
-    66, 73, 65, 206, 78, 85, 65, 69, 128, 78, 85, 49, 49, 128, 78, 85, 48, 
-    50, 50, 65, 128, 78, 85, 48, 50, 50, 128, 78, 85, 48, 50, 49, 128, 78, 
-    85, 48, 50, 48, 128, 78, 85, 48, 49, 57, 128, 78, 85, 48, 49, 56, 65, 
-    128, 78, 85, 48, 49, 56, 128, 78, 85, 48, 49, 55, 128, 78, 85, 48, 49, 
-    54, 128, 78, 85, 48, 49, 53, 128, 78, 85, 48, 49, 52, 128, 78, 85, 48, 
-    49, 51, 128, 78, 85, 48, 49, 50, 128, 78, 85, 48, 49, 49, 65, 128, 78, 
-    85, 48, 49, 49, 128, 78, 85, 48, 49, 48, 65, 128, 78, 85, 48, 49, 48, 
-    128, 78, 85, 48, 48, 57, 128, 78, 85, 48, 48, 56, 128, 78, 85, 48, 48, 
-    55, 128, 78, 85, 48, 48, 54, 128, 78, 85, 48, 48, 53, 128, 78, 85, 48, 
-    48, 52, 128, 78, 85, 48, 48, 51, 128, 78, 85, 48, 48, 50, 128, 78, 85, 
-    48, 48, 49, 128, 78, 84, 85, 85, 128, 78, 84, 85, 77, 128, 78, 84, 213, 
-    78, 84, 79, 81, 80, 69, 78, 128, 78, 84, 73, 69, 197, 78, 84, 69, 85, 78, 
-    71, 66, 65, 128, 78, 84, 69, 85, 77, 128, 78, 84, 69, 78, 128, 78, 84, 
-    69, 69, 128, 78, 84, 65, 80, 128, 78, 84, 65, 208, 78, 84, 65, 65, 128, 
-    78, 83, 85, 79, 212, 78, 83, 85, 78, 128, 78, 83, 85, 77, 128, 78, 83, 
-    79, 77, 128, 78, 83, 73, 69, 69, 84, 128, 78, 83, 73, 69, 69, 80, 128, 
-    78, 83, 73, 69, 69, 128, 78, 83, 72, 85, 84, 128, 78, 83, 72, 85, 212, 
-    78, 83, 72, 85, 79, 80, 128, 78, 83, 72, 85, 69, 128, 78, 83, 72, 73, 69, 
-    69, 128, 78, 83, 72, 69, 69, 128, 78, 83, 72, 65, 81, 128, 78, 83, 72, 
-    65, 128, 78, 83, 69, 85, 65, 69, 78, 128, 78, 83, 69, 78, 128, 78, 83, 
-    65, 128, 78, 82, 89, 88, 128, 78, 82, 89, 84, 128, 78, 82, 89, 82, 88, 
-    128, 78, 82, 89, 82, 128, 78, 82, 89, 80, 128, 78, 82, 89, 128, 78, 82, 
-    85, 88, 128, 78, 82, 85, 84, 128, 78, 82, 85, 82, 88, 128, 78, 82, 85, 
-    82, 128, 78, 82, 85, 80, 128, 78, 82, 85, 128, 78, 82, 79, 88, 128, 78, 
-    82, 79, 80, 128, 78, 82, 79, 128, 78, 82, 69, 88, 128, 78, 82, 69, 84, 
-    128, 78, 82, 69, 80, 128, 78, 82, 69, 128, 78, 82, 65, 88, 128, 78, 82, 
-    65, 84, 128, 78, 82, 65, 80, 128, 78, 82, 65, 128, 78, 79, 89, 128, 78, 
-    79, 88, 128, 78, 79, 86, 69, 77, 66, 69, 82, 128, 78, 79, 84, 84, 79, 
-    128, 78, 79, 84, 69, 83, 128, 78, 79, 84, 69, 72, 69, 65, 68, 128, 78, 
-    79, 84, 69, 72, 69, 65, 196, 78, 79, 84, 69, 66, 79, 79, 75, 128, 78, 79, 
-    84, 69, 66, 79, 79, 203, 78, 79, 84, 69, 128, 78, 79, 84, 197, 78, 79, 
-    84, 67, 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 
-    212, 78, 79, 83, 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 
-    82, 84, 72, 69, 82, 206, 78, 79, 82, 84, 200, 78, 79, 82, 77, 65, 204, 
-    78, 79, 210, 78, 79, 80, 128, 78, 79, 79, 78, 85, 128, 78, 79, 79, 128, 
-    78, 79, 78, 70, 79, 82, 75, 73, 78, 71, 128, 78, 79, 78, 45, 80, 79, 84, 
-    65, 66, 76, 197, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, 128, 78, 79, 78, 
-    45, 66, 82, 69, 65, 75, 73, 78, 199, 78, 79, 77, 73, 78, 65, 204, 78, 79, 
-    75, 72, 85, 75, 128, 78, 79, 68, 69, 128, 78, 79, 65, 128, 78, 79, 45, 
-    66, 82, 69, 65, 203, 78, 78, 85, 85, 128, 78, 78, 85, 128, 78, 78, 79, 
-    79, 128, 78, 78, 79, 128, 78, 78, 78, 85, 85, 128, 78, 78, 78, 85, 128, 
-    78, 78, 78, 79, 79, 128, 78, 78, 78, 79, 128, 78, 78, 78, 73, 73, 128, 
-    78, 78, 78, 73, 128, 78, 78, 78, 69, 69, 128, 78, 78, 78, 69, 128, 78, 
-    78, 78, 65, 85, 128, 78, 78, 78, 65, 73, 128, 78, 78, 78, 65, 65, 128, 
-    78, 78, 78, 65, 128, 78, 78, 78, 128, 78, 78, 72, 65, 128, 78, 78, 71, 
-    79, 79, 128, 78, 78, 71, 79, 128, 78, 78, 71, 73, 73, 128, 78, 78, 71, 
-    73, 128, 78, 78, 71, 65, 65, 128, 78, 78, 71, 65, 128, 78, 78, 71, 128, 
-    78, 78, 66, 83, 80, 128, 78, 77, 128, 78, 76, 48, 50, 48, 128, 78, 76, 
-    48, 49, 57, 128, 78, 76, 48, 49, 56, 128, 78, 76, 48, 49, 55, 65, 128, 
-    78, 76, 48, 49, 55, 128, 78, 76, 48, 49, 54, 128, 78, 76, 48, 49, 53, 
-    128, 78, 76, 48, 49, 52, 128, 78, 76, 48, 49, 51, 128, 78, 76, 48, 49, 
-    50, 128, 78, 76, 48, 49, 49, 128, 78, 76, 48, 49, 48, 128, 78, 76, 48, 
-    48, 57, 128, 78, 76, 48, 48, 56, 128, 78, 76, 48, 48, 55, 128, 78, 76, 
-    48, 48, 54, 128, 78, 76, 48, 48, 53, 65, 128, 78, 76, 48, 48, 53, 128, 
-    78, 76, 48, 48, 52, 128, 78, 76, 48, 48, 51, 128, 78, 76, 48, 48, 50, 
-    128, 78, 76, 48, 48, 49, 128, 78, 76, 128, 78, 75, 79, 77, 128, 78, 75, 
-    207, 78, 75, 73, 78, 68, 73, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, 
-    74, 89, 88, 128, 78, 74, 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, 
-    89, 82, 128, 78, 74, 89, 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, 
-    78, 74, 85, 82, 88, 128, 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, 
-    78, 74, 85, 80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, 
-    74, 85, 69, 81, 128, 78, 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, 
-    79, 88, 128, 78, 74, 79, 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, 
-    128, 78, 74, 79, 128, 78, 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, 
-    73, 80, 128, 78, 74, 73, 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, 
-    73, 69, 80, 128, 78, 74, 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, 
-    73, 128, 78, 74, 201, 78, 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, 
-    78, 74, 69, 85, 65, 69, 78, 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, 
-    74, 69, 69, 69, 69, 128, 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, 
-    69, 128, 78, 74, 65, 81, 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, 
-    76, 73, 128, 78, 74, 65, 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, 
-    128, 78, 73, 84, 82, 69, 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, 
-    71, 85, 128, 78, 73, 80, 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, 
-    84, 89, 128, 78, 73, 78, 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, 
-    128, 78, 73, 78, 69, 84, 69, 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, 
-    84, 89, 128, 78, 73, 78, 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, 
-    68, 65, 178, 78, 73, 77, 128, 78, 73, 205, 78, 73, 75, 72, 65, 72, 73, 
-    84, 128, 78, 73, 75, 65, 72, 73, 84, 128, 78, 73, 75, 65, 128, 78, 73, 
-    72, 83, 72, 86, 65, 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, 73, 78, 128, 
-    78, 73, 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, 128, 78, 73, 
-    71, 72, 212, 78, 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, 73, 69, 88, 
-    128, 78, 73, 69, 85, 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, 73, 69, 85, 
-    78, 45, 84, 72, 73, 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, 45, 83, 73, 
-    79, 83, 128, 78, 73, 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, 78, 73, 69, 
-    85, 78, 45, 80, 73, 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, 80, 65, 78, 
-    83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, 79, 75, 128, 
-    78, 73, 69, 85, 78, 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, 85, 78, 45, 
-    67, 73, 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, 69, 85, 67, 
-    72, 128, 78, 73, 69, 85, 206, 78, 73, 69, 80, 128, 78, 73, 69, 128, 78, 
-    73, 66, 128, 78, 73, 65, 128, 78, 73, 50, 128, 78, 72, 85, 69, 128, 78, 
-    72, 74, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, 71, 86, 69, 128, 
-    78, 71, 85, 85, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 
-    78, 71, 85, 79, 128, 78, 71, 85, 65, 69, 84, 128, 78, 71, 85, 65, 69, 
-    128, 78, 71, 79, 88, 128, 78, 71, 79, 85, 128, 78, 71, 79, 213, 78, 71, 
-    79, 84, 128, 78, 71, 79, 81, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 
-    128, 78, 71, 79, 77, 128, 78, 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 
-    78, 71, 207, 78, 71, 75, 89, 69, 69, 128, 78, 71, 75, 87, 65, 69, 78, 
-    128, 78, 71, 75, 85, 80, 128, 78, 71, 75, 85, 78, 128, 78, 71, 75, 85, 
-    77, 128, 78, 71, 75, 85, 69, 78, 90, 69, 85, 77, 128, 78, 71, 75, 85, 
-    197, 78, 71, 75, 73, 78, 68, 201, 78, 71, 75, 73, 69, 69, 128, 78, 71, 
-    75, 69, 85, 88, 128, 78, 71, 75, 69, 85, 82, 73, 128, 78, 71, 75, 69, 85, 
-    65, 69, 81, 128, 78, 71, 75, 69, 85, 65, 69, 77, 128, 78, 71, 75, 65, 81, 
-    128, 78, 71, 75, 65, 80, 128, 78, 71, 75, 65, 65, 77, 73, 128, 78, 71, 
-    75, 65, 128, 78, 71, 73, 69, 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 
-    73, 69, 128, 78, 71, 72, 65, 128, 78, 71, 71, 87, 65, 69, 78, 128, 78, 
-    71, 71, 85, 82, 65, 69, 128, 78, 71, 71, 85, 80, 128, 78, 71, 71, 85, 79, 
-    81, 128, 78, 71, 71, 85, 79, 209, 78, 71, 71, 85, 79, 78, 128, 78, 71, 
-    71, 85, 79, 77, 128, 78, 71, 71, 85, 77, 128, 78, 71, 71, 85, 69, 69, 84, 
-    128, 78, 71, 71, 85, 65, 69, 83, 72, 65, 197, 78, 71, 71, 85, 65, 69, 
-    206, 78, 71, 71, 85, 128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128, 
-    78, 71, 71, 73, 128, 78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65, 
-    69, 84, 128, 78, 71, 71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78, 
-    71, 71, 69, 78, 128, 78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69, 
-    69, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65, 
-    80, 128, 78, 71, 71, 65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77, 
-    128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, 85, 82, 69, 85, 
-    84, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 69, 128, 
-    78, 71, 69, 65, 68, 65, 76, 128, 78, 71, 65, 88, 128, 78, 71, 65, 85, 
-    128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 81, 128, 78, 71, 
-    65, 80, 128, 78, 71, 65, 78, 71, 85, 128, 78, 71, 65, 78, 128, 78, 71, 
-    65, 73, 128, 78, 71, 65, 72, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 
-    78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 83, 80, 65, 
-    80, 69, 82, 128, 78, 69, 87, 76, 73, 78, 69, 128, 78, 69, 87, 128, 78, 
-    69, 85, 84, 82, 65, 204, 78, 69, 85, 84, 69, 82, 128, 78, 69, 84, 128, 
-    78, 69, 212, 78, 69, 83, 84, 69, 196, 78, 69, 81, 85, 68, 65, 65, 128, 
-    78, 69, 80, 84, 85, 78, 69, 128, 78, 69, 80, 128, 78, 69, 79, 128, 78, 
-    69, 207, 78, 69, 78, 65, 78, 79, 128, 78, 69, 78, 128, 78, 69, 76, 128, 
-    78, 69, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 79, 206, 78, 69, 71, 
-    65, 84, 69, 196, 78, 69, 67, 75, 84, 73, 69, 128, 78, 69, 66, 69, 78, 83, 
-    84, 73, 77, 77, 69, 128, 78, 68, 85, 88, 128, 78, 68, 85, 84, 128, 78, 
-    68, 85, 82, 88, 128, 78, 68, 85, 82, 128, 78, 68, 85, 80, 128, 78, 68, 
-    85, 78, 128, 78, 68, 213, 78, 68, 79, 88, 128, 78, 68, 79, 84, 128, 78, 
-    68, 79, 80, 128, 78, 68, 79, 79, 128, 78, 68, 79, 78, 128, 78, 68, 79, 
-    77, 66, 85, 128, 78, 68, 79, 76, 197, 78, 68, 73, 88, 128, 78, 68, 73, 
-    84, 128, 78, 68, 73, 81, 128, 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 
-    128, 78, 68, 73, 69, 128, 78, 68, 73, 68, 65, 128, 78, 68, 73, 65, 81, 
-    128, 78, 68, 69, 88, 128, 78, 68, 69, 85, 88, 128, 78, 68, 69, 85, 84, 
-    128, 78, 68, 69, 85, 65, 69, 82, 69, 69, 128, 78, 68, 69, 80, 128, 78, 
-    68, 69, 69, 128, 78, 68, 69, 128, 78, 68, 65, 88, 128, 78, 68, 65, 84, 
-    128, 78, 68, 65, 80, 128, 78, 68, 65, 77, 128, 78, 68, 65, 65, 78, 71, 
-    71, 69, 85, 65, 69, 84, 128, 78, 68, 65, 65, 128, 78, 68, 65, 193, 78, 
-    66, 89, 88, 128, 78, 66, 89, 84, 128, 78, 66, 89, 82, 88, 128, 78, 66, 
-    89, 82, 128, 78, 66, 89, 80, 128, 78, 66, 89, 128, 78, 66, 85, 88, 128, 
-    78, 66, 85, 84, 128, 78, 66, 85, 82, 88, 128, 78, 66, 85, 82, 128, 78, 
-    66, 85, 80, 128, 78, 66, 85, 128, 78, 66, 79, 88, 128, 78, 66, 79, 84, 
-    128, 78, 66, 79, 80, 128, 78, 66, 79, 128, 78, 66, 73, 88, 128, 78, 66, 
-    73, 84, 128, 78, 66, 73, 80, 128, 78, 66, 73, 69, 88, 128, 78, 66, 73, 
-    69, 80, 128, 78, 66, 73, 69, 128, 78, 66, 73, 128, 78, 66, 72, 128, 78, 
-    66, 65, 88, 128, 78, 66, 65, 84, 128, 78, 66, 65, 80, 128, 78, 66, 65, 
-    128, 78, 65, 89, 65, 78, 78, 65, 128, 78, 65, 89, 128, 78, 65, 88, 73, 
-    65, 206, 78, 65, 88, 128, 78, 65, 85, 84, 72, 83, 128, 78, 65, 85, 68, 
-    73, 218, 78, 65, 84, 85, 82, 65, 204, 78, 65, 84, 73, 79, 78, 65, 204, 
-    78, 65, 83, 75, 65, 80, 201, 78, 65, 83, 72, 73, 128, 78, 65, 83, 65, 76, 
-    73, 90, 65, 84, 73, 79, 78, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 
-    79, 206, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 81, 128, 78, 
-    65, 79, 211, 78, 65, 78, 83, 65, 78, 65, 81, 128, 78, 65, 78, 71, 77, 79, 
-    78, 84, 72, 79, 128, 78, 65, 78, 68, 128, 78, 65, 78, 65, 128, 78, 65, 
-    77, 69, 128, 78, 65, 77, 197, 78, 65, 77, 50, 128, 78, 65, 77, 128, 78, 
-    65, 75, 128, 78, 65, 73, 82, 193, 78, 65, 73, 204, 78, 65, 71, 82, 201, 
-    78, 65, 71, 65, 82, 128, 78, 65, 71, 65, 128, 78, 65, 71, 193, 78, 65, 
-    71, 128, 78, 65, 199, 78, 65, 69, 128, 78, 65, 66, 76, 65, 128, 78, 65, 
-    65, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 75, 83, 73, 75, 89, 65, 
-    89, 65, 128, 78, 65, 65, 73, 128, 78, 65, 193, 78, 65, 50, 128, 78, 65, 
-    45, 50, 128, 78, 48, 52, 50, 128, 78, 48, 52, 49, 128, 78, 48, 52, 48, 
-    128, 78, 48, 51, 57, 128, 78, 48, 51, 56, 128, 78, 48, 51, 55, 65, 128, 
-    78, 48, 51, 55, 128, 78, 48, 51, 54, 128, 78, 48, 51, 53, 65, 128, 78, 
-    48, 51, 53, 128, 78, 48, 51, 52, 65, 128, 78, 48, 51, 52, 128, 78, 48, 
-    51, 51, 65, 128, 78, 48, 51, 51, 128, 78, 48, 51, 50, 128, 78, 48, 51, 
-    49, 128, 78, 48, 51, 48, 128, 78, 48, 50, 57, 128, 78, 48, 50, 56, 128, 
-    78, 48, 50, 55, 128, 78, 48, 50, 54, 128, 78, 48, 50, 53, 65, 128, 78, 
-    48, 50, 53, 128, 78, 48, 50, 52, 128, 78, 48, 50, 51, 128, 78, 48, 50, 
-    50, 128, 78, 48, 50, 49, 128, 78, 48, 50, 48, 128, 78, 48, 49, 57, 128, 
-    78, 48, 49, 56, 66, 128, 78, 48, 49, 56, 65, 128, 78, 48, 49, 56, 128, 
-    78, 48, 49, 55, 128, 78, 48, 49, 54, 128, 78, 48, 49, 53, 128, 78, 48, 
-    49, 52, 128, 78, 48, 49, 51, 128, 78, 48, 49, 50, 128, 78, 48, 49, 49, 
-    128, 78, 48, 49, 48, 128, 78, 48, 48, 57, 128, 78, 48, 48, 56, 128, 78, 
-    48, 48, 55, 128, 78, 48, 48, 54, 128, 78, 48, 48, 53, 128, 78, 48, 48, 
-    52, 128, 78, 48, 48, 51, 128, 78, 48, 48, 50, 128, 78, 48, 48, 49, 128, 
-    78, 45, 67, 82, 69, 197, 78, 45, 65, 82, 217, 77, 89, 88, 128, 77, 89, 
-    84, 128, 77, 89, 83, 76, 73, 84, 69, 128, 77, 89, 80, 128, 77, 89, 65, 
-    128, 77, 89, 193, 77, 89, 128, 77, 217, 77, 87, 79, 79, 128, 77, 87, 79, 
-    128, 77, 87, 73, 73, 128, 77, 87, 73, 128, 77, 87, 69, 69, 128, 77, 87, 
-    69, 128, 77, 87, 65, 65, 128, 77, 87, 65, 128, 77, 87, 128, 77, 215, 77, 
-    86, 83, 128, 77, 86, 79, 80, 128, 77, 86, 73, 128, 77, 86, 69, 85, 65, 
-    69, 78, 71, 65, 77, 128, 77, 86, 128, 77, 214, 77, 85, 88, 128, 77, 85, 
-    85, 83, 73, 75, 65, 84, 79, 65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74, 
-    193, 77, 85, 85, 128, 77, 85, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 
-    83, 73, 195, 77, 85, 83, 72, 82, 79, 79, 77, 128, 77, 85, 83, 72, 51, 
-    128, 77, 85, 83, 72, 179, 77, 85, 83, 72, 128, 77, 85, 83, 200, 77, 85, 
-    82, 88, 128, 77, 85, 82, 71, 85, 50, 128, 77, 85, 82, 69, 128, 77, 85, 
-    82, 68, 65, 128, 77, 85, 82, 68, 193, 77, 85, 82, 128, 77, 85, 81, 68, 
-    65, 77, 128, 77, 85, 80, 128, 77, 85, 79, 88, 128, 77, 85, 79, 84, 128, 
-    77, 85, 79, 80, 128, 77, 85, 79, 77, 65, 69, 128, 77, 85, 79, 128, 77, 
-    85, 78, 83, 85, 66, 128, 77, 85, 78, 65, 72, 128, 77, 85, 76, 84, 73, 83, 
-    69, 84, 128, 77, 85, 76, 84, 73, 83, 69, 212, 77, 85, 76, 84, 73, 80, 76, 
-    73, 67, 65, 84, 73, 79, 78, 128, 77, 85, 76, 84, 73, 80, 76, 73, 67, 65, 
-    84, 73, 79, 206, 77, 85, 76, 84, 73, 80, 76, 197, 77, 85, 76, 84, 73, 79, 
-    67, 85, 76, 65, 210, 77, 85, 76, 84, 73, 77, 65, 80, 128, 77, 85, 76, 84, 
-    201, 77, 85, 75, 80, 72, 82, 69, 78, 71, 128, 77, 85, 73, 78, 128, 77, 
-    85, 71, 83, 128, 77, 85, 71, 128, 77, 85, 199, 77, 85, 69, 128, 77, 85, 
-    67, 72, 128, 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 
-    78, 128, 77, 85, 65, 69, 128, 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 
-    77, 213, 77, 83, 128, 77, 80, 65, 128, 77, 79, 89, 65, 73, 128, 77, 79, 
-    88, 128, 77, 79, 86, 73, 197, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 
-    128, 77, 79, 85, 84, 200, 77, 79, 85, 83, 69, 128, 77, 79, 85, 83, 197, 
-    77, 79, 85, 78, 84, 65, 73, 78, 83, 128, 77, 79, 85, 78, 84, 65, 73, 78, 
-    128, 77, 79, 85, 78, 84, 65, 73, 206, 77, 79, 85, 78, 212, 77, 79, 85, 
-    78, 68, 128, 77, 79, 85, 78, 196, 77, 79, 84, 72, 69, 82, 128, 77, 79, 
-    84, 128, 77, 79, 82, 84, 85, 85, 77, 128, 77, 79, 82, 84, 65, 82, 128, 
-    77, 79, 82, 80, 72, 79, 76, 79, 71, 73, 67, 65, 204, 77, 79, 82, 78, 73, 
-    78, 71, 128, 77, 79, 80, 128, 77, 79, 79, 83, 69, 45, 67, 82, 69, 197, 
-    77, 79, 79, 78, 128, 77, 79, 79, 206, 77, 79, 79, 77, 80, 85, 81, 128, 
-    77, 79, 79, 77, 69, 85, 84, 128, 77, 79, 79, 128, 77, 79, 78, 84, 73, 69, 
-    69, 78, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, 
-    83, 84, 69, 82, 128, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, 77, 79, 78, 
-    79, 83, 80, 65, 67, 197, 77, 79, 78, 79, 82, 65, 73, 76, 128, 77, 79, 78, 
-    79, 71, 82, 65, 80, 200, 77, 79, 78, 79, 71, 82, 65, 77, 77, 79, 211, 77, 
-    79, 78, 79, 71, 82, 65, 205, 77, 79, 78, 79, 70, 79, 78, 73, 65, 83, 128, 
-    77, 79, 78, 79, 67, 85, 76, 65, 210, 77, 79, 78, 75, 69, 89, 128, 77, 79, 
-    78, 75, 69, 217, 77, 79, 78, 73, 128, 77, 79, 78, 71, 75, 69, 85, 65, 69, 
-    81, 128, 77, 79, 78, 69, 217, 77, 79, 78, 128, 77, 79, 206, 77, 79, 76, 
-    128, 77, 79, 72, 65, 77, 77, 65, 196, 77, 79, 68, 85, 76, 207, 77, 79, 
-    68, 69, 83, 84, 89, 128, 77, 79, 68, 69, 76, 83, 128, 77, 79, 68, 69, 76, 
-    128, 77, 79, 68, 69, 128, 77, 79, 66, 73, 76, 197, 77, 79, 65, 128, 77, 
-    207, 77, 78, 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 83, 80, 128, 77, 
-    77, 128, 77, 205, 77, 76, 65, 128, 77, 76, 128, 77, 75, 80, 65, 82, 65, 
-    209, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 83, 82, 65, 128, 77, 73, 
-    82, 73, 66, 65, 65, 82, 85, 128, 77, 73, 82, 73, 128, 77, 73, 82, 69, 68, 
-    128, 77, 73, 80, 128, 77, 73, 78, 89, 128, 77, 73, 78, 85, 83, 45, 79, 
-    82, 45, 80, 76, 85, 211, 77, 73, 78, 85, 83, 128, 77, 73, 78, 73, 83, 84, 
-    69, 82, 128, 77, 73, 78, 73, 77, 65, 128, 77, 73, 78, 73, 68, 73, 83, 67, 
-    128, 77, 73, 78, 73, 66, 85, 83, 128, 77, 73, 77, 69, 128, 77, 73, 77, 
-    128, 77, 73, 76, 76, 73, 79, 78, 211, 77, 73, 76, 76, 69, 84, 128, 77, 
-    73, 76, 76, 197, 77, 73, 76, 204, 77, 73, 76, 75, 217, 77, 73, 76, 128, 
-    77, 73, 75, 85, 82, 79, 78, 128, 77, 73, 75, 82, 79, 206, 77, 73, 75, 82, 
-    73, 128, 77, 73, 73, 78, 128, 77, 73, 73, 128, 77, 73, 199, 77, 73, 69, 
-    88, 128, 77, 73, 69, 85, 77, 45, 84, 73, 75, 69, 85, 84, 128, 77, 73, 69, 
-    85, 77, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 
-    45, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 
-    82, 73, 69, 85, 76, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 45, 
-    83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 128, 77, 
-    73, 69, 85, 77, 45, 80, 65, 78, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 
-    45, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 67, 73, 69, 85, 67, 
-    128, 77, 73, 69, 85, 77, 45, 67, 72, 73, 69, 85, 67, 72, 128, 77, 73, 69, 
-    85, 205, 77, 73, 69, 80, 128, 77, 73, 69, 69, 128, 77, 73, 69, 128, 77, 
-    73, 68, 76, 73, 78, 197, 77, 73, 68, 68, 76, 69, 45, 87, 69, 76, 83, 200, 
-    77, 73, 68, 68, 76, 197, 77, 73, 196, 77, 73, 67, 82, 79, 83, 67, 79, 80, 
-    69, 128, 77, 73, 67, 82, 79, 80, 72, 79, 78, 69, 128, 77, 73, 67, 82, 
-    207, 77, 73, 67, 210, 77, 72, 90, 128, 77, 72, 65, 128, 77, 72, 128, 77, 
-    71, 85, 88, 128, 77, 71, 85, 84, 128, 77, 71, 85, 82, 88, 128, 77, 71, 
-    85, 82, 128, 77, 71, 85, 80, 128, 77, 71, 85, 79, 88, 128, 77, 71, 85, 
-    79, 80, 128, 77, 71, 85, 79, 128, 77, 71, 85, 128, 77, 71, 79, 88, 128, 
-    77, 71, 79, 84, 128, 77, 71, 79, 80, 128, 77, 71, 79, 128, 77, 71, 207, 
-    77, 71, 73, 69, 88, 128, 77, 71, 73, 69, 128, 77, 71, 69, 88, 128, 77, 
-    71, 69, 80, 128, 77, 71, 69, 128, 77, 71, 66, 85, 128, 77, 71, 66, 79, 
-    79, 128, 77, 71, 66, 79, 70, 85, 77, 128, 77, 71, 66, 79, 128, 77, 71, 
-    66, 73, 128, 77, 71, 66, 69, 85, 78, 128, 77, 71, 66, 69, 78, 128, 77, 
-    71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 65, 83, 65, 81, 
-    128, 77, 71, 66, 65, 83, 65, 128, 77, 71, 65, 88, 128, 77, 71, 65, 84, 
-    128, 77, 71, 65, 80, 128, 77, 71, 65, 128, 77, 71, 128, 77, 70, 79, 78, 
-    128, 77, 70, 79, 206, 77, 70, 79, 128, 77, 70, 73, 89, 65, 81, 128, 77, 
-    70, 73, 69, 69, 128, 77, 70, 69, 85, 84, 128, 77, 70, 69, 85, 81, 128, 
-    77, 70, 69, 85, 65, 69, 128, 77, 70, 65, 65, 128, 77, 69, 90, 90, 79, 
-    128, 77, 69, 88, 128, 77, 69, 85, 212, 77, 69, 85, 81, 128, 77, 69, 85, 
-    78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, 69, 85, 78, 128, 77, 69, 84, 
-    82, 79, 128, 77, 69, 84, 82, 73, 67, 65, 204, 77, 69, 84, 82, 73, 65, 
-    128, 77, 69, 84, 82, 69, 84, 69, 211, 77, 69, 84, 79, 66, 69, 76, 85, 83, 
-    128, 77, 69, 84, 69, 75, 128, 77, 69, 84, 69, 71, 128, 77, 69, 84, 65, 
-    76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, 77, 69, 
-    83, 83, 65, 71, 69, 128, 77, 69, 83, 83, 65, 71, 197, 77, 69, 83, 79, 
-    128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77, 69, 82, 79, 73, 84, 
-    73, 195, 77, 69, 82, 75, 72, 65, 128, 77, 69, 82, 75, 72, 193, 77, 69, 
-    82, 73, 68, 73, 65, 78, 83, 128, 77, 69, 82, 73, 128, 77, 69, 82, 71, 69, 
-    128, 77, 69, 82, 67, 85, 82, 89, 128, 77, 69, 82, 67, 85, 82, 217, 77, 
-    69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 69, 77, 79, 128, 77, 69, 
-    77, 66, 69, 82, 83, 72, 73, 80, 128, 77, 69, 77, 66, 69, 82, 128, 77, 69, 
-    77, 66, 69, 210, 77, 69, 77, 45, 81, 79, 80, 72, 128, 77, 69, 77, 128, 
-    77, 69, 205, 77, 69, 76, 79, 68, 73, 195, 77, 69, 76, 73, 75, 128, 77, 
-    69, 73, 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 128, 77, 69, 71, 65, 80, 
-    72, 79, 78, 69, 128, 77, 69, 71, 65, 76, 73, 128, 77, 69, 69, 84, 79, 82, 
-    85, 128, 77, 69, 69, 84, 128, 77, 69, 69, 77, 85, 128, 77, 69, 69, 77, 
-    128, 77, 69, 69, 69, 69, 128, 77, 69, 68, 73, 85, 77, 128, 77, 69, 68, 
-    73, 85, 205, 77, 69, 68, 73, 67, 73, 78, 69, 128, 77, 69, 68, 73, 67, 65, 
-    204, 77, 69, 65, 84, 128, 77, 69, 65, 212, 77, 69, 65, 83, 85, 82, 69, 
-    196, 77, 69, 65, 83, 85, 82, 69, 128, 77, 69, 65, 83, 85, 82, 197, 77, 
-    68, 85, 206, 77, 196, 77, 67, 72, 213, 77, 67, 72, 65, 206, 77, 195, 77, 
-    66, 85, 79, 81, 128, 77, 66, 85, 79, 128, 77, 66, 85, 69, 128, 77, 66, 
-    85, 65, 69, 77, 128, 77, 66, 85, 65, 69, 128, 77, 66, 79, 79, 128, 77, 
-    66, 79, 128, 77, 66, 73, 84, 128, 77, 66, 73, 212, 77, 66, 73, 82, 73, 
-    69, 69, 78, 128, 77, 66, 73, 128, 77, 66, 69, 85, 88, 128, 77, 66, 69, 
-    85, 82, 73, 128, 77, 66, 69, 85, 77, 128, 77, 66, 69, 82, 65, 69, 128, 
-    77, 66, 69, 78, 128, 77, 66, 69, 69, 75, 69, 69, 84, 128, 77, 66, 69, 69, 
-    128, 77, 66, 69, 128, 77, 66, 65, 81, 128, 77, 66, 65, 78, 89, 73, 128, 
-    77, 66, 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, 75, 69, 84, 128, 77, 66, 
-    65, 65, 128, 77, 66, 65, 193, 77, 66, 193, 77, 66, 52, 128, 77, 66, 51, 
-    128, 77, 66, 50, 128, 77, 66, 128, 77, 194, 77, 65, 89, 65, 78, 78, 65, 
-    128, 77, 65, 89, 128, 77, 65, 88, 73, 77, 65, 128, 77, 65, 88, 128, 77, 
-    65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65, 84, 82, 73, 88, 
-    128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 65, 84, 128, 77, 65, 
-    83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 83, 83, 65, 71, 69, 
-    128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 77, 65, 83, 72, 70, 
-    65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, 78, 
-    197, 77, 65, 82, 89, 128, 77, 65, 82, 85, 75, 85, 128, 77, 65, 82, 84, 
-    89, 82, 73, 193, 77, 65, 82, 82, 89, 73, 78, 199, 77, 65, 82, 82, 73, 65, 
-    71, 197, 77, 65, 82, 75, 69, 82, 128, 77, 65, 82, 75, 45, 52, 128, 77, 
-    65, 82, 75, 45, 51, 128, 77, 65, 82, 75, 45, 50, 128, 77, 65, 82, 75, 45, 
-    49, 128, 77, 65, 82, 69, 128, 77, 65, 82, 67, 72, 128, 77, 65, 82, 67, 
-    65, 84, 79, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 
-    84, 79, 128, 77, 65, 82, 67, 65, 83, 73, 84, 69, 128, 77, 65, 82, 66, 85, 
-    84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 
-    65, 70, 128, 77, 65, 81, 128, 77, 65, 80, 76, 197, 77, 65, 80, 73, 81, 
-    128, 77, 65, 208, 77, 65, 79, 128, 77, 65, 78, 83, 89, 79, 78, 128, 77, 
-    65, 78, 83, 85, 65, 69, 128, 77, 65, 78, 78, 65, 218, 77, 65, 78, 78, 65, 
-    128, 77, 65, 78, 71, 65, 76, 65, 77, 128, 77, 65, 78, 68, 65, 73, 76, 73, 
-    78, 199, 77, 65, 78, 68, 65, 73, 195, 77, 65, 78, 67, 72, 213, 77, 65, 
-    78, 65, 67, 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, 197, 77, 65, 76, 69, 
-    69, 82, 73, 128, 77, 65, 76, 69, 128, 77, 65, 76, 197, 77, 65, 76, 65, 
-    75, 79, 206, 77, 65, 75, 83, 85, 82, 65, 128, 77, 65, 75, 83, 85, 82, 
-    193, 77, 65, 73, 90, 69, 128, 77, 65, 73, 89, 65, 77, 79, 75, 128, 77, 
-    65, 73, 84, 65, 73, 75, 72, 85, 128, 77, 65, 73, 82, 85, 128, 77, 65, 73, 
-    77, 85, 65, 78, 128, 77, 65, 73, 77, 65, 76, 65, 73, 128, 77, 65, 73, 76, 
-    66, 79, 216, 77, 65, 73, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 
-    128, 77, 65, 73, 128, 77, 65, 72, 74, 79, 78, 199, 77, 65, 72, 72, 65, 
-    128, 77, 65, 72, 65, 80, 82, 65, 78, 65, 128, 77, 65, 72, 65, 80, 65, 75, 
-    72, 128, 77, 65, 72, 65, 65, 80, 82, 65, 65, 78, 193, 77, 65, 72, 128, 
-    77, 65, 71, 78, 73, 70, 89, 73, 78, 199, 77, 65, 69, 83, 73, 128, 77, 65, 
-    69, 78, 89, 73, 128, 77, 65, 69, 78, 74, 69, 84, 128, 77, 65, 69, 77, 86, 
-    69, 85, 88, 128, 77, 65, 69, 77, 75, 80, 69, 78, 128, 77, 65, 69, 77, 71, 
-    66, 73, 69, 69, 128, 77, 65, 69, 77, 66, 71, 66, 73, 69, 69, 128, 77, 65, 
-    69, 77, 66, 65, 128, 77, 65, 69, 77, 128, 77, 65, 69, 76, 69, 69, 128, 
-    77, 65, 69, 75, 69, 85, 80, 128, 77, 65, 68, 89, 65, 128, 77, 65, 68, 85, 
-    128, 77, 65, 68, 68, 65, 200, 77, 65, 68, 68, 65, 128, 77, 65, 68, 68, 
-    193, 77, 65, 67, 82, 79, 78, 45, 71, 82, 65, 86, 69, 128, 77, 65, 67, 82, 
-    79, 78, 45, 66, 82, 69, 86, 69, 128, 77, 65, 67, 82, 79, 78, 45, 65, 67, 
-    85, 84, 69, 128, 77, 65, 67, 82, 79, 78, 128, 77, 65, 67, 82, 79, 206, 
-    77, 65, 67, 72, 73, 78, 69, 128, 77, 65, 65, 89, 89, 65, 65, 128, 77, 65, 
-    65, 73, 128, 77, 65, 65, 128, 77, 65, 50, 128, 77, 48, 52, 52, 128, 77, 
-    48, 52, 51, 128, 77, 48, 52, 50, 128, 77, 48, 52, 49, 128, 77, 48, 52, 
-    48, 65, 128, 77, 48, 52, 48, 128, 77, 48, 51, 57, 128, 77, 48, 51, 56, 
-    128, 77, 48, 51, 55, 128, 77, 48, 51, 54, 128, 77, 48, 51, 53, 128, 77, 
-    48, 51, 52, 128, 77, 48, 51, 51, 66, 128, 77, 48, 51, 51, 65, 128, 77, 
-    48, 51, 51, 128, 77, 48, 51, 50, 128, 77, 48, 51, 49, 65, 128, 77, 48, 
-    51, 49, 128, 77, 48, 51, 48, 128, 77, 48, 50, 57, 128, 77, 48, 50, 56, 
-    65, 128, 77, 48, 50, 56, 128, 77, 48, 50, 55, 128, 77, 48, 50, 54, 128, 
-    77, 48, 50, 53, 128, 77, 48, 50, 52, 65, 128, 77, 48, 50, 52, 128, 77, 
-    48, 50, 51, 128, 77, 48, 50, 50, 65, 128, 77, 48, 50, 50, 128, 77, 48, 
-    50, 49, 128, 77, 48, 50, 48, 128, 77, 48, 49, 57, 128, 77, 48, 49, 56, 
-    128, 77, 48, 49, 55, 65, 128, 77, 48, 49, 55, 128, 77, 48, 49, 54, 65, 
-    128, 77, 48, 49, 54, 128, 77, 48, 49, 53, 65, 128, 77, 48, 49, 53, 128, 
-    77, 48, 49, 52, 128, 77, 48, 49, 51, 128, 77, 48, 49, 50, 72, 128, 77, 
-    48, 49, 50, 71, 128, 77, 48, 49, 50, 70, 128, 77, 48, 49, 50, 69, 128, 
-    77, 48, 49, 50, 68, 128, 77, 48, 49, 50, 67, 128, 77, 48, 49, 50, 66, 
-    128, 77, 48, 49, 50, 65, 128, 77, 48, 49, 50, 128, 77, 48, 49, 49, 128, 
-    77, 48, 49, 48, 65, 128, 77, 48, 49, 48, 128, 77, 48, 48, 57, 128, 77, 
-    48, 48, 56, 128, 77, 48, 48, 55, 128, 77, 48, 48, 54, 128, 77, 48, 48, 
-    53, 128, 77, 48, 48, 52, 128, 77, 48, 48, 51, 65, 128, 77, 48, 48, 51, 
-    128, 77, 48, 48, 50, 128, 77, 48, 48, 49, 66, 128, 77, 48, 48, 49, 65, 
-    128, 77, 48, 48, 49, 128, 76, 218, 76, 89, 89, 128, 76, 89, 88, 128, 76, 
-    89, 84, 128, 76, 89, 82, 88, 128, 76, 89, 82, 128, 76, 89, 80, 128, 76, 
-    89, 68, 73, 65, 206, 76, 89, 67, 73, 65, 206, 76, 88, 128, 76, 87, 79, 
-    79, 128, 76, 87, 79, 128, 76, 87, 73, 73, 128, 76, 87, 73, 128, 76, 87, 
-    69, 128, 76, 87, 65, 65, 128, 76, 87, 65, 128, 76, 85, 88, 128, 76, 85, 
-    85, 128, 76, 85, 84, 128, 76, 85, 82, 88, 128, 76, 85, 80, 128, 76, 85, 
-    79, 88, 128, 76, 85, 79, 84, 128, 76, 85, 79, 80, 128, 76, 85, 79, 128, 
-    76, 85, 78, 71, 83, 73, 128, 76, 85, 78, 65, 84, 197, 76, 85, 205, 76, 
-    85, 76, 128, 76, 85, 73, 83, 128, 76, 85, 72, 85, 82, 128, 76, 85, 72, 
-    128, 76, 85, 71, 71, 65, 71, 69, 128, 76, 85, 71, 65, 76, 128, 76, 85, 
-    71, 65, 204, 76, 85, 69, 128, 76, 85, 65, 69, 80, 128, 76, 85, 51, 128, 
-    76, 85, 50, 128, 76, 85, 178, 76, 82, 79, 128, 76, 82, 77, 128, 76, 82, 
-    69, 128, 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, 
-    76, 79, 88, 128, 76, 79, 87, 69, 82, 69, 196, 76, 79, 87, 69, 210, 76, 
-    79, 87, 45, 185, 76, 79, 86, 197, 76, 79, 85, 82, 69, 128, 76, 79, 85, 
-    68, 83, 80, 69, 65, 75, 69, 82, 128, 76, 79, 85, 68, 76, 217, 76, 79, 84, 
-    85, 83, 128, 76, 79, 84, 128, 76, 79, 82, 82, 89, 128, 76, 79, 82, 82, 
-    65, 73, 78, 69, 128, 76, 79, 81, 128, 76, 79, 80, 128, 76, 79, 79, 84, 
-    128, 76, 79, 79, 80, 69, 196, 76, 79, 79, 80, 128, 76, 79, 79, 208, 76, 
-    79, 79, 78, 128, 76, 79, 79, 203, 76, 79, 79, 128, 76, 79, 78, 83, 85, 
-    77, 128, 76, 79, 78, 71, 65, 128, 76, 79, 78, 71, 193, 76, 79, 78, 71, 
-    45, 66, 82, 65, 78, 67, 72, 45, 89, 82, 128, 76, 79, 78, 71, 45, 66, 82, 
-    65, 78, 67, 72, 45, 83, 79, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 
-    72, 45, 79, 83, 211, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 77, 
-    65, 68, 210, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 72, 65, 71, 
-    65, 76, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 65, 210, 76, 
-    79, 77, 77, 65, 69, 128, 76, 79, 77, 128, 76, 79, 205, 76, 79, 76, 76, 
-    73, 80, 79, 80, 128, 76, 79, 76, 76, 128, 76, 79, 71, 210, 76, 79, 71, 
-    79, 84, 89, 80, 197, 76, 79, 71, 79, 71, 82, 65, 205, 76, 79, 71, 128, 
-    76, 79, 68, 69, 83, 84, 79, 78, 69, 128, 76, 79, 67, 79, 77, 79, 84, 73, 
-    86, 69, 128, 76, 79, 67, 75, 73, 78, 71, 45, 83, 72, 73, 70, 212, 76, 79, 
-    67, 203, 76, 79, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, 73, 79, 
-    206, 76, 79, 65, 128, 76, 78, 128, 76, 76, 85, 85, 128, 76, 76, 79, 79, 
-    128, 76, 76, 76, 85, 85, 128, 76, 76, 76, 85, 128, 76, 76, 76, 79, 79, 
-    128, 76, 76, 76, 79, 128, 76, 76, 76, 73, 73, 128, 76, 76, 76, 73, 128, 
-    76, 76, 76, 69, 69, 128, 76, 76, 76, 69, 128, 76, 76, 76, 65, 85, 128, 
-    76, 76, 76, 65, 73, 128, 76, 76, 76, 65, 65, 128, 76, 76, 76, 65, 128, 
-    76, 76, 76, 128, 76, 74, 85, 68, 73, 74, 69, 128, 76, 74, 69, 128, 76, 
-    74, 128, 76, 73, 88, 128, 76, 73, 87, 78, 128, 76, 73, 86, 82, 197, 76, 
-    73, 84, 84, 76, 197, 76, 73, 84, 84, 69, 210, 76, 73, 84, 82, 193, 76, 
-    73, 84, 128, 76, 73, 83, 213, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 
-    76, 73, 81, 128, 76, 73, 80, 83, 84, 73, 67, 75, 128, 76, 73, 78, 75, 73, 
-    78, 199, 76, 73, 78, 203, 76, 73, 78, 71, 83, 65, 128, 76, 73, 78, 69, 
-    83, 128, 76, 73, 78, 69, 211, 76, 73, 78, 69, 45, 57, 128, 76, 73, 78, 
-    69, 45, 55, 128, 76, 73, 78, 69, 45, 51, 128, 76, 73, 78, 69, 45, 49, 
-    128, 76, 73, 77, 77, 85, 52, 128, 76, 73, 77, 77, 85, 50, 128, 76, 73, 
-    77, 77, 85, 128, 76, 73, 77, 77, 213, 76, 73, 77, 73, 84, 69, 196, 76, 
-    73, 77, 73, 84, 65, 84, 73, 79, 78, 128, 76, 73, 77, 73, 84, 128, 76, 73, 
-    77, 69, 128, 76, 73, 77, 66, 213, 76, 73, 76, 89, 128, 76, 73, 76, 73, 
-    84, 72, 128, 76, 73, 76, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, 128, 
-    76, 73, 71, 72, 84, 72, 79, 85, 83, 69, 128, 76, 73, 71, 72, 84, 128, 76, 
-    73, 70, 69, 128, 76, 73, 69, 88, 128, 76, 73, 69, 84, 128, 76, 73, 69, 
-    80, 128, 76, 73, 69, 69, 128, 76, 73, 69, 128, 76, 73, 68, 128, 76, 73, 
-    66, 82, 65, 128, 76, 73, 66, 69, 82, 84, 89, 128, 76, 73, 65, 66, 73, 76, 
-    73, 84, 217, 76, 72, 73, 73, 128, 76, 72, 65, 86, 73, 89, 65, 78, 73, 
-    128, 76, 72, 65, 199, 76, 72, 65, 65, 128, 76, 72, 128, 76, 69, 90, 72, 
-    128, 76, 69, 88, 128, 76, 69, 86, 69, 204, 76, 69, 85, 77, 128, 76, 69, 
-    85, 65, 69, 80, 128, 76, 69, 85, 65, 69, 77, 128, 76, 69, 85, 128, 76, 
-    69, 213, 76, 69, 84, 84, 69, 82, 83, 128, 76, 69, 84, 84, 69, 82, 128, 
-    76, 69, 212, 76, 69, 83, 83, 69, 210, 76, 69, 83, 83, 45, 84, 72, 65, 78, 
-    128, 76, 69, 83, 83, 45, 84, 72, 65, 206, 76, 69, 80, 128, 76, 69, 79, 
-    80, 65, 82, 68, 128, 76, 69, 79, 128, 76, 69, 78, 84, 73, 67, 85, 76, 65, 
-    210, 76, 69, 78, 73, 83, 128, 76, 69, 78, 71, 84, 72, 69, 78, 69, 82, 
-    128, 76, 69, 78, 71, 84, 200, 76, 69, 78, 71, 65, 128, 76, 69, 78, 71, 
-    193, 76, 69, 77, 79, 78, 128, 76, 69, 77, 79, 73, 128, 76, 69, 76, 69, 
-    84, 128, 76, 69, 76, 69, 212, 76, 69, 203, 76, 69, 73, 77, 77, 65, 128, 
-    76, 69, 73, 77, 77, 193, 76, 69, 71, 83, 128, 76, 69, 71, 73, 79, 78, 
-    128, 76, 69, 71, 69, 84, 79, 211, 76, 69, 71, 128, 76, 69, 70, 84, 87, 
-    65, 82, 68, 83, 128, 76, 69, 70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212, 
-    76, 69, 70, 84, 45, 83, 84, 69, 205, 76, 69, 70, 84, 45, 83, 73, 68, 197, 
-    76, 69, 70, 84, 45, 83, 72, 65, 68, 69, 196, 76, 69, 70, 84, 45, 80, 79, 
-    73, 78, 84, 73, 78, 199, 76, 69, 70, 84, 45, 72, 65, 78, 68, 69, 196, 76, 
-    69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, 84, 45, 70, 65, 67, 73, 78, 
-    199, 76, 69, 70, 84, 128, 76, 69, 69, 82, 65, 69, 87, 65, 128, 76, 69, 
-    69, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 68, 71, 69, 82, 128, 76, 
-    69, 65, 84, 72, 69, 82, 128, 76, 69, 65, 70, 128, 76, 69, 65, 198, 76, 
-    69, 65, 68, 73, 78, 199, 76, 69, 65, 68, 69, 82, 128, 76, 69, 65, 196, 
-    76, 68, 65, 78, 128, 76, 68, 50, 128, 76, 67, 201, 76, 67, 197, 76, 65, 
-    90, 217, 76, 65, 89, 65, 78, 78, 65, 128, 76, 65, 88, 128, 76, 65, 87, 
-    128, 76, 65, 215, 76, 65, 85, 76, 65, 128, 76, 65, 85, 75, 65, 218, 76, 
-    65, 84, 73, 78, 65, 84, 197, 76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82, 
-    65, 204, 76, 65, 84, 197, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 
-    65, 204, 76, 65, 82, 71, 69, 210, 76, 65, 82, 71, 69, 128, 76, 65, 82, 
-    71, 197, 76, 65, 81, 128, 76, 65, 80, 65, 81, 128, 76, 65, 80, 128, 76, 
-    65, 78, 84, 69, 82, 78, 128, 76, 65, 78, 71, 85, 65, 71, 197, 76, 65, 78, 
-    69, 83, 128, 76, 65, 77, 69, 68, 72, 128, 76, 65, 77, 69, 68, 128, 76, 
-    65, 77, 69, 196, 76, 65, 77, 69, 128, 76, 65, 77, 197, 76, 65, 77, 68, 
-    65, 128, 76, 65, 77, 68, 128, 76, 65, 77, 66, 68, 193, 76, 65, 77, 65, 
-    68, 72, 128, 76, 65, 76, 128, 76, 65, 204, 76, 65, 75, 75, 72, 65, 78, 
-    71, 89, 65, 79, 128, 76, 65, 74, 65, 78, 89, 65, 76, 65, 78, 128, 76, 65, 
-    201, 76, 65, 72, 83, 72, 85, 128, 76, 65, 72, 128, 76, 65, 71, 85, 83, 
-    128, 76, 65, 71, 213, 76, 65, 71, 65, 82, 128, 76, 65, 71, 65, 210, 76, 
-    65, 71, 65, 66, 128, 76, 65, 71, 65, 194, 76, 65, 69, 86, 128, 76, 65, 
-    69, 128, 76, 65, 68, 217, 76, 65, 67, 75, 128, 76, 65, 67, 65, 128, 76, 
-    65, 66, 79, 85, 82, 73, 78, 71, 128, 76, 65, 66, 79, 82, 128, 76, 65, 66, 
-    73, 65, 76, 73, 90, 65, 84, 73, 79, 206, 76, 65, 66, 73, 65, 204, 76, 65, 
-    66, 65, 84, 128, 76, 65, 65, 78, 65, 69, 128, 76, 65, 65, 78, 128, 76, 
-    65, 65, 77, 85, 128, 76, 65, 65, 77, 128, 76, 65, 65, 73, 128, 76, 48, 
-    48, 54, 65, 128, 76, 48, 48, 50, 65, 128, 76, 45, 84, 89, 80, 197, 76, 
-    45, 83, 72, 65, 80, 69, 196, 75, 89, 85, 82, 73, 73, 128, 75, 89, 85, 
-    128, 75, 89, 79, 128, 75, 89, 76, 73, 83, 77, 65, 128, 75, 89, 73, 128, 
-    75, 89, 69, 128, 75, 89, 65, 84, 72, 79, 211, 75, 89, 65, 65, 128, 75, 
-    89, 65, 128, 75, 88, 87, 73, 128, 75, 88, 87, 69, 69, 128, 75, 88, 87, 
-    69, 128, 75, 88, 87, 65, 65, 128, 75, 88, 87, 65, 128, 75, 88, 85, 128, 
-    75, 88, 79, 128, 75, 88, 73, 128, 75, 88, 69, 69, 128, 75, 88, 69, 128, 
-    75, 88, 65, 65, 128, 75, 88, 65, 128, 75, 87, 85, 51, 49, 56, 128, 75, 
-    87, 79, 79, 128, 75, 87, 79, 128, 75, 87, 73, 73, 128, 75, 87, 73, 128, 
-    75, 87, 69, 69, 128, 75, 87, 69, 128, 75, 87, 65, 89, 128, 75, 87, 65, 
-    69, 84, 128, 75, 87, 65, 65, 128, 75, 86, 65, 128, 75, 86, 128, 75, 85, 
-    88, 128, 75, 85, 85, 72, 128, 75, 85, 84, 128, 75, 85, 83, 77, 65, 128, 
-    75, 85, 83, 72, 85, 50, 128, 75, 85, 82, 88, 128, 75, 85, 82, 85, 90, 69, 
-    73, 82, 79, 128, 75, 85, 82, 84, 128, 75, 85, 82, 79, 79, 78, 69, 128, 
-    75, 85, 82, 128, 75, 85, 210, 75, 85, 81, 128, 75, 85, 79, 88, 128, 75, 
-    85, 79, 80, 128, 75, 85, 79, 208, 75, 85, 79, 77, 128, 75, 85, 79, 128, 
-    75, 85, 78, 71, 128, 75, 85, 78, 68, 68, 65, 76, 73, 89, 65, 128, 75, 85, 
-    76, 128, 75, 85, 204, 75, 85, 69, 84, 128, 75, 85, 55, 128, 75, 85, 52, 
-    128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, 75, 83, 83, 
-    85, 85, 128, 75, 83, 83, 85, 128, 75, 83, 83, 79, 79, 128, 75, 83, 83, 
-    79, 128, 75, 83, 83, 73, 73, 128, 75, 83, 83, 73, 128, 75, 83, 83, 69, 
-    69, 128, 75, 83, 83, 69, 128, 75, 83, 83, 65, 85, 128, 75, 83, 83, 65, 
-    73, 128, 75, 83, 83, 65, 65, 128, 75, 83, 83, 65, 128, 75, 83, 83, 128, 
-    75, 83, 73, 128, 75, 82, 69, 77, 65, 83, 84, 73, 128, 75, 82, 65, 84, 73, 
-    77, 79, 89, 80, 79, 82, 82, 79, 79, 78, 128, 75, 82, 65, 84, 73, 77, 79, 
-    75, 79, 85, 70, 73, 83, 77, 65, 128, 75, 82, 65, 84, 73, 77, 65, 84, 65, 
-    128, 75, 82, 65, 84, 73, 77, 193, 75, 80, 85, 128, 75, 80, 79, 81, 128, 
-    75, 80, 79, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 85, 
-    88, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, 65, 82, 65, 81, 
-    128, 75, 80, 65, 78, 128, 75, 80, 65, 128, 75, 79, 88, 128, 75, 79, 86, 
-    85, 85, 128, 75, 79, 84, 79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79, 
-    82, 79, 78, 73, 83, 128, 75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73, 
-    195, 75, 79, 81, 78, 68, 79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79, 
-    80, 128, 75, 79, 79, 80, 79, 128, 75, 79, 79, 77, 85, 85, 84, 128, 75, 
-    79, 79, 128, 75, 79, 78, 84, 69, 86, 77, 65, 128, 75, 79, 78, 84, 69, 86, 
-    77, 193, 75, 79, 77, 201, 75, 79, 77, 66, 85, 86, 65, 128, 75, 79, 77, 
-    66, 85, 86, 193, 75, 79, 77, 66, 213, 75, 79, 75, 79, 128, 75, 79, 75, 
-    128, 75, 79, 203, 75, 79, 73, 128, 75, 79, 201, 75, 79, 72, 128, 75, 79, 
-    71, 72, 79, 77, 128, 75, 79, 69, 84, 128, 75, 79, 65, 76, 65, 128, 75, 
-    79, 65, 128, 75, 78, 73, 71, 72, 84, 128, 75, 78, 73, 71, 72, 212, 75, 
-    78, 73, 70, 69, 128, 75, 78, 73, 70, 197, 75, 77, 128, 75, 205, 75, 76, 
-    73, 84, 79, 78, 128, 75, 76, 65, 83, 77, 65, 128, 75, 76, 65, 83, 77, 
-    193, 75, 76, 65, 128, 75, 76, 128, 75, 75, 85, 128, 75, 75, 79, 128, 75, 
-    75, 73, 128, 75, 75, 69, 69, 128, 75, 75, 69, 128, 75, 75, 65, 128, 75, 
-    75, 128, 75, 74, 69, 128, 75, 73, 89, 69, 79, 75, 45, 84, 73, 75, 69, 85, 
-    84, 128, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 
-    79, 75, 128, 75, 73, 89, 69, 79, 75, 45, 82, 73, 69, 85, 76, 128, 75, 73, 
-    89, 69, 79, 75, 45, 80, 73, 69, 85, 80, 128, 75, 73, 89, 69, 79, 75, 45, 
-    78, 73, 69, 85, 78, 128, 75, 73, 89, 69, 79, 75, 45, 75, 72, 73, 69, 85, 
-    75, 72, 128, 75, 73, 89, 69, 79, 75, 45, 67, 72, 73, 69, 85, 67, 72, 128, 
-    75, 73, 89, 69, 79, 203, 75, 73, 88, 128, 75, 73, 84, 128, 75, 73, 83, 
-    83, 73, 78, 199, 75, 73, 83, 83, 128, 75, 73, 83, 211, 75, 73, 83, 73, 
-    77, 53, 128, 75, 73, 83, 73, 77, 181, 75, 73, 83, 72, 128, 75, 73, 83, 
-    65, 76, 128, 75, 73, 82, 79, 87, 65, 84, 84, 79, 128, 75, 73, 82, 79, 77, 
-    69, 69, 84, 79, 82, 85, 128, 75, 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 
-    75, 73, 82, 79, 128, 75, 73, 82, 71, 72, 73, 218, 75, 73, 81, 128, 75, 
-    73, 80, 128, 75, 73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 78, 
-    68, 69, 82, 71, 65, 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75, 
-    73, 73, 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 128, 
-    75, 73, 69, 69, 77, 128, 75, 73, 69, 128, 75, 73, 68, 128, 75, 73, 196, 
-    75, 73, 67, 75, 128, 75, 72, 90, 128, 75, 72, 87, 65, 73, 128, 75, 72, 
-    85, 69, 78, 45, 76, 85, 197, 75, 72, 85, 69, 206, 75, 72, 85, 68, 65, 77, 
-    128, 75, 72, 85, 65, 84, 128, 75, 72, 79, 85, 128, 75, 72, 79, 212, 75, 
-    72, 79, 78, 128, 75, 72, 79, 77, 85, 84, 128, 75, 72, 79, 128, 75, 72, 
-    207, 75, 72, 77, 213, 75, 72, 73, 84, 128, 75, 72, 73, 78, 89, 65, 128, 
-    75, 72, 73, 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 79, 128, 75, 
-    72, 72, 65, 128, 75, 72, 69, 84, 72, 128, 75, 72, 69, 73, 128, 75, 72, 
-    69, 69, 128, 75, 72, 69, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 
-    75, 72, 65, 82, 128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, 75, 
-    72, 65, 78, 68, 193, 75, 72, 65, 78, 128, 75, 72, 65, 77, 84, 201, 75, 
-    72, 65, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, 72, 
-    128, 75, 72, 65, 200, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, 67, 
-    65, 80, 128, 75, 69, 89, 67, 65, 208, 75, 69, 89, 66, 79, 65, 82, 68, 
-    128, 75, 69, 88, 128, 75, 69, 85, 89, 69, 85, 88, 128, 75, 69, 85, 83, 
-    72, 69, 85, 65, 69, 80, 128, 75, 69, 85, 83, 69, 85, 88, 128, 75, 69, 85, 
-    80, 85, 81, 128, 75, 69, 85, 79, 212, 75, 69, 85, 77, 128, 75, 69, 85, 
-    75, 69, 85, 84, 78, 68, 65, 128, 75, 69, 85, 75, 65, 81, 128, 75, 69, 85, 
-    65, 69, 84, 77, 69, 85, 78, 128, 75, 69, 85, 65, 69, 82, 73, 128, 75, 69, 
-    84, 84, 201, 75, 69, 83, 72, 50, 128, 75, 69, 82, 69, 84, 128, 75, 69, 
-    79, 87, 128, 75, 69, 78, 84, 73, 77, 65, 84, 65, 128, 75, 69, 78, 84, 73, 
-    77, 65, 84, 193, 75, 69, 78, 84, 73, 77, 193, 75, 69, 78, 65, 84, 128, 
-    75, 69, 78, 128, 75, 69, 206, 75, 69, 77, 80, 85, 76, 128, 75, 69, 77, 
-    80, 85, 204, 75, 69, 77, 80, 76, 73, 128, 75, 69, 77, 80, 76, 201, 75, 
-    69, 77, 80, 72, 82, 69, 78, 71, 128, 75, 69, 77, 66, 65, 78, 71, 128, 75, 
-    69, 76, 86, 73, 206, 75, 69, 72, 69, 72, 128, 75, 69, 72, 69, 200, 75, 
-    69, 72, 128, 75, 69, 70, 85, 76, 65, 128, 75, 69, 69, 83, 85, 128, 75, 
-    69, 69, 80, 73, 78, 199, 75, 69, 69, 78, 71, 128, 75, 67, 65, 76, 128, 
-    75, 66, 128, 75, 65, 90, 65, 75, 200, 75, 65, 89, 65, 78, 78, 65, 128, 
-    75, 65, 89, 65, 200, 75, 65, 88, 128, 75, 65, 87, 73, 128, 75, 65, 86, 
-    89, 75, 65, 128, 75, 65, 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 85, 
-    128, 75, 65, 84, 79, 128, 75, 65, 84, 72, 73, 83, 84, 73, 128, 75, 65, 
-    84, 72, 65, 75, 193, 75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, 65, 84, 
-    65, 86, 193, 75, 65, 84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65, 71, 65, 
-    78, 193, 75, 65, 83, 82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65, 84, 65, 
-    206, 75, 65, 83, 82, 65, 128, 75, 65, 83, 82, 193, 75, 65, 83, 75, 65, 
-    76, 128, 75, 65, 83, 75, 65, 204, 75, 65, 83, 72, 77, 73, 82, 201, 75, 
-    65, 82, 83, 72, 65, 78, 65, 128, 75, 65, 82, 79, 82, 73, 73, 128, 75, 65, 
-    82, 207, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, 128, 75, 65, 
-    82, 65, 78, 128, 75, 65, 80, 89, 69, 79, 85, 78, 83, 83, 65, 78, 71, 80, 
-    73, 69, 85, 80, 128, 75, 65, 80, 89, 69, 79, 85, 78, 82, 73, 69, 85, 76, 
-    128, 75, 65, 80, 89, 69, 79, 85, 78, 80, 72, 73, 69, 85, 80, 72, 128, 75, 
-    65, 80, 89, 69, 79, 85, 78, 77, 73, 69, 85, 77, 128, 75, 65, 80, 80, 65, 
-    128, 75, 65, 80, 80, 193, 75, 65, 80, 79, 128, 75, 65, 80, 72, 128, 75, 
-    65, 80, 65, 76, 128, 75, 65, 80, 65, 128, 75, 65, 78, 84, 65, 74, 193, 
-    75, 65, 78, 71, 128, 75, 65, 78, 199, 75, 65, 78, 65, 75, 79, 128, 75, 
-    65, 77, 52, 128, 75, 65, 77, 50, 128, 75, 65, 77, 128, 75, 65, 75, 79, 
-    128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, 203, 75, 
-    65, 73, 84, 72, 201, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65, 
-    201, 75, 65, 70, 65, 128, 75, 65, 70, 128, 75, 65, 198, 75, 65, 68, 53, 
-    128, 75, 65, 68, 181, 75, 65, 68, 52, 128, 75, 65, 68, 51, 128, 75, 65, 
-    68, 179, 75, 65, 68, 50, 128, 75, 65, 68, 128, 75, 65, 66, 193, 75, 65, 
-    66, 128, 75, 65, 65, 73, 128, 75, 65, 65, 70, 85, 128, 75, 65, 65, 70, 
-    128, 75, 65, 50, 128, 75, 65, 178, 75, 48, 48, 56, 128, 75, 48, 48, 55, 
-    128, 75, 48, 48, 54, 128, 75, 48, 48, 53, 128, 75, 48, 48, 52, 128, 75, 
-    48, 48, 51, 128, 75, 48, 48, 50, 128, 75, 48, 48, 49, 128, 74, 87, 65, 
-    128, 74, 85, 85, 128, 74, 85, 84, 128, 74, 85, 83, 84, 73, 70, 73, 67, 
-    65, 84, 73, 79, 78, 128, 74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 
-    128, 74, 85, 79, 80, 128, 74, 85, 78, 79, 128, 74, 85, 78, 69, 128, 74, 
-    85, 76, 89, 128, 74, 85, 69, 85, 73, 128, 74, 85, 68, 85, 76, 128, 74, 
-    85, 68, 71, 69, 128, 74, 85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200, 
-    74, 79, 89, 79, 85, 211, 74, 79, 89, 128, 74, 79, 86, 69, 128, 74, 79, 
-    212, 74, 79, 78, 71, 128, 74, 79, 78, 193, 74, 79, 75, 69, 82, 128, 74, 
-    79, 73, 78, 69, 68, 128, 74, 79, 73, 78, 128, 74, 79, 65, 128, 74, 74, 
-    89, 88, 128, 74, 74, 89, 84, 128, 74, 74, 89, 80, 128, 74, 74, 89, 128, 
-    74, 74, 85, 88, 128, 74, 74, 85, 84, 128, 74, 74, 85, 82, 88, 128, 74, 
-    74, 85, 82, 128, 74, 74, 85, 80, 128, 74, 74, 85, 79, 88, 128, 74, 74, 
-    85, 79, 80, 128, 74, 74, 85, 79, 128, 74, 74, 85, 128, 74, 74, 79, 88, 
-    128, 74, 74, 79, 84, 128, 74, 74, 79, 80, 128, 74, 74, 79, 128, 74, 74, 
-    73, 88, 128, 74, 74, 73, 84, 128, 74, 74, 73, 80, 128, 74, 74, 73, 69, 
-    88, 128, 74, 74, 73, 69, 84, 128, 74, 74, 73, 69, 80, 128, 74, 74, 73, 
-    69, 128, 74, 74, 73, 128, 74, 74, 69, 69, 128, 74, 74, 69, 128, 74, 74, 
-    65, 128, 74, 73, 76, 128, 74, 73, 73, 128, 74, 73, 72, 86, 65, 77, 85, 
-    76, 73, 89, 65, 128, 74, 73, 65, 128, 74, 72, 79, 128, 74, 72, 69, 72, 
-    128, 74, 72, 65, 78, 128, 74, 72, 65, 77, 128, 74, 72, 65, 65, 128, 74, 
-    72, 65, 128, 74, 69, 85, 128, 74, 69, 82, 85, 83, 65, 76, 69, 77, 128, 
-    74, 69, 82, 65, 206, 74, 69, 82, 65, 128, 74, 69, 82, 128, 74, 69, 72, 
-    128, 74, 69, 200, 74, 69, 71, 79, 71, 65, 78, 128, 74, 69, 69, 77, 128, 
-    74, 69, 65, 78, 83, 128, 74, 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 
-    89, 65, 78, 73, 128, 74, 65, 85, 128, 74, 65, 82, 128, 74, 65, 80, 65, 
-    78, 69, 83, 197, 74, 65, 80, 65, 78, 128, 74, 65, 78, 85, 65, 82, 89, 
-    128, 74, 65, 76, 76, 65, 74, 65, 76, 65, 76, 79, 85, 72, 79, 85, 128, 74, 
-    65, 73, 128, 74, 65, 72, 128, 74, 65, 68, 69, 128, 74, 65, 67, 75, 45, 
-    79, 45, 76, 65, 78, 84, 69, 82, 78, 128, 74, 65, 67, 203, 74, 45, 83, 73, 
-    77, 80, 76, 73, 70, 73, 69, 196, 202, 73, 90, 72, 73, 84, 83, 65, 128, 
-    73, 90, 72, 73, 84, 83, 193, 73, 90, 72, 69, 128, 73, 90, 65, 75, 65, 89, 
-    193, 73, 89, 69, 75, 128, 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 
-    128, 73, 85, 128, 73, 84, 211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73, 
-    84, 69, 77, 128, 73, 83, 83, 72, 65, 82, 128, 73, 83, 79, 78, 128, 73, 
-    83, 79, 206, 73, 83, 69, 78, 45, 73, 83, 69, 78, 128, 73, 83, 65, 75, 73, 
-    193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, 82, 85, 89, 65, 78, 78, 65, 
-    128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 73, 82, 79, 78, 45, 67, 79, 
-    80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 79, 84, 73, 70, 73, 69, 196, 
-    73, 79, 84, 65, 84, 69, 196, 73, 79, 84, 65, 128, 73, 79, 84, 193, 73, 
-    79, 82, 128, 73, 79, 68, 72, 65, 68, 72, 128, 73, 78, 86, 73, 83, 73, 66, 
-    76, 197, 73, 78, 86, 69, 82, 84, 69, 68, 128, 73, 78, 86, 69, 82, 84, 69, 
-    196, 73, 78, 86, 69, 82, 83, 197, 73, 78, 84, 82, 79, 68, 85, 67, 69, 82, 
-    128, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, 83, 89, 76, 76, 65, 66, 73, 
-    195, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 78, 128, 73, 78, 84, 69, 
-    82, 83, 69, 67, 84, 73, 79, 206, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 
-    78, 199, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 71, 128, 73, 78, 84, 69, 
-    82, 80, 79, 76, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, 79, 67, 75, 
-    69, 196, 73, 78, 84, 69, 82, 76, 73, 78, 69, 65, 210, 73, 78, 84, 69, 82, 
-    76, 65, 67, 69, 196, 73, 78, 84, 69, 82, 73, 79, 210, 73, 78, 84, 69, 82, 
-    69, 83, 212, 73, 78, 84, 69, 82, 67, 65, 76, 65, 84, 69, 128, 73, 78, 84, 
-    69, 71, 82, 65, 84, 73, 79, 78, 128, 73, 78, 84, 69, 71, 82, 65, 84, 73, 
-    79, 206, 73, 78, 84, 69, 71, 82, 65, 76, 128, 73, 78, 84, 69, 71, 82, 65, 
-    204, 73, 78, 83, 85, 76, 65, 210, 73, 78, 83, 84, 82, 85, 77, 69, 78, 84, 
-    65, 204, 73, 78, 83, 73, 68, 69, 128, 73, 78, 83, 69, 82, 84, 73, 79, 
-    206, 73, 78, 83, 69, 67, 84, 128, 73, 78, 83, 67, 82, 73, 80, 84, 73, 79, 
-    78, 65, 204, 73, 78, 80, 85, 212, 73, 78, 78, 79, 67, 69, 78, 67, 69, 
-    128, 73, 78, 78, 78, 128, 73, 78, 78, 69, 82, 128, 73, 78, 78, 69, 210, 
-    73, 78, 78, 128, 73, 78, 73, 78, 71, 85, 128, 73, 78, 73, 128, 73, 78, 
-    72, 73, 66, 73, 212, 73, 78, 72, 69, 82, 69, 78, 212, 73, 78, 71, 87, 65, 
-    90, 128, 73, 78, 70, 79, 82, 77, 65, 84, 73, 79, 206, 73, 78, 70, 76, 85, 
-    69, 78, 67, 69, 128, 73, 78, 70, 73, 78, 73, 84, 89, 128, 73, 78, 70, 73, 
-    78, 73, 84, 217, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204, 73, 78, 68, 73, 
-    82, 69, 67, 212, 73, 78, 68, 73, 67, 65, 84, 79, 82, 128, 73, 78, 68, 73, 
-    67, 65, 84, 79, 210, 73, 78, 68, 73, 195, 73, 78, 68, 73, 65, 206, 73, 
-    78, 68, 69, 88, 128, 73, 78, 68, 69, 80, 69, 78, 68, 69, 78, 212, 73, 78, 
-    67, 82, 69, 77, 69, 78, 84, 128, 73, 78, 67, 82, 69, 65, 83, 69, 211, 73, 
-    78, 67, 82, 69, 65, 83, 69, 128, 73, 78, 67, 79, 77, 80, 76, 69, 84, 197, 
-    73, 78, 67, 79, 77, 73, 78, 199, 73, 78, 67, 76, 85, 68, 73, 78, 199, 73, 
-    78, 67, 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, 80, 128, 73, 78, 45, 
-    65, 76, 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, 204, 73, 77, 80, 69, 82, 
-    70, 69, 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, 69, 67, 84, 65, 128, 73, 
-    77, 80, 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, 128, 73, 77, 73, 83, 69, 
-    79, 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, 78, 128, 73, 77, 73, 206, 
-    73, 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, 73, 77, 73, 70, 84, 72, 79, 
-    82, 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, 128, 73, 77, 73, 68, 73, 65, 
-    82, 71, 79, 78, 128, 73, 77, 65, 71, 197, 73, 76, 85, 89, 65, 78, 78, 65, 
-    128, 73, 76, 85, 89, 128, 73, 76, 85, 85, 89, 65, 78, 78, 65, 128, 73, 
-    76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 76, 73, 77, 77, 85, 
-    51, 128, 73, 76, 73, 77, 77, 85, 128, 73, 76, 73, 77, 77, 213, 73, 76, 
-    50, 128, 73, 75, 65, 82, 65, 128, 73, 75, 65, 82, 193, 73, 74, 128, 73, 
-    73, 89, 65, 78, 78, 65, 128, 73, 71, 73, 128, 73, 71, 201, 73, 71, 71, 
-    87, 83, 128, 73, 70, 73, 78, 128, 73, 69, 85, 78, 71, 45, 84, 73, 75, 69, 
-    85, 84, 128, 73, 69, 85, 78, 71, 45, 84, 72, 73, 69, 85, 84, 72, 128, 73, 
-    69, 85, 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 73, 
-    69, 85, 78, 71, 45, 82, 73, 69, 85, 76, 128, 73, 69, 85, 78, 71, 45, 80, 
-    73, 69, 85, 80, 128, 73, 69, 85, 78, 71, 45, 80, 72, 73, 69, 85, 80, 72, 
-    128, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 73, 69, 85, 78, 
-    71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 73, 69, 85, 78, 71, 45, 67, 73, 
-    69, 85, 67, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69, 85, 67, 72, 128, 
-    73, 69, 85, 78, 199, 73, 68, 76, 69, 128, 73, 68, 73, 77, 128, 73, 68, 
-    73, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 49, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 49, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 49, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 49, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 49, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 49, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 49, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 49, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 49, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 66, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 53, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 70, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    57, 48, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 68, 55, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 67, 65, 57, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 57, 69, 51, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 55, 68, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 55, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    55, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 54, 68, 
-    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 51, 51, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 49, 70, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 55, 49, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 55, 48, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    54, 70, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 69, 56, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 50, 67, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 57, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 54, 55, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 54, 54, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    54, 53, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 57, 
-    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 53, 55, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 53, 53, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 54, 51, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 54, 50, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    54, 50, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 52, 
-    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 70, 56, 67, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 68, 69, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 53, 66, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 53, 66, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    53, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57, 49, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 56, 70, 48, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 53, 66, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 53, 52, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 53, 52, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    53, 51, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51, 67, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 68, 68, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 55, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 53, 50, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 53, 50, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    53, 49, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 65, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 56, 67, 128, 73, 
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 50, 68, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 52, 69, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
-    80, 72, 45, 52, 69, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 
-    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 65, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 57, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 55, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 49, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 48, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 70, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 
-    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 56, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 55, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 53, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 70, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 69, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 68, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 
-    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 54, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 53, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 51, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 68, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 67, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 66, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 
-    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 52, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 51, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 49, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 66, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 65, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 57, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 
-    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 50, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 49, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 70, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 57, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 56, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 55, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 
-    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 48, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 70, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 68, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 55, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 54, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 53, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 
-    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 69, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 68, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 66, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 53, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 52, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 51, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 
-    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 67, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 66, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 57, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 51, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 50, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 49, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 
-    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 65, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 57, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 55, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 49, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 48, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 70, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 
-    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 56, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 55, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 53, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 70, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 69, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 68, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 
-    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 54, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 53, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 51, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 68, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 67, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 66, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 
-    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 52, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 51, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 49, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 66, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 65, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 57, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 
-    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 50, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 49, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 70, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 57, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 56, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 55, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 
-    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 48, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 70, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 68, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 55, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 54, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 53, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 
-    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 69, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 68, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 66, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 53, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 52, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 51, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 
-    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 67, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 66, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 57, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 51, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 50, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 49, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 
-    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 65, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 57, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 55, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 49, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 48, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 70, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 69, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 
-    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 56, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 55, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 53, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 70, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 69, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 68, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 67, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 
-    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 54, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 53, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 51, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 68, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 67, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 66, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 65, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 
-    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 52, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 51, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 49, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 66, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 65, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 57, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 56, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 
-    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 50, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 49, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 70, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 57, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 56, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 55, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 54, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 
-    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 48, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 70, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 68, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 55, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 54, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 53, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 52, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 
-    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 69, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 68, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 67, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 66, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 53, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 52, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 51, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 50, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 
-    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 67, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 66, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 65, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 57, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 51, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 50, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 49, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 48, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 
-    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 65, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 57, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 56, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 55, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 49, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 48, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 70, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 69, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 
-    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 56, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 55, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 54, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 53, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 70, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 69, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 68, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 67, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 
-    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 54, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 53, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 52, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 51, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 68, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 67, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 66, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 65, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 
-    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 52, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 51, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 50, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 49, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 66, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 65, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 57, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 56, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 
-    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 50, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 49, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 48, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 70, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 57, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 56, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 55, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 54, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 
-    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 48, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 70, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 69, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 68, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 55, 128, 
-    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 54, 128, 73, 68, 
-    69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 53, 128, 73, 68, 69, 79, 
-    71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 52, 128, 73, 68, 69, 79, 71, 82, 
-    65, 80, 72, 45, 50, 70, 56, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 
-    72, 45, 50, 70, 56, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
-    50, 70, 56, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 
-    56, 48, 48, 128, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65, 84, 73, 79, 78, 
-    128, 73, 68, 69, 78, 84, 73, 67, 65, 204, 73, 67, 72, 79, 85, 128, 73, 
-    67, 72, 79, 83, 128, 73, 67, 72, 73, 77, 65, 84, 79, 83, 128, 73, 67, 72, 
-    65, 68, 73, 78, 128, 73, 67, 69, 76, 65, 78, 68, 73, 67, 45, 89, 82, 128, 
-    73, 66, 73, 70, 73, 76, 73, 128, 73, 65, 85, 68, 65, 128, 73, 48, 49, 53, 
-    128, 73, 48, 49, 52, 128, 73, 48, 49, 51, 128, 73, 48, 49, 50, 128, 73, 
-    48, 49, 49, 65, 128, 73, 48, 49, 49, 128, 73, 48, 49, 48, 65, 128, 73, 
-    48, 49, 48, 128, 73, 48, 48, 57, 65, 128, 73, 48, 48, 57, 128, 73, 48, 
-    48, 56, 128, 73, 48, 48, 55, 128, 73, 48, 48, 54, 128, 73, 48, 48, 53, 
-    65, 128, 73, 48, 48, 53, 128, 73, 48, 48, 52, 128, 73, 48, 48, 51, 128, 
-    73, 48, 48, 50, 128, 73, 48, 48, 49, 128, 73, 45, 89, 85, 128, 73, 45, 
-    89, 79, 128, 73, 45, 89, 69, 79, 128, 73, 45, 89, 69, 128, 73, 45, 89, 
-    65, 69, 128, 73, 45, 89, 65, 45, 79, 128, 73, 45, 89, 65, 128, 73, 45, 
-    79, 45, 73, 128, 73, 45, 79, 128, 73, 45, 69, 85, 128, 73, 45, 66, 69, 
-    65, 77, 128, 73, 45, 65, 82, 65, 69, 65, 128, 73, 45, 65, 128, 72, 90, 
-    90, 90, 71, 128, 72, 90, 90, 90, 128, 72, 90, 90, 80, 128, 72, 90, 90, 
-    128, 72, 90, 87, 71, 128, 72, 90, 87, 128, 72, 90, 84, 128, 72, 90, 71, 
-    128, 72, 89, 83, 84, 69, 82, 69, 83, 73, 211, 72, 89, 80, 79, 68, 73, 65, 
-    83, 84, 79, 76, 69, 128, 72, 89, 80, 72, 69, 78, 65, 84, 73, 79, 206, 72, 
-    89, 80, 72, 69, 78, 45, 77, 73, 78, 85, 83, 128, 72, 89, 80, 72, 69, 78, 
-    128, 72, 89, 80, 72, 69, 206, 72, 88, 87, 71, 128, 72, 88, 85, 79, 88, 
-    128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79, 80, 128, 72, 88, 85, 79, 
-    128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128, 72, 88, 79, 80, 128, 72, 
-    88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73, 84, 128, 72, 88, 73, 80, 
-    128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69, 84, 128, 72, 88, 73, 69, 
-    80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128, 72, 88, 69, 88, 128, 72, 
-    88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65, 88, 128, 72, 88, 65, 84, 
-    128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72, 87, 85, 128, 72, 87, 65, 
-    73, 82, 128, 72, 86, 128, 72, 85, 83, 72, 69, 196, 72, 85, 82, 65, 78, 
-    128, 72, 85, 79, 84, 128, 72, 85, 78, 68, 82, 69, 68, 128, 72, 85, 78, 
-    68, 82, 69, 196, 72, 85, 78, 128, 72, 85, 77, 65, 78, 128, 72, 85, 77, 
-    65, 206, 72, 85, 76, 50, 128, 72, 85, 73, 73, 84, 79, 128, 72, 85, 66, 
-    50, 128, 72, 85, 66, 178, 72, 85, 66, 128, 72, 85, 65, 82, 65, 68, 68, 
-    79, 128, 72, 84, 83, 128, 72, 84, 74, 128, 72, 82, 89, 86, 78, 73, 193, 
-    72, 80, 87, 71, 128, 72, 80, 65, 128, 72, 80, 128, 72, 79, 85, 83, 197, 
-    72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, 85, 82, 71, 76, 65, 83, 
-    211, 72, 79, 85, 82, 128, 72, 79, 85, 210, 72, 79, 84, 69, 76, 128, 72, 
-    79, 84, 65, 128, 72, 79, 83, 80, 73, 84, 65, 76, 128, 72, 79, 82, 83, 69, 
-    128, 72, 79, 82, 83, 197, 72, 79, 82, 78, 83, 128, 72, 79, 82, 73, 90, 
-    79, 78, 84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 
-    48, 54, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 
-    54, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 
-    45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 
-    48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 
-    50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 49, 
-    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 48, 128, 
-    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 54, 128, 72, 
-    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 53, 128, 72, 79, 
-    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 52, 128, 72, 79, 82, 
-    73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, 128, 72, 79, 82, 73, 
-    90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, 72, 79, 82, 73, 90, 
-    79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 
-    78, 84, 65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 
-    84, 65, 76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 
-    65, 76, 45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 
-    76, 45, 48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 
-    45, 48, 52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 
-    48, 52, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 
-    52, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 
-    45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 
-    48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 
-    53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 52, 
-    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 51, 128, 
-    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 50, 128, 72, 
-    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 49, 128, 72, 79, 
-    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 48, 128, 72, 79, 82, 
-    73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, 128, 72, 79, 82, 73, 
-    90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, 72, 79, 82, 73, 90, 
-    79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 
-    78, 84, 65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 
-    84, 65, 76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 
-    65, 76, 45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 
-    76, 45, 48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 
-    45, 48, 49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 
-    48, 49, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 
-    49, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 
-    45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 
-    48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 
-    49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 48, 
-    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 54, 128, 
-    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 53, 128, 72, 
-    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 52, 128, 72, 79, 
-    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 51, 128, 72, 79, 82, 
-    73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, 128, 72, 79, 82, 73, 
-    90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, 72, 79, 82, 73, 90, 
-    79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 
-    78, 84, 65, 76, 128, 72, 79, 82, 73, 128, 72, 79, 82, 193, 72, 79, 79, 
-    82, 85, 128, 72, 79, 79, 80, 128, 72, 79, 79, 78, 128, 72, 79, 79, 75, 
-    69, 196, 72, 79, 78, 69, 89, 66, 69, 69, 128, 72, 79, 78, 69, 217, 72, 
-    79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84, 72, 69, 84, 
-    73, 195, 72, 79, 76, 69, 128, 72, 79, 76, 68, 73, 78, 199, 72, 79, 76, 
-    65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 75, 65, 128, 72, 79, 73, 128, 
-    72, 79, 67, 72, 79, 128, 72, 78, 85, 84, 128, 72, 78, 85, 79, 88, 128, 
-    72, 78, 85, 79, 128, 72, 78, 79, 88, 128, 72, 78, 79, 84, 128, 72, 78, 
-    79, 80, 128, 72, 78, 73, 88, 128, 72, 78, 73, 84, 128, 72, 78, 73, 80, 
-    128, 72, 78, 73, 69, 88, 128, 72, 78, 73, 69, 84, 128, 72, 78, 73, 69, 
-    80, 128, 72, 78, 73, 69, 128, 72, 78, 73, 128, 72, 78, 69, 88, 128, 72, 
-    78, 69, 80, 128, 72, 78, 69, 128, 72, 78, 65, 88, 128, 72, 78, 65, 84, 
-    128, 72, 78, 65, 80, 128, 72, 78, 65, 128, 72, 77, 89, 88, 128, 72, 77, 
-    89, 82, 88, 128, 72, 77, 89, 82, 128, 72, 77, 89, 80, 128, 72, 77, 89, 
-    128, 72, 77, 85, 88, 128, 72, 77, 85, 84, 128, 72, 77, 85, 82, 88, 128, 
-    72, 77, 85, 82, 128, 72, 77, 85, 80, 128, 72, 77, 85, 79, 88, 128, 72, 
-    77, 85, 79, 80, 128, 72, 77, 85, 79, 128, 72, 77, 85, 128, 72, 77, 79, 
-    88, 128, 72, 77, 79, 84, 128, 72, 77, 79, 80, 128, 72, 77, 79, 128, 72, 
-    77, 73, 88, 128, 72, 77, 73, 84, 128, 72, 77, 73, 80, 128, 72, 77, 73, 
-    69, 88, 128, 72, 77, 73, 69, 80, 128, 72, 77, 73, 69, 128, 72, 77, 73, 
-    128, 72, 77, 69, 128, 72, 77, 65, 88, 128, 72, 77, 65, 84, 128, 72, 77, 
-    65, 80, 128, 72, 77, 65, 128, 72, 76, 89, 88, 128, 72, 76, 89, 84, 128, 
-    72, 76, 89, 82, 88, 128, 72, 76, 89, 82, 128, 72, 76, 89, 80, 128, 72, 
-    76, 89, 128, 72, 76, 85, 88, 128, 72, 76, 85, 84, 128, 72, 76, 85, 82, 
-    88, 128, 72, 76, 85, 82, 128, 72, 76, 85, 80, 128, 72, 76, 85, 79, 88, 
-    128, 72, 76, 85, 79, 80, 128, 72, 76, 85, 79, 128, 72, 76, 85, 128, 72, 
-    76, 79, 88, 128, 72, 76, 79, 80, 128, 72, 76, 79, 128, 72, 76, 73, 88, 
-    128, 72, 76, 73, 84, 128, 72, 76, 73, 80, 128, 72, 76, 73, 69, 88, 128, 
-    72, 76, 73, 69, 80, 128, 72, 76, 73, 69, 128, 72, 76, 73, 128, 72, 76, 
-    69, 88, 128, 72, 76, 69, 80, 128, 72, 76, 69, 128, 72, 76, 65, 88, 128, 
-    72, 76, 65, 84, 128, 72, 76, 65, 80, 128, 72, 76, 65, 128, 72, 75, 128, 
-    72, 73, 90, 66, 128, 72, 73, 83, 84, 79, 82, 73, 195, 72, 73, 82, 73, 81, 
-    128, 72, 73, 71, 72, 45, 83, 80, 69, 69, 196, 72, 73, 71, 72, 45, 82, 69, 
-    86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 71, 72, 45, 72, 69, 69, 76, 69, 
-    196, 72, 73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, 73, 79, 83, 128, 
-    72, 73, 69, 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, 69, 85, 72, 45, 
-    80, 73, 69, 85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, 69, 85, 78, 128, 
-    72, 73, 69, 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, 85, 200, 72, 
-    73, 69, 82, 79, 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, 128, 72, 73, 68, 
-    73, 78, 199, 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, 128, 72, 73, 66, 
-    73, 83, 67, 85, 83, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 
-    73, 128, 72, 72, 69, 69, 128, 72, 72, 69, 128, 72, 72, 65, 65, 128, 72, 
-    71, 128, 72, 69, 88, 73, 70, 79, 82, 205, 72, 69, 88, 65, 71, 82, 65, 
-    205, 72, 69, 88, 65, 71, 79, 78, 128, 72, 69, 82, 85, 84, 85, 128, 72, 
-    69, 82, 85, 128, 72, 69, 82, 77, 73, 84, 73, 65, 206, 72, 69, 82, 77, 73, 
-    79, 78, 73, 65, 206, 72, 69, 82, 77, 69, 83, 128, 72, 69, 82, 69, 128, 
-    72, 69, 82, 66, 128, 72, 69, 82, 65, 69, 85, 205, 72, 69, 78, 71, 128, 
-    72, 69, 78, 199, 72, 69, 77, 80, 128, 72, 69, 76, 77, 69, 84, 128, 72, 
-    69, 76, 77, 69, 212, 72, 69, 76, 205, 72, 69, 76, 73, 67, 79, 80, 84, 69, 
-    82, 128, 72, 69, 75, 85, 84, 65, 65, 82, 85, 128, 72, 69, 73, 83, 69, 73, 
-    128, 72, 69, 65, 86, 89, 128, 72, 69, 65, 86, 69, 78, 76, 217, 72, 69, 
-    65, 86, 69, 78, 128, 72, 69, 65, 86, 69, 206, 72, 69, 65, 82, 84, 83, 
-    128, 72, 69, 65, 82, 84, 45, 83, 72, 65, 80, 69, 196, 72, 69, 65, 82, 84, 
-    128, 72, 69, 65, 82, 212, 72, 69, 65, 82, 45, 78, 79, 45, 69, 86, 73, 
-    204, 72, 69, 65, 68, 83, 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 83, 84, 
-    79, 78, 197, 72, 69, 65, 68, 80, 72, 79, 78, 69, 128, 72, 69, 65, 68, 73, 
-    78, 71, 128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, 72, 66, 65, 83, 
-    193, 72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 86, 69, 128, 72, 65, 85, 
-    80, 84, 83, 84, 73, 77, 77, 69, 128, 72, 65, 84, 72, 73, 128, 72, 65, 84, 
-    69, 128, 72, 65, 84, 67, 72, 73, 78, 199, 72, 65, 84, 65, 198, 72, 65, 
-    83, 69, 210, 72, 65, 83, 65, 78, 84, 65, 128, 72, 65, 82, 80, 79, 79, 78, 
-    128, 72, 65, 82, 80, 79, 79, 206, 72, 65, 82, 77, 79, 78, 73, 67, 128, 
-    72, 65, 82, 75, 76, 69, 65, 206, 72, 65, 82, 68, 78, 69, 83, 83, 128, 72, 
-    65, 82, 196, 72, 65, 80, 80, 217, 72, 65, 78, 85, 78, 79, 207, 72, 65, 
-    78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 211, 
-    72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, 65, 78, 
-    68, 66, 65, 71, 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 
-    128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 83, 84, 69, 210, 72, 65, 77, 
-    77, 69, 82, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77, 66, 85, 82, 71, 69, 
-    82, 128, 72, 65, 76, 81, 65, 128, 72, 65, 76, 79, 128, 72, 65, 76, 70, 
-    45, 67, 73, 82, 67, 76, 197, 72, 65, 76, 70, 128, 72, 65, 76, 66, 69, 82, 
-    68, 128, 72, 65, 76, 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, 128, 72, 
-    65, 73, 82, 67, 85, 84, 128, 72, 65, 73, 82, 128, 72, 65, 71, 76, 65, 
-    218, 72, 65, 71, 76, 128, 72, 65, 70, 85, 75, 72, 65, 128, 72, 65, 70, 
-    85, 75, 72, 128, 72, 65, 69, 71, 204, 72, 65, 65, 82, 85, 128, 72, 65, 
-    65, 77, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, 48, 48, 56, 128, 
-    72, 48, 48, 55, 128, 72, 48, 48, 54, 65, 128, 72, 48, 48, 54, 128, 72, 
-    48, 48, 53, 128, 72, 48, 48, 52, 128, 72, 48, 48, 51, 128, 72, 48, 48, 
-    50, 128, 72, 48, 48, 49, 128, 72, 45, 84, 89, 80, 197, 71, 89, 85, 128, 
-    71, 89, 79, 78, 128, 71, 89, 79, 128, 71, 89, 73, 128, 71, 89, 70, 213, 
-    71, 89, 69, 69, 128, 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, 71, 89, 
-    65, 128, 71, 89, 128, 71, 87, 85, 128, 71, 87, 73, 128, 71, 87, 69, 69, 
-    128, 71, 87, 69, 128, 71, 87, 65, 65, 128, 71, 87, 65, 128, 71, 86, 128, 
-    71, 85, 82, 85, 83, 72, 128, 71, 85, 82, 85, 78, 128, 71, 85, 82, 65, 77, 
-    85, 84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78, 85, 128, 71, 85, 
-    78, 213, 71, 85, 205, 71, 85, 76, 128, 71, 85, 73, 84, 65, 82, 128, 71, 
-    85, 199, 71, 85, 69, 72, 128, 71, 85, 69, 200, 71, 85, 68, 128, 71, 85, 
-    196, 71, 85, 65, 82, 68, 83, 77, 65, 78, 128, 71, 85, 65, 82, 68, 69, 68, 
-    78, 69, 83, 83, 128, 71, 85, 65, 82, 68, 69, 196, 71, 85, 65, 82, 68, 
-    128, 71, 85, 65, 82, 65, 78, 201, 71, 85, 193, 71, 85, 178, 71, 84, 69, 
-    210, 71, 83, 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, 82, 79, 87, 
-    73, 78, 199, 71, 82, 79, 85, 78, 68, 128, 71, 82, 79, 78, 84, 72, 73, 83, 
-    77, 65, 84, 65, 128, 71, 82, 73, 78, 78, 73, 78, 199, 71, 82, 73, 77, 65, 
-    67, 73, 78, 199, 71, 82, 69, 71, 79, 82, 73, 65, 206, 71, 82, 69, 69, 
-    206, 71, 82, 69, 65, 84, 78, 69, 83, 83, 128, 71, 82, 69, 65, 84, 69, 82, 
-    45, 84, 72, 65, 78, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 206, 
-    71, 82, 69, 65, 84, 69, 210, 71, 82, 69, 65, 212, 71, 82, 65, 86, 69, 89, 
-    65, 82, 196, 71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 71, 82, 
-    65, 86, 69, 45, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 128, 71, 82, 
-    65, 86, 197, 71, 82, 65, 84, 69, 82, 128, 71, 82, 65, 83, 83, 128, 71, 
-    82, 65, 83, 211, 71, 82, 65, 80, 72, 69, 77, 197, 71, 82, 65, 80, 69, 83, 
-    128, 71, 82, 65, 77, 77, 193, 71, 82, 65, 73, 78, 128, 71, 82, 65, 68, 
-    85, 65, 84, 73, 79, 206, 71, 82, 65, 67, 69, 128, 71, 82, 65, 67, 197, 
-    71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73, 75, 79, 206, 71, 79, 82, 84, 
-    128, 71, 79, 82, 71, 79, 84, 69, 82, 73, 128, 71, 79, 82, 71, 79, 83, 89, 
-    78, 84, 72, 69, 84, 79, 78, 128, 71, 79, 82, 71, 79, 206, 71, 79, 82, 71, 
-    73, 128, 71, 79, 82, 65, 128, 71, 79, 79, 196, 71, 79, 78, 71, 128, 71, 
-    79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, 78, 199, 71, 79, 66, 76, 
-    73, 78, 128, 71, 79, 65, 76, 128, 71, 79, 65, 204, 71, 79, 65, 128, 71, 
-    78, 89, 73, 83, 128, 71, 78, 65, 86, 73, 89, 65, 78, 73, 128, 71, 76, 79, 
-    87, 73, 78, 199, 71, 76, 79, 84, 84, 65, 204, 71, 76, 79, 66, 197, 71, 
-    76, 73, 83, 83, 65, 78, 68, 207, 71, 76, 69, 73, 67, 200, 71, 76, 65, 71, 
-    79, 76, 73, 128, 71, 76, 65, 128, 71, 74, 69, 128, 71, 73, 88, 128, 71, 
-    73, 84, 128, 71, 73, 83, 72, 128, 71, 73, 83, 200, 71, 73, 83, 65, 76, 
-    128, 71, 73, 82, 85, 68, 65, 65, 128, 71, 73, 82, 76, 128, 71, 73, 82, 
-    51, 128, 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, 82, 178, 71, 73, 
-    80, 128, 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, 128, 71, 73, 77, 
-    69, 204, 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, 69, 84, 128, 71, 
-    73, 68, 73, 77, 128, 71, 73, 66, 66, 79, 85, 211, 71, 73, 66, 65, 128, 
-    71, 73, 52, 128, 71, 73, 180, 71, 72, 90, 128, 71, 72, 87, 65, 128, 71, 
-    72, 85, 78, 78, 65, 128, 71, 72, 85, 78, 78, 193, 71, 72, 85, 128, 71, 
-    72, 79, 85, 128, 71, 72, 79, 83, 84, 128, 71, 72, 79, 128, 71, 72, 73, 
-    128, 71, 72, 72, 65, 128, 71, 72, 69, 85, 88, 128, 71, 72, 69, 85, 78, 
-    128, 71, 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128, 71, 72, 69, 85, 71, 
-    72, 69, 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69, 128, 71, 72, 69, 85, 
-    65, 69, 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84, 128, 71, 72, 69, 69, 
-    128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 128, 71, 72, 65, 
-    82, 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65, 78, 128, 71, 72, 65, 
-    77, 65, 76, 128, 71, 72, 65, 73, 78, 85, 128, 71, 72, 65, 73, 78, 128, 
-    71, 72, 65, 73, 206, 71, 72, 65, 68, 128, 71, 72, 65, 65, 77, 65, 69, 
-    128, 71, 72, 65, 65, 128, 71, 71, 87, 73, 128, 71, 71, 87, 69, 69, 128, 
-    71, 71, 87, 69, 128, 71, 71, 87, 65, 65, 128, 71, 71, 87, 65, 128, 71, 
-    71, 85, 88, 128, 71, 71, 85, 84, 128, 71, 71, 85, 82, 88, 128, 71, 71, 
-    85, 82, 128, 71, 71, 85, 79, 88, 128, 71, 71, 85, 79, 84, 128, 71, 71, 
-    85, 79, 80, 128, 71, 71, 85, 79, 128, 71, 71, 79, 88, 128, 71, 71, 79, 
-    84, 128, 71, 71, 79, 80, 128, 71, 71, 73, 88, 128, 71, 71, 73, 84, 128, 
-    71, 71, 73, 69, 88, 128, 71, 71, 73, 69, 80, 128, 71, 71, 73, 69, 128, 
-    71, 71, 69, 88, 128, 71, 71, 69, 84, 128, 71, 71, 69, 80, 128, 71, 71, 
-    65, 88, 128, 71, 71, 65, 84, 128, 71, 71, 65, 65, 128, 71, 69, 84, 193, 
-    71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, 72, 85, 128, 71, 69, 83, 72, 
-    84, 73, 78, 128, 71, 69, 83, 72, 84, 73, 206, 71, 69, 83, 72, 50, 128, 
-    71, 69, 82, 83, 72, 65, 89, 73, 77, 128, 71, 69, 82, 77, 65, 206, 71, 69, 
-    82, 69, 83, 72, 128, 71, 69, 82, 69, 83, 200, 71, 69, 79, 77, 69, 84, 82, 
-    73, 67, 65, 76, 76, 217, 71, 69, 79, 77, 69, 84, 82, 73, 195, 71, 69, 78, 
-    84, 76, 197, 71, 69, 78, 73, 84, 73, 86, 69, 128, 71, 69, 78, 73, 75, 
-    201, 71, 69, 78, 69, 82, 73, 195, 71, 69, 77, 73, 78, 73, 128, 71, 69, 
-    77, 73, 78, 65, 84, 73, 79, 206, 71, 69, 205, 71, 69, 68, 79, 76, 65, 
-    128, 71, 69, 68, 69, 128, 71, 69, 66, 207, 71, 69, 66, 193, 71, 69, 65, 
-    82, 128, 71, 69, 65, 210, 71, 68, 65, 78, 128, 71, 67, 73, 71, 128, 71, 
-    67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 73, 69, 197, 71, 66, 69, 85, 
-    88, 128, 71, 66, 69, 84, 128, 71, 66, 65, 89, 73, 128, 71, 66, 65, 75, 
-    85, 82, 85, 78, 69, 78, 128, 71, 66, 128, 71, 65, 89, 65, 78, 85, 75, 73, 
-    84, 84, 65, 128, 71, 65, 89, 65, 78, 78, 65, 128, 71, 65, 89, 128, 71, 
-    65, 85, 78, 84, 76, 69, 84, 128, 71, 65, 84, 72, 69, 82, 73, 78, 71, 128, 
-    71, 65, 84, 72, 69, 82, 73, 78, 199, 71, 65, 84, 69, 128, 71, 65, 83, 72, 
-    65, 78, 128, 71, 65, 82, 83, 72, 85, 78, 73, 128, 71, 65, 82, 79, 78, 
-    128, 71, 65, 82, 77, 69, 78, 84, 128, 71, 65, 82, 68, 69, 78, 128, 71, 
-    65, 82, 51, 128, 71, 65, 80, 80, 69, 196, 71, 65, 208, 71, 65, 78, 77, 
-    65, 128, 71, 65, 78, 71, 73, 65, 128, 71, 65, 78, 68, 193, 71, 65, 78, 
-    50, 128, 71, 65, 78, 178, 71, 65, 77, 77, 65, 128, 71, 65, 77, 76, 65, 
-    128, 71, 65, 77, 76, 128, 71, 65, 77, 69, 128, 71, 65, 77, 197, 71, 65, 
-    77, 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, 
-    71, 128, 71, 65, 70, 128, 71, 65, 198, 71, 65, 69, 84, 84, 65, 45, 80, 
-    73, 76, 76, 65, 128, 71, 65, 68, 79, 76, 128, 71, 65, 68, 128, 71, 65, 
-    196, 71, 65, 66, 65, 128, 71, 65, 66, 193, 71, 65, 65, 70, 85, 128, 71, 
-    65, 178, 71, 48, 53, 52, 128, 71, 48, 53, 51, 128, 71, 48, 53, 50, 128, 
-    71, 48, 53, 49, 128, 71, 48, 53, 48, 128, 71, 48, 52, 57, 128, 71, 48, 
-    52, 56, 128, 71, 48, 52, 55, 128, 71, 48, 52, 54, 128, 71, 48, 52, 53, 
-    65, 128, 71, 48, 52, 53, 128, 71, 48, 52, 52, 128, 71, 48, 52, 51, 65, 
-    128, 71, 48, 52, 51, 128, 71, 48, 52, 50, 128, 71, 48, 52, 49, 128, 71, 
-    48, 52, 48, 128, 71, 48, 51, 57, 128, 71, 48, 51, 56, 128, 71, 48, 51, 
-    55, 65, 128, 71, 48, 51, 55, 128, 71, 48, 51, 54, 65, 128, 71, 48, 51, 
-    54, 128, 71, 48, 51, 53, 128, 71, 48, 51, 52, 128, 71, 48, 51, 51, 128, 
-    71, 48, 51, 50, 128, 71, 48, 51, 49, 128, 71, 48, 51, 48, 128, 71, 48, 
-    50, 57, 128, 71, 48, 50, 56, 128, 71, 48, 50, 55, 128, 71, 48, 50, 54, 
-    65, 128, 71, 48, 50, 54, 128, 71, 48, 50, 53, 128, 71, 48, 50, 52, 128, 
-    71, 48, 50, 51, 128, 71, 48, 50, 50, 128, 71, 48, 50, 49, 128, 71, 48, 
-    50, 48, 65, 128, 71, 48, 50, 48, 128, 71, 48, 49, 57, 128, 71, 48, 49, 
-    56, 128, 71, 48, 49, 55, 128, 71, 48, 49, 54, 128, 71, 48, 49, 53, 128, 
-    71, 48, 49, 52, 128, 71, 48, 49, 51, 128, 71, 48, 49, 50, 128, 71, 48, 
-    49, 49, 65, 128, 71, 48, 49, 49, 128, 71, 48, 49, 48, 128, 71, 48, 48, 
-    57, 128, 71, 48, 48, 56, 128, 71, 48, 48, 55, 66, 128, 71, 48, 48, 55, 
-    65, 128, 71, 48, 48, 55, 128, 71, 48, 48, 54, 65, 128, 71, 48, 48, 54, 
-    128, 71, 48, 48, 53, 128, 71, 48, 48, 52, 128, 71, 48, 48, 51, 128, 71, 
-    48, 48, 50, 128, 71, 48, 48, 49, 128, 70, 89, 88, 128, 70, 89, 84, 128, 
-    70, 89, 80, 128, 70, 89, 65, 128, 70, 87, 73, 128, 70, 87, 69, 69, 128, 
-    70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, 128, 70, 86, 83, 51, 
-    128, 70, 86, 83, 50, 128, 70, 86, 83, 49, 128, 70, 85, 88, 128, 70, 85, 
-    84, 128, 70, 85, 83, 69, 128, 70, 85, 83, 193, 70, 85, 82, 88, 128, 70, 
-    85, 80, 128, 70, 85, 78, 69, 82, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 
-    65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 128, 70, 85, 76, 76, 78, 69, 83, 
-    83, 128, 70, 85, 76, 204, 70, 85, 74, 73, 128, 70, 85, 69, 84, 128, 70, 
-    85, 69, 204, 70, 85, 69, 128, 70, 84, 72, 79, 82, 193, 70, 82, 79, 87, 
-    78, 73, 78, 71, 128, 70, 82, 79, 87, 78, 73, 78, 199, 70, 82, 79, 87, 78, 
-    128, 70, 82, 79, 78, 84, 45, 84, 73, 76, 84, 69, 196, 70, 82, 79, 78, 84, 
-    45, 70, 65, 67, 73, 78, 199, 70, 82, 79, 205, 70, 82, 79, 71, 128, 70, 
-    82, 79, 199, 70, 82, 73, 84, 85, 128, 70, 82, 73, 69, 83, 128, 70, 82, 
-    73, 69, 196, 70, 82, 73, 67, 65, 84, 73, 86, 69, 128, 70, 82, 69, 84, 66, 
-    79, 65, 82, 68, 128, 70, 82, 69, 78, 67, 200, 70, 82, 69, 69, 128, 70, 
-    82, 69, 197, 70, 82, 65, 78, 195, 70, 82, 65, 77, 69, 128, 70, 82, 65, 
-    71, 82, 65, 78, 84, 128, 70, 82, 65, 71, 77, 69, 78, 84, 128, 70, 82, 65, 
-    67, 84, 73, 79, 206, 70, 79, 88, 128, 70, 79, 85, 82, 84, 69, 69, 78, 
-    128, 70, 79, 85, 82, 84, 69, 69, 206, 70, 79, 85, 82, 45, 84, 72, 73, 82, 
-    84, 89, 128, 70, 79, 85, 82, 45, 83, 84, 82, 73, 78, 199, 70, 79, 85, 82, 
-    45, 80, 69, 82, 45, 69, 205, 70, 79, 85, 82, 45, 76, 73, 78, 197, 70, 79, 
-    85, 210, 70, 79, 85, 78, 84, 65, 73, 78, 128, 70, 79, 83, 84, 69, 82, 73, 
-    78, 71, 128, 70, 79, 82, 87, 65, 82, 68, 128, 70, 79, 82, 84, 89, 128, 
-    70, 79, 82, 84, 217, 70, 79, 82, 84, 69, 128, 70, 79, 82, 77, 211, 70, 
-    79, 82, 77, 65, 84, 84, 73, 78, 71, 128, 70, 79, 82, 75, 69, 196, 70, 79, 
-    82, 67, 69, 83, 128, 70, 79, 82, 67, 69, 128, 70, 79, 80, 128, 70, 79, 
-    79, 84, 83, 84, 79, 79, 76, 128, 70, 79, 79, 84, 80, 82, 73, 78, 84, 83, 
-    128, 70, 79, 79, 84, 78, 79, 84, 197, 70, 79, 79, 84, 66, 65, 76, 76, 
-    128, 70, 79, 79, 84, 128, 70, 79, 79, 68, 128, 70, 79, 79, 128, 70, 79, 
-    78, 71, 77, 65, 78, 128, 70, 79, 77, 128, 70, 79, 76, 76, 89, 128, 70, 
-    79, 76, 76, 79, 87, 73, 78, 71, 128, 70, 79, 76, 68, 69, 82, 128, 70, 79, 
-    76, 68, 69, 196, 70, 79, 71, 71, 89, 128, 70, 207, 70, 77, 128, 70, 76, 
-    89, 128, 70, 76, 85, 84, 84, 69, 82, 73, 78, 199, 70, 76, 85, 84, 69, 
-    128, 70, 76, 85, 83, 72, 69, 196, 70, 76, 79, 87, 73, 78, 199, 70, 76, 
-    79, 87, 69, 210, 70, 76, 79, 85, 82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 
-    84, 84, 69, 128, 70, 76, 79, 82, 65, 204, 70, 76, 79, 80, 80, 217, 70, 
-    76, 79, 79, 82, 128, 70, 76, 73, 80, 128, 70, 76, 73, 71, 72, 84, 128, 
-    70, 76, 69, 88, 85, 83, 128, 70, 76, 69, 88, 69, 196, 70, 76, 69, 85, 82, 
-    45, 68, 69, 45, 76, 73, 83, 128, 70, 76, 65, 84, 84, 69, 78, 69, 196, 70, 
-    76, 65, 84, 78, 69, 83, 83, 128, 70, 76, 65, 84, 128, 70, 76, 65, 212, 
-    70, 76, 65, 71, 83, 128, 70, 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 
-    52, 128, 70, 76, 65, 71, 45, 51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 
-    76, 65, 71, 45, 49, 128, 70, 76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 
-    65, 128, 70, 76, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 
-    88, 128, 70, 73, 86, 69, 45, 84, 72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 
-    45, 76, 73, 78, 197, 70, 73, 86, 197, 70, 73, 84, 65, 128, 70, 73, 84, 
-    128, 70, 73, 83, 84, 69, 196, 70, 73, 83, 84, 128, 70, 73, 83, 72, 73, 
-    78, 199, 70, 73, 83, 72, 72, 79, 79, 75, 128, 70, 73, 83, 72, 72, 79, 79, 
-    203, 70, 73, 83, 72, 69, 89, 69, 128, 70, 73, 83, 72, 128, 70, 73, 83, 
-    200, 70, 73, 82, 83, 212, 70, 73, 82, 73, 128, 70, 73, 82, 69, 87, 79, 
-    82, 75, 83, 128, 70, 73, 82, 69, 87, 79, 82, 203, 70, 73, 82, 69, 128, 
-    70, 73, 82, 197, 70, 73, 80, 128, 70, 73, 78, 73, 84, 197, 70, 73, 78, 
-    71, 69, 82, 78, 65, 73, 76, 83, 128, 70, 73, 78, 71, 69, 82, 69, 196, 70, 
-    73, 78, 65, 78, 67, 73, 65, 76, 128, 70, 73, 76, 76, 69, 82, 128, 70, 73, 
-    76, 76, 69, 196, 70, 73, 76, 76, 128, 70, 73, 76, 204, 70, 73, 76, 197, 
-    70, 73, 73, 128, 70, 73, 71, 85, 82, 69, 45, 51, 128, 70, 73, 71, 85, 82, 
-    69, 45, 50, 128, 70, 73, 71, 85, 82, 69, 45, 49, 128, 70, 73, 71, 85, 82, 
-    197, 70, 73, 71, 72, 84, 128, 70, 73, 70, 84, 89, 128, 70, 73, 70, 84, 
-    217, 70, 73, 70, 84, 72, 83, 128, 70, 73, 70, 84, 72, 128, 70, 73, 70, 
-    84, 69, 69, 78, 128, 70, 73, 70, 84, 69, 69, 206, 70, 73, 69, 76, 68, 
-    128, 70, 72, 84, 79, 82, 193, 70, 70, 76, 128, 70, 70, 73, 128, 70, 69, 
-    85, 88, 128, 70, 69, 85, 70, 69, 85, 65, 69, 84, 128, 70, 69, 83, 84, 73, 
-    86, 65, 76, 128, 70, 69, 82, 82, 89, 128, 70, 69, 82, 82, 73, 211, 70, 
-    69, 82, 77, 65, 84, 65, 128, 70, 69, 82, 77, 65, 84, 193, 70, 69, 79, 
-    200, 70, 69, 78, 199, 70, 69, 78, 67, 69, 128, 70, 69, 77, 73, 78, 73, 
-    78, 197, 70, 69, 77, 65, 76, 69, 128, 70, 69, 77, 65, 76, 197, 70, 69, 
-    76, 76, 79, 87, 83, 72, 73, 80, 128, 70, 69, 73, 128, 70, 69, 72, 213, 
-    70, 69, 72, 128, 70, 69, 200, 70, 69, 69, 78, 71, 128, 70, 69, 69, 68, 
-    128, 70, 69, 69, 196, 70, 69, 69, 128, 70, 69, 66, 82, 85, 65, 82, 89, 
-    128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 69, 65, 84, 72, 69, 210, 70, 
-    69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85, 204, 70, 69, 65, 82, 128, 
-    70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89, 128, 70, 65, 88, 128, 70, 
-    65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70, 65, 84, 72, 69, 82, 128, 
-    70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84, 65, 78, 128, 70, 65, 84, 
-    72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128, 70, 65, 84, 72, 193, 70, 
-    65, 84, 128, 70, 65, 82, 83, 201, 70, 65, 81, 128, 70, 65, 80, 128, 70, 
-    65, 78, 71, 128, 70, 65, 78, 69, 82, 79, 83, 73, 211, 70, 65, 78, 128, 
-    70, 65, 77, 73, 76, 89, 128, 70, 65, 76, 76, 73, 78, 199, 70, 65, 76, 76, 
-    69, 206, 70, 65, 73, 76, 85, 82, 69, 128, 70, 65, 73, 72, 85, 128, 70, 
-    65, 72, 82, 69, 78, 72, 69, 73, 84, 128, 70, 65, 67, 84, 79, 82, 89, 128, 
-    70, 65, 67, 84, 79, 210, 70, 65, 67, 83, 73, 77, 73, 76, 197, 70, 65, 67, 
-    69, 45, 54, 128, 70, 65, 67, 69, 45, 53, 128, 70, 65, 67, 69, 45, 52, 
-    128, 70, 65, 67, 69, 45, 51, 128, 70, 65, 67, 69, 45, 50, 128, 70, 65, 
-    67, 69, 45, 49, 128, 70, 65, 65, 77, 65, 69, 128, 70, 65, 65, 73, 128, 
-    70, 65, 65, 70, 85, 128, 70, 48, 53, 51, 128, 70, 48, 53, 50, 128, 70, 
-    48, 53, 49, 67, 128, 70, 48, 53, 49, 66, 128, 70, 48, 53, 49, 65, 128, 
-    70, 48, 53, 49, 128, 70, 48, 53, 48, 128, 70, 48, 52, 57, 128, 70, 48, 
-    52, 56, 128, 70, 48, 52, 55, 65, 128, 70, 48, 52, 55, 128, 70, 48, 52, 
-    54, 65, 128, 70, 48, 52, 54, 128, 70, 48, 52, 53, 65, 128, 70, 48, 52, 
-    53, 128, 70, 48, 52, 52, 128, 70, 48, 52, 51, 128, 70, 48, 52, 50, 128, 
-    70, 48, 52, 49, 128, 70, 48, 52, 48, 128, 70, 48, 51, 57, 128, 70, 48, 
-    51, 56, 65, 128, 70, 48, 51, 56, 128, 70, 48, 51, 55, 65, 128, 70, 48, 
-    51, 55, 128, 70, 48, 51, 54, 128, 70, 48, 51, 53, 128, 70, 48, 51, 52, 
-    128, 70, 48, 51, 51, 128, 70, 48, 51, 50, 128, 70, 48, 51, 49, 65, 128, 
-    70, 48, 51, 49, 128, 70, 48, 51, 48, 128, 70, 48, 50, 57, 128, 70, 48, 
-    50, 56, 128, 70, 48, 50, 55, 128, 70, 48, 50, 54, 128, 70, 48, 50, 53, 
-    128, 70, 48, 50, 52, 128, 70, 48, 50, 51, 128, 70, 48, 50, 50, 128, 70, 
-    48, 50, 49, 65, 128, 70, 48, 50, 49, 128, 70, 48, 50, 48, 128, 70, 48, 
-    49, 57, 128, 70, 48, 49, 56, 128, 70, 48, 49, 55, 128, 70, 48, 49, 54, 
-    128, 70, 48, 49, 53, 128, 70, 48, 49, 52, 128, 70, 48, 49, 51, 65, 128, 
-    70, 48, 49, 51, 128, 70, 48, 49, 50, 128, 70, 48, 49, 49, 128, 70, 48, 
-    49, 48, 128, 70, 48, 48, 57, 128, 70, 48, 48, 56, 128, 70, 48, 48, 55, 
-    128, 70, 48, 48, 54, 128, 70, 48, 48, 53, 128, 70, 48, 48, 52, 128, 70, 
-    48, 48, 51, 128, 70, 48, 48, 50, 128, 70, 48, 48, 49, 65, 128, 70, 48, 
-    48, 49, 128, 69, 90, 200, 69, 90, 69, 78, 128, 69, 90, 69, 206, 69, 90, 
-    128, 69, 89, 69, 83, 128, 69, 89, 69, 71, 76, 65, 83, 83, 69, 83, 128, 
-    69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, 128, 69, 
-    88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, 73, 65, 204, 69, 88, 84, 
-    82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, 72, 73, 71, 200, 69, 88, 
-    84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69, 78, 68, 69, 196, 69, 88, 
-    80, 82, 69, 83, 83, 73, 79, 78, 76, 69, 83, 211, 69, 88, 80, 79, 78, 69, 
-    78, 212, 69, 88, 79, 128, 69, 88, 207, 69, 88, 73, 83, 84, 83, 128, 69, 
-    88, 73, 83, 84, 128, 69, 88, 72, 65, 85, 83, 84, 73, 79, 78, 128, 69, 88, 
-    67, 76, 65, 77, 65, 84, 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, 84, 
-    73, 79, 206, 69, 88, 67, 72, 65, 78, 71, 69, 128, 69, 88, 67, 69, 83, 83, 
-    128, 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 
-    69, 82, 71, 82, 69, 69, 206, 69, 86, 69, 78, 73, 78, 71, 128, 69, 85, 82, 
-    79, 80, 69, 65, 206, 69, 85, 82, 79, 80, 69, 45, 65, 70, 82, 73, 67, 65, 
-    128, 69, 85, 82, 79, 45, 67, 85, 82, 82, 69, 78, 67, 217, 69, 85, 82, 
-    207, 69, 85, 76, 69, 210, 69, 85, 45, 85, 128, 69, 85, 45, 79, 128, 69, 
-    85, 45, 69, 85, 128, 69, 85, 45, 69, 79, 128, 69, 85, 45, 69, 128, 69, 
-    85, 45, 65, 128, 69, 84, 88, 128, 69, 84, 78, 65, 72, 84, 65, 128, 69, 
-    84, 72, 69, 204, 69, 84, 69, 82, 79, 206, 69, 84, 69, 82, 78, 73, 84, 89, 
-    128, 69, 84, 66, 128, 69, 83, 85, 75, 85, 85, 68, 79, 128, 69, 83, 84, 
-    73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65, 84, 69, 196, 69, 83, 
-    72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83, 72, 178, 69, 83, 72, 
-    49, 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 67, 128, 69, 83, 65, 
-    128, 69, 83, 45, 84, 69, 128, 69, 82, 82, 79, 82, 45, 66, 65, 82, 82, 69, 
-    196, 69, 82, 82, 128, 69, 82, 73, 78, 50, 128, 69, 82, 71, 128, 69, 82, 
-    65, 83, 197, 69, 81, 85, 73, 86, 65, 76, 69, 78, 212, 69, 81, 85, 73, 68, 
-    128, 69, 81, 85, 73, 65, 78, 71, 85, 76, 65, 210, 69, 81, 85, 65, 76, 83, 
-    128, 69, 81, 85, 65, 76, 211, 69, 81, 85, 65, 76, 128, 69, 80, 83, 73, 
-    76, 79, 78, 128, 69, 80, 83, 73, 76, 79, 206, 69, 80, 79, 67, 72, 128, 
-    69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, 80, 73, 68, 65, 85, 82, 69, 
-    65, 206, 69, 80, 69, 78, 84, 72, 69, 84, 73, 195, 69, 80, 69, 71, 69, 82, 
-    77, 65, 128, 69, 79, 84, 128, 69, 79, 77, 128, 69, 79, 76, 72, 88, 128, 
-    69, 79, 76, 128, 69, 79, 72, 128, 69, 78, 89, 128, 69, 78, 86, 69, 76, 
-    79, 80, 69, 128, 69, 78, 86, 69, 76, 79, 80, 197, 69, 78, 85, 77, 69, 82, 
-    65, 84, 73, 79, 206, 69, 78, 84, 82, 89, 45, 50, 128, 69, 78, 84, 82, 89, 
-    45, 49, 128, 69, 78, 84, 82, 89, 128, 69, 78, 84, 82, 217, 69, 78, 84, 
-    72, 85, 83, 73, 65, 83, 77, 128, 69, 78, 84, 69, 82, 80, 82, 73, 83, 69, 
-    128, 69, 78, 84, 69, 82, 73, 78, 199, 69, 78, 84, 69, 82, 128, 69, 78, 
-    84, 69, 210, 69, 78, 81, 85, 73, 82, 89, 128, 69, 78, 81, 128, 69, 78, 
-    79, 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 
-    128, 69, 78, 71, 73, 78, 69, 128, 69, 78, 68, 79, 70, 79, 78, 79, 78, 
-    128, 69, 78, 68, 73, 78, 199, 69, 78, 68, 69, 80, 128, 69, 78, 68, 69, 
-    65, 86, 79, 85, 82, 128, 69, 78, 67, 79, 85, 78, 84, 69, 82, 83, 128, 69, 
-    78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 78, 67, 76, 79, 83, 73, 78, 199, 
-    69, 78, 67, 128, 69, 78, 65, 82, 88, 73, 211, 69, 78, 65, 82, 77, 79, 78, 
-    73, 79, 211, 69, 77, 80, 84, 217, 69, 77, 80, 72, 65, 84, 73, 195, 69, 
-    77, 80, 72, 65, 83, 73, 211, 69, 77, 66, 82, 79, 73, 68, 69, 82, 89, 128, 
-    69, 77, 66, 76, 69, 77, 128, 69, 77, 66, 69, 76, 76, 73, 83, 72, 77, 69, 
-    78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 69, 76, 84, 128, 
-    69, 76, 76, 73, 80, 84, 73, 195, 69, 76, 76, 73, 80, 83, 73, 83, 128, 69, 
-    76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, 69, 86, 69, 
-    78, 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, 69, 78, 128, 69, 76, 
-    69, 86, 69, 206, 69, 76, 69, 80, 72, 65, 78, 84, 128, 69, 76, 69, 77, 69, 
-    78, 212, 69, 76, 69, 67, 84, 82, 73, 67, 65, 204, 69, 76, 69, 67, 84, 82, 
-    73, 195, 69, 76, 65, 70, 82, 79, 78, 128, 69, 75, 83, 84, 82, 69, 80, 84, 
-    79, 78, 128, 69, 75, 83, 128, 69, 75, 70, 79, 78, 73, 84, 73, 75, 79, 78, 
-    128, 69, 75, 65, 82, 65, 128, 69, 74, 69, 67, 212, 69, 73, 83, 128, 69, 
-    73, 71, 72, 84, 89, 128, 69, 73, 71, 72, 84, 217, 69, 73, 71, 72, 84, 72, 
-    83, 128, 69, 73, 71, 72, 84, 72, 211, 69, 73, 71, 72, 84, 72, 128, 69, 
-    73, 71, 72, 84, 69, 69, 78, 128, 69, 73, 71, 72, 84, 69, 69, 206, 69, 73, 
-    71, 72, 84, 45, 84, 72, 73, 82, 84, 89, 128, 69, 73, 69, 128, 69, 72, 87, 
-    65, 218, 69, 71, 89, 80, 84, 79, 76, 79, 71, 73, 67, 65, 204, 69, 71, 73, 
-    82, 128, 69, 71, 71, 128, 69, 69, 89, 65, 78, 78, 65, 128, 69, 69, 75, 
-    65, 65, 128, 69, 69, 72, 128, 69, 69, 66, 69, 69, 70, 73, 76, 73, 128, 
-    69, 68, 73, 84, 79, 82, 73, 65, 204, 69, 68, 73, 78, 128, 69, 68, 68, 
-    128, 69, 66, 69, 70, 73, 76, 73, 128, 69, 65, 83, 84, 69, 82, 206, 69, 
-    65, 83, 212, 69, 65, 82, 84, 72, 76, 217, 69, 65, 82, 84, 72, 128, 69, 
-    65, 82, 84, 200, 69, 65, 82, 83, 128, 69, 65, 82, 76, 217, 69, 65, 77, 
-    72, 65, 78, 67, 72, 79, 76, 76, 128, 69, 65, 71, 76, 69, 128, 69, 65, 68, 
-    72, 65, 68, 72, 128, 69, 65, 66, 72, 65, 68, 72, 128, 69, 178, 69, 48, 
-    51, 56, 128, 69, 48, 51, 55, 128, 69, 48, 51, 54, 128, 69, 48, 51, 52, 
-    65, 128, 69, 48, 51, 52, 128, 69, 48, 51, 51, 128, 69, 48, 51, 50, 128, 
-    69, 48, 51, 49, 128, 69, 48, 51, 48, 128, 69, 48, 50, 57, 128, 69, 48, 
-    50, 56, 65, 128, 69, 48, 50, 56, 128, 69, 48, 50, 55, 128, 69, 48, 50, 
-    54, 128, 69, 48, 50, 53, 128, 69, 48, 50, 52, 128, 69, 48, 50, 51, 128, 
-    69, 48, 50, 50, 128, 69, 48, 50, 49, 128, 69, 48, 50, 48, 65, 128, 69, 
-    48, 50, 48, 128, 69, 48, 49, 57, 128, 69, 48, 49, 56, 128, 69, 48, 49, 
-    55, 65, 128, 69, 48, 49, 55, 128, 69, 48, 49, 54, 65, 128, 69, 48, 49, 
-    54, 128, 69, 48, 49, 53, 128, 69, 48, 49, 52, 128, 69, 48, 49, 51, 128, 
-    69, 48, 49, 50, 128, 69, 48, 49, 49, 128, 69, 48, 49, 48, 128, 69, 48, 
-    48, 57, 65, 128, 69, 48, 48, 57, 128, 69, 48, 48, 56, 65, 128, 69, 48, 
-    48, 56, 128, 69, 48, 48, 55, 128, 69, 48, 48, 54, 128, 69, 48, 48, 53, 
-    128, 69, 48, 48, 52, 128, 69, 48, 48, 51, 128, 69, 48, 48, 50, 128, 69, 
-    48, 48, 49, 128, 69, 45, 77, 65, 73, 204, 68, 90, 90, 69, 128, 68, 90, 
-    90, 65, 128, 68, 90, 87, 69, 128, 68, 90, 85, 128, 68, 90, 79, 128, 68, 
-    90, 74, 69, 128, 68, 90, 73, 128, 68, 90, 72, 69, 128, 68, 90, 72, 65, 
-    128, 68, 90, 69, 76, 79, 128, 68, 90, 69, 69, 128, 68, 90, 69, 128, 68, 
-    90, 65, 65, 128, 68, 90, 65, 128, 68, 90, 128, 68, 218, 68, 89, 79, 128, 
-    68, 89, 207, 68, 89, 69, 72, 128, 68, 89, 69, 200, 68, 87, 79, 128, 68, 
-    87, 69, 128, 68, 87, 65, 128, 68, 86, 73, 83, 86, 65, 82, 65, 128, 68, 
-    86, 68, 128, 68, 86, 128, 68, 85, 84, 73, 69, 83, 128, 68, 85, 83, 75, 
-    128, 68, 85, 83, 72, 69, 78, 78, 65, 128, 68, 85, 82, 65, 84, 73, 79, 78, 
-    128, 68, 85, 82, 50, 128, 68, 85, 80, 79, 78, 68, 73, 85, 211, 68, 85, 
-    79, 88, 128, 68, 85, 79, 128, 68, 85, 78, 52, 128, 68, 85, 78, 51, 128, 
-    68, 85, 78, 179, 68, 85, 77, 128, 68, 85, 204, 68, 85, 72, 128, 68, 85, 
-    71, 85, 68, 128, 68, 85, 66, 50, 128, 68, 85, 66, 128, 68, 85, 194, 68, 
-    82, 89, 128, 68, 82, 217, 68, 82, 85, 77, 128, 68, 82, 85, 205, 68, 82, 
-    79, 80, 83, 128, 68, 82, 79, 80, 76, 69, 84, 128, 68, 82, 79, 80, 45, 83, 
-    72, 65, 68, 79, 87, 69, 196, 68, 82, 79, 77, 69, 68, 65, 82, 217, 68, 82, 
-    73, 86, 69, 128, 68, 82, 73, 86, 197, 68, 82, 73, 78, 75, 128, 68, 82, 
-    73, 204, 68, 82, 69, 83, 83, 128, 68, 82, 65, 85, 71, 72, 84, 211, 68, 
-    82, 65, 77, 128, 68, 82, 65, 205, 68, 82, 65, 71, 79, 78, 128, 68, 82, 
-    65, 71, 79, 206, 68, 82, 65, 70, 84, 73, 78, 199, 68, 82, 65, 67, 72, 77, 
-    65, 83, 128, 68, 82, 65, 67, 72, 77, 65, 128, 68, 82, 65, 67, 72, 77, 
-    193, 68, 79, 87, 78, 87, 65, 82, 68, 83, 128, 68, 79, 87, 78, 87, 65, 82, 
-    68, 211, 68, 79, 87, 78, 45, 80, 79, 73, 78, 84, 73, 78, 199, 68, 79, 87, 
-    78, 128, 68, 79, 86, 69, 128, 68, 79, 85, 71, 72, 78, 85, 84, 128, 68, 
-    79, 85, 66, 84, 128, 68, 79, 85, 66, 76, 69, 196, 68, 79, 85, 66, 76, 69, 
-    45, 76, 73, 78, 197, 68, 79, 85, 66, 76, 69, 45, 69, 78, 68, 69, 196, 68, 
-    79, 85, 66, 76, 69, 128, 68, 79, 84, 84, 69, 68, 45, 80, 128, 68, 79, 84, 
-    84, 69, 68, 45, 78, 128, 68, 79, 84, 84, 69, 68, 45, 76, 128, 68, 79, 84, 
-    84, 69, 68, 128, 68, 79, 84, 84, 69, 196, 68, 79, 84, 83, 45, 56, 128, 
-    68, 79, 84, 83, 45, 55, 56, 128, 68, 79, 84, 83, 45, 55, 128, 68, 79, 84, 
-    83, 45, 54, 56, 128, 68, 79, 84, 83, 45, 54, 55, 56, 128, 68, 79, 84, 83, 
-    45, 54, 55, 128, 68, 79, 84, 83, 45, 54, 128, 68, 79, 84, 83, 45, 53, 56, 
-    128, 68, 79, 84, 83, 45, 53, 55, 56, 128, 68, 79, 84, 83, 45, 53, 55, 
-    128, 68, 79, 84, 83, 45, 53, 54, 56, 128, 68, 79, 84, 83, 45, 53, 54, 55, 
-    56, 128, 68, 79, 84, 83, 45, 53, 54, 55, 128, 68, 79, 84, 83, 45, 53, 54, 
-    128, 68, 79, 84, 83, 45, 53, 128, 68, 79, 84, 83, 45, 52, 56, 128, 68, 
-    79, 84, 83, 45, 52, 55, 56, 128, 68, 79, 84, 83, 45, 52, 55, 128, 68, 79, 
-    84, 83, 45, 52, 54, 56, 128, 68, 79, 84, 83, 45, 52, 54, 55, 56, 128, 68, 
-    79, 84, 83, 45, 52, 54, 55, 128, 68, 79, 84, 83, 45, 52, 54, 128, 68, 79, 
-    84, 83, 45, 52, 53, 56, 128, 68, 79, 84, 83, 45, 52, 53, 55, 56, 128, 68, 
-    79, 84, 83, 45, 52, 53, 55, 128, 68, 79, 84, 83, 45, 52, 53, 54, 56, 128, 
-    68, 79, 84, 83, 45, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 
-    54, 55, 128, 68, 79, 84, 83, 45, 52, 53, 54, 128, 68, 79, 84, 83, 45, 52, 
-    53, 128, 68, 79, 84, 83, 45, 52, 128, 68, 79, 84, 83, 45, 51, 56, 128, 
-    68, 79, 84, 83, 45, 51, 55, 56, 128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 
-    79, 84, 83, 45, 51, 54, 56, 128, 68, 79, 84, 83, 45, 51, 54, 55, 56, 128, 
-    68, 79, 84, 83, 45, 51, 54, 55, 128, 68, 79, 84, 83, 45, 51, 54, 128, 68, 
-    79, 84, 83, 45, 51, 53, 56, 128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128, 
-    68, 79, 84, 83, 45, 51, 53, 55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 56, 
-    128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 
-    53, 54, 55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 128, 68, 79, 84, 83, 45, 
-    51, 53, 128, 68, 79, 84, 83, 45, 51, 52, 56, 128, 68, 79, 84, 83, 45, 51, 
-    52, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 55, 128, 68, 79, 84, 83, 45, 
-    51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 51, 52, 54, 55, 56, 128, 68, 79, 
-    84, 83, 45, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 128, 68, 
-    79, 84, 83, 45, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 
-    56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 51, 
-    52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 55, 56, 128, 68, 
-    79, 84, 83, 45, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 
-    54, 128, 68, 79, 84, 83, 45, 51, 52, 53, 128, 68, 79, 84, 83, 45, 51, 52, 
-    128, 68, 79, 84, 83, 45, 51, 128, 68, 79, 84, 83, 45, 50, 56, 128, 68, 
-    79, 84, 83, 45, 50, 55, 56, 128, 68, 79, 84, 83, 45, 50, 55, 128, 68, 79, 
-    84, 83, 45, 50, 54, 56, 128, 68, 79, 84, 83, 45, 50, 54, 55, 56, 128, 68, 
-    79, 84, 83, 45, 50, 54, 55, 128, 68, 79, 84, 83, 45, 50, 54, 128, 68, 79, 
-    84, 83, 45, 50, 53, 56, 128, 68, 79, 84, 83, 45, 50, 53, 55, 56, 128, 68, 
-    79, 84, 83, 45, 50, 53, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, 
-    68, 79, 84, 83, 45, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 
-    54, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, 
-    53, 128, 68, 79, 84, 83, 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, 
-    55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, 
-    52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, 
-    83, 45, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, 
-    84, 83, 45, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, 
-    128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, 
-    53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, 
-    84, 83, 45, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 
-    128, 68, 79, 84, 83, 45, 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, 
-    128, 68, 79, 84, 83, 45, 50, 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 
-    56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, 
-    54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 
-    45, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, 
-    83, 45, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, 
-    68, 79, 84, 83, 45, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 
-    54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 
-    83, 45, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, 
-    68, 79, 84, 83, 45, 50, 51, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, 
-    128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, 
-    51, 52, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, 
-    83, 45, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 
-    55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, 
-    51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, 
-    79, 84, 83, 45, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 
-    53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, 
-    79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 
-    52, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, 
-    45, 50, 51, 52, 128, 68, 79, 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, 
-    50, 128, 68, 79, 84, 83, 45, 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, 
-    128, 68, 79, 84, 83, 45, 49, 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, 
-    128, 68, 79, 84, 83, 45, 49, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, 
-    55, 128, 68, 79, 84, 83, 45, 49, 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, 
-    128, 68, 79, 84, 83, 45, 49, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 
-    55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 
-    53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, 
-    83, 45, 49, 53, 54, 128, 68, 79, 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, 
-    45, 49, 52, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, 
-    83, 45, 49, 52, 55, 128, 68, 79, 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, 
-    84, 83, 45, 49, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 
-    128, 68, 79, 84, 83, 45, 49, 52, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 
-    56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 
-    49, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, 
-    84, 83, 45, 49, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 
-    54, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, 
-    49, 52, 53, 128, 68, 79, 84, 83, 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, 
-    51, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, 
-    49, 51, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, 
-    45, 49, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, 
-    79, 84, 83, 45, 49, 51, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, 
-    68, 79, 84, 83, 45, 49, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 
-    53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, 
-    45, 49, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 
-    128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 
-    53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 
-    51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, 
-    83, 45, 49, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 
-    56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 
-    49, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, 
-    84, 83, 45, 49, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 
-    53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, 
-    83, 45, 49, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 
-    53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, 
-    83, 45, 49, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, 
-    84, 83, 45, 49, 51, 128, 68, 79, 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, 
-    83, 45, 49, 50, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, 
-    84, 83, 45, 49, 50, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, 
-    128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 
-    54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, 
-    50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, 
-    83, 45, 49, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 
-    56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, 
-    49, 50, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, 
-    45, 49, 50, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, 
-    79, 84, 83, 45, 49, 50, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 
-    56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 
-    45, 49, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, 
-    79, 84, 83, 45, 49, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 
-    53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, 
-    83, 45, 49, 50, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 
-    54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, 
-    84, 83, 45, 49, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 
-    128, 68, 79, 84, 83, 45, 49, 50, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 
-    56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, 
-    49, 50, 51, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, 
-    84, 83, 45, 49, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 
-    54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, 
-    49, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, 
-    68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 
-    51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, 
-    68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 
-    50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, 
-    83, 45, 49, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 
-    56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, 
-    49, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 
-    56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 
-    45, 49, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, 
-    128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 
-    45, 49, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 
-    54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, 
-    79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 
-    50, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, 
-    79, 84, 83, 45, 49, 50, 51, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, 
-    68, 79, 84, 83, 45, 49, 50, 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, 
-    83, 128, 68, 79, 84, 76, 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, 
-    82, 128, 68, 79, 79, 78, 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 
-    73, 206, 68, 79, 76, 80, 72, 73, 78, 128, 68, 79, 76, 76, 83, 128, 68, 
-    79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, 128, 68, 79, 75, 77, 65, 73, 
-    128, 68, 79, 73, 84, 128, 68, 79, 71, 128, 68, 79, 199, 68, 79, 69, 211, 
-    68, 79, 68, 69, 75, 65, 84, 65, 128, 68, 79, 66, 82, 79, 128, 68, 79, 65, 
-    67, 72, 65, 83, 72, 77, 69, 69, 128, 68, 79, 65, 67, 72, 65, 83, 72, 77, 
-    69, 197, 68, 79, 65, 128, 68, 79, 45, 79, 128, 68, 77, 128, 68, 205, 68, 
-    76, 85, 128, 68, 76, 79, 128, 68, 76, 73, 128, 68, 76, 72, 89, 65, 128, 
-    68, 76, 72, 65, 128, 68, 76, 69, 69, 128, 68, 76, 65, 128, 68, 76, 128, 
-    68, 75, 65, 82, 128, 68, 75, 65, 210, 68, 74, 69, 82, 86, 73, 128, 68, 
-    74, 69, 82, 86, 128, 68, 74, 69, 128, 68, 74, 65, 128, 68, 73, 90, 90, 
-    217, 68, 73, 86, 79, 82, 67, 197, 68, 73, 86, 73, 83, 73, 79, 78, 128, 
-    68, 73, 86, 73, 83, 73, 79, 206, 68, 73, 86, 73, 78, 65, 84, 73, 79, 78, 
-    128, 68, 73, 86, 73, 68, 69, 83, 128, 68, 73, 86, 73, 68, 69, 82, 128, 
-    68, 73, 86, 73, 68, 69, 196, 68, 73, 86, 73, 68, 69, 128, 68, 73, 86, 73, 
-    68, 197, 68, 73, 86, 69, 82, 71, 69, 78, 67, 69, 128, 68, 73, 84, 84, 
-    207, 68, 73, 83, 84, 79, 82, 84, 73, 79, 78, 128, 68, 73, 83, 84, 73, 78, 
-    71, 85, 73, 83, 72, 128, 68, 73, 83, 84, 73, 76, 76, 128, 68, 73, 83, 83, 
-    79, 76, 86, 69, 45, 50, 128, 68, 73, 83, 83, 79, 76, 86, 69, 128, 68, 73, 
-    83, 80, 69, 82, 83, 73, 79, 78, 128, 68, 73, 83, 75, 128, 68, 73, 83, 73, 
-    77, 79, 85, 128, 68, 73, 83, 72, 128, 68, 73, 83, 67, 79, 78, 84, 73, 78, 
-    85, 79, 85, 211, 68, 73, 83, 195, 68, 73, 83, 65, 80, 80, 79, 73, 78, 84, 
-    69, 196, 68, 73, 83, 65, 66, 76, 69, 196, 68, 73, 82, 71, 193, 68, 73, 
-    82, 69, 67, 84, 76, 217, 68, 73, 82, 69, 67, 84, 73, 79, 78, 65, 204, 68, 
-    73, 80, 84, 69, 128, 68, 73, 80, 80, 69, 82, 128, 68, 73, 80, 76, 79, 85, 
-    78, 128, 68, 73, 80, 76, 73, 128, 68, 73, 80, 76, 201, 68, 73, 78, 71, 
-    66, 65, 212, 68, 73, 206, 68, 73, 77, 77, 73, 78, 71, 128, 68, 73, 77, 
-    73, 78, 85, 84, 73, 79, 78, 45, 51, 128, 68, 73, 77, 73, 78, 85, 84, 73, 
-    79, 78, 45, 50, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 49, 128, 
-    68, 73, 77, 73, 78, 73, 83, 72, 77, 69, 78, 84, 128, 68, 73, 77, 73, 68, 
-    73, 193, 68, 73, 77, 69, 78, 83, 73, 79, 78, 65, 204, 68, 73, 77, 69, 78, 
-    83, 73, 79, 206, 68, 73, 77, 50, 128, 68, 73, 76, 128, 68, 73, 71, 82, 
-    65, 80, 72, 128, 68, 73, 71, 82, 65, 80, 200, 68, 73, 71, 82, 65, 77, 77, 
-    79, 211, 68, 73, 71, 82, 65, 77, 77, 193, 68, 73, 71, 82, 65, 205, 68, 
-    73, 71, 79, 82, 71, 79, 78, 128, 68, 73, 71, 79, 82, 71, 79, 206, 68, 73, 
-    71, 65, 77, 77, 65, 128, 68, 73, 71, 193, 68, 73, 70, 84, 79, 71, 71, 79, 
-    211, 68, 73, 70, 79, 78, 73, 65, 83, 128, 68, 73, 70, 70, 73, 67, 85, 76, 
-    84, 217, 68, 73, 70, 70, 73, 67, 85, 76, 84, 73, 69, 83, 128, 68, 73, 70, 
-    70, 69, 82, 69, 78, 84, 73, 65, 76, 128, 68, 73, 70, 70, 69, 82, 69, 78, 
-    67, 197, 68, 73, 70, 65, 84, 128, 68, 73, 69, 83, 73, 83, 128, 68, 73, 
-    69, 83, 73, 211, 68, 73, 69, 80, 128, 68, 73, 197, 68, 73, 66, 128, 68, 
-    73, 65, 84, 79, 78, 79, 206, 68, 73, 65, 84, 79, 78, 73, 75, 201, 68, 73, 
-    65, 83, 84, 79, 76, 201, 68, 73, 65, 77, 79, 78, 68, 83, 128, 68, 73, 65, 
-    77, 79, 78, 68, 128, 68, 73, 65, 77, 79, 78, 196, 68, 73, 65, 77, 69, 84, 
-    69, 210, 68, 73, 65, 76, 89, 84, 73, 75, 65, 128, 68, 73, 65, 76, 89, 84, 
-    73, 75, 193, 68, 73, 65, 76, 69, 67, 84, 45, 208, 68, 73, 65, 71, 79, 78, 
-    65, 76, 128, 68, 73, 65, 71, 79, 78, 65, 204, 68, 73, 65, 69, 82, 69, 83, 
-    73, 90, 69, 196, 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 68, 73, 65, 69, 
-    82, 69, 83, 73, 211, 68, 72, 79, 85, 128, 68, 72, 79, 79, 128, 68, 72, 
-    79, 128, 68, 72, 73, 128, 68, 72, 72, 85, 128, 68, 72, 72, 79, 79, 128, 
-    68, 72, 72, 79, 128, 68, 72, 72, 73, 128, 68, 72, 72, 69, 69, 128, 68, 
-    72, 72, 69, 128, 68, 72, 72, 65, 128, 68, 72, 69, 69, 128, 68, 72, 65, 
-    82, 77, 65, 128, 68, 72, 65, 76, 69, 84, 72, 128, 68, 72, 65, 76, 65, 84, 
-    72, 128, 68, 72, 65, 76, 128, 68, 72, 65, 68, 72, 69, 128, 68, 72, 65, 
-    65, 76, 85, 128, 68, 72, 65, 65, 128, 68, 72, 65, 128, 68, 69, 90, 200, 
-    68, 69, 89, 84, 69, 82, 79, 213, 68, 69, 89, 84, 69, 82, 79, 211, 68, 69, 
-    88, 73, 65, 128, 68, 69, 86, 73, 67, 197, 68, 69, 86, 69, 76, 79, 80, 77, 
-    69, 78, 84, 128, 68, 69, 85, 78, 71, 128, 68, 69, 83, 203, 68, 69, 83, 
-    73, 71, 78, 128, 68, 69, 83, 73, 128, 68, 69, 83, 67, 82, 73, 80, 84, 73, 
-    79, 206, 68, 69, 83, 67, 69, 78, 68, 73, 78, 199, 68, 69, 83, 67, 69, 78, 
-    68, 69, 82, 128, 68, 69, 82, 69, 84, 45, 72, 73, 68, 69, 84, 128, 68, 69, 
-    82, 69, 84, 128, 68, 69, 80, 65, 82, 84, 85, 82, 69, 128, 68, 69, 80, 65, 
-    82, 84, 77, 69, 78, 212, 68, 69, 80, 65, 82, 84, 73, 78, 199, 68, 69, 78, 
-    84, 73, 83, 84, 82, 217, 68, 69, 78, 84, 65, 204, 68, 69, 78, 79, 77, 73, 
-    78, 65, 84, 79, 82, 128, 68, 69, 78, 79, 77, 73, 78, 65, 84, 79, 210, 68, 
-    69, 78, 78, 69, 78, 128, 68, 69, 78, 71, 128, 68, 69, 78, 197, 68, 69, 
-    78, 65, 82, 73, 85, 211, 68, 69, 76, 84, 65, 128, 68, 69, 76, 84, 193, 
-    68, 69, 76, 84, 128, 68, 69, 76, 80, 72, 73, 195, 68, 69, 76, 73, 86, 69, 
-    82, 217, 68, 69, 76, 73, 86, 69, 82, 65, 78, 67, 69, 128, 68, 69, 76, 73, 
-    77, 73, 84, 69, 82, 128, 68, 69, 76, 73, 77, 73, 84, 69, 210, 68, 69, 76, 
-    73, 67, 73, 79, 85, 211, 68, 69, 76, 69, 84, 69, 128, 68, 69, 76, 69, 84, 
+    84, 128, 82, 76, 79, 128, 82, 76, 77, 128, 82, 76, 73, 128, 82, 76, 69, 
+    128, 82, 74, 69, 211, 82, 74, 69, 128, 82, 74, 197, 82, 73, 86, 69, 82, 
+    128, 82, 73, 84, 85, 65, 76, 128, 82, 73, 84, 84, 79, 82, 85, 128, 82, 
+    73, 84, 83, 73, 128, 82, 73, 83, 73, 78, 199, 82, 73, 83, 72, 128, 82, 
+    73, 82, 65, 128, 82, 73, 80, 128, 82, 73, 78, 71, 211, 82, 73, 78, 70, 
+    79, 82, 90, 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66, 65, 
+    128, 82, 73, 75, 82, 73, 75, 128, 82, 73, 71, 86, 69, 68, 73, 195, 82, 
+    73, 71, 72, 84, 87, 65, 82, 68, 83, 128, 82, 73, 71, 72, 84, 72, 65, 78, 
+    196, 82, 73, 71, 72, 84, 45, 84, 79, 45, 76, 69, 70, 212, 82, 73, 71, 72, 
+    84, 45, 83, 73, 68, 197, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 79, 87, 
+    69, 196, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 69, 196, 82, 73, 71, 72, 
+    84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 82, 73, 71, 72, 84, 45, 72, 65, 
+    78, 68, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71, 72, 
+    84, 45, 70, 65, 67, 73, 78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 69, 85, 
+    76, 45, 89, 69, 83, 73, 69, 85, 78, 71, 128, 82, 73, 69, 85, 76, 45, 89, 
+    69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 45, 72, 73, 69, 85, 72, 128, 82, 
+    73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 82, 
+    73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128, 
+    82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 
+    45, 84, 72, 73, 69, 85, 84, 72, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 
+    78, 71, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 
+    78, 71, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 
+    80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 75, 
+    73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 128, 82, 
+    73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128, 
+    82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 82, 
+    73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, 80, 72, 
+    128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72, 
+    128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 
+    45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78, 
+    83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 78, 73, 69, 85, 78, 128, 82, 
+    73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 83, 73, 79, 83, 128, 82, 73, 
+    69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 75, 73, 89, 69, 79, 75, 128, 82, 
+    73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 72, 73, 69, 85, 72, 128, 82, 
+    73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 75, 
+    73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 75, 
+    73, 89, 69, 79, 75, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 
+    75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69, 
+    79, 85, 78, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 72, 73, 69, 
+    85, 72, 128, 82, 73, 69, 85, 76, 45, 67, 73, 69, 85, 67, 128, 82, 73, 69, 
+    85, 204, 82, 73, 69, 76, 128, 82, 73, 69, 69, 128, 82, 73, 67, 69, 77, 
+    128, 82, 73, 67, 69, 128, 82, 73, 67, 197, 82, 73, 66, 66, 79, 78, 128, 
+    82, 73, 65, 204, 82, 72, 79, 84, 73, 195, 82, 72, 79, 128, 82, 72, 207, 
+    82, 72, 65, 128, 82, 71, 89, 73, 78, 71, 83, 128, 82, 71, 89, 65, 78, 
+    128, 82, 71, 89, 193, 82, 69, 86, 79, 76, 86, 73, 78, 199, 82, 69, 86, 
+    79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 86, 77, 65, 128, 82, 69, 86, 73, 
+    65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 128, 82, 69, 86, 69, 82, 83, 69, 
+    196, 82, 69, 86, 69, 82, 83, 197, 82, 69, 85, 88, 128, 82, 69, 85, 128, 
+    82, 69, 84, 85, 82, 78, 128, 82, 69, 84, 85, 82, 206, 82, 69, 84, 82, 79, 
+    70, 76, 69, 216, 82, 69, 84, 82, 69, 65, 84, 128, 82, 69, 84, 79, 82, 84, 
+    128, 82, 69, 83, 85, 80, 73, 78, 85, 83, 128, 82, 69, 83, 84, 82, 79, 79, 
+    77, 128, 82, 69, 83, 84, 82, 73, 67, 84, 69, 196, 82, 69, 83, 84, 128, 
+    82, 69, 83, 80, 79, 78, 83, 69, 128, 82, 69, 83, 79, 85, 82, 67, 69, 128, 
+    82, 69, 83, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 83, 73, 83, 84, 65, 
+    78, 67, 69, 128, 82, 69, 83, 73, 68, 69, 78, 67, 69, 128, 82, 69, 83, 
+    200, 82, 69, 82, 69, 78, 71, 71, 65, 78, 128, 82, 69, 82, 69, 75, 65, 78, 
+    128, 82, 69, 80, 82, 69, 83, 69, 78, 84, 128, 82, 69, 80, 76, 65, 67, 69, 
+    77, 69, 78, 212, 82, 69, 80, 72, 128, 82, 69, 80, 69, 84, 73, 84, 73, 79, 
+    206, 82, 69, 80, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, 128, 82, 
+    69, 80, 69, 65, 212, 82, 69, 80, 65, 89, 65, 128, 82, 69, 80, 65, 128, 
+    82, 69, 80, 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, 128, 
+    82, 69, 206, 82, 69, 77, 85, 128, 82, 69, 77, 69, 68, 89, 128, 82, 69, 
+    76, 73, 71, 73, 79, 78, 128, 82, 69, 76, 73, 69, 86, 69, 196, 82, 69, 76, 
+    69, 65, 83, 69, 128, 82, 69, 76, 65, 84, 73, 79, 78, 65, 204, 82, 69, 76, 
+    65, 84, 73, 79, 78, 128, 82, 69, 76, 65, 65, 128, 82, 69, 74, 65, 78, 
+    199, 82, 69, 73, 196, 82, 69, 71, 85, 76, 85, 83, 45, 52, 128, 82, 69, 
+    71, 85, 76, 85, 83, 45, 51, 128, 82, 69, 71, 85, 76, 85, 83, 45, 50, 128, 
+    82, 69, 71, 85, 76, 85, 83, 128, 82, 69, 71, 85, 76, 85, 211, 82, 69, 71, 
+    73, 83, 84, 69, 82, 69, 196, 82, 69, 71, 73, 79, 78, 65, 204, 82, 69, 71, 
+    73, 65, 45, 50, 128, 82, 69, 71, 73, 65, 128, 82, 69, 70, 79, 82, 77, 69, 
+    196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 82, 69, 68, 85, 80, 76, 73, 67, 
+    65, 84, 73, 79, 78, 128, 82, 69, 67, 89, 67, 76, 73, 78, 199, 82, 69, 67, 
+    89, 67, 76, 69, 196, 82, 69, 67, 84, 73, 76, 73, 78, 69, 65, 210, 82, 69, 
+    67, 84, 65, 78, 71, 85, 76, 65, 210, 82, 69, 67, 84, 65, 78, 71, 76, 69, 
+    128, 82, 69, 67, 84, 65, 78, 71, 76, 197, 82, 69, 67, 82, 69, 65, 84, 73, 
+    79, 78, 65, 204, 82, 69, 67, 79, 82, 68, 73, 78, 199, 82, 69, 67, 79, 82, 
+    68, 69, 82, 128, 82, 69, 67, 79, 82, 196, 82, 69, 67, 69, 80, 84, 73, 86, 
+    197, 82, 69, 67, 69, 73, 86, 69, 82, 128, 82, 69, 65, 76, 71, 65, 82, 45, 
+    50, 128, 82, 69, 65, 76, 71, 65, 82, 128, 82, 69, 65, 72, 77, 85, 75, 
+    128, 82, 69, 65, 67, 72, 128, 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, 
+    83, 193, 82, 65, 89, 83, 128, 82, 65, 89, 65, 78, 78, 65, 128, 82, 65, 
+    84, 73, 79, 128, 82, 65, 84, 72, 65, 128, 82, 65, 84, 72, 193, 82, 65, 
+    84, 65, 128, 82, 65, 84, 128, 82, 65, 83, 87, 65, 68, 73, 128, 82, 65, 
+    83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 81, 128, 82, 65, 80, 
+    73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 65, 128, 82, 65, 
+    78, 128, 82, 65, 77, 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 75, 72, 
+    65, 78, 71, 128, 82, 65, 75, 65, 65, 82, 65, 65, 78, 83, 65, 89, 65, 128, 
+    82, 65, 73, 83, 73, 78, 199, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, 
+    79, 87, 128, 82, 65, 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, 
+    217, 82, 65, 73, 76, 128, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 
+    82, 65, 72, 77, 65, 84, 85, 76, 76, 65, 200, 82, 65, 72, 128, 82, 65, 70, 
+    69, 128, 82, 65, 69, 77, 128, 82, 65, 68, 73, 79, 65, 67, 84, 73, 86, 
+    197, 82, 65, 68, 73, 79, 128, 82, 65, 68, 73, 207, 82, 65, 68, 201, 82, 
+    65, 68, 128, 82, 65, 196, 82, 65, 67, 81, 85, 69, 212, 82, 65, 67, 73, 
+    78, 71, 128, 82, 65, 66, 66, 73, 84, 128, 82, 65, 66, 66, 73, 212, 82, 
+    65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 51, 128, 82, 65, 50, 128, 82, 
+    65, 45, 50, 128, 82, 48, 50, 57, 128, 82, 48, 50, 56, 128, 82, 48, 50, 
+    55, 128, 82, 48, 50, 54, 128, 82, 48, 50, 53, 128, 82, 48, 50, 52, 128, 
+    82, 48, 50, 51, 128, 82, 48, 50, 50, 128, 82, 48, 50, 49, 128, 82, 48, 
+    50, 48, 128, 82, 48, 49, 57, 128, 82, 48, 49, 56, 128, 82, 48, 49, 55, 
+    128, 82, 48, 49, 54, 65, 128, 82, 48, 49, 54, 128, 82, 48, 49, 53, 128, 
+    82, 48, 49, 52, 128, 82, 48, 49, 51, 128, 82, 48, 49, 50, 128, 82, 48, 
+    49, 49, 128, 82, 48, 49, 48, 65, 128, 82, 48, 49, 48, 128, 82, 48, 48, 
+    57, 128, 82, 48, 48, 56, 128, 82, 48, 48, 55, 128, 82, 48, 48, 54, 128, 
+    82, 48, 48, 53, 128, 82, 48, 48, 52, 128, 82, 48, 48, 51, 66, 128, 82, 
+    48, 48, 51, 65, 128, 82, 48, 48, 51, 128, 82, 48, 48, 50, 65, 128, 82, 
+    48, 48, 50, 128, 82, 48, 48, 49, 128, 82, 45, 67, 82, 69, 197, 81, 89, 
+    88, 128, 81, 89, 85, 128, 81, 89, 84, 128, 81, 89, 82, 88, 128, 81, 89, 
+    82, 128, 81, 89, 80, 128, 81, 89, 79, 128, 81, 89, 73, 128, 81, 89, 69, 
+    69, 128, 81, 89, 69, 128, 81, 89, 65, 65, 128, 81, 89, 65, 128, 81, 89, 
+    128, 81, 87, 73, 128, 81, 87, 69, 69, 128, 81, 87, 69, 128, 81, 87, 65, 
+    65, 128, 81, 87, 65, 128, 81, 85, 88, 128, 81, 85, 86, 128, 81, 85, 85, 
+    86, 128, 81, 85, 85, 128, 81, 85, 84, 128, 81, 85, 83, 72, 83, 72, 65, 
+    89, 65, 128, 81, 85, 82, 88, 128, 81, 85, 82, 128, 81, 85, 80, 128, 81, 
+    85, 79, 88, 128, 81, 85, 79, 84, 197, 81, 85, 79, 84, 65, 84, 73, 79, 
+    206, 81, 85, 79, 84, 128, 81, 85, 79, 80, 128, 81, 85, 79, 128, 81, 85, 
+    75, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69, 78, 67, 69, 128, 81, 85, 73, 
+    78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85, 73, 78, 67, 85, 78, 88, 128, 
+    81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85, 73, 76, 76, 128, 81, 85, 73, 
+    67, 203, 81, 85, 73, 128, 81, 85, 70, 128, 81, 85, 69, 83, 84, 73, 79, 
+    78, 69, 196, 81, 85, 69, 83, 84, 73, 79, 78, 128, 81, 85, 69, 83, 84, 73, 
+    79, 206, 81, 85, 69, 69, 78, 128, 81, 85, 69, 69, 206, 81, 85, 69, 128, 
+    81, 85, 66, 85, 84, 83, 128, 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, 
+    85, 65, 82, 84, 69, 82, 83, 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, 
+    65, 82, 84, 69, 82, 128, 81, 85, 65, 82, 84, 69, 210, 81, 85, 65, 78, 84, 
+    73, 84, 217, 81, 85, 65, 68, 82, 85, 80, 76, 197, 81, 85, 65, 68, 82, 65, 
+    78, 84, 128, 81, 85, 65, 68, 82, 65, 78, 212, 81, 85, 65, 68, 128, 81, 
+    85, 65, 196, 81, 85, 65, 128, 81, 85, 128, 81, 208, 81, 79, 88, 128, 81, 
+    79, 84, 128, 81, 79, 80, 72, 128, 81, 79, 80, 65, 128, 81, 79, 80, 128, 
+    81, 79, 79, 128, 81, 79, 207, 81, 79, 70, 128, 81, 79, 198, 81, 79, 65, 
+    128, 81, 79, 128, 81, 78, 128, 81, 73, 88, 128, 81, 73, 84, 83, 65, 128, 
+    81, 73, 84, 128, 81, 73, 80, 128, 81, 73, 73, 128, 81, 73, 69, 88, 128, 
+    81, 73, 69, 84, 128, 81, 73, 69, 80, 128, 81, 73, 69, 128, 81, 73, 128, 
+    81, 72, 87, 73, 128, 81, 72, 87, 69, 69, 128, 81, 72, 87, 69, 128, 81, 
+    72, 87, 65, 65, 128, 81, 72, 87, 65, 128, 81, 72, 85, 128, 81, 72, 79, 
+    128, 81, 72, 73, 128, 81, 72, 69, 69, 128, 81, 72, 69, 128, 81, 72, 65, 
+    65, 128, 81, 72, 65, 128, 81, 71, 65, 128, 81, 69, 84, 65, 78, 65, 128, 
+    81, 69, 69, 128, 81, 69, 128, 81, 65, 85, 128, 81, 65, 84, 65, 78, 128, 
+    81, 65, 82, 78, 69, 217, 81, 65, 82, 128, 81, 65, 81, 128, 81, 65, 80, 
+    72, 128, 81, 65, 77, 65, 84, 83, 128, 81, 65, 77, 65, 84, 211, 81, 65, 
+    76, 193, 81, 65, 73, 82, 84, 72, 82, 65, 128, 81, 65, 73, 128, 81, 65, 
+    70, 128, 81, 65, 198, 81, 65, 68, 77, 65, 128, 81, 65, 65, 73, 128, 81, 
+    65, 65, 70, 85, 128, 81, 65, 65, 70, 128, 81, 48, 48, 55, 128, 81, 48, 
+    48, 54, 128, 81, 48, 48, 53, 128, 81, 48, 48, 52, 128, 81, 48, 48, 51, 
+    128, 81, 48, 48, 50, 128, 81, 48, 48, 49, 128, 80, 90, 128, 80, 89, 88, 
+    128, 80, 89, 84, 128, 80, 89, 82, 88, 128, 80, 89, 82, 128, 80, 89, 80, 
+    128, 80, 89, 128, 80, 87, 79, 89, 128, 80, 87, 79, 79, 128, 80, 87, 79, 
+    128, 80, 87, 207, 80, 87, 73, 73, 128, 80, 87, 73, 128, 80, 87, 69, 69, 
+    128, 80, 87, 69, 128, 80, 87, 65, 65, 128, 80, 87, 128, 80, 86, 128, 80, 
+    85, 88, 128, 80, 85, 85, 84, 128, 80, 85, 85, 128, 80, 85, 84, 82, 69, 
+    70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84, 128, 80, 85, 212, 80, 85, 
+    83, 72, 80, 73, 78, 128, 80, 85, 83, 72, 80, 73, 75, 65, 128, 80, 85, 83, 
+    72, 73, 78, 199, 80, 85, 82, 88, 128, 80, 85, 82, 83, 69, 128, 80, 85, 
+    82, 80, 76, 197, 80, 85, 82, 78, 65, 77, 65, 128, 80, 85, 82, 73, 84, 89, 
+    128, 80, 85, 82, 73, 70, 89, 128, 80, 85, 82, 128, 80, 85, 81, 128, 80, 
+    85, 80, 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 128, 
+    80, 85, 78, 71, 65, 65, 77, 128, 80, 85, 78, 71, 128, 80, 85, 78, 67, 84, 
+    85, 65, 84, 73, 79, 78, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 206, 
+    80, 85, 77, 80, 128, 80, 85, 77, 128, 80, 85, 69, 128, 80, 85, 66, 76, 
+    73, 195, 80, 85, 65, 81, 128, 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, 
+    85, 49, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, 128, 80, 
+    83, 73, 76, 201, 80, 83, 73, 70, 73, 83, 84, 79, 83, 89, 78, 65, 71, 77, 
+    65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 80, 65, 82, 65, 75, 65, 76, 69, 
+    83, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 206, 80, 83, 73, 70, 73, 
+    83, 84, 79, 76, 89, 71, 73, 83, 77, 65, 128, 80, 83, 73, 128, 80, 83, 
+    128, 80, 82, 79, 86, 69, 128, 80, 82, 79, 84, 79, 86, 65, 82, 89, 211, 
+    80, 82, 79, 84, 79, 211, 80, 82, 79, 84, 69, 67, 84, 69, 196, 80, 82, 79, 
+    83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 80, 82, 79, 80, 79, 82, 
+    84, 73, 79, 78, 65, 204, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 128, 80, 
+    82, 79, 80, 69, 82, 84, 217, 80, 82, 79, 80, 69, 76, 76, 69, 210, 80, 82, 
+    79, 79, 70, 128, 80, 82, 79, 76, 79, 78, 71, 69, 196, 80, 82, 79, 76, 65, 
+    84, 73, 79, 78, 197, 80, 82, 79, 74, 69, 67, 84, 73, 86, 69, 128, 80, 82, 
+    79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 82, 79, 71, 82, 69, 83, 83, 128, 
+    80, 82, 79, 71, 82, 65, 205, 80, 82, 79, 70, 79, 85, 78, 68, 128, 80, 82, 
+    79, 68, 85, 67, 84, 128, 80, 82, 79, 68, 85, 67, 212, 80, 82, 73, 86, 65, 
+    84, 69, 128, 80, 82, 73, 86, 65, 84, 197, 80, 82, 73, 86, 65, 67, 217, 
+    80, 82, 73, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, 80, 82, 73, 78, 84, 
+    83, 128, 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 78, 
+    67, 69, 83, 83, 128, 80, 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 
+    82, 69, 86, 73, 79, 85, 211, 80, 82, 69, 83, 69, 84, 128, 80, 82, 69, 83, 
+    69, 78, 84, 65, 84, 73, 79, 206, 80, 82, 69, 83, 67, 82, 73, 80, 84, 73, 
+    79, 206, 80, 82, 69, 80, 79, 78, 68, 69, 82, 65, 78, 67, 69, 128, 80, 82, 
+    69, 78, 75, 72, 65, 128, 80, 82, 69, 70, 65, 67, 197, 80, 82, 69, 67, 73, 
+    80, 73, 84, 65, 84, 69, 128, 80, 82, 69, 67, 69, 68, 73, 78, 199, 80, 82, 
+    69, 67, 69, 68, 69, 83, 128, 80, 82, 69, 67, 69, 68, 69, 211, 80, 82, 69, 
+    67, 69, 68, 69, 196, 80, 82, 69, 67, 69, 68, 69, 128, 80, 82, 69, 67, 69, 
+    68, 197, 80, 82, 65, 77, 45, 80, 73, 73, 128, 80, 82, 65, 77, 45, 80, 73, 
+    201, 80, 82, 65, 77, 45, 77, 85, 79, 89, 128, 80, 82, 65, 77, 45, 77, 85, 
+    79, 217, 80, 82, 65, 77, 45, 66, 85, 79, 78, 128, 80, 82, 65, 77, 45, 66, 
+    85, 79, 206, 80, 82, 65, 77, 45, 66, 69, 73, 128, 80, 82, 65, 77, 45, 66, 
+    69, 201, 80, 82, 65, 77, 128, 80, 82, 65, 205, 80, 82, 128, 80, 80, 86, 
+    128, 80, 80, 77, 128, 80, 80, 65, 128, 80, 79, 89, 128, 80, 79, 88, 128, 
+    80, 79, 87, 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 87, 68, 69, 82, 
+    69, 196, 80, 79, 87, 68, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 85, 
+    76, 84, 82, 217, 80, 79, 85, 67, 72, 128, 80, 79, 84, 65, 84, 79, 128, 
+    80, 79, 84, 65, 66, 76, 197, 80, 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 
+    84, 73, 79, 206, 80, 79, 83, 84, 66, 79, 88, 128, 80, 79, 83, 84, 65, 
+    204, 80, 79, 83, 84, 128, 80, 79, 83, 212, 80, 79, 83, 83, 69, 83, 83, 
+    73, 79, 78, 128, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, 
+    69, 67, 84, 85, 211, 80, 79, 80, 80, 69, 82, 128, 80, 79, 80, 128, 80, 
+    79, 208, 80, 79, 79, 68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, 
+    79, 128, 80, 79, 206, 80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, 
+    197, 80, 79, 76, 73, 83, 72, 128, 80, 79, 76, 73, 67, 197, 80, 79, 76, 
+    201, 80, 79, 76, 69, 128, 80, 79, 76, 197, 80, 79, 75, 82, 89, 84, 73, 
+    69, 128, 80, 79, 75, 79, 74, 73, 128, 80, 79, 73, 78, 84, 211, 80, 79, 
+    73, 78, 84, 79, 128, 80, 79, 73, 78, 84, 69, 82, 128, 80, 79, 73, 78, 84, 
+    69, 196, 80, 79, 73, 78, 84, 128, 80, 79, 73, 78, 212, 80, 79, 69, 84, 
+    82, 217, 80, 79, 69, 84, 73, 195, 80, 79, 68, 65, 84, 85, 83, 128, 80, 
+    79, 65, 128, 80, 79, 128, 80, 207, 80, 78, 69, 85, 77, 65, 84, 65, 128, 
+    80, 76, 85, 84, 79, 128, 80, 76, 85, 83, 45, 77, 73, 78, 85, 211, 80, 76, 
+    85, 83, 128, 80, 76, 85, 82, 65, 76, 128, 80, 76, 85, 77, 69, 196, 80, 
+    76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, 85, 71, 128, 80, 76, 85, 
+    128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80, 76, 69, 84, 
+    72, 82, 79, 78, 128, 80, 76, 68, 128, 80, 76, 65, 89, 73, 78, 199, 80, 
+    76, 65, 83, 84, 73, 67, 83, 128, 80, 76, 65, 78, 69, 128, 80, 76, 65, 78, 
+    197, 80, 76, 65, 78, 67, 203, 80, 76, 65, 75, 128, 80, 76, 65, 71, 73, 
+    79, 211, 80, 76, 65, 67, 69, 72, 79, 76, 68, 69, 210, 80, 76, 65, 67, 
+    197, 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 128, 80, 73, 
+    90, 90, 65, 128, 80, 73, 88, 128, 80, 73, 87, 82, 128, 80, 73, 84, 67, 
+    72, 70, 79, 82, 75, 128, 80, 73, 84, 67, 72, 70, 79, 82, 203, 80, 73, 84, 
+    128, 80, 73, 83, 84, 79, 76, 128, 80, 73, 83, 69, 76, 69, 72, 128, 80, 
+    73, 83, 67, 69, 83, 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, 73, 199, 
+    80, 73, 82, 73, 69, 69, 78, 128, 80, 73, 80, 73, 78, 71, 128, 80, 73, 80, 
+    65, 69, 77, 71, 66, 73, 69, 69, 128, 80, 73, 80, 65, 69, 77, 66, 65, 128, 
+    80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204, 80, 73, 78, 69, 65, 80, 
+    80, 76, 69, 128, 80, 73, 78, 197, 80, 73, 78, 65, 82, 66, 79, 82, 65, 83, 
+    128, 80, 73, 76, 76, 128, 80, 73, 76, 197, 80, 73, 76, 67, 82, 79, 215, 
+    80, 73, 75, 85, 82, 85, 128, 80, 73, 75, 79, 128, 80, 73, 71, 128, 80, 
+    73, 199, 80, 73, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 72, 73, 69, 85, 
+    84, 72, 128, 80, 73, 69, 85, 80, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 
+    128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 
+    128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 
+    72, 128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 
+    128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 
+    128, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 
+    80, 73, 69, 85, 80, 45, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, 
+    72, 128, 80, 73, 69, 85, 80, 45, 82, 73, 69, 85, 76, 128, 80, 73, 69, 85, 
+    80, 45, 78, 73, 69, 85, 78, 128, 80, 73, 69, 85, 80, 45, 77, 73, 69, 85, 
+    77, 128, 80, 73, 69, 85, 80, 45, 75, 72, 73, 69, 85, 75, 72, 128, 80, 73, 
+    69, 85, 80, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 67, 72, 
+    73, 69, 85, 67, 72, 128, 80, 73, 69, 85, 208, 80, 73, 69, 84, 128, 80, 
+    73, 69, 80, 128, 80, 73, 69, 69, 84, 128, 80, 73, 69, 69, 81, 128, 80, 
+    73, 69, 67, 69, 128, 80, 73, 69, 128, 80, 73, 67, 75, 69, 84, 128, 80, 
+    73, 67, 75, 128, 80, 73, 65, 83, 85, 84, 79, 82, 85, 128, 80, 73, 65, 83, 
+    77, 193, 80, 73, 65, 78, 79, 128, 80, 201, 80, 72, 87, 65, 128, 80, 72, 
+    85, 84, 72, 65, 79, 128, 80, 72, 85, 210, 80, 72, 85, 78, 71, 128, 80, 
+    72, 82, 65, 83, 69, 128, 80, 72, 79, 78, 69, 83, 128, 80, 72, 79, 69, 78, 
+    73, 67, 73, 65, 206, 80, 72, 79, 65, 128, 80, 72, 79, 128, 80, 72, 207, 
+    80, 72, 78, 65, 69, 203, 80, 72, 73, 78, 84, 72, 85, 128, 80, 72, 73, 76, 
+    79, 83, 79, 80, 72, 69, 82, 211, 80, 72, 73, 76, 73, 80, 80, 73, 78, 197, 
+    80, 72, 73, 69, 85, 80, 72, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 72, 
+    73, 69, 85, 80, 72, 45, 83, 73, 79, 83, 128, 80, 72, 73, 69, 85, 80, 72, 
+    45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, 85, 80, 72, 45, 72, 73, 69, 
+    85, 72, 128, 80, 72, 73, 69, 85, 80, 200, 80, 72, 73, 128, 80, 72, 201, 
+    80, 72, 69, 69, 128, 80, 72, 69, 128, 80, 72, 65, 83, 69, 45, 198, 80, 
+    72, 65, 83, 69, 45, 194, 80, 72, 65, 82, 89, 78, 71, 69, 65, 204, 80, 72, 
+    65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65, 77, 128, 80, 72, 65, 73, 
+    83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 80, 193, 80, 72, 65, 65, 82, 75, 
+    65, 65, 128, 80, 72, 65, 65, 128, 80, 72, 65, 128, 80, 71, 128, 80, 70, 
+    128, 80, 69, 85, 88, 128, 80, 69, 85, 84, 65, 69, 128, 80, 69, 85, 84, 
+    128, 80, 69, 84, 65, 83, 84, 79, 75, 79, 85, 70, 73, 83, 77, 65, 128, 80, 
+    69, 84, 65, 83, 84, 73, 128, 80, 69, 84, 65, 83, 77, 65, 128, 80, 69, 84, 
+    65, 76, 76, 69, 196, 80, 69, 83, 79, 128, 80, 69, 83, 207, 80, 69, 83, 
+    72, 50, 128, 80, 69, 83, 69, 84, 193, 80, 69, 211, 80, 69, 82, 84, 72, 
+    207, 80, 69, 82, 83, 80, 69, 67, 84, 73, 86, 69, 128, 80, 69, 82, 83, 79, 
+    78, 65, 204, 80, 69, 82, 83, 79, 78, 128, 80, 69, 82, 83, 79, 206, 80, 
+    69, 82, 83, 73, 65, 206, 80, 69, 82, 83, 69, 86, 69, 82, 73, 78, 199, 80, 
+    69, 82, 80, 69, 78, 68, 73, 67, 85, 76, 65, 82, 128, 80, 69, 82, 80, 69, 
+    78, 68, 73, 67, 85, 76, 65, 210, 80, 69, 82, 77, 73, 84, 84, 69, 196, 80, 
+    69, 82, 77, 65, 78, 69, 78, 212, 80, 69, 82, 73, 83, 80, 79, 77, 69, 78, 
+    73, 128, 80, 69, 82, 73, 83, 80, 79, 77, 69, 78, 201, 80, 69, 82, 70, 79, 
+    82, 77, 73, 78, 199, 80, 69, 82, 70, 69, 67, 84, 85, 205, 80, 69, 82, 70, 
+    69, 67, 84, 65, 128, 80, 69, 82, 70, 69, 67, 84, 193, 80, 69, 82, 67, 85, 
+    83, 83, 73, 86, 69, 128, 80, 69, 82, 67, 69, 78, 212, 80, 69, 80, 69, 84, 
+    128, 80, 69, 80, 69, 212, 80, 69, 79, 82, 84, 200, 80, 69, 79, 80, 76, 
+    69, 128, 80, 69, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 
+    82, 65, 77, 128, 80, 69, 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85, 
+    128, 80, 69, 78, 83, 73, 86, 197, 80, 69, 78, 78, 217, 80, 69, 78, 73, 
+    72, 73, 128, 80, 69, 78, 71, 85, 73, 78, 128, 80, 69, 78, 71, 75, 65, 76, 
+    128, 80, 69, 78, 69, 84, 82, 65, 84, 73, 79, 78, 128, 80, 69, 78, 67, 73, 
+    76, 128, 80, 69, 76, 65, 83, 84, 79, 78, 128, 80, 69, 76, 65, 83, 84, 79, 
+    206, 80, 69, 73, 84, 72, 128, 80, 69, 72, 69, 72, 128, 80, 69, 72, 69, 
+    200, 80, 69, 72, 128, 80, 69, 200, 80, 69, 69, 90, 73, 128, 80, 69, 69, 
+    83, 72, 73, 128, 80, 69, 69, 80, 128, 80, 69, 69, 77, 128, 80, 69, 69, 
+    128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 83, 128, 80, 69, 68, 69, 83, 
+    84, 82, 73, 65, 78, 128, 80, 69, 68, 69, 83, 84, 65, 76, 128, 80, 69, 68, 
+    69, 83, 84, 65, 204, 80, 69, 68, 65, 204, 80, 69, 65, 67, 72, 128, 80, 
+    69, 65, 67, 69, 128, 80, 69, 65, 67, 197, 80, 68, 73, 128, 80, 68, 70, 
+    128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82, 128, 80, 65, 89, 69, 
+    82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128, 80, 65, 89, 128, 80, 
+    65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, 89, 65, 
+    78, 73, 128, 80, 65, 85, 128, 80, 65, 84, 84, 69, 82, 78, 128, 80, 65, 
+    84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, 200, 80, 65, 84, 65, 75, 
+    128, 80, 65, 84, 65, 72, 128, 80, 65, 84, 128, 80, 65, 83, 85, 81, 128, 
+    80, 65, 83, 83, 80, 79, 82, 212, 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, 
+    76, 76, 45, 85, 80, 45, 79, 85, 84, 80, 85, 212, 80, 65, 83, 83, 73, 86, 
+    69, 45, 80, 85, 76, 76, 45, 68, 79, 87, 78, 45, 79, 85, 84, 80, 85, 212, 
+    80, 65, 83, 72, 84, 65, 128, 80, 65, 83, 72, 65, 69, 128, 80, 65, 83, 69, 
+    81, 128, 80, 65, 83, 65, 78, 71, 65, 206, 80, 65, 82, 85, 77, 128, 80, 
+    65, 82, 84, 217, 80, 65, 82, 84, 78, 69, 82, 83, 72, 73, 208, 80, 65, 82, 
+    84, 73, 65, 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 69, 196, 80, 65, 82, 
+    84, 73, 65, 204, 80, 65, 82, 84, 72, 73, 65, 206, 80, 65, 82, 212, 80, 
+    65, 82, 73, 67, 72, 79, 78, 128, 80, 65, 82, 69, 83, 84, 73, 71, 77, 69, 
+    78, 79, 206, 80, 65, 82, 69, 82, 69, 78, 128, 80, 65, 82, 69, 78, 84, 72, 
+    69, 83, 73, 83, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 211, 80, 65, 
+    82, 65, 80, 72, 82, 65, 83, 197, 80, 65, 82, 65, 76, 76, 69, 76, 79, 71, 
+    82, 65, 77, 128, 80, 65, 82, 65, 76, 76, 69, 76, 128, 80, 65, 82, 65, 76, 
+    76, 69, 204, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75, 73, 128, 80, 65, 82, 
+    65, 75, 76, 73, 84, 73, 75, 201, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 
+    193, 80, 65, 82, 65, 71, 82, 65, 80, 72, 79, 83, 128, 80, 65, 82, 65, 71, 
+    82, 65, 80, 72, 128, 80, 65, 82, 65, 71, 82, 65, 80, 200, 80, 65, 82, 65, 
+    128, 80, 65, 82, 128, 80, 65, 80, 89, 82, 85, 83, 128, 80, 65, 80, 69, 
+    82, 67, 76, 73, 80, 128, 80, 65, 80, 69, 210, 80, 65, 80, 128, 80, 65, 
+    208, 80, 65, 207, 80, 65, 78, 89, 85, 75, 85, 128, 80, 65, 78, 89, 73, 
+    75, 85, 128, 80, 65, 78, 89, 69, 67, 69, 75, 128, 80, 65, 78, 89, 65, 78, 
+    71, 71, 65, 128, 80, 65, 78, 89, 65, 75, 82, 65, 128, 80, 65, 78, 84, 73, 
+    128, 80, 65, 78, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 65, 78, 
+    83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 
+    128, 80, 65, 78, 79, 78, 71, 79, 78, 65, 78, 128, 80, 65, 78, 79, 76, 79, 
+    78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 80, 65, 78, 71, 82, 
+    65, 78, 71, 75, 69, 80, 128, 80, 65, 78, 71, 79, 76, 65, 84, 128, 80, 65, 
+    78, 71, 76, 79, 78, 71, 128, 80, 65, 78, 71, 76, 65, 89, 65, 82, 128, 80, 
+    65, 78, 71, 75, 79, 78, 128, 80, 65, 78, 71, 75, 65, 84, 128, 80, 65, 78, 
+    71, 72, 85, 76, 85, 128, 80, 65, 78, 71, 128, 80, 65, 78, 69, 85, 76, 69, 
+    85, 78, 71, 128, 80, 65, 78, 68, 193, 80, 65, 78, 65, 69, 76, 65, 69, 78, 
+    71, 128, 80, 65, 78, 128, 80, 65, 77, 85, 78, 71, 75, 65, 72, 128, 80, 
+    65, 77, 85, 68, 80, 79, 68, 128, 80, 65, 77, 83, 72, 65, 69, 128, 80, 65, 
+    77, 80, 72, 89, 76, 73, 65, 206, 80, 65, 77, 73, 78, 71, 75, 65, 76, 128, 
+    80, 65, 77, 69, 80, 69, 84, 128, 80, 65, 77, 69, 78, 69, 78, 71, 128, 80, 
+    65, 77, 65, 68, 65, 128, 80, 65, 77, 65, 65, 69, 72, 128, 80, 65, 76, 85, 
+    84, 65, 128, 80, 65, 76, 79, 67, 72, 75, 65, 128, 80, 65, 76, 205, 80, 
+    65, 76, 76, 65, 87, 65, 128, 80, 65, 76, 76, 65, 83, 128, 80, 65, 76, 69, 
+    84, 84, 69, 128, 80, 65, 76, 65, 85, 78, 199, 80, 65, 76, 65, 84, 65, 76, 
+    73, 90, 69, 196, 80, 65, 76, 65, 84, 65, 76, 73, 90, 65, 84, 73, 79, 78, 
+    128, 80, 65, 76, 65, 84, 65, 204, 80, 65, 75, 80, 65, 203, 80, 65, 73, 
+    89, 65, 78, 78, 79, 73, 128, 80, 65, 73, 82, 84, 72, 82, 65, 128, 80, 65, 
+    73, 82, 69, 196, 80, 65, 73, 128, 80, 65, 72, 76, 65, 86, 201, 80, 65, 
+    72, 128, 80, 65, 71, 69, 82, 128, 80, 65, 71, 197, 80, 65, 68, 77, 193, 
+    80, 65, 68, 68, 73, 78, 199, 80, 65, 68, 193, 80, 65, 68, 128, 80, 65, 
+    67, 75, 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69, 128, 80, 65, 65, 84, 
+    85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80, 65, 65, 82, 65, 69, 
+    128, 80, 65, 65, 77, 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, 
+    76, 76, 65, 128, 80, 65, 65, 128, 80, 50, 128, 80, 48, 49, 49, 128, 80, 
+    48, 49, 48, 128, 80, 48, 48, 57, 128, 80, 48, 48, 56, 128, 80, 48, 48, 
+    55, 128, 80, 48, 48, 54, 128, 80, 48, 48, 53, 128, 80, 48, 48, 52, 128, 
+    80, 48, 48, 51, 65, 128, 80, 48, 48, 51, 128, 80, 48, 48, 50, 128, 80, 
+    48, 48, 49, 65, 128, 80, 48, 48, 49, 128, 79, 89, 82, 65, 78, 73, 83, 77, 
+    193, 79, 89, 65, 78, 78, 65, 128, 79, 88, 73, 65, 128, 79, 88, 73, 193, 
+    79, 88, 69, 73, 65, 201, 79, 88, 69, 73, 193, 79, 86, 69, 82, 82, 73, 68, 
+    69, 128, 79, 86, 69, 82, 76, 79, 78, 199, 79, 86, 69, 82, 76, 73, 78, 69, 
+    128, 79, 86, 69, 82, 76, 65, 89, 128, 79, 86, 69, 82, 76, 65, 80, 80, 73, 
+    78, 199, 79, 86, 69, 82, 76, 65, 73, 68, 128, 79, 86, 69, 82, 66, 65, 82, 
+    128, 79, 86, 65, 204, 79, 86, 128, 79, 85, 84, 76, 73, 78, 69, 196, 79, 
+    85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, 85, 84, 66, 79, 
+    216, 79, 85, 78, 75, 73, 193, 79, 85, 78, 67, 69, 128, 79, 85, 78, 67, 
+    197, 79, 84, 85, 128, 79, 84, 84, 65, 86, 193, 79, 84, 84, 128, 79, 84, 
+    72, 65, 76, 65, 206, 79, 84, 72, 65, 76, 128, 79, 83, 77, 65, 78, 89, 
+    193, 79, 83, 67, 128, 79, 82, 84, 72, 79, 71, 79, 78, 65, 204, 79, 82, 
+    84, 72, 79, 68, 79, 216, 79, 82, 78, 65, 84, 197, 79, 82, 78, 65, 77, 69, 
+    78, 84, 128, 79, 82, 78, 65, 77, 69, 78, 212, 79, 82, 75, 72, 79, 206, 
+    79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, 82, 69, 
+    45, 50, 128, 79, 82, 68, 73, 78, 65, 204, 79, 82, 68, 69, 210, 79, 82, 
+    67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 197, 79, 80, 84, 73, 79, 206, 
+    79, 80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 83, 73, 79, 78, 128, 
+    79, 80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, 78, 
+    199, 79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 67, 72, 85, 83, 
+    128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, 
+    210, 79, 80, 69, 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73, 78, 199, 
+    79, 80, 69, 78, 45, 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 73, 78, 
+    69, 196, 79, 80, 69, 78, 45, 72, 69, 65, 68, 69, 196, 79, 80, 69, 78, 45, 
+    67, 73, 82, 67, 85, 73, 84, 45, 79, 85, 84, 80, 85, 212, 79, 79, 90, 69, 
+    128, 79, 79, 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77, 85, 
+    128, 79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73, 76, 73, 128, 79, 78, 
+    85, 128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79, 78, 75, 65, 82, 128, 
+    79, 78, 69, 83, 69, 76, 70, 128, 79, 78, 69, 45, 87, 65, 217, 79, 78, 69, 
+    45, 84, 72, 73, 82, 84, 89, 128, 79, 78, 69, 45, 76, 73, 78, 197, 79, 78, 
+    67, 79, 77, 73, 78, 199, 79, 78, 65, 80, 128, 79, 77, 73, 83, 83, 73, 79, 
+    206, 79, 77, 73, 67, 82, 79, 78, 128, 79, 77, 73, 67, 82, 79, 206, 79, 
+    77, 69, 71, 65, 128, 79, 77, 69, 71, 193, 79, 77, 65, 76, 79, 78, 128, 
+    79, 76, 73, 86, 69, 128, 79, 76, 73, 71, 79, 206, 79, 76, 68, 128, 79, 
+    75, 84, 207, 79, 75, 65, 82, 65, 128, 79, 75, 65, 82, 193, 79, 74, 73, 
+    66, 87, 65, 217, 79, 74, 69, 79, 78, 128, 79, 73, 76, 128, 79, 72, 77, 
+    128, 79, 72, 205, 79, 71, 82, 69, 128, 79, 71, 79, 78, 69, 75, 128, 79, 
+    71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 70, 70, 73, 67, 69, 82, 
+    128, 79, 70, 70, 73, 67, 69, 128, 79, 70, 70, 73, 67, 197, 79, 70, 70, 
+    128, 79, 69, 89, 128, 79, 69, 75, 128, 79, 68, 69, 78, 128, 79, 68, 196, 
+    79, 67, 84, 79, 80, 85, 83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 
+    84, 69, 212, 79, 67, 210, 79, 67, 76, 79, 67, 75, 128, 79, 67, 67, 76, 
+    85, 83, 73, 79, 78, 128, 79, 66, 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, 
+    79, 66, 79, 76, 211, 79, 66, 79, 204, 79, 66, 79, 70, 73, 76, 73, 128, 
+    79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, 67, 212, 79, 66, 69, 76, 85, 
+    83, 128, 79, 66, 69, 76, 79, 83, 128, 79, 66, 128, 79, 65, 89, 128, 79, 
+    65, 75, 128, 79, 65, 66, 79, 65, 70, 73, 76, 73, 128, 79, 193, 79, 48, 
+    53, 49, 128, 79, 48, 53, 48, 66, 128, 79, 48, 53, 48, 65, 128, 79, 48, 
+    53, 48, 128, 79, 48, 52, 57, 128, 79, 48, 52, 56, 128, 79, 48, 52, 55, 
+    128, 79, 48, 52, 54, 128, 79, 48, 52, 53, 128, 79, 48, 52, 52, 128, 79, 
+    48, 52, 51, 128, 79, 48, 52, 50, 128, 79, 48, 52, 49, 128, 79, 48, 52, 
+    48, 128, 79, 48, 51, 57, 128, 79, 48, 51, 56, 128, 79, 48, 51, 55, 128, 
+    79, 48, 51, 54, 68, 128, 79, 48, 51, 54, 67, 128, 79, 48, 51, 54, 66, 
+    128, 79, 48, 51, 54, 65, 128, 79, 48, 51, 54, 128, 79, 48, 51, 53, 128, 
+    79, 48, 51, 52, 128, 79, 48, 51, 51, 65, 128, 79, 48, 51, 51, 128, 79, 
+    48, 51, 50, 128, 79, 48, 51, 49, 128, 79, 48, 51, 48, 65, 128, 79, 48, 
+    51, 48, 128, 79, 48, 50, 57, 65, 128, 79, 48, 50, 57, 128, 79, 48, 50, 
+    56, 128, 79, 48, 50, 55, 128, 79, 48, 50, 54, 128, 79, 48, 50, 53, 65, 
+    128, 79, 48, 50, 53, 128, 79, 48, 50, 52, 65, 128, 79, 48, 50, 52, 128, 
+    79, 48, 50, 51, 128, 79, 48, 50, 50, 128, 79, 48, 50, 49, 128, 79, 48, 
+    50, 48, 65, 128, 79, 48, 50, 48, 128, 79, 48, 49, 57, 65, 128, 79, 48, 
+    49, 57, 128, 79, 48, 49, 56, 128, 79, 48, 49, 55, 128, 79, 48, 49, 54, 
+    128, 79, 48, 49, 53, 128, 79, 48, 49, 52, 128, 79, 48, 49, 51, 128, 79, 
+    48, 49, 50, 128, 79, 48, 49, 49, 128, 79, 48, 49, 48, 67, 128, 79, 48, 
+    49, 48, 66, 128, 79, 48, 49, 48, 65, 128, 79, 48, 49, 48, 128, 79, 48, 
+    48, 57, 128, 79, 48, 48, 56, 128, 79, 48, 48, 55, 128, 79, 48, 48, 54, 
+    70, 128, 79, 48, 48, 54, 69, 128, 79, 48, 48, 54, 68, 128, 79, 48, 48, 
+    54, 67, 128, 79, 48, 48, 54, 66, 128, 79, 48, 48, 54, 65, 128, 79, 48, 
+    48, 54, 128, 79, 48, 48, 53, 65, 128, 79, 48, 48, 53, 128, 79, 48, 48, 
+    52, 128, 79, 48, 48, 51, 128, 79, 48, 48, 50, 128, 79, 48, 48, 49, 65, 
+    128, 79, 48, 48, 49, 128, 79, 45, 89, 69, 128, 79, 45, 79, 45, 73, 128, 
+    79, 45, 69, 128, 78, 90, 89, 88, 128, 78, 90, 89, 84, 128, 78, 90, 89, 
+    82, 88, 128, 78, 90, 89, 82, 128, 78, 90, 89, 80, 128, 78, 90, 89, 128, 
+    78, 90, 85, 88, 128, 78, 90, 85, 82, 88, 128, 78, 90, 85, 82, 128, 78, 
+    90, 85, 81, 128, 78, 90, 85, 80, 128, 78, 90, 85, 79, 88, 128, 78, 90, 
+    85, 79, 128, 78, 90, 85, 206, 78, 90, 85, 128, 78, 90, 79, 88, 128, 78, 
+    90, 79, 80, 128, 78, 90, 73, 88, 128, 78, 90, 73, 84, 128, 78, 90, 73, 
+    80, 128, 78, 90, 73, 69, 88, 128, 78, 90, 73, 69, 80, 128, 78, 90, 73, 
+    69, 128, 78, 90, 73, 128, 78, 90, 69, 88, 128, 78, 90, 69, 85, 77, 128, 
+    78, 90, 69, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 
+    81, 128, 78, 90, 65, 80, 128, 78, 90, 65, 128, 78, 90, 193, 78, 89, 87, 
+    65, 128, 78, 89, 85, 88, 128, 78, 89, 85, 85, 128, 78, 89, 85, 84, 128, 
+    78, 89, 85, 80, 128, 78, 89, 85, 79, 88, 128, 78, 89, 85, 79, 80, 128, 
+    78, 89, 85, 79, 128, 78, 89, 85, 69, 128, 78, 89, 85, 128, 78, 89, 79, 
+    88, 128, 78, 89, 79, 84, 128, 78, 89, 79, 80, 128, 78, 89, 79, 79, 128, 
+    78, 89, 79, 65, 128, 78, 89, 79, 128, 78, 89, 74, 65, 128, 78, 89, 73, 
+    88, 128, 78, 89, 73, 84, 128, 78, 89, 73, 212, 78, 89, 73, 211, 78, 89, 
+    73, 210, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, 68, 79, 128, 78, 89, 
+    73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69, 84, 128, 78, 89, 
+    73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, 128, 78, 89, 201, 78, 
+    89, 72, 65, 128, 78, 89, 69, 84, 128, 78, 89, 69, 212, 78, 89, 69, 72, 
+    128, 78, 89, 69, 200, 78, 89, 69, 69, 128, 78, 89, 69, 128, 78, 89, 196, 
+    78, 89, 67, 65, 128, 78, 89, 65, 85, 128, 78, 89, 65, 73, 128, 78, 89, 
+    65, 72, 128, 78, 89, 65, 69, 77, 65, 69, 128, 78, 89, 65, 65, 128, 78, 
+    87, 79, 79, 128, 78, 87, 79, 128, 78, 87, 73, 73, 128, 78, 87, 73, 128, 
+    78, 87, 69, 128, 78, 87, 65, 65, 128, 78, 87, 65, 128, 78, 87, 128, 78, 
+    86, 128, 78, 85, 88, 128, 78, 85, 85, 78, 128, 78, 85, 85, 128, 78, 85, 
+    84, 73, 76, 76, 85, 128, 78, 85, 84, 128, 78, 85, 212, 78, 85, 82, 88, 
+    128, 78, 85, 82, 128, 78, 85, 80, 128, 78, 85, 79, 88, 128, 78, 85, 79, 
+    80, 128, 78, 85, 79, 128, 78, 85, 78, 85, 90, 128, 78, 85, 78, 85, 218, 
+    78, 85, 78, 71, 128, 78, 85, 78, 65, 86, 85, 212, 78, 85, 78, 65, 86, 73, 
+    203, 78, 85, 78, 128, 78, 85, 206, 78, 85, 77, 69, 82, 207, 78, 85, 77, 
+    69, 82, 65, 84, 79, 210, 78, 85, 77, 69, 82, 65, 204, 78, 85, 77, 66, 69, 
+    82, 83, 128, 78, 85, 77, 66, 69, 82, 128, 78, 85, 77, 128, 78, 85, 76, 
+    76, 128, 78, 85, 76, 204, 78, 85, 76, 128, 78, 85, 75, 84, 65, 128, 78, 
+    85, 69, 78, 71, 128, 78, 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, 
+    65, 69, 128, 78, 85, 49, 49, 128, 78, 85, 49, 177, 78, 85, 48, 50, 50, 
+    65, 128, 78, 85, 48, 50, 50, 128, 78, 85, 48, 50, 49, 128, 78, 85, 48, 
+    50, 48, 128, 78, 85, 48, 49, 57, 128, 78, 85, 48, 49, 56, 65, 128, 78, 
+    85, 48, 49, 56, 128, 78, 85, 48, 49, 55, 128, 78, 85, 48, 49, 54, 128, 
+    78, 85, 48, 49, 53, 128, 78, 85, 48, 49, 52, 128, 78, 85, 48, 49, 51, 
+    128, 78, 85, 48, 49, 50, 128, 78, 85, 48, 49, 49, 65, 128, 78, 85, 48, 
+    49, 49, 128, 78, 85, 48, 49, 48, 65, 128, 78, 85, 48, 49, 48, 128, 78, 
+    85, 48, 48, 57, 128, 78, 85, 48, 48, 56, 128, 78, 85, 48, 48, 55, 128, 
+    78, 85, 48, 48, 54, 128, 78, 85, 48, 48, 53, 128, 78, 85, 48, 48, 52, 
+    128, 78, 85, 48, 48, 51, 128, 78, 85, 48, 48, 50, 128, 78, 85, 48, 48, 
+    49, 128, 78, 84, 85, 85, 128, 78, 84, 85, 77, 128, 78, 84, 213, 78, 84, 
+    79, 81, 80, 69, 78, 128, 78, 84, 73, 69, 197, 78, 84, 69, 85, 78, 71, 66, 
+    65, 128, 78, 84, 69, 85, 77, 128, 78, 84, 69, 78, 128, 78, 84, 69, 69, 
+    128, 78, 84, 65, 80, 128, 78, 84, 65, 208, 78, 84, 65, 65, 128, 78, 83, 
+    85, 79, 212, 78, 83, 85, 78, 128, 78, 83, 85, 77, 128, 78, 83, 79, 77, 
+    128, 78, 83, 73, 69, 69, 84, 128, 78, 83, 73, 69, 69, 80, 128, 78, 83, 
+    73, 69, 69, 128, 78, 83, 72, 85, 84, 128, 78, 83, 72, 85, 212, 78, 83, 
+    72, 85, 79, 80, 128, 78, 83, 72, 85, 69, 128, 78, 83, 72, 73, 69, 69, 
+    128, 78, 83, 72, 69, 69, 128, 78, 83, 72, 65, 81, 128, 78, 83, 72, 65, 
+    128, 78, 83, 69, 85, 65, 69, 78, 128, 78, 83, 69, 78, 128, 78, 83, 65, 
+    128, 78, 82, 89, 88, 128, 78, 82, 89, 84, 128, 78, 82, 89, 82, 88, 128, 
+    78, 82, 89, 82, 128, 78, 82, 89, 80, 128, 78, 82, 89, 128, 78, 82, 85, 
+    88, 128, 78, 82, 85, 84, 128, 78, 82, 85, 82, 88, 128, 78, 82, 85, 82, 
+    128, 78, 82, 85, 80, 128, 78, 82, 85, 128, 78, 82, 79, 88, 128, 78, 82, 
+    79, 80, 128, 78, 82, 79, 128, 78, 82, 69, 88, 128, 78, 82, 69, 84, 128, 
+    78, 82, 69, 80, 128, 78, 82, 69, 128, 78, 82, 65, 88, 128, 78, 82, 65, 
+    84, 128, 78, 82, 65, 80, 128, 78, 82, 65, 128, 78, 79, 89, 128, 78, 79, 
+    88, 128, 78, 79, 86, 69, 77, 66, 69, 82, 128, 78, 79, 84, 84, 79, 128, 
+    78, 79, 84, 69, 83, 128, 78, 79, 84, 69, 72, 69, 65, 68, 128, 78, 79, 84, 
+    69, 72, 69, 65, 196, 78, 79, 84, 69, 66, 79, 79, 75, 128, 78, 79, 84, 69, 
+    66, 79, 79, 203, 78, 79, 84, 69, 128, 78, 79, 84, 197, 78, 79, 84, 67, 
+    72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 212, 78, 
+    79, 83, 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 72, 
+    69, 82, 206, 78, 79, 82, 84, 200, 78, 79, 82, 77, 65, 204, 78, 79, 210, 
+    78, 79, 80, 128, 78, 79, 79, 78, 85, 128, 78, 79, 79, 128, 78, 79, 78, 
+    70, 79, 82, 75, 73, 78, 71, 128, 78, 79, 78, 45, 80, 79, 84, 65, 66, 76, 
+    197, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, 128, 78, 79, 78, 45, 66, 82, 
+    69, 65, 75, 73, 78, 199, 78, 79, 77, 73, 78, 65, 204, 78, 79, 75, 72, 85, 
+    75, 128, 78, 79, 68, 69, 128, 78, 79, 65, 128, 78, 79, 45, 66, 82, 69, 
+    65, 203, 78, 78, 85, 85, 128, 78, 78, 85, 128, 78, 78, 79, 79, 128, 78, 
+    78, 79, 128, 78, 78, 78, 85, 85, 128, 78, 78, 78, 85, 128, 78, 78, 78, 
+    79, 79, 128, 78, 78, 78, 79, 128, 78, 78, 78, 73, 73, 128, 78, 78, 78, 
+    73, 128, 78, 78, 78, 69, 69, 128, 78, 78, 78, 69, 128, 78, 78, 78, 65, 
+    85, 128, 78, 78, 78, 65, 73, 128, 78, 78, 78, 65, 65, 128, 78, 78, 78, 
+    65, 128, 78, 78, 78, 128, 78, 78, 72, 65, 128, 78, 78, 71, 79, 79, 128, 
+    78, 78, 71, 79, 128, 78, 78, 71, 73, 73, 128, 78, 78, 71, 73, 128, 78, 
+    78, 71, 65, 65, 128, 78, 78, 71, 65, 128, 78, 78, 71, 128, 78, 78, 66, 
+    83, 80, 128, 78, 77, 128, 78, 76, 48, 50, 48, 128, 78, 76, 48, 49, 57, 
+    128, 78, 76, 48, 49, 56, 128, 78, 76, 48, 49, 55, 65, 128, 78, 76, 48, 
+    49, 55, 128, 78, 76, 48, 49, 54, 128, 78, 76, 48, 49, 53, 128, 78, 76, 
+    48, 49, 52, 128, 78, 76, 48, 49, 51, 128, 78, 76, 48, 49, 50, 128, 78, 
+    76, 48, 49, 49, 128, 78, 76, 48, 49, 48, 128, 78, 76, 48, 48, 57, 128, 
+    78, 76, 48, 48, 56, 128, 78, 76, 48, 48, 55, 128, 78, 76, 48, 48, 54, 
+    128, 78, 76, 48, 48, 53, 65, 128, 78, 76, 48, 48, 53, 128, 78, 76, 48, 
+    48, 52, 128, 78, 76, 48, 48, 51, 128, 78, 76, 48, 48, 50, 128, 78, 76, 
+    48, 48, 49, 128, 78, 76, 128, 78, 75, 79, 77, 128, 78, 75, 207, 78, 75, 
+    73, 78, 68, 73, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, 74, 89, 88, 
+    128, 78, 74, 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, 89, 82, 128, 
+    78, 74, 89, 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, 78, 74, 85, 
+    82, 88, 128, 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, 78, 74, 85, 
+    80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, 74, 85, 69, 
+    81, 128, 78, 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, 79, 88, 128, 
+    78, 74, 79, 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, 128, 78, 74, 
+    79, 128, 78, 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, 73, 80, 128, 
+    78, 74, 73, 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, 73, 69, 80, 
+    128, 78, 74, 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, 73, 128, 78, 
+    74, 201, 78, 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, 78, 74, 69, 
+    85, 65, 69, 78, 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, 74, 69, 69, 
+    69, 69, 128, 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, 69, 128, 78, 
+    74, 65, 81, 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, 76, 73, 128, 
+    78, 74, 65, 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, 128, 78, 73, 
+    84, 82, 69, 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, 71, 85, 128, 
+    78, 73, 80, 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, 84, 89, 128, 
+    78, 73, 78, 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, 128, 78, 73, 78, 
+    69, 84, 69, 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 78, 
+    73, 78, 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, 68, 65, 178, 78, 
+    73, 77, 128, 78, 73, 205, 78, 73, 75, 72, 65, 72, 73, 84, 128, 78, 73, 
+    75, 65, 72, 73, 84, 128, 78, 73, 75, 65, 128, 78, 73, 72, 83, 72, 86, 65, 
+    83, 65, 128, 78, 73, 71, 73, 68, 65, 77, 73, 78, 128, 78, 73, 71, 73, 68, 
+    65, 69, 83, 72, 128, 78, 73, 71, 72, 84, 128, 78, 73, 71, 72, 212, 78, 
+    73, 71, 71, 65, 72, 73, 84, 65, 128, 78, 73, 69, 88, 128, 78, 73, 69, 85, 
+    78, 45, 84, 73, 75, 69, 85, 84, 128, 78, 73, 69, 85, 78, 45, 84, 72, 73, 
+    69, 85, 84, 72, 128, 78, 73, 69, 85, 78, 45, 83, 73, 79, 83, 128, 78, 73, 
+    69, 85, 78, 45, 82, 73, 69, 85, 76, 128, 78, 73, 69, 85, 78, 45, 80, 73, 
+    69, 85, 80, 128, 78, 73, 69, 85, 78, 45, 80, 65, 78, 83, 73, 79, 83, 128, 
+    78, 73, 69, 85, 78, 45, 75, 73, 89, 69, 79, 75, 128, 78, 73, 69, 85, 78, 
+    45, 72, 73, 69, 85, 72, 128, 78, 73, 69, 85, 78, 45, 67, 73, 69, 85, 67, 
+    128, 78, 73, 69, 85, 78, 45, 67, 72, 73, 69, 85, 67, 72, 128, 78, 73, 69, 
+    85, 206, 78, 73, 69, 80, 128, 78, 73, 69, 128, 78, 73, 66, 128, 78, 73, 
+    65, 128, 78, 73, 50, 128, 78, 72, 85, 69, 128, 78, 72, 74, 65, 128, 78, 
+    72, 128, 78, 71, 89, 69, 128, 78, 71, 86, 69, 128, 78, 71, 85, 85, 128, 
+    78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, 71, 85, 79, 128, 
+    78, 71, 85, 65, 69, 84, 128, 78, 71, 85, 65, 69, 128, 78, 71, 79, 88, 
+    128, 78, 71, 79, 85, 128, 78, 71, 79, 213, 78, 71, 79, 84, 128, 78, 71, 
+    79, 81, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 77, 
+    128, 78, 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 
+    75, 89, 69, 69, 128, 78, 71, 75, 87, 65, 69, 78, 128, 78, 71, 75, 85, 80, 
+    128, 78, 71, 75, 85, 78, 128, 78, 71, 75, 85, 77, 128, 78, 71, 75, 85, 
+    69, 78, 90, 69, 85, 77, 128, 78, 71, 75, 85, 197, 78, 71, 75, 73, 78, 68, 
+    201, 78, 71, 75, 73, 69, 69, 128, 78, 71, 75, 69, 85, 88, 128, 78, 71, 
+    75, 69, 85, 82, 73, 128, 78, 71, 75, 69, 85, 65, 69, 81, 128, 78, 71, 75, 
+    69, 85, 65, 69, 77, 128, 78, 71, 75, 65, 81, 128, 78, 71, 75, 65, 80, 
+    128, 78, 71, 75, 65, 65, 77, 73, 128, 78, 71, 75, 65, 128, 78, 71, 73, 
+    69, 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 128, 78, 71, 72, 
+    65, 128, 78, 71, 71, 87, 65, 69, 78, 128, 78, 71, 71, 85, 82, 65, 69, 
+    128, 78, 71, 71, 85, 80, 128, 78, 71, 71, 85, 79, 81, 128, 78, 71, 71, 
+    85, 79, 209, 78, 71, 71, 85, 79, 78, 128, 78, 71, 71, 85, 79, 77, 128, 
+    78, 71, 71, 85, 77, 128, 78, 71, 71, 85, 69, 69, 84, 128, 78, 71, 71, 85, 
+    65, 69, 83, 72, 65, 197, 78, 71, 71, 85, 65, 69, 206, 78, 71, 71, 85, 
+    128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, 
+    78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 71, 
+    71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78, 71, 71, 69, 78, 128, 
+    78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69, 69, 128, 78, 71, 71, 
+    69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65, 80, 128, 78, 71, 71, 
+    65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77, 128, 78, 71, 71, 128, 
+    78, 71, 69, 88, 128, 78, 71, 69, 85, 82, 69, 85, 84, 128, 78, 71, 69, 80, 
+    128, 78, 71, 69, 78, 128, 78, 71, 69, 69, 128, 78, 71, 69, 65, 68, 65, 
+    76, 128, 78, 71, 65, 88, 128, 78, 71, 65, 85, 128, 78, 71, 65, 84, 128, 
+    78, 71, 65, 211, 78, 71, 65, 81, 128, 78, 71, 65, 80, 128, 78, 71, 65, 
+    78, 71, 85, 128, 78, 71, 65, 78, 128, 78, 71, 65, 73, 128, 78, 71, 65, 
+    72, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, 
+    212, 78, 69, 88, 128, 78, 69, 87, 83, 80, 65, 80, 69, 82, 128, 78, 69, 
+    87, 76, 73, 78, 69, 128, 78, 69, 87, 128, 78, 69, 85, 84, 82, 65, 204, 
+    78, 69, 85, 84, 69, 82, 128, 78, 69, 84, 128, 78, 69, 212, 78, 69, 83, 
+    84, 69, 196, 78, 69, 81, 85, 68, 65, 65, 128, 78, 69, 80, 84, 85, 78, 69, 
+    128, 78, 69, 80, 128, 78, 69, 79, 128, 78, 69, 207, 78, 69, 78, 65, 78, 
+    79, 128, 78, 69, 78, 128, 78, 69, 76, 128, 78, 69, 73, 84, 72, 69, 210, 
+    78, 69, 71, 65, 84, 73, 79, 206, 78, 69, 71, 65, 84, 69, 196, 78, 69, 67, 
+    75, 84, 73, 69, 128, 78, 69, 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 
+    68, 85, 88, 128, 78, 68, 85, 84, 128, 78, 68, 85, 82, 88, 128, 78, 68, 
+    85, 82, 128, 78, 68, 85, 80, 128, 78, 68, 85, 78, 128, 78, 68, 213, 78, 
+    68, 79, 88, 128, 78, 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, 
+    79, 128, 78, 68, 79, 78, 128, 78, 68, 79, 77, 66, 85, 128, 78, 68, 79, 
+    76, 197, 78, 68, 73, 88, 128, 78, 68, 73, 84, 128, 78, 68, 73, 81, 128, 
+    78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 
+    68, 73, 68, 65, 128, 78, 68, 73, 65, 81, 128, 78, 68, 69, 88, 128, 78, 
+    68, 69, 85, 88, 128, 78, 68, 69, 85, 84, 128, 78, 68, 69, 85, 65, 69, 82, 
+    69, 69, 128, 78, 68, 69, 80, 128, 78, 68, 69, 69, 128, 78, 68, 69, 128, 
+    78, 68, 65, 88, 128, 78, 68, 65, 84, 128, 78, 68, 65, 80, 128, 78, 68, 
+    65, 77, 128, 78, 68, 65, 65, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 68, 
+    65, 65, 128, 78, 68, 65, 193, 78, 66, 89, 88, 128, 78, 66, 89, 84, 128, 
+    78, 66, 89, 82, 88, 128, 78, 66, 89, 82, 128, 78, 66, 89, 80, 128, 78, 
+    66, 89, 128, 78, 66, 85, 88, 128, 78, 66, 85, 84, 128, 78, 66, 85, 82, 
+    88, 128, 78, 66, 85, 82, 128, 78, 66, 85, 80, 128, 78, 66, 85, 128, 78, 
+    66, 79, 88, 128, 78, 66, 79, 84, 128, 78, 66, 79, 80, 128, 78, 66, 79, 
+    128, 78, 66, 73, 88, 128, 78, 66, 73, 84, 128, 78, 66, 73, 80, 128, 78, 
+    66, 73, 69, 88, 128, 78, 66, 73, 69, 80, 128, 78, 66, 73, 69, 128, 78, 
+    66, 73, 128, 78, 66, 72, 128, 78, 66, 65, 88, 128, 78, 66, 65, 84, 128, 
+    78, 66, 65, 80, 128, 78, 66, 65, 128, 78, 65, 89, 65, 78, 78, 65, 128, 
+    78, 65, 89, 128, 78, 65, 88, 73, 65, 206, 78, 65, 88, 128, 78, 65, 85, 
+    84, 72, 83, 128, 78, 65, 85, 68, 73, 218, 78, 65, 84, 85, 82, 65, 204, 
+    78, 65, 84, 73, 79, 78, 65, 204, 78, 65, 83, 75, 65, 80, 201, 78, 65, 83, 
+    72, 73, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 78, 128, 78, 65, 
+    83, 65, 76, 73, 90, 65, 84, 73, 79, 206, 78, 65, 82, 82, 79, 215, 78, 65, 
+    82, 128, 78, 65, 81, 128, 78, 65, 79, 211, 78, 65, 78, 83, 65, 78, 65, 
+    81, 128, 78, 65, 78, 71, 77, 79, 78, 84, 72, 79, 128, 78, 65, 78, 68, 
+    128, 78, 65, 78, 65, 128, 78, 65, 77, 69, 128, 78, 65, 77, 197, 78, 65, 
+    77, 50, 128, 78, 65, 77, 128, 78, 65, 75, 128, 78, 65, 73, 82, 193, 78, 
+    65, 73, 204, 78, 65, 71, 82, 201, 78, 65, 71, 65, 82, 128, 78, 65, 71, 
+    65, 128, 78, 65, 71, 193, 78, 65, 71, 128, 78, 65, 199, 78, 65, 69, 128, 
+    78, 65, 66, 76, 65, 128, 78, 65, 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, 
+    65, 65, 75, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 73, 128, 78, 65, 
+    193, 78, 65, 50, 128, 78, 65, 45, 50, 128, 78, 48, 52, 50, 128, 78, 48, 
+    52, 49, 128, 78, 48, 52, 48, 128, 78, 48, 51, 57, 128, 78, 48, 51, 56, 
+    128, 78, 48, 51, 55, 65, 128, 78, 48, 51, 55, 128, 78, 48, 51, 54, 128, 
+    78, 48, 51, 53, 65, 128, 78, 48, 51, 53, 128, 78, 48, 51, 52, 65, 128, 
+    78, 48, 51, 52, 128, 78, 48, 51, 51, 65, 128, 78, 48, 51, 51, 128, 78, 
+    48, 51, 50, 128, 78, 48, 51, 49, 128, 78, 48, 51, 48, 128, 78, 48, 50, 
+    57, 128, 78, 48, 50, 56, 128, 78, 48, 50, 55, 128, 78, 48, 50, 54, 128, 
+    78, 48, 50, 53, 65, 128, 78, 48, 50, 53, 128, 78, 48, 50, 52, 128, 78, 
+    48, 50, 51, 128, 78, 48, 50, 50, 128, 78, 48, 50, 49, 128, 78, 48, 50, 
+    48, 128, 78, 48, 49, 57, 128, 78, 48, 49, 56, 66, 128, 78, 48, 49, 56, 
+    65, 128, 78, 48, 49, 56, 128, 78, 48, 49, 55, 128, 78, 48, 49, 54, 128, 
+    78, 48, 49, 53, 128, 78, 48, 49, 52, 128, 78, 48, 49, 51, 128, 78, 48, 
+    49, 50, 128, 78, 48, 49, 49, 128, 78, 48, 49, 48, 128, 78, 48, 48, 57, 
+    128, 78, 48, 48, 56, 128, 78, 48, 48, 55, 128, 78, 48, 48, 54, 128, 78, 
+    48, 48, 53, 128, 78, 48, 48, 52, 128, 78, 48, 48, 51, 128, 78, 48, 48, 
+    50, 128, 78, 48, 48, 49, 128, 78, 45, 67, 82, 69, 197, 78, 45, 65, 82, 
+    217, 77, 89, 88, 128, 77, 89, 84, 128, 77, 89, 83, 76, 73, 84, 69, 128, 
+    77, 89, 80, 128, 77, 89, 65, 128, 77, 89, 193, 77, 89, 128, 77, 217, 77, 
+    87, 79, 79, 128, 77, 87, 79, 128, 77, 87, 73, 73, 128, 77, 87, 73, 128, 
+    77, 87, 69, 69, 128, 77, 87, 69, 128, 77, 87, 65, 65, 128, 77, 87, 65, 
+    128, 77, 87, 128, 77, 215, 77, 86, 83, 128, 77, 86, 79, 80, 128, 77, 86, 
+    73, 128, 77, 86, 69, 85, 65, 69, 78, 71, 65, 77, 128, 77, 86, 128, 77, 
+    214, 77, 85, 88, 128, 77, 85, 85, 83, 73, 75, 65, 84, 79, 65, 78, 128, 
+    77, 85, 85, 82, 68, 72, 65, 74, 193, 77, 85, 85, 128, 77, 85, 84, 128, 
+    77, 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 77, 85, 83, 72, 82, 79, 79, 
+    77, 128, 77, 85, 83, 72, 51, 128, 77, 85, 83, 72, 179, 77, 85, 83, 72, 
+    128, 77, 85, 83, 200, 77, 85, 82, 88, 128, 77, 85, 82, 71, 85, 50, 128, 
+    77, 85, 82, 69, 128, 77, 85, 82, 68, 65, 128, 77, 85, 82, 68, 193, 77, 
+    85, 82, 128, 77, 85, 81, 68, 65, 77, 128, 77, 85, 80, 128, 77, 85, 79, 
+    88, 128, 77, 85, 79, 84, 128, 77, 85, 79, 80, 128, 77, 85, 79, 77, 65, 
+    69, 128, 77, 85, 79, 128, 77, 85, 78, 83, 85, 66, 128, 77, 85, 78, 65, 
+    72, 128, 77, 85, 76, 84, 73, 83, 69, 84, 128, 77, 85, 76, 84, 73, 83, 69, 
+    212, 77, 85, 76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 77, 85, 
+    76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 206, 77, 85, 76, 84, 73, 80, 
+    76, 197, 77, 85, 76, 84, 73, 79, 67, 85, 76, 65, 210, 77, 85, 76, 84, 73, 
+    77, 65, 80, 128, 77, 85, 76, 84, 201, 77, 85, 75, 80, 72, 82, 69, 78, 71, 
+    128, 77, 85, 73, 78, 128, 77, 85, 71, 83, 128, 77, 85, 71, 128, 77, 85, 
+    199, 77, 85, 69, 128, 77, 85, 67, 72, 128, 77, 85, 67, 200, 77, 85, 67, 
+    65, 65, 68, 128, 77, 85, 65, 78, 128, 77, 85, 65, 69, 128, 77, 85, 45, 
+    71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, 65, 128, 77, 
+    79, 89, 65, 73, 128, 77, 79, 88, 128, 77, 79, 86, 73, 197, 77, 79, 86, 
+    69, 196, 77, 79, 85, 84, 72, 128, 77, 79, 85, 84, 200, 77, 79, 85, 83, 
+    69, 128, 77, 79, 85, 83, 197, 77, 79, 85, 78, 84, 65, 73, 78, 83, 128, 
+    77, 79, 85, 78, 84, 65, 73, 78, 128, 77, 79, 85, 78, 84, 65, 73, 206, 77, 
+    79, 85, 78, 212, 77, 79, 85, 78, 68, 128, 77, 79, 85, 78, 196, 77, 79, 
+    84, 72, 69, 82, 128, 77, 79, 84, 128, 77, 79, 82, 84, 85, 85, 77, 128, 
+    77, 79, 82, 84, 65, 82, 128, 77, 79, 82, 80, 72, 79, 76, 79, 71, 73, 67, 
+    65, 204, 77, 79, 82, 78, 73, 78, 71, 128, 77, 79, 80, 128, 77, 79, 79, 
+    83, 69, 45, 67, 82, 69, 197, 77, 79, 79, 78, 128, 77, 79, 79, 206, 77, 
+    79, 79, 77, 80, 85, 81, 128, 77, 79, 79, 77, 69, 85, 84, 128, 77, 79, 79, 
+    128, 77, 79, 78, 84, 73, 69, 69, 78, 128, 77, 79, 78, 84, 72, 128, 77, 
+    79, 78, 84, 200, 77, 79, 78, 83, 84, 69, 82, 128, 77, 79, 78, 79, 83, 84, 
+    65, 66, 76, 197, 77, 79, 78, 79, 83, 80, 65, 67, 197, 77, 79, 78, 79, 82, 
+    65, 73, 76, 128, 77, 79, 78, 79, 71, 82, 65, 80, 200, 77, 79, 78, 79, 71, 
+    82, 65, 77, 77, 79, 211, 77, 79, 78, 79, 71, 82, 65, 205, 77, 79, 78, 79, 
+    70, 79, 78, 73, 65, 83, 128, 77, 79, 78, 79, 67, 85, 76, 65, 210, 77, 79, 
+    78, 75, 69, 89, 128, 77, 79, 78, 75, 69, 217, 77, 79, 78, 73, 128, 77, 
+    79, 78, 71, 75, 69, 85, 65, 69, 81, 128, 77, 79, 78, 69, 217, 77, 79, 78, 
+    128, 77, 79, 206, 77, 79, 76, 128, 77, 79, 72, 65, 77, 77, 65, 196, 77, 
+    79, 68, 85, 76, 207, 77, 79, 68, 69, 83, 84, 89, 128, 77, 79, 68, 69, 76, 
+    83, 128, 77, 79, 68, 69, 76, 128, 77, 79, 68, 69, 128, 77, 79, 66, 73, 
+    76, 197, 77, 79, 65, 128, 77, 207, 77, 78, 89, 65, 205, 77, 78, 65, 83, 
+    128, 77, 77, 83, 80, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, 76, 
+    128, 77, 75, 80, 65, 82, 65, 209, 77, 73, 88, 128, 77, 73, 84, 128, 77, 
+    73, 83, 82, 65, 128, 77, 73, 82, 73, 66, 65, 65, 82, 85, 128, 77, 73, 82, 
+    73, 128, 77, 73, 82, 69, 68, 128, 77, 73, 80, 128, 77, 73, 78, 89, 128, 
+    77, 73, 78, 85, 83, 45, 79, 82, 45, 80, 76, 85, 211, 77, 73, 78, 85, 83, 
+    128, 77, 73, 78, 73, 83, 84, 69, 82, 128, 77, 73, 78, 73, 77, 65, 128, 
+    77, 73, 78, 73, 68, 73, 83, 67, 128, 77, 73, 78, 73, 66, 85, 83, 128, 77, 
+    73, 77, 69, 128, 77, 73, 77, 128, 77, 73, 76, 76, 73, 79, 78, 211, 77, 
+    73, 76, 76, 69, 84, 128, 77, 73, 76, 76, 197, 77, 73, 76, 204, 77, 73, 
+    76, 75, 217, 77, 73, 76, 128, 77, 73, 75, 85, 82, 79, 78, 128, 77, 73, 
+    75, 82, 79, 206, 77, 73, 75, 82, 73, 128, 77, 73, 73, 78, 128, 77, 73, 
+    73, 128, 77, 73, 199, 77, 73, 69, 88, 128, 77, 73, 69, 85, 77, 45, 84, 
+    73, 75, 69, 85, 84, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, 71, 83, 
+    73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, 71, 78, 73, 69, 
+    85, 78, 128, 77, 73, 69, 85, 77, 45, 82, 73, 69, 85, 76, 128, 77, 73, 69, 
+    85, 77, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 77, 73, 69, 85, 
+    77, 45, 80, 73, 69, 85, 80, 128, 77, 73, 69, 85, 77, 45, 80, 65, 78, 83, 
+    73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 78, 73, 69, 85, 78, 128, 77, 73, 
+    69, 85, 77, 45, 67, 73, 69, 85, 67, 128, 77, 73, 69, 85, 77, 45, 67, 72, 
+    73, 69, 85, 67, 72, 128, 77, 73, 69, 85, 205, 77, 73, 69, 80, 128, 77, 
+    73, 69, 69, 128, 77, 73, 69, 128, 77, 73, 68, 76, 73, 78, 197, 77, 73, 
+    68, 68, 76, 69, 45, 87, 69, 76, 83, 200, 77, 73, 68, 68, 76, 197, 77, 73, 
+    196, 77, 73, 67, 82, 79, 83, 67, 79, 80, 69, 128, 77, 73, 67, 82, 79, 80, 
+    72, 79, 78, 69, 128, 77, 73, 67, 82, 207, 77, 73, 67, 210, 77, 72, 90, 
+    128, 77, 72, 65, 128, 77, 72, 128, 77, 71, 85, 88, 128, 77, 71, 85, 84, 
+    128, 77, 71, 85, 82, 88, 128, 77, 71, 85, 82, 128, 77, 71, 85, 80, 128, 
+    77, 71, 85, 79, 88, 128, 77, 71, 85, 79, 80, 128, 77, 71, 85, 79, 128, 
+    77, 71, 85, 128, 77, 71, 79, 88, 128, 77, 71, 79, 84, 128, 77, 71, 79, 
+    80, 128, 77, 71, 79, 128, 77, 71, 207, 77, 71, 73, 69, 88, 128, 77, 71, 
+    73, 69, 128, 77, 71, 69, 88, 128, 77, 71, 69, 80, 128, 77, 71, 69, 128, 
+    77, 71, 66, 85, 128, 77, 71, 66, 79, 79, 128, 77, 71, 66, 79, 70, 85, 77, 
+    128, 77, 71, 66, 79, 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 85, 78, 
+    128, 77, 71, 66, 69, 78, 128, 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 
+    128, 77, 71, 66, 65, 83, 65, 81, 128, 77, 71, 66, 65, 83, 65, 128, 77, 
+    71, 65, 88, 128, 77, 71, 65, 84, 128, 77, 71, 65, 80, 128, 77, 71, 65, 
+    128, 77, 71, 128, 77, 70, 79, 78, 128, 77, 70, 79, 206, 77, 70, 79, 128, 
+    77, 70, 73, 89, 65, 81, 128, 77, 70, 73, 69, 69, 128, 77, 70, 69, 85, 84, 
+    128, 77, 70, 69, 85, 81, 128, 77, 70, 69, 85, 65, 69, 128, 77, 70, 65, 
+    65, 128, 77, 69, 90, 90, 79, 128, 77, 69, 88, 128, 77, 69, 85, 212, 77, 
+    69, 85, 81, 128, 77, 69, 85, 78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, 
+    69, 85, 78, 128, 77, 69, 84, 82, 79, 128, 77, 69, 84, 82, 73, 67, 65, 
+    204, 77, 69, 84, 82, 73, 65, 128, 77, 69, 84, 82, 69, 84, 69, 211, 77, 
+    69, 84, 79, 66, 69, 76, 85, 83, 128, 77, 69, 84, 69, 75, 128, 77, 69, 84, 
+    69, 71, 128, 77, 69, 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 
+    69, 78, 73, 65, 206, 77, 69, 83, 83, 65, 71, 69, 128, 77, 69, 83, 83, 65, 
+    71, 197, 77, 69, 83, 79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 
+    77, 69, 82, 79, 73, 84, 73, 195, 77, 69, 82, 75, 72, 65, 128, 77, 69, 82, 
+    75, 72, 193, 77, 69, 82, 73, 68, 73, 65, 78, 83, 128, 77, 69, 82, 73, 
+    128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, 69, 
+    82, 67, 85, 82, 217, 77, 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 
+    69, 77, 79, 128, 77, 69, 77, 66, 69, 82, 83, 72, 73, 80, 128, 77, 69, 77, 
+    66, 69, 82, 128, 77, 69, 77, 66, 69, 210, 77, 69, 77, 45, 81, 79, 80, 72, 
+    128, 77, 69, 77, 128, 77, 69, 205, 77, 69, 76, 79, 68, 73, 195, 77, 69, 
+    76, 73, 75, 128, 77, 69, 73, 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 
+    128, 77, 69, 71, 65, 80, 72, 79, 78, 69, 128, 77, 69, 71, 65, 76, 73, 
+    128, 77, 69, 69, 84, 79, 82, 85, 128, 77, 69, 69, 84, 128, 77, 69, 69, 
+    77, 85, 128, 77, 69, 69, 77, 128, 77, 69, 69, 69, 69, 128, 77, 69, 68, 
+    73, 85, 77, 128, 77, 69, 68, 73, 85, 205, 77, 69, 68, 73, 67, 73, 78, 69, 
+    128, 77, 69, 68, 73, 67, 65, 204, 77, 69, 65, 84, 128, 77, 69, 65, 212, 
+    77, 69, 65, 83, 85, 82, 69, 196, 77, 69, 65, 83, 85, 82, 69, 128, 77, 69, 
+    65, 83, 85, 82, 197, 77, 68, 85, 206, 77, 196, 77, 67, 72, 213, 77, 67, 
+    72, 65, 206, 77, 195, 77, 66, 85, 79, 81, 128, 77, 66, 85, 79, 128, 77, 
+    66, 85, 69, 128, 77, 66, 85, 65, 69, 77, 128, 77, 66, 85, 65, 69, 128, 
+    77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, 84, 128, 77, 66, 73, 
+    212, 77, 66, 73, 82, 73, 69, 69, 78, 128, 77, 66, 73, 128, 77, 66, 69, 
+    85, 88, 128, 77, 66, 69, 85, 82, 73, 128, 77, 66, 69, 85, 77, 128, 77, 
+    66, 69, 82, 65, 69, 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 75, 69, 69, 
+    84, 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 81, 128, 77, 
+    66, 65, 78, 89, 73, 128, 77, 66, 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, 
+    75, 69, 84, 128, 77, 66, 65, 65, 128, 77, 66, 65, 193, 77, 66, 193, 77, 
+    66, 52, 128, 77, 66, 51, 128, 77, 66, 50, 128, 77, 66, 128, 77, 194, 77, 
+    65, 89, 65, 78, 78, 65, 128, 77, 65, 89, 128, 77, 65, 88, 73, 77, 65, 
+    128, 77, 65, 88, 128, 77, 65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, 
+    77, 65, 84, 82, 73, 88, 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 
+    65, 84, 128, 77, 65, 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 
+    83, 83, 65, 71, 69, 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 
+    77, 65, 83, 72, 70, 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 
+    67, 85, 76, 73, 78, 197, 77, 65, 82, 89, 128, 77, 65, 82, 85, 75, 85, 
+    128, 77, 65, 82, 84, 89, 82, 73, 193, 77, 65, 82, 82, 89, 73, 78, 199, 
+    77, 65, 82, 82, 73, 65, 71, 197, 77, 65, 82, 75, 69, 82, 128, 77, 65, 82, 
+    75, 45, 52, 128, 77, 65, 82, 75, 45, 51, 128, 77, 65, 82, 75, 45, 50, 
+    128, 77, 65, 82, 75, 45, 49, 128, 77, 65, 82, 69, 128, 77, 65, 82, 67, 
+    72, 128, 77, 65, 82, 67, 65, 84, 79, 45, 83, 84, 65, 67, 67, 65, 84, 79, 
+    128, 77, 65, 82, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 83, 73, 84, 69, 
+    128, 77, 65, 82, 66, 85, 84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, 
+    65, 82, 128, 77, 65, 81, 65, 70, 128, 77, 65, 81, 128, 77, 65, 80, 76, 
+    197, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, 65, 79, 128, 77, 65, 78, 
+    83, 89, 79, 78, 128, 77, 65, 78, 83, 85, 65, 69, 128, 77, 65, 78, 78, 65, 
+    218, 77, 65, 78, 78, 65, 128, 77, 65, 78, 71, 65, 76, 65, 77, 128, 77, 
+    65, 78, 68, 65, 73, 76, 73, 78, 199, 77, 65, 78, 68, 65, 73, 195, 77, 65, 
+    78, 67, 72, 213, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, 65, 76, 84, 69, 
+    83, 197, 77, 65, 76, 69, 69, 82, 73, 128, 77, 65, 76, 69, 128, 77, 65, 
+    76, 197, 77, 65, 76, 65, 75, 79, 206, 77, 65, 75, 83, 85, 82, 65, 128, 
+    77, 65, 75, 83, 85, 82, 193, 77, 65, 73, 90, 69, 128, 77, 65, 73, 89, 65, 
+    77, 79, 75, 128, 77, 65, 73, 84, 65, 73, 75, 72, 85, 128, 77, 65, 73, 82, 
+    85, 128, 77, 65, 73, 77, 85, 65, 78, 128, 77, 65, 73, 77, 65, 76, 65, 73, 
+    128, 77, 65, 73, 76, 66, 79, 216, 77, 65, 73, 75, 85, 82, 79, 128, 77, 
+    65, 73, 68, 69, 78, 128, 77, 65, 73, 128, 77, 65, 72, 74, 79, 78, 199, 
+    77, 65, 72, 72, 65, 128, 77, 65, 72, 65, 80, 82, 65, 78, 65, 128, 77, 65, 
+    72, 65, 80, 65, 75, 72, 128, 77, 65, 72, 65, 65, 80, 82, 65, 65, 78, 193, 
+    77, 65, 72, 128, 77, 65, 71, 78, 73, 70, 89, 73, 78, 199, 77, 65, 69, 83, 
+    73, 128, 77, 65, 69, 78, 89, 73, 128, 77, 65, 69, 78, 74, 69, 84, 128, 
+    77, 65, 69, 77, 86, 69, 85, 88, 128, 77, 65, 69, 77, 75, 80, 69, 78, 128, 
+    77, 65, 69, 77, 71, 66, 73, 69, 69, 128, 77, 65, 69, 77, 66, 71, 66, 73, 
+    69, 69, 128, 77, 65, 69, 77, 66, 65, 128, 77, 65, 69, 77, 128, 77, 65, 
+    69, 76, 69, 69, 128, 77, 65, 69, 75, 69, 85, 80, 128, 77, 65, 68, 89, 65, 
+    128, 77, 65, 68, 85, 128, 77, 65, 68, 68, 65, 200, 77, 65, 68, 68, 65, 
+    128, 77, 65, 68, 68, 193, 77, 65, 67, 82, 79, 78, 45, 71, 82, 65, 86, 69, 
+    128, 77, 65, 67, 82, 79, 78, 45, 66, 82, 69, 86, 69, 128, 77, 65, 67, 82, 
+    79, 78, 45, 65, 67, 85, 84, 69, 128, 77, 65, 67, 82, 79, 78, 128, 77, 65, 
+    67, 82, 79, 206, 77, 65, 67, 72, 73, 78, 69, 128, 77, 65, 65, 89, 89, 65, 
+    65, 128, 77, 65, 65, 73, 128, 77, 65, 65, 128, 77, 65, 50, 128, 77, 48, 
+    52, 52, 128, 77, 48, 52, 51, 128, 77, 48, 52, 50, 128, 77, 48, 52, 49, 
+    128, 77, 48, 52, 48, 65, 128, 77, 48, 52, 48, 128, 77, 48, 51, 57, 128, 
+    77, 48, 51, 56, 128, 77, 48, 51, 55, 128, 77, 48, 51, 54, 128, 77, 48, 
+    51, 53, 128, 77, 48, 51, 52, 128, 77, 48, 51, 51, 66, 128, 77, 48, 51, 
+    51, 65, 128, 77, 48, 51, 51, 128, 77, 48, 51, 50, 128, 77, 48, 51, 49, 
+    65, 128, 77, 48, 51, 49, 128, 77, 48, 51, 48, 128, 77, 48, 50, 57, 128, 
+    77, 48, 50, 56, 65, 128, 77, 48, 50, 56, 128, 77, 48, 50, 55, 128, 77, 
+    48, 50, 54, 128, 77, 48, 50, 53, 128, 77, 48, 50, 52, 65, 128, 77, 48, 
+    50, 52, 128, 77, 48, 50, 51, 128, 77, 48, 50, 50, 65, 128, 77, 48, 50, 
+    50, 128, 77, 48, 50, 49, 128, 77, 48, 50, 48, 128, 77, 48, 49, 57, 128, 
+    77, 48, 49, 56, 128, 77, 48, 49, 55, 65, 128, 77, 48, 49, 55, 128, 77, 
+    48, 49, 54, 65, 128, 77, 48, 49, 54, 128, 77, 48, 49, 53, 65, 128, 77, 
+    48, 49, 53, 128, 77, 48, 49, 52, 128, 77, 48, 49, 51, 128, 77, 48, 49, 
+    50, 72, 128, 77, 48, 49, 50, 71, 128, 77, 48, 49, 50, 70, 128, 77, 48, 
+    49, 50, 69, 128, 77, 48, 49, 50, 68, 128, 77, 48, 49, 50, 67, 128, 77, 
+    48, 49, 50, 66, 128, 77, 48, 49, 50, 65, 128, 77, 48, 49, 50, 128, 77, 
+    48, 49, 49, 128, 77, 48, 49, 48, 65, 128, 77, 48, 49, 48, 128, 77, 48, 
+    48, 57, 128, 77, 48, 48, 56, 128, 77, 48, 48, 55, 128, 77, 48, 48, 54, 
+    128, 77, 48, 48, 53, 128, 77, 48, 48, 52, 128, 77, 48, 48, 51, 65, 128, 
+    77, 48, 48, 51, 128, 77, 48, 48, 50, 128, 77, 48, 48, 49, 66, 128, 77, 
+    48, 48, 49, 65, 128, 77, 48, 48, 49, 128, 76, 218, 76, 89, 89, 128, 76, 
+    89, 88, 128, 76, 89, 84, 128, 76, 89, 82, 88, 128, 76, 89, 82, 128, 76, 
+    89, 80, 128, 76, 89, 68, 73, 65, 206, 76, 89, 67, 73, 65, 206, 76, 88, 
+    128, 76, 87, 79, 79, 128, 76, 87, 79, 128, 76, 87, 73, 73, 128, 76, 87, 
+    73, 128, 76, 87, 69, 128, 76, 87, 65, 65, 128, 76, 87, 65, 128, 76, 85, 
+    88, 128, 76, 85, 85, 128, 76, 85, 84, 128, 76, 85, 82, 88, 128, 76, 85, 
+    80, 128, 76, 85, 79, 88, 128, 76, 85, 79, 84, 128, 76, 85, 79, 80, 128, 
+    76, 85, 79, 128, 76, 85, 78, 71, 83, 73, 128, 76, 85, 78, 65, 84, 197, 
+    76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, 128, 76, 85, 72, 85, 82, 
+    128, 76, 85, 72, 128, 76, 85, 71, 71, 65, 71, 69, 128, 76, 85, 71, 65, 
+    76, 128, 76, 85, 71, 65, 204, 76, 85, 69, 128, 76, 85, 65, 69, 80, 128, 
+    76, 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, 76, 82, 79, 128, 76, 82, 
+    77, 128, 76, 82, 73, 128, 76, 82, 69, 128, 76, 79, 90, 69, 78, 71, 69, 
+    128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 69, 82, 
+    69, 196, 76, 79, 87, 69, 210, 76, 79, 87, 45, 185, 76, 79, 86, 197, 76, 
+    79, 85, 82, 69, 128, 76, 79, 85, 68, 83, 80, 69, 65, 75, 69, 82, 128, 76, 
+    79, 85, 68, 76, 217, 76, 79, 84, 85, 83, 128, 76, 79, 84, 128, 76, 79, 
+    82, 82, 89, 128, 76, 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 81, 128, 
+    76, 79, 80, 128, 76, 79, 79, 84, 128, 76, 79, 79, 80, 69, 196, 76, 79, 
+    79, 80, 128, 76, 79, 79, 208, 76, 79, 79, 78, 128, 76, 79, 79, 203, 76, 
+    79, 79, 128, 76, 79, 78, 83, 85, 77, 128, 76, 79, 78, 71, 65, 128, 76, 
+    79, 78, 71, 193, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 89, 82, 
+    128, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 83, 79, 204, 76, 79, 
+    78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 79, 83, 211, 76, 79, 78, 71, 45, 
+    66, 82, 65, 78, 67, 72, 45, 77, 65, 68, 210, 76, 79, 78, 71, 45, 66, 82, 
+    65, 78, 67, 72, 45, 72, 65, 71, 65, 76, 204, 76, 79, 78, 71, 45, 66, 82, 
+    65, 78, 67, 72, 45, 65, 210, 76, 79, 77, 77, 65, 69, 128, 76, 79, 77, 
+    128, 76, 79, 205, 76, 79, 76, 76, 73, 80, 79, 80, 128, 76, 79, 76, 76, 
+    128, 76, 79, 71, 210, 76, 79, 71, 79, 84, 89, 80, 197, 76, 79, 71, 79, 
+    71, 82, 65, 205, 76, 79, 71, 128, 76, 79, 68, 69, 83, 84, 79, 78, 69, 
+    128, 76, 79, 67, 79, 77, 79, 84, 73, 86, 69, 128, 76, 79, 67, 75, 73, 78, 
+    71, 45, 83, 72, 73, 70, 212, 76, 79, 67, 203, 76, 79, 67, 65, 84, 73, 86, 
+    69, 128, 76, 79, 67, 65, 84, 73, 79, 206, 76, 79, 65, 128, 76, 78, 128, 
+    76, 76, 85, 85, 128, 76, 76, 79, 79, 128, 76, 76, 76, 85, 85, 128, 76, 
+    76, 76, 85, 128, 76, 76, 76, 79, 79, 128, 76, 76, 76, 79, 128, 76, 76, 
+    76, 73, 73, 128, 76, 76, 76, 73, 128, 76, 76, 76, 69, 69, 128, 76, 76, 
+    76, 69, 128, 76, 76, 76, 65, 85, 128, 76, 76, 76, 65, 73, 128, 76, 76, 
+    76, 65, 65, 128, 76, 76, 76, 65, 128, 76, 76, 76, 128, 76, 74, 85, 68, 
+    73, 74, 69, 128, 76, 74, 69, 128, 76, 74, 128, 76, 73, 88, 128, 76, 73, 
+    87, 78, 128, 76, 73, 86, 82, 197, 76, 73, 84, 84, 76, 197, 76, 73, 84, 
+    84, 69, 210, 76, 73, 84, 82, 193, 76, 73, 84, 128, 76, 73, 83, 213, 76, 
+    73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 81, 128, 76, 73, 80, 83, 
+    84, 73, 67, 75, 128, 76, 73, 78, 75, 73, 78, 199, 76, 73, 78, 203, 76, 
+    73, 78, 71, 83, 65, 128, 76, 73, 78, 69, 83, 128, 76, 73, 78, 69, 211, 
+    76, 73, 78, 69, 45, 57, 128, 76, 73, 78, 69, 45, 55, 128, 76, 73, 78, 69, 
+    45, 51, 128, 76, 73, 78, 69, 45, 49, 128, 76, 73, 77, 77, 85, 52, 128, 
+    76, 73, 77, 77, 85, 50, 128, 76, 73, 77, 77, 85, 128, 76, 73, 77, 77, 
+    213, 76, 73, 77, 73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, 79, 78, 
+    128, 76, 73, 77, 73, 84, 128, 76, 73, 77, 69, 128, 76, 73, 77, 66, 213, 
+    76, 73, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, 128, 76, 
+    73, 71, 72, 84, 78, 73, 78, 71, 128, 76, 73, 71, 72, 84, 72, 79, 85, 83, 
+    69, 128, 76, 73, 71, 72, 84, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 
+    128, 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 69, 128, 76, 
+    73, 69, 128, 76, 73, 68, 128, 76, 73, 66, 82, 65, 128, 76, 73, 66, 69, 
+    82, 84, 89, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, 72, 73, 73, 
+    128, 76, 72, 65, 86, 73, 89, 65, 78, 73, 128, 76, 72, 65, 199, 76, 72, 
+    65, 65, 128, 76, 72, 128, 76, 69, 90, 72, 128, 76, 69, 88, 128, 76, 69, 
+    86, 69, 204, 76, 69, 85, 77, 128, 76, 69, 85, 65, 69, 80, 128, 76, 69, 
+    85, 65, 69, 77, 128, 76, 69, 85, 128, 76, 69, 213, 76, 69, 84, 84, 69, 
+    82, 83, 128, 76, 69, 84, 84, 69, 82, 128, 76, 69, 212, 76, 69, 83, 83, 
+    69, 210, 76, 69, 83, 83, 45, 84, 72, 65, 78, 128, 76, 69, 83, 83, 45, 84, 
+    72, 65, 206, 76, 69, 80, 128, 76, 69, 79, 80, 65, 82, 68, 128, 76, 69, 
+    79, 128, 76, 69, 78, 84, 73, 67, 85, 76, 65, 210, 76, 69, 78, 73, 83, 
+    128, 76, 69, 78, 71, 84, 72, 69, 78, 69, 82, 128, 76, 69, 78, 71, 84, 
+    200, 76, 69, 78, 71, 65, 128, 76, 69, 78, 71, 193, 76, 69, 77, 79, 78, 
+    128, 76, 69, 77, 79, 73, 128, 76, 69, 76, 69, 84, 128, 76, 69, 76, 69, 
+    212, 76, 69, 203, 76, 69, 73, 77, 77, 65, 128, 76, 69, 73, 77, 77, 193, 
+    76, 69, 71, 83, 128, 76, 69, 71, 73, 79, 78, 128, 76, 69, 71, 69, 84, 79, 
+    211, 76, 69, 71, 128, 76, 69, 70, 84, 87, 65, 82, 68, 83, 128, 76, 69, 
+    70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212, 76, 69, 70, 84, 45, 83, 84, 
+    69, 205, 76, 69, 70, 84, 45, 83, 73, 68, 197, 76, 69, 70, 84, 45, 83, 72, 
+    65, 68, 69, 196, 76, 69, 70, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 76, 
+    69, 70, 84, 45, 72, 65, 78, 68, 69, 196, 76, 69, 70, 84, 45, 72, 65, 78, 
+    196, 76, 69, 70, 84, 45, 70, 65, 67, 73, 78, 199, 76, 69, 70, 84, 128, 
+    76, 69, 69, 82, 65, 69, 87, 65, 128, 76, 69, 69, 75, 128, 76, 69, 69, 69, 
+    69, 128, 76, 69, 68, 71, 69, 82, 128, 76, 69, 65, 84, 72, 69, 82, 128, 
+    76, 69, 65, 70, 128, 76, 69, 65, 198, 76, 69, 65, 68, 73, 78, 199, 76, 
+    69, 65, 68, 69, 82, 128, 76, 69, 65, 196, 76, 68, 65, 78, 128, 76, 68, 
+    50, 128, 76, 67, 201, 76, 67, 197, 76, 65, 90, 217, 76, 65, 89, 65, 78, 
+    78, 65, 128, 76, 65, 88, 128, 76, 65, 87, 128, 76, 65, 215, 76, 65, 85, 
+    76, 65, 128, 76, 65, 85, 75, 65, 218, 76, 65, 84, 73, 78, 65, 84, 197, 
+    76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82, 65, 204, 76, 65, 84, 197, 
+    76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 71, 69, 
+    210, 76, 65, 82, 71, 69, 128, 76, 65, 82, 71, 197, 76, 65, 81, 128, 76, 
+    65, 80, 65, 81, 128, 76, 65, 80, 128, 76, 65, 78, 84, 69, 82, 78, 128, 
+    76, 65, 78, 71, 85, 65, 71, 197, 76, 65, 78, 69, 83, 128, 76, 65, 77, 69, 
+    68, 72, 128, 76, 65, 77, 69, 68, 128, 76, 65, 77, 69, 196, 76, 65, 77, 
+    69, 128, 76, 65, 77, 197, 76, 65, 77, 68, 65, 128, 76, 65, 77, 68, 128, 
+    76, 65, 77, 66, 68, 193, 76, 65, 77, 65, 68, 72, 128, 76, 65, 76, 128, 
+    76, 65, 204, 76, 65, 75, 75, 72, 65, 78, 71, 89, 65, 79, 128, 76, 65, 74, 
+    65, 78, 89, 65, 76, 65, 78, 128, 76, 65, 201, 76, 65, 72, 83, 72, 85, 
+    128, 76, 65, 72, 128, 76, 65, 71, 85, 83, 128, 76, 65, 71, 213, 76, 65, 
+    71, 65, 82, 128, 76, 65, 71, 65, 210, 76, 65, 71, 65, 66, 128, 76, 65, 
+    71, 65, 194, 76, 65, 69, 86, 128, 76, 65, 69, 128, 76, 65, 68, 217, 76, 
+    65, 67, 75, 128, 76, 65, 67, 65, 128, 76, 65, 66, 79, 85, 82, 73, 78, 71, 
+    128, 76, 65, 66, 79, 82, 128, 76, 65, 66, 73, 65, 76, 73, 90, 65, 84, 73, 
+    79, 206, 76, 65, 66, 73, 65, 204, 76, 65, 66, 65, 84, 128, 76, 65, 65, 
+    78, 65, 69, 128, 76, 65, 65, 78, 128, 76, 65, 65, 77, 85, 128, 76, 65, 
+    65, 77, 128, 76, 65, 65, 73, 128, 76, 48, 48, 54, 65, 128, 76, 48, 48, 
+    50, 65, 128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, 65, 80, 69, 196, 
+    75, 89, 85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, 79, 128, 75, 89, 
+    76, 73, 83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, 128, 75, 89, 65, 
+    84, 72, 79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, 75, 88, 87, 73, 
+    128, 75, 88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, 88, 87, 65, 65, 
+    128, 75, 88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, 128, 75, 88, 73, 
+    128, 75, 88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, 65, 128, 75, 88, 
+    65, 128, 75, 87, 85, 51, 49, 56, 128, 75, 87, 79, 79, 128, 75, 87, 79, 
+    128, 75, 87, 73, 73, 128, 75, 87, 73, 128, 75, 87, 69, 69, 128, 75, 87, 
+    69, 128, 75, 87, 65, 89, 128, 75, 87, 65, 69, 84, 128, 75, 87, 65, 65, 
+    128, 75, 86, 65, 128, 75, 86, 128, 75, 85, 88, 128, 75, 85, 85, 72, 128, 
+    75, 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83, 72, 85, 50, 128, 
+    75, 85, 82, 88, 128, 75, 85, 82, 85, 90, 69, 73, 82, 79, 128, 75, 85, 82, 
+    84, 128, 75, 85, 82, 79, 79, 78, 69, 128, 75, 85, 82, 128, 75, 85, 210, 
+    75, 85, 81, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, 128, 75, 85, 79, 
+    208, 75, 85, 79, 77, 128, 75, 85, 79, 128, 75, 85, 78, 71, 128, 75, 85, 
+    78, 68, 68, 65, 76, 73, 89, 65, 128, 75, 85, 76, 128, 75, 85, 204, 75, 
+    85, 69, 84, 128, 75, 85, 55, 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 
+    51, 128, 75, 85, 179, 75, 84, 128, 75, 83, 83, 85, 85, 128, 75, 83, 83, 
+    85, 128, 75, 83, 83, 79, 79, 128, 75, 83, 83, 79, 128, 75, 83, 83, 73, 
+    73, 128, 75, 83, 83, 73, 128, 75, 83, 83, 69, 69, 128, 75, 83, 83, 69, 
+    128, 75, 83, 83, 65, 85, 128, 75, 83, 83, 65, 73, 128, 75, 83, 83, 65, 
+    65, 128, 75, 83, 83, 65, 128, 75, 83, 83, 128, 75, 83, 73, 128, 75, 82, 
+    69, 77, 65, 83, 84, 73, 128, 75, 82, 65, 84, 73, 77, 79, 89, 80, 79, 82, 
+    82, 79, 79, 78, 128, 75, 82, 65, 84, 73, 77, 79, 75, 79, 85, 70, 73, 83, 
+    77, 65, 128, 75, 82, 65, 84, 73, 77, 65, 84, 65, 128, 75, 82, 65, 84, 73, 
+    77, 193, 75, 80, 85, 128, 75, 80, 79, 81, 128, 75, 80, 79, 79, 128, 75, 
+    80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 85, 88, 128, 75, 80, 69, 69, 
+    128, 75, 80, 69, 128, 75, 80, 65, 82, 65, 81, 128, 75, 80, 65, 78, 128, 
+    75, 80, 65, 128, 75, 79, 88, 128, 75, 79, 86, 85, 85, 128, 75, 79, 84, 
+    79, 128, 75, 79, 82, 85, 78, 65, 128, 75, 79, 82, 79, 78, 73, 83, 128, 
+    75, 79, 82, 69, 65, 206, 75, 79, 82, 65, 78, 73, 195, 75, 79, 81, 78, 68, 
+    79, 78, 128, 75, 79, 80, 80, 65, 128, 75, 79, 80, 128, 75, 79, 79, 80, 
+    79, 128, 75, 79, 79, 77, 85, 85, 84, 128, 75, 79, 79, 128, 75, 79, 78, 
+    84, 69, 86, 77, 65, 128, 75, 79, 78, 84, 69, 86, 77, 193, 75, 79, 77, 
+    201, 75, 79, 77, 66, 85, 86, 65, 128, 75, 79, 77, 66, 85, 86, 193, 75, 
+    79, 77, 66, 213, 75, 79, 75, 79, 128, 75, 79, 75, 128, 75, 79, 203, 75, 
+    79, 73, 128, 75, 79, 201, 75, 79, 72, 128, 75, 79, 71, 72, 79, 77, 128, 
+    75, 79, 69, 84, 128, 75, 79, 65, 76, 65, 128, 75, 79, 65, 128, 75, 78, 
+    73, 71, 72, 84, 128, 75, 78, 73, 71, 72, 212, 75, 78, 73, 70, 69, 128, 
+    75, 78, 73, 70, 197, 75, 77, 128, 75, 205, 75, 76, 73, 84, 79, 78, 128, 
+    75, 76, 65, 83, 77, 65, 128, 75, 76, 65, 83, 77, 193, 75, 76, 65, 128, 
+    75, 76, 128, 75, 75, 85, 128, 75, 75, 79, 128, 75, 75, 73, 128, 75, 75, 
+    69, 69, 128, 75, 75, 69, 128, 75, 75, 65, 128, 75, 75, 128, 75, 74, 69, 
+    128, 75, 73, 89, 69, 79, 75, 45, 84, 73, 75, 69, 85, 84, 128, 75, 73, 89, 
+    69, 79, 75, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 75, 73, 
+    89, 69, 79, 75, 45, 82, 73, 69, 85, 76, 128, 75, 73, 89, 69, 79, 75, 45, 
+    80, 73, 69, 85, 80, 128, 75, 73, 89, 69, 79, 75, 45, 78, 73, 69, 85, 78, 
+    128, 75, 73, 89, 69, 79, 75, 45, 75, 72, 73, 69, 85, 75, 72, 128, 75, 73, 
+    89, 69, 79, 75, 45, 67, 72, 73, 69, 85, 67, 72, 128, 75, 73, 89, 69, 79, 
+    203, 75, 73, 88, 128, 75, 73, 84, 128, 75, 73, 83, 83, 73, 78, 199, 75, 
+    73, 83, 83, 128, 75, 73, 83, 211, 75, 73, 83, 73, 77, 53, 128, 75, 73, 
+    83, 73, 77, 181, 75, 73, 83, 72, 128, 75, 73, 83, 65, 76, 128, 75, 73, 
+    82, 79, 87, 65, 84, 84, 79, 128, 75, 73, 82, 79, 77, 69, 69, 84, 79, 82, 
+    85, 128, 75, 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75, 73, 82, 79, 
+    128, 75, 73, 82, 71, 72, 73, 218, 75, 73, 81, 128, 75, 73, 80, 128, 75, 
+    73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 78, 68, 69, 82, 71, 65, 
+    82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75, 73, 73, 128, 75, 
+    73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 128, 75, 73, 69, 69, 
+    77, 128, 75, 73, 69, 128, 75, 73, 68, 128, 75, 73, 196, 75, 73, 67, 75, 
+    128, 75, 72, 90, 128, 75, 72, 87, 65, 73, 128, 75, 72, 85, 69, 78, 45, 
+    76, 85, 197, 75, 72, 85, 69, 206, 75, 72, 85, 68, 65, 77, 128, 75, 72, 
+    85, 65, 84, 128, 75, 72, 79, 85, 128, 75, 72, 79, 212, 75, 72, 79, 78, 
+    128, 75, 72, 79, 77, 85, 84, 128, 75, 72, 79, 128, 75, 72, 207, 75, 72, 
+    77, 213, 75, 72, 73, 84, 128, 75, 72, 73, 78, 89, 65, 128, 75, 72, 73, 
+    69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 79, 128, 75, 72, 72, 65, 
+    128, 75, 72, 69, 84, 72, 128, 75, 72, 69, 73, 128, 75, 72, 69, 69, 128, 
+    75, 72, 69, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 75, 72, 65, 82, 
+    128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, 75, 72, 65, 78, 68, 
+    193, 75, 72, 65, 78, 128, 75, 72, 65, 77, 84, 201, 75, 72, 65, 75, 65, 
+    83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, 72, 128, 75, 72, 
+    65, 200, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, 67, 65, 80, 128, 
+    75, 69, 89, 67, 65, 208, 75, 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 88, 
+    128, 75, 69, 85, 89, 69, 85, 88, 128, 75, 69, 85, 83, 72, 69, 85, 65, 69, 
+    80, 128, 75, 69, 85, 83, 69, 85, 88, 128, 75, 69, 85, 80, 85, 81, 128, 
+    75, 69, 85, 79, 212, 75, 69, 85, 77, 128, 75, 69, 85, 75, 69, 85, 84, 78, 
+    68, 65, 128, 75, 69, 85, 75, 65, 81, 128, 75, 69, 85, 65, 69, 84, 77, 69, 
+    85, 78, 128, 75, 69, 85, 65, 69, 82, 73, 128, 75, 69, 84, 84, 201, 75, 
+    69, 83, 72, 50, 128, 75, 69, 82, 69, 84, 128, 75, 69, 79, 87, 128, 75, 
+    69, 78, 84, 73, 77, 65, 84, 65, 128, 75, 69, 78, 84, 73, 77, 65, 84, 193, 
+    75, 69, 78, 84, 73, 77, 193, 75, 69, 78, 65, 84, 128, 75, 69, 78, 128, 
+    75, 69, 206, 75, 69, 77, 80, 85, 76, 128, 75, 69, 77, 80, 85, 204, 75, 
+    69, 77, 80, 76, 73, 128, 75, 69, 77, 80, 76, 201, 75, 69, 77, 80, 72, 82, 
+    69, 78, 71, 128, 75, 69, 77, 66, 65, 78, 71, 128, 75, 69, 76, 86, 73, 
+    206, 75, 69, 72, 69, 72, 128, 75, 69, 72, 69, 200, 75, 69, 72, 128, 75, 
+    69, 70, 85, 76, 65, 128, 75, 69, 69, 83, 85, 128, 75, 69, 69, 80, 73, 78, 
+    199, 75, 69, 69, 78, 71, 128, 75, 67, 65, 76, 128, 75, 66, 128, 75, 65, 
+    90, 65, 75, 200, 75, 65, 89, 65, 78, 78, 65, 128, 75, 65, 89, 65, 200, 
+    75, 65, 88, 128, 75, 65, 87, 73, 128, 75, 65, 86, 89, 75, 65, 128, 75, 
+    65, 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 85, 128, 75, 65, 84, 79, 
+    128, 75, 65, 84, 72, 73, 83, 84, 73, 128, 75, 65, 84, 72, 65, 75, 193, 
+    75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, 65, 84, 65, 86, 193, 75, 65, 
+    84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65, 71, 65, 78, 193, 75, 65, 83, 
+    82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65, 84, 65, 206, 75, 65, 83, 82, 
+    65, 128, 75, 65, 83, 82, 193, 75, 65, 83, 75, 65, 76, 128, 75, 65, 83, 
+    75, 65, 204, 75, 65, 83, 72, 77, 73, 82, 201, 75, 65, 82, 83, 72, 65, 78, 
+    65, 128, 75, 65, 82, 79, 82, 73, 73, 128, 75, 65, 82, 207, 75, 65, 82, 
+    69, 206, 75, 65, 82, 65, 84, 84, 79, 128, 75, 65, 82, 65, 78, 128, 75, 
+    65, 80, 89, 69, 79, 85, 78, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 
+    75, 65, 80, 89, 69, 79, 85, 78, 82, 73, 69, 85, 76, 128, 75, 65, 80, 89, 
+    69, 79, 85, 78, 80, 72, 73, 69, 85, 80, 72, 128, 75, 65, 80, 89, 69, 79, 
+    85, 78, 77, 73, 69, 85, 77, 128, 75, 65, 80, 80, 65, 128, 75, 65, 80, 80, 
+    193, 75, 65, 80, 79, 128, 75, 65, 80, 72, 128, 75, 65, 80, 65, 76, 128, 
+    75, 65, 80, 65, 128, 75, 65, 78, 84, 65, 74, 193, 75, 65, 78, 71, 128, 
+    75, 65, 78, 199, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, 
+    65, 77, 50, 128, 75, 65, 77, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 
+    66, 65, 84, 128, 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 84, 72, 201, 
+    75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65, 201, 75, 65, 70, 65, 
+    128, 75, 65, 70, 128, 75, 65, 198, 75, 65, 68, 53, 128, 75, 65, 68, 181, 
+    75, 65, 68, 52, 128, 75, 65, 68, 51, 128, 75, 65, 68, 179, 75, 65, 68, 
+    50, 128, 75, 65, 68, 128, 75, 65, 66, 193, 75, 65, 66, 128, 75, 65, 65, 
+    73, 128, 75, 65, 65, 70, 85, 128, 75, 65, 65, 70, 128, 75, 65, 50, 128, 
+    75, 65, 178, 75, 48, 48, 56, 128, 75, 48, 48, 55, 128, 75, 48, 48, 54, 
+    128, 75, 48, 48, 53, 128, 75, 48, 48, 52, 128, 75, 48, 48, 51, 128, 75, 
+    48, 48, 50, 128, 75, 48, 48, 49, 128, 74, 87, 65, 128, 74, 85, 85, 128, 
+    74, 85, 84, 128, 74, 85, 83, 84, 73, 70, 73, 67, 65, 84, 73, 79, 78, 128, 
+    74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 128, 74, 85, 79, 80, 
+    128, 74, 85, 78, 79, 128, 74, 85, 78, 69, 128, 74, 85, 76, 89, 128, 74, 
+    85, 69, 85, 73, 128, 74, 85, 68, 85, 76, 128, 74, 85, 68, 71, 69, 128, 
+    74, 85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200, 74, 79, 89, 79, 85, 
+    211, 74, 79, 89, 128, 74, 79, 86, 69, 128, 74, 79, 212, 74, 79, 78, 71, 
+    128, 74, 79, 78, 193, 74, 79, 75, 69, 82, 128, 74, 79, 73, 78, 69, 68, 
+    128, 74, 79, 73, 78, 128, 74, 79, 65, 128, 74, 74, 89, 88, 128, 74, 74, 
+    89, 84, 128, 74, 74, 89, 80, 128, 74, 74, 89, 128, 74, 74, 85, 88, 128, 
+    74, 74, 85, 84, 128, 74, 74, 85, 82, 88, 128, 74, 74, 85, 82, 128, 74, 
+    74, 85, 80, 128, 74, 74, 85, 79, 88, 128, 74, 74, 85, 79, 80, 128, 74, 
+    74, 85, 79, 128, 74, 74, 85, 128, 74, 74, 79, 88, 128, 74, 74, 79, 84, 
+    128, 74, 74, 79, 80, 128, 74, 74, 79, 128, 74, 74, 73, 88, 128, 74, 74, 
+    73, 84, 128, 74, 74, 73, 80, 128, 74, 74, 73, 69, 88, 128, 74, 74, 73, 
+    69, 84, 128, 74, 74, 73, 69, 80, 128, 74, 74, 73, 69, 128, 74, 74, 73, 
+    128, 74, 74, 69, 69, 128, 74, 74, 69, 128, 74, 74, 65, 128, 74, 73, 76, 
+    128, 74, 73, 73, 128, 74, 73, 72, 86, 65, 77, 85, 76, 73, 89, 65, 128, 
+    74, 73, 65, 128, 74, 72, 79, 128, 74, 72, 69, 72, 128, 74, 72, 65, 78, 
+    128, 74, 72, 65, 77, 128, 74, 72, 65, 65, 128, 74, 72, 65, 128, 74, 69, 
+    85, 128, 74, 69, 82, 85, 83, 65, 76, 69, 77, 128, 74, 69, 82, 65, 206, 
+    74, 69, 82, 65, 128, 74, 69, 82, 128, 74, 69, 72, 128, 74, 69, 200, 74, 
+    69, 71, 79, 71, 65, 78, 128, 74, 69, 69, 77, 128, 74, 69, 65, 78, 83, 
+    128, 74, 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 89, 65, 78, 73, 
+    128, 74, 65, 85, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 
+    74, 65, 80, 65, 78, 128, 74, 65, 78, 85, 65, 82, 89, 128, 74, 65, 76, 76, 
+    65, 74, 65, 76, 65, 76, 79, 85, 72, 79, 85, 128, 74, 65, 73, 128, 74, 65, 
+    72, 128, 74, 65, 68, 69, 128, 74, 65, 67, 75, 45, 79, 45, 76, 65, 78, 84, 
+    69, 82, 78, 128, 74, 65, 67, 203, 74, 45, 83, 73, 77, 80, 76, 73, 70, 73, 
+    69, 196, 202, 73, 90, 72, 73, 84, 83, 65, 128, 73, 90, 72, 73, 84, 83, 
+    193, 73, 90, 72, 69, 128, 73, 90, 65, 75, 65, 89, 193, 73, 89, 69, 75, 
+    128, 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, 
+    84, 211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 
+    83, 83, 72, 65, 82, 128, 73, 83, 79, 78, 128, 73, 83, 79, 206, 73, 83, 
+    79, 76, 65, 84, 69, 128, 73, 83, 69, 78, 45, 73, 83, 69, 78, 128, 73, 83, 
+    65, 75, 73, 193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, 82, 85, 89, 65, 
+    78, 78, 65, 128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 73, 82, 79, 78, 
+    45, 67, 79, 80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 79, 84, 73, 70, 73, 
+    69, 196, 73, 79, 84, 65, 84, 69, 196, 73, 79, 84, 65, 128, 73, 79, 84, 
+    193, 73, 79, 82, 128, 73, 79, 68, 72, 65, 68, 72, 128, 73, 78, 86, 73, 
+    83, 73, 66, 76, 197, 73, 78, 86, 69, 82, 84, 69, 68, 128, 73, 78, 86, 69, 
+    82, 84, 69, 196, 73, 78, 86, 69, 82, 83, 197, 73, 78, 84, 82, 79, 68, 85, 
+    67, 69, 82, 128, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, 83, 89, 76, 76, 
+    65, 66, 73, 195, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 78, 128, 73, 
+    78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 206, 73, 78, 84, 69, 82, 83, 69, 
+    67, 84, 73, 78, 199, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 71, 128, 73, 
+    78, 84, 69, 82, 80, 79, 76, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, 
+    79, 67, 75, 69, 196, 73, 78, 84, 69, 82, 76, 73, 78, 69, 65, 210, 73, 78, 
+    84, 69, 82, 76, 65, 67, 69, 196, 73, 78, 84, 69, 82, 73, 79, 210, 73, 78, 
+    84, 69, 82, 69, 83, 212, 73, 78, 84, 69, 82, 67, 65, 76, 65, 84, 69, 128, 
+    73, 78, 84, 69, 71, 82, 65, 84, 73, 79, 78, 128, 73, 78, 84, 69, 71, 82, 
+    65, 84, 73, 79, 206, 73, 78, 84, 69, 71, 82, 65, 76, 128, 73, 78, 84, 69, 
+    71, 82, 65, 204, 73, 78, 83, 85, 76, 65, 210, 73, 78, 83, 84, 82, 85, 77, 
+    69, 78, 84, 65, 204, 73, 78, 83, 73, 68, 69, 128, 73, 78, 83, 69, 82, 84, 
+    73, 79, 206, 73, 78, 83, 69, 67, 84, 128, 73, 78, 83, 67, 82, 73, 80, 84, 
+    73, 79, 78, 65, 204, 73, 78, 80, 85, 212, 73, 78, 78, 79, 67, 69, 78, 67, 
+    69, 128, 73, 78, 78, 78, 128, 73, 78, 78, 69, 82, 128, 73, 78, 78, 69, 
+    210, 73, 78, 78, 128, 73, 78, 73, 78, 71, 85, 128, 73, 78, 73, 128, 73, 
+    78, 72, 73, 66, 73, 212, 73, 78, 72, 69, 82, 69, 78, 212, 73, 78, 71, 87, 
+    65, 90, 128, 73, 78, 70, 79, 82, 77, 65, 84, 73, 79, 206, 73, 78, 70, 76, 
+    85, 69, 78, 67, 69, 128, 73, 78, 70, 73, 78, 73, 84, 89, 128, 73, 78, 70, 
+    73, 78, 73, 84, 217, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204, 73, 78, 68, 
+    73, 82, 69, 67, 212, 73, 78, 68, 73, 67, 65, 84, 79, 82, 128, 73, 78, 68, 
+    73, 67, 65, 84, 79, 210, 73, 78, 68, 73, 195, 73, 78, 68, 73, 65, 206, 
+    73, 78, 68, 69, 88, 128, 73, 78, 68, 69, 80, 69, 78, 68, 69, 78, 212, 73, 
+    78, 67, 82, 69, 77, 69, 78, 84, 128, 73, 78, 67, 82, 69, 65, 83, 69, 211, 
+    73, 78, 67, 82, 69, 65, 83, 69, 128, 73, 78, 67, 79, 77, 80, 76, 69, 84, 
+    197, 73, 78, 67, 79, 77, 73, 78, 199, 73, 78, 67, 76, 85, 68, 73, 78, 
+    199, 73, 78, 67, 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, 80, 128, 73, 
+    78, 45, 65, 76, 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, 204, 73, 77, 80, 
+    69, 82, 70, 69, 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, 69, 67, 84, 65, 
+    128, 73, 77, 80, 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, 128, 73, 77, 
+    73, 83, 69, 79, 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, 78, 128, 73, 
+    77, 73, 206, 73, 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, 73, 77, 73, 70, 
+    84, 72, 79, 82, 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, 128, 73, 77, 73, 
+    68, 73, 65, 82, 71, 79, 78, 128, 73, 77, 65, 71, 197, 73, 76, 85, 89, 65, 
+    78, 78, 65, 128, 73, 76, 85, 89, 128, 73, 76, 85, 85, 89, 65, 78, 78, 65, 
+    128, 73, 76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 76, 73, 
+    77, 77, 85, 51, 128, 73, 76, 73, 77, 77, 85, 128, 73, 76, 73, 77, 77, 
+    213, 73, 76, 50, 128, 73, 75, 65, 82, 65, 128, 73, 75, 65, 82, 193, 73, 
+    74, 128, 73, 73, 89, 65, 78, 78, 65, 128, 73, 71, 73, 128, 73, 71, 201, 
+    73, 71, 71, 87, 83, 128, 73, 70, 73, 78, 128, 73, 69, 85, 78, 71, 45, 84, 
+    73, 75, 69, 85, 84, 128, 73, 69, 85, 78, 71, 45, 84, 72, 73, 69, 85, 84, 
+    72, 128, 73, 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 
+    75, 128, 73, 69, 85, 78, 71, 45, 82, 73, 69, 85, 76, 128, 73, 69, 85, 78, 
+    71, 45, 80, 73, 69, 85, 80, 128, 73, 69, 85, 78, 71, 45, 80, 72, 73, 69, 
+    85, 80, 72, 128, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 73, 
+    69, 85, 78, 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 73, 69, 85, 78, 71, 
+    45, 67, 73, 69, 85, 67, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69, 85, 
+    67, 72, 128, 73, 69, 85, 78, 199, 73, 68, 76, 69, 128, 73, 68, 73, 77, 
+    128, 73, 68, 73, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 66, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 53, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 
+    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 70, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 66, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 53, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 
+    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 70, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 66, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 53, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 
+    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 70, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 66, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 53, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 
+    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 70, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 66, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 53, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 
+    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 70, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 66, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 53, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 
+    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 70, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 66, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 53, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 
+    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 70, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 66, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 53, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 
+    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 70, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 66, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 53, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 
+    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 70, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 
+    66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 
+    53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 51, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 
+    70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 57, 48, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    56, 68, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 67, 65, 
+    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 57, 69, 51, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 68, 52, 50, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 55, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 55, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    55, 54, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 51, 
+    51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 49, 70, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 49, 50, 49, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 55, 48, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 54, 70, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    54, 69, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 50, 
+    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 57, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 56, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 54, 54, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 54, 53, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    54, 53, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 53, 
+    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 53, 53, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 48, 55, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 54, 50, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 54, 50, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    54, 50, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 70, 56, 
+    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 68, 69, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 66, 56, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 53, 66, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 53, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    53, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 56, 70, 
+    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 53, 66, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 52, 51, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 53, 52, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 53, 51, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    53, 51, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 68, 
+    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 55, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 52, 68, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 53, 50, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 53, 49, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 
+    52, 69, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 56, 
+    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 50, 68, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 48, 57, 128, 73, 68, 69, 79, 
+    71, 82, 65, 80, 72, 45, 52, 69, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 
+    49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 57, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 55, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 
+    49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 48, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 70, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 69, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 
+    48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 55, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 53, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 69, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 68, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 67, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 53, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 51, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 67, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 66, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 65, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 51, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 49, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 65, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 57, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 56, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 49, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 70, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 56, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 55, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 54, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 70, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 68, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 54, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 53, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 52, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 68, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 66, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 52, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 51, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 50, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 66, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 57, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 50, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 49, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 48, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 57, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 55, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 48, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 70, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 69, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 55, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 53, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 69, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 68, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 67, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 53, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 51, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 67, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 66, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 65, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 51, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 49, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 65, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 57, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 56, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 49, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 70, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 56, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 55, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 54, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 70, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 68, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 54, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 53, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 52, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 68, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 66, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 52, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 51, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 50, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 66, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 57, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 
+    48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 50, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 49, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 48, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 70, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 57, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 55, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 54, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 48, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 70, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 69, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 68, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 55, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 53, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 52, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 69, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 68, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 67, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 66, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 53, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 51, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 50, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 67, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 66, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 65, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 57, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 51, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 49, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 48, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 65, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 57, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 56, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 55, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 49, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 70, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 69, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 56, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 55, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 54, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 53, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 70, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 68, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 67, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 54, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 53, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 52, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 51, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 68, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 67, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 66, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 65, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 52, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 51, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 50, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 49, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 66, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 65, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 57, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 56, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 50, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 49, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 48, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 70, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 57, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 56, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 55, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 54, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 48, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 70, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 69, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 68, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 55, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 54, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 53, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 52, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 69, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 68, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 67, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 66, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 53, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 52, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 51, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 50, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 67, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 66, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 65, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 57, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 51, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 50, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 49, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 48, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 65, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 57, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 56, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 55, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 49, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 48, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 70, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 69, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 56, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 55, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 54, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 53, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 70, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 69, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 68, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 67, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 
+    70, 56, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 
+    48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 54, 
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 53, 128, 73, 
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 52, 128, 73, 68, 69, 
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 51, 128, 73, 68, 69, 79, 71, 
+    82, 65, 80, 72, 45, 50, 70, 56, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 
+    80, 72, 45, 50, 70, 56, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 
+    45, 50, 70, 56, 48, 48, 128, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65, 84, 
+    73, 79, 78, 128, 73, 68, 69, 78, 84, 73, 67, 65, 204, 73, 67, 72, 79, 85, 
+    128, 73, 67, 72, 79, 83, 128, 73, 67, 72, 73, 77, 65, 84, 79, 83, 128, 
+    73, 67, 72, 65, 68, 73, 78, 128, 73, 67, 69, 76, 65, 78, 68, 73, 67, 45, 
+    89, 82, 128, 73, 66, 73, 70, 73, 76, 73, 128, 73, 65, 85, 68, 65, 128, 
+    73, 48, 49, 53, 128, 73, 48, 49, 52, 128, 73, 48, 49, 51, 128, 73, 48, 
+    49, 50, 128, 73, 48, 49, 49, 65, 128, 73, 48, 49, 49, 128, 73, 48, 49, 
+    48, 65, 128, 73, 48, 49, 48, 128, 73, 48, 48, 57, 65, 128, 73, 48, 48, 
+    57, 128, 73, 48, 48, 56, 128, 73, 48, 48, 55, 128, 73, 48, 48, 54, 128, 
+    73, 48, 48, 53, 65, 128, 73, 48, 48, 53, 128, 73, 48, 48, 52, 128, 73, 
+    48, 48, 51, 128, 73, 48, 48, 50, 128, 73, 48, 48, 49, 128, 73, 45, 89, 
+    85, 128, 73, 45, 89, 79, 128, 73, 45, 89, 69, 79, 128, 73, 45, 89, 69, 
+    128, 73, 45, 89, 65, 69, 128, 73, 45, 89, 65, 45, 79, 128, 73, 45, 89, 
+    65, 128, 73, 45, 79, 45, 73, 128, 73, 45, 79, 128, 73, 45, 69, 85, 128, 
+    73, 45, 66, 69, 65, 77, 128, 73, 45, 65, 82, 65, 69, 65, 128, 73, 45, 65, 
+    128, 72, 90, 90, 90, 71, 128, 72, 90, 90, 90, 128, 72, 90, 90, 80, 128, 
+    72, 90, 90, 128, 72, 90, 87, 71, 128, 72, 90, 87, 128, 72, 90, 84, 128, 
+    72, 90, 71, 128, 72, 89, 83, 84, 69, 82, 69, 83, 73, 211, 72, 89, 80, 79, 
+    68, 73, 65, 83, 84, 79, 76, 69, 128, 72, 89, 80, 72, 69, 78, 65, 84, 73, 
+    79, 206, 72, 89, 80, 72, 69, 78, 45, 77, 73, 78, 85, 83, 128, 72, 89, 80, 
+    72, 69, 78, 128, 72, 89, 80, 72, 69, 206, 72, 88, 87, 71, 128, 72, 88, 
+    85, 79, 88, 128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79, 80, 128, 72, 
+    88, 85, 79, 128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128, 72, 88, 79, 
+    80, 128, 72, 88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73, 84, 128, 72, 
+    88, 73, 80, 128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69, 84, 128, 72, 
+    88, 73, 69, 80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128, 72, 88, 69, 
+    88, 128, 72, 88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65, 88, 128, 72, 
+    88, 65, 84, 128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72, 87, 85, 128, 
+    72, 87, 65, 73, 82, 128, 72, 86, 128, 72, 85, 83, 72, 69, 196, 72, 85, 
+    82, 65, 78, 128, 72, 85, 79, 84, 128, 72, 85, 78, 68, 82, 69, 68, 128, 
+    72, 85, 78, 68, 82, 69, 196, 72, 85, 78, 128, 72, 85, 77, 65, 78, 128, 
+    72, 85, 77, 65, 206, 72, 85, 76, 50, 128, 72, 85, 73, 73, 84, 79, 128, 
+    72, 85, 66, 50, 128, 72, 85, 66, 178, 72, 85, 66, 128, 72, 85, 65, 82, 
+    65, 68, 68, 79, 128, 72, 84, 83, 128, 72, 84, 74, 128, 72, 82, 89, 86, 
+    78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, 80, 128, 72, 79, 
+    85, 83, 197, 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, 85, 82, 71, 
+    76, 65, 83, 211, 72, 79, 85, 82, 128, 72, 79, 85, 210, 72, 79, 84, 69, 
+    76, 128, 72, 79, 84, 65, 128, 72, 79, 83, 80, 73, 84, 65, 76, 128, 72, 
+    79, 82, 83, 69, 128, 72, 79, 82, 83, 197, 72, 79, 82, 78, 83, 128, 72, 
+    79, 82, 73, 90, 79, 78, 84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, 78, 
+    84, 65, 76, 45, 48, 54, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 
+    65, 76, 45, 48, 54, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 
+    76, 45, 48, 54, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 
+    45, 48, 54, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 
+    48, 54, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 
+    54, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 
+    45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 
+    48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 
+    53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 52, 
+    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, 128, 
+    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, 72, 
+    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, 79, 
+    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, 82, 
+    73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, 73, 
+    90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, 90, 
+    79, 78, 84, 65, 76, 45, 48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 
+    78, 84, 65, 76, 45, 48, 52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 
+    84, 65, 76, 45, 48, 52, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 
+    65, 76, 45, 48, 52, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 
+    76, 45, 48, 52, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 
+    45, 48, 51, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 
+    48, 51, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 
+    51, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 
+    45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 
+    48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 
+    49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 48, 
+    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, 128, 
+    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, 72, 
+    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, 79, 
+    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, 82, 
+    73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, 73, 
+    90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, 90, 
+    79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 
+    78, 84, 65, 76, 45, 48, 49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 
+    84, 65, 76, 45, 48, 49, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 
+    65, 76, 45, 48, 49, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 
+    76, 45, 48, 49, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 
+    45, 48, 49, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 
+    48, 49, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 
+    49, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 
+    45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 
+    48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 
+    52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 51, 
+    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, 128, 
+    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, 72, 
+    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, 79, 
+    82, 73, 90, 79, 78, 84, 65, 76, 128, 72, 79, 82, 73, 128, 72, 79, 82, 
+    193, 72, 79, 79, 82, 85, 128, 72, 79, 79, 80, 128, 72, 79, 79, 78, 128, 
+    72, 79, 79, 75, 69, 196, 72, 79, 78, 69, 89, 66, 69, 69, 128, 72, 79, 78, 
+    69, 217, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84, 
+    72, 69, 84, 73, 195, 72, 79, 76, 69, 128, 72, 79, 76, 68, 73, 78, 199, 
+    72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 75, 65, 128, 72, 
+    79, 73, 128, 72, 79, 67, 72, 79, 128, 72, 78, 85, 84, 128, 72, 78, 85, 
+    79, 88, 128, 72, 78, 85, 79, 128, 72, 78, 79, 88, 128, 72, 78, 79, 84, 
+    128, 72, 78, 79, 80, 128, 72, 78, 73, 88, 128, 72, 78, 73, 84, 128, 72, 
+    78, 73, 80, 128, 72, 78, 73, 69, 88, 128, 72, 78, 73, 69, 84, 128, 72, 
+    78, 73, 69, 80, 128, 72, 78, 73, 69, 128, 72, 78, 73, 128, 72, 78, 69, 
+    88, 128, 72, 78, 69, 80, 128, 72, 78, 69, 128, 72, 78, 65, 88, 128, 72, 
+    78, 65, 84, 128, 72, 78, 65, 80, 128, 72, 78, 65, 128, 72, 77, 89, 88, 
+    128, 72, 77, 89, 82, 88, 128, 72, 77, 89, 82, 128, 72, 77, 89, 80, 128, 
+    72, 77, 89, 128, 72, 77, 85, 88, 128, 72, 77, 85, 84, 128, 72, 77, 85, 
+    82, 88, 128, 72, 77, 85, 82, 128, 72, 77, 85, 80, 128, 72, 77, 85, 79, 
+    88, 128, 72, 77, 85, 79, 80, 128, 72, 77, 85, 79, 128, 72, 77, 85, 128, 
+    72, 77, 79, 88, 128, 72, 77, 79, 84, 128, 72, 77, 79, 80, 128, 72, 77, 
+    79, 128, 72, 77, 73, 88, 128, 72, 77, 73, 84, 128, 72, 77, 73, 80, 128, 
+    72, 77, 73, 69, 88, 128, 72, 77, 73, 69, 80, 128, 72, 77, 73, 69, 128, 
+    72, 77, 73, 128, 72, 77, 69, 128, 72, 77, 65, 88, 128, 72, 77, 65, 84, 
+    128, 72, 77, 65, 80, 128, 72, 77, 65, 128, 72, 76, 89, 88, 128, 72, 76, 
+    89, 84, 128, 72, 76, 89, 82, 88, 128, 72, 76, 89, 82, 128, 72, 76, 89, 
+    80, 128, 72, 76, 89, 128, 72, 76, 85, 88, 128, 72, 76, 85, 84, 128, 72, 
+    76, 85, 82, 88, 128, 72, 76, 85, 82, 128, 72, 76, 85, 80, 128, 72, 76, 
+    85, 79, 88, 128, 72, 76, 85, 79, 80, 128, 72, 76, 85, 79, 128, 72, 76, 
+    85, 128, 72, 76, 79, 88, 128, 72, 76, 79, 80, 128, 72, 76, 79, 128, 72, 
+    76, 73, 88, 128, 72, 76, 73, 84, 128, 72, 76, 73, 80, 128, 72, 76, 73, 
+    69, 88, 128, 72, 76, 73, 69, 80, 128, 72, 76, 73, 69, 128, 72, 76, 73, 
+    128, 72, 76, 69, 88, 128, 72, 76, 69, 80, 128, 72, 76, 69, 128, 72, 76, 
+    65, 88, 128, 72, 76, 65, 84, 128, 72, 76, 65, 80, 128, 72, 76, 65, 128, 
+    72, 75, 128, 72, 73, 90, 66, 128, 72, 73, 83, 84, 79, 82, 73, 195, 72, 
+    73, 82, 73, 81, 128, 72, 73, 71, 72, 45, 83, 80, 69, 69, 196, 72, 73, 71, 
+    72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 71, 72, 45, 72, 
+    69, 69, 76, 69, 196, 72, 73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, 73, 
+    79, 83, 128, 72, 73, 69, 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, 69, 
+    85, 72, 45, 80, 73, 69, 85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, 69, 
+    85, 78, 128, 72, 73, 69, 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, 
+    85, 200, 72, 73, 69, 82, 79, 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, 
+    128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, 
+    128, 72, 73, 66, 73, 83, 67, 85, 83, 128, 72, 72, 87, 65, 128, 72, 72, 
+    85, 128, 72, 72, 73, 128, 72, 72, 69, 69, 128, 72, 72, 69, 128, 72, 72, 
+    65, 65, 128, 72, 71, 128, 72, 69, 88, 73, 70, 79, 82, 205, 72, 69, 88, 
+    65, 71, 82, 65, 205, 72, 69, 88, 65, 71, 79, 78, 128, 72, 69, 82, 85, 84, 
+    85, 128, 72, 69, 82, 85, 128, 72, 69, 82, 77, 73, 84, 73, 65, 206, 72, 
+    69, 82, 77, 73, 79, 78, 73, 65, 206, 72, 69, 82, 77, 69, 83, 128, 72, 69, 
+    82, 69, 128, 72, 69, 82, 66, 128, 72, 69, 82, 65, 69, 85, 205, 72, 69, 
+    78, 71, 128, 72, 69, 78, 199, 72, 69, 77, 80, 128, 72, 69, 76, 77, 69, 
+    84, 128, 72, 69, 76, 77, 69, 212, 72, 69, 76, 205, 72, 69, 76, 73, 67, 
+    79, 80, 84, 69, 82, 128, 72, 69, 75, 85, 84, 65, 65, 82, 85, 128, 72, 69, 
+    73, 83, 69, 73, 128, 72, 69, 65, 86, 89, 128, 72, 69, 65, 86, 69, 78, 76, 
+    217, 72, 69, 65, 86, 69, 78, 128, 72, 69, 65, 86, 69, 206, 72, 69, 65, 
+    82, 84, 83, 128, 72, 69, 65, 82, 84, 45, 83, 72, 65, 80, 69, 196, 72, 69, 
+    65, 82, 84, 128, 72, 69, 65, 82, 212, 72, 69, 65, 82, 45, 78, 79, 45, 69, 
+    86, 73, 204, 72, 69, 65, 68, 83, 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 
+    83, 84, 79, 78, 197, 72, 69, 65, 68, 80, 72, 79, 78, 69, 128, 72, 69, 65, 
+    68, 73, 78, 71, 128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, 72, 66, 
+    65, 83, 193, 72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 86, 69, 128, 72, 
+    65, 85, 80, 84, 83, 84, 73, 77, 77, 69, 128, 72, 65, 84, 72, 73, 128, 72, 
+    65, 84, 69, 128, 72, 65, 84, 67, 72, 73, 78, 199, 72, 65, 84, 65, 198, 
+    72, 65, 83, 69, 210, 72, 65, 83, 65, 78, 84, 65, 128, 72, 65, 82, 80, 79, 
+    79, 78, 128, 72, 65, 82, 80, 79, 79, 206, 72, 65, 82, 77, 79, 78, 73, 67, 
+    128, 72, 65, 82, 75, 76, 69, 65, 206, 72, 65, 82, 68, 78, 69, 83, 83, 
+    128, 72, 65, 82, 196, 72, 65, 80, 80, 217, 72, 65, 78, 85, 78, 79, 207, 
+    72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 
+    211, 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, 
+    65, 78, 68, 66, 65, 71, 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 
+    65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 83, 84, 69, 210, 72, 
+    65, 77, 77, 69, 82, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77, 66, 85, 82, 
+    71, 69, 82, 128, 72, 65, 76, 81, 65, 128, 72, 65, 76, 79, 128, 72, 65, 
+    76, 70, 45, 67, 73, 82, 67, 76, 197, 72, 65, 76, 70, 128, 72, 65, 76, 66, 
+    69, 82, 68, 128, 72, 65, 76, 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, 
+    128, 72, 65, 73, 82, 67, 85, 84, 128, 72, 65, 73, 82, 128, 72, 65, 71, 
+    76, 65, 218, 72, 65, 71, 76, 128, 72, 65, 70, 85, 75, 72, 65, 128, 72, 
+    65, 70, 85, 75, 72, 128, 72, 65, 69, 71, 204, 72, 65, 65, 82, 85, 128, 
+    72, 65, 65, 77, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, 48, 48, 
+    56, 128, 72, 48, 48, 55, 128, 72, 48, 48, 54, 65, 128, 72, 48, 48, 54, 
+    128, 72, 48, 48, 53, 128, 72, 48, 48, 52, 128, 72, 48, 48, 51, 128, 72, 
+    48, 48, 50, 128, 72, 48, 48, 49, 128, 72, 45, 84, 89, 80, 197, 71, 89, 
+    85, 128, 71, 89, 79, 78, 128, 71, 89, 79, 128, 71, 89, 73, 128, 71, 89, 
+    70, 213, 71, 89, 69, 69, 128, 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, 
+    71, 89, 65, 128, 71, 89, 128, 71, 87, 85, 128, 71, 87, 73, 128, 71, 87, 
+    69, 69, 128, 71, 87, 69, 128, 71, 87, 65, 65, 128, 71, 87, 65, 128, 71, 
+    86, 128, 71, 85, 82, 85, 83, 72, 128, 71, 85, 82, 85, 78, 128, 71, 85, 
+    82, 65, 77, 85, 84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78, 85, 
+    128, 71, 85, 78, 213, 71, 85, 205, 71, 85, 76, 128, 71, 85, 73, 84, 65, 
+    82, 128, 71, 85, 199, 71, 85, 69, 72, 128, 71, 85, 69, 200, 71, 85, 68, 
+    128, 71, 85, 196, 71, 85, 65, 82, 68, 83, 77, 65, 78, 128, 71, 85, 65, 
+    82, 68, 69, 68, 78, 69, 83, 83, 128, 71, 85, 65, 82, 68, 69, 196, 71, 85, 
+    65, 82, 68, 128, 71, 85, 65, 82, 65, 78, 201, 71, 85, 193, 71, 85, 178, 
+    71, 84, 69, 210, 71, 83, 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, 
+    82, 79, 87, 73, 78, 199, 71, 82, 79, 85, 78, 68, 128, 71, 82, 79, 78, 84, 
+    72, 73, 83, 77, 65, 84, 65, 128, 71, 82, 73, 78, 78, 73, 78, 199, 71, 82, 
+    73, 77, 65, 67, 73, 78, 199, 71, 82, 69, 71, 79, 82, 73, 65, 206, 71, 82, 
+    69, 69, 206, 71, 82, 69, 65, 84, 78, 69, 83, 83, 128, 71, 82, 69, 65, 84, 
+    69, 82, 45, 84, 72, 65, 78, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 
+    65, 206, 71, 82, 69, 65, 84, 69, 210, 71, 82, 69, 65, 212, 71, 82, 65, 
+    86, 69, 89, 65, 82, 196, 71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, 78, 
+    128, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 
+    128, 71, 82, 65, 86, 197, 71, 82, 65, 84, 69, 82, 128, 71, 82, 65, 83, 
+    83, 128, 71, 82, 65, 83, 211, 71, 82, 65, 80, 72, 69, 77, 197, 71, 82, 
+    65, 80, 69, 83, 128, 71, 82, 65, 77, 77, 193, 71, 82, 65, 73, 78, 128, 
+    71, 82, 65, 68, 85, 65, 84, 73, 79, 206, 71, 82, 65, 67, 69, 128, 71, 82, 
+    65, 67, 197, 71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73, 75, 79, 206, 
+    71, 79, 82, 84, 128, 71, 79, 82, 71, 79, 84, 69, 82, 73, 128, 71, 79, 82, 
+    71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 71, 79, 82, 71, 79, 206, 
+    71, 79, 82, 71, 73, 128, 71, 79, 82, 65, 128, 71, 79, 79, 196, 71, 79, 
+    78, 71, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, 78, 199, 
+    71, 79, 66, 76, 73, 78, 128, 71, 79, 65, 76, 128, 71, 79, 65, 204, 71, 
+    79, 65, 128, 71, 78, 89, 73, 83, 128, 71, 78, 65, 86, 73, 89, 65, 78, 73, 
+    128, 71, 76, 79, 87, 73, 78, 199, 71, 76, 79, 84, 84, 65, 204, 71, 76, 
+    79, 66, 197, 71, 76, 73, 83, 83, 65, 78, 68, 207, 71, 76, 69, 73, 67, 
+    200, 71, 76, 65, 71, 79, 76, 73, 128, 71, 76, 65, 128, 71, 74, 69, 128, 
+    71, 73, 88, 128, 71, 73, 84, 128, 71, 73, 83, 72, 128, 71, 73, 83, 200, 
+    71, 73, 83, 65, 76, 128, 71, 73, 82, 85, 68, 65, 65, 128, 71, 73, 82, 76, 
+    128, 71, 73, 82, 51, 128, 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, 
+    82, 178, 71, 73, 80, 128, 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, 
+    128, 71, 73, 77, 69, 204, 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, 
+    69, 84, 128, 71, 73, 68, 73, 77, 128, 71, 73, 66, 66, 79, 85, 211, 71, 
+    73, 66, 65, 128, 71, 73, 52, 128, 71, 73, 180, 71, 72, 90, 128, 71, 72, 
+    87, 65, 128, 71, 72, 85, 78, 78, 65, 128, 71, 72, 85, 78, 78, 193, 71, 
+    72, 85, 128, 71, 72, 79, 85, 128, 71, 72, 79, 83, 84, 128, 71, 72, 79, 
+    128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72, 69, 85, 88, 128, 71, 
+    72, 69, 85, 78, 128, 71, 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128, 71, 
+    72, 69, 85, 71, 72, 69, 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69, 128, 
+    71, 72, 69, 85, 65, 69, 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84, 128, 
+    71, 72, 69, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 
+    128, 71, 72, 65, 82, 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65, 78, 
+    128, 71, 72, 65, 77, 65, 76, 128, 71, 72, 65, 73, 78, 85, 128, 71, 72, 
+    65, 73, 78, 128, 71, 72, 65, 73, 206, 71, 72, 65, 68, 128, 71, 72, 65, 
+    65, 77, 65, 69, 128, 71, 72, 65, 65, 128, 71, 71, 87, 73, 128, 71, 71, 
+    87, 69, 69, 128, 71, 71, 87, 69, 128, 71, 71, 87, 65, 65, 128, 71, 71, 
+    87, 65, 128, 71, 71, 85, 88, 128, 71, 71, 85, 84, 128, 71, 71, 85, 82, 
+    88, 128, 71, 71, 85, 82, 128, 71, 71, 85, 79, 88, 128, 71, 71, 85, 79, 
+    84, 128, 71, 71, 85, 79, 80, 128, 71, 71, 85, 79, 128, 71, 71, 79, 88, 
+    128, 71, 71, 79, 84, 128, 71, 71, 79, 80, 128, 71, 71, 73, 88, 128, 71, 
+    71, 73, 84, 128, 71, 71, 73, 69, 88, 128, 71, 71, 73, 69, 80, 128, 71, 
+    71, 73, 69, 128, 71, 71, 69, 88, 128, 71, 71, 69, 84, 128, 71, 71, 69, 
+    80, 128, 71, 71, 65, 88, 128, 71, 71, 65, 84, 128, 71, 71, 65, 65, 128, 
+    71, 69, 84, 193, 71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, 72, 85, 
+    128, 71, 69, 83, 72, 84, 73, 78, 128, 71, 69, 83, 72, 84, 73, 206, 71, 
+    69, 83, 72, 50, 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, 71, 69, 82, 
+    77, 65, 206, 71, 69, 82, 69, 83, 72, 128, 71, 69, 82, 69, 83, 200, 71, 
+    69, 79, 77, 69, 84, 82, 73, 67, 65, 76, 76, 217, 71, 69, 79, 77, 69, 84, 
+    82, 73, 195, 71, 69, 78, 84, 76, 197, 71, 69, 78, 73, 84, 73, 86, 69, 
+    128, 71, 69, 78, 73, 75, 201, 71, 69, 78, 69, 82, 73, 195, 71, 69, 77, 
+    73, 78, 73, 128, 71, 69, 77, 73, 78, 65, 84, 73, 79, 206, 71, 69, 205, 
+    71, 69, 68, 79, 76, 65, 128, 71, 69, 68, 69, 128, 71, 69, 66, 207, 71, 
+    69, 66, 193, 71, 69, 65, 82, 128, 71, 69, 65, 210, 71, 68, 65, 78, 128, 
+    71, 67, 73, 71, 128, 71, 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 73, 
+    69, 197, 71, 66, 69, 85, 88, 128, 71, 66, 69, 84, 128, 71, 66, 65, 89, 
+    73, 128, 71, 66, 65, 75, 85, 82, 85, 78, 69, 78, 128, 71, 66, 128, 71, 
+    65, 89, 65, 78, 85, 75, 73, 84, 84, 65, 128, 71, 65, 89, 65, 78, 78, 65, 
+    128, 71, 65, 89, 128, 71, 65, 85, 78, 84, 76, 69, 84, 128, 71, 65, 84, 
+    72, 69, 82, 73, 78, 71, 128, 71, 65, 84, 72, 69, 82, 73, 78, 199, 71, 65, 
+    84, 69, 128, 71, 65, 83, 72, 65, 78, 128, 71, 65, 82, 83, 72, 85, 78, 73, 
+    128, 71, 65, 82, 79, 78, 128, 71, 65, 82, 77, 69, 78, 84, 128, 71, 65, 
+    82, 68, 69, 78, 128, 71, 65, 82, 51, 128, 71, 65, 80, 80, 69, 196, 71, 
+    65, 208, 71, 65, 78, 77, 65, 128, 71, 65, 78, 71, 73, 65, 128, 71, 65, 
+    78, 68, 193, 71, 65, 78, 50, 128, 71, 65, 78, 178, 71, 65, 77, 77, 65, 
+    128, 71, 65, 77, 76, 65, 128, 71, 65, 77, 76, 128, 71, 65, 77, 69, 128, 
+    71, 65, 77, 197, 71, 65, 77, 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 
+    65, 77, 65, 204, 71, 65, 71, 128, 71, 65, 70, 128, 71, 65, 198, 71, 65, 
+    69, 84, 84, 65, 45, 80, 73, 76, 76, 65, 128, 71, 65, 68, 79, 76, 128, 71, 
+    65, 68, 128, 71, 65, 196, 71, 65, 66, 65, 128, 71, 65, 66, 193, 71, 65, 
+    65, 70, 85, 128, 71, 65, 178, 71, 48, 53, 52, 128, 71, 48, 53, 51, 128, 
+    71, 48, 53, 50, 128, 71, 48, 53, 49, 128, 71, 48, 53, 48, 128, 71, 48, 
+    52, 57, 128, 71, 48, 52, 56, 128, 71, 48, 52, 55, 128, 71, 48, 52, 54, 
+    128, 71, 48, 52, 53, 65, 128, 71, 48, 52, 53, 128, 71, 48, 52, 52, 128, 
+    71, 48, 52, 51, 65, 128, 71, 48, 52, 51, 128, 71, 48, 52, 50, 128, 71, 
+    48, 52, 49, 128, 71, 48, 52, 48, 128, 71, 48, 51, 57, 128, 71, 48, 51, 
+    56, 128, 71, 48, 51, 55, 65, 128, 71, 48, 51, 55, 128, 71, 48, 51, 54, 
+    65, 128, 71, 48, 51, 54, 128, 71, 48, 51, 53, 128, 71, 48, 51, 52, 128, 
+    71, 48, 51, 51, 128, 71, 48, 51, 50, 128, 71, 48, 51, 49, 128, 71, 48, 
+    51, 48, 128, 71, 48, 50, 57, 128, 71, 48, 50, 56, 128, 71, 48, 50, 55, 
+    128, 71, 48, 50, 54, 65, 128, 71, 48, 50, 54, 128, 71, 48, 50, 53, 128, 
+    71, 48, 50, 52, 128, 71, 48, 50, 51, 128, 71, 48, 50, 50, 128, 71, 48, 
+    50, 49, 128, 71, 48, 50, 48, 65, 128, 71, 48, 50, 48, 128, 71, 48, 49, 
+    57, 128, 71, 48, 49, 56, 128, 71, 48, 49, 55, 128, 71, 48, 49, 54, 128, 
+    71, 48, 49, 53, 128, 71, 48, 49, 52, 128, 71, 48, 49, 51, 128, 71, 48, 
+    49, 50, 128, 71, 48, 49, 49, 65, 128, 71, 48, 49, 49, 128, 71, 48, 49, 
+    48, 128, 71, 48, 48, 57, 128, 71, 48, 48, 56, 128, 71, 48, 48, 55, 66, 
+    128, 71, 48, 48, 55, 65, 128, 71, 48, 48, 55, 128, 71, 48, 48, 54, 65, 
+    128, 71, 48, 48, 54, 128, 71, 48, 48, 53, 128, 71, 48, 48, 52, 128, 71, 
+    48, 48, 51, 128, 71, 48, 48, 50, 128, 71, 48, 48, 49, 128, 70, 89, 88, 
+    128, 70, 89, 84, 128, 70, 89, 80, 128, 70, 89, 65, 128, 70, 87, 73, 128, 
+    70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, 
+    128, 70, 86, 83, 51, 128, 70, 86, 83, 50, 128, 70, 86, 83, 49, 128, 70, 
+    85, 88, 128, 70, 85, 84, 128, 70, 85, 83, 69, 128, 70, 85, 83, 193, 70, 
+    85, 82, 88, 128, 70, 85, 80, 128, 70, 85, 78, 69, 82, 65, 204, 70, 85, 
+    78, 67, 84, 73, 79, 78, 65, 204, 70, 85, 78, 67, 84, 73, 79, 78, 128, 70, 
+    85, 76, 76, 78, 69, 83, 83, 128, 70, 85, 76, 204, 70, 85, 74, 73, 128, 
+    70, 85, 69, 84, 128, 70, 85, 69, 204, 70, 85, 69, 128, 70, 84, 72, 79, 
+    82, 193, 70, 83, 73, 128, 70, 82, 79, 87, 78, 73, 78, 71, 128, 70, 82, 
+    79, 87, 78, 73, 78, 199, 70, 82, 79, 87, 78, 128, 70, 82, 79, 78, 84, 45, 
+    84, 73, 76, 84, 69, 196, 70, 82, 79, 78, 84, 45, 70, 65, 67, 73, 78, 199, 
+    70, 82, 79, 205, 70, 82, 79, 71, 128, 70, 82, 79, 199, 70, 82, 73, 84, 
+    85, 128, 70, 82, 73, 69, 83, 128, 70, 82, 73, 69, 196, 70, 82, 73, 67, 
+    65, 84, 73, 86, 69, 128, 70, 82, 69, 84, 66, 79, 65, 82, 68, 128, 70, 82, 
+    69, 78, 67, 200, 70, 82, 69, 69, 128, 70, 82, 69, 197, 70, 82, 65, 78, 
+    195, 70, 82, 65, 77, 69, 128, 70, 82, 65, 71, 82, 65, 78, 84, 128, 70, 
+    82, 65, 71, 77, 69, 78, 84, 128, 70, 82, 65, 67, 84, 73, 79, 206, 70, 79, 
+    88, 128, 70, 79, 85, 82, 84, 69, 69, 78, 128, 70, 79, 85, 82, 84, 69, 69, 
+    206, 70, 79, 85, 82, 45, 84, 72, 73, 82, 84, 89, 128, 70, 79, 85, 82, 45, 
+    83, 84, 82, 73, 78, 199, 70, 79, 85, 82, 45, 80, 69, 82, 45, 69, 205, 70, 
+    79, 85, 82, 45, 76, 73, 78, 197, 70, 79, 85, 210, 70, 79, 85, 78, 84, 65, 
+    73, 78, 128, 70, 79, 83, 84, 69, 82, 73, 78, 71, 128, 70, 79, 82, 87, 65, 
+    82, 68, 128, 70, 79, 82, 84, 89, 128, 70, 79, 82, 84, 217, 70, 79, 82, 
+    84, 69, 128, 70, 79, 82, 77, 211, 70, 79, 82, 77, 65, 84, 84, 73, 78, 71, 
+    128, 70, 79, 82, 75, 69, 196, 70, 79, 82, 67, 69, 83, 128, 70, 79, 82, 
+    67, 69, 128, 70, 79, 80, 128, 70, 79, 79, 84, 83, 84, 79, 79, 76, 128, 
+    70, 79, 79, 84, 80, 82, 73, 78, 84, 83, 128, 70, 79, 79, 84, 78, 79, 84, 
+    197, 70, 79, 79, 84, 66, 65, 76, 76, 128, 70, 79, 79, 84, 128, 70, 79, 
+    79, 68, 128, 70, 79, 79, 128, 70, 79, 78, 71, 77, 65, 78, 128, 70, 79, 
+    77, 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, 
+    128, 70, 79, 76, 68, 69, 82, 128, 70, 79, 76, 68, 69, 196, 70, 79, 71, 
+    71, 89, 128, 70, 207, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 84, 
+    69, 82, 73, 78, 199, 70, 76, 85, 84, 69, 128, 70, 76, 85, 83, 72, 69, 
+    196, 70, 76, 79, 87, 73, 78, 199, 70, 76, 79, 87, 69, 210, 70, 76, 79, 
+    85, 82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 84, 84, 69, 128, 70, 76, 79, 
+    82, 65, 204, 70, 76, 79, 80, 80, 217, 70, 76, 79, 79, 82, 128, 70, 76, 
+    73, 80, 128, 70, 76, 73, 71, 72, 84, 128, 70, 76, 69, 88, 85, 83, 128, 
+    70, 76, 69, 88, 69, 196, 70, 76, 69, 85, 82, 45, 68, 69, 45, 76, 73, 83, 
+    128, 70, 76, 65, 84, 84, 69, 78, 69, 196, 70, 76, 65, 84, 78, 69, 83, 83, 
+    128, 70, 76, 65, 84, 128, 70, 76, 65, 212, 70, 76, 65, 71, 83, 128, 70, 
+    76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 52, 128, 70, 76, 65, 71, 45, 
+    51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 76, 65, 71, 45, 49, 128, 70, 
+    76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 65, 128, 70, 76, 128, 70, 73, 
+    88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 128, 70, 73, 86, 69, 45, 84, 
+    72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 45, 76, 73, 78, 197, 70, 73, 86, 
+    197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 70, 73, 83, 84, 69, 196, 70, 
+    73, 83, 84, 128, 70, 73, 83, 72, 73, 78, 199, 70, 73, 83, 72, 72, 79, 79, 
+    75, 128, 70, 73, 83, 72, 72, 79, 79, 203, 70, 73, 83, 72, 69, 89, 69, 
+    128, 70, 73, 83, 72, 128, 70, 73, 83, 200, 70, 73, 82, 83, 212, 70, 73, 
+    82, 73, 128, 70, 73, 82, 69, 87, 79, 82, 75, 83, 128, 70, 73, 82, 69, 87, 
+    79, 82, 203, 70, 73, 82, 69, 128, 70, 73, 82, 197, 70, 73, 80, 128, 70, 
+    73, 78, 73, 84, 197, 70, 73, 78, 71, 69, 82, 78, 65, 73, 76, 83, 128, 70, 
+    73, 78, 71, 69, 82, 69, 196, 70, 73, 78, 65, 78, 67, 73, 65, 76, 128, 70, 
+    73, 76, 76, 69, 82, 128, 70, 73, 76, 76, 69, 196, 70, 73, 76, 76, 128, 
+    70, 73, 76, 204, 70, 73, 76, 197, 70, 73, 73, 128, 70, 73, 71, 85, 82, 
+    69, 45, 51, 128, 70, 73, 71, 85, 82, 69, 45, 50, 128, 70, 73, 71, 85, 82, 
+    69, 45, 49, 128, 70, 73, 71, 85, 82, 197, 70, 73, 71, 72, 84, 128, 70, 
+    73, 70, 84, 89, 128, 70, 73, 70, 84, 217, 70, 73, 70, 84, 72, 83, 128, 
+    70, 73, 70, 84, 72, 128, 70, 73, 70, 84, 69, 69, 78, 128, 70, 73, 70, 84, 
+    69, 69, 206, 70, 73, 69, 76, 68, 128, 70, 72, 84, 79, 82, 193, 70, 70, 
+    76, 128, 70, 70, 73, 128, 70, 69, 85, 88, 128, 70, 69, 85, 70, 69, 85, 
+    65, 69, 84, 128, 70, 69, 83, 84, 73, 86, 65, 76, 128, 70, 69, 82, 82, 89, 
+    128, 70, 69, 82, 82, 73, 211, 70, 69, 82, 77, 65, 84, 65, 128, 70, 69, 
+    82, 77, 65, 84, 193, 70, 69, 79, 200, 70, 69, 78, 199, 70, 69, 78, 67, 
+    69, 128, 70, 69, 77, 73, 78, 73, 78, 197, 70, 69, 77, 65, 76, 69, 128, 
+    70, 69, 77, 65, 76, 197, 70, 69, 76, 76, 79, 87, 83, 72, 73, 80, 128, 70, 
+    69, 73, 128, 70, 69, 72, 213, 70, 69, 72, 128, 70, 69, 200, 70, 69, 69, 
+    78, 71, 128, 70, 69, 69, 68, 128, 70, 69, 69, 196, 70, 69, 69, 128, 70, 
+    69, 66, 82, 85, 65, 82, 89, 128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 69, 
+    65, 84, 72, 69, 210, 70, 69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85, 
+    204, 70, 69, 65, 82, 128, 70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89, 
+    128, 70, 65, 88, 128, 70, 65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70, 
+    65, 84, 72, 69, 82, 128, 70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84, 
+    65, 78, 128, 70, 65, 84, 72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128, 
+    70, 65, 84, 72, 193, 70, 65, 84, 128, 70, 65, 82, 83, 201, 70, 65, 81, 
+    128, 70, 65, 80, 128, 70, 65, 78, 71, 128, 70, 65, 78, 69, 82, 79, 83, 
+    73, 211, 70, 65, 78, 128, 70, 65, 77, 73, 76, 89, 128, 70, 65, 76, 76, 
+    73, 78, 199, 70, 65, 76, 76, 69, 206, 70, 65, 73, 76, 85, 82, 69, 128, 
+    70, 65, 73, 72, 85, 128, 70, 65, 72, 82, 69, 78, 72, 69, 73, 84, 128, 70, 
+    65, 67, 84, 79, 82, 89, 128, 70, 65, 67, 84, 79, 210, 70, 65, 67, 83, 73, 
+    77, 73, 76, 197, 70, 65, 67, 69, 45, 54, 128, 70, 65, 67, 69, 45, 53, 
+    128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, 51, 128, 70, 65, 
+    67, 69, 45, 50, 128, 70, 65, 67, 69, 45, 49, 128, 70, 65, 65, 77, 65, 69, 
+    128, 70, 65, 65, 73, 128, 70, 65, 65, 70, 85, 128, 70, 48, 53, 51, 128, 
+    70, 48, 53, 50, 128, 70, 48, 53, 49, 67, 128, 70, 48, 53, 49, 66, 128, 
+    70, 48, 53, 49, 65, 128, 70, 48, 53, 49, 128, 70, 48, 53, 48, 128, 70, 
+    48, 52, 57, 128, 70, 48, 52, 56, 128, 70, 48, 52, 55, 65, 128, 70, 48, 
+    52, 55, 128, 70, 48, 52, 54, 65, 128, 70, 48, 52, 54, 128, 70, 48, 52, 
+    53, 65, 128, 70, 48, 52, 53, 128, 70, 48, 52, 52, 128, 70, 48, 52, 51, 
+    128, 70, 48, 52, 50, 128, 70, 48, 52, 49, 128, 70, 48, 52, 48, 128, 70, 
+    48, 51, 57, 128, 70, 48, 51, 56, 65, 128, 70, 48, 51, 56, 128, 70, 48, 
+    51, 55, 65, 128, 70, 48, 51, 55, 128, 70, 48, 51, 54, 128, 70, 48, 51, 
+    53, 128, 70, 48, 51, 52, 128, 70, 48, 51, 51, 128, 70, 48, 51, 50, 128, 
+    70, 48, 51, 49, 65, 128, 70, 48, 51, 49, 128, 70, 48, 51, 48, 128, 70, 
+    48, 50, 57, 128, 70, 48, 50, 56, 128, 70, 48, 50, 55, 128, 70, 48, 50, 
+    54, 128, 70, 48, 50, 53, 128, 70, 48, 50, 52, 128, 70, 48, 50, 51, 128, 
+    70, 48, 50, 50, 128, 70, 48, 50, 49, 65, 128, 70, 48, 50, 49, 128, 70, 
+    48, 50, 48, 128, 70, 48, 49, 57, 128, 70, 48, 49, 56, 128, 70, 48, 49, 
+    55, 128, 70, 48, 49, 54, 128, 70, 48, 49, 53, 128, 70, 48, 49, 52, 128, 
+    70, 48, 49, 51, 65, 128, 70, 48, 49, 51, 128, 70, 48, 49, 50, 128, 70, 
+    48, 49, 49, 128, 70, 48, 49, 48, 128, 70, 48, 48, 57, 128, 70, 48, 48, 
+    56, 128, 70, 48, 48, 55, 128, 70, 48, 48, 54, 128, 70, 48, 48, 53, 128, 
+    70, 48, 48, 52, 128, 70, 48, 48, 51, 128, 70, 48, 48, 50, 128, 70, 48, 
+    48, 49, 65, 128, 70, 48, 48, 49, 128, 69, 90, 200, 69, 90, 69, 78, 128, 
+    69, 90, 69, 206, 69, 90, 128, 69, 89, 69, 83, 128, 69, 89, 69, 71, 76, 
+    65, 83, 83, 69, 83, 128, 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, 
+    65, 78, 78, 65, 128, 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, 
+    73, 65, 204, 69, 88, 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, 
+    72, 73, 71, 200, 69, 88, 84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69, 
+    78, 68, 69, 196, 69, 88, 80, 82, 69, 83, 83, 73, 79, 78, 76, 69, 83, 211, 
+    69, 88, 80, 79, 78, 69, 78, 212, 69, 88, 79, 128, 69, 88, 207, 69, 88, 
+    73, 83, 84, 83, 128, 69, 88, 73, 83, 84, 128, 69, 88, 72, 65, 85, 83, 84, 
+    73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 78, 128, 69, 88, 
+    67, 76, 65, 77, 65, 84, 73, 79, 206, 69, 88, 67, 72, 65, 78, 71, 69, 128, 
+    69, 88, 67, 69, 83, 83, 128, 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 
+    87, 69, 128, 69, 86, 69, 82, 71, 82, 69, 69, 206, 69, 86, 69, 78, 73, 78, 
+    71, 128, 69, 85, 82, 79, 80, 69, 65, 206, 69, 85, 82, 79, 80, 69, 45, 65, 
+    70, 82, 73, 67, 65, 128, 69, 85, 82, 79, 45, 67, 85, 82, 82, 69, 78, 67, 
+    217, 69, 85, 82, 207, 69, 85, 76, 69, 210, 69, 85, 45, 85, 128, 69, 85, 
+    45, 79, 128, 69, 85, 45, 69, 85, 128, 69, 85, 45, 69, 79, 128, 69, 85, 
+    45, 69, 128, 69, 85, 45, 65, 128, 69, 84, 88, 128, 69, 84, 78, 65, 72, 
+    84, 65, 128, 69, 84, 72, 69, 204, 69, 84, 69, 82, 79, 206, 69, 84, 69, 
+    82, 78, 73, 84, 89, 128, 69, 84, 66, 128, 69, 83, 85, 75, 85, 85, 68, 79, 
+    128, 69, 83, 84, 73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65, 84, 
+    69, 196, 69, 83, 72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83, 72, 
+    178, 69, 83, 72, 49, 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 67, 
+    128, 69, 83, 65, 128, 69, 83, 45, 84, 69, 128, 69, 82, 82, 79, 82, 45, 
+    66, 65, 82, 82, 69, 196, 69, 82, 82, 128, 69, 82, 73, 78, 50, 128, 69, 
+    82, 71, 128, 69, 82, 65, 83, 197, 69, 81, 85, 73, 86, 65, 76, 69, 78, 
+    212, 69, 81, 85, 73, 68, 128, 69, 81, 85, 73, 65, 78, 71, 85, 76, 65, 
+    210, 69, 81, 85, 65, 76, 83, 128, 69, 81, 85, 65, 76, 211, 69, 81, 85, 
+    65, 76, 128, 69, 80, 83, 73, 76, 79, 78, 128, 69, 80, 83, 73, 76, 79, 
+    206, 69, 80, 79, 67, 72, 128, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 
+    69, 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 78, 84, 72, 69, 84, 
+    73, 195, 69, 80, 69, 71, 69, 82, 77, 65, 128, 69, 79, 84, 128, 69, 79, 
+    77, 128, 69, 79, 76, 72, 88, 128, 69, 79, 76, 128, 69, 79, 72, 128, 69, 
+    78, 89, 128, 69, 78, 86, 69, 76, 79, 80, 69, 128, 69, 78, 86, 69, 76, 79, 
+    80, 197, 69, 78, 85, 77, 69, 82, 65, 84, 73, 79, 206, 69, 78, 84, 82, 89, 
+    45, 50, 128, 69, 78, 84, 82, 89, 45, 49, 128, 69, 78, 84, 82, 89, 128, 
+    69, 78, 84, 82, 217, 69, 78, 84, 72, 85, 83, 73, 65, 83, 77, 128, 69, 78, 
+    84, 69, 82, 80, 82, 73, 83, 69, 128, 69, 78, 84, 69, 82, 73, 78, 199, 69, 
+    78, 84, 69, 82, 128, 69, 78, 84, 69, 210, 69, 78, 81, 85, 73, 82, 89, 
+    128, 69, 78, 81, 128, 69, 78, 79, 211, 69, 78, 78, 128, 69, 78, 76, 65, 
+    82, 71, 69, 77, 69, 78, 84, 128, 69, 78, 71, 73, 78, 69, 128, 69, 78, 68, 
+    79, 70, 79, 78, 79, 78, 128, 69, 78, 68, 73, 78, 199, 69, 78, 68, 69, 80, 
+    128, 69, 78, 68, 69, 65, 86, 79, 85, 82, 128, 69, 78, 67, 79, 85, 78, 84, 
+    69, 82, 83, 128, 69, 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 78, 67, 76, 
+    79, 83, 73, 78, 199, 69, 78, 67, 128, 69, 78, 65, 82, 88, 73, 211, 69, 
+    78, 65, 82, 77, 79, 78, 73, 79, 211, 69, 77, 80, 84, 217, 69, 77, 80, 72, 
+    65, 84, 73, 195, 69, 77, 80, 72, 65, 83, 73, 211, 69, 77, 66, 82, 79, 73, 
+    68, 69, 82, 89, 128, 69, 77, 66, 76, 69, 77, 128, 69, 77, 66, 69, 76, 76, 
+    73, 83, 72, 77, 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 
+    69, 76, 84, 128, 69, 76, 76, 73, 80, 84, 73, 195, 69, 76, 76, 73, 80, 83, 
+    73, 83, 128, 69, 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 
+    69, 76, 69, 86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, 
+    69, 78, 128, 69, 76, 69, 86, 69, 206, 69, 76, 69, 80, 72, 65, 78, 84, 
+    128, 69, 76, 69, 77, 69, 78, 212, 69, 76, 69, 67, 84, 82, 73, 67, 65, 
+    204, 69, 76, 69, 67, 84, 82, 73, 195, 69, 76, 65, 70, 82, 79, 78, 128, 
+    69, 75, 83, 84, 82, 69, 80, 84, 79, 78, 128, 69, 75, 83, 128, 69, 75, 70, 
+    79, 78, 73, 84, 73, 75, 79, 78, 128, 69, 75, 65, 82, 65, 128, 69, 74, 69, 
+    67, 212, 69, 73, 83, 128, 69, 73, 71, 72, 84, 89, 128, 69, 73, 71, 72, 
+    84, 217, 69, 73, 71, 72, 84, 72, 83, 128, 69, 73, 71, 72, 84, 72, 211, 
+    69, 73, 71, 72, 84, 72, 128, 69, 73, 71, 72, 84, 69, 69, 78, 128, 69, 73, 
+    71, 72, 84, 69, 69, 206, 69, 73, 71, 72, 84, 45, 84, 72, 73, 82, 84, 89, 
+    128, 69, 73, 69, 128, 69, 72, 87, 65, 218, 69, 71, 89, 80, 84, 79, 76, 
+    79, 71, 73, 67, 65, 204, 69, 71, 73, 82, 128, 69, 71, 71, 128, 69, 69, 
+    89, 65, 78, 78, 65, 128, 69, 69, 75, 65, 65, 128, 69, 69, 72, 128, 69, 
+    69, 66, 69, 69, 70, 73, 76, 73, 128, 69, 68, 73, 84, 79, 82, 73, 65, 204, 
+    69, 68, 73, 78, 128, 69, 68, 68, 128, 69, 66, 69, 70, 73, 76, 73, 128, 
+    69, 65, 83, 84, 69, 82, 206, 69, 65, 83, 212, 69, 65, 82, 84, 72, 76, 
+    217, 69, 65, 82, 84, 72, 128, 69, 65, 82, 84, 200, 69, 65, 82, 83, 128, 
+    69, 65, 82, 76, 217, 69, 65, 77, 72, 65, 78, 67, 72, 79, 76, 76, 128, 69, 
+    65, 71, 76, 69, 128, 69, 65, 68, 72, 65, 68, 72, 128, 69, 65, 66, 72, 65, 
+    68, 72, 128, 69, 178, 69, 48, 51, 56, 128, 69, 48, 51, 55, 128, 69, 48, 
+    51, 54, 128, 69, 48, 51, 52, 65, 128, 69, 48, 51, 52, 128, 69, 48, 51, 
+    51, 128, 69, 48, 51, 50, 128, 69, 48, 51, 49, 128, 69, 48, 51, 48, 128, 
+    69, 48, 50, 57, 128, 69, 48, 50, 56, 65, 128, 69, 48, 50, 56, 128, 69, 
+    48, 50, 55, 128, 69, 48, 50, 54, 128, 69, 48, 50, 53, 128, 69, 48, 50, 
+    52, 128, 69, 48, 50, 51, 128, 69, 48, 50, 50, 128, 69, 48, 50, 49, 128, 
+    69, 48, 50, 48, 65, 128, 69, 48, 50, 48, 128, 69, 48, 49, 57, 128, 69, 
+    48, 49, 56, 128, 69, 48, 49, 55, 65, 128, 69, 48, 49, 55, 128, 69, 48, 
+    49, 54, 65, 128, 69, 48, 49, 54, 128, 69, 48, 49, 53, 128, 69, 48, 49, 
+    52, 128, 69, 48, 49, 51, 128, 69, 48, 49, 50, 128, 69, 48, 49, 49, 128, 
+    69, 48, 49, 48, 128, 69, 48, 48, 57, 65, 128, 69, 48, 48, 57, 128, 69, 
+    48, 48, 56, 65, 128, 69, 48, 48, 56, 128, 69, 48, 48, 55, 128, 69, 48, 
+    48, 54, 128, 69, 48, 48, 53, 128, 69, 48, 48, 52, 128, 69, 48, 48, 51, 
+    128, 69, 48, 48, 50, 128, 69, 48, 48, 49, 128, 69, 45, 77, 65, 73, 204, 
+    68, 90, 90, 69, 128, 68, 90, 90, 65, 128, 68, 90, 87, 69, 128, 68, 90, 
+    85, 128, 68, 90, 79, 128, 68, 90, 74, 69, 128, 68, 90, 73, 128, 68, 90, 
+    72, 69, 128, 68, 90, 72, 65, 128, 68, 90, 69, 76, 79, 128, 68, 90, 69, 
+    69, 128, 68, 90, 69, 128, 68, 90, 65, 65, 128, 68, 90, 65, 128, 68, 90, 
+    128, 68, 218, 68, 89, 79, 128, 68, 89, 207, 68, 89, 69, 72, 128, 68, 89, 
+    69, 200, 68, 87, 79, 128, 68, 87, 69, 128, 68, 87, 65, 128, 68, 86, 73, 
+    83, 86, 65, 82, 65, 128, 68, 86, 68, 128, 68, 86, 128, 68, 85, 84, 73, 
+    69, 83, 128, 68, 85, 83, 75, 128, 68, 85, 83, 72, 69, 78, 78, 65, 128, 
+    68, 85, 82, 65, 84, 73, 79, 78, 128, 68, 85, 82, 50, 128, 68, 85, 80, 79, 
+    78, 68, 73, 85, 211, 68, 85, 79, 88, 128, 68, 85, 79, 128, 68, 85, 78, 
+    52, 128, 68, 85, 78, 51, 128, 68, 85, 78, 179, 68, 85, 77, 128, 68, 85, 
+    204, 68, 85, 72, 128, 68, 85, 71, 85, 68, 128, 68, 85, 66, 50, 128, 68, 
+    85, 66, 128, 68, 85, 194, 68, 82, 89, 128, 68, 82, 217, 68, 82, 85, 77, 
+    128, 68, 82, 85, 205, 68, 82, 79, 80, 83, 128, 68, 82, 79, 80, 76, 69, 
+    84, 128, 68, 82, 79, 80, 45, 83, 72, 65, 68, 79, 87, 69, 196, 68, 82, 79, 
+    77, 69, 68, 65, 82, 217, 68, 82, 73, 86, 69, 128, 68, 82, 73, 86, 197, 
+    68, 82, 73, 78, 75, 128, 68, 82, 73, 204, 68, 82, 69, 83, 83, 128, 68, 
+    82, 65, 85, 71, 72, 84, 211, 68, 82, 65, 77, 128, 68, 82, 65, 205, 68, 
+    82, 65, 71, 79, 78, 128, 68, 82, 65, 71, 79, 206, 68, 82, 65, 70, 84, 73, 
+    78, 199, 68, 82, 65, 67, 72, 77, 65, 83, 128, 68, 82, 65, 67, 72, 77, 65, 
+    128, 68, 82, 65, 67, 72, 77, 193, 68, 79, 87, 78, 87, 65, 82, 68, 83, 
+    128, 68, 79, 87, 78, 87, 65, 82, 68, 211, 68, 79, 87, 78, 45, 80, 79, 73, 
+    78, 84, 73, 78, 199, 68, 79, 87, 78, 128, 68, 79, 86, 69, 128, 68, 79, 
+    85, 71, 72, 78, 85, 84, 128, 68, 79, 85, 66, 84, 128, 68, 79, 85, 66, 76, 
+    69, 196, 68, 79, 85, 66, 76, 69, 45, 76, 73, 78, 197, 68, 79, 85, 66, 76, 
+    69, 45, 69, 78, 68, 69, 196, 68, 79, 85, 66, 76, 69, 128, 68, 79, 84, 84, 
+    69, 68, 45, 80, 128, 68, 79, 84, 84, 69, 68, 45, 78, 128, 68, 79, 84, 84, 
+    69, 68, 45, 76, 128, 68, 79, 84, 84, 69, 68, 128, 68, 79, 84, 84, 69, 
+    196, 68, 79, 84, 83, 45, 56, 128, 68, 79, 84, 83, 45, 55, 56, 128, 68, 
+    79, 84, 83, 45, 55, 128, 68, 79, 84, 83, 45, 54, 56, 128, 68, 79, 84, 83, 
+    45, 54, 55, 56, 128, 68, 79, 84, 83, 45, 54, 55, 128, 68, 79, 84, 83, 45, 
+    54, 128, 68, 79, 84, 83, 45, 53, 56, 128, 68, 79, 84, 83, 45, 53, 55, 56, 
+    128, 68, 79, 84, 83, 45, 53, 55, 128, 68, 79, 84, 83, 45, 53, 54, 56, 
+    128, 68, 79, 84, 83, 45, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 53, 54, 
+    55, 128, 68, 79, 84, 83, 45, 53, 54, 128, 68, 79, 84, 83, 45, 53, 128, 
+    68, 79, 84, 83, 45, 52, 56, 128, 68, 79, 84, 83, 45, 52, 55, 56, 128, 68, 
+    79, 84, 83, 45, 52, 55, 128, 68, 79, 84, 83, 45, 52, 54, 56, 128, 68, 79, 
+    84, 83, 45, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 54, 55, 128, 68, 
+    79, 84, 83, 45, 52, 54, 128, 68, 79, 84, 83, 45, 52, 53, 56, 128, 68, 79, 
+    84, 83, 45, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 55, 128, 68, 
+    79, 84, 83, 45, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 
+    56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 52, 
+    53, 54, 128, 68, 79, 84, 83, 45, 52, 53, 128, 68, 79, 84, 83, 45, 52, 
+    128, 68, 79, 84, 83, 45, 51, 56, 128, 68, 79, 84, 83, 45, 51, 55, 56, 
+    128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 79, 84, 83, 45, 51, 54, 56, 
+    128, 68, 79, 84, 83, 45, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 54, 
+    55, 128, 68, 79, 84, 83, 45, 51, 54, 128, 68, 79, 84, 83, 45, 51, 53, 56, 
+    128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, 
+    55, 128, 68, 79, 84, 83, 45, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 51, 
+    53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 128, 68, 79, 84, 
+    83, 45, 51, 53, 54, 128, 68, 79, 84, 83, 45, 51, 53, 128, 68, 79, 84, 83, 
+    45, 51, 52, 56, 128, 68, 79, 84, 83, 45, 51, 52, 55, 56, 128, 68, 79, 84, 
+    83, 45, 51, 52, 55, 128, 68, 79, 84, 83, 45, 51, 52, 54, 56, 128, 68, 79, 
+    84, 83, 45, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 54, 55, 
+    128, 68, 79, 84, 83, 45, 51, 52, 54, 128, 68, 79, 84, 83, 45, 51, 52, 53, 
+    56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 
+    51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 56, 128, 68, 79, 
+    84, 83, 45, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 
+    54, 55, 128, 68, 79, 84, 83, 45, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 
+    51, 52, 53, 128, 68, 79, 84, 83, 45, 51, 52, 128, 68, 79, 84, 83, 45, 51, 
+    128, 68, 79, 84, 83, 45, 50, 56, 128, 68, 79, 84, 83, 45, 50, 55, 56, 
+    128, 68, 79, 84, 83, 45, 50, 55, 128, 68, 79, 84, 83, 45, 50, 54, 56, 
+    128, 68, 79, 84, 83, 45, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 54, 
+    55, 128, 68, 79, 84, 83, 45, 50, 54, 128, 68, 79, 84, 83, 45, 50, 53, 56, 
+    128, 68, 79, 84, 83, 45, 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 
+    55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 
+    53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 54, 55, 128, 68, 79, 84, 
+    83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, 53, 128, 68, 79, 84, 83, 
+    45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 56, 128, 68, 79, 84, 
+    83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 56, 128, 68, 79, 
+    84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, 
+    128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, 84, 83, 45, 50, 52, 53, 
+    56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 
+    50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 56, 128, 68, 79, 
+    84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 
+    54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, 
+    50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, 128, 68, 79, 84, 83, 45, 50, 
+    51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, 
+    50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 56, 128, 68, 79, 84, 83, 
+    45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 128, 68, 
+    79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, 83, 45, 50, 51, 53, 56, 128, 
+    68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 
+    53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 56, 128, 68, 79, 84, 83, 
+    45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, 
+    128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, 
+    53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 50, 
+    51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 128, 68, 79, 84, 
+    83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, 
+    56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 
+    50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 56, 128, 68, 79, 
+    84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 
+    53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, 
+    83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 
+    53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 128, 68, 79, 84, 
+    83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 128, 68, 79, 
+    84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, 50, 128, 68, 79, 84, 83, 45, 
+    49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, 128, 68, 79, 84, 83, 45, 49, 
+    55, 128, 68, 79, 84, 83, 45, 49, 54, 56, 128, 68, 79, 84, 83, 45, 49, 54, 
+    55, 56, 128, 68, 79, 84, 83, 45, 49, 54, 55, 128, 68, 79, 84, 83, 45, 49, 
+    54, 128, 68, 79, 84, 83, 45, 49, 53, 56, 128, 68, 79, 84, 83, 45, 49, 53, 
+    55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 55, 128, 68, 79, 84, 83, 45, 49, 
+    53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 56, 128, 68, 79, 84, 
+    83, 45, 49, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 128, 68, 79, 
+    84, 83, 45, 49, 53, 128, 68, 79, 84, 83, 45, 49, 52, 56, 128, 68, 79, 84, 
+    83, 45, 49, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 128, 68, 79, 
+    84, 83, 45, 49, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 56, 
+    128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, 
+    54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 
+    52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 128, 68, 79, 84, 
+    83, 45, 49, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, 
+    56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 
+    49, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 128, 68, 79, 84, 83, 
+    45, 49, 52, 128, 68, 79, 84, 83, 45, 49, 51, 56, 128, 68, 79, 84, 83, 45, 
+    49, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 128, 68, 79, 84, 83, 
+    45, 49, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 56, 128, 68, 
+    79, 84, 83, 45, 49, 51, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 128, 
+    68, 79, 84, 83, 45, 49, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 
+    55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 55, 128, 68, 79, 84, 83, 45, 
+    49, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 56, 128, 
+    68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 
+    53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 128, 68, 79, 84, 83, 45, 49, 
+    51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 56, 128, 68, 79, 84, 
+    83, 45, 49, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 56, 128, 
+    68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 
+    51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 128, 68, 79, 84, 
+    83, 45, 49, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, 
+    56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 
+    49, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, 
+    56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 
+    45, 49, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 128, 68, 
+    79, 84, 83, 45, 49, 51, 52, 128, 68, 79, 84, 83, 45, 49, 51, 128, 68, 79, 
+    84, 83, 45, 49, 50, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 56, 128, 68, 
+    79, 84, 83, 45, 49, 50, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 56, 128, 
+    68, 79, 84, 83, 45, 49, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 
+    54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 128, 68, 79, 84, 83, 45, 49, 
+    50, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 56, 128, 68, 79, 84, 
+    83, 45, 49, 50, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 56, 128, 
+    68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 
+    50, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 128, 68, 79, 84, 
+    83, 45, 49, 50, 53, 128, 68, 79, 84, 83, 45, 49, 50, 52, 56, 128, 68, 79, 
+    84, 83, 45, 49, 50, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, 
+    128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 
+    50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 128, 68, 
+    79, 84, 83, 45, 49, 50, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 
+    56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 
+    45, 49, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 56, 
+    128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 
+    45, 49, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 
+    128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, 
+    52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 56, 128, 68, 79, 84, 83, 45, 49, 
+    50, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 128, 68, 79, 84, 
+    83, 45, 49, 50, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, 
+    56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, 
+    49, 50, 51, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 56, 128, 68, 79, 
+    84, 83, 45, 49, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 
+    53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 56, 128, 68, 79, 84, 
+    83, 45, 49, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 
+    53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 128, 68, 79, 84, 
+    83, 45, 49, 50, 51, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 56, 128, 
+    68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 
+    50, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 56, 128, 68, 
+    79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 
+    50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 128, 68, 
+    79, 84, 83, 45, 49, 50, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 
+    51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 128, 
+    68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 
+    49, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 
+    53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 128, 68, 79, 
+    84, 83, 45, 49, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 
+    128, 68, 79, 84, 83, 45, 49, 50, 51, 128, 68, 79, 84, 83, 45, 49, 50, 
+    128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, 83, 128, 68, 79, 84, 76, 
+    69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, 82, 128, 68, 79, 79, 78, 
+    71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 73, 206, 68, 79, 76, 80, 
+    72, 73, 78, 128, 68, 79, 76, 76, 83, 128, 68, 79, 76, 76, 65, 210, 68, 
+    79, 76, 73, 85, 77, 128, 68, 79, 75, 77, 65, 73, 128, 68, 79, 73, 84, 
+    128, 68, 79, 71, 128, 68, 79, 199, 68, 79, 69, 211, 68, 79, 68, 69, 75, 
+    65, 84, 65, 128, 68, 79, 66, 82, 79, 128, 68, 79, 65, 67, 72, 65, 83, 72, 
+    77, 69, 69, 128, 68, 79, 65, 67, 72, 65, 83, 72, 77, 69, 197, 68, 79, 65, 
+    128, 68, 79, 45, 79, 128, 68, 77, 128, 68, 205, 68, 76, 85, 128, 68, 76, 
+    79, 128, 68, 76, 73, 128, 68, 76, 72, 89, 65, 128, 68, 76, 72, 65, 128, 
+    68, 76, 69, 69, 128, 68, 76, 65, 128, 68, 76, 128, 68, 75, 65, 82, 128, 
+    68, 75, 65, 210, 68, 74, 69, 82, 86, 73, 128, 68, 74, 69, 82, 86, 128, 
+    68, 74, 69, 128, 68, 74, 65, 128, 68, 73, 90, 90, 217, 68, 73, 86, 79, 
+    82, 67, 197, 68, 73, 86, 73, 83, 73, 79, 78, 128, 68, 73, 86, 73, 83, 73, 
+    79, 206, 68, 73, 86, 73, 78, 65, 84, 73, 79, 78, 128, 68, 73, 86, 73, 68, 
+    69, 83, 128, 68, 73, 86, 73, 68, 69, 82, 128, 68, 73, 86, 73, 68, 69, 
+    196, 68, 73, 86, 73, 68, 69, 128, 68, 73, 86, 73, 68, 197, 68, 73, 86, 
+    69, 82, 71, 69, 78, 67, 69, 128, 68, 73, 84, 84, 207, 68, 73, 83, 84, 79, 
+    82, 84, 73, 79, 78, 128, 68, 73, 83, 84, 73, 78, 71, 85, 73, 83, 72, 128, 
+    68, 73, 83, 84, 73, 76, 76, 128, 68, 73, 83, 83, 79, 76, 86, 69, 45, 50, 
+    128, 68, 73, 83, 83, 79, 76, 86, 69, 128, 68, 73, 83, 80, 69, 82, 83, 73, 
+    79, 78, 128, 68, 73, 83, 75, 128, 68, 73, 83, 73, 77, 79, 85, 128, 68, 
+    73, 83, 72, 128, 68, 73, 83, 67, 79, 78, 84, 73, 78, 85, 79, 85, 211, 68, 
+    73, 83, 195, 68, 73, 83, 65, 80, 80, 79, 73, 78, 84, 69, 196, 68, 73, 83, 
+    65, 66, 76, 69, 196, 68, 73, 82, 71, 193, 68, 73, 82, 69, 67, 84, 76, 
+    217, 68, 73, 82, 69, 67, 84, 73, 79, 78, 65, 204, 68, 73, 80, 84, 69, 
+    128, 68, 73, 80, 80, 69, 82, 128, 68, 73, 80, 76, 79, 85, 78, 128, 68, 
+    73, 80, 76, 73, 128, 68, 73, 80, 76, 201, 68, 73, 78, 71, 66, 65, 212, 
+    68, 73, 206, 68, 73, 77, 77, 73, 78, 71, 128, 68, 73, 77, 73, 78, 85, 84, 
+    73, 79, 78, 45, 51, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 50, 
+    128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 49, 128, 68, 73, 77, 73, 
+    78, 73, 83, 72, 77, 69, 78, 84, 128, 68, 73, 77, 73, 68, 73, 193, 68, 73, 
+    77, 69, 78, 83, 73, 79, 78, 65, 204, 68, 73, 77, 69, 78, 83, 73, 79, 206, 
+    68, 73, 77, 50, 128, 68, 73, 76, 128, 68, 73, 71, 82, 65, 80, 72, 128, 
+    68, 73, 71, 82, 65, 80, 200, 68, 73, 71, 82, 65, 77, 77, 79, 211, 68, 73, 
+    71, 82, 65, 77, 77, 193, 68, 73, 71, 82, 65, 205, 68, 73, 71, 79, 82, 71, 
+    79, 78, 128, 68, 73, 71, 79, 82, 71, 79, 206, 68, 73, 71, 65, 77, 77, 65, 
+    128, 68, 73, 71, 193, 68, 73, 70, 84, 79, 71, 71, 79, 211, 68, 73, 70, 
+    79, 78, 73, 65, 83, 128, 68, 73, 70, 70, 73, 67, 85, 76, 84, 217, 68, 73, 
+    70, 70, 73, 67, 85, 76, 84, 73, 69, 83, 128, 68, 73, 70, 70, 69, 82, 69, 
+    78, 84, 73, 65, 76, 128, 68, 73, 70, 70, 69, 82, 69, 78, 67, 197, 68, 73, 
+    70, 65, 84, 128, 68, 73, 69, 83, 73, 83, 128, 68, 73, 69, 83, 73, 211, 
+    68, 73, 69, 80, 128, 68, 73, 197, 68, 73, 66, 128, 68, 73, 65, 84, 79, 
+    78, 79, 206, 68, 73, 65, 84, 79, 78, 73, 75, 201, 68, 73, 65, 83, 84, 79, 
+    76, 201, 68, 73, 65, 77, 79, 78, 68, 83, 128, 68, 73, 65, 77, 79, 78, 68, 
+    128, 68, 73, 65, 77, 79, 78, 196, 68, 73, 65, 77, 69, 84, 69, 210, 68, 
+    73, 65, 76, 89, 84, 73, 75, 65, 128, 68, 73, 65, 76, 89, 84, 73, 75, 193, 
+    68, 73, 65, 76, 69, 67, 84, 45, 208, 68, 73, 65, 71, 79, 78, 65, 76, 128, 
+    68, 73, 65, 71, 79, 78, 65, 204, 68, 73, 65, 69, 82, 69, 83, 73, 90, 69, 
+    196, 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 68, 73, 65, 69, 82, 69, 83, 
+    73, 211, 68, 72, 79, 85, 128, 68, 72, 79, 79, 128, 68, 72, 79, 128, 68, 
+    72, 73, 128, 68, 72, 72, 85, 128, 68, 72, 72, 79, 79, 128, 68, 72, 72, 
+    79, 128, 68, 72, 72, 73, 128, 68, 72, 72, 69, 69, 128, 68, 72, 72, 69, 
+    128, 68, 72, 72, 65, 128, 68, 72, 69, 69, 128, 68, 72, 65, 82, 77, 65, 
+    128, 68, 72, 65, 76, 69, 84, 72, 128, 68, 72, 65, 76, 65, 84, 72, 128, 
+    68, 72, 65, 76, 128, 68, 72, 65, 68, 72, 69, 128, 68, 72, 65, 65, 76, 85, 
+    128, 68, 72, 65, 65, 128, 68, 72, 65, 128, 68, 69, 90, 200, 68, 69, 89, 
+    84, 69, 82, 79, 213, 68, 69, 89, 84, 69, 82, 79, 211, 68, 69, 88, 73, 65, 
+    128, 68, 69, 86, 73, 67, 197, 68, 69, 86, 69, 76, 79, 80, 77, 69, 78, 84, 
+    128, 68, 69, 85, 78, 71, 128, 68, 69, 83, 203, 68, 69, 83, 73, 71, 78, 
+    128, 68, 69, 83, 73, 128, 68, 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 
+    68, 69, 83, 67, 69, 78, 68, 73, 78, 199, 68, 69, 83, 67, 69, 78, 68, 69, 
+    82, 128, 68, 69, 82, 69, 84, 45, 72, 73, 68, 69, 84, 128, 68, 69, 82, 69, 
+    84, 128, 68, 69, 80, 65, 82, 84, 85, 82, 69, 128, 68, 69, 80, 65, 82, 84, 
+    77, 69, 78, 212, 68, 69, 80, 65, 82, 84, 73, 78, 199, 68, 69, 78, 84, 73, 
+    83, 84, 82, 217, 68, 69, 78, 84, 65, 204, 68, 69, 78, 79, 77, 73, 78, 65, 
+    84, 79, 82, 128, 68, 69, 78, 79, 77, 73, 78, 65, 84, 79, 210, 68, 69, 78, 
+    78, 69, 78, 128, 68, 69, 78, 71, 128, 68, 69, 78, 197, 68, 69, 78, 65, 
+    82, 73, 85, 211, 68, 69, 76, 84, 65, 128, 68, 69, 76, 84, 193, 68, 69, 
+    76, 84, 128, 68, 69, 76, 80, 72, 73, 195, 68, 69, 76, 73, 86, 69, 82, 
+    217, 68, 69, 76, 73, 86, 69, 82, 65, 78, 67, 69, 128, 68, 69, 76, 73, 77, 
+    73, 84, 69, 82, 128, 68, 69, 76, 73, 77, 73, 84, 69, 210, 68, 69, 76, 73, 
+    67, 73, 79, 85, 211, 68, 69, 76, 69, 84, 69, 128, 68, 69, 76, 69, 84, 
     197, 68, 69, 75, 65, 128, 68, 69, 75, 128, 68, 69, 73, 128, 68, 69, 72, 
     73, 128, 68, 69, 71, 82, 69, 197, 68, 69, 70, 73, 78, 73, 84, 73, 79, 78, 
     128, 68, 69, 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 
@@ -4547,96 +4550,96 @@
     73, 79, 206, 65, 76, 84, 69, 82, 78, 65, 84, 197, 65, 76, 84, 65, 128, 
     65, 76, 80, 72, 65, 128, 65, 76, 80, 72, 193, 65, 76, 80, 65, 80, 82, 65, 
     78, 65, 128, 65, 76, 80, 65, 80, 82, 65, 65, 78, 193, 65, 76, 80, 65, 
-    128, 65, 76, 77, 79, 83, 212, 65, 76, 76, 79, 128, 65, 76, 76, 73, 65, 
-    78, 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 75, 65, 
-    76, 73, 45, 50, 128, 65, 76, 75, 65, 76, 73, 128, 65, 76, 73, 71, 78, 69, 
-    196, 65, 76, 73, 70, 85, 128, 65, 76, 73, 69, 78, 128, 65, 76, 73, 69, 
-    206, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, 85, 212, 65, 
-    76, 69, 82, 84, 128, 65, 76, 69, 80, 72, 128, 65, 76, 69, 77, 66, 73, 67, 
-    128, 65, 76, 69, 70, 128, 65, 76, 65, 89, 72, 69, 128, 65, 76, 65, 89, 
-    72, 197, 65, 76, 65, 82, 205, 65, 76, 65, 80, 72, 128, 65, 76, 45, 76, 
-    65, 75, 85, 78, 65, 128, 65, 75, 84, 73, 69, 83, 69, 76, 83, 75, 65, 66, 
-    128, 65, 75, 83, 65, 128, 65, 75, 72, 77, 73, 77, 73, 195, 65, 75, 66, 
-    65, 210, 65, 75, 65, 82, 65, 128, 65, 75, 65, 82, 193, 65, 73, 89, 65, 
-    78, 78, 65, 128, 65, 73, 86, 73, 76, 73, 203, 65, 73, 84, 79, 206, 65, 
-    73, 82, 80, 76, 65, 78, 69, 128, 65, 73, 78, 213, 65, 73, 78, 78, 128, 
-    65, 73, 76, 77, 128, 65, 73, 75, 65, 82, 65, 128, 65, 73, 72, 86, 85, 83, 
-    128, 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65, 72, 65, 78, 199, 
-    65, 72, 65, 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 85, 78, 71, 
-    128, 65, 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, 84, 73, 79, 78, 
-    128, 65, 71, 71, 82, 65, 86, 65, 84, 69, 196, 65, 71, 65, 73, 78, 128, 
-    65, 70, 84, 69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, 82, 73, 67, 65, 
-    206, 65, 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, 68, 128, 65, 70, 
-    71, 72, 65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, 79, 206, 65, 69, 
-    89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 83, 67, 85, 76, 65, 80, 
-    73, 85, 83, 128, 65, 69, 83, 67, 128, 65, 69, 83, 128, 65, 69, 82, 73, 
-    65, 204, 65, 69, 82, 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 
-    65, 69, 76, 128, 65, 69, 75, 128, 65, 69, 71, 69, 65, 206, 65, 69, 71, 
-    128, 65, 69, 69, 89, 65, 78, 78, 65, 128, 65, 69, 69, 128, 65, 69, 68, 
-    65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 68, 128, 65, 69, 66, 128, 65, 
-    68, 86, 65, 78, 84, 65, 71, 69, 128, 65, 68, 86, 65, 78, 67, 69, 128, 65, 
-    68, 69, 71, 128, 65, 68, 69, 199, 65, 68, 68, 82, 69, 83, 83, 69, 196, 
-    65, 68, 68, 82, 69, 83, 211, 65, 68, 68, 65, 75, 128, 65, 68, 65, 203, 
-    65, 67, 85, 84, 69, 45, 77, 65, 67, 82, 79, 78, 128, 65, 67, 85, 84, 69, 
-    45, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 128, 65, 67, 85, 84, 197, 
-    65, 67, 84, 85, 65, 76, 76, 217, 65, 67, 84, 73, 86, 65, 84, 197, 65, 67, 
-    82, 79, 80, 72, 79, 78, 73, 195, 65, 67, 75, 78, 79, 87, 76, 69, 68, 71, 
-    69, 128, 65, 67, 67, 85, 77, 85, 76, 65, 84, 73, 79, 78, 128, 65, 67, 67, 
-    79, 85, 78, 212, 65, 67, 67, 69, 80, 84, 128, 65, 67, 67, 69, 78, 84, 45, 
-    83, 84, 65, 67, 67, 65, 84, 79, 128, 65, 67, 67, 69, 78, 84, 128, 65, 67, 
-    67, 69, 78, 212, 65, 67, 65, 68, 69, 77, 217, 65, 66, 89, 83, 77, 65, 
-    204, 65, 66, 85, 78, 68, 65, 78, 67, 69, 128, 65, 66, 75, 72, 65, 83, 73, 
-    65, 206, 65, 66, 66, 82, 69, 86, 73, 65, 84, 73, 79, 206, 65, 66, 65, 70, 
-    73, 76, 73, 128, 65, 66, 178, 65, 65, 89, 65, 78, 78, 65, 128, 65, 65, 
-    89, 128, 65, 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, 65, 65, 66, 
-    65, 65, 70, 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, 48, 51, 49, 
-    128, 65, 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, 65, 48, 50, 
-    56, 128, 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, 65, 65, 48, 
-    50, 53, 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, 128, 65, 65, 
-    48, 50, 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, 48, 128, 65, 
-    65, 48, 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, 49, 55, 128, 
-    65, 65, 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, 48, 49, 52, 
-    128, 65, 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, 65, 48, 49, 
-    49, 128, 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, 65, 65, 48, 
-    48, 56, 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 65, 128, 
-    65, 65, 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 48, 53, 
-    128, 65, 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 48, 48, 
-    50, 128, 65, 65, 48, 48, 49, 128, 65, 48, 55, 48, 128, 65, 48, 54, 57, 
-    128, 65, 48, 54, 56, 128, 65, 48, 54, 55, 128, 65, 48, 54, 54, 128, 65, 
-    48, 54, 53, 128, 65, 48, 54, 52, 128, 65, 48, 54, 51, 128, 65, 48, 54, 
-    50, 128, 65, 48, 54, 49, 128, 65, 48, 54, 48, 128, 65, 48, 53, 57, 128, 
-    65, 48, 53, 56, 128, 65, 48, 53, 55, 128, 65, 48, 53, 54, 128, 65, 48, 
-    53, 53, 128, 65, 48, 53, 52, 128, 65, 48, 53, 51, 128, 65, 48, 53, 50, 
-    128, 65, 48, 53, 49, 128, 65, 48, 53, 48, 128, 65, 48, 52, 57, 128, 65, 
-    48, 52, 56, 128, 65, 48, 52, 55, 128, 65, 48, 52, 54, 128, 65, 48, 52, 
-    53, 65, 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 52, 51, 
-    65, 128, 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 52, 50, 
-    128, 65, 48, 52, 49, 128, 65, 48, 52, 48, 65, 128, 65, 48, 52, 48, 128, 
-    65, 48, 51, 57, 128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 65, 48, 
-    51, 54, 128, 65, 48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 51, 51, 
-    128, 65, 48, 51, 50, 65, 128, 65, 48, 49, 55, 65, 128, 65, 48, 49, 52, 
-    65, 128, 65, 48, 48, 54, 66, 128, 65, 48, 48, 54, 65, 128, 65, 48, 48, 
-    53, 65, 128, 65, 45, 69, 85, 128, 45, 85, 205, 45, 80, 72, 82, 85, 128, 
-    45, 75, 72, 89, 85, 196, 45, 75, 72, 89, 73, 76, 128, 45, 68, 90, 85, 
-    196, 45, 67, 72, 65, 210, 45, 67, 72, 65, 76, 128, 
+    128, 65, 76, 77, 79, 83, 212, 65, 76, 77, 128, 65, 76, 76, 79, 128, 65, 
+    76, 76, 73, 65, 78, 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, 
+    65, 76, 75, 65, 76, 73, 45, 50, 128, 65, 76, 75, 65, 76, 73, 128, 65, 76, 
+    73, 71, 78, 69, 196, 65, 76, 73, 70, 85, 128, 65, 76, 73, 69, 78, 128, 
+    65, 76, 73, 69, 206, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 
+    69, 85, 212, 65, 76, 69, 82, 84, 128, 65, 76, 69, 80, 72, 128, 65, 76, 
+    69, 77, 66, 73, 67, 128, 65, 76, 69, 70, 128, 65, 76, 65, 89, 72, 69, 
+    128, 65, 76, 65, 89, 72, 197, 65, 76, 65, 82, 205, 65, 76, 65, 80, 72, 
+    128, 65, 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 84, 73, 69, 83, 69, 
+    76, 83, 75, 65, 66, 128, 65, 75, 83, 65, 128, 65, 75, 72, 77, 73, 77, 73, 
+    195, 65, 75, 66, 65, 210, 65, 75, 65, 82, 65, 128, 65, 75, 65, 82, 193, 
+    65, 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, 203, 65, 73, 84, 
+    79, 206, 65, 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, 78, 213, 65, 73, 
+    78, 78, 128, 65, 73, 76, 77, 128, 65, 73, 75, 65, 82, 65, 128, 65, 73, 
+    72, 86, 85, 83, 128, 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65, 
+    72, 65, 78, 199, 65, 72, 65, 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 
+    71, 85, 78, 71, 128, 65, 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, 84, 
+    73, 79, 78, 128, 65, 71, 71, 82, 65, 86, 65, 84, 69, 196, 65, 71, 65, 73, 
+    78, 128, 65, 70, 84, 69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, 82, 
+    73, 67, 65, 206, 65, 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, 68, 
+    128, 65, 70, 71, 72, 65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, 79, 
+    206, 65, 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 83, 67, 
+    85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, 67, 128, 65, 69, 83, 128, 
+    65, 69, 82, 73, 65, 204, 65, 69, 82, 128, 65, 69, 76, 65, 45, 80, 73, 76, 
+    76, 65, 128, 65, 69, 76, 128, 65, 69, 75, 128, 65, 69, 71, 69, 65, 206, 
+    65, 69, 71, 128, 65, 69, 69, 89, 65, 78, 78, 65, 128, 65, 69, 69, 128, 
+    65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 68, 128, 65, 69, 66, 
+    128, 65, 68, 86, 65, 78, 84, 65, 71, 69, 128, 65, 68, 86, 65, 78, 67, 69, 
+    128, 65, 68, 69, 71, 128, 65, 68, 69, 199, 65, 68, 68, 82, 69, 83, 83, 
+    69, 196, 65, 68, 68, 82, 69, 83, 211, 65, 68, 68, 65, 75, 128, 65, 68, 
+    65, 203, 65, 67, 85, 84, 69, 45, 77, 65, 67, 82, 79, 78, 128, 65, 67, 85, 
+    84, 69, 45, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 128, 65, 67, 85, 
+    84, 197, 65, 67, 84, 85, 65, 76, 76, 217, 65, 67, 84, 73, 86, 65, 84, 
+    197, 65, 67, 82, 79, 80, 72, 79, 78, 73, 195, 65, 67, 75, 78, 79, 87, 76, 
+    69, 68, 71, 69, 128, 65, 67, 67, 85, 77, 85, 76, 65, 84, 73, 79, 78, 128, 
+    65, 67, 67, 79, 85, 78, 212, 65, 67, 67, 69, 80, 84, 128, 65, 67, 67, 69, 
+    78, 84, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 65, 67, 67, 69, 78, 84, 
+    128, 65, 67, 67, 69, 78, 212, 65, 67, 65, 68, 69, 77, 217, 65, 66, 89, 
+    83, 77, 65, 204, 65, 66, 85, 78, 68, 65, 78, 67, 69, 128, 65, 66, 75, 72, 
+    65, 83, 73, 65, 206, 65, 66, 66, 82, 69, 86, 73, 65, 84, 73, 79, 206, 65, 
+    66, 65, 70, 73, 76, 73, 128, 65, 66, 178, 65, 65, 89, 65, 78, 78, 65, 
+    128, 65, 65, 89, 128, 65, 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, 
+    65, 65, 66, 65, 65, 70, 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, 
+    48, 51, 49, 128, 65, 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, 
+    65, 48, 50, 56, 128, 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, 
+    65, 65, 48, 50, 53, 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, 
+    128, 65, 65, 48, 50, 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, 
+    48, 128, 65, 65, 48, 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, 
+    49, 55, 128, 65, 65, 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, 
+    48, 49, 52, 128, 65, 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, 
+    65, 48, 49, 49, 128, 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, 
+    65, 65, 48, 48, 56, 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 
+    65, 128, 65, 65, 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 
+    48, 53, 128, 65, 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 
+    48, 48, 50, 128, 65, 65, 48, 48, 49, 128, 65, 48, 55, 48, 128, 65, 48, 
+    54, 57, 128, 65, 48, 54, 56, 128, 65, 48, 54, 55, 128, 65, 48, 54, 54, 
+    128, 65, 48, 54, 53, 128, 65, 48, 54, 52, 128, 65, 48, 54, 51, 128, 65, 
+    48, 54, 50, 128, 65, 48, 54, 49, 128, 65, 48, 54, 48, 128, 65, 48, 53, 
+    57, 128, 65, 48, 53, 56, 128, 65, 48, 53, 55, 128, 65, 48, 53, 54, 128, 
+    65, 48, 53, 53, 128, 65, 48, 53, 52, 128, 65, 48, 53, 51, 128, 65, 48, 
+    53, 50, 128, 65, 48, 53, 49, 128, 65, 48, 53, 48, 128, 65, 48, 52, 57, 
+    128, 65, 48, 52, 56, 128, 65, 48, 52, 55, 128, 65, 48, 52, 54, 128, 65, 
+    48, 52, 53, 65, 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 
+    52, 51, 65, 128, 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 
+    52, 50, 128, 65, 48, 52, 49, 128, 65, 48, 52, 48, 65, 128, 65, 48, 52, 
+    48, 128, 65, 48, 51, 57, 128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 
+    65, 48, 51, 54, 128, 65, 48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 
+    51, 51, 128, 65, 48, 51, 50, 65, 128, 65, 48, 49, 55, 65, 128, 65, 48, 
+    49, 52, 65, 128, 65, 48, 48, 54, 66, 128, 65, 48, 48, 54, 65, 128, 65, 
+    48, 48, 53, 65, 128, 65, 45, 69, 85, 128, 45, 85, 205, 45, 80, 72, 82, 
+    85, 128, 45, 75, 72, 89, 85, 196, 45, 75, 72, 89, 73, 76, 128, 45, 68, 
+    90, 85, 196, 45, 67, 72, 65, 210, 45, 67, 72, 65, 76, 128, 
 };
 
 static unsigned int lexicon_offset[] = {
-    0, 0, 6, 10, 18, 23, 27, 34, 39, 41, 44, 50, 62, 70, 80, 93, 102, 108, 
+    0, 0, 6, 10, 18, 23, 27, 34, 39, 41, 47, 50, 62, 70, 80, 93, 102, 108, 
     113, 121, 130, 135, 140, 143, 147, 153, 158, 163, 171, 178, 186, 191, 
     194, 200, 208, 215, 225, 230, 237, 246, 249, 254, 257, 263, 267, 272, 
     281, 288, 295, 301, 310, 315, 321, 327, 335, 144, 341, 349, 350, 358, 
-    361, 367, 369, 375, 382, 384, 391, 395, 403, 410, 415, 417, 422, 429, 
-    431, 299, 437, 439, 444, 449, 452, 457, 463, 470, 479, 489, 494, 498, 
+    361, 367, 369, 375, 382, 384, 391, 395, 403, 410, 412, 417, 422, 427, 
+    434, 436, 299, 442, 445, 447, 452, 457, 463, 470, 479, 489, 494, 498, 
     505, 518, 522, 531, 538, 545, 548, 554, 558, 562, 572, 580, 588, 596, 
-    605, 613, 618, 619, 623, 631, 638, 648, 659, 663, 666, 670, 673, 348, 
-    678, 687, 691, 697, 703, 705, 708, 711, 714, 718, 722, 731, 739, 744, 
+    605, 613, 618, 619, 623, 631, 638, 648, 652, 663, 667, 670, 673, 678, 
+    348, 682, 691, 697, 703, 705, 708, 711, 714, 718, 722, 731, 739, 744, 
     747, 751, 757, 764, 771, 776, 785, 794, 801, 805, 818, 827, 835, 841, 
     557, 850, 860, 867, 873, 879, 886, 894, 898, 749, 906, 915, 503, 923, 
     928, 934, 17, 943, 948, 951, 955, 959, 966, 969, 976, 980, 988, 992, 
-    1000, 1004, 1007, 1014, 1021, 192, 1024, 1029, 1039, 1048, 1055, 1061, 
-    1067, 1075, 1078, 1083, 1089, 1097, 1102, 1105, 1108, 111, 1113, 1117, 
-    1123, 1129, 1132, 1138, 1142, 1147, 1153, 1158, 1168, 1172, 1175, 1178, 
+    1000, 1004, 1007, 1014, 1021, 192, 1024, 1029, 1039, 1048, 1055, 1060, 
+    1066, 1072, 1080, 1083, 1088, 1094, 1102, 1107, 1110, 1113, 111, 1118, 
+    1122, 1128, 1134, 1137, 1143, 1147, 1152, 1158, 1168, 1172, 1175, 1178, 
     1187, 1191, 1194, 1199, 1204, 1210, 1215, 1220, 1225, 1229, 1234, 1240, 
     1245, 1250, 1254, 1260, 1265, 1270, 1275, 1279, 1284, 1289, 1294, 1300, 
     1306, 1312, 1317, 1321, 1326, 1331, 1336, 1340, 1345, 1350, 1355, 1360, 
@@ -4650,7 +4653,7 @@
     1665, 1670, 1675, 1679, 1682, 1687, 1692, 1697, 1702, 1708, 1713, 1717, 
     1322, 1720, 1725, 1730, 1327, 1734, 1738, 1745, 1332, 1752, 1337, 1756, 
     1758, 1763, 1769, 1341, 1774, 1783, 1346, 1788, 1794, 1351, 1799, 1804, 
-    1807, 1812, 1816, 1820, 1824, 1827, 1831, 1356, 1361, 1156, 1836, 1842, 
+    1807, 1812, 1816, 1820, 1824, 1827, 1831, 1356, 1361, 1058, 1836, 1842, 
     1848, 1854, 1860, 1866, 1872, 1878, 1884, 1889, 1895, 1901, 1907, 1913, 
     1919, 1925, 1931, 1937, 1943, 1948, 1953, 1958, 1963, 1968, 1973, 1978, 
     1983, 1988, 1993, 1999, 2004, 2010, 2015, 2021, 2027, 2032, 2038, 2044, 
@@ -4677,7 +4680,7 @@
     3241, 3245, 3248, 3261, 3265, 3269, 3273, 3277, 3281, 3284, 3288, 3292, 
     3297, 3301, 3306, 3311, 3316, 3320, 3323, 3326, 3332, 3336, 3340, 3343, 
     3347, 3351, 3354, 3360, 3365, 3370, 3376, 3381, 3386, 3392, 3398, 3403, 
-    3408, 3413, 1115, 547, 3418, 3421, 3426, 3430, 3433, 3437, 3442, 3447, 
+    3408, 3413, 1120, 547, 3418, 3421, 3426, 3430, 3433, 3437, 3442, 3447, 
     3451, 3456, 3460, 3465, 3469, 3473, 3479, 3485, 3488, 3491, 3497, 3504, 
     3511, 3517, 3524, 3529, 3533, 3540, 3547, 3552, 3556, 3566, 3570, 3574, 
     3579, 3584, 3594, 2107, 3599, 3603, 3606, 3612, 3617, 3623, 3629, 3634, 
@@ -4726,7 +4729,7 @@
     6683, 6698, 6713, 6728, 6743, 6758, 6773, 6788, 6803, 6818, 6833, 6848, 
     6863, 6878, 6893, 6908, 6923, 6938, 6953, 6968, 6983, 6998, 7013, 7028, 
     7037, 7046, 7051, 7057, 7067, 7071, 7076, 7081, 7089, 7093, 7096, 7100, 
-    2975, 7103, 7108, 298, 442, 7114, 7122, 7126, 7130, 7133, 7137, 7143, 
+    2975, 7103, 7108, 298, 425, 7114, 7122, 7126, 7130, 7133, 7137, 7143, 
     7147, 7155, 7161, 7166, 7173, 7180, 7186, 7191, 7198, 7204, 7212, 7216, 
     7221, 7233, 7244, 7251, 7255, 7259, 7265, 3233, 7269, 7275, 7280, 7285, 
     7290, 7296, 7301, 7306, 7311, 7316, 7322, 7327, 7332, 7338, 7343, 7349, 
@@ -4828,5058 +4831,5056 @@
     13435, 13443, 13451, 13458, 13466, 13478, 13489, 13499, 13506, 13512, 
     13521, 13532, 13541, 13553, 13565, 13577, 13587, 13596, 13605, 13613, 
     13620, 13629, 13637, 13641, 13647, 13653, 13658, 7753, 13662, 13664, 
-    13668, 13673, 13679, 13688, 13692, 13700, 13707, 13716, 13725, 13734, 
-    13743, 13752, 13761, 13770, 13779, 13789, 13799, 13808, 13814, 13821, 
-    13828, 13834, 13848, 13855, 13863, 13872, 13878, 13887, 13896, 13907, 
-    13917, 13925, 13932, 13940, 13949, 13962, 13970, 13977, 13990, 13996, 
-    14002, 14012, 14021, 14030, 14035, 14039, 14045, 14051, 14058, 8966, 
-    14063, 14068, 14075, 14080, 12376, 14085, 14093, 14099, 14104, 14112, 
-    14120, 14127, 14135, 14141, 14149, 14157, 14163, 14168, 14174, 14181, 
-    14187, 14192, 14196, 14207, 14215, 14221, 14226, 14235, 14241, 14246, 
-    14255, 14269, 3853, 14273, 14278, 14283, 14289, 14294, 14299, 14303, 
-    14308, 14313, 14318, 7752, 14323, 14328, 14333, 14338, 14343, 14347, 
-    14352, 14357, 14362, 14367, 14373, 14379, 14384, 14388, 14393, 14398, 
-    14403, 9301, 14408, 14413, 14418, 14423, 14428, 14445, 14463, 14475, 
-    14488, 14505, 14521, 14538, 14548, 14567, 14578, 14589, 14600, 14611, 
-    14623, 14634, 14645, 14662, 14673, 14684, 14689, 9306, 14694, 14698, 
-    2381, 14702, 14705, 14711, 14719, 14727, 14732, 14740, 14748, 14755, 
-    14760, 14766, 14773, 14781, 14788, 14800, 14808, 14813, 11597, 14819, 
-    14828, 14837, 14845, 14852, 14858, 14866, 14873, 14879, 14886, 14892, 
-    14901, 14909, 14919, 14926, 14932, 14940, 14946, 14954, 14961, 14974, 
-    14981, 14990, 14999, 15008, 15016, 15026, 15033, 15038, 3560, 15045, 
-    15050, 1372, 15054, 14324, 15058, 15064, 15068, 15076, 15088, 15093, 
-    15100, 15106, 15111, 15118, 14329, 15122, 15126, 15130, 14334, 15134, 
-    14339, 15138, 15145, 15150, 15154, 15161, 15165, 15173, 15180, 15184, 
-    15191, 15208, 15217, 15221, 15224, 15232, 15238, 15243, 3638, 15247, 
-    15249, 15257, 15264, 15274, 15286, 15291, 15297, 15302, 15306, 15312, 
-    15317, 15323, 15326, 15333, 15341, 15348, 15354, 15360, 15365, 15372, 
-    15378, 15383, 15390, 15394, 15400, 15404, 15411, 15417, 15423, 15431, 
-    15437, 15442, 15448, 15456, 15464, 15470, 15476, 15481, 15488, 15493, 
-    15497, 15503, 15508, 15515, 15520, 15526, 15529, 15535, 15541, 15544, 
-    15548, 15560, 15566, 15571, 15578, 15584, 15590, 15601, 15611, 15620, 
-    15628, 15635, 15646, 15656, 15666, 15674, 15677, 14353, 15682, 15687, 
-    14358, 14493, 15695, 15708, 15723, 15734, 14510, 15752, 15765, 15778, 
-    15789, 10492, 15800, 15813, 15832, 15843, 15854, 15865, 2649, 15878, 
-    15882, 15890, 15905, 15920, 15931, 15938, 15944, 15952, 15956, 15962, 
-    15965, 15975, 15983, 15990, 15998, 16008, 16013, 16020, 16025, 16032, 
-    16043, 16053, 16059, 16064, 16069, 14363, 16073, 16079, 16085, 16090, 
-    16095, 16100, 16104, 14368, 14374, 16108, 14380, 16113, 16121, 16130, 
-    16137, 9150, 16141, 16143, 16148, 16153, 16159, 16164, 16169, 16174, 
-    16179, 16183, 16189, 16195, 16200, 16206, 16211, 16216, 16222, 16227, 
-    16232, 16237, 16242, 16248, 16253, 16258, 16264, 16270, 16275, 16280, 
-    16287, 16293, 16304, 16311, 16316, 16320, 16324, 16327, 16335, 16340, 
-    16347, 16354, 16360, 16365, 16370, 16377, 16387, 16392, 16399, 16405, 
-    16415, 16425, 16439, 16453, 16467, 16481, 16496, 16511, 16528, 16546, 
-    16559, 16565, 16570, 16575, 16579, 16584, 16592, 16598, 16603, 16608, 
-    16612, 16617, 16621, 16626, 16630, 16641, 16647, 16652, 16657, 16664, 
-    16669, 16673, 16678, 16683, 16689, 16696, 16702, 16707, 16711, 16717, 
-    16722, 16727, 16731, 16737, 16742, 16747, 16754, 16759, 13111, 16763, 
-    16768, 16772, 16777, 16783, 16789, 16796, 16806, 16814, 16821, 16826, 
-    16830, 16839, 16847, 16854, 16861, 16867, 16873, 16878, 16883, 16889, 
-    16894, 16900, 16905, 16911, 16917, 16924, 16930, 16935, 16940, 9348, 
-    16949, 16952, 16958, 16963, 16968, 16978, 16985, 16991, 16996, 17001, 
-    17007, 17012, 17018, 17023, 17029, 17035, 17040, 17048, 17055, 17060, 
-    17065, 17071, 17076, 17080, 17089, 17100, 17107, 17112, 17120, 17126, 
-    17133, 17139, 17144, 17148, 17154, 17159, 17164, 17169, 1440, 7777, 2877, 
-    17173, 17177, 17181, 17185, 17189, 17193, 17196, 17203, 17211, 14394, 
-    17218, 17228, 17236, 17243, 17251, 17261, 17270, 17283, 17288, 17293, 
-    17301, 17308, 13207, 13216, 17315, 17325, 17340, 17346, 17353, 17360, 
-    17366, 17374, 17384, 17394, 14399, 17403, 17409, 17415, 17423, 17431, 
-    17436, 17445, 17453, 17465, 17475, 17485, 17495, 17504, 17516, 17526, 
-    17536, 17547, 17552, 17564, 17576, 17588, 17600, 17612, 17624, 17636, 
-    17648, 17660, 17672, 17683, 17695, 17707, 17719, 17731, 17743, 17755, 
-    17767, 17779, 17791, 17803, 17814, 17826, 17838, 17850, 17862, 17874, 
-    17886, 17898, 17910, 17922, 17934, 17945, 17957, 17969, 17981, 17993, 
-    18005, 18017, 18029, 18041, 18053, 18065, 18076, 18088, 18100, 18112, 
-    18124, 18136, 18148, 18160, 18172, 18184, 18196, 18207, 18219, 18231, 
-    18243, 18255, 18267, 18279, 18291, 18303, 18315, 18327, 18338, 18350, 
-    18362, 18374, 18386, 18398, 18410, 18422, 18434, 18446, 18458, 18469, 
-    18481, 18493, 18505, 18517, 18530, 18543, 18556, 18569, 18582, 18595, 
-    18608, 18620, 18633, 18646, 18659, 18672, 18685, 18698, 18711, 18724, 
-    18737, 18750, 18762, 18775, 18788, 18801, 18814, 18827, 18840, 18853, 
-    18866, 18879, 18892, 18904, 18917, 18930, 18943, 18956, 18969, 18982, 
-    18995, 19008, 19021, 19034, 19046, 19059, 19072, 19085, 19098, 19111, 
-    19124, 19137, 19150, 19163, 19176, 19188, 19201, 19214, 19227, 19240, 
-    19253, 19266, 19279, 19292, 19305, 19318, 19330, 19341, 19354, 19367, 
-    19380, 19393, 19406, 19419, 19432, 19445, 19458, 19471, 19483, 19496, 
-    19509, 19522, 19535, 19548, 19561, 19574, 19587, 19600, 19613, 19625, 
-    19638, 19651, 19664, 19677, 19690, 19703, 19716, 19729, 19742, 19755, 
-    19767, 19780, 19793, 19806, 19819, 19832, 19845, 19858, 19871, 19884, 
-    19897, 19909, 19922, 19935, 19948, 19961, 19974, 19987, 20000, 20013, 
-    20026, 20039, 20051, 20064, 20077, 20090, 20103, 20116, 20129, 20142, 
-    20155, 20168, 20181, 20193, 20206, 20219, 20232, 20245, 20258, 20271, 
-    20284, 20297, 20310, 20323, 20335, 20348, 20361, 20374, 20387, 20400, 
-    20413, 20426, 20439, 20452, 20465, 20477, 20490, 20503, 20516, 20529, 
-    20542, 20555, 20568, 20581, 20594, 20607, 20619, 20632, 20645, 20658, 
-    20671, 20684, 20697, 20710, 20723, 20736, 20749, 20761, 20772, 20780, 
-    20788, 20795, 20801, 20805, 20811, 20817, 20825, 20831, 20836, 20840, 
-    20849, 9155, 20860, 20867, 20875, 20882, 20889, 10948, 20896, 20905, 
-    20910, 20915, 7805, 20922, 20927, 20930, 20935, 20943, 20950, 20957, 
-    20964, 20970, 20979, 20988, 20994, 21003, 21007, 21013, 21018, 21028, 
-    21035, 21041, 21049, 21055, 21062, 21072, 21081, 21085, 21092, 21096, 
-    21101, 21107, 21115, 21119, 21129, 14409, 21138, 21144, 21148, 21157, 
-    14414, 21163, 21170, 21181, 21189, 21198, 21206, 8931, 21214, 21219, 
-    21225, 21230, 21234, 21238, 21242, 9639, 21247, 21255, 21262, 21271, 
-    21278, 21285, 10878, 21292, 21298, 21302, 21308, 21315, 21321, 21329, 
-    21335, 21342, 21348, 21354, 21363, 21367, 21375, 21384, 21391, 21396, 
-    21400, 21411, 21416, 21421, 21426, 21439, 7995, 21443, 21449, 21457, 
-    21461, 21468, 21477, 21482, 14685, 21490, 21494, 21506, 21511, 21515, 
-    21518, 21524, 21530, 21535, 21539, 21542, 21553, 21558, 9383, 21565, 
-    21570, 9388, 21575, 21580, 21585, 21590, 21595, 21600, 21605, 21610, 
-    21615, 21620, 21625, 21630, 21636, 21641, 21646, 21651, 21656, 21661, 
-    21666, 21671, 21676, 21681, 21687, 21693, 21698, 21703, 21708, 21713, 
-    21718, 21723, 21728, 21733, 21738, 21744, 21749, 21754, 21759, 21765, 
-    21771, 21776, 21781, 21786, 21791, 21796, 21801, 21806, 21811, 21817, 
-    21822, 21827, 21832, 21837, 21843, 21848, 21853, 21857, 1368, 129, 21865, 
-    21869, 21873, 21877, 21882, 21886, 13117, 12476, 21890, 21895, 21899, 
-    21904, 21908, 21913, 21917, 21923, 21928, 21932, 21936, 21944, 21948, 
-    21952, 21957, 21962, 21966, 21972, 21977, 21981, 21986, 21991, 21995, 
-    22002, 22009, 22016, 22020, 22024, 22029, 22033, 22036, 22042, 22055, 
-    22060, 22069, 22074, 9428, 22079, 22082, 2712, 2717, 22086, 22092, 22098, 
-    7209, 22103, 22108, 22113, 22119, 22124, 13903, 22129, 22134, 22139, 
-    22144, 22150, 22155, 22160, 22166, 22171, 22175, 22180, 22185, 22190, 
-    22195, 22199, 22204, 22208, 22213, 22218, 22223, 22228, 22232, 22237, 
-    22241, 22246, 22251, 22256, 22261, 2886, 22176, 22265, 22273, 22280, 
-    9733, 22292, 22300, 22181, 22307, 22312, 22320, 22186, 22325, 22330, 
-    22338, 22343, 22191, 22348, 22353, 22357, 22363, 22371, 22374, 22381, 
-    22385, 22389, 22395, 22402, 22407, 8958, 1727, 1732, 22411, 22417, 22423, 
-    22428, 22432, 22436, 22440, 22444, 22448, 22452, 22456, 22459, 22465, 
-    22472, 22480, 22486, 22492, 22497, 22502, 22506, 13823, 13830, 22511, 
-    22523, 22526, 22533, 16356, 22540, 22548, 22559, 22568, 22581, 22591, 
-    22605, 22617, 22631, 22643, 22653, 22665, 22671, 22686, 22710, 22728, 
-    22747, 22760, 22774, 22792, 22808, 22825, 22843, 22854, 22873, 22890, 
-    22910, 22928, 22940, 22954, 22968, 22980, 22997, 23016, 23034, 23046, 
-    23064, 23083, 14553, 23096, 23116, 23128, 10523, 23140, 23145, 23150, 
-    23155, 23161, 23166, 23170, 23177, 2398, 23181, 23187, 23191, 23194, 
-    23198, 23206, 23212, 22209, 23216, 23225, 23236, 23242, 23248, 23257, 
-    23265, 23272, 23277, 23281, 23288, 23294, 23303, 23311, 23318, 23328, 
-    23337, 23347, 23352, 23361, 23370, 23381, 23392, 3963, 23402, 23406, 
-    23416, 23424, 23434, 23445, 23450, 23460, 23468, 23475, 23481, 23488, 
-    23493, 22219, 23497, 23506, 23510, 23513, 23518, 23525, 23534, 23542, 
-    23550, 23560, 23569, 23575, 23581, 22224, 22229, 23585, 23595, 23605, 
-    23615, 23623, 23630, 23640, 23648, 23656, 23662, 23670, 930, 23679, 
-    14744, 542, 23693, 23702, 23710, 23721, 23732, 23742, 23751, 23763, 
-    23772, 23781, 23787, 23796, 23805, 23815, 23823, 23831, 9360, 23837, 
-    23840, 23844, 23849, 23854, 9848, 22242, 22247, 23862, 23868, 23874, 
-    23879, 23884, 23888, 23896, 23902, 23908, 23912, 3525, 23920, 23925, 
-    23930, 23934, 23938, 9928, 23945, 23953, 23967, 23974, 23980, 9937, 9943, 
-    23988, 23996, 24003, 24008, 24013, 22252, 24019, 24030, 24034, 24039, 
-    2601, 24044, 24055, 24061, 24066, 24070, 24074, 24077, 24084, 24091, 
-    24098, 24104, 24108, 22257, 24113, 24117, 24121, 1037, 24126, 24131, 
-    24136, 24141, 24146, 24151, 24156, 24161, 24166, 24171, 24176, 24181, 
-    24186, 24191, 24197, 24202, 24207, 24212, 24217, 24222, 24227, 24233, 
-    24238, 24243, 24248, 24253, 24258, 24263, 24268, 24274, 24280, 24285, 
-    24291, 24296, 24301, 5, 24307, 24311, 24315, 24319, 24324, 24328, 24332, 
-    24336, 24340, 24345, 24349, 24354, 24358, 24361, 24365, 24370, 24374, 
-    24379, 24383, 24387, 24391, 24396, 24400, 24404, 24414, 24419, 24423, 
-    24427, 24432, 24437, 24446, 24451, 24456, 24460, 24464, 24477, 24489, 
-    24498, 24507, 24513, 24518, 24522, 24526, 24536, 24545, 24553, 24559, 
-    24564, 24568, 24575, 24585, 24594, 24602, 24610, 24617, 24625, 24634, 
-    24643, 24651, 24656, 24660, 24664, 24667, 24669, 24673, 24677, 24682, 
-    24687, 24691, 24695, 24698, 24702, 24705, 24709, 24712, 24715, 24719, 
-    24725, 24729, 24733, 24737, 24742, 24747, 24752, 24756, 24759, 24764, 
-    24770, 24775, 24781, 24786, 24790, 24794, 24798, 24803, 24807, 24812, 
-    24816, 24820, 24827, 24831, 24834, 24838, 24844, 24850, 24854, 24858, 
-    24863, 24870, 24876, 24880, 24889, 24893, 24897, 24900, 24906, 24911, 
-    24917, 1489, 1791, 24922, 24927, 24932, 24937, 24942, 24947, 24952, 2148, 
-    2194, 24957, 24960, 24964, 24968, 24973, 24977, 24981, 24984, 24989, 
-    24994, 24998, 25001, 25006, 25010, 25015, 25019, 14756, 25024, 25027, 
-    25030, 25034, 25039, 25043, 25056, 25060, 25063, 25071, 25080, 25087, 
-    25092, 25098, 25104, 25112, 25119, 25126, 25130, 25134, 25138, 25143, 
-    25148, 25152, 25160, 25165, 25177, 25188, 25193, 25197, 25201, 25207, 
-    25212, 25217, 25221, 25225, 25228, 25234, 7915, 2316, 25238, 25243, 
-    25259, 9475, 25279, 25288, 25304, 25308, 25311, 25317, 25327, 25333, 
-    25342, 25357, 25369, 25380, 25388, 25397, 25403, 25412, 25422, 25433, 
-    25444, 25453, 25460, 25469, 25477, 25484, 25492, 25499, 25506, 25519, 
-    25526, 25532, 25537, 25546, 25552, 25557, 25565, 25572, 23426, 25584, 
-    25596, 25610, 25618, 25625, 25637, 25646, 25655, 25663, 25671, 25679, 
-    25686, 25695, 25703, 25713, 25722, 25732, 25741, 25750, 25758, 25763, 
-    25767, 25770, 25774, 25778, 25782, 25786, 25790, 25796, 25802, 25810, 
-    14801, 25817, 25822, 25829, 25835, 25842, 14809, 25849, 25852, 25864, 
-    25872, 25878, 25883, 25887, 9878, 25898, 25908, 25917, 25924, 25928, 
-    14814, 25931, 25938, 25942, 25948, 25951, 25958, 25964, 25971, 25977, 
-    25981, 25986, 25990, 25999, 26006, 26012, 7956, 26019, 26027, 26034, 
-    26040, 26045, 26051, 26057, 26065, 26069, 26072, 26074, 25775, 26083, 
-    26089, 26099, 26104, 26111, 26117, 26122, 26127, 26132, 26136, 26141, 
-    26148, 26157, 26161, 26168, 26177, 26183, 26188, 26194, 26199, 26206, 
-    26217, 26222, 26226, 26236, 26242, 26246, 26251, 26261, 26270, 26274, 
-    26281, 26289, 26296, 26302, 26307, 26315, 26322, 26334, 26343, 26347, 
-    13053, 26355, 26365, 26369, 25067, 26380, 26385, 26389, 26396, 26403, 
-    21968, 25700, 26408, 26412, 26415, 22860, 26420, 26434, 26450, 26468, 
-    26487, 26504, 26522, 22879, 26539, 26559, 22896, 26571, 26583, 15739, 
-    26595, 22916, 26609, 26621, 10536, 26635, 26640, 26645, 26650, 26656, 
-    26662, 26668, 26672, 26679, 26684, 26694, 26700, 10183, 26706, 26708, 
-    26713, 26721, 26725, 26144, 26731, 26738, 11524, 11534, 26745, 26755, 
-    26760, 26764, 26767, 26773, 26781, 26793, 26803, 26819, 26832, 26846, 
-    15757, 26860, 26867, 26871, 26874, 26879, 26883, 26890, 26897, 26907, 
-    26912, 26917, 26922, 26930, 26938, 26947, 26952, 9572, 26956, 26959, 
-    26962, 26967, 26974, 26979, 26995, 27003, 27011, 9423, 27019, 27024, 
-    27028, 27034, 27040, 27043, 27049, 27061, 27069, 27076, 27082, 27089, 
-    27100, 27114, 27127, 27136, 27145, 27157, 27168, 27178, 27187, 27196, 
-    27204, 27215, 7938, 27222, 27228, 27233, 27239, 27246, 27256, 27266, 
-    27275, 27281, 27288, 27293, 27300, 27308, 27316, 27328, 6246, 27335, 
-    27344, 27352, 27358, 27364, 27369, 27373, 27376, 27382, 27389, 27394, 
-    27399, 27403, 27415, 27426, 27435, 27443, 14941, 27448, 27454, 27460, 
-    11517, 8635, 27465, 27469, 27472, 27475, 27481, 27489, 27497, 27501, 
-    27505, 27510, 27513, 27522, 27526, 27534, 27545, 27549, 27555, 27561, 
-    27565, 27571, 27579, 27601, 27625, 27632, 27639, 27645, 27653, 27659, 
-    27664, 27675, 27693, 27700, 27708, 27712, 27721, 27734, 27742, 27754, 
-    27765, 27775, 27789, 27798, 27806, 27818, 9492, 27829, 27840, 27852, 
-    27862, 27871, 27876, 27880, 27888, 27898, 27903, 27907, 27910, 27913, 
-    27921, 27929, 27938, 27948, 27957, 27963, 27977, 2663, 27999, 28010, 
-    28019, 28029, 28041, 28050, 28059, 28069, 28077, 28085, 28094, 28099, 
-    28110, 28115, 28126, 28130, 28140, 28149, 28157, 28167, 28177, 28185, 
-    28194, 28201, 28209, 28216, 28225, 28229, 28237, 28244, 28252, 28259, 
-    28270, 28285, 28292, 28298, 28308, 28317, 28323, 28327, 28334, 28338, 
-    14025, 28344, 28348, 28353, 28360, 28364, 28368, 28376, 28384, 28390, 
-    28399, 28406, 28411, 28416, 28426, 23495, 28430, 28433, 28438, 28443, 
-    28448, 28453, 28458, 28463, 28468, 28473, 28479, 28484, 28489, 28495, 
-    1218, 704, 28500, 28509, 2364, 28516, 28521, 28525, 28531, 1267, 546, 
-    318, 28536, 28545, 28553, 28562, 28570, 28581, 28590, 28598, 28602, 
-    28605, 28613, 28621, 28626, 14769, 28632, 28638, 28644, 5872, 28649, 
-    28653, 28659, 28663, 28670, 1455, 28676, 28683, 9579, 28687, 28697, 
-    28705, 28711, 28720, 28728, 28734, 28742, 28749, 11110, 28755, 28762, 
-    28767, 28774, 1496, 2147, 28780, 28786, 28793, 28804, 28815, 28823, 
-    28830, 28840, 28849, 28857, 28866, 28873, 28880, 28893, 28904, 1272, 
-    28923, 28928, 28936, 3575, 28940, 28945, 28949, 1459, 24696, 28959, 
-    28963, 28968, 28972, 3493, 28978, 28986, 28993, 29004, 29012, 29020, 
-    3576, 279, 29025, 29033, 29041, 29048, 29054, 29059, 2216, 29066, 29072, 
-    25982, 26212, 29078, 106, 29082, 29086, 29092, 615, 9328, 29097, 29104, 
-    29110, 2327, 29114, 29118, 15181, 29121, 29126, 29133, 29139, 29144, 
-    29152, 29159, 29165, 22345, 29169, 29173, 3646, 16619, 29177, 29182, 
-    29185, 29193, 29201, 29206, 29209, 29216, 29226, 29238, 29243, 29247, 
-    29255, 29262, 29268, 29275, 29282, 29285, 29289, 29293, 1463, 29303, 
-    29305, 29310, 29316, 29322, 29327, 29332, 29337, 29342, 29347, 29352, 
-    29357, 29362, 29367, 29372, 29377, 29382, 29387, 29392, 29398, 29404, 
-    29410, 29416, 29421, 29426, 29431, 29437, 29442, 29447, 29452, 29458, 
-    29463, 29469, 29474, 29479, 29484, 29489, 29495, 29500, 29506, 29511, 
-    29516, 29521, 29526, 29532, 29537, 29543, 29548, 29553, 29558, 29563, 
-    29568, 29573, 29578, 29583, 29588, 29594, 29600, 29606, 29611, 29616, 
-    29621, 29626, 29632, 29638, 29644, 29650, 29656, 29662, 29667, 29673, 
-    29678, 29683, 29688, 29693, 29699, 2443, 29704, 2450, 2457, 2754, 29709, 
-    2463, 2473, 29715, 29719, 29724, 29729, 29735, 29740, 29745, 29749, 
-    29754, 29760, 29765, 29770, 29775, 29781, 29786, 29790, 29794, 29799, 
-    29804, 29809, 29814, 29819, 29825, 29831, 29836, 29840, 29845, 29851, 
-    29855, 29860, 29865, 29870, 29875, 29879, 29882, 29887, 29892, 29897, 
-    29902, 29907, 29913, 29919, 29924, 29929, 29933, 29938, 29943, 29948, 
-    29953, 29958, 29962, 29967, 29972, 29977, 29981, 29985, 29989, 29994, 
-    30002, 30007, 30013, 30019, 30025, 30030, 30034, 30037, 30042, 30047, 
-    30051, 30056, 30060, 30065, 30069, 30072, 30077, 17296, 30082, 30087, 
-    30092, 30100, 21274, 28680, 9026, 30105, 30110, 30114, 30119, 30123, 
-    30127, 30132, 30136, 30139, 30142, 30146, 30151, 30155, 30163, 30167, 
-    30170, 30175, 30179, 30183, 30188, 30193, 30197, 30203, 30208, 30213, 
-    30220, 30227, 30231, 30234, 30240, 30249, 30256, 30264, 30271, 30275, 
-    30280, 30284, 30288, 30294, 30300, 30304, 30310, 30315, 30320, 30327, 
-    30333, 30339, 30345, 30351, 30358, 30364, 30370, 30376, 30382, 30388, 
-    30394, 30400, 30407, 30413, 30420, 30426, 30432, 30438, 30444, 30450, 
-    30456, 30462, 30468, 30474, 11418, 30480, 30485, 30490, 30493, 30501, 
-    30506, 30515, 30521, 30526, 30531, 30536, 30540, 30545, 30550, 30555, 
-    30560, 30565, 30572, 30579, 30585, 30591, 30596, 16297, 30603, 30609, 
-    30616, 30622, 30628, 30633, 30641, 30646, 16076, 30650, 30655, 30660, 
-    30666, 30671, 30676, 30680, 30685, 30690, 30696, 30701, 30706, 30710, 
-    30715, 30720, 30724, 30729, 30734, 30739, 30743, 30748, 30753, 30758, 
-    30762, 30766, 15287, 30770, 30779, 30785, 30791, 30800, 30808, 30817, 
-    30825, 30830, 30834, 30841, 30847, 30851, 30854, 30859, 30868, 30876, 
-    30881, 1495, 30887, 30890, 30894, 22418, 22424, 30900, 30904, 30915, 
-    30926, 30937, 30949, 30956, 30963, 30968, 30972, 5909, 755, 21273, 30980, 
-    30985, 30989, 30994, 30998, 31004, 31009, 31015, 31020, 31026, 31031, 
-    31037, 31042, 31048, 31054, 31060, 31065, 31021, 31027, 31069, 31074, 
-    31080, 31085, 31091, 31096, 31102, 31107, 31032, 10421, 31111, 31043, 
-    31049, 31055, 2831, 3423, 31117, 31120, 31126, 31132, 31138, 31145, 
-    31151, 31157, 31163, 31169, 31175, 31181, 31187, 31193, 31199, 31205, 
-    31211, 31217, 31224, 31230, 31236, 31242, 31248, 31254, 31257, 31262, 
-    31265, 31272, 31280, 31285, 31290, 31296, 31301, 31306, 31310, 31315, 
-    31321, 31326, 31332, 31337, 31343, 31348, 31354, 31360, 31364, 31369, 
-    31374, 31379, 31384, 31388, 31393, 31398, 31403, 31409, 31415, 31421, 
-    31427, 31432, 31436, 31439, 31445, 31451, 31460, 31468, 31475, 31480, 
-    31484, 31488, 31493, 15140, 31498, 31506, 31512, 3683, 1377, 31517, 
-    31521, 8005, 31527, 31533, 31540, 8014, 31544, 31550, 31557, 31563, 
-    31572, 31580, 31592, 31596, 31603, 31609, 31613, 31616, 31625, 31633, 
-    31022, 31638, 31648, 31658, 31668, 31674, 31679, 31689, 31694, 31707, 
-    31721, 31732, 31744, 31756, 31770, 31783, 31795, 31807, 14594, 31821, 
-    31826, 31831, 31835, 31839, 31843, 1780, 27166, 31847, 31852, 31070, 
-    31857, 31860, 31865, 31870, 31875, 31881, 31887, 10098, 31892, 31899, 
-    15691, 31905, 31910, 31915, 31919, 31924, 31929, 31075, 31934, 31939, 
-    31944, 31950, 31081, 31955, 31958, 31965, 31973, 31979, 31985, 31991, 
-    32002, 32007, 32014, 32021, 32028, 32036, 32045, 32054, 32060, 32066, 
-    32074, 31086, 32079, 32085, 32091, 31092, 32096, 32101, 32109, 32117, 
-    32123, 32130, 32136, 32143, 32150, 32156, 32164, 32174, 32181, 32186, 
-    32192, 32197, 32202, 32209, 32218, 32226, 32231, 32237, 32244, 32252, 
-    32258, 32263, 32269, 32278, 27943, 32285, 32289, 32294, 32303, 32308, 
-    32313, 32318, 12405, 32326, 32331, 32336, 32341, 32345, 32350, 32355, 
-    32362, 32367, 32372, 32377, 31097, 21210, 32383, 2519, 244, 32386, 32389, 
-    32393, 32397, 32407, 32415, 32419, 32426, 32433, 32437, 32440, 32446, 
-    32454, 32462, 32466, 32470, 32473, 32480, 32484, 32488, 32495, 32503, 
-    31033, 32510, 32518, 10158, 660, 308, 32530, 32535, 32540, 32546, 32551, 
-    32556, 3704, 32561, 32564, 32569, 32574, 32579, 32584, 32589, 32596, 
-    22519, 32601, 32606, 32611, 32616, 32621, 32627, 32632, 32638, 31268, 
-    32644, 32649, 32655, 32661, 32671, 32676, 32681, 32685, 32690, 32695, 
-    32700, 32705, 32718, 32723, 22296, 16699, 3710, 32727, 32732, 32737, 
-    32743, 32748, 32753, 32757, 32762, 32767, 32773, 32778, 32783, 1382, 
-    32787, 32792, 32797, 32802, 32806, 32811, 32816, 32821, 32827, 32833, 
-    32838, 32842, 32846, 32851, 32856, 32861, 32865, 32873, 32877, 32883, 
-    32887, 32894, 16492, 31044, 32900, 32907, 32915, 32922, 32928, 32941, 
-    32953, 32959, 32963, 2773, 32967, 32971, 32475, 32980, 32991, 32996, 
-    33001, 33006, 33010, 33015, 22429, 33019, 33023, 33028, 31050, 21294, 
-    33032, 33037, 33043, 33048, 33052, 33056, 33059, 33063, 33069, 33080, 
-    33092, 31056, 33097, 33100, 33104, 347, 33109, 33114, 33119, 33124, 
-    33129, 33134, 33140, 33145, 33150, 33156, 33161, 33167, 33172, 33178, 
-    33183, 33188, 33193, 33198, 33203, 33208, 33213, 33218, 33224, 33229, 
-    33234, 33239, 33244, 33249, 33254, 33259, 33265, 33271, 33276, 33281, 
-    33286, 33291, 33296, 33301, 33306, 33311, 33316, 33321, 33326, 33331, 
-    33336, 33341, 33346, 33351, 33356, 33361, 33367, 313, 26, 33372, 33376, 
-    33380, 33388, 33392, 33396, 33399, 33402, 33404, 33409, 33413, 33418, 
-    33422, 33427, 33431, 33436, 33440, 33443, 33445, 33449, 33454, 33458, 
-    33469, 33472, 33474, 33478, 33490, 33499, 33503, 33507, 33513, 33518, 
-    33527, 33533, 33538, 33543, 33547, 33552, 33559, 33564, 33570, 33575, 
-    33579, 33586, 25708, 25718, 33590, 33595, 33600, 33605, 33612, 33616, 
-    33623, 8113, 33629, 33638, 33646, 33661, 33675, 33683, 33694, 33703, 
-    33708, 7227, 33718, 33723, 33728, 33732, 33735, 33739, 33744, 33748, 
-    33755, 33760, 33765, 8912, 33775, 33777, 33780, 33784, 33790, 33794, 
-    33799, 33804, 33810, 33815, 33821, 33826, 33836, 33845, 33853, 33858, 
-    33864, 33869, 33876, 33880, 33888, 33895, 33908, 33916, 33920, 33930, 
-    33935, 33939, 33947, 33955, 33959, 33968, 33974, 33979, 33987, 33997, 
-    34006, 34015, 34024, 34035, 34043, 34054, 34063, 34070, 34076, 34081, 
-    34092, 34097, 34101, 34104, 34108, 34116, 34122, 34130, 34137, 34143, 
-    34148, 34154, 2418, 34158, 34160, 34165, 34170, 34175, 34178, 34180, 
-    34184, 34187, 34194, 34198, 9891, 34202, 34208, 34218, 34223, 34229, 
-    34233, 34238, 34251, 26094, 34257, 34266, 17469, 34273, 34282, 31654, 
-    34290, 34295, 34299, 34307, 34314, 34319, 34323, 34328, 34332, 34340, 
-    34346, 34352, 34357, 34361, 34364, 34369, 34382, 34398, 22986, 34415, 
-    34427, 34444, 34456, 34470, 23003, 23022, 34482, 34494, 2680, 34508, 
-    34513, 34518, 34523, 34527, 34534, 34546, 34552, 34555, 34566, 34577, 
-    34582, 32071, 695, 34586, 34590, 34594, 34597, 34602, 34607, 34613, 
-    34618, 34623, 34629, 34635, 34640, 34644, 34649, 34654, 34659, 34663, 
-    34666, 34672, 34677, 34682, 34687, 34691, 34696, 34702, 34710, 26327, 
-    34715, 34720, 34727, 34733, 34739, 34744, 34752, 22528, 34759, 34764, 
-    34769, 34774, 34778, 34781, 34786, 34790, 34794, 34801, 34807, 34813, 
-    34819, 34826, 34831, 34837, 33950, 34841, 34845, 34850, 34863, 34868, 
-    34874, 34882, 34889, 34897, 34907, 34913, 34919, 34925, 34929, 34938, 
-    34946, 34953, 34958, 34963, 10444, 34968, 34976, 34983, 34989, 34999, 
-    35004, 35010, 35018, 3608, 35025, 35032, 3614, 35036, 35041, 35052, 
-    35059, 35065, 35074, 35078, 4015, 35081, 35088, 35094, 35100, 35108, 
-    35118, 29049, 35125, 35133, 35138, 35144, 35149, 25954, 35155, 35162, 
-    35168, 35177, 23667, 35184, 35189, 35193, 35201, 35209, 9607, 5895, 
-    35216, 35220, 35222, 35226, 35231, 35233, 35239, 35244, 35249, 35256, 
-    32592, 35262, 35267, 35271, 35276, 35280, 35289, 35293, 35299, 35306, 
-    35312, 35319, 35324, 35333, 35338, 35342, 35347, 35354, 35362, 35370, 
-    35375, 21350, 35379, 35382, 35386, 35390, 35394, 35397, 35399, 35407, 
-    35411, 35418, 35422, 35426, 35434, 35441, 35451, 35455, 35459, 35467, 
-    35475, 35481, 35486, 35495, 13357, 35501, 35510, 35515, 35522, 35530, 
-    35538, 35546, 35553, 35560, 35567, 35574, 35581, 35586, 35592, 35609, 
-    35617, 35627, 35635, 35642, 407, 35646, 35652, 35656, 35661, 33699, 
-    35667, 35670, 35674, 35682, 3619, 35690, 35696, 35702, 35711, 35721, 
-    35728, 35734, 3625, 3631, 35743, 35750, 35758, 35763, 35767, 35774, 
-    35782, 35789, 35795, 35804, 35814, 35820, 35828, 35837, 35844, 35852, 
-    35859, 22026, 35863, 35870, 35876, 35886, 35895, 35906, 35910, 35920, 
-    35926, 35933, 35941, 35950, 35959, 35969, 35980, 35987, 35992, 35999, 
-    3029, 36007, 36013, 36018, 36024, 36030, 36035, 36048, 36061, 36074, 
-    36081, 36087, 36095, 36103, 36108, 36112, 1469, 36116, 36121, 36126, 
-    36131, 36136, 36142, 36147, 36152, 36157, 36162, 36167, 36172, 36177, 
-    36183, 36189, 36194, 36199, 36205, 36210, 36215, 36220, 36226, 36231, 
-    36236, 36241, 36246, 36252, 36257, 36262, 36268, 36273, 36278, 36283, 
-    36288, 36293, 36299, 36304, 36310, 36315, 36321, 36326, 36331, 36336, 
-    36342, 36348, 36354, 36360, 36366, 36372, 36378, 36384, 36389, 36394, 
-    36400, 36405, 36410, 36415, 36420, 36425, 36430, 36435, 36441, 36446, 
-    36451, 36457, 36463, 101, 36468, 36470, 36474, 36478, 36482, 36487, 
-    36491, 9528, 36495, 36501, 1741, 6280, 36507, 36510, 36515, 36519, 36524, 
-    36528, 36532, 36537, 10245, 36541, 36545, 36549, 36553, 15379, 36558, 
-    36562, 36567, 36572, 36577, 36581, 36588, 26118, 36594, 36597, 36601, 
-    36606, 36612, 36616, 36624, 36630, 36635, 36639, 36645, 36649, 36653, 
-    3462, 3467, 29241, 36656, 36660, 36664, 36668, 36676, 36683, 36687, 
-    36694, 36699, 317, 36704, 36708, 36714, 36726, 36732, 36738, 36742, 
-    36748, 36757, 36761, 36765, 36770, 36776, 36781, 36785, 36790, 36794, 
-    36798, 36805, 36811, 36816, 36831, 36846, 36861, 36877, 36895, 10195, 
-    36909, 36916, 36920, 36923, 36932, 36937, 36941, 36949, 33901, 36957, 
-    36961, 36971, 36982, 29211, 36995, 36999, 37008, 37016, 9785, 14907, 
-    37020, 22441, 37023, 30159, 37028, 9784, 37033, 37039, 37044, 37050, 
-    37055, 37061, 37066, 37072, 37077, 37083, 37089, 37095, 37100, 37056, 
-    37062, 37067, 37073, 37078, 37084, 37090, 8126, 3874, 37104, 37112, 
-    37116, 37119, 37123, 37128, 37133, 37139, 37145, 37150, 37154, 25966, 
-    37158, 37162, 37168, 37172, 9049, 37181, 37188, 37192, 11875, 37199, 
-    37205, 37210, 37217, 37224, 37231, 28557, 8049, 37238, 37245, 37252, 
-    37258, 37263, 37270, 37281, 37287, 37292, 37297, 37302, 37309, 37057, 
-    37313, 37323, 37334, 37340, 37345, 37350, 37355, 37360, 37365, 37369, 
-    37373, 37379, 37387, 2319, 865, 10261, 10273, 10278, 10284, 37396, 10289, 
-    10294, 10300, 37401, 37411, 37415, 10305, 37420, 16897, 37423, 37428, 
-    37432, 37437, 37442, 37449, 37456, 37460, 37463, 37471, 10208, 37478, 
-    37481, 37487, 37497, 5929, 37506, 37510, 37518, 37522, 37532, 37538, 
-    37549, 37555, 37561, 37566, 37572, 37578, 37584, 37589, 37592, 37599, 
-    37605, 37610, 37617, 37624, 37628, 37638, 37651, 37660, 37669, 37680, 
-    37693, 37704, 37713, 37724, 37729, 37738, 37743, 10310, 37749, 37756, 
-    37764, 37769, 37773, 37780, 37787, 3829, 16, 37791, 37796, 16751, 37800, 
-    37803, 37806, 28063, 37810, 28566, 37818, 37822, 37826, 37829, 37835, 
-    37079, 37841, 37849, 37855, 37862, 28046, 37866, 28240, 37870, 37879, 
-    37885, 37891, 37896, 37900, 37906, 37910, 37918, 37926, 26184, 37932, 
-    37939, 37945, 37950, 37955, 37959, 37965, 37970, 37976, 4056, 791, 37983, 
-    37987, 37990, 15269, 38002, 35833, 38013, 38016, 38023, 38027, 38033, 
-    38037, 38043, 38048, 38054, 38059, 38064, 38068, 38072, 38077, 38082, 
-    38092, 38098, 38111, 38117, 38123, 38130, 38135, 38141, 38146, 16637, 
-    1472, 1019, 31200, 31206, 38151, 31212, 31225, 31231, 31237, 38157, 
-    31243, 31249, 38163, 38169, 22, 38177, 38184, 38188, 38192, 38200, 31960, 
-    38204, 38208, 38215, 38220, 38224, 38229, 38235, 38240, 38246, 38251, 
-    38255, 38259, 38263, 38268, 38272, 38277, 38281, 38288, 38293, 38297, 
-    38302, 38306, 38311, 38315, 38320, 38326, 15489, 15494, 38331, 38335, 
-    38338, 38342, 21177, 38347, 38351, 38357, 38364, 38369, 38379, 38384, 
-    38392, 38396, 38399, 31975, 38403, 4109, 38408, 38413, 38417, 38422, 
-    38426, 38431, 13375, 38442, 38446, 38449, 38454, 38458, 38462, 38465, 
-    38469, 8145, 13391, 38472, 38475, 38481, 38486, 38492, 38497, 38503, 
-    38508, 38514, 38519, 38525, 38531, 38537, 38542, 38546, 38550, 38559, 
-    38575, 38591, 38601, 27953, 38608, 38612, 38617, 38622, 38626, 38630, 
-    35954, 38636, 38641, 38645, 38652, 38657, 38661, 38665, 26986, 38671, 
-    21445, 38676, 38683, 38691, 38697, 38704, 38712, 38718, 38722, 38728, 
-    38736, 38740, 38749, 9509, 38757, 38761, 38769, 38776, 38781, 38786, 
-    38790, 38793, 38797, 38800, 38804, 38811, 38816, 38822, 26405, 31263, 
-    38826, 38833, 38839, 38845, 38850, 38853, 38855, 38862, 38869, 38875, 
-    38879, 38882, 38886, 38890, 38894, 38899, 38903, 38907, 38910, 38914, 
-    38928, 23052, 38947, 38960, 38973, 38986, 23070, 39001, 10497, 39016, 
-    39022, 39026, 39030, 39037, 39042, 39046, 39053, 39059, 39064, 39070, 
-    39080, 39092, 39103, 39108, 39115, 39119, 39123, 39126, 15885, 3677, 
-    39134, 15516, 39147, 39154, 39158, 39162, 39167, 39172, 39178, 39182, 
-    39186, 39189, 7742, 15527, 39194, 39198, 39204, 39213, 39218, 39225, 
-    35810, 39231, 39236, 39240, 39245, 39252, 39256, 39259, 39263, 39268, 
-    14559, 39275, 39282, 1072, 39286, 39291, 39296, 39302, 39307, 39312, 
-    39316, 39326, 39331, 39337, 39342, 39348, 39353, 39359, 39369, 39374, 
-    39379, 39383, 7229, 7241, 39388, 39391, 39398, 39404, 34066, 34073, 
-    39413, 39417, 32023, 39425, 39436, 39444, 36002, 39451, 39456, 39461, 
-    39472, 39479, 39490, 32047, 21451, 39498, 735, 39503, 39509, 28037, 
-    39515, 39520, 39530, 39539, 39546, 39552, 39556, 39559, 39566, 39572, 
-    39579, 39585, 39595, 39603, 39609, 39615, 39620, 39624, 39631, 39637, 
-    39644, 38895, 535, 13812, 39650, 39655, 39658, 39664, 39672, 1396, 39677, 
-    39681, 39686, 39693, 39699, 39703, 39707, 39712, 39721, 39728, 39738, 
-    39744, 28081, 39761, 39770, 39778, 39784, 39789, 39796, 39802, 39810, 
-    39819, 39827, 39831, 39836, 39844, 32056, 39850, 39869, 15818, 39883, 
-    39899, 39913, 39919, 39924, 39929, 39934, 39940, 32062, 39945, 39952, 
-    39957, 39961, 345, 2936, 39968, 39973, 39978, 27312, 39799, 39982, 39987, 
-    39995, 39999, 40002, 40008, 40014, 40018, 28136, 40021, 40026, 40030, 
-    40033, 40038, 40042, 40047, 40052, 40056, 40061, 40065, 40069, 21173, 
-    21184, 40073, 40078, 40084, 26943, 40089, 40093, 21260, 16066, 40096, 
-    40101, 40106, 40111, 40116, 40121, 40126, 40131, 447, 43, 31281, 31286, 
-    31291, 31297, 31302, 31307, 40136, 31311, 40140, 40144, 40148, 31316, 
-    31322, 40162, 31333, 31338, 40170, 40175, 31344, 40180, 40185, 40190, 
-    40195, 40201, 40207, 40213, 31361, 40226, 40232, 31365, 40236, 31370, 
-    40241, 31375, 31380, 40244, 40249, 40253, 30930, 40259, 13599, 40266, 
-    40271, 31385, 40275, 40280, 40285, 40290, 40294, 40299, 40304, 40310, 
-    40315, 40320, 40326, 40332, 40337, 40341, 40346, 40351, 40356, 40360, 
-    40365, 40370, 40375, 40381, 40387, 40393, 40398, 40402, 40407, 40411, 
-    31389, 31394, 31399, 40415, 40419, 40423, 31404, 31410, 31416, 31428, 
-    40435, 26003, 40439, 40443, 40448, 40453, 40458, 40463, 40467, 40471, 
-    40481, 40486, 40491, 40495, 40499, 40502, 40510, 31476, 40515, 1479, 
-    40521, 40529, 40538, 40542, 40546, 40554, 40560, 40568, 40584, 40588, 
-    40592, 40597, 40612, 31513, 1749, 12055, 40616, 1378, 40628, 40629, 
-    40637, 40644, 40649, 40656, 40661, 9379, 1114, 10332, 40668, 40673, 
-    40676, 40679, 40688, 1286, 40693, 39043, 40700, 40705, 22493, 2557, 
-    40709, 10741, 40719, 40725, 2337, 2347, 40734, 40743, 40753, 40764, 3293, 
-    34219, 10384, 3807, 16675, 1291, 40769, 40777, 40784, 40789, 40793, 
-    40797, 23865, 10411, 40805, 40814, 40823, 40831, 40838, 40849, 40854, 
-    40867, 40880, 40892, 40904, 40916, 40929, 40940, 40951, 40961, 40969, 
-    40977, 40989, 41001, 41012, 41021, 41029, 41036, 41048, 41055, 41064, 
-    41071, 41084, 41089, 41099, 41104, 41110, 41115, 37189, 41119, 41126, 
-    41130, 41137, 41145, 2518, 41152, 41163, 41173, 41182, 41190, 41200, 
-    41208, 41218, 41227, 41232, 41238, 41244, 3709, 41255, 41265, 41274, 
-    41283, 41293, 41301, 41310, 41315, 41320, 41325, 1705, 37, 41333, 41341, 
-    41352, 41363, 16350, 41373, 41377, 41384, 41390, 41395, 41399, 41410, 
-    41420, 41429, 41440, 16724, 16729, 41445, 41454, 41459, 41469, 41474, 
-    41482, 41490, 41497, 41503, 7078, 228, 41507, 41513, 41518, 41521, 2117, 
-    39159, 41529, 41533, 41536, 1512, 41542, 13974, 1296, 41547, 41560, 
-    41574, 2643, 41592, 41604, 41616, 2657, 2674, 41630, 41643, 2689, 41657, 
-    41669, 2704, 41683, 1302, 1308, 1314, 10659, 41688, 41693, 41698, 41702, 
-    41717, 41732, 41747, 41762, 41777, 41792, 41807, 41822, 41837, 41852, 
-    41867, 41882, 41897, 41912, 41927, 41942, 41957, 41972, 41987, 42002, 
-    42017, 42032, 42047, 42062, 42077, 42092, 42107, 42122, 42137, 42152, 
-    42167, 42182, 42197, 42212, 42227, 42242, 42257, 42272, 42287, 42302, 
-    42317, 42332, 42347, 42362, 42377, 42392, 42407, 42422, 42437, 42452, 
-    42467, 42482, 42497, 42512, 42527, 42542, 42557, 42572, 42587, 42602, 
-    42617, 42632, 42647, 42662, 42677, 42692, 42707, 42722, 42737, 42752, 
-    42767, 42782, 42797, 42812, 42827, 42842, 42857, 42872, 42887, 42902, 
-    42917, 42932, 42947, 42962, 42977, 42992, 43007, 43022, 43037, 43052, 
-    43067, 43082, 43097, 43112, 43127, 43142, 43157, 43172, 43187, 43202, 
-    43217, 43232, 43247, 43262, 43277, 43292, 43307, 43322, 43337, 43352, 
-    43367, 43382, 43397, 43412, 43427, 43442, 43457, 43472, 43487, 43502, 
-    43517, 43532, 43547, 43562, 43577, 43592, 43607, 43622, 43637, 43652, 
-    43667, 43682, 43697, 43712, 43727, 43742, 43757, 43772, 43787, 43802, 
-    43817, 43832, 43847, 43862, 43877, 43892, 43907, 43922, 43937, 43952, 
-    43967, 43982, 43997, 44012, 44027, 44042, 44057, 44072, 44087, 44102, 
-    44117, 44132, 44147, 44162, 44177, 44192, 44207, 44222, 44237, 44252, 
-    44267, 44282, 44297, 44312, 44327, 44342, 44357, 44372, 44387, 44402, 
-    44417, 44432, 44447, 44462, 44477, 44492, 44507, 44522, 44537, 44552, 
-    44567, 44582, 44597, 44612, 44627, 44642, 44657, 44672, 44687, 44702, 
-    44717, 44732, 44747, 44762, 44777, 44792, 44807, 44822, 44837, 44852, 
-    44867, 44882, 44897, 44912, 44927, 44942, 44957, 44972, 44987, 45002, 
-    45017, 45032, 45047, 45062, 45077, 45092, 45107, 45122, 45137, 45152, 
-    45167, 45182, 45197, 45212, 45227, 45242, 45257, 45272, 45287, 45302, 
-    45317, 45332, 45347, 45362, 45377, 45392, 45407, 45422, 45437, 45452, 
-    45467, 45482, 45497, 45512, 45527, 45542, 45557, 45572, 45587, 45602, 
-    45617, 45632, 45647, 45662, 45677, 45692, 45707, 45722, 45737, 45752, 
-    45767, 45782, 45797, 45812, 45827, 45842, 45857, 45872, 45887, 45902, 
-    45917, 45932, 45947, 45962, 45977, 45992, 46007, 46022, 46037, 46052, 
-    46067, 46082, 46097, 46112, 46127, 46142, 46157, 46172, 46187, 46202, 
-    46217, 46232, 46247, 46262, 46277, 46292, 46307, 46322, 46337, 46352, 
-    46367, 46382, 46397, 46412, 46427, 46442, 46457, 46472, 46487, 46502, 
-    46517, 46532, 46547, 46562, 46577, 46592, 46607, 46622, 46637, 46652, 
-    46667, 46682, 46697, 46712, 46727, 46742, 46757, 46772, 46787, 46802, 
-    46817, 46832, 46847, 46862, 46877, 46892, 46907, 46922, 46937, 46952, 
-    46967, 46982, 46997, 47012, 47027, 47042, 47057, 47072, 47087, 47102, 
-    47117, 47132, 47147, 47162, 47177, 47192, 47207, 47222, 47237, 47252, 
-    47267, 47282, 47297, 47312, 47327, 47342, 47357, 47372, 47387, 47402, 
-    47417, 47432, 47447, 47462, 47477, 47492, 47507, 47522, 47537, 47552, 
-    47567, 47582, 47597, 47612, 47627, 47642, 47657, 47672, 47687, 47702, 
-    47717, 47732, 47747, 47762, 47777, 47792, 47807, 47822, 47837, 47852, 
-    47867, 47882, 47897, 47912, 47927, 47942, 47957, 47972, 47987, 48002, 
-    48017, 48032, 48047, 48062, 48077, 48092, 48107, 48122, 48137, 48152, 
-    48167, 48182, 48197, 48212, 48227, 48242, 48257, 48272, 48287, 48302, 
-    48317, 48332, 48347, 48362, 48377, 48392, 48407, 48422, 48437, 48452, 
-    48467, 48482, 48497, 48512, 48527, 48542, 48557, 48572, 48587, 48602, 
-    48617, 48632, 48647, 48662, 48677, 48692, 48707, 48722, 48737, 48752, 
-    48767, 48782, 48797, 48812, 48827, 48842, 48857, 48872, 48887, 48902, 
-    48917, 48932, 48947, 48962, 48977, 48992, 49007, 49022, 49037, 49052, 
-    49067, 49082, 49097, 49112, 49127, 49142, 49157, 49172, 49187, 49202, 
-    49217, 49232, 49247, 49262, 49277, 49292, 49307, 49322, 49337, 49352, 
-    49367, 49382, 49397, 49412, 49427, 49442, 49457, 49472, 49487, 49502, 
-    49518, 49534, 49550, 49566, 49582, 49598, 49614, 49630, 49646, 49662, 
-    49678, 49694, 49710, 49726, 49742, 49758, 49774, 49790, 49806, 49822, 
-    49838, 49854, 49870, 49886, 49902, 49918, 49934, 49950, 49966, 49982, 
-    49998, 50014, 50030, 50046, 50062, 50078, 50094, 50110, 50126, 50142, 
-    50158, 50174, 50190, 50206, 50222, 50238, 50254, 50270, 50286, 50302, 
-    50318, 50334, 50350, 50366, 50382, 50398, 50414, 50430, 50446, 50462, 
-    50478, 50494, 50510, 50526, 50542, 50558, 50574, 50590, 50606, 50622, 
-    50638, 50654, 50670, 50686, 50702, 50718, 50734, 50750, 50766, 50782, 
-    50798, 50814, 50830, 50846, 50862, 50878, 50894, 50910, 50926, 50942, 
-    50958, 50974, 50990, 51006, 51022, 51038, 51054, 51070, 51086, 51102, 
-    51118, 51134, 51150, 51166, 51182, 51198, 51214, 51230, 51246, 51262, 
-    51278, 51294, 51310, 51326, 51342, 51358, 51374, 51390, 51406, 51422, 
-    51438, 51454, 51470, 51486, 51502, 51518, 51534, 51550, 51566, 51582, 
-    51598, 51614, 51630, 51646, 51662, 51678, 51694, 51710, 51726, 51742, 
-    51758, 51774, 51790, 51806, 51822, 51838, 51854, 51870, 51886, 51902, 
-    51918, 51934, 51950, 51966, 51982, 51998, 52014, 52030, 52046, 52062, 
-    52078, 52094, 52110, 52126, 52142, 52158, 52174, 52190, 52206, 52222, 
-    52238, 52254, 52270, 52286, 52302, 52318, 52334, 52350, 52366, 52382, 
-    52398, 52414, 52430, 52446, 52462, 52478, 52494, 52510, 52526, 52542, 
-    52558, 52574, 52590, 52606, 52622, 52638, 52654, 52670, 52686, 52702, 
-    52718, 52734, 52750, 52766, 52782, 52798, 52814, 52830, 52846, 52862, 
-    52878, 52894, 52910, 52926, 52942, 52958, 52974, 52990, 53006, 53022, 
-    53038, 53054, 53070, 53086, 53102, 53118, 53134, 53150, 53166, 53182, 
-    53198, 53214, 53230, 53246, 53262, 53278, 53294, 53310, 53326, 53342, 
-    53358, 53374, 53390, 53406, 53422, 53438, 53454, 53470, 53486, 53502, 
-    53518, 53534, 53550, 53566, 53582, 53598, 53614, 53630, 53646, 53662, 
-    53678, 53694, 53710, 53726, 53742, 53758, 53774, 53790, 53806, 53822, 
-    53838, 53854, 53870, 53886, 53902, 53918, 53934, 53950, 53966, 53982, 
-    53998, 54014, 54030, 54046, 54062, 54078, 54094, 54110, 54126, 54142, 
-    54158, 54174, 54190, 54206, 54222, 54238, 54254, 54270, 54286, 54302, 
-    54318, 54334, 54350, 54366, 54382, 54398, 54414, 54430, 54446, 54462, 
-    54478, 54494, 54510, 54526, 54542, 54558, 54574, 54590, 54606, 54622, 
-    54638, 54654, 54670, 54686, 54702, 54718, 54734, 54750, 54766, 54782, 
-    54798, 54814, 54830, 54846, 54862, 54878, 54894, 54910, 54926, 54942, 
-    54958, 54974, 54990, 55006, 55022, 55038, 55054, 55070, 55086, 55102, 
-    55118, 55134, 55150, 55166, 55182, 55198, 55214, 55230, 55246, 55262, 
-    55278, 55294, 55310, 55326, 55342, 55358, 55374, 55390, 55406, 55422, 
-    55438, 55454, 55470, 55486, 55502, 55518, 55534, 55550, 55566, 55582, 
-    55598, 55614, 55630, 55646, 55662, 55678, 55694, 55710, 55726, 55742, 
-    55758, 55774, 55790, 55806, 55822, 55838, 55854, 55870, 55886, 55902, 
-    55918, 55934, 55950, 55966, 55982, 55998, 56014, 56030, 56046, 56062, 
-    56078, 56094, 56110, 56126, 56142, 56158, 56174, 56190, 56206, 56222, 
-    56238, 56254, 56270, 56286, 56302, 56318, 56334, 56350, 56366, 56382, 
-    56398, 56414, 56430, 56446, 56462, 56478, 56494, 56510, 56526, 56542, 
-    56558, 56574, 56590, 56606, 56622, 56638, 56654, 56670, 56686, 56702, 
-    56718, 56734, 56750, 56766, 56782, 56798, 56814, 56830, 56846, 56862, 
-    56878, 56894, 56910, 56926, 56942, 56958, 56974, 56990, 57006, 57022, 
-    57038, 57054, 57070, 57086, 57102, 57118, 57134, 57150, 57166, 57182, 
-    57198, 57214, 57230, 57246, 57262, 57278, 57294, 57310, 57326, 57342, 
-    57358, 57374, 57390, 57406, 57422, 57438, 57454, 57470, 57486, 57502, 
-    57518, 57534, 57550, 57566, 57582, 57598, 57614, 57630, 57646, 57662, 
-    57678, 57694, 57710, 57726, 57742, 57758, 57774, 57790, 57806, 57822, 
-    57838, 57854, 57870, 57886, 57902, 57918, 57934, 57950, 57966, 57982, 
-    57998, 58014, 58030, 58046, 58062, 58078, 58094, 58110, 58126, 58142, 
-    58158, 58174, 58189, 16756, 58198, 58204, 58210, 58220, 58228, 14888, 
-    15439, 9960, 58241, 1520, 58249, 3761, 27422, 7183, 58255, 58260, 58265, 
-    58270, 58275, 58281, 58286, 58292, 58297, 58303, 58308, 58313, 58318, 
-    58323, 58329, 58334, 58339, 58344, 58349, 58354, 58359, 58364, 58370, 
-    58375, 58381, 58388, 2561, 58393, 58399, 8526, 58403, 58408, 58415, 
-    58423, 40, 58427, 58433, 58438, 58443, 58447, 58452, 58456, 58460, 10684, 
-    58464, 58474, 58487, 58498, 58511, 58518, 58524, 58529, 58535, 58541, 
-    58547, 58552, 58557, 58562, 58567, 58571, 58576, 58581, 58586, 58592, 
-    58598, 58604, 58609, 58613, 58618, 58623, 58627, 58632, 58637, 58642, 
-    58646, 10700, 10711, 10716, 1563, 58650, 1568, 58656, 16233, 58659, 
-    58665, 1599, 58671, 1605, 1611, 10746, 58676, 58684, 58691, 58695, 58701, 
-    58706, 30959, 58711, 58718, 58723, 58727, 58731, 1616, 16325, 58740, 
-    58744, 16336, 1120, 58748, 58755, 58760, 58764, 16361, 1620, 37328, 
-    58767, 58772, 58782, 58791, 58796, 58800, 58806, 1625, 39237, 58811, 
-    58820, 58826, 58831, 10904, 10910, 58837, 58849, 58866, 58883, 58900, 
-    58917, 58934, 58951, 58968, 58985, 59002, 59019, 59036, 59053, 59070, 
-    59087, 59104, 59121, 59138, 59155, 59172, 59189, 59206, 59223, 59240, 
-    59257, 59274, 59291, 59308, 59325, 59342, 59359, 59376, 59393, 59410, 
-    59427, 59444, 59461, 59478, 59495, 59512, 59529, 59546, 59563, 59580, 
-    59597, 59614, 59631, 59648, 59665, 59682, 59693, 59698, 1630, 59702, 
-    59708, 59713, 59718, 9326, 1635, 59724, 59733, 27717, 59738, 59749, 
-    59759, 59764, 59771, 59777, 59782, 59787, 16613, 59791, 10921, 1640, 
-    10926, 59797, 59802, 59808, 59813, 59818, 59823, 59828, 59833, 59838, 
-    59843, 59849, 59855, 59861, 59866, 59870, 59875, 59880, 59884, 59889, 
-    59894, 59899, 59903, 59908, 59914, 59919, 59924, 59928, 59933, 59938, 
-    59944, 59949, 59954, 59960, 59966, 59971, 59975, 59980, 59985, 59990, 
-    59994, 59999, 60004, 60009, 60015, 60021, 60026, 60030, 60034, 60039, 
-    60044, 60049, 29115, 60053, 60058, 60063, 60069, 60074, 60079, 60083, 
-    60088, 60093, 60099, 60104, 60109, 60115, 60121, 60126, 60130, 60135, 
-    60140, 60144, 60149, 60154, 60159, 60165, 60171, 60176, 60180, 60185, 
-    60190, 60194, 60199, 60204, 60209, 60213, 60216, 31621, 60221, 60229, 
-    16679, 3663, 11017, 60235, 60245, 60260, 11022, 60271, 60276, 60287, 
-    60299, 60311, 60323, 2695, 60335, 60340, 60352, 60356, 60362, 60368, 
-    60373, 1652, 1073, 60382, 60387, 39287, 60391, 60395, 60400, 60404, 
-    16764, 60409, 60412, 60420, 60428, 1656, 11047, 11053, 1661, 60436, 
-    60443, 60448, 60457, 60467, 60474, 60479, 60484, 1666, 60491, 60496, 
-    16879, 60500, 60505, 60512, 60518, 60522, 60533, 60543, 16901, 9234, 
-    9241, 1671, 60550, 60556, 60564, 60571, 60577, 60584, 60596, 60602, 
-    60607, 60619, 60630, 60639, 60649, 3740, 30795, 30804, 16941, 1676, 1680, 
-    60657, 60668, 60673, 1683, 60681, 60686, 16992, 60698, 60704, 60709, 
-    60717, 1688, 60722, 60727, 60735, 60743, 60750, 60759, 60767, 60776, 
-    1693, 60780, 1698, 60785, 60792, 17066, 60800, 60806, 60811, 60819, 
-    60826, 60834, 22564, 60839, 11182, 60848, 60854, 60861, 60868, 60874, 
-    60884, 60890, 60895, 60906, 60911, 60919, 11191, 11196, 60927, 60933, 
-    60941, 3805, 17108, 39375, 60946, 60952, 60957, 60965, 60972, 12036, 
-    60977, 60983, 1709, 60988, 60991, 1127, 60997, 61002, 61007, 61013, 
-    61018, 61023, 61028, 61033, 61038, 61043, 1718, 9, 61049, 61053, 61058, 
-    61062, 61066, 61070, 31861, 61075, 61080, 61085, 61089, 61092, 61096, 
-    61100, 61105, 61109, 61114, 61118, 34598, 34603, 34608, 61121, 61128, 
-    61134, 39096, 61144, 34614, 32119, 31876, 31882, 34630, 31888, 61149, 
-    61154, 32152, 61158, 61161, 61165, 61172, 61175, 61180, 61184, 61188, 
-    61191, 61201, 61213, 61220, 61226, 61233, 33555, 61236, 8543, 877, 61239, 
-    61243, 61248, 3690, 61252, 61255, 13632, 61262, 61269, 61282, 61290, 
-    61299, 61308, 61313, 61323, 61336, 61348, 61355, 61360, 61369, 61382, 
-    36042, 61400, 61405, 61412, 61418, 652, 61423, 61431, 61438, 27261, 627, 
-    61444, 61450, 61460, 61466, 61471, 31906, 6003, 31920, 61475, 61485, 
-    61490, 61500, 61515, 61521, 61527, 31930, 61532, 31076, 61536, 61541, 
-    61546, 61550, 61555, 16944, 61562, 61567, 61571, 6044, 31956, 61575, 
-    61581, 312, 61591, 61598, 61605, 61610, 61619, 58776, 61625, 61633, 
-    61637, 61641, 61645, 61649, 61654, 61658, 61664, 61672, 61677, 61682, 
-    61686, 61691, 61695, 61699, 61705, 61711, 61716, 61720, 32080, 61725, 
-    32086, 32092, 61730, 61736, 61743, 61748, 61752, 31093, 16606, 61755, 
-    61759, 61764, 61771, 61777, 61781, 61786, 38806, 61792, 61796, 61800, 
-    61805, 61811, 61817, 61829, 61838, 61848, 61854, 61861, 61866, 61871, 
-    61875, 61878, 61884, 61891, 61896, 61901, 61908, 61915, 61921, 61926, 
-    61931, 61939, 32097, 2423, 61944, 61949, 61955, 61960, 61966, 61971, 
-    61976, 61981, 61987, 32118, 61992, 61998, 62004, 62010, 32182, 62015, 
-    62020, 62025, 32193, 62030, 62035, 62040, 62046, 62052, 32198, 62057, 
-    62062, 62067, 32253, 32259, 62072, 62077, 32264, 62082, 27944, 32286, 
-    32290, 62087, 62063, 62091, 62099, 62105, 62113, 62120, 62126, 62136, 
-    62142, 62149, 10631, 32304, 62155, 62168, 62177, 62183, 62192, 62198, 
-    23502, 62205, 62212, 62222, 32254, 62225, 62232, 62237, 62241, 62245, 
-    62250, 6120, 62254, 62259, 62264, 34692, 34697, 62268, 34711, 62273, 
-    34716, 62278, 62284, 34728, 34734, 34740, 62289, 62295, 22529, 62306, 
-    62309, 62321, 62329, 32327, 62333, 62342, 62352, 62361, 32337, 62366, 
-    62373, 62382, 62388, 62396, 62403, 6095, 4397, 62408, 32265, 62414, 
-    62417, 62423, 62430, 62435, 62440, 23412, 62444, 62450, 62456, 62461, 
-    62466, 62470, 62476, 62482, 33465, 863, 35705, 36626, 36632, 32373, 
-    62487, 62491, 62495, 62498, 62511, 62517, 62521, 62524, 62529, 33768, 
-    62533, 31098, 21281, 62539, 6024, 6032, 9075, 62542, 62547, 62552, 62557, 
-    62562, 62567, 62572, 62577, 62582, 62587, 62593, 62598, 62603, 62609, 
-    62614, 62619, 62624, 62629, 62634, 62639, 62645, 62650, 62656, 62661, 
-    62666, 62671, 62676, 62681, 62686, 62691, 62696, 62701, 62706, 62712, 
-    62717, 62722, 62727, 62732, 62737, 62742, 62748, 62753, 62758, 62763, 
-    62768, 62773, 62778, 62783, 62788, 62793, 62799, 62804, 62809, 62814, 
-    62819, 62825, 62831, 62836, 62842, 62847, 62852, 62857, 62862, 62867, 
-    1513, 245, 62872, 62876, 62880, 62884, 25123, 62888, 62892, 62897, 62901, 
-    62906, 62910, 62915, 62920, 62925, 62929, 62933, 62938, 62942, 13369, 
-    62947, 62951, 62958, 62968, 15200, 62977, 62986, 62990, 62995, 63000, 
-    63004, 24914, 3019, 63008, 17357, 63014, 63023, 63031, 63037, 63049, 
-    63061, 63065, 63070, 63074, 63080, 63086, 63091, 63101, 63111, 63117, 
-    63122, 63126, 63131, 63137, 63146, 63155, 63163, 15554, 63167, 63176, 
-    63184, 63196, 63207, 63218, 63227, 63231, 63240, 63250, 63258, 63264, 
-    63269, 63275, 63280, 98, 30907, 63291, 26256, 26266, 63297, 63304, 63310, 
-    63314, 63324, 63335, 63343, 63352, 63357, 63362, 63366, 17311, 63374, 
-    63378, 63384, 63394, 63401, 63407, 34791, 63413, 63415, 63418, 63422, 
-    63432, 63438, 63445, 13315, 63452, 63458, 63467, 63476, 63482, 63488, 
-    63494, 63499, 63506, 63513, 63519, 63532, 63541, 63550, 63555, 63559, 
-    63565, 63572, 63579, 63586, 63593, 63600, 63605, 63609, 63613, 63616, 
-    63626, 63630, 63642, 63651, 63655, 63660, 63664, 63670, 63675, 63682, 
-    63691, 63699, 63707, 63712, 63716, 63721, 63726, 63736, 63744, 63749, 
-    63753, 63757, 63763, 63775, 63783, 63793, 63800, 63806, 63811, 63815, 
-    63819, 63823, 63832, 63841, 63850, 63856, 63862, 63868, 63873, 63880, 
-    63886, 63894, 63901, 12463, 63907, 63913, 63917, 14238, 63921, 63926, 
-    63936, 63945, 63951, 63957, 63965, 63972, 63976, 63980, 63986, 63994, 
-    64001, 64007, 64018, 64022, 64026, 64030, 64033, 64039, 64044, 64048, 
-    64052, 64061, 64069, 64076, 64082, 64089, 24036, 38848, 64094, 64102, 
-    64106, 64110, 64113, 64121, 64128, 64134, 64143, 64151, 64157, 64162, 
-    64166, 64171, 64175, 64179, 64184, 64193, 64197, 64204, 64211, 64217, 
-    64225, 64231, 64242, 64250, 64256, 22659, 64265, 64272, 64279, 64286, 
-    64293, 64300, 41877, 13153, 64307, 64314, 64319, 34827, 6217, 64325, 
-    64330, 64335, 64341, 64347, 64353, 64358, 64363, 64368, 64373, 64379, 
-    64384, 64390, 64395, 64401, 64406, 64411, 64416, 64421, 64426, 64431, 
-    64436, 64442, 64447, 64453, 64458, 64463, 64468, 64473, 64478, 64483, 
-    64489, 64494, 64499, 64504, 64509, 64514, 64519, 64524, 64529, 64534, 
-    64539, 64545, 64550, 64555, 64560, 64565, 64570, 64575, 64580, 64585, 
-    64591, 64596, 64601, 64606, 64611, 64616, 64621, 64626, 64631, 64636, 
-    64641, 64646, 64651, 64657, 1834, 224, 37424, 64662, 64665, 64670, 64674, 
-    64677, 64682, 63703, 64693, 64703, 64710, 64726, 64735, 64745, 64755, 
-    64763, 64777, 64785, 64789, 64792, 64799, 64805, 64816, 64828, 64839, 
-    64848, 64855, 1297, 23301, 64865, 2590, 64869, 64878, 1133, 17284, 38061, 
-    64886, 64894, 64908, 64921, 64925, 64930, 64935, 64940, 64946, 64952, 
-    64957, 8535, 64962, 64966, 64974, 11048, 64979, 64985, 64994, 1721, 
-    11060, 736, 64998, 65007, 65017, 27020, 65026, 65032, 16856, 65038, 
-    65042, 3964, 11391, 65048, 65055, 60663, 65059, 65063, 3988, 189, 14153, 
-    65069, 65081, 65085, 65091, 27737, 65095, 11379, 2730, 4, 65100, 65110, 
-    65116, 65127, 65134, 65140, 65146, 65154, 65161, 65167, 65177, 65187, 
-    65197, 23489, 1309, 65206, 65210, 65214, 65220, 65224, 2753, 2759, 8532, 
-    2264, 65228, 65232, 65241, 65249, 65260, 65268, 65276, 65282, 65287, 
-    65298, 65309, 65317, 65323, 9694, 65328, 65336, 65340, 65344, 65348, 
-    65360, 28122, 65367, 65377, 65383, 65389, 9796, 65399, 65410, 65420, 
-    65429, 65433, 65440, 1135, 1170, 65450, 65455, 65463, 65471, 65482, 
-    65489, 65503, 14082, 393, 65513, 65517, 65525, 65534, 65542, 65548, 
-    65562, 65569, 65575, 65584, 65591, 65601, 65609, 3812, 156, 65617, 65628, 
-    65632, 65644, 27935, 161, 65650, 65655, 65659, 65666, 65672, 65680, 
-    65687, 8818, 65694, 65703, 65711, 3878, 65724, 8199, 65728, 2798, 450, 
-    65733, 65746, 65751, 1833, 668, 65755, 3895, 65763, 65769, 65773, 931, 
-    65783, 65792, 65797, 14922, 14929, 45239, 65801, 3822, 13041, 65809, 
-    65816, 23545, 65820, 65827, 65833, 65838, 65843, 14942, 372, 65848, 
-    65860, 65866, 65874, 2810, 1753, 65882, 65884, 65889, 65894, 65899, 
-    65905, 65910, 65915, 65920, 65925, 65930, 65935, 65941, 65946, 65951, 
-    65956, 65961, 65966, 65971, 65976, 65981, 65987, 65992, 65997, 66002, 
-    66008, 66013, 66019, 66024, 66029, 66034, 66039, 66044, 66049, 66054, 
-    66060, 66065, 66071, 66076, 66081, 66086, 66091, 66096, 66101, 66106, 
-    66111, 66117, 66122, 66127, 66132, 66136, 66140, 66145, 66149, 66154, 
-    66159, 66165, 66170, 66174, 66179, 66183, 66186, 66188, 66192, 66195, 
-    66200, 66204, 66208, 66212, 66216, 66225, 66229, 32531, 66232, 32536, 
-    66239, 66244, 32541, 66253, 66262, 32547, 66267, 32552, 66276, 66281, 
-    11578, 66285, 66290, 66295, 32557, 66299, 40203, 66303, 66306, 66310, 
-    8211, 66316, 66321, 66325, 3705, 32562, 66328, 66332, 66335, 66340, 
-    66344, 66350, 66358, 66371, 66380, 66386, 66391, 66397, 66401, 66407, 
-    66415, 66420, 66424, 66431, 66437, 66445, 66454, 66462, 32565, 66469, 
-    66479, 66488, 66501, 66506, 66511, 66520, 66526, 66533, 66544, 66556, 
-    66563, 66572, 66581, 66590, 66597, 66603, 66610, 66618, 66625, 66633, 
-    66642, 66650, 66657, 66665, 66674, 66682, 66691, 66701, 66710, 66718, 
-    66725, 66733, 66742, 66750, 66759, 66769, 66778, 66786, 66795, 66805, 
-    66814, 66824, 66835, 66845, 66854, 66862, 66869, 66877, 66886, 66894, 
-    66903, 66913, 66922, 66930, 66939, 66949, 66958, 66968, 66979, 66989, 
-    66998, 67006, 67015, 67025, 67034, 67044, 67055, 67065, 67074, 67084, 
-    67095, 67105, 67116, 67128, 67139, 67149, 67158, 67166, 67173, 67181, 
-    67190, 67198, 67207, 67217, 67226, 67234, 67243, 67253, 67262, 67272, 
-    67283, 67293, 67302, 67310, 67319, 67329, 67338, 67348, 67359, 67369, 
-    67378, 67388, 67399, 67409, 67420, 67432, 67443, 67453, 67462, 67470, 
-    67479, 67489, 67498, 67508, 67519, 67529, 67538, 67548, 67559, 67569, 
-    67580, 67592, 67603, 67613, 67622, 67632, 67643, 67653, 67664, 67676, 
-    67687, 67697, 67708, 67720, 67731, 67743, 67756, 67768, 67779, 67789, 
-    67798, 67806, 67813, 67821, 67830, 67838, 67847, 67857, 67866, 67874, 
-    67883, 67893, 67902, 67912, 67923, 67933, 67942, 67950, 67959, 67969, 
-    67978, 67988, 67999, 68009, 68018, 68028, 68039, 68049, 68060, 68072, 
-    68083, 68093, 68102, 68110, 68119, 68129, 68138, 68148, 68159, 68169, 
-    68178, 68188, 68199, 68209, 68220, 68232, 68243, 68253, 68262, 68272, 
-    68283, 68293, 68304, 68316, 68327, 68337, 68348, 68360, 68371, 68383, 
-    68396, 68408, 68419, 68429, 68438, 68446, 68455, 68465, 68474, 68484, 
-    68495, 68505, 68514, 68524, 68535, 68545, 68556, 68568, 68579, 68589, 
-    68598, 68608, 68619, 68629, 68640, 68652, 68663, 68673, 68684, 68696, 
-    68707, 68719, 68732, 68744, 68755, 68765, 68774, 68784, 68795, 68805, 
-    68816, 68828, 68839, 68849, 68860, 68872, 68883, 68895, 68908, 68920, 
-    68931, 68941, 68952, 68964, 68975, 68987, 69000, 69012, 69023, 69035, 
-    69048, 69060, 69073, 69087, 69100, 69112, 69123, 69133, 69142, 69150, 
-    69157, 69162, 8058, 69169, 32575, 69174, 69179, 32580, 69185, 20923, 
-    32585, 69190, 69196, 69204, 69210, 69216, 69223, 69230, 69235, 69239, 
-    69242, 69246, 69255, 69261, 69273, 69284, 69288, 3081, 8033, 69293, 
-    69296, 69298, 69302, 69306, 69310, 69316, 69321, 25934, 69326, 69330, 
-    69333, 69338, 69342, 69349, 69355, 69359, 6170, 69363, 32602, 69368, 
-    69375, 69384, 69392, 69403, 69411, 69419, 69426, 69433, 69439, 69450, 
-    32607, 69455, 69466, 69478, 69486, 69497, 69506, 69517, 69522, 69530, 
-    2556, 69535, 34277, 69548, 69552, 69564, 69572, 69577, 69585, 17479, 
-    69596, 69602, 69609, 69617, 69623, 32617, 69628, 3914, 58224, 69635, 
-    69638, 69646, 69659, 69672, 69685, 69698, 69705, 69716, 69725, 41694, 
-    41699, 69730, 69734, 69742, 69749, 69758, 69766, 69772, 69781, 69789, 
-    69797, 69801, 69810, 69819, 69829, 69842, 69855, 69865, 32622, 69871, 
-    69878, 69884, 32628, 69889, 69892, 69896, 69904, 69913, 41432, 69921, 
-    69930, 69938, 69945, 69953, 69963, 69972, 69981, 69990, 69998, 70009, 
-    70019, 9366, 21561, 70028, 70033, 70038, 70042, 70046, 70051, 70057, 
-    70062, 70067, 70073, 70078, 70083, 21526, 70088, 70095, 70103, 70111, 
-    70116, 70123, 70130, 70135, 70139, 70143, 70151, 70159, 32645, 70165, 
-    70171, 70183, 70189, 70193, 70200, 70205, 70216, 70226, 70236, 70248, 
-    70254, 70264, 70274, 32672, 70283, 70292, 70298, 70310, 70321, 70328, 
-    70333, 70337, 70345, 70351, 70356, 70361, 70368, 70376, 70388, 70398, 
-    70407, 70416, 70423, 34139, 23841, 70429, 70434, 70438, 70442, 70447, 
-    70453, 70464, 70477, 70482, 70489, 32677, 70494, 70506, 70515, 70525, 
-    70536, 70549, 70556, 70565, 70574, 70582, 70587, 70593, 1064, 70598, 
-    70603, 70608, 70613, 70619, 70624, 70629, 70635, 70641, 70646, 70650, 
-    70655, 70660, 70665, 58736, 70670, 70675, 70680, 70685, 70691, 70697, 
-    70702, 70706, 70711, 70716, 70721, 70727, 70732, 70738, 70743, 70748, 
-    70753, 70758, 70762, 70768, 70773, 70782, 70787, 70792, 70797, 70802, 
-    70806, 70813, 70819, 17129, 17136, 70824, 70828, 70832, 70836, 70840, 
-    45494, 70844, 70774, 70846, 70856, 32686, 70859, 70868, 70874, 6143, 
-    32691, 70878, 70884, 70889, 70895, 70900, 70904, 70911, 70916, 70926, 
-    70935, 70939, 70945, 70951, 70957, 70961, 70969, 70976, 70984, 70992, 
-    32696, 70999, 71002, 71009, 71015, 71020, 71024, 71030, 71037, 71042, 
-    71046, 71055, 71063, 71069, 71074, 32701, 71081, 71088, 71094, 71099, 
-    71105, 71112, 71118, 21288, 27445, 71124, 71129, 71135, 71147, 70807, 
-    70814, 21464, 71157, 71162, 71169, 71175, 71182, 71188, 71199, 71204, 
-    9110, 71212, 71215, 71221, 71225, 71229, 71232, 71238, 32450, 6194, 964, 
-    13419, 71245, 71251, 71257, 71263, 71269, 71275, 71281, 71287, 71293, 
-    71298, 71303, 71308, 71313, 71318, 71323, 71328, 71333, 71338, 71343, 
-    71348, 71353, 71358, 71364, 71369, 71374, 71380, 71385, 71390, 71396, 
-    71402, 71408, 71414, 71420, 71426, 71432, 71438, 71444, 71449, 71454, 
-    71460, 71465, 71470, 71476, 71481, 71486, 71491, 71496, 71501, 71506, 
-    71511, 71516, 71521, 71526, 71531, 71536, 71542, 71547, 71552, 71557, 
-    71563, 71568, 71573, 71578, 71583, 71589, 71594, 71599, 71604, 71609, 
-    71614, 71619, 71624, 71629, 71634, 71639, 71644, 71649, 71654, 71659, 
-    71664, 71669, 71674, 71679, 71684, 71690, 71695, 71700, 71705, 71710, 
-    71715, 71720, 71725, 1864, 142, 71730, 71734, 71738, 71743, 71751, 71755, 
-    71762, 71770, 71774, 71787, 71795, 71799, 71802, 71807, 71811, 71816, 
-    71820, 71828, 71832, 20931, 71837, 71841, 60937, 71845, 71848, 71856, 
-    71864, 71872, 71877, 71884, 71890, 71896, 71901, 71908, 71913, 71921, 
-    64913, 71928, 71933, 71938, 71942, 11645, 71946, 71951, 71956, 71960, 
-    71963, 71969, 71973, 71983, 71992, 71995, 71999, 72006, 72019, 72025, 
-    72033, 72044, 72055, 72066, 72077, 72086, 72092, 72101, 72109, 72119, 
-    72132, 72139, 72150, 72156, 72161, 72166, 72172, 72178, 72188, 72197, 
-    70496, 72205, 72211, 72219, 72225, 72233, 72236, 72240, 72244, 72247, 
-    72253, 72259, 72267, 72279, 72291, 72298, 72302, 72313, 72321, 72328, 
-    72340, 72348, 72356, 72363, 72369, 72379, 72388, 72393, 72403, 72412, 
-    40758, 72419, 72423, 72428, 72436, 72443, 72449, 72453, 72463, 72474, 
-    72482, 72489, 72501, 72513, 72522, 69538, 72529, 72540, 72554, 72562, 
-    72572, 72579, 72587, 72599, 72608, 72616, 72626, 72637, 72649, 72658, 
-    72668, 72675, 72684, 72699, 72707, 72717, 72726, 72734, 72747, 72762, 
-    72766, 72775, 72787, 72798, 72809, 72820, 72830, 72841, 72849, 72855, 
-    72865, 72873, 72879, 29014, 72884, 72890, 72895, 72902, 9708, 17499, 
-    72908, 72917, 72922, 72926, 72933, 72939, 72944, 72949, 72957, 72965, 
-    72969, 72972, 72975, 72977, 72984, 72990, 73001, 73006, 73010, 73017, 
-    73023, 73028, 73036, 65412, 65422, 73042, 73049, 73059, 10618, 73066, 
-    73071, 29210, 73080, 73085, 73092, 73102, 73110, 73118, 73127, 73133, 
-    73139, 73146, 73153, 73158, 73162, 73170, 73175, 73180, 73188, 73195, 
-    73200, 73206, 73209, 73213, 73222, 71782, 73231, 73235, 73241, 73252, 
-    73262, 17508, 73273, 73281, 17520, 73288, 73292, 73301, 27331, 73308, 
-    73312, 73317, 73334, 73346, 10576, 73358, 73363, 73368, 73373, 21004, 
-    73377, 73382, 73387, 73393, 73398, 5846, 21008, 73403, 73408, 73414, 
-    73421, 73426, 73431, 73437, 73443, 73449, 73454, 73460, 73464, 73478, 
-    73486, 73494, 73500, 73505, 73512, 73522, 73531, 73536, 73541, 73549, 
-    73554, 73560, 73565, 73574, 59793, 73579, 73582, 73600, 73619, 73632, 
-    73646, 73662, 73669, 73676, 73682, 73689, 73694, 73700, 73706, 73714, 
-    73720, 73725, 73730, 73746, 10589, 73760, 73767, 73775, 73781, 73785, 
-    73788, 73793, 73798, 73805, 73810, 73819, 73824, 73830, 73839, 73848, 
-    73853, 73857, 73865, 73874, 11674, 73883, 73891, 73896, 73902, 11685, 
-    73907, 73910, 73915, 73925, 73934, 73939, 73945, 73950, 73958, 73965, 
-    73976, 73986, 73991, 64841, 73996, 74002, 74007, 74014, 74023, 74031, 
-    74037, 74043, 74050, 74056, 74060, 16954, 3055, 74065, 74069, 74073, 
-    74079, 74088, 74094, 74101, 74105, 74126, 74148, 74164, 74181, 74200, 
-    74209, 74219, 74226, 74233, 27218, 74239, 74243, 74251, 74263, 74269, 
-    74277, 74281, 74289, 74296, 74300, 74306, 74312, 74317, 3563, 41894, 
-    74323, 74327, 74331, 74335, 74340, 74345, 74350, 74356, 74362, 74368, 
-    74375, 74381, 74388, 74394, 74400, 74405, 74411, 74416, 74420, 74425, 
-    74429, 74434, 41909, 74438, 74443, 74451, 74455, 74460, 74467, 74476, 
-    74482, 74486, 74493, 74497, 74500, 74507, 74516, 74521, 74525, 74533, 
-    74542, 74546, 74554, 74560, 74565, 74570, 74576, 74582, 74587, 74591, 
-    74597, 74602, 74606, 74610, 74613, 74618, 74626, 74636, 74641, 39394, 
-    74649, 74661, 74665, 74671, 74683, 74694, 74701, 74707, 74714, 74726, 
-    74733, 74739, 21082, 74743, 74749, 74756, 74762, 74768, 74773, 74778, 
-    74783, 74792, 7033, 74797, 16420, 74803, 74807, 74811, 74815, 74823, 
-    74832, 74836, 74843, 74852, 74865, 74871, 74430, 30074, 74876, 74878, 
-    74883, 74888, 74893, 74898, 74903, 74908, 74913, 74918, 74923, 74928, 
-    74933, 74938, 74943, 74948, 74954, 74959, 74964, 74969, 74974, 74979, 
-    74984, 74989, 74994, 75000, 75006, 75012, 75017, 75022, 75034, 75039, 
-    1870, 49, 75044, 75049, 32728, 75053, 32733, 32738, 32744, 32749, 75057, 
-    32754, 22077, 75079, 75083, 75087, 75092, 75096, 32758, 75100, 75108, 
-    32763, 75115, 75118, 75123, 75127, 9543, 75136, 32768, 21939, 75139, 
-    75143, 1428, 75148, 32779, 75151, 75156, 25727, 25737, 35240, 75161, 
-    75166, 75171, 75176, 75182, 75187, 75196, 75201, 75208, 75214, 75219, 
-    75224, 75229, 75239, 75248, 75253, 75261, 75265, 75273, 32593, 37295, 
-    75280, 75286, 75291, 75296, 12016, 75301, 75307, 75312, 75319, 75325, 
-    75330, 75338, 75348, 75358, 75364, 75369, 75375, 17530, 75382, 36055, 
-    75395, 75400, 75406, 30975, 75419, 75425, 75429, 75438, 75445, 75451, 
-    75459, 75468, 75475, 75481, 75484, 75488, 25868, 75492, 75499, 75505, 
-    75513, 75518, 23984, 75524, 75527, 75535, 75543, 75557, 75564, 75570, 
-    75577, 75583, 32793, 75587, 75594, 75602, 75610, 75616, 32798, 75624, 
-    75630, 75635, 75645, 75651, 75660, 30812, 34698, 75668, 75673, 75678, 
-    75682, 75687, 75691, 75699, 14914, 39407, 75704, 75709, 32803, 62239, 
-    75713, 75718, 75722, 75731, 75739, 75745, 75750, 75756, 75763, 75769, 
-    75774, 75779, 75788, 75800, 75815, 33065, 75821, 16539, 32807, 75825, 
-    75832, 24094, 75838, 75845, 75854, 75861, 75870, 75876, 75881, 75889, 
-    75895, 32817, 75900, 75909, 74689, 75918, 75925, 75931, 75937, 75947, 
-    75955, 75962, 75966, 32822, 75969, 32828, 32834, 75974, 75982, 75990, 
-    76000, 76009, 76017, 76024, 76034, 32839, 76038, 76040, 76044, 76049, 
-    76053, 76057, 76063, 76068, 76072, 76083, 76088, 76093, 3060, 76097, 
-    76104, 76108, 76117, 76125, 76132, 76137, 76142, 62285, 76146, 76149, 
-    76155, 76163, 76169, 76173, 76178, 76185, 76190, 76196, 34729, 76201, 
-    76204, 76209, 76213, 76218, 76223, 76227, 76235, 76239, 25746, 25755, 
-    76245, 76251, 76257, 76262, 76266, 76269, 76279, 76288, 76293, 76299, 
-    76306, 76312, 76316, 76324, 76329, 34735, 76333, 76341, 76347, 76354, 
-    76359, 76363, 76368, 58410, 34741, 76374, 76379, 76383, 76388, 76393, 
-    76398, 76402, 76407, 76412, 76418, 76423, 76428, 76434, 76440, 76445, 
-    76449, 76454, 76459, 76464, 76468, 24093, 76473, 76478, 76484, 76490, 
-    76496, 76501, 76505, 76510, 76515, 76520, 76524, 76529, 76534, 76539, 
-    76544, 76548, 32847, 76556, 76560, 76568, 76576, 76587, 76592, 76596, 
-    22391, 76601, 76607, 76617, 76624, 76629, 76638, 76643, 76647, 76652, 
-    76660, 76668, 76675, 65075, 76681, 76689, 76696, 76707, 76713, 76717, 
-    76723, 32857, 76726, 76733, 76741, 76746, 39598, 76750, 76755, 76762, 
-    76767, 8992, 76771, 76779, 76786, 76793, 76799, 76813, 63347, 76821, 
-    76827, 76831, 76834, 76842, 76849, 76854, 76867, 76874, 76878, 76885, 
-    76890, 60830, 76895, 76898, 76905, 76911, 76915, 76923, 76932, 76942, 
-    76952, 76961, 76969, 76980, 76985, 76989, 76994, 76998, 35371, 77006, 
-    21351, 35380, 77011, 77016, 77021, 77026, 77031, 77036, 77041, 77045, 
-    77050, 77055, 77060, 77065, 77070, 77075, 77079, 77084, 77089, 77093, 
-    77097, 77101, 77105, 77110, 77115, 77119, 77124, 77128, 77132, 77137, 
-    77142, 77147, 77152, 77156, 77161, 77166, 77170, 77175, 77180, 77185, 
-    77190, 77195, 77200, 77205, 77210, 77215, 77220, 77225, 77230, 77235, 
-    77240, 77245, 77250, 77255, 77260, 77265, 77270, 77274, 77279, 77284, 
-    77289, 77294, 77299, 77304, 77309, 77314, 77319, 77324, 77329, 77333, 
-    77338, 77342, 77347, 77352, 77357, 77362, 77367, 77372, 77377, 77382, 
-    77387, 77391, 77395, 77400, 77405, 77409, 77414, 77419, 77423, 77428, 
-    77433, 77438, 77443, 77447, 77452, 77457, 77461, 77466, 77470, 77474, 
-    77478, 77482, 77487, 77491, 77495, 77499, 77503, 77507, 77511, 77515, 
-    77519, 77523, 77528, 77533, 77538, 77543, 77548, 77553, 77558, 77563, 
-    77568, 77573, 77577, 77581, 77585, 77589, 77593, 77597, 77602, 77606, 
-    77611, 77615, 77620, 77625, 77629, 77633, 77638, 77642, 77646, 77650, 
-    77654, 77658, 77662, 77666, 77670, 77674, 77678, 77682, 77686, 77690, 
-    77694, 77699, 77704, 77708, 77712, 77716, 77720, 77724, 77728, 77733, 
-    77737, 77741, 77745, 77749, 77753, 77757, 77762, 77766, 77771, 77775, 
-    77779, 77783, 77787, 77791, 77795, 77799, 77803, 77807, 77811, 77815, 
-    77820, 77824, 77828, 77832, 77836, 77840, 77844, 77848, 77852, 77856, 
-    77860, 77864, 77869, 77873, 77877, 77882, 77887, 77891, 77895, 77899, 
-    77903, 77907, 77911, 77915, 77919, 77924, 77928, 77933, 77937, 77942, 
-    77946, 77951, 77955, 77961, 77966, 77970, 77975, 77979, 77984, 77988, 
-    77993, 77997, 78002, 1521, 78006, 2824, 1759, 1764, 78010, 78014, 2828, 
-    78018, 1397, 78023, 1342, 78027, 2840, 78031, 78038, 78045, 78059, 2844, 
-    7131, 78068, 78076, 78083, 78094, 78103, 78110, 78122, 78135, 78148, 
-    78159, 78164, 78171, 78183, 78187, 2848, 11747, 78197, 78202, 78211, 
-    78221, 2852, 78226, 78230, 78235, 78242, 78248, 78256, 78268, 1347, 
-    13042, 78278, 78282, 78288, 78302, 78314, 78326, 78336, 78345, 78354, 
-    78363, 78371, 78382, 78390, 4051, 78400, 78411, 78420, 78426, 78441, 
-    78448, 78454, 35496, 78459, 2876, 13046, 78463, 78470, 8930, 78479, 2881, 
-    32343, 78485, 60579, 78492, 78498, 78509, 78515, 78522, 78528, 78536, 
-    78543, 78549, 78559, 78568, 78579, 78586, 78592, 78602, 78610, 78616, 
-    78631, 78637, 78642, 78649, 78652, 78658, 78665, 78671, 78679, 78688, 
-    78696, 78702, 78711, 41434, 78725, 78730, 78736, 14751, 78741, 78754, 
-    78763, 78771, 78778, 78782, 78786, 78789, 78796, 78803, 78811, 78819, 
-    78828, 78836, 14678, 78844, 78849, 78853, 78865, 78872, 78881, 748, 
-    78891, 78900, 78911, 2897, 78915, 78919, 78925, 78938, 78950, 78960, 
-    78969, 78981, 26359, 78992, 79000, 79009, 79020, 79031, 79041, 79051, 
-    79060, 79068, 11312, 79075, 79079, 79082, 79087, 79092, 79096, 79102, 
-    1352, 11818, 79109, 79120, 79129, 79137, 79146, 79154, 79170, 79181, 
-    79190, 79198, 79210, 79221, 79237, 79247, 79268, 79281, 79289, 79296, 
-    14862, 79309, 79314, 79320, 5908, 79326, 79329, 79336, 79346, 8176, 
-    79353, 79358, 79363, 79368, 79376, 79385, 79393, 9756, 9765, 79398, 
-    79409, 79414, 79420, 2913, 2918, 79426, 10879, 79432, 79439, 79446, 
-    79459, 2251, 68, 79464, 79469, 79479, 79485, 79494, 79502, 79512, 79516, 
-    79521, 79525, 79537, 2941, 79545, 79553, 79558, 79569, 79580, 79589, 
-    79594, 79600, 79605, 79615, 79625, 79630, 79636, 79641, 79650, 21404, 
-    79654, 4128, 20, 79659, 79668, 79675, 79682, 79688, 79694, 864, 79699, 
-    79704, 60907, 79709, 79714, 79720, 79726, 79734, 79739, 79746, 79752, 
-    79757, 38008, 41328, 79763, 2945, 32, 79773, 79786, 79791, 79799, 79804, 
-    79810, 2967, 28296, 79815, 79823, 79830, 79835, 58652, 61910, 79844, 
-    79848, 1704, 1813, 79853, 79858, 79865, 1817, 247, 79872, 79878, 2989, 
-    79883, 79888, 79895, 1821, 79900, 79906, 79911, 79923, 6119, 79933, 1828, 
-    79939, 79944, 79951, 79958, 79973, 79980, 79991, 79999, 2618, 80003, 
-    80015, 80020, 80024, 80030, 28121, 2256, 80034, 80045, 80049, 80053, 
-    80059, 80063, 80072, 80076, 80087, 80091, 2302, 32172, 80095, 80105, 
-    3080, 9371, 80113, 80118, 80122, 80131, 80138, 80144, 3050, 17146, 80148, 
-    80161, 80179, 80184, 80192, 80200, 80210, 9985, 13154, 80222, 80235, 
-    80242, 80249, 80265, 80272, 80278, 1059, 80285, 80292, 80302, 80311, 
-    80323, 42298, 80331, 3064, 12030, 80334, 80342, 80346, 78238, 3068, 
-    80350, 21185, 12046, 3756, 80354, 3074, 80358, 80368, 80374, 80380, 
-    80386, 80392, 80398, 80404, 80410, 80416, 80422, 80428, 80434, 80440, 
-    80446, 80452, 80458, 80464, 80470, 80476, 80482, 80488, 80494, 80500, 
-    80506, 80512, 80518, 80525, 80532, 80538, 80544, 80550, 80556, 80562, 
-    80568, 1357, 16056, 12068, 80574, 80579, 80584, 80589, 80594, 80599, 
-    80604, 80609, 80614, 80619, 80624, 80629, 80634, 80639, 80644, 80649, 
-    80654, 80659, 80664, 80669, 80674, 80679, 80684, 80689, 80694, 80699, 
-    80705, 80710, 80715, 80721, 80726, 80732, 80737, 80742, 80748, 80753, 
-    80758, 80763, 80768, 80773, 80778, 80783, 80788, 80369, 80375, 80381, 
-    80387, 80393, 80399, 80405, 80411, 80417, 80423, 80429, 80435, 80441, 
-    80447, 80453, 80794, 80459, 80465, 80471, 80800, 80477, 80483, 80489, 
-    80495, 80501, 80507, 80513, 80533, 80806, 80812, 80539, 80818, 80545, 
-    80551, 80557, 80563, 80569, 3091, 3096, 80824, 80829, 80832, 80838, 
-    80844, 80851, 80856, 80861, 2307, 
+    13668, 13673, 13679, 13688, 13692, 13698, 13706, 13713, 13722, 13731, 
+    13740, 13749, 13758, 13767, 13776, 13785, 13795, 13805, 13814, 13820, 
+    13827, 13834, 13840, 13854, 13861, 13869, 13878, 13884, 13893, 13902, 
+    13913, 13923, 13931, 13938, 13946, 13955, 13968, 13976, 13983, 13996, 
+    14002, 14008, 14018, 14027, 14036, 14041, 14045, 14051, 14057, 14064, 
+    8966, 14069, 14074, 14081, 14086, 12376, 14091, 14099, 14105, 14110, 
+    14118, 14126, 14133, 14141, 14147, 14155, 14163, 14169, 14174, 14180, 
+    14187, 14193, 14198, 14202, 14213, 14221, 14227, 14232, 14241, 14247, 
+    14252, 14261, 14275, 3853, 14279, 14284, 14289, 14295, 14300, 14305, 
+    14309, 14314, 14319, 14324, 7752, 14329, 14334, 14339, 14344, 14349, 
+    14353, 14358, 14363, 14368, 14373, 14379, 14385, 14390, 14394, 14399, 
+    14404, 14409, 9301, 14414, 14419, 14424, 14429, 14434, 14451, 14469, 
+    14481, 14494, 14511, 14527, 14544, 14554, 14573, 14584, 14595, 14606, 
+    14617, 14629, 14640, 14651, 14668, 14679, 14690, 14695, 9306, 14700, 
+    14704, 2381, 14708, 14711, 14717, 14725, 14733, 14738, 14746, 14754, 
+    14761, 14766, 14772, 14779, 14787, 14794, 14806, 14814, 14819, 11597, 
+    14825, 14834, 14843, 14851, 14858, 14864, 14872, 14879, 14885, 14892, 
+    14898, 14907, 14915, 14925, 14932, 14938, 14946, 14952, 14960, 14967, 
+    14980, 14987, 14996, 15005, 15014, 15022, 15032, 15039, 15044, 3560, 
+    15051, 15056, 1372, 15060, 14330, 15064, 15070, 15074, 15082, 15094, 
+    15099, 15106, 15112, 15117, 15124, 14335, 15128, 15132, 15136, 14340, 
+    15140, 14345, 15144, 15151, 15156, 15160, 15167, 15171, 15179, 15186, 
+    15190, 15197, 15214, 15223, 15227, 15230, 15238, 15244, 15249, 3638, 
+    15253, 15255, 15263, 15270, 15280, 15292, 15297, 15303, 15308, 15312, 
+    15318, 15323, 15329, 15332, 15339, 15347, 15354, 15360, 15366, 15371, 
+    15378, 15384, 15389, 15396, 15400, 15406, 15410, 15417, 15423, 15429, 
+    15437, 15443, 15448, 15454, 15462, 15470, 15476, 15482, 15487, 15494, 
+    15499, 15503, 15509, 15514, 15521, 15526, 15532, 15535, 15541, 15547, 
+    15550, 15554, 15566, 15572, 15577, 15584, 15590, 15596, 15607, 15617, 
+    15626, 15634, 15641, 15652, 15662, 15672, 15680, 15683, 14359, 15688, 
+    15693, 14364, 14499, 15701, 15714, 15729, 15740, 14516, 15758, 15771, 
+    15784, 15795, 10492, 15806, 15819, 15838, 15849, 15860, 15871, 2649, 
+    15884, 15888, 15896, 15911, 15926, 15937, 15944, 15950, 15958, 15962, 
+    15968, 15971, 15981, 15989, 15996, 16004, 16014, 16019, 16026, 16031, 
+    16038, 16049, 16059, 16065, 16070, 16075, 14369, 16079, 16085, 16091, 
+    16096, 16101, 16106, 16110, 14374, 14380, 16114, 14386, 16119, 16127, 
+    16136, 16143, 9150, 16147, 16149, 16154, 16159, 16165, 16170, 16175, 
+    16180, 16185, 16189, 16195, 16201, 16206, 16212, 16217, 16222, 16228, 
+    16233, 16238, 16243, 16248, 16254, 16259, 16264, 16270, 16276, 16281, 
+    16286, 16293, 16299, 16310, 16317, 16322, 16326, 16330, 16333, 16341, 
+    16346, 16353, 16360, 16366, 16371, 16376, 16383, 16393, 16398, 16405, 
+    16411, 16421, 16431, 16445, 16459, 16473, 16487, 16502, 16517, 16534, 
+    16552, 16565, 16571, 16576, 16581, 16585, 16590, 16598, 16604, 16609, 
+    16614, 16618, 16623, 16627, 16632, 16636, 16647, 16653, 16658, 16663, 
+    16670, 16675, 16679, 16684, 16689, 16695, 16702, 16708, 16713, 16717, 
+    16723, 16728, 16733, 16737, 16743, 16748, 16753, 16760, 16765, 13111, 
+    16769, 16774, 16778, 16783, 16789, 16795, 16802, 16812, 16820, 16827, 
+    16832, 16836, 16845, 16853, 16860, 16867, 16873, 16879, 16884, 16889, 
+    16895, 16900, 16906, 16911, 16917, 16923, 16930, 16936, 16941, 16946, 
+    9348, 16955, 16958, 16964, 16969, 16974, 16984, 16991, 16997, 17002, 
+    17007, 17013, 17018, 17024, 17029, 17035, 17041, 17046, 17054, 17061, 
+    17066, 17071, 17077, 17082, 17086, 17095, 17106, 17113, 17118, 17126, 
+    17132, 17139, 17145, 17150, 17154, 17160, 17165, 17170, 17175, 1440, 
+    7777, 2877, 17179, 17183, 17187, 17191, 17195, 17199, 17202, 17209, 
+    17217, 14400, 17224, 17234, 17242, 17249, 17257, 17267, 17276, 17289, 
+    17294, 17299, 17307, 17314, 13207, 13216, 17321, 17331, 17346, 17352, 
+    17359, 17366, 17372, 17380, 17390, 17400, 14405, 17409, 17415, 17421, 
+    17429, 17437, 17442, 17451, 17459, 17471, 17481, 17491, 17501, 17510, 
+    17522, 17532, 17542, 17553, 17558, 17570, 17582, 17594, 17606, 17618, 
+    17630, 17642, 17654, 17666, 17678, 17689, 17701, 17713, 17725, 17737, 
+    17749, 17761, 17773, 17785, 17797, 17809, 17820, 17832, 17844, 17856, 
+    17868, 17880, 17892, 17904, 17916, 17928, 17940, 17951, 17963, 17975, 
+    17987, 17999, 18011, 18023, 18035, 18047, 18059, 18071, 18082, 18094, 
+    18106, 18118, 18130, 18142, 18154, 18166, 18178, 18190, 18202, 18213, 
+    18225, 18237, 18249, 18261, 18273, 18285, 18297, 18309, 18321, 18333, 
+    18344, 18356, 18368, 18380, 18392, 18404, 18416, 18428, 18440, 18452, 
+    18464, 18475, 18487, 18499, 18511, 18523, 18536, 18549, 18562, 18575, 
+    18588, 18601, 18614, 18626, 18639, 18652, 18665, 18678, 18691, 18704, 
+    18717, 18730, 18743, 18756, 18768, 18781, 18794, 18807, 18820, 18833, 
+    18846, 18859, 18872, 18885, 18898, 18910, 18923, 18936, 18949, 18962, 
+    18975, 18988, 19001, 19014, 19027, 19040, 19052, 19065, 19078, 19091, 
+    19104, 19117, 19130, 19143, 19156, 19169, 19182, 19194, 19207, 19220, 
+    19233, 19246, 19259, 19272, 19285, 19298, 19311, 19324, 19336, 19347, 
+    19360, 19373, 19386, 19399, 19412, 19425, 19438, 19451, 19464, 19477, 
+    19489, 19502, 19515, 19528, 19541, 19554, 19567, 19580, 19593, 19606, 
+    19619, 19631, 19644, 19657, 19670, 19683, 19696, 19709, 19722, 19735, 
+    19748, 19761, 19773, 19786, 19799, 19812, 19825, 19838, 19851, 19864, 
+    19877, 19890, 19903, 19915, 19928, 19941, 19954, 19967, 19980, 19993, 
+    20006, 20019, 20032, 20045, 20057, 20070, 20083, 20096, 20109, 20122, 
+    20135, 20148, 20161, 20174, 20187, 20199, 20212, 20225, 20238, 20251, 
+    20264, 20277, 20290, 20303, 20316, 20329, 20341, 20354, 20367, 20380, 
+    20393, 20406, 20419, 20432, 20445, 20458, 20471, 20483, 20496, 20509, 
+    20522, 20535, 20548, 20561, 20574, 20587, 20600, 20613, 20625, 20638, 
+    20651, 20664, 20677, 20690, 20703, 20716, 20729, 20742, 20755, 20767, 
+    20778, 20786, 20794, 20801, 20807, 20811, 20817, 20823, 20831, 20837, 
+    20842, 20846, 20855, 9155, 20866, 20873, 20881, 20888, 20895, 10948, 
+    20902, 20911, 20916, 20921, 7805, 20928, 20933, 20936, 20941, 20949, 
+    20956, 20963, 20970, 20976, 20985, 20994, 21000, 21009, 21013, 21019, 
+    21024, 21034, 21041, 21047, 21055, 21061, 21068, 21078, 21087, 21091, 
+    21098, 21102, 21107, 21113, 21121, 21125, 21135, 14415, 21144, 21150, 
+    21154, 21163, 14420, 21169, 21176, 21187, 21195, 21204, 21212, 8931, 
+    21220, 21225, 21231, 21236, 21240, 21244, 21248, 9639, 21253, 21261, 
+    21268, 21277, 21284, 21291, 10878, 21298, 21304, 21308, 21314, 21321, 
+    21327, 21335, 21341, 21348, 21354, 21360, 21369, 21373, 21381, 21390, 
+    21397, 21402, 21406, 21417, 21422, 21427, 21432, 21445, 7995, 21449, 
+    21455, 21463, 21467, 21474, 21483, 21488, 14691, 21496, 21500, 21512, 
+    21517, 21521, 21524, 21530, 21536, 21541, 21545, 21548, 21559, 21564, 
+    9383, 21571, 21576, 9388, 21581, 21586, 21591, 21596, 21601, 21606, 
+    21611, 21616, 21621, 21626, 21631, 21636, 21642, 21647, 21652, 21657, 
+    21662, 21667, 21672, 21677, 21682, 21687, 21693, 21699, 21704, 21709, 
+    21714, 21719, 21724, 21729, 21734, 21739, 21744, 21750, 21755, 21760, 
+    21765, 21771, 21777, 21782, 21787, 21792, 21797, 21802, 21807, 21812, 
+    21817, 21823, 21828, 21833, 21838, 21843, 21849, 21854, 21859, 21863, 
+    1368, 129, 21871, 21875, 21879, 21883, 21888, 21892, 13117, 12476, 21896, 
+    21901, 21905, 21910, 21914, 21919, 21923, 21929, 21934, 21938, 21942, 
+    21950, 21954, 21958, 21963, 21968, 21972, 21978, 21983, 21987, 21992, 
+    21997, 22001, 22008, 22015, 22022, 22026, 22030, 22035, 22039, 22042, 
+    22048, 22061, 22066, 22075, 22080, 9428, 22085, 22088, 2712, 2717, 22092, 
+    22098, 22104, 7209, 22109, 22114, 22119, 22125, 22130, 13909, 22135, 
+    22140, 22145, 22150, 22156, 22161, 22166, 22172, 22177, 22181, 22186, 
+    22191, 22196, 22201, 22205, 22210, 22214, 22219, 22224, 22229, 22234, 
+    22238, 22243, 22247, 22252, 22257, 22262, 22267, 2886, 22182, 22271, 
+    22279, 22286, 9733, 22298, 22306, 22187, 22313, 22318, 22326, 22192, 
+    22331, 22336, 22344, 22349, 22197, 22354, 22359, 22363, 22369, 22377, 
+    22380, 22387, 22391, 22395, 22401, 22408, 22413, 8958, 1727, 1732, 22417, 
+    22423, 22429, 22434, 22438, 22442, 22446, 22450, 22454, 22458, 22462, 
+    22466, 22469, 22475, 22482, 22490, 22496, 22502, 22507, 22512, 22516, 
+    13829, 13836, 22521, 22533, 22536, 22543, 16362, 22550, 22558, 22569, 
+    22578, 22591, 22601, 22615, 22627, 22641, 22653, 22663, 22675, 22681, 
+    22696, 22720, 22738, 22757, 22770, 22784, 22802, 22818, 22835, 22853, 
+    22864, 22883, 22900, 22920, 22938, 22950, 22964, 22978, 22990, 23007, 
+    23026, 23044, 23056, 23074, 23093, 14559, 23106, 23126, 23138, 10523, 
+    23150, 23155, 23160, 23165, 23171, 23176, 23180, 23187, 2398, 23191, 
+    23197, 23201, 23204, 23208, 23216, 23222, 22215, 23226, 23235, 23246, 
+    23252, 23258, 23267, 23275, 23282, 23287, 23291, 23298, 23304, 23313, 
+    23321, 23328, 23338, 23347, 23357, 23362, 23371, 23380, 23391, 23402, 
+    3963, 23412, 23416, 23426, 23434, 23444, 23455, 23460, 23470, 23478, 
+    23485, 23491, 23498, 23503, 22225, 23507, 23516, 23520, 23523, 23528, 
+    23535, 23544, 23552, 23560, 23570, 23579, 23585, 23591, 22230, 22235, 
+    23595, 23605, 23615, 23625, 23633, 23640, 23650, 23658, 23666, 23672, 
+    23680, 930, 23689, 14750, 542, 23703, 23712, 23720, 23731, 23742, 23752, 
+    23761, 23773, 23782, 23791, 23797, 23806, 23815, 23825, 23833, 23841, 
+    9360, 23847, 23850, 23854, 23859, 23864, 9848, 22248, 22253, 23872, 
+    23878, 23884, 23889, 23894, 23898, 23906, 23912, 23918, 23922, 3525, 
+    23930, 23935, 23940, 23944, 23948, 9928, 23955, 23963, 23977, 23984, 
+    23990, 9937, 9943, 23998, 24006, 24013, 24018, 24023, 22258, 24029, 
+    24040, 24044, 24049, 2601, 24054, 24065, 24071, 24076, 24080, 24084, 
+    24087, 24094, 24101, 24108, 24114, 24118, 22263, 24123, 24127, 24131, 
+    1037, 24136, 24141, 24146, 24151, 24156, 24161, 24166, 24171, 24176, 
+    24181, 24186, 24191, 24196, 24201, 24207, 24212, 24217, 24222, 24227, 
+    24232, 24237, 24243, 24248, 24253, 24258, 24263, 24268, 24273, 24278, 
+    24284, 24290, 24295, 24301, 24306, 24311, 5, 24317, 24321, 24325, 24329, 
+    24334, 24338, 24342, 24346, 24350, 24355, 24359, 24364, 24368, 24371, 
+    24375, 24380, 24384, 24389, 24393, 24397, 24401, 24406, 24410, 24414, 
+    24424, 24429, 24433, 24437, 24442, 24447, 24456, 24461, 24466, 24470, 
+    24474, 24487, 24499, 24508, 24517, 24523, 24528, 24532, 24536, 24546, 
+    24555, 24563, 24569, 24574, 24578, 24585, 24595, 24604, 24612, 24620, 
+    24627, 24635, 24644, 24653, 24661, 24666, 24670, 24674, 24677, 24679, 
+    24683, 24687, 24692, 24697, 24701, 24705, 24708, 24712, 24715, 24719, 
+    24722, 24725, 24729, 24735, 24739, 24743, 24747, 24752, 24757, 24762, 
+    24766, 24769, 24774, 24780, 24785, 24791, 24796, 24800, 24804, 24808, 
+    24813, 24817, 24822, 24826, 24830, 24837, 24841, 24844, 24848, 24854, 
+    24860, 24864, 24868, 24873, 24880, 24886, 24890, 24899, 24903, 24907, 
+    24910, 24916, 24921, 24927, 1489, 1791, 24932, 24937, 24942, 24947, 
+    24952, 24957, 24962, 2148, 2194, 24967, 24970, 24974, 24978, 24983, 
+    24987, 24991, 24994, 24999, 25004, 25008, 25011, 25016, 25020, 25025, 
+    25029, 14762, 25034, 25037, 25040, 25044, 25049, 25053, 25066, 25070, 
+    25073, 25081, 25090, 25097, 25102, 25108, 25114, 25122, 25129, 25136, 
+    25140, 25144, 25148, 25153, 25158, 25162, 25170, 25175, 25187, 25198, 
+    25203, 25207, 25211, 25217, 25222, 25227, 25231, 25235, 25238, 25244, 
+    7915, 2316, 25248, 25253, 25269, 9475, 25289, 25298, 25314, 25318, 25321, 
+    25327, 25337, 25343, 25352, 25367, 25379, 25390, 25398, 25407, 25413, 
+    25422, 25432, 25443, 25454, 25463, 25470, 25479, 25487, 25494, 25502, 
+    25509, 25516, 25529, 25536, 25542, 25547, 25556, 25562, 25567, 25575, 
+    25582, 23436, 25594, 25606, 25620, 25628, 25635, 25647, 25656, 25665, 
+    25673, 25681, 25689, 25696, 25705, 25713, 25723, 25732, 25742, 25751, 
+    25760, 25768, 25773, 25777, 25780, 25784, 25788, 25792, 25796, 25800, 
+    25806, 25812, 25820, 14807, 25827, 25832, 25839, 25845, 25852, 14815, 
+    25859, 25862, 25874, 25882, 25888, 25893, 25897, 9878, 25908, 25918, 
+    25927, 25934, 25938, 14820, 25941, 25948, 25952, 25958, 25961, 25968, 
+    25974, 25981, 25987, 25991, 25996, 26000, 26009, 26016, 26022, 7956, 
+    26029, 26037, 26044, 26050, 26055, 26061, 26067, 26075, 26079, 26082, 
+    26084, 25785, 26093, 26099, 26109, 26114, 26121, 26127, 26132, 26137, 
+    26142, 26146, 26151, 26158, 26167, 26171, 26178, 26187, 26193, 26198, 
+    26204, 26209, 26216, 26227, 26232, 26236, 26246, 26252, 26256, 26261, 
+    26271, 26280, 26284, 26291, 26299, 26306, 26312, 26317, 26325, 26332, 
+    26344, 26353, 26357, 13053, 26365, 26375, 26379, 25077, 26390, 26395, 
+    26399, 26406, 26413, 21974, 25710, 26418, 26422, 26425, 22870, 26430, 
+    26444, 26460, 26478, 26497, 26514, 26532, 22889, 26549, 26569, 22906, 
+    26581, 26593, 15745, 26605, 22926, 26619, 26631, 10536, 26645, 26650, 
+    26655, 26660, 26666, 26672, 26678, 26682, 26689, 26694, 26704, 26710, 
+    10183, 26716, 26718, 26723, 26731, 26735, 26154, 26741, 26748, 11524, 
+    11534, 26755, 26765, 26770, 26774, 26777, 26783, 26791, 26803, 26813, 
+    26829, 26842, 26856, 15763, 26870, 26877, 26881, 26884, 26889, 26893, 
+    26900, 26907, 26917, 26922, 26927, 26932, 26940, 26948, 26957, 26962, 
+    9572, 26966, 26969, 26972, 26977, 26984, 26989, 27005, 27013, 27021, 
+    9423, 27029, 27034, 27038, 27044, 27050, 27053, 27059, 27071, 27079, 
+    27086, 27092, 27099, 27110, 27124, 27137, 27146, 27155, 27167, 27178, 
+    27188, 27197, 27206, 27214, 27225, 7938, 27232, 27238, 27243, 27249, 
+    27256, 27266, 27276, 27285, 27291, 27298, 27303, 27310, 27318, 27326, 
+    27338, 6246, 27345, 27354, 27362, 27368, 27374, 27379, 27383, 27386, 
+    27392, 27399, 27404, 27409, 27413, 27425, 27436, 27445, 27453, 14947, 
+    27458, 27464, 27470, 11517, 8635, 27475, 27479, 27483, 27486, 27489, 
+    27495, 27503, 27511, 27515, 27519, 27524, 27527, 27536, 27540, 27548, 
+    27559, 27563, 27569, 27575, 27579, 27585, 27593, 27615, 27639, 27646, 
+    27653, 27659, 27667, 27673, 27678, 27689, 27707, 27714, 27722, 27726, 
+    27735, 27748, 27756, 27768, 27779, 27789, 27803, 27812, 27820, 27832, 
+    9492, 27843, 27854, 27866, 27876, 27885, 27890, 27894, 27902, 27912, 
+    27917, 27921, 27924, 27927, 27935, 27943, 27952, 27962, 27971, 27977, 
+    27991, 2663, 28013, 28024, 28033, 28043, 28055, 28064, 28073, 28083, 
+    28091, 28099, 28108, 28113, 28124, 28129, 28140, 28144, 28154, 28163, 
+    28171, 28181, 28191, 28199, 28208, 28215, 28223, 28230, 28239, 28243, 
+    28251, 28258, 28266, 28273, 28284, 28299, 28306, 28312, 28322, 28331, 
+    28337, 28341, 28348, 28352, 14031, 28358, 28362, 28367, 28374, 28378, 
+    28382, 28390, 28398, 28404, 28413, 28420, 28425, 28430, 28440, 23505, 
+    28444, 28447, 28452, 28457, 28462, 28467, 28472, 28477, 28482, 28487, 
+    28493, 28498, 28503, 28509, 1218, 704, 28514, 28523, 2364, 28530, 28535, 
+    28539, 28545, 1267, 546, 318, 28550, 28559, 28567, 28576, 28584, 28595, 
+    28604, 28612, 28616, 28619, 28627, 28635, 28640, 14775, 28646, 28652, 
+    28658, 5872, 28663, 28667, 28673, 28677, 28684, 1455, 28690, 28697, 9579, 
+    28701, 28711, 28719, 28725, 28734, 28742, 28748, 28756, 28763, 11110, 
+    28769, 28776, 28781, 28788, 1496, 2147, 28794, 28800, 28807, 28818, 
+    28829, 28837, 28844, 28854, 28863, 28871, 28880, 28887, 28894, 28907, 
+    28918, 1272, 28937, 28942, 28950, 3575, 28954, 28959, 28963, 1459, 24706, 
+    28973, 28977, 28982, 28986, 3493, 28992, 29000, 29007, 29018, 29026, 
+    29034, 3576, 279, 29039, 29047, 29055, 29062, 29068, 29073, 2216, 29080, 
+    29086, 25992, 26222, 29092, 106, 29096, 29100, 29106, 615, 9328, 29111, 
+    29118, 29124, 2327, 29128, 29132, 15187, 29135, 29140, 29147, 29153, 
+    29158, 29166, 29173, 29179, 22351, 29183, 29187, 3646, 16625, 29191, 
+    29196, 29199, 29207, 29215, 29220, 29223, 29230, 29240, 29252, 29257, 
+    29261, 29269, 29276, 29282, 29289, 29296, 29299, 29303, 29307, 1463, 
+    29317, 29319, 29324, 29330, 29336, 29341, 29346, 29351, 29356, 29361, 
+    29366, 29371, 29376, 29381, 29386, 29391, 29396, 29401, 29406, 29412, 
+    29418, 29424, 29430, 29435, 29440, 29445, 29451, 29456, 29461, 29466, 
+    29472, 29477, 29483, 29488, 29493, 29498, 29503, 29509, 29514, 29520, 
+    29525, 29530, 29535, 29540, 29546, 29551, 29557, 29562, 29567, 29572, 
+    29577, 29582, 29587, 29592, 29597, 29602, 29608, 29614, 29620, 29625, 
+    29630, 29635, 29640, 29646, 29652, 29658, 29664, 29670, 29676, 29681, 
+    29687, 29692, 29697, 29702, 29707, 29713, 2443, 29718, 2450, 2457, 2754, 
+    29723, 2463, 2473, 29729, 29733, 29738, 29743, 29749, 29754, 29759, 
+    29763, 29768, 29774, 29779, 29784, 29789, 29795, 29800, 29804, 29808, 
+    29813, 29818, 29823, 29828, 29833, 29839, 29845, 29850, 29854, 29859, 
+    29865, 29869, 29874, 29879, 29884, 29889, 29893, 29896, 29901, 29906, 
+    29911, 29916, 29921, 29927, 29933, 29938, 29943, 29947, 29952, 29957, 
+    29962, 29967, 29972, 29976, 29981, 29986, 29991, 29995, 29999, 30003, 
+    30008, 30016, 30021, 30027, 30033, 30039, 30044, 30048, 30051, 30056, 
+    30061, 30065, 30070, 30074, 30079, 30083, 30086, 30091, 17302, 30096, 
+    30101, 30106, 30114, 21280, 28694, 9026, 30119, 30124, 30128, 30133, 
+    30137, 30141, 30146, 30150, 30153, 30156, 30160, 30165, 30169, 30177, 
+    30181, 30184, 30189, 30193, 30197, 30202, 30207, 30211, 30217, 30222, 
+    30227, 30234, 30241, 30245, 30248, 30254, 30263, 30270, 30278, 30285, 
+    30289, 30294, 30298, 30302, 30308, 30314, 30318, 30324, 30329, 30334, 
+    30338, 30345, 30351, 30357, 30363, 30369, 30376, 30382, 30388, 30394, 
+    30400, 30406, 30412, 30418, 30425, 30431, 30438, 30444, 30450, 30456, 
+    30462, 30468, 30474, 30480, 30486, 30492, 11418, 30498, 30503, 30508, 
+    30511, 30519, 30524, 30533, 30539, 30544, 30549, 30554, 30558, 30563, 
+    30568, 30573, 30578, 30583, 30590, 30597, 30603, 30609, 30614, 16303, 
+    30621, 30627, 30634, 30640, 30646, 30651, 30659, 30664, 16082, 30668, 
+    30673, 30678, 30684, 30689, 30694, 30698, 30703, 30708, 30714, 30719, 
+    30724, 30728, 30733, 30738, 30742, 30747, 30752, 30757, 30761, 30766, 
+    30771, 30776, 30780, 30784, 15293, 30788, 30797, 30803, 30809, 30818, 
+    30826, 30835, 30843, 30848, 30852, 30859, 30865, 30869, 30872, 30877, 
+    30886, 30894, 30899, 1495, 30905, 30908, 30912, 22424, 22430, 30918, 
+    30922, 30933, 30944, 30955, 30967, 30974, 30981, 30986, 30990, 5909, 755, 
+    21279, 30998, 31003, 31007, 31012, 31016, 31022, 31027, 31033, 31038, 
+    31044, 31049, 31055, 31060, 31066, 31072, 31078, 31083, 31039, 31045, 
+    31087, 31092, 31098, 31103, 31109, 31114, 31120, 31125, 31050, 10421, 
+    31129, 31061, 31067, 31073, 2831, 3423, 31135, 31138, 31144, 31150, 
+    31156, 31163, 31169, 31175, 31181, 31187, 31193, 31199, 31205, 31211, 
+    31217, 31223, 31229, 31235, 31242, 31248, 31254, 31260, 31266, 31272, 
+    31275, 31280, 31283, 31290, 31298, 31303, 31308, 31314, 31319, 31324, 
+    31328, 31333, 31339, 31344, 31350, 31355, 31361, 31366, 31372, 31378, 
+    31382, 31387, 31392, 31397, 31402, 31406, 31411, 31416, 31421, 31427, 
+    31433, 31439, 31445, 31450, 31454, 31457, 31463, 31469, 31478, 31486, 
+    31493, 31498, 31502, 31506, 31511, 15146, 31516, 31524, 31530, 3683, 
+    1377, 31535, 31539, 8005, 31545, 31551, 31558, 8014, 31562, 31568, 31575, 
+    31581, 31590, 31598, 31610, 31614, 31621, 31627, 31631, 31634, 31643, 
+    31651, 31040, 31656, 31666, 31676, 31686, 31692, 31697, 31707, 31712, 
+    31725, 31739, 31750, 31762, 31774, 31788, 31801, 31813, 31825, 14600, 
+    31839, 31844, 31849, 31853, 31857, 31861, 1780, 27176, 31865, 31870, 
+    31088, 31875, 31878, 31883, 31888, 31893, 31899, 31905, 10098, 31910, 
+    31917, 15697, 31923, 31928, 31933, 31937, 31942, 31947, 31093, 31952, 
+    31957, 31962, 31968, 31099, 31973, 31976, 31983, 31991, 31997, 32003, 
+    32009, 32020, 32025, 32032, 32039, 32046, 32054, 32063, 32072, 32078, 
+    32084, 32092, 31104, 32097, 32103, 32109, 31110, 32114, 32119, 32127, 
+    32135, 32141, 32148, 32154, 32161, 32168, 32174, 32182, 32192, 32199, 
+    32204, 32210, 32215, 32220, 32227, 32236, 32244, 32249, 32255, 32262, 
+    32270, 32276, 32281, 32287, 32296, 27957, 32303, 32307, 32312, 32321, 
+    32326, 32331, 32336, 12405, 32344, 32349, 32354, 32359, 32363, 32368, 
+    32373, 32380, 32385, 32390, 32395, 31115, 21216, 32401, 2519, 244, 32404, 
+    32407, 32411, 32415, 32425, 32433, 32437, 32444, 32451, 32455, 32458, 
+    32464, 32472, 32480, 32484, 32488, 32491, 32498, 32502, 32506, 32513, 
+    32521, 31051, 32528, 32536, 10158, 664, 308, 32548, 32553, 32558, 32564, 
+    32569, 32574, 3704, 32579, 32582, 32587, 32592, 32597, 32602, 32607, 
+    32614, 22529, 32619, 32624, 32629, 32634, 32639, 32645, 32650, 32656, 
+    31286, 32662, 32667, 32673, 32679, 32689, 32694, 32699, 32703, 32708, 
+    32713, 32718, 32723, 32736, 32741, 22302, 16705, 3710, 32745, 32750, 
+    32755, 32761, 32766, 32771, 32775, 32780, 32785, 32791, 32796, 32801, 
+    1382, 32805, 32810, 32815, 32820, 32824, 32829, 32834, 32839, 32845, 
+    32851, 32856, 32860, 32864, 32869, 32874, 32879, 32883, 32891, 32895, 
+    32901, 32905, 32912, 16498, 31062, 32918, 32925, 32933, 32940, 32946, 
+    32959, 32971, 32977, 32981, 2773, 32985, 32989, 32493, 32998, 33009, 
+    33014, 33019, 33024, 33028, 33033, 22435, 33037, 33041, 33046, 31068, 
+    21300, 33050, 33055, 33061, 33066, 33070, 33074, 33077, 33081, 33087, 
+    33098, 33110, 31074, 33115, 33118, 33122, 347, 33127, 33132, 33137, 
+    33142, 33147, 33152, 33158, 33163, 33168, 33174, 33179, 33185, 33190, 
+    33196, 33201, 33206, 33211, 33216, 33221, 33226, 33231, 33236, 33242, 
+    33247, 33252, 33257, 33262, 33267, 33272, 33277, 33283, 33289, 33294, 
+    33299, 33304, 33309, 33314, 33319, 33324, 33329, 33334, 33339, 33344, 
+    33349, 33354, 33359, 33364, 33369, 33374, 33379, 33385, 313, 26, 33390, 
+    33394, 33398, 33406, 33410, 33414, 33417, 33420, 33422, 33427, 33431, 
+    33436, 33440, 33445, 33449, 33454, 33458, 33461, 33463, 33467, 33472, 
+    33476, 33487, 33490, 33492, 33496, 33508, 33517, 33521, 33525, 33531, 
+    33536, 33545, 33551, 33556, 33561, 33565, 33570, 33577, 33582, 33588, 
+    33593, 33597, 33604, 25718, 25728, 33608, 33613, 33618, 33623, 33630, 
+    33634, 33641, 8113, 33647, 33656, 33664, 33679, 33693, 33701, 33712, 
+    33721, 33726, 7227, 33736, 33741, 33746, 33750, 33753, 33757, 33762, 
+    33766, 33773, 33778, 33783, 8912, 33793, 33795, 33798, 33802, 33808, 
+    33812, 33817, 33822, 33828, 33833, 33839, 33844, 33854, 33863, 33871, 
+    33876, 33882, 33887, 33894, 33898, 33906, 33913, 33926, 33934, 33938, 
+    33948, 33953, 33957, 33965, 33973, 33977, 33986, 33992, 33997, 34005, 
+    34015, 34024, 34033, 34042, 34053, 34061, 34072, 34081, 34088, 34094, 
+    34099, 34110, 34115, 34119, 34122, 34126, 34134, 34140, 34148, 34155, 
+    34161, 34166, 34172, 2418, 34176, 34178, 34183, 34188, 34193, 34196, 
+    34198, 34202, 34205, 34212, 34216, 9891, 34220, 34226, 34236, 34241, 
+    34247, 34251, 34256, 34269, 26104, 34275, 34284, 17475, 34291, 34300, 
+    31672, 34308, 34313, 34317, 34325, 34332, 34337, 34341, 34346, 34350, 
+    34358, 34364, 34370, 34375, 34379, 34382, 34387, 34400, 34416, 22996, 
+    34433, 34445, 34462, 34474, 34488, 23013, 23032, 34500, 34512, 2680, 
+    34526, 34531, 34536, 34541, 34545, 34552, 34564, 34570, 34573, 34584, 
+    34595, 34600, 32089, 695, 34604, 34608, 34612, 34615, 34620, 34625, 
+    34631, 34636, 34641, 34647, 34653, 34658, 34662, 34667, 34672, 34677, 
+    34681, 34684, 34690, 34695, 34700, 34705, 34709, 34714, 34720, 34728, 
+    26337, 34733, 34738, 34745, 34751, 34757, 34762, 34770, 22538, 34777, 
+    34782, 34787, 34792, 34796, 34799, 34804, 34808, 34812, 34819, 34825, 
+    34831, 34837, 34844, 34849, 34855, 33968, 34859, 34863, 34868, 34881, 
+    34886, 34892, 34900, 34907, 34915, 34925, 34931, 34937, 34943, 34947, 
+    34956, 34964, 34971, 34976, 34981, 10444, 34986, 34994, 35001, 35007, 
+    35017, 35022, 35028, 35036, 3608, 35043, 35050, 3614, 35054, 35059, 
+    35070, 35077, 35083, 35092, 35096, 4015, 35099, 35106, 35112, 35118, 
+    35126, 35136, 29063, 35143, 35151, 35156, 35162, 35167, 25964, 35173, 
+    35180, 35186, 35195, 23677, 35202, 35207, 35211, 35219, 35227, 9607, 
+    5895, 35234, 35238, 35240, 35244, 35249, 35251, 35257, 35262, 35267, 
+    35274, 32610, 35280, 35285, 35289, 35294, 35298, 35307, 35311, 35317, 
+    35324, 35330, 35337, 35342, 35351, 35356, 35360, 35365, 35372, 35380, 
+    35388, 35393, 21356, 35397, 35400, 35404, 35408, 35412, 35415, 35417, 
+    35425, 35429, 35436, 35440, 35444, 35452, 35459, 35469, 35473, 35477, 
+    35485, 35493, 35499, 35504, 35513, 13357, 35519, 35528, 35533, 35540, 
+    35548, 35556, 35564, 35571, 35578, 35585, 35592, 35599, 35604, 35610, 
+    35627, 35635, 35645, 35653, 35660, 407, 35664, 35670, 35674, 35679, 
+    33717, 35685, 35688, 35692, 35700, 3619, 35708, 35714, 35720, 35729, 
+    35739, 35746, 35752, 3625, 3631, 35761, 35768, 35776, 35781, 35785, 
+    35792, 35800, 35807, 35813, 35822, 35832, 35838, 35846, 35855, 35862, 
+    35870, 35877, 22032, 35881, 35888, 35894, 35904, 35913, 35924, 35928, 
+    35938, 35944, 35951, 35959, 35968, 35977, 35987, 35998, 36005, 36010, 
+    36017, 3029, 36025, 36031, 36036, 36042, 36048, 36053, 36066, 36079, 
+    36092, 36099, 36105, 36113, 36121, 36126, 36130, 1469, 36134, 36139, 
+    36144, 36149, 36154, 36160, 36165, 36170, 36175, 36180, 36185, 36190, 
+    36195, 36201, 36207, 36212, 36217, 36223, 36228, 36233, 36238, 36244, 
+    36249, 36254, 36259, 36264, 36270, 36275, 36280, 36286, 36291, 36296, 
+    36301, 36306, 36311, 36317, 36322, 36328, 36333, 36339, 36344, 36349, 
+    36354, 36360, 36366, 36372, 36378, 36384, 36390, 36396, 36402, 36407, 
+    36412, 36418, 36423, 36428, 36433, 36438, 36443, 36448, 36453, 36459, 
+    36464, 36469, 36475, 36481, 101, 36486, 36488, 36492, 36496, 36500, 
+    36505, 36509, 9528, 36513, 36519, 1741, 6280, 36525, 36528, 36533, 36537, 
+    36542, 36546, 36550, 36555, 10245, 36559, 36563, 36567, 36571, 15385, 
+    36576, 36580, 36585, 36590, 36595, 36599, 36606, 26128, 36612, 36615, 
+    36619, 36624, 36630, 36634, 36642, 36648, 36653, 36657, 36663, 36667, 
+    36671, 3462, 3467, 29255, 36674, 36678, 36682, 36686, 36690, 36698, 
+    36705, 36709, 36716, 36721, 317, 36726, 36730, 36736, 36748, 36754, 
+    36760, 36764, 36770, 36779, 36783, 36787, 36792, 36798, 36803, 36807, 
+    36812, 36816, 36820, 36827, 36833, 36838, 36853, 36868, 36883, 36899, 
+    36917, 10195, 36931, 36938, 36942, 36945, 36954, 36959, 36963, 36971, 
+    33919, 36979, 36983, 36993, 37004, 29225, 37017, 37021, 37030, 37038, 
+    9785, 14913, 37042, 22447, 37045, 30173, 37050, 9784, 37055, 37061, 
+    37066, 37072, 37077, 37083, 37088, 37094, 37099, 37105, 37111, 37117, 
+    37122, 37078, 37084, 37089, 37095, 37100, 37106, 37112, 8126, 3874, 
+    37126, 37134, 37138, 37141, 37145, 37150, 37155, 37161, 37167, 37172, 
+    37176, 25976, 37180, 37184, 37190, 37194, 9049, 37203, 37210, 37214, 
+    11875, 37221, 37227, 37232, 37239, 37246, 37253, 28571, 8049, 37260, 
+    37267, 37274, 37280, 37285, 37292, 37303, 37309, 37314, 37319, 37324, 
+    37331, 37079, 37335, 37345, 37356, 37362, 37367, 37372, 37377, 37382, 
+    37387, 37391, 37395, 37401, 37409, 2319, 865, 10261, 10273, 10278, 10284, 
+    37418, 10289, 10294, 10300, 37423, 37433, 37437, 10305, 37442, 16903, 
+    37445, 37450, 37454, 37459, 37464, 37471, 37478, 37482, 37485, 37493, 
+    10208, 37500, 37503, 37509, 37519, 5929, 37528, 37532, 37540, 37544, 
+    37554, 37560, 37571, 37577, 37583, 37588, 37594, 37600, 37606, 37611, 
+    37614, 37621, 37627, 37632, 37639, 37646, 37650, 37660, 37673, 37682, 
+    37691, 37702, 37715, 37726, 37735, 37746, 37751, 37760, 37765, 10310, 
+    37771, 37778, 37786, 37791, 37795, 37802, 37809, 3829, 16, 37813, 37818, 
+    16757, 37822, 37825, 37828, 28077, 37832, 28580, 37840, 37844, 37848, 
+    37851, 37857, 37101, 37863, 37871, 37877, 37884, 28060, 37888, 28254, 
+    37892, 37901, 37907, 37913, 37918, 37922, 37928, 37932, 37940, 37948, 
+    26194, 37954, 37961, 37967, 37972, 37977, 37981, 37987, 37992, 37998, 
+    4056, 791, 38005, 38009, 38012, 15275, 38024, 35851, 38035, 38038, 38045, 
+    38049, 38055, 38059, 38065, 38070, 38076, 38081, 38086, 38090, 38094, 
+    38099, 38104, 38114, 38120, 38133, 38139, 38145, 38152, 38157, 38163, 
+    38168, 16643, 1472, 1019, 31218, 31224, 38173, 31230, 31243, 31249, 
+    31255, 38179, 31261, 31267, 38185, 38191, 22, 38199, 38206, 38210, 38214, 
+    38222, 31978, 38226, 38230, 38237, 38242, 38246, 38251, 38257, 38262, 
+    38268, 38273, 38277, 38281, 38285, 38290, 38294, 38299, 38303, 38310, 
+    38315, 38319, 38324, 38328, 38333, 38337, 38342, 38348, 15495, 15500, 
+    38353, 38357, 38360, 38364, 21183, 38369, 38373, 38379, 38386, 38391, 
+    38401, 38406, 38414, 38418, 38421, 31993, 38425, 4109, 38430, 38435, 
+    38439, 38444, 38448, 38453, 13375, 38464, 38468, 38471, 38476, 38480, 
+    38484, 38487, 38491, 8145, 13391, 38494, 38497, 38503, 38508, 38514, 
+    38519, 38525, 38530, 38536, 38541, 38547, 38553, 38559, 38564, 38568, 
+    38572, 38581, 38597, 38613, 38623, 27967, 38630, 38634, 38639, 38644, 
+    38648, 38652, 35972, 38658, 38663, 38667, 38674, 38679, 38683, 38687, 
+    26996, 38693, 21451, 38698, 38705, 38713, 38719, 38726, 38734, 38740, 
+    38744, 38750, 38758, 38762, 38771, 9509, 38779, 38783, 38791, 38798, 
+    38803, 38808, 38812, 38815, 38819, 38822, 38826, 38833, 38838, 38844, 
+    26415, 31281, 38848, 38855, 38861, 38867, 38872, 38875, 38877, 38884, 
+    38891, 38897, 38901, 38904, 38908, 38912, 38916, 38921, 38925, 38929, 
+    38932, 38936, 38950, 23062, 38969, 38982, 38995, 39008, 23080, 39023, 
+    10497, 39038, 39044, 39048, 39052, 39059, 39064, 39068, 39075, 39081, 
+    39086, 39092, 39102, 39114, 39125, 39130, 39137, 39141, 39145, 39148, 
+    15891, 3677, 39156, 15522, 39169, 39176, 39180, 39184, 39189, 39194, 
+    39200, 39204, 39208, 39211, 7742, 15533, 39216, 39220, 39226, 39235, 
+    39240, 39247, 35828, 39253, 39258, 39262, 39267, 39274, 39278, 39281, 
+    39285, 39290, 14565, 39297, 39304, 1077, 39308, 39313, 39318, 39324, 
+    39329, 39334, 39338, 39348, 39353, 39359, 39364, 39370, 39375, 39381, 
+    39391, 39396, 39401, 39405, 7229, 7241, 39410, 39413, 39420, 39426, 
+    34084, 34091, 39435, 39439, 32041, 39447, 39458, 39466, 36020, 39473, 
+    39478, 39483, 39494, 39501, 39512, 32065, 21457, 39520, 735, 39525, 
+    39531, 28051, 39537, 39542, 39552, 39561, 39568, 39574, 39578, 39581, 
+    39588, 39594, 39601, 39607, 39617, 39625, 39631, 39637, 39642, 39646, 
+    39653, 39659, 39666, 38917, 535, 13818, 39672, 39677, 39680, 39686, 
+    39694, 1396, 39699, 39703, 39708, 39715, 39721, 39725, 39729, 39734, 
+    39743, 39750, 39760, 39766, 28095, 39783, 39792, 39800, 39806, 39811, 
+    39818, 39824, 39832, 39841, 39849, 39853, 39858, 39866, 32074, 39872, 
+    39891, 15824, 39905, 39921, 39935, 39941, 39946, 39951, 39956, 39962, 
+    32080, 39967, 39974, 39979, 39983, 345, 2936, 39990, 39995, 40000, 27322, 
+    39821, 40004, 40009, 40017, 40021, 40024, 40030, 40036, 40040, 28150, 
+    40043, 40048, 40052, 40055, 40060, 40064, 40069, 40074, 40078, 40083, 
+    40087, 40091, 21179, 21190, 40095, 40100, 40106, 26953, 40111, 40115, 
+    21266, 16072, 40118, 40123, 40128, 40133, 40138, 40143, 40148, 40153, 
+    450, 49, 31299, 31304, 31309, 31315, 31320, 31325, 40158, 31329, 40162, 
+    40166, 40170, 31334, 31340, 40184, 31351, 31356, 40192, 40197, 31362, 
+    40202, 40207, 40212, 40217, 40223, 40229, 40235, 31379, 40248, 40254, 
+    31383, 40258, 31388, 40263, 31393, 31398, 40266, 40271, 40275, 30948, 
+    40281, 13599, 40288, 40293, 31403, 40297, 40302, 40307, 40312, 40316, 
+    40321, 40326, 40332, 40337, 40342, 40348, 40354, 40359, 40363, 40368, 
+    40373, 40378, 40382, 40387, 40392, 40397, 40403, 40409, 40415, 40420, 
+    40424, 40429, 40433, 31407, 31412, 31417, 40437, 40441, 40445, 31422, 
+    31428, 31434, 31446, 40457, 26013, 40461, 40465, 40470, 40475, 40480, 
+    40485, 40489, 40493, 40503, 40508, 40513, 40517, 40521, 40524, 40532, 
+    31494, 40537, 1479, 40543, 40551, 40560, 40564, 40568, 40576, 40582, 
+    40590, 40606, 40610, 40614, 40619, 40634, 31531, 1749, 12055, 40638, 
+    1378, 40650, 40651, 40659, 40666, 40671, 40678, 40683, 9379, 1119, 10332, 
+    40690, 40695, 40698, 40701, 40710, 1286, 40715, 39065, 40722, 40727, 
+    40731, 22503, 2557, 40739, 10741, 40749, 40755, 2337, 2347, 40764, 40773, 
+    40783, 40794, 3293, 34237, 10384, 3807, 16681, 1291, 40799, 40807, 40814, 
+    40819, 40823, 40827, 23875, 10411, 40835, 40844, 40853, 40861, 40868, 
+    40879, 40884, 40897, 40910, 40922, 40934, 40946, 40959, 40970, 40981, 
+    40991, 40999, 41007, 41019, 41031, 41042, 41051, 41059, 41066, 41078, 
+    41085, 41094, 41101, 41114, 41119, 41129, 41134, 41140, 41145, 37211, 
+    41149, 41156, 41160, 41167, 41175, 2518, 41182, 41193, 41203, 41212, 
+    41220, 41230, 41238, 41248, 41257, 41262, 41268, 41274, 3709, 41285, 
+    41295, 41304, 41313, 41323, 41331, 41340, 41345, 41350, 41355, 1705, 37, 
+    41363, 41371, 41382, 41393, 16356, 41403, 41407, 41414, 41420, 41425, 
+    41429, 41440, 41450, 41459, 41470, 16730, 16735, 41475, 41484, 41489, 
+    41499, 41504, 41512, 41520, 41527, 41533, 7078, 228, 41537, 41543, 41548, 
+    41551, 2117, 39181, 41559, 41563, 41566, 1512, 41572, 13980, 1296, 41577, 
+    41590, 41604, 2643, 41622, 41634, 41646, 2657, 2674, 41660, 41673, 2689, 
+    41687, 41699, 2704, 41713, 1302, 1308, 1314, 10659, 41718, 41723, 41728, 
+    41732, 41747, 41762, 41777, 41792, 41807, 41822, 41837, 41852, 41867, 
+    41882, 41897, 41912, 41927, 41942, 41957, 41972, 41987, 42002, 42017, 
+    42032, 42047, 42062, 42077, 42092, 42107, 42122, 42137, 42152, 42167, 
+    42182, 42197, 42212, 42227, 42242, 42257, 42272, 42287, 42302, 42317, 
+    42332, 42347, 42362, 42377, 42392, 42407, 42422, 42437, 42452, 42467, 
+    42482, 42497, 42512, 42527, 42542, 42557, 42572, 42587, 42602, 42617, 
+    42632, 42647, 42662, 42677, 42692, 42707, 42722, 42737, 42752, 42767, 
+    42782, 42797, 42812, 42827, 42842, 42857, 42872, 42887, 42902, 42917, 
+    42932, 42947, 42962, 42977, 42992, 43007, 43022, 43037, 43052, 43067, 
+    43082, 43097, 43112, 43127, 43142, 43157, 43172, 43187, 43202, 43217, 
+    43232, 43247, 43262, 43277, 43292, 43307, 43322, 43337, 43352, 43367, 
+    43382, 43397, 43412, 43427, 43442, 43457, 43472, 43487, 43502, 43517, 
+    43532, 43547, 43562, 43577, 43592, 43607, 43622, 43637, 43652, 43667, 
+    43682, 43697, 43712, 43727, 43742, 43757, 43772, 43787, 43802, 43817, 
+    43832, 43847, 43862, 43877, 43892, 43907, 43922, 43937, 43952, 43967, 
+    43982, 43997, 44012, 44027, 44042, 44057, 44072, 44087, 44102, 44117, 
+    44132, 44147, 44162, 44177, 44192, 44207, 44222, 44237, 44252, 44267, 
+    44282, 44297, 44312, 44327, 44342, 44357, 44372, 44387, 44402, 44417, 
+    44432, 44447, 44462, 44477, 44492, 44507, 44522, 44537, 44552, 44567, 
+    44582, 44597, 44612, 44627, 44642, 44657, 44672, 44687, 44702, 44717, 
+    44732, 44747, 44762, 44777, 44792, 44807, 44822, 44837, 44852, 44867, 
+    44882, 44897, 44912, 44927, 44942, 44957, 44972, 44987, 45002, 45017, 
+    45032, 45047, 45062, 45077, 45092, 45107, 45122, 45137, 45152, 45167, 
+    45182, 45197, 45212, 45227, 45242, 45257, 45272, 45287, 45302, 45317, 
+    45332, 45347, 45362, 45377, 45392, 45407, 45422, 45437, 45452, 45467, 
+    45482, 45497, 45512, 45527, 45542, 45557, 45572, 45587, 45602, 45617, 
+    45632, 45647, 45662, 45677, 45692, 45707, 45722, 45737, 45752, 45767, 
+    45782, 45797, 45812, 45827, 45842, 45857, 45872, 45887, 45902, 45917, 
+    45932, 45947, 45962, 45977, 45992, 46007, 46022, 46037, 46052, 46067, 
+    46082, 46097, 46112, 46127, 46142, 46157, 46172, 46187, 46202, 46217, 
+    46232, 46247, 46262, 46277, 46292, 46307, 46322, 46337, 46352, 46367, 
+    46382, 46397, 46412, 46427, 46442, 46457, 46472, 46487, 46502, 46517, 
+    46532, 46547, 46562, 46577, 46592, 46607, 46622, 46637, 46652, 46667, 
+    46682, 46697, 46712, 46727, 46742, 46757, 46772, 46787, 46802, 46817, 
+    46832, 46847, 46862, 46877, 46892, 46907, 46922, 46937, 46952, 46967, 
+    46982, 46997, 47012, 47027, 47042, 47057, 47072, 47087, 47102, 47117, 
+    47132, 47147, 47162, 47177, 47192, 47207, 47222, 47237, 47252, 47267, 
+    47282, 47297, 47312, 47327, 47342, 47357, 47372, 47387, 47402, 47417, 
+    47432, 47447, 47462, 47477, 47492, 47507, 47522, 47537, 47552, 47567, 
+    47582, 47597, 47612, 47627, 47642, 47657, 47672, 47687, 47702, 47717, 
+    47732, 47747, 47762, 47777, 47792, 47807, 47822, 47837, 47852, 47867, 
+    47882, 47897, 47912, 47927, 47942, 47957, 47972, 47987, 48002, 48017, 
+    48032, 48047, 48062, 48077, 48092, 48107, 48122, 48137, 48152, 48167, 
+    48182, 48197, 48212, 48227, 48242, 48257, 48272, 48287, 48302, 48317, 
+    48332, 48347, 48362, 48377, 48392, 48407, 48422, 48437, 48452, 48467, 
+    48482, 48497, 48512, 48527, 48542, 48557, 48572, 48587, 48602, 48617, 
+    48632, 48647, 48662, 48677, 48692, 48707, 48722, 48737, 48752, 48767, 
+    48782, 48797, 48812, 48827, 48842, 48857, 48872, 48887, 48902, 48917, 
+    48932, 48947, 48962, 48977, 48992, 49007, 49022, 49037, 49052, 49067, 
+    49082, 49097, 49112, 49127, 49142, 49157, 49172, 49187, 49202, 49217, 
+    49232, 49247, 49262, 49277, 49292, 49307, 49322, 49337, 49352, 49367, 
+    49382, 49397, 49412, 49427, 49442, 49457, 49472, 49487, 49502, 49517, 
+    49532, 49548, 49564, 49580, 49596, 49612, 49628, 49644, 49660, 49676, 
+    49692, 49708, 49724, 49740, 49756, 49772, 49788, 49804, 49820, 49836, 
+    49852, 49868, 49884, 49900, 49916, 49932, 49948, 49964, 49980, 49996, 
+    50012, 50028, 50044, 50060, 50076, 50092, 50108, 50124, 50140, 50156, 
+    50172, 50188, 50204, 50220, 50236, 50252, 50268, 50284, 50300, 50316, 
+    50332, 50348, 50364, 50380, 50396, 50412, 50428, 50444, 50460, 50476, 
+    50492, 50508, 50524, 50540, 50556, 50572, 50588, 50604, 50620, 50636, 
+    50652, 50668, 50684, 50700, 50716, 50732, 50748, 50764, 50780, 50796, 
+    50812, 50828, 50844, 50860, 50876, 50892, 50908, 50924, 50940, 50956, 
+    50972, 50988, 51004, 51020, 51036, 51052, 51068, 51084, 51100, 51116, 
+    51132, 51148, 51164, 51180, 51196, 51212, 51228, 51244, 51260, 51276, 
+    51292, 51308, 51324, 51340, 51356, 51372, 51388, 51404, 51420, 51436, 
+    51452, 51468, 51484, 51500, 51516, 51532, 51548, 51564, 51580, 51596, 
+    51612, 51628, 51644, 51660, 51676, 51692, 51708, 51724, 51740, 51756, 
+    51772, 51788, 51804, 51820, 51836, 51852, 51868, 51884, 51900, 51916, 
+    51932, 51948, 51964, 51980, 51996, 52012, 52028, 52044, 52060, 52076, 
+    52092, 52108, 52124, 52140, 52156, 52172, 52188, 52204, 52220, 52236, 
+    52252, 52268, 52284, 52300, 52316, 52332, 52348, 52364, 52380, 52396, 
+    52412, 52428, 52444, 52460, 52476, 52492, 52508, 52524, 52540, 52556, 
+    52572, 52588, 52604, 52620, 52636, 52652, 52668, 52684, 52700, 52716, 
+    52732, 52748, 52764, 52780, 52796, 52812, 52828, 52844, 52860, 52876, 
+    52892, 52908, 52924, 52940, 52956, 52972, 52988, 53004, 53020, 53036, 
+    53052, 53068, 53084, 53100, 53116, 53132, 53148, 53164, 53180, 53196, 
+    53212, 53228, 53244, 53260, 53276, 53292, 53308, 53324, 53340, 53356, 
+    53372, 53388, 53404, 53420, 53436, 53452, 53468, 53484, 53500, 53516, 
+    53532, 53548, 53564, 53580, 53596, 53612, 53628, 53644, 53660, 53676, 
+    53692, 53708, 53724, 53740, 53756, 53772, 53788, 53804, 53820, 53836, 
+    53852, 53868, 53884, 53900, 53916, 53932, 53948, 53964, 53980, 53996, 
+    54012, 54028, 54044, 54060, 54076, 54092, 54108, 54124, 54140, 54156, 
+    54172, 54188, 54204, 54220, 54236, 54252, 54268, 54284, 54300, 54316, 
+    54332, 54348, 54364, 54380, 54396, 54412, 54428, 54444, 54460, 54476, 
+    54492, 54508, 54524, 54540, 54556, 54572, 54588, 54604, 54620, 54636, 
+    54652, 54668, 54684, 54700, 54716, 54732, 54748, 54764, 54780, 54796, 
+    54812, 54828, 54844, 54860, 54876, 54892, 54908, 54924, 54940, 54956, 
+    54972, 54988, 55004, 55020, 55036, 55052, 55068, 55084, 55100, 55116, 
+    55132, 55148, 55164, 55180, 55196, 55212, 55228, 55244, 55260, 55276, 
+    55292, 55308, 55324, 55340, 55356, 55372, 55388, 55404, 55420, 55436, 
+    55452, 55468, 55484, 55500, 55516, 55532, 55548, 55564, 55580, 55596, 
+    55612, 55628, 55644, 55660, 55676, 55692, 55708, 55724, 55740, 55756, 
+    55772, 55788, 55804, 55820, 55836, 55852, 55868, 55884, 55900, 55916, 
+    55932, 55948, 55964, 55980, 55996, 56012, 56028, 56044, 56060, 56076, 
+    56092, 56108, 56124, 56140, 56156, 56172, 56188, 56204, 56220, 56236, 
+    56252, 56268, 56284, 56300, 56316, 56332, 56348, 56364, 56380, 56396, 
+    56412, 56428, 56444, 56460, 56476, 56492, 56508, 56524, 56540, 56556, 
+    56572, 56588, 56604, 56620, 56636, 56652, 56668, 56684, 56700, 56716, 
+    56732, 56748, 56764, 56780, 56796, 56812, 56828, 56844, 56860, 56876, 
+    56892, 56908, 56924, 56940, 56956, 56972, 56988, 57004, 57020, 57036, 
+    57052, 57068, 57084, 57100, 57116, 57132, 57148, 57164, 57180, 57196, 
+    57212, 57228, 57244, 57260, 57276, 57292, 57308, 57324, 57340, 57356, 
+    57372, 57388, 57404, 57420, 57436, 57452, 57468, 57484, 57500, 57516, 
+    57532, 57548, 57564, 57580, 57596, 57612, 57628, 57644, 57660, 57676, 
+    57692, 57708, 57724, 57740, 57756, 57772, 57788, 57804, 57820, 57836, 
+    57852, 57868, 57884, 57900, 57916, 57932, 57948, 57964, 57980, 57996, 
+    58012, 58028, 58044, 58060, 58076, 58092, 58108, 58124, 58140, 58156, 
+    58172, 58188, 58204, 58219, 16762, 58228, 58234, 58240, 58250, 58258, 
+    14894, 15445, 9960, 58271, 1520, 58279, 3761, 27432, 7183, 58285, 58290, 
+    58295, 58300, 58305, 58311, 58316, 58322, 58327, 58333, 58338, 58343, 
+    58348, 58353, 58359, 58364, 58369, 58374, 58379, 58384, 58389, 58394, 
+    58400, 58405, 58411, 58418, 2561, 58423, 58429, 8526, 58433, 58438, 
+    58445, 58453, 40, 58457, 58463, 58468, 58473, 58477, 58482, 58486, 58490, 
+    10684, 58494, 58504, 58517, 58528, 58541, 58548, 58554, 58559, 58565, 
+    58571, 58577, 58582, 58587, 58592, 58597, 58601, 58606, 58611, 58616, 
+    58622, 58628, 58634, 58639, 58643, 58648, 58653, 58657, 58662, 58667, 
+    58672, 58676, 10700, 10711, 10716, 1563, 58680, 1568, 58686, 16239, 
+    58689, 58695, 1599, 58701, 1605, 1611, 10746, 58706, 58714, 58721, 58725, 
+    58731, 58736, 30977, 58741, 58748, 58753, 58757, 58761, 1616, 16331, 
+    58770, 58774, 16342, 1125, 58778, 58785, 58790, 58794, 16367, 1620, 
+    37350, 58797, 58802, 58812, 58821, 58826, 58830, 58836, 1625, 39259, 
+    58841, 58850, 58856, 58861, 10904, 10910, 58867, 58879, 58896, 58913, 
+    58930, 58947, 58964, 58981, 58998, 59015, 59032, 59049, 59066, 59083, 
+    59100, 59117, 59134, 59151, 59168, 59185, 59202, 59219, 59236, 59253, 
+    59270, 59287, 59304, 59321, 59338, 59355, 59372, 59389, 59406, 59423, 
+    59440, 59457, 59474, 59491, 59508, 59525, 59542, 59559, 59576, 59593, 
+    59610, 59627, 59644, 59661, 59678, 59695, 59712, 59723, 59728, 1630, 
+    59732, 59738, 59743, 59748, 9326, 1635, 59754, 59763, 27731, 59768, 
+    59779, 59789, 59794, 59801, 59807, 59812, 59817, 16619, 59821, 10921, 
+    1640, 10926, 59827, 59832, 59838, 59843, 59848, 59853, 59858, 59863, 
+    59868, 59873, 59879, 59885, 59891, 59896, 59900, 59905, 59910, 59914, 
+    59919, 59924, 59929, 59933, 59938, 59944, 59949, 59954, 59958, 59963, 
+    59968, 59974, 59979, 59984, 59990, 59996, 60001, 60005, 60010, 60015, 
+    60020, 60024, 60029, 60034, 60039, 60045, 60051, 60056, 60060, 60064, 
+    60069, 60074, 60079, 29129, 60083, 60088, 60093, 60099, 60104, 60109, 
+    60113, 60118, 60123, 60129, 60134, 60139, 60145, 60151, 60156, 60160, 
+    60165, 60170, 60174, 60179, 60184, 60189, 60195, 60201, 60206, 60210, 
+    60215, 60220, 60224, 60229, 60234, 60239, 60243, 60246, 31639, 60251, 
+    60259, 16685, 3663, 11017, 60265, 60275, 60290, 11022, 60301, 60306, 
+    60317, 60329, 60341, 60353, 2695, 60365, 60370, 60382, 60386, 60392, 
+    60398, 60403, 1652, 1078, 60412, 60417, 39309, 60421, 60425, 60430, 
+    60434, 16770, 60439, 60442, 60450, 60458, 1656, 11047, 11053, 1661, 
+    60466, 60473, 60478, 60487, 60497, 60504, 60509, 60514, 1666, 60521, 
+    60526, 16885, 60530, 60535, 60542, 60548, 60552, 60563, 60573, 16907, 
+    9234, 9241, 1671, 60580, 60586, 60594, 60601, 60607, 60614, 60626, 60632, 
+    60637, 60649, 60660, 60669, 60679, 3740, 30813, 30822, 16947, 1676, 1680, 
+    60687, 60698, 60703, 1683, 60711, 60716, 16998, 60728, 60734, 60739, 
+    60747, 1688, 60752, 60757, 60765, 60773, 60780, 60789, 60797, 60806, 
+    1693, 60810, 1698, 60815, 60822, 17072, 60830, 60836, 60841, 60849, 
+    60856, 60864, 22574, 60869, 11182, 60878, 60884, 60891, 60898, 60904, 
+    60914, 60920, 60925, 60936, 60941, 60949, 11191, 11196, 60957, 60963, 
+    60971, 3805, 17114, 39397, 60976, 60982, 60987, 60995, 61002, 12036, 
+    61007, 61013, 1709, 61018, 61021, 1132, 61027, 61032, 61037, 61043, 
+    61048, 61053, 61058, 61063, 61068, 61073, 1718, 9, 61079, 61083, 61088, 
+    61092, 61096, 61100, 31879, 61105, 61110, 61115, 61119, 61122, 61126, 
+    61130, 61135, 61139, 61144, 61148, 34616, 34621, 34626, 61151, 61158, 
+    61164, 39118, 61174, 34632, 32137, 31894, 31900, 34648, 31906, 61179, 
+    61184, 32170, 61188, 61191, 61195, 61202, 61205, 61210, 61214, 61218, 
+    61221, 61231, 61243, 61250, 61256, 61263, 33573, 61266, 8543, 877, 61269, 
+    61273, 61278, 3690, 61282, 61285, 13632, 61292, 61299, 61312, 61320, 
+    61329, 61338, 61343, 61353, 61366, 61378, 61385, 61390, 61399, 61412, 
+    36060, 61430, 61435, 61442, 61448, 656, 61453, 61461, 61468, 27271, 627, 
+    61474, 61480, 61490, 61496, 61501, 31924, 6003, 31938, 61505, 61515, 
+    61520, 61530, 61545, 61551, 61557, 31948, 61562, 31094, 61566, 61571, 
+    61576, 61580, 61585, 16950, 61592, 61597, 61601, 6044, 31974, 61605, 
+    61611, 312, 61621, 61628, 61635, 61640, 61649, 58806, 61655, 61663, 
+    61667, 61671, 61675, 61679, 61684, 61688, 61694, 61702, 61707, 61712, 
+    61716, 61721, 61725, 61729, 61735, 61741, 61746, 61750, 32098, 61755, 
+    32104, 32110, 61760, 61766, 61773, 61778, 61782, 31111, 16612, 61785, 
+    61789, 61794, 61801, 61807, 61811, 61816, 38828, 61822, 61826, 61830, 
+    61835, 61841, 61847, 61859, 61868, 61878, 61884, 61891, 61896, 61901, 
+    61905, 61908, 61914, 61921, 61926, 61931, 61938, 61945, 61951, 61956, 
+    61961, 61969, 32115, 2423, 61974, 61979, 61985, 61990, 61996, 62001, 
+    62006, 62011, 62017, 32136, 62022, 62028, 62034, 62040, 32200, 62045, 
+    62050, 62055, 32211, 62060, 62065, 62070, 62076, 62082, 32216, 62087, 
+    62092, 62097, 32271, 32277, 62102, 62107, 32282, 62112, 27958, 32304, 
+    32308, 62117, 62093, 62121, 62129, 62135, 62143, 62150, 62156, 62166, 
+    62172, 62179, 10631, 32322, 62185, 62198, 62207, 62213, 62222, 62228, 
+    23512, 62235, 62242, 62252, 32272, 62255, 62262, 62267, 62271, 62275, 
+    62280, 6120, 62284, 62289, 62294, 34710, 34715, 62298, 34729, 62303, 
+    34734, 62308, 62314, 34746, 34752, 34758, 62319, 62325, 22539, 62336, 
+    62339, 62351, 62359, 32345, 62363, 62372, 62382, 62391, 32355, 62396, 
+    62403, 62412, 62418, 62426, 62433, 6095, 4397, 62438, 32283, 62444, 
+    62447, 62453, 62460, 62465, 62470, 23422, 62474, 62480, 62486, 62491, 
+    62496, 62500, 62506, 62512, 33483, 863, 35723, 36644, 36650, 32391, 
+    62517, 62521, 62525, 62528, 62541, 62547, 62551, 62554, 62559, 33786, 
+    62563, 31116, 21287, 62569, 6024, 6032, 9075, 62572, 62577, 62582, 62587, 
+    62592, 62597, 62602, 62607, 62612, 62617, 62623, 62628, 62633, 62639, 
+    62644, 62649, 62654, 62659, 62664, 62669, 62675, 62680, 62686, 62691, 
+    62696, 62701, 62706, 62711, 62716, 62721, 62726, 62731, 62736, 62742, 
+    62747, 62752, 62757, 62762, 62767, 62772, 62778, 62783, 62788, 62793, 
+    62798, 62803, 62808, 62813, 62818, 62823, 62829, 62834, 62839, 62844, 
+    62849, 62855, 62861, 62866, 62872, 62877, 62882, 62887, 62892, 62897, 
+    1513, 245, 62902, 62906, 62910, 62914, 25133, 62918, 62922, 62927, 62931, 
+    62936, 62940, 62945, 62950, 62955, 62959, 62963, 62968, 62972, 13369, 
+    62977, 62981, 62988, 62998, 15206, 63007, 63016, 63020, 63025, 63030, 
+    63034, 24924, 3019, 63038, 63044, 17363, 63048, 63057, 63065, 63071, 
+    63083, 63095, 63099, 63104, 63108, 63114, 63120, 63125, 63135, 63145, 
+    63151, 63156, 63160, 63165, 63171, 63180, 63189, 63197, 15560, 63201, 
+    63210, 63218, 63230, 63241, 63252, 63261, 63265, 63274, 63284, 63292, 
+    63298, 63303, 63309, 63314, 98, 30925, 63325, 26266, 26276, 63331, 63338, 
+    63344, 63348, 63358, 63369, 63377, 63386, 63391, 63396, 63400, 17317, 
+    63408, 63412, 63418, 63428, 63435, 63441, 34809, 63447, 63449, 63452, 
+    63456, 63466, 63472, 63479, 13315, 63486, 63492, 63501, 63510, 63516, 
+    63522, 63528, 63533, 63540, 63547, 63553, 63566, 63575, 63584, 63589, 
+    63593, 63599, 63606, 63613, 63620, 63627, 63634, 63639, 63643, 63647, 
+    63650, 63660, 63664, 63676, 63685, 63689, 63694, 63698, 63704, 63709, 
+    63716, 63725, 63733, 63741, 63746, 63750, 63755, 63760, 63770, 63778, 
+    63783, 63787, 63791, 63797, 63809, 63817, 63827, 63834, 63840, 63845, 
+    63849, 63853, 63857, 63866, 63875, 63884, 63890, 63896, 63902, 63907, 
+    63914, 63920, 63928, 63935, 12463, 63941, 63947, 63951, 14244, 63955, 
+    63960, 63970, 63979, 63985, 63991, 63999, 64006, 64010, 64014, 64020, 
+    64028, 64035, 64041, 64052, 64056, 64060, 64064, 64067, 64073, 64078, 
+    64082, 64086, 64095, 64103, 64110, 64116, 64123, 24046, 38870, 64128, 
+    64136, 64140, 64144, 64147, 64155, 64162, 64168, 64177, 64185, 64191, 
+    64196, 64200, 64205, 64209, 64213, 64218, 64227, 64231, 64238, 64245, 
+    64251, 64259, 64265, 64276, 64284, 64290, 22669, 64299, 64306, 64313, 
+    64320, 64327, 64334, 41907, 13153, 64341, 64348, 64353, 34845, 6217, 
+    64359, 64364, 64369, 64375, 64381, 64387, 64392, 64397, 64402, 64407, 
+    64413, 64418, 64424, 64429, 64435, 64440, 64445, 64450, 64455, 64460, 
+    64465, 64470, 64476, 64481, 64487, 64492, 64497, 64502, 64507, 64512, 
+    64517, 64523, 64528, 64533, 64538, 64543, 64548, 64553, 64558, 64563, 
+    64568, 64573, 64579, 64584, 64589, 64594, 64599, 64604, 64609, 64614, 
+    64619, 64625, 64630, 64635, 64640, 64645, 64650, 64655, 64660, 64665, 
+    64670, 64675, 64680, 64685, 64691, 1834, 224, 37446, 64696, 64699, 64704, 
+    64708, 64711, 64716, 63737, 64727, 64737, 64744, 64760, 64769, 64779, 
+    64789, 64797, 64811, 64819, 64823, 64826, 64833, 64839, 64850, 64862, 
+    64873, 64882, 64889, 1297, 23311, 64899, 2590, 64903, 64912, 1138, 17290, 
+    38083, 64920, 64928, 64942, 64955, 64959, 64964, 64969, 64974, 64980, 
+    64986, 64991, 8535, 64996, 65000, 65008, 11048, 65013, 65019, 65028, 
+    1721, 11060, 736, 65032, 65041, 65051, 27030, 65060, 65066, 16862, 65072, 
+    65076, 3964, 11391, 65082, 65089, 60693, 65093, 65097, 3988, 189, 14159, 
+    65103, 65115, 65119, 65125, 27751, 65129, 11379, 2730, 4, 65134, 65144, 
+    65150, 65161, 65168, 65174, 65180, 65188, 65195, 65201, 65211, 65221, 
+    65231, 23499, 1309, 65240, 65244, 65248, 65254, 65258, 2753, 2759, 8532, 
+    2264, 65262, 65266, 65275, 65283, 65294, 65302, 65310, 65316, 65321, 
+    65332, 65343, 65351, 65357, 9694, 65362, 65370, 65374, 65378, 65382, 
+    65394, 28136, 65401, 65411, 65417, 65423, 9796, 65433, 65444, 65454, 
+    65463, 65467, 65474, 1140, 1170, 65484, 65489, 65497, 65505, 65516, 
+    65523, 65537, 14088, 393, 65547, 65551, 65559, 65568, 65576, 65582, 
+    65596, 65603, 65609, 65618, 65625, 65635, 65643, 3812, 156, 65651, 65662, 
+    65666, 65678, 27949, 161, 65684, 65689, 65693, 65700, 65706, 65714, 
+    65721, 8818, 65728, 65737, 65745, 3878, 65758, 8199, 65762, 2798, 443, 
+    65767, 65780, 65785, 1833, 650, 65789, 3895, 65797, 65803, 65807, 931, 
+    65817, 65826, 65831, 14928, 14935, 45269, 65835, 3822, 13041, 65843, 
+    65850, 23555, 65854, 65861, 65867, 65872, 65877, 14948, 372, 65882, 
+    65894, 65900, 65908, 2810, 1753, 65916, 65918, 65923, 65928, 65933, 
+    65939, 65944, 65949, 65954, 65959, 65964, 65969, 65975, 65980, 65985, 
+    65990, 65995, 66000, 66005, 66010, 66015, 66021, 66026, 66031, 66036, 
+    66042, 66047, 66053, 66058, 66063, 66068, 66073, 66078, 66083, 66088, 
+    66094, 66099, 66105, 66110, 66115, 66120, 66125, 66130, 66135, 66140, 
+    66145, 66151, 66156, 66161, 66166, 66170, 66174, 66179, 66183, 66188, 
+    66193, 66199, 66204, 66208, 66213, 66217, 66220, 66222, 66226, 66229, 
+    66234, 66238, 66242, 66246, 66250, 66259, 66263, 32549, 66266, 32554, 
+    66273, 66278, 32559, 66287, 66296, 32565, 66301, 32570, 66310, 66315, 
+    11578, 66319, 66324, 66329, 32575, 66333, 40225, 66337, 66340, 66344, 
+    8211, 66350, 66355, 66359, 3705, 32580, 66362, 66366, 66369, 66374, 
+    66378, 66384, 66392, 66405, 66414, 66420, 66425, 66431, 66435, 66441, 
+    66449, 66454, 66458, 66465, 66471, 66479, 66488, 66496, 32583, 66503, 
+    66513, 66522, 66535, 66540, 66545, 66554, 66560, 66567, 66578, 66590, 
+    66597, 66606, 66615, 66624, 66631, 66637, 66644, 66652, 66659, 66667, 
+    66676, 66684, 66691, 66699, 66708, 66716, 66725, 66735, 66744, 66752, 
+    66759, 66767, 66776, 66784, 66793, 66803, 66812, 66820, 66829, 66839, 
+    66848, 66858, 66869, 66879, 66888, 66896, 66903, 66911, 66920, 66928, 
+    66937, 66947, 66956, 66964, 66973, 66983, 66992, 67002, 67013, 67023, 
+    67032, 67040, 67049, 67059, 67068, 67078, 67089, 67099, 67108, 67118, 
+    67129, 67139, 67150, 67162, 67173, 67183, 67192, 67200, 67207, 67215, 
+    67224, 67232, 67241, 67251, 67260, 67268, 67277, 67287, 67296, 67306, 
+    67317, 67327, 67336, 67344, 67353, 67363, 67372, 67382, 67393, 67403, 
+    67412, 67422, 67433, 67443, 67454, 67466, 67477, 67487, 67496, 67504, 
+    67513, 67523, 67532, 67542, 67553, 67563, 67572, 67582, 67593, 67603, 
+    67614, 67626, 67637, 67647, 67656, 67666, 67677, 67687, 67698, 67710, 
+    67721, 67731, 67742, 67754, 67765, 67777, 67790, 67802, 67813, 67823, 
+    67832, 67840, 67847, 67855, 67864, 67872, 67881, 67891, 67900, 67908, 
+    67917, 67927, 67936, 67946, 67957, 67967, 67976, 67984, 67993, 68003, 
+    68012, 68022, 68033, 68043, 68052, 68062, 68073, 68083, 68094, 68106, 
+    68117, 68127, 68136, 68144, 68153, 68163, 68172, 68182, 68193, 68203, 
+    68212, 68222, 68233, 68243, 68254, 68266, 68277, 68287, 68296, 68306, 
+    68317, 68327, 68338, 68350, 68361, 68371, 68382, 68394, 68405, 68417, 
+    68430, 68442, 68453, 68463, 68472, 68480, 68489, 68499, 68508, 68518, 
+    68529, 68539, 68548, 68558, 68569, 68579, 68590, 68602, 68613, 68623, 
+    68632, 68642, 68653, 68663, 68674, 68686, 68697, 68707, 68718, 68730, 
+    68741, 68753, 68766, 68778, 68789, 68799, 68808, 68818, 68829, 68839, 
+    68850, 68862, 68873, 68883, 68894, 68906, 68917, 68929, 68942, 68954, 
+    68965, 68975, 68986, 68998, 69009, 69021, 69034, 69046, 69057, 69069, 
+    69082, 69094, 69107, 69121, 69134, 69146, 69157, 69167, 69176, 69184, 
+    69191, 69196, 8058, 69203, 32593, 69208, 69213, 32598, 69219, 20929, 
+    32603, 69224, 69230, 69238, 69244, 69250, 69257, 69264, 69269, 69273, 
+    69276, 69280, 69289, 69295, 69307, 69318, 69322, 3081, 8033, 69327, 
+    69330, 69332, 69336, 69340, 69344, 69350, 69355, 25944, 69360, 69364, 
+    69367, 69372, 69376, 69383, 69389, 69393, 6170, 69397, 32620, 69402, 
+    69409, 69418, 69426, 69437, 69445, 69453, 69460, 69467, 69473, 69484, 
+    32625, 69489, 69500, 69512, 69520, 69531, 69540, 69551, 69556, 69564, 
+    2556, 69569, 34295, 69582, 69586, 69598, 69606, 69611, 69619, 17485, 
+    69630, 69636, 69643, 69651, 69657, 32635, 69662, 3914, 58254, 69669, 
+    69672, 69680, 69693, 69706, 69719, 69732, 69739, 69750, 69759, 41724, 
+    41729, 69764, 69768, 69776, 69783, 69792, 69800, 69806, 69815, 69823, 
+    69831, 69835, 69844, 69853, 69863, 69876, 69889, 69899, 32640, 69905, 
+    69912, 69918, 32646, 69923, 69926, 69930, 69938, 69947, 41462, 69955, 
+    69964, 69972, 69979, 69987, 69997, 70006, 70015, 70024, 70032, 70043, 
+    70053, 9366, 21567, 70062, 70067, 70072, 70076, 70080, 70085, 70091, 
+    70096, 70101, 70107, 70112, 70117, 21532, 70122, 70129, 70137, 70145, 
+    70150, 70157, 70164, 70169, 70173, 70177, 70185, 70193, 32663, 70199, 
+    70205, 70217, 70223, 70227, 70234, 70239, 70250, 70260, 70270, 70282, 
+    70288, 70298, 70308, 32690, 70317, 70326, 70332, 70344, 70355, 70362, 
+    70367, 70371, 70379, 70385, 70390, 70395, 70402, 70410, 70422, 70432, 
+    70441, 70450, 70457, 34157, 23851, 70463, 70468, 70472, 70476, 70481, 
+    70487, 70498, 70511, 70516, 70523, 32695, 70528, 70540, 70549, 70559, 
+    70570, 70583, 70590, 70599, 70608, 70616, 70621, 70627, 1069, 70632, 
+    70637, 70642, 70647, 70653, 70658, 70663, 70669, 70675, 70680, 70684, 
+    70689, 70694, 70699, 58766, 70704, 70709, 70714, 70719, 70725, 70731, 
+    70736, 70740, 70745, 70750, 70755, 70761, 70766, 70772, 70777, 70782, 
+    70787, 70792, 70796, 70802, 70807, 70816, 70821, 70826, 70831, 70836, 
+    70840, 70847, 70853, 17135, 17142, 70858, 70862, 70866, 70870, 70874, 
+    45524, 70878, 70808, 70880, 70890, 32704, 70893, 70902, 70908, 6143, 
+    32709, 70912, 70918, 70923, 70929, 70934, 70938, 70945, 70950, 70960, 
+    70969, 70973, 70979, 70985, 70991, 70995, 71003, 71010, 71018, 71026, 
+    32714, 71033, 71036, 71043, 71049, 71054, 71058, 71064, 71071, 71076, 
+    71080, 71089, 71097, 71103, 71108, 32719, 71115, 71122, 71128, 71133, 
+    71139, 71146, 71152, 21294, 27455, 71158, 71163, 71169, 71181, 70841, 
+    70848, 21470, 71191, 71196, 71203, 71209, 71216, 71222, 71233, 71238, 
+    9110, 71246, 71249, 71255, 71259, 71263, 71266, 71272, 32468, 6194, 964, 
+    13419, 71279, 71285, 71291, 71297, 71303, 71309, 71315, 71321, 71327, 
+    71332, 71337, 71342, 71347, 71352, 71357, 71362, 71367, 71372, 71377, 
+    71382, 71387, 71392, 71398, 71403, 71408, 71414, 71419, 71424, 71430, 
+    71436, 71442, 71448, 71454, 71460, 71466, 71472, 71478, 71483, 71488, 
+    71494, 71499, 71504, 71510, 71515, 71520, 71525, 71530, 71535, 71540, 
+    71545, 71550, 71555, 71560, 71565, 71570, 71576, 71581, 71586, 71591, 
+    71597, 71602, 71607, 71612, 71617, 71623, 71628, 71633, 71638, 71643, 
+    71648, 71653, 71658, 71663, 71668, 71673, 71678, 71683, 71688, 71693, 
+    71698, 71703, 71708, 71713, 71718, 71724, 71729, 71734, 71739, 71744, 
+    71749, 71754, 71759, 1864, 142, 71764, 71768, 71772, 71777, 71785, 71789, 
+    71796, 71804, 71808, 71821, 71829, 71833, 71836, 71841, 71845, 71850, 
+    71854, 71862, 71866, 20937, 71871, 71875, 60967, 71879, 71882, 71890, 
+    71898, 71906, 71911, 71918, 71924, 71930, 71935, 71942, 71947, 71955, 
+    64947, 71962, 71967, 71972, 71976, 11645, 71980, 71985, 71990, 71994, 
+    71997, 72003, 72007, 72017, 72026, 72029, 72033, 72040, 72053, 72059, 
+    72067, 72078, 72089, 72100, 72111, 72120, 72126, 72135, 72143, 72153, 
+    72166, 72173, 72184, 72190, 72195, 72200, 72206, 72212, 72222, 72231, 
+    70530, 72239, 72245, 72253, 72259, 72267, 72270, 72274, 72278, 72281, 
+    72287, 72293, 72301, 72313, 72325, 72332, 72336, 72347, 72355, 72362, 
+    72374, 72382, 72390, 72397, 72403, 72413, 72422, 72427, 72437, 72446, 
+    40788, 72453, 72457, 72462, 72470, 72477, 72483, 72487, 72497, 72508, 
+    72516, 72523, 72535, 72547, 72556, 69572, 72563, 72574, 72588, 72596, 
+    72606, 72613, 72621, 72633, 72642, 72650, 72660, 72671, 72683, 72692, 
+    72702, 72709, 72718, 72733, 72741, 72751, 72760, 72768, 72781, 72796, 
+    72800, 72809, 72821, 72832, 72843, 72854, 72864, 72875, 72883, 72889, 
+    72899, 72907, 72913, 29028, 72918, 72924, 72929, 72936, 9708, 17505, 
+    72942, 72951, 72956, 72960, 72967, 72973, 72978, 72983, 72991, 72999, 
+    73003, 73006, 73009, 73011, 73018, 73024, 73035, 73040, 73044, 73051, 
+    73057, 73062, 73070, 65446, 65456, 73076, 73083, 73093, 10618, 73100, 
+    73105, 29224, 73114, 73119, 73126, 73136, 73144, 73152, 73161, 73167, 
+    73173, 73180, 73187, 73192, 73196, 73204, 73209, 73214, 73222, 73229, 
+    73234, 73240, 73243, 73247, 73256, 71816, 73265, 73269, 73275, 73286, 
+    73296, 17514, 73307, 73315, 17526, 73322, 73326, 73335, 27341, 73342, 
+    73346, 73351, 73368, 73380, 10576, 73392, 73397, 73402, 73407, 21010, 
+    73411, 73416, 73421, 73427, 73432, 5846, 21014, 73437, 73442, 73448, 
+    73455, 73460, 73465, 73471, 73477, 73483, 73488, 73494, 73498, 73512, 
+    73520, 73528, 73534, 73539, 73546, 73556, 73565, 73570, 73575, 73583, 
+    73588, 73594, 73599, 73608, 59823, 73613, 73616, 73634, 73653, 73666, 
+    73680, 73696, 73703, 73710, 73716, 73723, 73728, 73734, 73740, 73748, 
+    73754, 73759, 73764, 73780, 10589, 73794, 73801, 73809, 73815, 73819, 
+    73822, 73827, 73832, 73839, 73844, 73853, 73858, 73864, 73873, 73882, 
+    73887, 73891, 73899, 73908, 11674, 73917, 73925, 73930, 73936, 11685, 
+    73941, 73944, 73949, 73959, 73968, 73973, 73979, 73984, 73992, 73999, 
+    74010, 74020, 74025, 64875, 74030, 74036, 74041, 74048, 74057, 74065, 
+    74071, 74077, 74084, 74090, 74094, 16960, 3055, 74099, 74103, 74107, 
+    74113, 74122, 74128, 74135, 74139, 74160, 74182, 74198, 74215, 74234, 
+    74243, 74253, 74260, 74267, 27228, 74273, 74277, 74285, 74297, 74303, 
+    74311, 74315, 74323, 74330, 74334, 74340, 74346, 74351, 3563, 41924, 
+    74357, 74361, 74365, 74369, 74374, 74379, 74384, 74390, 74396, 74402, 
+    74409, 74415, 74422, 74428, 74434, 74439, 74445, 74450, 74454, 74459, 
+    74463, 74468, 41939, 74472, 74477, 74485, 74489, 74494, 74501, 74510, 
+    74516, 74520, 74527, 74531, 74534, 74541, 74550, 74555, 74559, 74567, 
+    74576, 74580, 74588, 74594, 74599, 74604, 74610, 74616, 74621, 74625, 
+    74631, 74636, 74640, 74644, 74647, 74652, 74660, 74670, 74675, 39416, 
+    74683, 74695, 74699, 74705, 74717, 74728, 74735, 74741, 74748, 74760, 
+    74767, 74773, 21088, 74777, 74783, 74790, 74796, 74802, 74807, 74812, 
+    74817, 74826, 7033, 74831, 16426, 74837, 74841, 74845, 74849, 74857, 
+    74866, 74870, 74877, 74886, 74899, 74905, 74464, 30088, 74910, 74912, 
+    74917, 74922, 74927, 74932, 74937, 74942, 74947, 74952, 74957, 74962, 
+    74967, 74972, 74977, 74982, 74988, 74993, 74998, 75003, 75008, 75013, 
+    75018, 75023, 75028, 75034, 75040, 75046, 75051, 75056, 75068, 75073, 
+    1870, 46, 75078, 75083, 32746, 75087, 32751, 32756, 32762, 32767, 75091, 
+    32772, 22083, 75113, 75117, 75121, 75126, 75130, 32776, 75134, 75142, 
+    32781, 75149, 75152, 75157, 75161, 9543, 75170, 32786, 21945, 75173, 
+    75177, 1428, 75182, 32797, 75185, 75190, 25737, 25747, 35258, 75195, 
+    75200, 75205, 75210, 75216, 75221, 75230, 75235, 75242, 75248, 75253, 
+    75258, 75263, 75273, 75282, 75287, 75295, 75299, 75307, 32611, 37317, 
+    75314, 75320, 75325, 75330, 12016, 75335, 75341, 75346, 75353, 75359, 
+    75364, 75372, 75382, 75392, 75398, 75403, 75409, 17536, 75416, 36073, 
+    75429, 75434, 75440, 30993, 75453, 75459, 75463, 75472, 75479, 75485, 
+    75493, 75502, 75509, 75515, 75518, 75522, 25878, 75526, 75533, 75539, 
+    75547, 75552, 23994, 75558, 75561, 75569, 75577, 75591, 75598, 75604, 
+    75611, 75617, 32811, 75621, 75628, 75636, 75644, 75650, 32816, 75658, 
+    75664, 75669, 75679, 75685, 75694, 30830, 34716, 75702, 75707, 75712, 
+    75716, 75721, 75725, 75733, 14920, 39429, 75738, 75743, 32821, 62269, 
+    75747, 75752, 75756, 75765, 75773, 75779, 75784, 75790, 75797, 75803, 
+    75808, 75813, 75822, 75834, 75849, 33083, 75855, 16545, 32825, 75859, 
+    75866, 24104, 75872, 75879, 75888, 75895, 75904, 75910, 75915, 75923, 
+    75929, 32835, 75934, 75943, 74723, 75952, 75959, 75965, 75971, 75981, 
+    75989, 75996, 76000, 32840, 76003, 32846, 32852, 76008, 76016, 76024, 
+    76034, 76043, 76051, 76058, 76068, 32857, 76072, 76074, 76078, 76083, 
+    76087, 76091, 76097, 76102, 76106, 76117, 76122, 76127, 3060, 76131, 
+    76138, 76142, 76151, 76159, 76166, 76171, 76176, 62315, 76180, 76183, 
+    76189, 76197, 76203, 76207, 76212, 76219, 76224, 76230, 34747, 76235, 
+    76238, 76243, 76247, 76252, 76257, 76261, 76269, 76273, 25756, 25765, 
+    76279, 76285, 76291, 76296, 76300, 76303, 76313, 76322, 76327, 76333, 
+    76340, 76346, 76350, 76358, 76363, 34753, 76367, 76375, 76381, 76388, 
+    76393, 76397, 76402, 58440, 34759, 76408, 76413, 76417, 76422, 76427, 
+    76432, 76436, 76441, 76446, 76452, 76457, 76462, 76468, 76474, 76479, 
+    76483, 76488, 76493, 76498, 76502, 24103, 76507, 76512, 76518, 76524, 
+    76530, 76535, 76539, 76544, 76549, 76554, 76558, 76563, 76568, 76573, 
+    76578, 76582, 32865, 76590, 76594, 76602, 76610, 76621, 76626, 76630, 
+    22397, 76635, 76641, 76651, 76658, 76663, 76672, 76677, 76681, 76686, 
+    76694, 76702, 76709, 65109, 76715, 76723, 76730, 76741, 76747, 76751, 
+    76757, 32875, 76760, 76767, 76775, 76780, 39620, 76784, 76789, 76796, 
+    76801, 8992, 76805, 76813, 76820, 76827, 76833, 76847, 63381, 76855, 
+    76861, 76865, 76868, 76876, 76883, 76888, 76901, 76908, 76912, 76919, 
+    76924, 60860, 76929, 76932, 76939, 76945, 76949, 76957, 76966, 76976, 
+    76986, 76995, 77003, 77014, 77019, 77023, 77028, 77032, 35389, 77040, 
+    21357, 35398, 77045, 77050, 77055, 77060, 77065, 77070, 77075, 77079, 
+    77084, 77089, 77094, 77099, 77104, 77109, 77113, 77118, 77123, 77127, 
+    77131, 77135, 77139, 77144, 77149, 77153, 77158, 77162, 77166, 77171, 
+    77176, 77181, 77186, 77190, 77195, 77200, 77204, 77209, 77214, 77219, 
+    77224, 77229, 77234, 77239, 77244, 77249, 77254, 77259, 77264, 77269, 
+    77274, 77279, 77284, 77289, 77294, 77299, 77304, 77308, 77313, 77318, 
+    77323, 77328, 77333, 77338, 77343, 77348, 77353, 77358, 77363, 77367, 
+    77372, 77376, 77381, 77386, 77391, 77396, 77401, 77406, 77411, 77416, 
+    77421, 77425, 77429, 77434, 77439, 77443, 77448, 77453, 77457, 77462, 
+    77467, 77472, 77477, 77481, 77486, 77491, 77495, 77500, 77504, 77508, 
+    77512, 77516, 77521, 77525, 77529, 77533, 77537, 77541, 77545, 77549, 
+    77553, 77557, 77562, 77567, 77572, 77577, 77582, 77587, 77592, 77597, 
+    77602, 77607, 77611, 77615, 77619, 77623, 77627, 77631, 77636, 77640, 
+    77645, 77649, 77654, 77659, 77663, 77667, 77672, 77676, 77680, 77684, 
+    77688, 77692, 77696, 77700, 77704, 77708, 77712, 77716, 77720, 77724, 
+    77728, 77733, 77738, 77742, 77746, 77750, 77754, 77758, 77762, 77767, 
+    77771, 77775, 77779, 77783, 77787, 77791, 77796, 77800, 77805, 77809, 
+    77813, 77817, 77821, 77825, 77829, 77833, 77837, 77841, 77845, 77849, 
+    77854, 77858, 77862, 77866, 77870, 77874, 77878, 77882, 77886, 77890, 
+    77894, 77898, 77903, 77907, 77911, 77916, 77921, 77925, 77929, 77933, 
+    77937, 77941, 77945, 77949, 77953, 77958, 77962, 77967, 77971, 77976, 
+    77980, 77985, 77989, 77995, 78000, 78004, 78009, 78013, 78018, 78022, 
+    78027, 78031, 78036, 1521, 78040, 2824, 1759, 1764, 78044, 78048, 2828, 
+    78052, 1397, 78057, 1342, 78061, 2840, 78065, 78072, 78079, 78093, 2844, 
+    7131, 78102, 78110, 78117, 78128, 78137, 78144, 78156, 78169, 78182, 
+    78193, 78198, 78205, 78217, 78221, 2848, 11747, 78231, 78236, 78245, 
+    78255, 2852, 78260, 78264, 78269, 78276, 78282, 78290, 78302, 1347, 
+    13042, 78312, 78316, 78322, 78336, 78348, 78360, 78370, 78379, 78388, 
+    78397, 78405, 78416, 78424, 4051, 78434, 78445, 78454, 78460, 78475, 
+    78482, 78488, 35514, 78493, 2876, 13046, 78497, 78504, 8930, 78513, 2881, 
+    32361, 78519, 60609, 78526, 78532, 78543, 78549, 78556, 78562, 78570, 
+    78577, 78583, 78593, 78602, 78613, 78620, 78626, 78636, 78644, 78650, 
+    78665, 78671, 78676, 78683, 78686, 78692, 78699, 78705, 78713, 78722, 
+    78730, 78736, 78745, 41464, 78759, 78764, 78770, 14757, 78775, 78788, 
+    78797, 78805, 78812, 78816, 78820, 78823, 78830, 78837, 78845, 78853, 
+    78862, 78870, 14684, 78878, 78883, 78887, 78899, 78906, 78915, 748, 
+    78925, 78934, 78945, 2897, 78949, 78953, 78959, 78972, 78984, 78994, 
+    79003, 79015, 26369, 79026, 79034, 79043, 79054, 79065, 79075, 79085, 
+    79094, 79102, 11312, 79109, 79113, 79116, 79121, 79126, 79130, 79136, 
+    1352, 11818, 79143, 79154, 79163, 79171, 79180, 79188, 79204, 79215, 
+    79224, 79232, 79244, 79255, 79271, 79281, 79302, 79315, 79323, 79330, 
+    14868, 79343, 79348, 79354, 5908, 79360, 79363, 79370, 79380, 8176, 
+    79387, 79392, 79397, 79402, 79410, 79419, 79427, 9756, 9765, 79432, 
+    79443, 79448, 79454, 2913, 2918, 79460, 10879, 79466, 79473, 79480, 
+    79493, 2251, 68, 79498, 79503, 79513, 79519, 79528, 79536, 79546, 79550, 
+    79555, 79559, 79571, 2941, 79579, 79587, 79592, 79603, 79614, 79623, 
+    79628, 79634, 79639, 79649, 79659, 79664, 79670, 79674, 79679, 79688, 
+    21410, 79692, 4128, 20, 79697, 79706, 79713, 79720, 79726, 79732, 864, 
+    79737, 79742, 60937, 79747, 79752, 79758, 79764, 79772, 79777, 79784, 
+    79790, 79795, 38030, 41358, 79801, 2945, 32, 79811, 79824, 79829, 79837, 
+    79842, 79848, 2967, 28310, 79853, 79861, 79868, 79873, 58682, 61940, 
+    79882, 79886, 1704, 1813, 79891, 79896, 79903, 1817, 247, 79910, 79916, 
+    2989, 79921, 79926, 79933, 1821, 79938, 79944, 79949, 79961, 6119, 79971, 
+    1828, 79977, 79982, 79989, 79996, 80011, 80018, 80029, 80037, 2618, 
+    80041, 80053, 80058, 80062, 80068, 28135, 2256, 80072, 80083, 80087, 
+    80091, 80097, 80101, 80110, 80114, 80125, 80129, 2302, 32190, 80133, 
+    80143, 3080, 9371, 80151, 80156, 80160, 80169, 80176, 80182, 3050, 17152, 
+    80186, 80199, 80217, 80222, 80230, 80238, 80248, 9985, 13154, 80260, 
+    80273, 80280, 80287, 80303, 80310, 80316, 1064, 80323, 80330, 80340, 
+    80349, 80361, 42328, 80369, 3064, 12030, 80372, 80380, 80384, 78272, 
+    3068, 80388, 21191, 12046, 3756, 80392, 3074, 80396, 80406, 80412, 80418, 
+    80424, 80430, 80436, 80442, 80448, 80454, 80460, 80466, 80472, 80478, 
+    80484, 80490, 80496, 80502, 80508, 80514, 80520, 80526, 80532, 80538, 
+    80544, 80550, 80556, 80563, 80570, 80576, 80582, 80588, 80594, 80600, 
+    80606, 1357, 16062, 12068, 80612, 80617, 80622, 80627, 80632, 80637, 
+    80642, 80647, 80652, 80657, 80662, 80667, 80672, 80677, 80682, 80687, 
+    80692, 80697, 80702, 80707, 80712, 80717, 80722, 80727, 80732, 80737, 
+    80743, 80748, 80753, 80759, 80764, 80770, 80775, 80780, 80786, 80791, 
+    80796, 80801, 80806, 80811, 80816, 80821, 80826, 80407, 80413, 80419, 
+    80425, 80431, 80437, 80443, 80449, 80455, 80461, 80467, 80473, 80479, 
+    80485, 80491, 80832, 80497, 80503, 80509, 80838, 80515, 80521, 80527, 
+    80533, 80539, 80545, 80551, 80571, 80844, 80850, 80577, 80856, 80583, 
+    80589, 80595, 80601, 80607, 3091, 3096, 80862, 80867, 80870, 80876, 
+    80882, 80889, 80894, 80899, 2307, 
 };
 
 /* code->name phrasebook */
 #define phrasebook_shift 7
 #define phrasebook_short 209
 static unsigned char phrasebook[] = {
-    0, 219, 19, 245, 32, 78, 223, 255, 78, 54, 50, 247, 133, 50, 225, 183, 
-    50, 254, 127, 254, 58, 43, 226, 4, 44, 226, 4, 253, 217, 96, 50, 249, 
-    220, 240, 168, 243, 230, 218, 130, 219, 47, 21, 210, 86, 21, 110, 21, 
-    105, 21, 158, 21, 161, 21, 189, 21, 194, 21, 198, 21, 195, 21, 200, 249, 
-    227, 220, 151, 233, 16, 50, 245, 99, 50, 242, 131, 50, 224, 14, 78, 249, 
-    218, 253, 207, 7, 6, 1, 61, 7, 6, 1, 253, 159, 7, 6, 1, 251, 67, 7, 6, 1, 
-    249, 61, 7, 6, 1, 75, 7, 6, 1, 245, 7, 7, 6, 1, 243, 203, 7, 6, 1, 242, 
-    61, 7, 6, 1, 73, 7, 6, 1, 235, 145, 7, 6, 1, 235, 24, 7, 6, 1, 156, 7, 6, 
-    1, 193, 7, 6, 1, 230, 26, 7, 6, 1, 76, 7, 6, 1, 226, 106, 7, 6, 1, 224, 
-    97, 7, 6, 1, 153, 7, 6, 1, 222, 92, 7, 6, 1, 217, 153, 7, 6, 1, 70, 7, 6, 
-    1, 214, 105, 7, 6, 1, 212, 98, 7, 6, 1, 211, 178, 7, 6, 1, 211, 117, 7, 
-    6, 1, 210, 159, 43, 42, 127, 223, 51, 219, 47, 44, 42, 127, 250, 32, 255, 
-    15, 121, 232, 214, 242, 138, 255, 15, 7, 4, 1, 61, 7, 4, 1, 253, 159, 7, 
-    4, 1, 251, 67, 7, 4, 1, 249, 61, 7, 4, 1, 75, 7, 4, 1, 245, 7, 7, 4, 1, 
-    243, 203, 7, 4, 1, 242, 61, 7, 4, 1, 73, 7, 4, 1, 235, 145, 7, 4, 1, 235, 
-    24, 7, 4, 1, 156, 7, 4, 1, 193, 7, 4, 1, 230, 26, 7, 4, 1, 76, 7, 4, 1, 
-    226, 106, 7, 4, 1, 224, 97, 7, 4, 1, 153, 7, 4, 1, 222, 92, 7, 4, 1, 217, 
-    153, 7, 4, 1, 70, 7, 4, 1, 214, 105, 7, 4, 1, 212, 98, 7, 4, 1, 211, 178, 
-    7, 4, 1, 211, 117, 7, 4, 1, 210, 159, 43, 249, 100, 127, 67, 232, 214, 
-    44, 249, 100, 127, 183, 228, 74, 219, 19, 235, 194, 245, 32, 78, 250, 
-    177, 50, 224, 229, 50, 249, 99, 50, 211, 40, 50, 251, 136, 130, 221, 174, 
-    50, 248, 2, 249, 164, 50, 244, 137, 226, 155, 235, 239, 233, 43, 52, 254, 
-    111, 223, 255, 78, 228, 53, 50, 219, 53, 240, 169, 223, 103, 50, 231, 
-    233, 248, 72, 50, 225, 22, 50, 218, 24, 105, 218, 24, 158, 255, 4, 255, 
-    15, 230, 229, 50, 225, 69, 50, 230, 225, 247, 121, 250, 184, 218, 24, 
-    110, 231, 149, 226, 155, 235, 239, 222, 248, 52, 254, 111, 223, 255, 78, 
-    212, 114, 244, 3, 123, 224, 22, 212, 114, 244, 3, 123, 242, 28, 212, 114, 
-    244, 3, 134, 224, 20, 235, 194, 224, 14, 78, 7, 6, 1, 115, 2, 242, 137, 
-    7, 6, 1, 115, 2, 142, 7, 6, 1, 115, 2, 250, 31, 7, 6, 1, 115, 2, 183, 7, 
-    6, 1, 115, 2, 248, 2, 7, 6, 1, 115, 2, 222, 235, 48, 7, 6, 1, 254, 244, 
-    7, 6, 1, 251, 68, 2, 250, 184, 7, 6, 1, 160, 2, 242, 137, 7, 6, 1, 160, 
-    2, 142, 7, 6, 1, 160, 2, 250, 31, 7, 6, 1, 160, 2, 248, 2, 7, 6, 1, 240, 
-    155, 2, 242, 137, 7, 6, 1, 240, 155, 2, 142, 7, 6, 1, 240, 155, 2, 250, 
-    31, 7, 6, 1, 240, 155, 2, 248, 2, 7, 6, 1, 245, 60, 7, 6, 1, 230, 27, 2, 
-    183, 7, 6, 1, 144, 2, 242, 137, 7, 6, 1, 144, 2, 142, 7, 6, 1, 144, 2, 
-    250, 31, 7, 6, 1, 144, 2, 183, 7, 6, 1, 144, 2, 248, 2, 230, 85, 50, 7, 
-    6, 1, 144, 2, 91, 7, 6, 1, 104, 2, 242, 137, 7, 6, 1, 104, 2, 142, 7, 6, 
-    1, 104, 2, 250, 31, 7, 6, 1, 104, 2, 248, 2, 7, 6, 1, 211, 118, 2, 142, 
-    7, 6, 1, 216, 152, 7, 4, 1, 220, 77, 222, 92, 7, 4, 1, 115, 2, 242, 137, 
-    7, 4, 1, 115, 2, 142, 7, 4, 1, 115, 2, 250, 31, 7, 4, 1, 115, 2, 183, 7, 
-    4, 1, 115, 2, 248, 2, 7, 4, 1, 115, 2, 222, 235, 48, 7, 4, 1, 254, 244, 
-    7, 4, 1, 251, 68, 2, 250, 184, 7, 4, 1, 160, 2, 242, 137, 7, 4, 1, 160, 
-    2, 142, 7, 4, 1, 160, 2, 250, 31, 7, 4, 1, 160, 2, 248, 2, 7, 4, 1, 240, 
-    155, 2, 242, 137, 7, 4, 1, 240, 155, 2, 142, 7, 4, 1, 240, 155, 2, 250, 
-    31, 7, 4, 1, 240, 155, 2, 248, 2, 7, 4, 1, 245, 60, 7, 4, 1, 230, 27, 2, 
-    183, 7, 4, 1, 144, 2, 242, 137, 7, 4, 1, 144, 2, 142, 7, 4, 1, 144, 2, 
-    250, 31, 7, 4, 1, 144, 2, 183, 7, 4, 1, 144, 2, 248, 2, 247, 170, 50, 7, 
-    4, 1, 144, 2, 91, 7, 4, 1, 104, 2, 242, 137, 7, 4, 1, 104, 2, 142, 7, 4, 
-    1, 104, 2, 250, 31, 7, 4, 1, 104, 2, 248, 2, 7, 4, 1, 211, 118, 2, 142, 
-    7, 4, 1, 216, 152, 7, 4, 1, 211, 118, 2, 248, 2, 7, 6, 1, 115, 2, 231, 
-    233, 7, 4, 1, 115, 2, 231, 233, 7, 6, 1, 115, 2, 251, 147, 7, 4, 1, 115, 
-    2, 251, 147, 7, 6, 1, 115, 2, 226, 225, 7, 4, 1, 115, 2, 226, 225, 7, 6, 
-    1, 251, 68, 2, 142, 7, 4, 1, 251, 68, 2, 142, 7, 6, 1, 251, 68, 2, 250, 
-    31, 7, 4, 1, 251, 68, 2, 250, 31, 7, 6, 1, 251, 68, 2, 59, 48, 7, 4, 1, 
-    251, 68, 2, 59, 48, 7, 6, 1, 251, 68, 2, 250, 235, 7, 4, 1, 251, 68, 2, 
-    250, 235, 7, 6, 1, 249, 62, 2, 250, 235, 7, 4, 1, 249, 62, 2, 250, 235, 
-    7, 6, 1, 249, 62, 2, 91, 7, 4, 1, 249, 62, 2, 91, 7, 6, 1, 160, 2, 231, 
-    233, 7, 4, 1, 160, 2, 231, 233, 7, 6, 1, 160, 2, 251, 147, 7, 4, 1, 160, 
-    2, 251, 147, 7, 6, 1, 160, 2, 59, 48, 7, 4, 1, 160, 2, 59, 48, 7, 6, 1, 
-    160, 2, 226, 225, 7, 4, 1, 160, 2, 226, 225, 7, 6, 1, 160, 2, 250, 235, 
-    7, 4, 1, 160, 2, 250, 235, 7, 6, 1, 243, 204, 2, 250, 31, 7, 4, 1, 243, 
-    204, 2, 250, 31, 7, 6, 1, 243, 204, 2, 251, 147, 7, 4, 1, 243, 204, 2, 
-    251, 147, 7, 6, 1, 243, 204, 2, 59, 48, 7, 4, 1, 243, 204, 2, 59, 48, 7, 
-    6, 1, 243, 204, 2, 250, 184, 7, 4, 1, 243, 204, 2, 250, 184, 7, 6, 1, 
-    242, 62, 2, 250, 31, 7, 4, 1, 242, 62, 2, 250, 31, 7, 6, 1, 242, 62, 2, 
-    91, 7, 4, 1, 242, 62, 2, 91, 7, 6, 1, 240, 155, 2, 183, 7, 4, 1, 240, 
-    155, 2, 183, 7, 6, 1, 240, 155, 2, 231, 233, 7, 4, 1, 240, 155, 2, 231, 
-    233, 7, 6, 1, 240, 155, 2, 251, 147, 7, 4, 1, 240, 155, 2, 251, 147, 7, 
-    6, 1, 240, 155, 2, 226, 225, 7, 4, 1, 240, 155, 2, 226, 225, 7, 6, 1, 
-    240, 155, 2, 59, 48, 7, 4, 1, 247, 120, 73, 7, 6, 27, 236, 32, 7, 4, 27, 
-    236, 32, 7, 6, 1, 235, 146, 2, 250, 31, 7, 4, 1, 235, 146, 2, 250, 31, 7, 
-    6, 1, 235, 25, 2, 250, 184, 7, 4, 1, 235, 25, 2, 250, 184, 7, 4, 1, 233, 
-    240, 7, 6, 1, 233, 150, 2, 142, 7, 4, 1, 233, 150, 2, 142, 7, 6, 1, 233, 
-    150, 2, 250, 184, 7, 4, 1, 233, 150, 2, 250, 184, 7, 6, 1, 233, 150, 2, 
-    250, 235, 7, 4, 1, 233, 150, 2, 250, 235, 7, 6, 1, 233, 150, 2, 230, 225, 
-    247, 121, 7, 4, 1, 233, 150, 2, 230, 225, 247, 121, 7, 6, 1, 233, 150, 2, 
-    91, 7, 4, 1, 233, 150, 2, 91, 7, 6, 1, 230, 27, 2, 142, 7, 4, 1, 230, 27, 
-    2, 142, 7, 6, 1, 230, 27, 2, 250, 184, 7, 4, 1, 230, 27, 2, 250, 184, 7, 
-    6, 1, 230, 27, 2, 250, 235, 7, 4, 1, 230, 27, 2, 250, 235, 7, 4, 1, 230, 
-    27, 224, 205, 251, 79, 254, 58, 7, 6, 1, 245, 139, 7, 4, 1, 245, 139, 7, 
-    6, 1, 144, 2, 231, 233, 7, 4, 1, 144, 2, 231, 233, 7, 6, 1, 144, 2, 251, 
-    147, 7, 4, 1, 144, 2, 251, 147, 7, 6, 1, 144, 2, 52, 142, 7, 4, 1, 144, 
-    2, 52, 142, 7, 6, 27, 226, 235, 7, 4, 27, 226, 235, 7, 6, 1, 223, 225, 2, 
-    142, 7, 4, 1, 223, 225, 2, 142, 7, 6, 1, 223, 225, 2, 250, 184, 7, 4, 1, 
-    223, 225, 2, 250, 184, 7, 6, 1, 223, 225, 2, 250, 235, 7, 4, 1, 223, 225, 
-    2, 250, 235, 7, 6, 1, 222, 93, 2, 142, 7, 4, 1, 222, 93, 2, 142, 7, 6, 1, 
-    222, 93, 2, 250, 31, 7, 4, 1, 222, 93, 2, 250, 31, 7, 6, 1, 222, 93, 2, 
-    250, 184, 7, 4, 1, 222, 93, 2, 250, 184, 7, 6, 1, 222, 93, 2, 250, 235, 
-    7, 4, 1, 222, 93, 2, 250, 235, 7, 6, 1, 217, 154, 2, 250, 184, 7, 4, 1, 
-    217, 154, 2, 250, 184, 7, 6, 1, 217, 154, 2, 250, 235, 7, 4, 1, 217, 154, 
-    2, 250, 235, 7, 6, 1, 217, 154, 2, 91, 7, 4, 1, 217, 154, 2, 91, 7, 6, 1, 
-    104, 2, 183, 7, 4, 1, 104, 2, 183, 7, 6, 1, 104, 2, 231, 233, 7, 4, 1, 
-    104, 2, 231, 233, 7, 6, 1, 104, 2, 251, 147, 7, 4, 1, 104, 2, 251, 147, 
-    7, 6, 1, 104, 2, 222, 235, 48, 7, 4, 1, 104, 2, 222, 235, 48, 7, 6, 1, 
-    104, 2, 52, 142, 7, 4, 1, 104, 2, 52, 142, 7, 6, 1, 104, 2, 226, 225, 7, 
-    4, 1, 104, 2, 226, 225, 7, 6, 1, 212, 99, 2, 250, 31, 7, 4, 1, 212, 99, 
-    2, 250, 31, 7, 6, 1, 211, 118, 2, 250, 31, 7, 4, 1, 211, 118, 2, 250, 31, 
-    7, 6, 1, 211, 118, 2, 248, 2, 7, 6, 1, 210, 160, 2, 142, 7, 4, 1, 210, 
+    0, 219, 20, 245, 39, 79, 224, 1, 79, 54, 50, 247, 140, 50, 225, 185, 50, 
+    254, 134, 254, 65, 43, 226, 7, 44, 226, 7, 253, 224, 96, 50, 249, 227, 
+    240, 174, 243, 236, 218, 131, 219, 48, 21, 210, 86, 21, 111, 21, 105, 21, 
+    158, 21, 161, 21, 190, 21, 195, 21, 199, 21, 196, 21, 201, 249, 234, 220, 
+    152, 233, 21, 50, 245, 106, 50, 242, 137, 50, 224, 16, 79, 249, 225, 253, 
+    214, 7, 6, 1, 61, 7, 6, 1, 253, 166, 7, 6, 1, 251, 74, 7, 6, 1, 249, 68, 
+    7, 6, 1, 76, 7, 6, 1, 245, 14, 7, 6, 1, 243, 209, 7, 6, 1, 242, 67, 7, 6, 
+    1, 74, 7, 6, 1, 235, 150, 7, 6, 1, 235, 29, 7, 6, 1, 156, 7, 6, 1, 194, 
+    7, 6, 1, 230, 30, 7, 6, 1, 78, 7, 6, 1, 226, 109, 7, 6, 1, 224, 99, 7, 6, 
+    1, 153, 7, 6, 1, 222, 93, 7, 6, 1, 217, 153, 7, 6, 1, 69, 7, 6, 1, 214, 
+    105, 7, 6, 1, 212, 98, 7, 6, 1, 211, 178, 7, 6, 1, 211, 117, 7, 6, 1, 
+    210, 159, 43, 42, 127, 223, 53, 219, 48, 44, 42, 127, 250, 39, 255, 23, 
+    121, 232, 219, 242, 144, 255, 23, 7, 4, 1, 61, 7, 4, 1, 253, 166, 7, 4, 
+    1, 251, 74, 7, 4, 1, 249, 68, 7, 4, 1, 76, 7, 4, 1, 245, 14, 7, 4, 1, 
+    243, 209, 7, 4, 1, 242, 67, 7, 4, 1, 74, 7, 4, 1, 235, 150, 7, 4, 1, 235, 
+    29, 7, 4, 1, 156, 7, 4, 1, 194, 7, 4, 1, 230, 30, 7, 4, 1, 78, 7, 4, 1, 
+    226, 109, 7, 4, 1, 224, 99, 7, 4, 1, 153, 7, 4, 1, 222, 93, 7, 4, 1, 217, 
+    153, 7, 4, 1, 69, 7, 4, 1, 214, 105, 7, 4, 1, 212, 98, 7, 4, 1, 211, 178, 
+    7, 4, 1, 211, 117, 7, 4, 1, 210, 159, 43, 249, 107, 127, 67, 232, 219, 
+    44, 249, 107, 127, 184, 228, 78, 219, 20, 235, 200, 245, 39, 79, 250, 
+    184, 50, 224, 231, 50, 249, 106, 50, 211, 40, 50, 251, 143, 130, 221, 
+    175, 50, 248, 9, 249, 171, 50, 244, 144, 226, 158, 235, 245, 233, 48, 52, 
+    254, 118, 224, 1, 79, 228, 57, 50, 219, 54, 240, 175, 223, 105, 50, 231, 
+    237, 248, 79, 50, 225, 24, 50, 218, 24, 105, 218, 24, 158, 255, 12, 255, 
+    23, 230, 233, 50, 225, 71, 50, 230, 229, 247, 128, 250, 191, 218, 24, 
+    111, 231, 153, 226, 158, 235, 245, 222, 250, 52, 254, 118, 224, 1, 79, 
+    212, 114, 244, 10, 123, 224, 24, 212, 114, 244, 10, 123, 242, 34, 212, 
+    114, 244, 10, 134, 224, 22, 235, 200, 224, 16, 79, 7, 6, 1, 116, 2, 242, 
+    143, 7, 6, 1, 116, 2, 142, 7, 6, 1, 116, 2, 250, 38, 7, 6, 1, 116, 2, 
+    184, 7, 6, 1, 116, 2, 248, 9, 7, 6, 1, 116, 2, 222, 237, 48, 7, 6, 1, 
+    254, 252, 7, 6, 1, 251, 75, 2, 250, 191, 7, 6, 1, 160, 2, 242, 143, 7, 6, 
+    1, 160, 2, 142, 7, 6, 1, 160, 2, 250, 38, 7, 6, 1, 160, 2, 248, 9, 7, 6, 
+    1, 240, 161, 2, 242, 143, 7, 6, 1, 240, 161, 2, 142, 7, 6, 1, 240, 161, 
+    2, 250, 38, 7, 6, 1, 240, 161, 2, 248, 9, 7, 6, 1, 245, 67, 7, 6, 1, 230, 
+    31, 2, 184, 7, 6, 1, 144, 2, 242, 143, 7, 6, 1, 144, 2, 142, 7, 6, 1, 
+    144, 2, 250, 38, 7, 6, 1, 144, 2, 184, 7, 6, 1, 144, 2, 248, 9, 230, 89, 
+    50, 7, 6, 1, 144, 2, 91, 7, 6, 1, 104, 2, 242, 143, 7, 6, 1, 104, 2, 142, 
+    7, 6, 1, 104, 2, 250, 38, 7, 6, 1, 104, 2, 248, 9, 7, 6, 1, 211, 118, 2, 
+    142, 7, 6, 1, 216, 152, 7, 4, 1, 220, 78, 222, 93, 7, 4, 1, 116, 2, 242, 
+    143, 7, 4, 1, 116, 2, 142, 7, 4, 1, 116, 2, 250, 38, 7, 4, 1, 116, 2, 
+    184, 7, 4, 1, 116, 2, 248, 9, 7, 4, 1, 116, 2, 222, 237, 48, 7, 4, 1, 
+    254, 252, 7, 4, 1, 251, 75, 2, 250, 191, 7, 4, 1, 160, 2, 242, 143, 7, 4, 
+    1, 160, 2, 142, 7, 4, 1, 160, 2, 250, 38, 7, 4, 1, 160, 2, 248, 9, 7, 4, 
+    1, 240, 161, 2, 242, 143, 7, 4, 1, 240, 161, 2, 142, 7, 4, 1, 240, 161, 
+    2, 250, 38, 7, 4, 1, 240, 161, 2, 248, 9, 7, 4, 1, 245, 67, 7, 4, 1, 230, 
+    31, 2, 184, 7, 4, 1, 144, 2, 242, 143, 7, 4, 1, 144, 2, 142, 7, 4, 1, 
+    144, 2, 250, 38, 7, 4, 1, 144, 2, 184, 7, 4, 1, 144, 2, 248, 9, 247, 177, 
+    50, 7, 4, 1, 144, 2, 91, 7, 4, 1, 104, 2, 242, 143, 7, 4, 1, 104, 2, 142, 
+    7, 4, 1, 104, 2, 250, 38, 7, 4, 1, 104, 2, 248, 9, 7, 4, 1, 211, 118, 2, 
+    142, 7, 4, 1, 216, 152, 7, 4, 1, 211, 118, 2, 248, 9, 7, 6, 1, 116, 2, 
+    231, 237, 7, 4, 1, 116, 2, 231, 237, 7, 6, 1, 116, 2, 251, 154, 7, 4, 1, 
+    116, 2, 251, 154, 7, 6, 1, 116, 2, 226, 228, 7, 4, 1, 116, 2, 226, 228, 
+    7, 6, 1, 251, 75, 2, 142, 7, 4, 1, 251, 75, 2, 142, 7, 6, 1, 251, 75, 2, 
+    250, 38, 7, 4, 1, 251, 75, 2, 250, 38, 7, 6, 1, 251, 75, 2, 59, 48, 7, 4, 
+    1, 251, 75, 2, 59, 48, 7, 6, 1, 251, 75, 2, 250, 242, 7, 4, 1, 251, 75, 
+    2, 250, 242, 7, 6, 1, 249, 69, 2, 250, 242, 7, 4, 1, 249, 69, 2, 250, 
+    242, 7, 6, 1, 249, 69, 2, 91, 7, 4, 1, 249, 69, 2, 91, 7, 6, 1, 160, 2, 
+    231, 237, 7, 4, 1, 160, 2, 231, 237, 7, 6, 1, 160, 2, 251, 154, 7, 4, 1, 
+    160, 2, 251, 154, 7, 6, 1, 160, 2, 59, 48, 7, 4, 1, 160, 2, 59, 48, 7, 6, 
+    1, 160, 2, 226, 228, 7, 4, 1, 160, 2, 226, 228, 7, 6, 1, 160, 2, 250, 
+    242, 7, 4, 1, 160, 2, 250, 242, 7, 6, 1, 243, 210, 2, 250, 38, 7, 4, 1, 
+    243, 210, 2, 250, 38, 7, 6, 1, 243, 210, 2, 251, 154, 7, 4, 1, 243, 210, 
+    2, 251, 154, 7, 6, 1, 243, 210, 2, 59, 48, 7, 4, 1, 243, 210, 2, 59, 48, 
+    7, 6, 1, 243, 210, 2, 250, 191, 7, 4, 1, 243, 210, 2, 250, 191, 7, 6, 1, 
+    242, 68, 2, 250, 38, 7, 4, 1, 242, 68, 2, 250, 38, 7, 6, 1, 242, 68, 2, 
+    91, 7, 4, 1, 242, 68, 2, 91, 7, 6, 1, 240, 161, 2, 184, 7, 4, 1, 240, 
+    161, 2, 184, 7, 6, 1, 240, 161, 2, 231, 237, 7, 4, 1, 240, 161, 2, 231, 
+    237, 7, 6, 1, 240, 161, 2, 251, 154, 7, 4, 1, 240, 161, 2, 251, 154, 7, 
+    6, 1, 240, 161, 2, 226, 228, 7, 4, 1, 240, 161, 2, 226, 228, 7, 6, 1, 
+    240, 161, 2, 59, 48, 7, 4, 1, 247, 127, 74, 7, 6, 27, 236, 38, 7, 4, 27, 
+    236, 38, 7, 6, 1, 235, 151, 2, 250, 38, 7, 4, 1, 235, 151, 2, 250, 38, 7, 
+    6, 1, 235, 30, 2, 250, 191, 7, 4, 1, 235, 30, 2, 250, 191, 7, 4, 1, 233, 
+    245, 7, 6, 1, 233, 155, 2, 142, 7, 4, 1, 233, 155, 2, 142, 7, 6, 1, 233, 
+    155, 2, 250, 191, 7, 4, 1, 233, 155, 2, 250, 191, 7, 6, 1, 233, 155, 2, 
+    250, 242, 7, 4, 1, 233, 155, 2, 250, 242, 7, 6, 1, 233, 155, 2, 230, 229, 
+    247, 128, 7, 4, 1, 233, 155, 2, 230, 229, 247, 128, 7, 6, 1, 233, 155, 2, 
+    91, 7, 4, 1, 233, 155, 2, 91, 7, 6, 1, 230, 31, 2, 142, 7, 4, 1, 230, 31, 
+    2, 142, 7, 6, 1, 230, 31, 2, 250, 191, 7, 4, 1, 230, 31, 2, 250, 191, 7, 
+    6, 1, 230, 31, 2, 250, 242, 7, 4, 1, 230, 31, 2, 250, 242, 7, 4, 1, 230, 
+    31, 224, 207, 251, 86, 254, 65, 7, 6, 1, 245, 146, 7, 4, 1, 245, 146, 7, 
+    6, 1, 144, 2, 231, 237, 7, 4, 1, 144, 2, 231, 237, 7, 6, 1, 144, 2, 251, 
+    154, 7, 4, 1, 144, 2, 251, 154, 7, 6, 1, 144, 2, 52, 142, 7, 4, 1, 144, 
+    2, 52, 142, 7, 6, 27, 226, 238, 7, 4, 27, 226, 238, 7, 6, 1, 223, 227, 2, 
+    142, 7, 4, 1, 223, 227, 2, 142, 7, 6, 1, 223, 227, 2, 250, 191, 7, 4, 1, 
+    223, 227, 2, 250, 191, 7, 6, 1, 223, 227, 2, 250, 242, 7, 4, 1, 223, 227, 
+    2, 250, 242, 7, 6, 1, 222, 94, 2, 142, 7, 4, 1, 222, 94, 2, 142, 7, 6, 1, 
+    222, 94, 2, 250, 38, 7, 4, 1, 222, 94, 2, 250, 38, 7, 6, 1, 222, 94, 2, 
+    250, 191, 7, 4, 1, 222, 94, 2, 250, 191, 7, 6, 1, 222, 94, 2, 250, 242, 
+    7, 4, 1, 222, 94, 2, 250, 242, 7, 6, 1, 217, 154, 2, 250, 191, 7, 4, 1, 
+    217, 154, 2, 250, 191, 7, 6, 1, 217, 154, 2, 250, 242, 7, 4, 1, 217, 154, 
+    2, 250, 242, 7, 6, 1, 217, 154, 2, 91, 7, 4, 1, 217, 154, 2, 91, 7, 6, 1, 
+    104, 2, 184, 7, 4, 1, 104, 2, 184, 7, 6, 1, 104, 2, 231, 237, 7, 4, 1, 
+    104, 2, 231, 237, 7, 6, 1, 104, 2, 251, 154, 7, 4, 1, 104, 2, 251, 154, 
+    7, 6, 1, 104, 2, 222, 237, 48, 7, 4, 1, 104, 2, 222, 237, 48, 7, 6, 1, 
+    104, 2, 52, 142, 7, 4, 1, 104, 2, 52, 142, 7, 6, 1, 104, 2, 226, 228, 7, 
+    4, 1, 104, 2, 226, 228, 7, 6, 1, 212, 99, 2, 250, 38, 7, 4, 1, 212, 99, 
+    2, 250, 38, 7, 6, 1, 211, 118, 2, 250, 38, 7, 4, 1, 211, 118, 2, 250, 38, 
+    7, 6, 1, 211, 118, 2, 248, 9, 7, 6, 1, 210, 160, 2, 142, 7, 4, 1, 210, 
     160, 2, 142, 7, 6, 1, 210, 160, 2, 59, 48, 7, 4, 1, 210, 160, 2, 59, 48, 
-    7, 6, 1, 210, 160, 2, 250, 235, 7, 4, 1, 210, 160, 2, 250, 235, 7, 4, 1, 
-    199, 222, 92, 7, 4, 1, 57, 2, 91, 7, 6, 1, 57, 2, 103, 7, 6, 1, 57, 2, 
-    216, 12, 7, 4, 1, 57, 2, 216, 12, 7, 6, 1, 138, 194, 7, 4, 1, 138, 194, 
-    7, 6, 1, 204, 76, 7, 6, 1, 251, 68, 2, 103, 7, 4, 1, 251, 68, 2, 103, 7, 
-    6, 1, 254, 220, 249, 61, 7, 6, 1, 249, 62, 2, 103, 7, 6, 1, 249, 62, 2, 
-    216, 12, 7, 4, 1, 249, 62, 2, 216, 12, 7, 4, 1, 215, 94, 248, 55, 7, 6, 
-    1, 223, 50, 75, 7, 6, 1, 221, 196, 7, 6, 1, 204, 75, 7, 6, 1, 245, 8, 2, 
-    103, 7, 4, 1, 245, 8, 2, 103, 7, 6, 1, 243, 204, 2, 103, 7, 6, 1, 243, 
-    108, 7, 4, 1, 240, 202, 7, 6, 1, 235, 186, 7, 6, 1, 240, 155, 2, 91, 7, 
-    6, 1, 235, 25, 2, 103, 7, 4, 1, 235, 25, 2, 103, 7, 4, 1, 233, 150, 2, 
-    130, 7, 4, 1, 233, 101, 2, 91, 7, 6, 1, 215, 94, 193, 7, 6, 1, 230, 27, 
-    2, 43, 103, 7, 4, 1, 230, 27, 2, 199, 44, 233, 37, 7, 6, 1, 144, 2, 230, 
-    225, 183, 7, 6, 1, 144, 2, 240, 249, 7, 4, 1, 144, 2, 240, 249, 7, 6, 1, 
-    226, 220, 7, 4, 1, 226, 220, 7, 6, 1, 226, 107, 2, 103, 7, 4, 1, 226, 
-    107, 2, 103, 7, 1, 210, 214, 7, 6, 1, 138, 105, 7, 4, 1, 138, 105, 7, 6, 
-    1, 245, 76, 7, 1, 223, 50, 245, 77, 232, 124, 7, 4, 1, 217, 154, 2, 226, 
-    67, 103, 7, 6, 1, 217, 154, 2, 103, 7, 4, 1, 217, 154, 2, 103, 7, 6, 1, 
-    217, 154, 2, 223, 56, 103, 7, 6, 1, 104, 2, 240, 249, 7, 4, 1, 104, 2, 
-    240, 249, 7, 6, 1, 214, 157, 7, 6, 1, 214, 106, 2, 103, 7, 6, 1, 211, 
+    7, 6, 1, 210, 160, 2, 250, 242, 7, 4, 1, 210, 160, 2, 250, 242, 7, 4, 1, 
+    200, 222, 93, 7, 4, 1, 57, 2, 91, 7, 6, 1, 57, 2, 103, 7, 6, 1, 57, 2, 
+    216, 12, 7, 4, 1, 57, 2, 216, 12, 7, 6, 1, 138, 195, 7, 4, 1, 138, 195, 
+    7, 6, 1, 204, 78, 7, 6, 1, 251, 75, 2, 103, 7, 4, 1, 251, 75, 2, 103, 7, 
+    6, 1, 254, 228, 249, 68, 7, 6, 1, 249, 69, 2, 103, 7, 6, 1, 249, 69, 2, 
+    216, 12, 7, 4, 1, 249, 69, 2, 216, 12, 7, 4, 1, 215, 94, 248, 62, 7, 6, 
+    1, 223, 52, 76, 7, 6, 1, 221, 197, 7, 6, 1, 204, 76, 7, 6, 1, 245, 15, 2, 
+    103, 7, 4, 1, 245, 15, 2, 103, 7, 6, 1, 243, 210, 2, 103, 7, 6, 1, 243, 
+    114, 7, 4, 1, 240, 208, 7, 6, 1, 235, 192, 7, 6, 1, 240, 161, 2, 91, 7, 
+    6, 1, 235, 30, 2, 103, 7, 4, 1, 235, 30, 2, 103, 7, 4, 1, 233, 155, 2, 
+    130, 7, 4, 1, 233, 106, 2, 91, 7, 6, 1, 215, 94, 194, 7, 6, 1, 230, 31, 
+    2, 43, 103, 7, 4, 1, 230, 31, 2, 200, 44, 233, 42, 7, 6, 1, 144, 2, 230, 
+    229, 184, 7, 6, 1, 144, 2, 240, 255, 7, 4, 1, 144, 2, 240, 255, 7, 6, 1, 
+    226, 223, 7, 4, 1, 226, 223, 7, 6, 1, 226, 110, 2, 103, 7, 4, 1, 226, 
+    110, 2, 103, 7, 1, 210, 214, 7, 6, 1, 138, 105, 7, 4, 1, 138, 105, 7, 6, 
+    1, 245, 83, 7, 1, 223, 52, 245, 84, 232, 129, 7, 4, 1, 217, 154, 2, 226, 
+    70, 103, 7, 6, 1, 217, 154, 2, 103, 7, 4, 1, 217, 154, 2, 103, 7, 6, 1, 
+    217, 154, 2, 223, 58, 103, 7, 6, 1, 104, 2, 240, 255, 7, 4, 1, 104, 2, 
+    240, 255, 7, 6, 1, 214, 157, 7, 6, 1, 214, 106, 2, 103, 7, 6, 1, 211, 
     118, 2, 103, 7, 4, 1, 211, 118, 2, 103, 7, 6, 1, 210, 160, 2, 91, 7, 4, 
-    1, 210, 160, 2, 91, 7, 6, 1, 245, 9, 7, 6, 1, 245, 10, 223, 49, 7, 4, 1, 
-    245, 10, 223, 49, 7, 4, 1, 245, 10, 2, 217, 78, 7, 1, 113, 2, 91, 7, 6, 
-    1, 138, 189, 7, 4, 1, 138, 189, 7, 1, 235, 194, 242, 181, 218, 131, 2, 
-    91, 7, 1, 211, 181, 7, 1, 248, 48, 250, 12, 7, 1, 233, 78, 250, 12, 7, 1, 
-    254, 138, 250, 12, 7, 1, 223, 56, 250, 12, 7, 6, 1, 246, 41, 2, 250, 235, 
-    7, 6, 1, 249, 62, 2, 4, 1, 210, 160, 2, 250, 235, 7, 4, 1, 246, 41, 2, 
-    250, 235, 7, 6, 1, 232, 189, 7, 6, 1, 233, 150, 2, 4, 1, 235, 145, 7, 4, 
-    1, 232, 189, 7, 6, 1, 228, 187, 7, 6, 1, 230, 27, 2, 4, 1, 235, 145, 7, 
-    4, 1, 228, 187, 7, 6, 1, 115, 2, 250, 235, 7, 4, 1, 115, 2, 250, 235, 7, 
-    6, 1, 240, 155, 2, 250, 235, 7, 4, 1, 240, 155, 2, 250, 235, 7, 6, 1, 
-    144, 2, 250, 235, 7, 4, 1, 144, 2, 250, 235, 7, 6, 1, 104, 2, 250, 235, 
-    7, 4, 1, 104, 2, 250, 235, 7, 6, 1, 104, 2, 248, 3, 22, 231, 233, 7, 4, 
-    1, 104, 2, 248, 3, 22, 231, 233, 7, 6, 1, 104, 2, 248, 3, 22, 142, 7, 4, 
-    1, 104, 2, 248, 3, 22, 142, 7, 6, 1, 104, 2, 248, 3, 22, 250, 235, 7, 4, 
-    1, 104, 2, 248, 3, 22, 250, 235, 7, 6, 1, 104, 2, 248, 3, 22, 242, 137, 
-    7, 4, 1, 104, 2, 248, 3, 22, 242, 137, 7, 4, 1, 215, 94, 75, 7, 6, 1, 
-    115, 2, 248, 3, 22, 231, 233, 7, 4, 1, 115, 2, 248, 3, 22, 231, 233, 7, 
-    6, 1, 115, 2, 59, 77, 22, 231, 233, 7, 4, 1, 115, 2, 59, 77, 22, 231, 
-    233, 7, 6, 1, 254, 245, 2, 231, 233, 7, 4, 1, 254, 245, 2, 231, 233, 7, 
-    6, 1, 243, 204, 2, 91, 7, 4, 1, 243, 204, 2, 91, 7, 6, 1, 243, 204, 2, 
-    250, 235, 7, 4, 1, 243, 204, 2, 250, 235, 7, 6, 1, 235, 25, 2, 250, 235, 
-    7, 4, 1, 235, 25, 2, 250, 235, 7, 6, 1, 144, 2, 226, 225, 7, 4, 1, 144, 
-    2, 226, 225, 7, 6, 1, 144, 2, 226, 226, 22, 231, 233, 7, 4, 1, 144, 2, 
-    226, 226, 22, 231, 233, 7, 6, 1, 245, 10, 2, 250, 235, 7, 4, 1, 245, 10, 
-    2, 250, 235, 7, 4, 1, 235, 146, 2, 250, 235, 7, 6, 1, 246, 40, 7, 6, 1, 
-    249, 62, 2, 4, 1, 210, 159, 7, 4, 1, 246, 40, 7, 6, 1, 243, 204, 2, 142, 
-    7, 4, 1, 243, 204, 2, 142, 7, 6, 1, 240, 200, 7, 6, 1, 211, 181, 7, 6, 1, 
-    230, 27, 2, 242, 137, 7, 4, 1, 230, 27, 2, 242, 137, 7, 6, 1, 115, 2, 
-    222, 235, 77, 22, 142, 7, 4, 1, 115, 2, 222, 235, 77, 22, 142, 7, 6, 1, 
-    254, 245, 2, 142, 7, 4, 1, 254, 245, 2, 142, 7, 6, 1, 144, 2, 218, 104, 
-    22, 142, 7, 4, 1, 144, 2, 218, 104, 22, 142, 7, 6, 1, 115, 2, 52, 242, 
-    137, 7, 4, 1, 115, 2, 52, 242, 137, 7, 6, 1, 115, 2, 235, 194, 251, 147, 
-    7, 4, 1, 115, 2, 235, 194, 251, 147, 7, 6, 1, 160, 2, 52, 242, 137, 7, 4, 
-    1, 160, 2, 52, 242, 137, 7, 6, 1, 160, 2, 235, 194, 251, 147, 7, 4, 1, 
-    160, 2, 235, 194, 251, 147, 7, 6, 1, 240, 155, 2, 52, 242, 137, 7, 4, 1, 
-    240, 155, 2, 52, 242, 137, 7, 6, 1, 240, 155, 2, 235, 194, 251, 147, 7, 
-    4, 1, 240, 155, 2, 235, 194, 251, 147, 7, 6, 1, 144, 2, 52, 242, 137, 7, 
-    4, 1, 144, 2, 52, 242, 137, 7, 6, 1, 144, 2, 235, 194, 251, 147, 7, 4, 1, 
-    144, 2, 235, 194, 251, 147, 7, 6, 1, 223, 225, 2, 52, 242, 137, 7, 4, 1, 
-    223, 225, 2, 52, 242, 137, 7, 6, 1, 223, 225, 2, 235, 194, 251, 147, 7, 
-    4, 1, 223, 225, 2, 235, 194, 251, 147, 7, 6, 1, 104, 2, 52, 242, 137, 7, 
-    4, 1, 104, 2, 52, 242, 137, 7, 6, 1, 104, 2, 235, 194, 251, 147, 7, 4, 1, 
-    104, 2, 235, 194, 251, 147, 7, 6, 1, 222, 93, 2, 249, 221, 51, 7, 4, 1, 
-    222, 93, 2, 249, 221, 51, 7, 6, 1, 217, 154, 2, 249, 221, 51, 7, 4, 1, 
-    217, 154, 2, 249, 221, 51, 7, 6, 1, 210, 231, 7, 4, 1, 210, 231, 7, 6, 1, 
-    242, 62, 2, 250, 235, 7, 4, 1, 242, 62, 2, 250, 235, 7, 6, 1, 230, 27, 2, 
-    199, 44, 233, 37, 7, 4, 1, 249, 62, 2, 249, 101, 7, 6, 1, 226, 135, 7, 4, 
-    1, 226, 135, 7, 6, 1, 210, 160, 2, 103, 7, 4, 1, 210, 160, 2, 103, 7, 6, 
-    1, 115, 2, 59, 48, 7, 4, 1, 115, 2, 59, 48, 7, 6, 1, 160, 2, 250, 184, 7, 
-    4, 1, 160, 2, 250, 184, 7, 6, 1, 144, 2, 248, 3, 22, 231, 233, 7, 4, 1, 
-    144, 2, 248, 3, 22, 231, 233, 7, 6, 1, 144, 2, 216, 90, 22, 231, 233, 7, 
-    4, 1, 144, 2, 216, 90, 22, 231, 233, 7, 6, 1, 144, 2, 59, 48, 7, 4, 1, 
-    144, 2, 59, 48, 7, 6, 1, 144, 2, 59, 77, 22, 231, 233, 7, 4, 1, 144, 2, 
-    59, 77, 22, 231, 233, 7, 6, 1, 211, 118, 2, 231, 233, 7, 4, 1, 211, 118, 
-    2, 231, 233, 7, 4, 1, 233, 150, 2, 249, 101, 7, 4, 1, 230, 27, 2, 249, 
-    101, 7, 4, 1, 217, 154, 2, 249, 101, 7, 4, 1, 247, 120, 235, 145, 7, 4, 
-    1, 248, 144, 247, 221, 7, 4, 1, 224, 32, 247, 221, 7, 6, 1, 115, 2, 91, 
-    7, 6, 1, 251, 68, 2, 91, 7, 4, 1, 251, 68, 2, 91, 7, 6, 1, 233, 150, 2, 
-    130, 7, 6, 1, 217, 154, 2, 248, 0, 91, 7, 4, 1, 222, 93, 2, 217, 251, 
-    217, 78, 7, 4, 1, 210, 160, 2, 217, 251, 217, 78, 7, 6, 1, 242, 181, 218, 
-    130, 7, 4, 1, 242, 181, 218, 130, 7, 6, 1, 57, 2, 91, 7, 6, 1, 104, 130, 
+    1, 210, 160, 2, 91, 7, 6, 1, 245, 16, 7, 6, 1, 245, 17, 223, 51, 7, 4, 1, 
+    245, 17, 223, 51, 7, 4, 1, 245, 17, 2, 217, 78, 7, 1, 113, 2, 91, 7, 6, 
+    1, 138, 190, 7, 4, 1, 138, 190, 7, 1, 235, 200, 242, 187, 218, 132, 2, 
+    91, 7, 1, 211, 181, 7, 1, 248, 55, 250, 19, 7, 1, 233, 83, 250, 19, 7, 1, 
+    254, 145, 250, 19, 7, 1, 223, 58, 250, 19, 7, 6, 1, 246, 48, 2, 250, 242, 
+    7, 6, 1, 249, 69, 2, 4, 1, 210, 160, 2, 250, 242, 7, 4, 1, 246, 48, 2, 
+    250, 242, 7, 6, 1, 232, 194, 7, 6, 1, 233, 155, 2, 4, 1, 235, 150, 7, 4, 
+    1, 232, 194, 7, 6, 1, 228, 191, 7, 6, 1, 230, 31, 2, 4, 1, 235, 150, 7, 
+    4, 1, 228, 191, 7, 6, 1, 116, 2, 250, 242, 7, 4, 1, 116, 2, 250, 242, 7, 
+    6, 1, 240, 161, 2, 250, 242, 7, 4, 1, 240, 161, 2, 250, 242, 7, 6, 1, 
+    144, 2, 250, 242, 7, 4, 1, 144, 2, 250, 242, 7, 6, 1, 104, 2, 250, 242, 
+    7, 4, 1, 104, 2, 250, 242, 7, 6, 1, 104, 2, 248, 10, 22, 231, 237, 7, 4, 
+    1, 104, 2, 248, 10, 22, 231, 237, 7, 6, 1, 104, 2, 248, 10, 22, 142, 7, 
+    4, 1, 104, 2, 248, 10, 22, 142, 7, 6, 1, 104, 2, 248, 10, 22, 250, 242, 
+    7, 4, 1, 104, 2, 248, 10, 22, 250, 242, 7, 6, 1, 104, 2, 248, 10, 22, 
+    242, 143, 7, 4, 1, 104, 2, 248, 10, 22, 242, 143, 7, 4, 1, 215, 94, 76, 
+    7, 6, 1, 116, 2, 248, 10, 22, 231, 237, 7, 4, 1, 116, 2, 248, 10, 22, 
+    231, 237, 7, 6, 1, 116, 2, 59, 72, 22, 231, 237, 7, 4, 1, 116, 2, 59, 72, 
+    22, 231, 237, 7, 6, 1, 254, 253, 2, 231, 237, 7, 4, 1, 254, 253, 2, 231, 
+    237, 7, 6, 1, 243, 210, 2, 91, 7, 4, 1, 243, 210, 2, 91, 7, 6, 1, 243, 
+    210, 2, 250, 242, 7, 4, 1, 243, 210, 2, 250, 242, 7, 6, 1, 235, 30, 2, 
+    250, 242, 7, 4, 1, 235, 30, 2, 250, 242, 7, 6, 1, 144, 2, 226, 228, 7, 4, 
+    1, 144, 2, 226, 228, 7, 6, 1, 144, 2, 226, 229, 22, 231, 237, 7, 4, 1, 
+    144, 2, 226, 229, 22, 231, 237, 7, 6, 1, 245, 17, 2, 250, 242, 7, 4, 1, 
+    245, 17, 2, 250, 242, 7, 4, 1, 235, 151, 2, 250, 242, 7, 6, 1, 246, 47, 
+    7, 6, 1, 249, 69, 2, 4, 1, 210, 159, 7, 4, 1, 246, 47, 7, 6, 1, 243, 210, 
+    2, 142, 7, 4, 1, 243, 210, 2, 142, 7, 6, 1, 240, 206, 7, 6, 1, 211, 181, 
+    7, 6, 1, 230, 31, 2, 242, 143, 7, 4, 1, 230, 31, 2, 242, 143, 7, 6, 1, 
+    116, 2, 222, 237, 72, 22, 142, 7, 4, 1, 116, 2, 222, 237, 72, 22, 142, 7, 
+    6, 1, 254, 253, 2, 142, 7, 4, 1, 254, 253, 2, 142, 7, 6, 1, 144, 2, 218, 
+    105, 22, 142, 7, 4, 1, 144, 2, 218, 105, 22, 142, 7, 6, 1, 116, 2, 52, 
+    242, 143, 7, 4, 1, 116, 2, 52, 242, 143, 7, 6, 1, 116, 2, 235, 200, 251, 
+    154, 7, 4, 1, 116, 2, 235, 200, 251, 154, 7, 6, 1, 160, 2, 52, 242, 143, 
+    7, 4, 1, 160, 2, 52, 242, 143, 7, 6, 1, 160, 2, 235, 200, 251, 154, 7, 4, 
+    1, 160, 2, 235, 200, 251, 154, 7, 6, 1, 240, 161, 2, 52, 242, 143, 7, 4, 
+    1, 240, 161, 2, 52, 242, 143, 7, 6, 1, 240, 161, 2, 235, 200, 251, 154, 
+    7, 4, 1, 240, 161, 2, 235, 200, 251, 154, 7, 6, 1, 144, 2, 52, 242, 143, 
+    7, 4, 1, 144, 2, 52, 242, 143, 7, 6, 1, 144, 2, 235, 200, 251, 154, 7, 4, 
+    1, 144, 2, 235, 200, 251, 154, 7, 6, 1, 223, 227, 2, 52, 242, 143, 7, 4, 
+    1, 223, 227, 2, 52, 242, 143, 7, 6, 1, 223, 227, 2, 235, 200, 251, 154, 
+    7, 4, 1, 223, 227, 2, 235, 200, 251, 154, 7, 6, 1, 104, 2, 52, 242, 143, 
+    7, 4, 1, 104, 2, 52, 242, 143, 7, 6, 1, 104, 2, 235, 200, 251, 154, 7, 4, 
+    1, 104, 2, 235, 200, 251, 154, 7, 6, 1, 222, 94, 2, 249, 228, 51, 7, 4, 
+    1, 222, 94, 2, 249, 228, 51, 7, 6, 1, 217, 154, 2, 249, 228, 51, 7, 4, 1, 
+    217, 154, 2, 249, 228, 51, 7, 6, 1, 210, 231, 7, 4, 1, 210, 231, 7, 6, 1, 
+    242, 68, 2, 250, 242, 7, 4, 1, 242, 68, 2, 250, 242, 7, 6, 1, 230, 31, 2, 
+    200, 44, 233, 42, 7, 4, 1, 249, 69, 2, 249, 108, 7, 6, 1, 226, 138, 7, 4, 
+    1, 226, 138, 7, 6, 1, 210, 160, 2, 103, 7, 4, 1, 210, 160, 2, 103, 7, 6, 
+    1, 116, 2, 59, 48, 7, 4, 1, 116, 2, 59, 48, 7, 6, 1, 160, 2, 250, 191, 7, 
+    4, 1, 160, 2, 250, 191, 7, 6, 1, 144, 2, 248, 10, 22, 231, 237, 7, 4, 1, 
+    144, 2, 248, 10, 22, 231, 237, 7, 6, 1, 144, 2, 216, 90, 22, 231, 237, 7, 
+    4, 1, 144, 2, 216, 90, 22, 231, 237, 7, 6, 1, 144, 2, 59, 48, 7, 4, 1, 
+    144, 2, 59, 48, 7, 6, 1, 144, 2, 59, 72, 22, 231, 237, 7, 4, 1, 144, 2, 
+    59, 72, 22, 231, 237, 7, 6, 1, 211, 118, 2, 231, 237, 7, 4, 1, 211, 118, 
+    2, 231, 237, 7, 4, 1, 233, 155, 2, 249, 108, 7, 4, 1, 230, 31, 2, 249, 
+    108, 7, 4, 1, 217, 154, 2, 249, 108, 7, 4, 1, 247, 127, 235, 150, 7, 4, 
+    1, 248, 151, 247, 228, 7, 4, 1, 224, 34, 247, 228, 7, 6, 1, 116, 2, 91, 
+    7, 6, 1, 251, 75, 2, 91, 7, 4, 1, 251, 75, 2, 91, 7, 6, 1, 233, 155, 2, 
+    130, 7, 6, 1, 217, 154, 2, 248, 7, 91, 7, 4, 1, 222, 94, 2, 217, 251, 
+    217, 78, 7, 4, 1, 210, 160, 2, 217, 251, 217, 78, 7, 6, 1, 242, 187, 218, 
+    131, 7, 4, 1, 242, 187, 218, 131, 7, 6, 1, 57, 2, 91, 7, 6, 1, 104, 130, 
     7, 6, 1, 215, 94, 214, 105, 7, 6, 1, 160, 2, 91, 7, 4, 1, 160, 2, 91, 7, 
-    6, 1, 235, 146, 2, 91, 7, 4, 1, 235, 146, 2, 91, 7, 6, 1, 4, 224, 98, 2, 
-    241, 53, 217, 78, 7, 4, 1, 224, 98, 2, 241, 53, 217, 78, 7, 6, 1, 223, 
-    225, 2, 91, 7, 4, 1, 223, 225, 2, 91, 7, 6, 1, 211, 118, 2, 91, 7, 4, 1, 
-    211, 118, 2, 91, 7, 4, 1, 215, 94, 61, 7, 4, 1, 254, 144, 7, 4, 1, 215, 
-    94, 254, 144, 7, 4, 1, 57, 2, 103, 7, 4, 1, 204, 76, 7, 4, 1, 251, 68, 2, 
-    249, 101, 7, 4, 1, 249, 62, 2, 217, 78, 7, 4, 1, 249, 62, 2, 103, 7, 4, 
-    1, 223, 50, 75, 7, 4, 1, 221, 196, 7, 4, 1, 221, 197, 2, 103, 7, 4, 1, 
-    204, 75, 7, 4, 1, 223, 50, 204, 75, 7, 4, 1, 223, 50, 204, 160, 2, 103, 
-    7, 4, 1, 250, 1, 223, 50, 204, 75, 7, 4, 1, 247, 120, 235, 146, 2, 91, 7, 
-    4, 1, 243, 204, 2, 103, 7, 4, 1, 119, 243, 203, 7, 1, 4, 6, 243, 203, 7, 
-    4, 1, 243, 108, 7, 4, 1, 223, 152, 240, 249, 7, 4, 1, 215, 94, 242, 61, 
-    7, 4, 1, 242, 62, 2, 103, 7, 4, 1, 241, 209, 2, 103, 7, 4, 1, 240, 155, 
-    2, 91, 7, 4, 1, 235, 186, 7, 1, 4, 6, 73, 7, 4, 1, 233, 150, 2, 230, 225, 
-    183, 7, 4, 1, 233, 150, 2, 252, 42, 7, 4, 1, 233, 150, 2, 223, 56, 103, 
-    7, 4, 1, 233, 2, 7, 4, 1, 215, 94, 193, 7, 4, 1, 215, 94, 232, 51, 2, 
-    199, 233, 37, 7, 4, 1, 232, 51, 2, 103, 7, 4, 1, 230, 27, 2, 43, 103, 7, 
-    4, 1, 230, 27, 2, 223, 56, 103, 7, 1, 4, 6, 230, 26, 7, 4, 1, 252, 135, 
-    76, 7, 1, 4, 6, 226, 235, 7, 4, 1, 250, 1, 226, 202, 7, 4, 1, 225, 134, 
-    7, 4, 1, 215, 94, 153, 7, 4, 1, 215, 94, 223, 225, 2, 199, 233, 37, 7, 4, 
-    1, 215, 94, 223, 225, 2, 103, 7, 4, 1, 223, 225, 2, 199, 233, 37, 7, 4, 
-    1, 223, 225, 2, 217, 78, 7, 4, 1, 223, 225, 2, 244, 88, 7, 4, 1, 223, 50, 
-    223, 225, 2, 244, 88, 7, 1, 4, 6, 153, 7, 1, 4, 6, 235, 194, 153, 7, 4, 
-    1, 222, 93, 2, 103, 7, 4, 1, 245, 76, 7, 4, 1, 247, 120, 235, 146, 2, 
-    218, 104, 22, 103, 7, 4, 1, 218, 232, 223, 50, 245, 76, 7, 4, 1, 245, 77, 
-    2, 249, 101, 7, 4, 1, 215, 94, 217, 153, 7, 4, 1, 217, 154, 2, 223, 56, 
+    6, 1, 235, 151, 2, 91, 7, 4, 1, 235, 151, 2, 91, 7, 6, 1, 4, 224, 100, 2, 
+    241, 59, 217, 78, 7, 4, 1, 224, 100, 2, 241, 59, 217, 78, 7, 6, 1, 223, 
+    227, 2, 91, 7, 4, 1, 223, 227, 2, 91, 7, 6, 1, 211, 118, 2, 91, 7, 4, 1, 
+    211, 118, 2, 91, 7, 4, 1, 215, 94, 61, 7, 4, 1, 254, 151, 7, 4, 1, 215, 
+    94, 254, 151, 7, 4, 1, 57, 2, 103, 7, 4, 1, 204, 78, 7, 4, 1, 251, 75, 2, 
+    249, 108, 7, 4, 1, 249, 69, 2, 217, 78, 7, 4, 1, 249, 69, 2, 103, 7, 4, 
+    1, 223, 52, 76, 7, 4, 1, 221, 197, 7, 4, 1, 221, 198, 2, 103, 7, 4, 1, 
+    204, 76, 7, 4, 1, 223, 52, 204, 76, 7, 4, 1, 223, 52, 204, 160, 2, 103, 
+    7, 4, 1, 250, 8, 223, 52, 204, 76, 7, 4, 1, 247, 127, 235, 151, 2, 91, 7, 
+    4, 1, 243, 210, 2, 103, 7, 4, 1, 119, 243, 209, 7, 1, 4, 6, 243, 209, 7, 
+    4, 1, 243, 114, 7, 4, 1, 223, 154, 240, 255, 7, 4, 1, 215, 94, 242, 67, 
+    7, 4, 1, 242, 68, 2, 103, 7, 4, 1, 241, 215, 2, 103, 7, 4, 1, 240, 161, 
+    2, 91, 7, 4, 1, 235, 192, 7, 1, 4, 6, 74, 7, 4, 1, 233, 155, 2, 230, 229, 
+    184, 7, 4, 1, 233, 155, 2, 252, 49, 7, 4, 1, 233, 155, 2, 223, 58, 103, 
+    7, 4, 1, 233, 7, 7, 4, 1, 215, 94, 194, 7, 4, 1, 215, 94, 232, 55, 2, 
+    200, 233, 42, 7, 4, 1, 232, 55, 2, 103, 7, 4, 1, 230, 31, 2, 43, 103, 7, 
+    4, 1, 230, 31, 2, 223, 58, 103, 7, 1, 4, 6, 230, 30, 7, 4, 1, 252, 142, 
+    78, 7, 1, 4, 6, 226, 238, 7, 4, 1, 250, 8, 226, 205, 7, 4, 1, 225, 136, 
+    7, 4, 1, 215, 94, 153, 7, 4, 1, 215, 94, 223, 227, 2, 200, 233, 42, 7, 4, 
+    1, 215, 94, 223, 227, 2, 103, 7, 4, 1, 223, 227, 2, 200, 233, 42, 7, 4, 
+    1, 223, 227, 2, 217, 78, 7, 4, 1, 223, 227, 2, 244, 95, 7, 4, 1, 223, 52, 
+    223, 227, 2, 244, 95, 7, 1, 4, 6, 153, 7, 1, 4, 6, 235, 200, 153, 7, 4, 
+    1, 222, 94, 2, 103, 7, 4, 1, 245, 83, 7, 4, 1, 247, 127, 235, 151, 2, 
+    218, 105, 22, 103, 7, 4, 1, 218, 233, 223, 52, 245, 83, 7, 4, 1, 245, 84, 
+    2, 249, 108, 7, 4, 1, 215, 94, 217, 153, 7, 4, 1, 217, 154, 2, 223, 58, 
     103, 7, 4, 1, 104, 130, 7, 4, 1, 214, 157, 7, 4, 1, 214, 106, 2, 103, 7, 
     4, 1, 215, 94, 214, 105, 7, 4, 1, 215, 94, 212, 98, 7, 4, 1, 215, 94, 
-    211, 117, 7, 1, 4, 6, 211, 117, 7, 4, 1, 210, 160, 2, 223, 56, 103, 7, 4, 
-    1, 210, 160, 2, 249, 101, 7, 4, 1, 245, 9, 7, 4, 1, 245, 10, 2, 249, 101, 
-    7, 1, 242, 181, 218, 130, 7, 1, 225, 140, 213, 135, 243, 250, 7, 1, 235, 
-    194, 242, 181, 218, 130, 7, 1, 218, 111, 251, 67, 7, 1, 251, 247, 250, 
-    12, 7, 1, 4, 6, 253, 159, 7, 4, 1, 250, 1, 204, 75, 7, 1, 4, 6, 243, 204, 
-    2, 103, 7, 1, 4, 6, 242, 61, 7, 4, 1, 235, 146, 2, 249, 128, 7, 4, 1, 
-    215, 94, 235, 24, 7, 1, 4, 6, 156, 7, 4, 1, 224, 98, 2, 103, 7, 1, 242, 
-    181, 218, 131, 2, 91, 7, 1, 223, 50, 242, 181, 218, 131, 2, 91, 7, 4, 1, 
-    246, 41, 247, 221, 7, 4, 1, 248, 27, 247, 221, 7, 4, 1, 246, 41, 247, 
-    222, 2, 249, 101, 7, 4, 1, 215, 186, 247, 221, 7, 4, 1, 216, 236, 247, 
-    221, 7, 4, 1, 217, 30, 247, 222, 2, 249, 101, 7, 4, 1, 244, 135, 247, 
-    221, 7, 4, 1, 232, 101, 247, 221, 7, 4, 1, 232, 52, 247, 221, 7, 1, 251, 
-    247, 225, 182, 7, 1, 251, 255, 225, 182, 7, 4, 1, 215, 94, 242, 62, 2, 
-    244, 88, 7, 4, 1, 215, 94, 242, 62, 2, 244, 89, 22, 217, 78, 58, 1, 4, 
-    242, 61, 58, 1, 4, 242, 62, 2, 103, 58, 1, 4, 235, 145, 58, 1, 4, 153, 
-    58, 1, 4, 215, 94, 153, 58, 1, 4, 215, 94, 223, 225, 2, 103, 58, 1, 4, 6, 
-    235, 194, 153, 58, 1, 4, 212, 98, 58, 1, 4, 211, 117, 58, 1, 224, 191, 
-    58, 1, 52, 224, 191, 58, 1, 215, 94, 249, 220, 58, 1, 254, 58, 58, 1, 
-    223, 50, 249, 220, 58, 1, 44, 163, 222, 234, 58, 1, 43, 163, 222, 234, 
-    58, 1, 242, 181, 218, 130, 58, 1, 223, 50, 242, 181, 218, 130, 58, 1, 43, 
-    253, 250, 58, 1, 44, 253, 250, 58, 1, 120, 253, 250, 58, 1, 124, 253, 
-    250, 58, 1, 250, 32, 255, 15, 250, 235, 58, 1, 67, 232, 214, 58, 1, 231, 
-    233, 58, 1, 255, 4, 255, 15, 58, 1, 242, 138, 255, 15, 58, 1, 121, 67, 
-    232, 214, 58, 1, 121, 231, 233, 58, 1, 121, 242, 138, 255, 15, 58, 1, 
-    121, 255, 4, 255, 15, 58, 1, 215, 223, 249, 227, 58, 1, 163, 215, 223, 
-    249, 227, 58, 1, 250, 174, 44, 163, 222, 234, 58, 1, 250, 174, 43, 163, 
-    222, 234, 58, 1, 120, 217, 88, 58, 1, 124, 217, 88, 58, 1, 96, 50, 58, 1, 
-    230, 183, 50, 251, 147, 59, 48, 222, 235, 48, 226, 225, 4, 183, 52, 255, 
-    4, 255, 15, 58, 1, 223, 37, 103, 58, 1, 249, 132, 255, 15, 58, 1, 4, 243, 
-    108, 58, 1, 4, 156, 58, 1, 4, 222, 92, 58, 1, 4, 211, 178, 58, 1, 4, 223, 
-    50, 242, 181, 218, 130, 58, 1, 245, 21, 138, 130, 58, 1, 125, 138, 130, 
-    58, 1, 230, 226, 138, 130, 58, 1, 121, 138, 130, 58, 1, 245, 20, 138, 
-    130, 58, 1, 210, 254, 248, 45, 138, 78, 58, 1, 211, 70, 248, 45, 138, 78, 
-    58, 1, 213, 133, 58, 1, 214, 186, 58, 1, 52, 254, 58, 58, 1, 121, 124, 
-    253, 250, 58, 1, 121, 120, 253, 250, 58, 1, 121, 43, 253, 250, 58, 1, 
-    121, 44, 253, 250, 58, 1, 121, 222, 234, 58, 1, 230, 225, 242, 138, 255, 
-    15, 58, 1, 230, 225, 52, 242, 138, 255, 15, 58, 1, 230, 225, 52, 255, 4, 
-    255, 15, 58, 1, 121, 183, 58, 1, 223, 158, 249, 227, 58, 1, 252, 59, 125, 
-    216, 31, 58, 1, 245, 144, 125, 216, 31, 58, 1, 252, 59, 121, 216, 31, 58, 
-    1, 245, 144, 121, 216, 31, 58, 1, 220, 55, 58, 1, 204, 220, 55, 58, 1, 
-    121, 43, 74, 38, 242, 138, 255, 15, 38, 255, 4, 255, 15, 38, 250, 32, 
-    255, 15, 38, 183, 38, 231, 233, 38, 226, 120, 38, 251, 147, 38, 59, 48, 
-    38, 248, 2, 38, 241, 53, 48, 38, 222, 235, 48, 38, 52, 255, 4, 255, 15, 
-    38, 250, 235, 38, 67, 232, 215, 48, 38, 52, 67, 232, 215, 48, 38, 52, 
-    242, 138, 255, 15, 38, 251, 0, 38, 235, 194, 251, 147, 38, 215, 94, 249, 
-    221, 48, 38, 249, 221, 48, 38, 223, 50, 249, 221, 48, 38, 249, 221, 77, 
-    222, 252, 38, 242, 138, 255, 16, 51, 38, 255, 4, 255, 16, 51, 38, 43, 
-    217, 89, 51, 38, 44, 217, 89, 51, 38, 43, 254, 111, 48, 38, 240, 249, 38, 
-    43, 163, 222, 235, 51, 38, 120, 217, 89, 51, 38, 124, 217, 89, 51, 38, 
-    96, 5, 51, 38, 230, 183, 5, 51, 38, 226, 65, 241, 53, 51, 38, 223, 56, 
-    241, 53, 51, 38, 59, 51, 38, 248, 3, 51, 38, 222, 235, 51, 38, 249, 221, 
-    51, 38, 250, 184, 38, 226, 225, 38, 67, 232, 215, 51, 38, 251, 141, 51, 
-    38, 235, 194, 52, 254, 25, 51, 38, 250, 236, 51, 38, 250, 32, 255, 16, 
-    51, 38, 251, 148, 51, 38, 235, 194, 251, 148, 51, 38, 216, 90, 51, 38, 
-    231, 234, 51, 38, 121, 232, 214, 38, 52, 121, 232, 214, 38, 216, 90, 226, 
-    121, 38, 219, 252, 218, 104, 226, 121, 38, 199, 218, 104, 226, 121, 38, 
-    219, 252, 219, 48, 226, 121, 38, 199, 219, 48, 226, 121, 38, 44, 163, 
-    222, 235, 51, 38, 235, 194, 251, 141, 51, 38, 42, 51, 38, 221, 181, 51, 
-    38, 211, 179, 48, 38, 67, 183, 38, 52, 226, 120, 38, 242, 138, 138, 78, 
-    38, 255, 4, 138, 78, 38, 26, 225, 176, 38, 26, 234, 3, 38, 26, 247, 253, 
-    216, 19, 38, 26, 210, 219, 38, 251, 141, 48, 38, 245, 99, 5, 51, 38, 52, 
-    67, 232, 215, 51, 38, 43, 254, 111, 51, 38, 228, 53, 216, 90, 48, 38, 
-    241, 59, 48, 38, 254, 149, 128, 216, 43, 48, 38, 43, 44, 80, 51, 38, 214, 
-    153, 80, 51, 38, 242, 143, 235, 64, 38, 44, 253, 251, 48, 38, 43, 163, 
-    222, 235, 48, 38, 244, 132, 38, 211, 179, 51, 38, 43, 253, 251, 51, 38, 
-    44, 253, 251, 51, 38, 44, 253, 251, 22, 120, 253, 251, 51, 38, 44, 163, 
-    222, 235, 48, 38, 59, 77, 222, 252, 38, 253, 218, 51, 38, 52, 222, 235, 
-    51, 38, 210, 35, 48, 38, 52, 251, 148, 51, 38, 52, 251, 147, 38, 52, 231, 
-    233, 38, 52, 231, 234, 51, 38, 52, 183, 38, 52, 235, 194, 251, 147, 38, 
-    52, 97, 80, 51, 38, 7, 4, 1, 61, 38, 7, 4, 1, 75, 38, 7, 4, 1, 73, 38, 7, 
-    4, 1, 76, 38, 7, 4, 1, 70, 38, 7, 4, 1, 251, 67, 38, 7, 4, 1, 249, 61, 
-    38, 7, 4, 1, 242, 61, 38, 7, 4, 1, 193, 38, 7, 4, 1, 153, 38, 7, 4, 1, 
-    217, 153, 38, 7, 4, 1, 214, 105, 38, 7, 4, 1, 211, 178, 26, 6, 1, 241, 
-    197, 26, 4, 1, 241, 197, 26, 6, 1, 254, 24, 221, 247, 26, 4, 1, 254, 24, 
-    221, 247, 26, 227, 199, 50, 26, 232, 109, 227, 199, 50, 26, 6, 1, 226, 
-    52, 247, 228, 26, 4, 1, 226, 52, 247, 228, 26, 210, 219, 26, 4, 223, 50, 
-    232, 84, 219, 179, 87, 26, 4, 246, 119, 232, 84, 219, 179, 87, 26, 4, 
-    223, 50, 246, 119, 232, 84, 219, 179, 87, 26, 224, 14, 78, 26, 216, 19, 
-    26, 247, 253, 216, 19, 26, 6, 1, 254, 145, 2, 216, 19, 26, 254, 98, 217, 
-    3, 26, 6, 1, 245, 102, 2, 216, 19, 26, 6, 1, 245, 65, 2, 216, 19, 26, 6, 
-    1, 235, 187, 2, 216, 19, 26, 6, 1, 226, 201, 2, 216, 19, 26, 6, 1, 214, 
-    158, 2, 216, 19, 26, 6, 1, 226, 203, 2, 216, 19, 26, 4, 1, 235, 187, 2, 
-    247, 253, 22, 216, 19, 26, 6, 1, 254, 144, 26, 6, 1, 252, 27, 26, 6, 1, 
-    243, 108, 26, 6, 1, 248, 55, 26, 6, 1, 245, 101, 26, 6, 1, 210, 85, 26, 
-    6, 1, 245, 64, 26, 6, 1, 216, 180, 26, 6, 1, 235, 186, 26, 6, 1, 234, 
-    223, 26, 6, 1, 233, 99, 26, 6, 1, 230, 103, 26, 6, 1, 227, 238, 26, 6, 1, 
-    211, 157, 26, 6, 1, 226, 200, 26, 6, 1, 225, 109, 26, 6, 1, 223, 38, 26, 
-    6, 1, 219, 178, 26, 6, 1, 217, 42, 26, 6, 1, 214, 157, 26, 6, 1, 225, 
-    134, 26, 6, 1, 250, 111, 26, 6, 1, 224, 162, 26, 6, 1, 226, 202, 26, 6, 
-    1, 235, 187, 2, 247, 252, 26, 6, 1, 214, 158, 2, 247, 252, 26, 4, 1, 254, 
-    145, 2, 216, 19, 26, 4, 1, 245, 102, 2, 216, 19, 26, 4, 1, 245, 65, 2, 
-    216, 19, 26, 4, 1, 235, 187, 2, 216, 19, 26, 4, 1, 214, 158, 2, 247, 253, 
-    22, 216, 19, 26, 4, 1, 254, 144, 26, 4, 1, 252, 27, 26, 4, 1, 243, 108, 
-    26, 4, 1, 248, 55, 26, 4, 1, 245, 101, 26, 4, 1, 210, 85, 26, 4, 1, 245, 
-    64, 26, 4, 1, 216, 180, 26, 4, 1, 235, 186, 26, 4, 1, 234, 223, 26, 4, 1, 
-    233, 99, 26, 4, 1, 230, 103, 26, 4, 1, 227, 238, 26, 4, 1, 211, 157, 26, 
-    4, 1, 226, 200, 26, 4, 1, 225, 109, 26, 4, 1, 223, 38, 26, 4, 1, 40, 219, 
-    178, 26, 4, 1, 219, 178, 26, 4, 1, 217, 42, 26, 4, 1, 214, 157, 26, 4, 1, 
-    225, 134, 26, 4, 1, 250, 111, 26, 4, 1, 224, 162, 26, 4, 1, 226, 202, 26, 
-    4, 1, 235, 187, 2, 247, 252, 26, 4, 1, 214, 158, 2, 247, 252, 26, 4, 1, 
-    226, 201, 2, 216, 19, 26, 4, 1, 214, 158, 2, 216, 19, 26, 4, 1, 226, 203, 
-    2, 216, 19, 26, 6, 234, 248, 87, 26, 252, 28, 87, 26, 216, 181, 87, 26, 
-    214, 158, 2, 241, 53, 87, 26, 214, 158, 2, 255, 4, 22, 241, 53, 87, 26, 
-    214, 158, 2, 248, 3, 22, 241, 53, 87, 26, 225, 135, 87, 26, 225, 110, 87, 
-    26, 234, 248, 87, 26, 1, 254, 24, 234, 7, 26, 4, 1, 254, 24, 234, 7, 26, 
-    1, 218, 138, 26, 4, 1, 218, 138, 26, 1, 247, 228, 26, 4, 1, 247, 228, 26, 
-    1, 234, 7, 26, 4, 1, 234, 7, 26, 1, 221, 247, 26, 4, 1, 221, 247, 81, 6, 
-    1, 220, 56, 81, 4, 1, 220, 56, 81, 6, 1, 244, 141, 81, 4, 1, 244, 141, 
-    81, 6, 1, 234, 118, 81, 4, 1, 234, 118, 81, 6, 1, 241, 46, 81, 4, 1, 241, 
-    46, 81, 6, 1, 243, 103, 81, 4, 1, 243, 103, 81, 6, 1, 220, 23, 81, 4, 1, 
-    220, 23, 81, 6, 1, 248, 70, 81, 4, 1, 248, 70, 26, 234, 224, 87, 26, 223, 
-    39, 87, 26, 232, 84, 219, 179, 87, 26, 1, 210, 224, 26, 6, 216, 181, 87, 
-    26, 232, 84, 245, 102, 87, 26, 223, 50, 232, 84, 245, 102, 87, 26, 6, 1, 
-    220, 8, 26, 4, 1, 220, 8, 26, 6, 232, 84, 219, 179, 87, 26, 6, 1, 221, 
-    244, 26, 4, 1, 221, 244, 26, 223, 39, 2, 218, 104, 87, 26, 6, 223, 50, 
-    232, 84, 219, 179, 87, 26, 6, 246, 119, 232, 84, 219, 179, 87, 26, 6, 
-    223, 50, 246, 119, 232, 84, 219, 179, 87, 33, 6, 1, 236, 62, 2, 242, 137, 
-    33, 6, 1, 235, 190, 33, 6, 1, 247, 163, 33, 6, 1, 242, 188, 33, 6, 1, 
-    214, 202, 236, 61, 33, 6, 1, 246, 37, 33, 6, 1, 251, 77, 73, 33, 6, 1, 
-    211, 8, 33, 6, 1, 235, 127, 33, 6, 1, 232, 188, 33, 6, 1, 228, 179, 33, 
-    6, 1, 215, 175, 33, 6, 1, 234, 49, 33, 6, 1, 240, 155, 2, 242, 137, 33, 
-    6, 1, 219, 252, 70, 33, 6, 1, 246, 33, 33, 6, 1, 61, 33, 6, 1, 252, 76, 
-    33, 6, 1, 213, 255, 33, 6, 1, 242, 237, 33, 6, 1, 248, 91, 33, 6, 1, 236, 
-    61, 33, 6, 1, 210, 74, 33, 6, 1, 210, 94, 33, 6, 1, 73, 33, 6, 1, 219, 
-    252, 73, 33, 6, 1, 176, 33, 6, 1, 245, 175, 33, 6, 1, 245, 160, 33, 6, 1, 
-    245, 151, 33, 6, 1, 76, 33, 6, 1, 225, 222, 33, 6, 1, 245, 93, 33, 6, 1, 
-    245, 83, 33, 6, 1, 217, 23, 33, 6, 1, 70, 33, 6, 1, 245, 203, 33, 6, 1, 
-    162, 33, 6, 1, 215, 179, 33, 6, 1, 250, 132, 33, 6, 1, 220, 103, 33, 6, 
-    1, 220, 66, 33, 6, 1, 242, 4, 50, 33, 6, 1, 211, 27, 33, 6, 1, 219, 53, 
-    50, 33, 6, 1, 75, 33, 6, 1, 210, 212, 33, 6, 1, 191, 33, 4, 1, 61, 33, 4, 
-    1, 252, 76, 33, 4, 1, 213, 255, 33, 4, 1, 242, 237, 33, 4, 1, 248, 91, 
-    33, 4, 1, 236, 61, 33, 4, 1, 210, 74, 33, 4, 1, 210, 94, 33, 4, 1, 73, 
-    33, 4, 1, 219, 252, 73, 33, 4, 1, 176, 33, 4, 1, 245, 175, 33, 4, 1, 245, 
-    160, 33, 4, 1, 245, 151, 33, 4, 1, 76, 33, 4, 1, 225, 222, 33, 4, 1, 245, 
-    93, 33, 4, 1, 245, 83, 33, 4, 1, 217, 23, 33, 4, 1, 70, 33, 4, 1, 245, 
-    203, 33, 4, 1, 162, 33, 4, 1, 215, 179, 33, 4, 1, 250, 132, 33, 4, 1, 
-    220, 103, 33, 4, 1, 220, 66, 33, 4, 1, 242, 4, 50, 33, 4, 1, 211, 27, 33, 
-    4, 1, 219, 53, 50, 33, 4, 1, 75, 33, 4, 1, 210, 212, 33, 4, 1, 191, 33, 
-    4, 1, 236, 62, 2, 242, 137, 33, 4, 1, 235, 190, 33, 4, 1, 247, 163, 33, 
-    4, 1, 242, 188, 33, 4, 1, 214, 202, 236, 61, 33, 4, 1, 246, 37, 33, 4, 1, 
-    251, 77, 73, 33, 4, 1, 211, 8, 33, 4, 1, 235, 127, 33, 4, 1, 232, 188, 
-    33, 4, 1, 228, 179, 33, 4, 1, 215, 175, 33, 4, 1, 234, 49, 33, 4, 1, 240, 
-    155, 2, 242, 137, 33, 4, 1, 219, 252, 70, 33, 4, 1, 246, 33, 33, 6, 1, 
-    226, 202, 33, 4, 1, 226, 202, 33, 6, 1, 211, 59, 33, 4, 1, 211, 59, 33, 
-    6, 1, 235, 184, 75, 33, 4, 1, 235, 184, 75, 33, 6, 1, 232, 193, 210, 183, 
-    33, 4, 1, 232, 193, 210, 183, 33, 6, 1, 235, 184, 232, 193, 210, 183, 33, 
-    4, 1, 235, 184, 232, 193, 210, 183, 33, 6, 1, 251, 250, 210, 183, 33, 4, 
-    1, 251, 250, 210, 183, 33, 6, 1, 235, 184, 251, 250, 210, 183, 33, 4, 1, 
-    235, 184, 251, 250, 210, 183, 33, 6, 1, 233, 234, 33, 4, 1, 233, 234, 33, 
-    6, 1, 224, 162, 33, 4, 1, 224, 162, 33, 6, 1, 244, 83, 33, 4, 1, 244, 83, 
-    33, 6, 1, 235, 147, 33, 4, 1, 235, 147, 33, 6, 1, 235, 148, 2, 52, 242, 
-    138, 255, 15, 33, 4, 1, 235, 148, 2, 52, 242, 138, 255, 15, 33, 6, 1, 
-    214, 205, 33, 4, 1, 214, 205, 33, 6, 1, 222, 186, 226, 202, 33, 4, 1, 
-    222, 186, 226, 202, 33, 6, 1, 226, 203, 2, 216, 66, 33, 4, 1, 226, 203, 
-    2, 216, 66, 33, 6, 1, 226, 141, 33, 4, 1, 226, 141, 33, 6, 1, 234, 7, 33, 
-    4, 1, 234, 7, 33, 216, 147, 50, 38, 33, 216, 66, 38, 33, 226, 66, 38, 33, 
-    248, 155, 225, 19, 38, 33, 224, 156, 225, 19, 38, 33, 225, 4, 38, 33, 
-    240, 212, 216, 147, 50, 38, 33, 230, 192, 50, 33, 6, 1, 219, 252, 240, 
-    155, 2, 217, 78, 33, 4, 1, 219, 252, 240, 155, 2, 217, 78, 33, 6, 1, 220, 
-    147, 50, 33, 4, 1, 220, 147, 50, 33, 6, 1, 245, 94, 2, 216, 115, 33, 4, 
-    1, 245, 94, 2, 216, 115, 33, 6, 1, 242, 238, 2, 214, 156, 33, 4, 1, 242, 
-    238, 2, 214, 156, 33, 6, 1, 242, 238, 2, 91, 33, 4, 1, 242, 238, 2, 91, 
-    33, 6, 1, 242, 238, 2, 230, 225, 103, 33, 4, 1, 242, 238, 2, 230, 225, 
-    103, 33, 6, 1, 210, 75, 2, 248, 40, 33, 4, 1, 210, 75, 2, 248, 40, 33, 6, 
-    1, 210, 95, 2, 248, 40, 33, 4, 1, 210, 95, 2, 248, 40, 33, 6, 1, 235, 14, 
-    2, 248, 40, 33, 4, 1, 235, 14, 2, 248, 40, 33, 6, 1, 235, 14, 2, 67, 91, 
-    33, 4, 1, 235, 14, 2, 67, 91, 33, 6, 1, 235, 14, 2, 91, 33, 4, 1, 235, 
-    14, 2, 91, 33, 6, 1, 252, 125, 176, 33, 4, 1, 252, 125, 176, 33, 6, 1, 
-    245, 152, 2, 248, 40, 33, 4, 1, 245, 152, 2, 248, 40, 33, 6, 27, 245, 
-    152, 242, 237, 33, 4, 27, 245, 152, 242, 237, 33, 6, 1, 225, 223, 2, 230, 
-    225, 103, 33, 4, 1, 225, 223, 2, 230, 225, 103, 33, 6, 1, 255, 21, 162, 
-    33, 4, 1, 255, 21, 162, 33, 6, 1, 245, 84, 2, 248, 40, 33, 4, 1, 245, 84, 
-    2, 248, 40, 33, 6, 1, 217, 24, 2, 248, 40, 33, 4, 1, 217, 24, 2, 248, 40, 
-    33, 6, 1, 218, 122, 70, 33, 4, 1, 218, 122, 70, 33, 6, 1, 218, 122, 104, 
-    2, 91, 33, 4, 1, 218, 122, 104, 2, 91, 33, 6, 1, 242, 50, 2, 248, 40, 33, 
-    4, 1, 242, 50, 2, 248, 40, 33, 6, 27, 217, 24, 215, 179, 33, 4, 27, 217, 
-    24, 215, 179, 33, 6, 1, 250, 133, 2, 248, 40, 33, 4, 1, 250, 133, 2, 248, 
-    40, 33, 6, 1, 250, 133, 2, 67, 91, 33, 4, 1, 250, 133, 2, 67, 91, 33, 6, 
-    1, 220, 34, 33, 4, 1, 220, 34, 33, 6, 1, 255, 21, 250, 132, 33, 4, 1, 
-    255, 21, 250, 132, 33, 6, 1, 255, 21, 250, 133, 2, 248, 40, 33, 4, 1, 
-    255, 21, 250, 133, 2, 248, 40, 33, 1, 226, 59, 33, 6, 1, 210, 75, 2, 251, 
-    147, 33, 4, 1, 210, 75, 2, 251, 147, 33, 6, 1, 235, 14, 2, 103, 33, 4, 1, 
-    235, 14, 2, 103, 33, 6, 1, 245, 176, 2, 217, 78, 33, 4, 1, 245, 176, 2, 
-    217, 78, 33, 6, 1, 245, 152, 2, 103, 33, 4, 1, 245, 152, 2, 103, 33, 6, 
-    1, 245, 152, 2, 217, 78, 33, 4, 1, 245, 152, 2, 217, 78, 33, 6, 1, 234, 
-    128, 250, 132, 33, 4, 1, 234, 128, 250, 132, 33, 6, 1, 245, 161, 2, 217, 
-    78, 33, 4, 1, 245, 161, 2, 217, 78, 33, 4, 1, 226, 59, 33, 6, 1, 115, 2, 
-    251, 147, 33, 4, 1, 115, 2, 251, 147, 33, 6, 1, 115, 2, 248, 2, 33, 4, 1, 
-    115, 2, 248, 2, 33, 6, 27, 115, 236, 61, 33, 4, 27, 115, 236, 61, 33, 6, 
-    1, 236, 62, 2, 251, 147, 33, 4, 1, 236, 62, 2, 251, 147, 33, 6, 1, 221, 
-    196, 33, 4, 1, 221, 196, 33, 6, 1, 221, 197, 2, 248, 2, 33, 4, 1, 221, 
-    197, 2, 248, 2, 33, 6, 1, 210, 75, 2, 248, 2, 33, 4, 1, 210, 75, 2, 248, 
-    2, 33, 6, 1, 210, 95, 2, 248, 2, 33, 4, 1, 210, 95, 2, 248, 2, 33, 6, 1, 
-    255, 21, 246, 37, 33, 4, 1, 255, 21, 246, 37, 33, 6, 1, 240, 155, 2, 231, 
-    233, 33, 4, 1, 240, 155, 2, 231, 233, 33, 6, 1, 240, 155, 2, 248, 2, 33, 
-    4, 1, 240, 155, 2, 248, 2, 33, 6, 1, 144, 2, 248, 2, 33, 4, 1, 144, 2, 
-    248, 2, 33, 6, 1, 252, 135, 76, 33, 4, 1, 252, 135, 76, 33, 6, 1, 252, 
-    135, 144, 2, 248, 2, 33, 4, 1, 252, 135, 144, 2, 248, 2, 33, 6, 1, 160, 
-    2, 248, 2, 33, 4, 1, 160, 2, 248, 2, 33, 6, 1, 104, 2, 231, 233, 33, 4, 
-    1, 104, 2, 231, 233, 33, 6, 1, 104, 2, 248, 2, 33, 4, 1, 104, 2, 248, 2, 
-    33, 6, 1, 104, 2, 52, 142, 33, 4, 1, 104, 2, 52, 142, 33, 6, 1, 250, 133, 
-    2, 248, 2, 33, 4, 1, 250, 133, 2, 248, 2, 33, 6, 1, 242, 238, 2, 248, 40, 
-    33, 4, 1, 242, 238, 2, 248, 40, 33, 6, 1, 211, 28, 2, 248, 2, 33, 4, 1, 
-    211, 28, 2, 248, 2, 33, 6, 1, 242, 238, 2, 218, 104, 22, 103, 33, 4, 1, 
-    242, 238, 2, 218, 104, 22, 103, 33, 6, 1, 242, 50, 2, 103, 33, 4, 1, 242, 
-    50, 2, 103, 33, 6, 1, 242, 50, 2, 91, 33, 4, 1, 242, 50, 2, 91, 33, 6, 1, 
-    234, 15, 248, 91, 33, 4, 1, 234, 15, 248, 91, 33, 6, 1, 234, 15, 247, 
-    163, 33, 4, 1, 234, 15, 247, 163, 33, 6, 1, 234, 15, 210, 27, 33, 4, 1, 
-    234, 15, 210, 27, 33, 6, 1, 234, 15, 246, 31, 33, 4, 1, 234, 15, 246, 31, 
-    33, 6, 1, 234, 15, 232, 188, 33, 4, 1, 234, 15, 232, 188, 33, 6, 1, 234, 
-    15, 228, 179, 33, 4, 1, 234, 15, 228, 179, 33, 6, 1, 234, 15, 219, 110, 
-    33, 4, 1, 234, 15, 219, 110, 33, 6, 1, 234, 15, 216, 61, 33, 4, 1, 234, 
-    15, 216, 61, 33, 6, 1, 223, 50, 210, 94, 33, 4, 1, 223, 50, 210, 94, 33, 
-    6, 1, 245, 176, 2, 103, 33, 4, 1, 245, 176, 2, 103, 33, 6, 1, 232, 255, 
-    33, 4, 1, 232, 255, 33, 6, 1, 223, 40, 33, 4, 1, 223, 40, 33, 6, 1, 211, 
-    92, 33, 4, 1, 211, 92, 33, 6, 1, 224, 89, 33, 4, 1, 224, 89, 33, 6, 1, 
-    212, 22, 33, 4, 1, 212, 22, 33, 6, 1, 254, 167, 176, 33, 4, 1, 254, 167, 
-    176, 33, 6, 1, 245, 176, 2, 230, 225, 103, 33, 4, 1, 245, 176, 2, 230, 
-    225, 103, 33, 6, 1, 245, 152, 2, 230, 225, 103, 33, 4, 1, 245, 152, 2, 
-    230, 225, 103, 33, 6, 1, 225, 223, 2, 248, 40, 33, 4, 1, 225, 223, 2, 
-    248, 40, 33, 6, 1, 220, 35, 2, 248, 40, 33, 4, 1, 220, 35, 2, 248, 40, 
-    150, 6, 1, 253, 165, 150, 6, 1, 252, 40, 150, 6, 1, 242, 204, 150, 6, 1, 
-    248, 222, 150, 6, 1, 245, 214, 150, 6, 1, 210, 116, 150, 6, 1, 245, 198, 
-    150, 6, 1, 245, 66, 150, 6, 1, 111, 150, 6, 1, 210, 74, 150, 6, 1, 235, 
-    228, 150, 6, 1, 232, 191, 150, 6, 1, 211, 160, 150, 6, 1, 251, 34, 150, 
-    6, 1, 234, 166, 150, 6, 1, 241, 69, 150, 6, 1, 235, 142, 150, 6, 1, 242, 
-    247, 150, 6, 1, 250, 127, 150, 6, 1, 231, 59, 150, 6, 1, 211, 8, 150, 6, 
-    1, 228, 40, 150, 6, 1, 220, 103, 150, 6, 1, 213, 138, 150, 6, 1, 250, 
-    158, 150, 6, 1, 225, 206, 150, 6, 1, 235, 111, 150, 6, 1, 205, 150, 6, 1, 
-    221, 162, 150, 6, 1, 213, 179, 150, 6, 1, 216, 63, 150, 6, 1, 223, 96, 
-    150, 6, 1, 249, 239, 150, 6, 1, 210, 249, 150, 6, 1, 225, 47, 150, 6, 1, 
-    234, 177, 150, 6, 1, 226, 223, 150, 6, 1, 244, 143, 150, 58, 1, 43, 163, 
-    222, 234, 150, 254, 58, 150, 245, 155, 78, 150, 245, 32, 78, 150, 249, 
-    220, 150, 224, 14, 78, 150, 255, 22, 78, 150, 4, 1, 253, 165, 150, 4, 1, 
-    252, 40, 150, 4, 1, 242, 204, 150, 4, 1, 248, 222, 150, 4, 1, 245, 214, 
-    150, 4, 1, 210, 116, 150, 4, 1, 245, 198, 150, 4, 1, 245, 66, 150, 4, 1, 
-    111, 150, 4, 1, 210, 74, 150, 4, 1, 235, 228, 150, 4, 1, 232, 191, 150, 
-    4, 1, 211, 160, 150, 4, 1, 251, 34, 150, 4, 1, 234, 166, 150, 4, 1, 241, 
-    69, 150, 4, 1, 235, 142, 150, 4, 1, 242, 247, 150, 4, 1, 250, 127, 150, 
-    4, 1, 231, 59, 150, 4, 1, 211, 8, 150, 4, 1, 228, 40, 150, 4, 1, 220, 
-    103, 150, 4, 1, 213, 138, 150, 4, 1, 250, 158, 150, 4, 1, 225, 206, 150, 
-    4, 1, 235, 111, 150, 4, 1, 205, 150, 4, 1, 221, 162, 150, 4, 1, 213, 179, 
-    150, 4, 1, 216, 63, 150, 4, 1, 223, 96, 150, 4, 1, 249, 239, 150, 4, 1, 
-    210, 249, 150, 4, 1, 225, 47, 150, 4, 1, 234, 177, 150, 4, 1, 226, 223, 
-    150, 4, 1, 244, 143, 150, 4, 27, 245, 215, 210, 249, 150, 243, 230, 218, 
-    130, 150, 240, 169, 150, 246, 96, 50, 94, 255, 16, 245, 58, 94, 255, 16, 
-    221, 163, 94, 255, 16, 220, 89, 94, 255, 16, 210, 104, 224, 72, 94, 255, 
-    16, 210, 104, 243, 126, 94, 255, 16, 216, 76, 94, 255, 16, 223, 48, 94, 
-    255, 16, 210, 103, 94, 255, 16, 225, 246, 94, 255, 16, 211, 20, 94, 255, 
-    16, 216, 215, 94, 255, 16, 243, 42, 94, 255, 16, 243, 43, 230, 70, 94, 
-    255, 16, 243, 40, 94, 255, 16, 224, 73, 226, 17, 94, 255, 16, 216, 254, 
-    243, 57, 94, 255, 16, 225, 227, 94, 255, 16, 253, 201, 242, 42, 94, 255, 
-    16, 230, 80, 94, 255, 16, 231, 209, 94, 255, 16, 231, 50, 94, 255, 16, 
-    231, 51, 234, 178, 94, 255, 16, 248, 164, 94, 255, 16, 224, 84, 94, 255, 
-    16, 216, 254, 224, 68, 94, 255, 16, 211, 30, 252, 41, 210, 230, 94, 255, 
-    16, 226, 208, 94, 255, 16, 236, 20, 94, 255, 16, 248, 71, 94, 255, 16, 
-    210, 33, 94, 164, 231, 144, 250, 36, 94, 225, 12, 220, 37, 94, 225, 12, 
-    241, 251, 221, 163, 94, 225, 12, 241, 251, 225, 240, 94, 225, 12, 241, 
-    251, 224, 77, 94, 225, 12, 241, 159, 94, 225, 12, 215, 177, 94, 225, 12, 
-    221, 163, 94, 225, 12, 225, 240, 94, 225, 12, 224, 77, 94, 225, 12, 241, 
-    62, 94, 225, 12, 241, 63, 241, 253, 31, 214, 3, 94, 225, 12, 224, 18, 94, 
-    225, 12, 248, 209, 177, 231, 172, 94, 225, 12, 231, 39, 94, 224, 142, 
-    231, 169, 94, 225, 12, 223, 170, 94, 224, 142, 225, 248, 94, 225, 12, 
-    220, 22, 247, 121, 94, 225, 12, 219, 160, 247, 121, 94, 224, 142, 219, 
-    54, 225, 242, 94, 164, 214, 160, 247, 121, 94, 164, 232, 109, 247, 121, 
-    94, 224, 142, 227, 196, 242, 41, 94, 225, 12, 224, 78, 224, 72, 94, 1, 
-    254, 171, 94, 1, 252, 29, 94, 1, 242, 202, 94, 1, 248, 190, 94, 1, 241, 
-    239, 94, 1, 214, 3, 94, 1, 210, 97, 94, 1, 241, 198, 94, 1, 216, 231, 94, 
-    1, 210, 233, 94, 1, 40, 234, 251, 94, 1, 234, 251, 94, 1, 233, 95, 94, 1, 
-    40, 231, 66, 94, 1, 231, 66, 94, 1, 40, 227, 195, 94, 1, 227, 195, 94, 1, 
-    221, 250, 94, 1, 253, 163, 94, 1, 40, 225, 222, 94, 1, 225, 222, 94, 1, 
-    40, 215, 180, 94, 1, 215, 180, 94, 1, 224, 40, 94, 1, 223, 68, 94, 1, 
-    220, 21, 94, 1, 217, 39, 94, 27, 211, 6, 52, 214, 3, 94, 27, 211, 6, 214, 
-    4, 210, 233, 94, 27, 211, 6, 52, 210, 233, 94, 224, 142, 243, 42, 94, 
-    224, 142, 243, 40, 10, 54, 50, 10, 5, 221, 243, 10, 244, 31, 231, 155, 
-    10, 5, 222, 24, 10, 5, 221, 246, 254, 38, 249, 110, 222, 194, 254, 38, 
-    244, 5, 222, 194, 10, 223, 135, 254, 38, 225, 184, 230, 194, 50, 254, 38, 
-    225, 184, 216, 249, 216, 149, 50, 254, 222, 50, 10, 249, 220, 10, 248, 
-    151, 220, 138, 10, 225, 14, 213, 241, 50, 10, 5, 230, 175, 10, 5, 222, 4, 
-    254, 173, 212, 45, 10, 5, 254, 173, 253, 222, 10, 5, 223, 168, 254, 172, 
-    10, 5, 223, 176, 254, 153, 254, 105, 10, 5, 217, 71, 10, 4, 125, 217, 81, 
-    10, 4, 125, 27, 112, 2, 233, 104, 2, 211, 43, 10, 4, 125, 210, 108, 10, 
-    4, 244, 166, 10, 4, 248, 185, 10, 4, 234, 206, 10, 220, 151, 10, 215, 
-    212, 59, 224, 142, 78, 10, 224, 14, 78, 10, 1, 234, 210, 211, 43, 10, 1, 
-    242, 20, 10, 1, 112, 2, 231, 229, 48, 10, 1, 112, 2, 202, 48, 10, 1, 212, 
-    31, 2, 202, 48, 10, 1, 112, 2, 202, 51, 10, 1, 79, 2, 202, 48, 10, 1, 
-    254, 171, 10, 1, 252, 55, 10, 1, 217, 9, 231, 165, 10, 1, 217, 8, 10, 1, 
-    216, 193, 10, 1, 235, 124, 10, 1, 242, 38, 10, 1, 234, 130, 10, 1, 248, 
-    196, 10, 1, 216, 203, 10, 1, 223, 96, 10, 1, 210, 108, 10, 1, 221, 167, 
-    10, 1, 220, 60, 10, 1, 222, 27, 10, 1, 248, 217, 10, 1, 217, 81, 10, 1, 
-    210, 111, 10, 1, 254, 197, 10, 1, 242, 245, 10, 1, 234, 176, 2, 113, 170, 
-    48, 10, 1, 234, 176, 2, 134, 170, 51, 10, 1, 244, 169, 79, 2, 235, 194, 
-    214, 105, 10, 1, 244, 169, 79, 2, 113, 170, 48, 10, 1, 244, 169, 79, 2, 
-    134, 170, 48, 10, 217, 44, 10, 1, 244, 143, 10, 1, 224, 82, 10, 1, 234, 
-    251, 10, 1, 233, 103, 10, 1, 231, 79, 10, 1, 228, 63, 10, 1, 241, 219, 
-    10, 1, 212, 30, 10, 1, 112, 231, 193, 10, 1, 211, 43, 10, 244, 164, 10, 
-    248, 183, 10, 234, 204, 10, 244, 166, 10, 248, 185, 10, 234, 206, 10, 
-    220, 94, 10, 218, 46, 10, 231, 227, 48, 10, 202, 48, 10, 202, 51, 10, 
-    218, 66, 254, 171, 10, 235, 194, 248, 185, 10, 164, 228, 64, 242, 219, 
-    10, 209, 255, 10, 25, 5, 4, 214, 106, 48, 10, 25, 5, 235, 194, 4, 214, 
-    106, 48, 10, 25, 5, 59, 51, 10, 223, 50, 248, 185, 10, 244, 167, 2, 113, 
-    247, 119, 10, 212, 32, 202, 51, 254, 38, 21, 210, 86, 254, 38, 21, 110, 
-    254, 38, 21, 105, 254, 38, 21, 158, 254, 38, 21, 161, 254, 38, 21, 189, 
-    254, 38, 21, 194, 254, 38, 21, 198, 254, 38, 21, 195, 254, 38, 21, 200, 
-    10, 225, 183, 50, 10, 248, 84, 220, 138, 10, 216, 147, 220, 138, 10, 244, 
-    82, 225, 10, 218, 157, 10, 1, 247, 120, 252, 55, 10, 1, 247, 120, 224, 
-    82, 10, 1, 218, 24, 254, 171, 10, 1, 112, 212, 46, 10, 1, 112, 2, 212, 
-    32, 202, 48, 10, 1, 112, 2, 212, 32, 202, 51, 10, 1, 125, 242, 20, 10, 1, 
-    125, 202, 254, 171, 10, 1, 125, 202, 212, 30, 10, 1, 104, 2, 202, 48, 10, 
-    1, 125, 202, 211, 43, 10, 1, 215, 149, 10, 1, 215, 147, 10, 1, 252, 65, 
-    10, 1, 217, 9, 2, 222, 234, 10, 1, 217, 9, 2, 134, 170, 77, 246, 104, 10, 
-    1, 225, 206, 10, 1, 217, 6, 10, 1, 252, 53, 10, 1, 122, 2, 202, 48, 10, 
-    1, 122, 2, 113, 170, 67, 48, 10, 1, 227, 154, 10, 1, 246, 44, 10, 1, 122, 
-    2, 134, 170, 48, 10, 1, 217, 27, 10, 1, 217, 25, 10, 1, 248, 131, 10, 1, 
-    248, 197, 2, 222, 234, 10, 1, 248, 197, 2, 59, 51, 10, 1, 248, 197, 2, 
-    59, 252, 44, 22, 4, 217, 81, 10, 1, 248, 202, 10, 1, 248, 133, 10, 1, 
-    246, 71, 10, 1, 248, 197, 2, 134, 170, 77, 246, 104, 10, 1, 248, 197, 2, 
-    244, 12, 170, 48, 10, 1, 222, 172, 10, 1, 223, 97, 2, 4, 214, 105, 10, 1, 
-    223, 97, 2, 222, 234, 10, 1, 223, 97, 2, 59, 51, 10, 1, 223, 97, 2, 4, 
-    214, 106, 51, 10, 1, 223, 97, 2, 59, 252, 44, 22, 59, 48, 10, 1, 223, 97, 
-    2, 113, 170, 48, 10, 1, 235, 121, 10, 1, 223, 97, 2, 244, 12, 170, 48, 
-    10, 1, 221, 168, 2, 59, 252, 44, 22, 59, 48, 10, 1, 221, 168, 2, 134, 
-    170, 51, 10, 1, 221, 168, 2, 134, 170, 252, 44, 22, 134, 170, 48, 10, 1, 
-    222, 28, 2, 113, 170, 51, 10, 1, 222, 28, 2, 134, 170, 48, 10, 1, 217, 
-    82, 2, 134, 170, 48, 10, 1, 254, 198, 2, 134, 170, 48, 10, 1, 247, 120, 
-    244, 143, 10, 1, 244, 144, 2, 59, 230, 110, 51, 10, 1, 244, 144, 2, 59, 
-    51, 10, 1, 213, 248, 10, 1, 244, 144, 2, 134, 170, 51, 10, 1, 225, 204, 
-    10, 1, 224, 83, 2, 59, 48, 10, 1, 224, 83, 2, 134, 170, 48, 10, 1, 234, 
-    175, 10, 1, 217, 251, 234, 251, 10, 1, 234, 252, 2, 222, 234, 10, 1, 234, 
-    252, 2, 59, 48, 10, 1, 229, 80, 10, 1, 234, 252, 2, 134, 170, 51, 10, 1, 
-    243, 123, 10, 1, 243, 124, 2, 222, 234, 10, 1, 229, 3, 10, 1, 243, 124, 
-    2, 113, 170, 51, 10, 1, 242, 102, 10, 1, 243, 124, 2, 134, 170, 48, 10, 
-    1, 233, 104, 2, 4, 214, 105, 10, 1, 233, 104, 2, 59, 48, 10, 1, 233, 104, 
-    2, 134, 170, 48, 10, 1, 233, 104, 2, 134, 170, 51, 10, 1, 228, 64, 2, 59, 
-    51, 10, 1, 228, 64, 242, 219, 10, 1, 222, 215, 10, 1, 228, 64, 2, 222, 
-    234, 10, 1, 228, 64, 2, 134, 170, 48, 10, 1, 241, 220, 247, 142, 10, 1, 
-    217, 28, 2, 59, 48, 10, 1, 241, 220, 2, 79, 48, 10, 1, 241, 220, 242, 
-    172, 10, 1, 241, 220, 242, 173, 2, 202, 48, 10, 1, 217, 9, 231, 166, 242, 
-    172, 10, 1, 212, 31, 2, 222, 234, 10, 1, 234, 74, 226, 235, 10, 1, 226, 
-    235, 10, 1, 70, 10, 1, 210, 212, 10, 1, 234, 74, 210, 212, 10, 1, 212, 
-    31, 2, 113, 170, 48, 10, 1, 213, 255, 10, 1, 244, 169, 211, 43, 10, 1, 
-    79, 2, 217, 78, 10, 1, 79, 2, 4, 214, 105, 10, 1, 212, 31, 2, 59, 48, 10, 
-    1, 75, 10, 1, 79, 2, 134, 170, 51, 10, 1, 79, 252, 133, 10, 1, 79, 252, 
-    134, 2, 202, 48, 10, 243, 230, 218, 130, 10, 1, 254, 244, 10, 4, 125, 27, 
-    222, 28, 2, 233, 104, 2, 112, 231, 193, 10, 4, 125, 27, 224, 83, 2, 233, 
-    104, 2, 112, 231, 193, 10, 4, 125, 66, 65, 17, 10, 4, 125, 233, 104, 254, 
-    171, 10, 4, 125, 235, 124, 10, 4, 125, 134, 247, 119, 10, 4, 125, 221, 
-    167, 10, 245, 144, 64, 253, 167, 10, 218, 153, 64, 222, 139, 245, 176, 
-    241, 156, 10, 4, 125, 222, 184, 210, 86, 10, 4, 125, 214, 159, 223, 116, 
-    210, 86, 10, 4, 125, 247, 120, 241, 237, 64, 234, 130, 10, 4, 125, 66, 
-    53, 17, 10, 4, 121, 221, 167, 10, 4, 125, 231, 228, 10, 4, 212, 30, 10, 
-    4, 211, 43, 10, 4, 125, 211, 43, 10, 4, 125, 228, 63, 10, 225, 42, 64, 
-    222, 14, 10, 245, 153, 250, 176, 121, 218, 130, 10, 245, 153, 250, 176, 
-    125, 218, 130, 10, 222, 184, 125, 218, 131, 2, 244, 105, 250, 175, 10, 4, 
-    121, 231, 79, 10, 1, 248, 197, 2, 235, 194, 214, 105, 10, 1, 223, 97, 2, 
-    235, 194, 214, 105, 245, 23, 254, 38, 21, 210, 86, 245, 23, 254, 38, 21, 
-    110, 245, 23, 254, 38, 21, 105, 245, 23, 254, 38, 21, 158, 245, 23, 254, 
-    38, 21, 161, 245, 23, 254, 38, 21, 189, 245, 23, 254, 38, 21, 194, 245, 
-    23, 254, 38, 21, 198, 245, 23, 254, 38, 21, 195, 245, 23, 254, 38, 21, 
-    200, 10, 1, 220, 61, 2, 59, 51, 10, 1, 248, 218, 2, 59, 51, 10, 1, 242, 
-    246, 2, 59, 51, 10, 5, 219, 159, 254, 127, 10, 5, 219, 159, 224, 236, 
-    231, 59, 10, 1, 241, 220, 2, 235, 194, 214, 105, 182, 245, 144, 64, 226, 
-    15, 182, 218, 20, 243, 230, 218, 130, 182, 218, 68, 243, 230, 218, 130, 
-    182, 218, 20, 249, 227, 182, 218, 68, 249, 227, 182, 203, 249, 227, 182, 
-    249, 228, 219, 107, 233, 47, 182, 249, 228, 219, 107, 222, 252, 182, 218, 
-    20, 249, 228, 219, 107, 233, 47, 182, 218, 68, 249, 228, 219, 107, 222, 
-    252, 182, 249, 181, 182, 242, 2, 226, 251, 182, 242, 2, 231, 37, 182, 
-    242, 2, 253, 219, 182, 255, 22, 78, 182, 1, 254, 175, 182, 1, 218, 24, 
-    254, 175, 182, 1, 252, 26, 182, 1, 243, 114, 182, 1, 243, 115, 243, 92, 
-    182, 1, 248, 193, 182, 1, 247, 120, 248, 194, 222, 230, 182, 1, 241, 239, 
-    182, 1, 212, 30, 182, 1, 210, 108, 182, 1, 241, 196, 182, 1, 216, 227, 
-    182, 1, 216, 228, 243, 92, 182, 1, 210, 199, 182, 1, 210, 200, 241, 239, 
-    182, 1, 234, 226, 182, 1, 233, 102, 182, 1, 230, 191, 182, 1, 227, 195, 
-    182, 1, 220, 144, 182, 1, 40, 220, 144, 182, 1, 75, 182, 1, 225, 222, 
-    182, 1, 223, 50, 225, 222, 182, 1, 222, 25, 182, 1, 224, 76, 182, 1, 222, 
-    230, 182, 1, 220, 21, 182, 1, 217, 37, 182, 1, 225, 170, 252, 13, 182, 1, 
-    225, 170, 242, 243, 182, 1, 225, 170, 248, 21, 182, 224, 152, 48, 182, 
-    224, 152, 51, 182, 224, 152, 246, 118, 182, 210, 17, 48, 182, 210, 17, 
-    51, 182, 210, 17, 246, 118, 182, 223, 132, 48, 182, 223, 132, 51, 182, 
-    246, 119, 210, 24, 241, 45, 182, 246, 119, 210, 24, 254, 106, 182, 241, 
-    242, 48, 182, 241, 242, 51, 182, 241, 241, 246, 118, 182, 245, 80, 48, 
-    182, 245, 80, 51, 182, 222, 108, 182, 244, 137, 247, 121, 182, 223, 249, 
-    182, 222, 135, 182, 113, 67, 170, 48, 182, 113, 67, 170, 51, 182, 134, 
-    170, 48, 182, 134, 170, 51, 182, 226, 249, 232, 215, 48, 182, 226, 249, 
-    232, 215, 51, 182, 230, 57, 182, 252, 132, 182, 1, 219, 50, 210, 80, 182, 
-    1, 219, 50, 234, 123, 182, 1, 219, 50, 244, 155, 10, 1, 252, 56, 2, 134, 
-    170, 240, 251, 51, 10, 1, 252, 56, 2, 59, 252, 44, 22, 134, 170, 48, 10, 
-    1, 252, 56, 2, 134, 170, 225, 8, 214, 153, 51, 10, 1, 252, 56, 2, 134, 
-    170, 225, 8, 214, 153, 252, 44, 22, 113, 170, 48, 10, 1, 252, 56, 2, 113, 
-    170, 252, 44, 22, 59, 48, 10, 1, 252, 56, 2, 235, 194, 4, 214, 106, 51, 
-    10, 1, 252, 56, 2, 4, 214, 105, 10, 1, 122, 2, 113, 170, 48, 10, 1, 122, 
-    2, 134, 170, 225, 8, 214, 153, 51, 10, 1, 248, 197, 2, 113, 170, 213, 
-    189, 252, 44, 22, 4, 217, 81, 10, 1, 248, 197, 2, 235, 194, 4, 214, 106, 
-    51, 10, 1, 223, 97, 2, 91, 10, 1, 221, 168, 2, 244, 12, 170, 48, 10, 1, 
-    254, 198, 2, 113, 170, 48, 10, 1, 254, 198, 2, 134, 170, 225, 8, 246, 
-    105, 48, 10, 1, 254, 198, 2, 113, 170, 213, 189, 48, 10, 1, 244, 144, 2, 
-    113, 170, 51, 10, 1, 244, 144, 2, 134, 170, 225, 8, 214, 153, 51, 10, 1, 
-    234, 176, 2, 59, 48, 10, 1, 234, 176, 2, 134, 170, 48, 10, 1, 234, 176, 
-    2, 134, 170, 225, 8, 214, 153, 51, 10, 1, 66, 2, 59, 48, 10, 1, 66, 2, 
-    59, 51, 10, 1, 228, 64, 2, 113, 170, 51, 10, 1, 228, 64, 2, 4, 217, 81, 
-    10, 1, 228, 64, 2, 4, 214, 105, 10, 1, 233, 104, 2, 130, 10, 1, 223, 97, 
-    2, 113, 170, 213, 189, 48, 10, 1, 223, 97, 2, 202, 48, 10, 1, 221, 168, 
-    2, 113, 170, 213, 189, 48, 10, 1, 122, 2, 4, 10, 1, 217, 82, 51, 10, 1, 
-    122, 2, 4, 10, 1, 217, 82, 22, 113, 247, 119, 10, 1, 221, 168, 2, 4, 10, 
-    1, 217, 82, 22, 113, 247, 119, 10, 1, 223, 97, 2, 4, 10, 1, 217, 82, 22, 
-    113, 247, 119, 10, 1, 122, 2, 4, 10, 1, 217, 82, 48, 10, 1, 112, 2, 245, 
-    23, 254, 38, 21, 113, 48, 10, 1, 112, 2, 245, 23, 254, 38, 21, 134, 48, 
-    10, 1, 244, 169, 79, 2, 245, 23, 254, 38, 21, 113, 48, 10, 1, 244, 169, 
-    79, 2, 245, 23, 254, 38, 21, 134, 48, 10, 1, 244, 169, 79, 2, 245, 23, 
-    254, 38, 21, 244, 12, 51, 10, 1, 212, 31, 2, 245, 23, 254, 38, 21, 113, 
-    48, 10, 1, 212, 31, 2, 245, 23, 254, 38, 21, 134, 48, 10, 1, 79, 252, 
-    134, 2, 245, 23, 254, 38, 21, 113, 48, 10, 1, 79, 252, 134, 2, 245, 23, 
-    254, 38, 21, 134, 48, 10, 1, 122, 2, 245, 23, 254, 38, 21, 244, 12, 51, 
-    10, 1, 221, 168, 2, 245, 23, 254, 38, 21, 244, 12, 48, 10, 1, 221, 168, 
-    2, 235, 194, 214, 105, 10, 1, 234, 252, 2, 113, 170, 48, 216, 206, 1, 
-    242, 47, 216, 206, 1, 220, 69, 216, 206, 1, 228, 62, 216, 206, 1, 223, 
-    185, 216, 206, 1, 252, 190, 216, 206, 1, 232, 252, 216, 206, 1, 235, 9, 
-    216, 206, 1, 254, 160, 216, 206, 1, 214, 25, 216, 206, 1, 231, 78, 216, 
-    206, 1, 244, 195, 216, 206, 1, 248, 24, 216, 206, 1, 216, 208, 216, 206, 
-    1, 233, 132, 216, 206, 1, 243, 132, 216, 206, 1, 242, 178, 216, 206, 1, 
-    221, 166, 216, 206, 1, 248, 149, 216, 206, 1, 210, 100, 216, 206, 1, 217, 
-    38, 216, 206, 1, 211, 103, 216, 206, 1, 225, 234, 216, 206, 1, 235, 129, 
-    216, 206, 1, 250, 135, 216, 206, 1, 215, 156, 216, 206, 1, 241, 189, 216, 
-    206, 1, 234, 132, 216, 206, 1, 216, 207, 216, 206, 1, 210, 115, 216, 206, 
-    1, 220, 59, 216, 206, 1, 222, 31, 216, 206, 1, 248, 220, 216, 206, 1, 
-    111, 216, 206, 1, 210, 23, 216, 206, 1, 254, 194, 216, 206, 1, 242, 244, 
-    216, 206, 1, 224, 86, 216, 206, 1, 212, 63, 216, 206, 255, 23, 216, 206, 
-    255, 39, 216, 206, 240, 115, 216, 206, 245, 209, 216, 206, 214, 222, 216, 
-    206, 226, 183, 216, 206, 245, 217, 216, 206, 245, 17, 216, 206, 226, 248, 
-    216, 206, 227, 0, 216, 206, 218, 46, 216, 206, 1, 229, 226, 228, 138, 21, 
-    210, 86, 228, 138, 21, 110, 228, 138, 21, 105, 228, 138, 21, 158, 228, 
-    138, 21, 161, 228, 138, 21, 189, 228, 138, 21, 194, 228, 138, 21, 198, 
-    228, 138, 21, 195, 228, 138, 21, 200, 228, 138, 1, 61, 228, 138, 1, 245, 
-    210, 228, 138, 1, 73, 228, 138, 1, 75, 228, 138, 1, 70, 228, 138, 1, 226, 
-    184, 228, 138, 1, 76, 228, 138, 1, 248, 210, 228, 138, 1, 230, 26, 228, 
-    138, 1, 252, 192, 228, 138, 1, 190, 228, 138, 1, 217, 106, 228, 138, 1, 
-    235, 142, 228, 138, 1, 250, 158, 228, 138, 1, 248, 222, 228, 138, 1, 205, 
-    228, 138, 1, 222, 180, 228, 138, 1, 206, 228, 138, 1, 243, 80, 228, 138, 
-    1, 244, 197, 228, 138, 1, 176, 228, 138, 1, 233, 136, 228, 138, 1, 229, 
-    230, 211, 223, 228, 138, 1, 185, 228, 138, 1, 227, 166, 228, 138, 1, 197, 
-    228, 138, 1, 162, 228, 138, 1, 212, 65, 228, 138, 1, 191, 228, 138, 1, 
-    227, 167, 211, 223, 228, 138, 1, 235, 62, 235, 142, 228, 138, 1, 235, 62, 
-    250, 158, 228, 138, 1, 235, 62, 205, 228, 138, 38, 219, 252, 125, 216, 
-    31, 228, 138, 38, 219, 252, 121, 216, 31, 228, 138, 38, 219, 252, 222, 
-    229, 216, 31, 228, 138, 38, 199, 248, 39, 216, 31, 228, 138, 38, 199, 
-    125, 216, 31, 228, 138, 38, 199, 121, 216, 31, 228, 138, 38, 199, 222, 
-    229, 216, 31, 228, 138, 38, 229, 194, 78, 228, 138, 38, 52, 59, 48, 228, 
-    138, 125, 138, 254, 58, 228, 138, 121, 138, 254, 58, 228, 138, 16, 226, 
-    185, 248, 51, 228, 138, 16, 243, 79, 228, 138, 249, 220, 228, 138, 245, 
-    32, 78, 228, 138, 233, 109, 221, 253, 1, 254, 177, 221, 253, 1, 251, 229, 
-    221, 253, 1, 243, 113, 221, 253, 1, 248, 195, 221, 253, 1, 235, 153, 221, 
-    253, 1, 252, 190, 221, 253, 1, 210, 89, 221, 253, 1, 235, 161, 221, 253, 
-    1, 216, 68, 221, 253, 1, 210, 182, 221, 253, 1, 235, 10, 221, 253, 1, 
-    233, 129, 221, 253, 1, 230, 191, 221, 253, 1, 227, 195, 221, 253, 1, 219, 
-    157, 221, 253, 1, 236, 0, 221, 253, 1, 244, 122, 221, 253, 1, 215, 182, 
-    221, 253, 1, 224, 11, 221, 253, 1, 222, 230, 221, 253, 1, 220, 86, 221, 
-    253, 1, 217, 101, 221, 253, 164, 236, 0, 221, 253, 164, 235, 255, 221, 
-    253, 164, 226, 244, 221, 253, 164, 248, 208, 221, 253, 58, 1, 245, 106, 
-    210, 182, 221, 253, 164, 245, 106, 210, 182, 221, 253, 25, 5, 199, 75, 
-    221, 253, 25, 5, 75, 221, 253, 25, 5, 226, 119, 255, 74, 221, 253, 25, 5, 
-    199, 255, 74, 221, 253, 25, 5, 255, 74, 221, 253, 25, 5, 226, 119, 61, 
-    221, 253, 25, 5, 199, 61, 221, 253, 25, 5, 61, 221, 253, 58, 1, 219, 252, 
-    61, 221, 253, 25, 5, 219, 252, 61, 221, 253, 25, 5, 199, 70, 221, 253, 
-    25, 5, 70, 221, 253, 58, 1, 73, 221, 253, 25, 5, 199, 73, 221, 253, 25, 
-    5, 73, 221, 253, 25, 5, 76, 221, 253, 25, 5, 218, 46, 221, 253, 164, 229, 
-    93, 221, 253, 224, 142, 229, 93, 221, 253, 224, 142, 254, 219, 221, 253, 
-    224, 142, 254, 115, 221, 253, 224, 142, 252, 115, 221, 253, 224, 142, 
-    253, 202, 221, 253, 224, 142, 220, 9, 221, 253, 255, 22, 78, 221, 253, 
-    224, 142, 231, 69, 224, 46, 221, 253, 224, 142, 210, 31, 221, 253, 224, 
-    142, 224, 46, 221, 253, 224, 142, 210, 114, 221, 253, 224, 142, 215, 90, 
-    221, 253, 224, 142, 254, 10, 221, 253, 224, 142, 219, 54, 231, 146, 221, 
-    253, 224, 142, 254, 101, 231, 183, 1, 242, 25, 231, 183, 1, 255, 26, 231, 
-    183, 1, 254, 217, 231, 183, 1, 255, 0, 231, 183, 1, 254, 210, 231, 183, 
-    1, 214, 124, 231, 183, 1, 253, 161, 231, 183, 1, 235, 161, 231, 183, 1, 
-    253, 199, 231, 183, 1, 254, 182, 231, 183, 1, 254, 187, 231, 183, 1, 254, 
-    179, 231, 183, 1, 254, 137, 231, 183, 1, 254, 124, 231, 183, 1, 253, 238, 
-    231, 183, 1, 236, 0, 231, 183, 1, 254, 73, 231, 183, 1, 253, 209, 231, 
-    183, 1, 254, 46, 231, 183, 1, 254, 42, 231, 183, 1, 253, 232, 231, 183, 
-    1, 253, 207, 231, 183, 1, 246, 56, 231, 183, 1, 235, 3, 231, 183, 1, 254, 
-    197, 231, 183, 254, 223, 78, 231, 183, 213, 136, 78, 231, 183, 243, 54, 
-    78, 231, 183, 224, 141, 10, 1, 252, 56, 2, 4, 214, 106, 51, 10, 1, 151, 
-    2, 113, 170, 48, 10, 1, 217, 82, 2, 113, 170, 48, 10, 1, 244, 144, 2, 59, 
-    252, 44, 22, 134, 170, 48, 10, 1, 224, 83, 2, 59, 51, 10, 1, 233, 104, 2, 
-    52, 130, 10, 1, 66, 2, 134, 170, 48, 10, 1, 79, 2, 113, 170, 252, 44, 22, 
-    202, 48, 10, 1, 79, 2, 113, 170, 252, 44, 22, 59, 48, 10, 1, 223, 97, 2, 
-    232, 124, 10, 1, 212, 31, 2, 59, 211, 231, 10, 1, 222, 202, 211, 43, 10, 
-    249, 100, 244, 166, 10, 249, 100, 248, 185, 10, 249, 100, 234, 206, 10, 
-    249, 100, 244, 164, 10, 249, 100, 248, 183, 10, 249, 100, 234, 204, 10, 
-    138, 123, 59, 48, 10, 138, 113, 170, 48, 10, 138, 232, 125, 48, 10, 138, 
-    123, 59, 51, 10, 138, 113, 170, 51, 10, 138, 232, 125, 51, 10, 204, 244, 
-    164, 10, 204, 248, 183, 10, 204, 234, 204, 10, 4, 125, 212, 30, 10, 244, 
-    167, 2, 222, 234, 10, 244, 167, 2, 59, 48, 10, 234, 207, 2, 59, 51, 10, 
-    43, 253, 251, 48, 10, 44, 253, 251, 48, 10, 43, 253, 251, 51, 10, 44, 
-    253, 251, 51, 10, 52, 44, 253, 251, 48, 10, 52, 44, 253, 251, 77, 2, 247, 
-    121, 10, 44, 253, 251, 77, 2, 247, 121, 10, 248, 186, 2, 247, 121, 84, 5, 
-    235, 194, 251, 0, 84, 5, 251, 0, 84, 5, 254, 76, 84, 5, 213, 147, 84, 1, 
-    219, 252, 61, 84, 1, 61, 84, 1, 255, 74, 84, 1, 73, 84, 1, 236, 34, 84, 
-    1, 70, 84, 1, 214, 118, 84, 1, 149, 153, 84, 1, 149, 156, 84, 1, 251, 3, 
-    75, 84, 1, 219, 252, 75, 84, 1, 75, 84, 1, 254, 202, 84, 1, 251, 3, 76, 
-    84, 1, 219, 252, 76, 84, 1, 76, 84, 1, 253, 193, 84, 1, 176, 84, 1, 234, 
-    133, 84, 1, 243, 136, 84, 1, 242, 250, 84, 1, 229, 78, 84, 1, 251, 34, 
-    84, 1, 250, 158, 84, 1, 235, 142, 84, 1, 235, 115, 84, 1, 227, 166, 84, 
-    1, 215, 157, 84, 1, 215, 145, 84, 1, 248, 136, 84, 1, 248, 120, 84, 1, 
-    228, 111, 84, 1, 217, 106, 84, 1, 216, 209, 84, 1, 248, 222, 84, 1, 248, 
-    26, 84, 1, 197, 84, 1, 228, 93, 84, 1, 190, 84, 1, 225, 148, 84, 1, 252, 
-    192, 84, 1, 252, 19, 84, 1, 185, 84, 1, 191, 84, 1, 205, 84, 1, 222, 180, 
-    84, 1, 233, 136, 84, 1, 232, 185, 84, 1, 232, 176, 84, 1, 214, 27, 84, 1, 
-    220, 103, 84, 1, 218, 224, 84, 1, 206, 84, 1, 162, 84, 25, 5, 226, 235, 
-    84, 25, 5, 226, 182, 84, 5, 227, 206, 84, 5, 253, 176, 84, 25, 5, 255, 
-    74, 84, 25, 5, 73, 84, 25, 5, 236, 34, 84, 25, 5, 70, 84, 25, 5, 214, 
-    118, 84, 25, 5, 149, 153, 84, 25, 5, 149, 222, 181, 84, 25, 5, 251, 3, 
-    75, 84, 25, 5, 219, 252, 75, 84, 25, 5, 75, 84, 25, 5, 254, 202, 84, 25, 
-    5, 251, 3, 76, 84, 25, 5, 219, 252, 76, 84, 25, 5, 76, 84, 25, 5, 253, 
-    193, 84, 5, 213, 152, 84, 25, 5, 224, 186, 75, 84, 25, 5, 253, 172, 84, 
-    226, 205, 84, 218, 112, 5, 214, 216, 84, 218, 112, 5, 254, 78, 84, 242, 
-    138, 255, 15, 84, 255, 4, 255, 15, 84, 25, 5, 251, 3, 199, 75, 84, 25, 5, 
-    214, 214, 84, 25, 5, 214, 117, 84, 1, 224, 89, 84, 1, 234, 116, 84, 1, 
-    242, 227, 84, 1, 210, 116, 84, 1, 248, 125, 84, 1, 223, 40, 84, 1, 244, 
-    197, 84, 1, 210, 168, 84, 1, 149, 222, 181, 84, 1, 149, 232, 186, 84, 25, 
-    5, 149, 156, 84, 25, 5, 149, 232, 186, 84, 248, 179, 84, 52, 248, 179, 
-    84, 21, 210, 86, 84, 21, 110, 84, 21, 105, 84, 21, 158, 84, 21, 161, 84, 
-    21, 189, 84, 21, 194, 84, 21, 198, 84, 21, 195, 84, 21, 200, 84, 255, 22, 
-    50, 84, 5, 125, 219, 18, 247, 121, 84, 1, 251, 3, 61, 84, 1, 226, 235, 
-    84, 1, 226, 182, 84, 1, 253, 172, 84, 1, 214, 214, 84, 1, 214, 117, 84, 
-    1, 210, 82, 84, 1, 114, 191, 84, 1, 243, 30, 84, 1, 235, 97, 84, 1, 242, 
-    181, 218, 130, 84, 1, 248, 126, 84, 1, 252, 112, 146, 5, 251, 0, 146, 5, 
-    254, 76, 146, 5, 213, 147, 146, 1, 61, 146, 1, 255, 74, 146, 1, 73, 146, 
-    1, 236, 34, 146, 1, 70, 146, 1, 214, 118, 146, 1, 149, 153, 146, 1, 149, 
-    156, 146, 1, 75, 146, 1, 254, 202, 146, 1, 76, 146, 1, 253, 193, 146, 1, 
-    176, 146, 1, 234, 133, 146, 1, 243, 136, 146, 1, 242, 250, 146, 1, 229, 
-    78, 146, 1, 251, 34, 146, 1, 250, 158, 146, 1, 235, 142, 146, 1, 235, 
-    115, 146, 1, 227, 166, 146, 1, 215, 157, 146, 1, 215, 145, 146, 1, 248, 
-    136, 146, 1, 248, 120, 146, 1, 228, 111, 146, 1, 217, 106, 146, 1, 216, 
-    209, 146, 1, 248, 222, 146, 1, 248, 26, 146, 1, 197, 146, 1, 190, 146, 1, 
-    225, 148, 146, 1, 252, 192, 146, 1, 252, 19, 146, 1, 185, 146, 1, 191, 
-    146, 1, 205, 146, 1, 233, 136, 146, 1, 220, 103, 146, 1, 218, 224, 146, 
-    1, 206, 146, 1, 162, 146, 5, 227, 206, 146, 5, 253, 176, 146, 25, 5, 255, 
-    74, 146, 25, 5, 73, 146, 25, 5, 236, 34, 146, 25, 5, 70, 146, 25, 5, 214, 
-    118, 146, 25, 5, 149, 153, 146, 25, 5, 149, 222, 181, 146, 25, 5, 75, 
-    146, 25, 5, 254, 202, 146, 25, 5, 76, 146, 25, 5, 253, 193, 146, 5, 213, 
-    152, 146, 1, 234, 125, 217, 106, 146, 253, 194, 233, 24, 78, 146, 1, 222, 
-    180, 146, 1, 223, 40, 146, 1, 210, 168, 146, 1, 149, 222, 181, 146, 1, 
-    149, 232, 186, 146, 25, 5, 149, 156, 146, 25, 5, 149, 232, 186, 146, 21, 
-    210, 86, 146, 21, 110, 146, 21, 105, 146, 21, 158, 146, 21, 161, 146, 21, 
-    189, 146, 21, 194, 146, 21, 198, 146, 21, 195, 146, 21, 200, 146, 1, 223, 
-    189, 2, 230, 225, 247, 255, 146, 1, 223, 189, 2, 232, 109, 247, 255, 146, 
-    222, 119, 78, 146, 222, 119, 50, 146, 249, 99, 227, 198, 110, 146, 249, 
-    99, 227, 198, 105, 146, 249, 99, 227, 198, 158, 146, 249, 99, 227, 198, 
-    161, 146, 249, 99, 227, 198, 123, 233, 17, 216, 202, 216, 197, 248, 49, 
-    146, 249, 99, 248, 50, 219, 120, 146, 235, 162, 146, 243, 104, 78, 184, 
-    5, 254, 255, 251, 244, 184, 5, 251, 244, 184, 5, 213, 147, 184, 1, 61, 
-    184, 1, 255, 74, 184, 1, 73, 184, 1, 236, 34, 184, 1, 70, 184, 1, 214, 
-    118, 184, 1, 245, 210, 184, 1, 254, 202, 184, 1, 226, 184, 184, 1, 253, 
-    193, 184, 1, 176, 184, 1, 234, 133, 184, 1, 243, 136, 184, 1, 242, 250, 
-    184, 1, 229, 78, 184, 1, 251, 34, 184, 1, 250, 158, 184, 1, 235, 142, 
-    184, 1, 235, 115, 184, 1, 227, 166, 184, 1, 215, 157, 184, 1, 215, 145, 
-    184, 1, 248, 136, 184, 1, 248, 120, 184, 1, 228, 111, 184, 1, 217, 106, 
-    184, 1, 216, 209, 184, 1, 248, 222, 184, 1, 248, 26, 184, 1, 197, 184, 1, 
-    190, 184, 1, 225, 148, 184, 1, 252, 192, 184, 1, 252, 19, 184, 1, 185, 
-    184, 1, 191, 184, 1, 205, 184, 1, 233, 136, 184, 1, 232, 185, 184, 1, 
-    214, 27, 184, 1, 220, 103, 184, 1, 206, 184, 1, 162, 184, 5, 227, 206, 
-    184, 25, 5, 255, 74, 184, 25, 5, 73, 184, 25, 5, 236, 34, 184, 25, 5, 70, 
-    184, 25, 5, 214, 118, 184, 25, 5, 245, 210, 184, 25, 5, 254, 202, 184, 
-    25, 5, 226, 184, 184, 25, 5, 253, 193, 184, 5, 213, 152, 184, 5, 214, 
-    218, 184, 1, 234, 116, 184, 1, 242, 227, 184, 1, 210, 116, 184, 1, 222, 
-    180, 184, 1, 244, 197, 184, 21, 210, 86, 184, 21, 110, 184, 21, 105, 184, 
-    21, 158, 184, 21, 161, 184, 21, 189, 184, 21, 194, 184, 21, 198, 184, 21, 
-    195, 184, 21, 200, 184, 216, 75, 184, 254, 254, 184, 235, 179, 184, 214, 
-    146, 184, 245, 182, 226, 189, 184, 5, 211, 78, 171, 5, 251, 0, 171, 5, 
-    254, 76, 171, 5, 213, 147, 171, 1, 61, 171, 1, 255, 74, 171, 1, 73, 171, 
-    1, 236, 34, 171, 1, 70, 171, 1, 214, 118, 171, 1, 149, 153, 171, 1, 149, 
-    156, 171, 25, 251, 3, 75, 171, 1, 75, 171, 1, 254, 202, 171, 25, 251, 3, 
-    76, 171, 1, 76, 171, 1, 253, 193, 171, 1, 176, 171, 1, 234, 133, 171, 1, 
-    243, 136, 171, 1, 242, 250, 171, 1, 229, 78, 171, 1, 251, 34, 171, 1, 
-    250, 158, 171, 1, 235, 142, 171, 1, 235, 115, 171, 1, 227, 166, 171, 1, 
-    215, 157, 171, 1, 215, 145, 171, 1, 248, 136, 171, 1, 248, 120, 171, 1, 
-    228, 111, 171, 1, 217, 106, 171, 1, 216, 209, 171, 1, 248, 222, 171, 1, 
-    248, 26, 171, 1, 197, 171, 1, 190, 171, 1, 225, 148, 171, 1, 252, 192, 
-    171, 1, 252, 19, 171, 1, 185, 171, 1, 191, 171, 1, 205, 171, 1, 233, 136, 
-    171, 1, 232, 185, 171, 1, 214, 27, 171, 1, 220, 103, 171, 1, 218, 224, 
-    171, 1, 206, 171, 1, 162, 171, 5, 227, 206, 171, 5, 253, 176, 171, 25, 5, 
-    255, 74, 171, 25, 5, 73, 171, 25, 5, 236, 34, 171, 25, 5, 70, 171, 25, 5, 
-    214, 118, 171, 25, 5, 149, 153, 171, 25, 5, 149, 222, 181, 171, 25, 5, 
-    251, 3, 75, 171, 25, 5, 75, 171, 25, 5, 254, 202, 171, 25, 5, 251, 3, 76, 
-    171, 25, 5, 76, 171, 25, 5, 253, 193, 171, 5, 213, 152, 171, 226, 205, 
-    171, 1, 149, 222, 181, 171, 1, 149, 232, 186, 171, 25, 5, 149, 156, 171, 
-    25, 5, 149, 232, 186, 171, 21, 210, 86, 171, 21, 110, 171, 21, 105, 171, 
-    21, 158, 171, 21, 161, 171, 21, 189, 171, 21, 194, 171, 21, 198, 171, 21, 
-    195, 171, 21, 200, 171, 255, 22, 50, 171, 222, 119, 50, 157, 5, 251, 0, 
-    157, 5, 254, 76, 157, 5, 213, 147, 157, 1, 61, 157, 1, 255, 74, 157, 1, 
-    73, 157, 1, 236, 34, 157, 1, 70, 157, 1, 214, 118, 157, 1, 149, 153, 157, 
-    1, 149, 156, 157, 1, 75, 157, 1, 254, 202, 157, 1, 76, 157, 1, 253, 193, 
-    157, 1, 176, 157, 1, 234, 133, 157, 1, 243, 136, 157, 1, 242, 250, 157, 
-    1, 229, 78, 157, 1, 251, 34, 157, 1, 250, 158, 157, 1, 235, 142, 157, 1, 
-    235, 115, 157, 1, 227, 166, 157, 1, 215, 157, 157, 1, 215, 145, 157, 1, 
-    248, 136, 157, 1, 248, 120, 157, 1, 228, 111, 157, 1, 217, 106, 157, 1, 
-    216, 209, 157, 1, 248, 222, 157, 1, 248, 26, 157, 1, 197, 157, 1, 190, 
-    157, 1, 225, 148, 157, 1, 252, 192, 157, 1, 252, 19, 157, 1, 185, 157, 1, 
-    191, 157, 1, 205, 157, 1, 233, 136, 157, 1, 232, 185, 157, 1, 214, 27, 
-    157, 1, 220, 103, 157, 1, 218, 224, 157, 1, 206, 157, 1, 162, 157, 5, 
-    227, 206, 157, 5, 253, 176, 157, 25, 5, 255, 74, 157, 25, 5, 73, 157, 25, 
-    5, 236, 34, 157, 25, 5, 70, 157, 25, 5, 214, 118, 157, 25, 5, 149, 153, 
-    157, 25, 5, 149, 222, 181, 157, 25, 5, 75, 157, 25, 5, 254, 202, 157, 25, 
-    5, 76, 157, 25, 5, 253, 193, 157, 5, 213, 152, 157, 254, 203, 233, 24, 
-    78, 157, 253, 194, 233, 24, 78, 157, 1, 222, 180, 157, 1, 223, 40, 157, 
-    1, 210, 168, 157, 1, 149, 222, 181, 157, 1, 149, 232, 186, 157, 25, 5, 
-    149, 156, 157, 25, 5, 149, 232, 186, 157, 21, 210, 86, 157, 21, 110, 157, 
-    21, 105, 157, 21, 158, 157, 21, 161, 157, 21, 189, 157, 21, 194, 157, 21, 
-    198, 157, 21, 195, 157, 21, 200, 157, 235, 162, 157, 1, 212, 65, 157, 
-    244, 3, 123, 224, 22, 157, 244, 3, 123, 242, 28, 157, 244, 3, 134, 224, 
-    20, 157, 244, 3, 123, 219, 118, 157, 244, 3, 123, 245, 189, 157, 244, 3, 
-    134, 219, 117, 36, 5, 254, 76, 36, 5, 213, 147, 36, 1, 61, 36, 1, 255, 
-    74, 36, 1, 73, 36, 1, 236, 34, 36, 1, 70, 36, 1, 214, 118, 36, 1, 75, 36, 
-    1, 245, 210, 36, 1, 254, 202, 36, 1, 76, 36, 1, 226, 184, 36, 1, 253, 
-    193, 36, 1, 176, 36, 1, 229, 78, 36, 1, 251, 34, 36, 1, 235, 142, 36, 1, 
-    227, 166, 36, 1, 215, 157, 36, 1, 228, 111, 36, 1, 217, 106, 36, 1, 197, 
-    36, 1, 228, 93, 36, 1, 190, 36, 1, 185, 36, 1, 191, 36, 1, 205, 36, 1, 
-    222, 180, 36, 1, 233, 136, 36, 1, 232, 185, 36, 1, 232, 176, 36, 1, 214, 
-    27, 36, 1, 220, 103, 36, 1, 218, 224, 36, 1, 206, 36, 1, 162, 36, 25, 5, 
-    255, 74, 36, 25, 5, 73, 36, 25, 5, 236, 34, 36, 25, 5, 70, 36, 25, 5, 
-    214, 118, 36, 25, 5, 75, 36, 25, 5, 245, 210, 36, 25, 5, 254, 202, 36, 
-    25, 5, 76, 36, 25, 5, 226, 184, 36, 25, 5, 253, 193, 36, 5, 213, 152, 36, 
-    226, 205, 36, 253, 194, 233, 24, 78, 36, 21, 210, 86, 36, 21, 110, 36, 
-    21, 105, 36, 21, 158, 36, 21, 161, 36, 21, 189, 36, 21, 194, 36, 21, 198, 
-    36, 21, 195, 36, 21, 200, 36, 54, 216, 248, 36, 54, 123, 240, 211, 36, 
-    54, 123, 216, 148, 36, 248, 147, 50, 36, 230, 136, 50, 36, 211, 45, 50, 
-    36, 248, 88, 50, 36, 249, 140, 50, 36, 253, 239, 77, 50, 36, 222, 119, 
-    50, 36, 54, 50, 148, 5, 251, 0, 148, 5, 254, 76, 148, 5, 213, 147, 148, 
-    1, 61, 148, 1, 255, 74, 148, 1, 73, 148, 1, 236, 34, 148, 1, 70, 148, 1, 
-    214, 118, 148, 1, 149, 153, 148, 1, 149, 156, 148, 1, 75, 148, 1, 245, 
-    210, 148, 1, 254, 202, 148, 1, 76, 148, 1, 226, 184, 148, 1, 253, 193, 
-    148, 1, 176, 148, 1, 234, 133, 148, 1, 243, 136, 148, 1, 242, 250, 148, 
-    1, 229, 78, 148, 1, 251, 34, 148, 1, 250, 158, 148, 1, 235, 142, 148, 1, 
-    235, 115, 148, 1, 227, 166, 148, 1, 215, 157, 148, 1, 215, 145, 148, 1, 
-    248, 136, 148, 1, 248, 120, 148, 1, 228, 111, 148, 1, 217, 106, 148, 1, 
-    216, 209, 148, 1, 248, 222, 148, 1, 248, 26, 148, 1, 197, 148, 1, 190, 
-    148, 1, 225, 148, 148, 1, 252, 192, 148, 1, 252, 19, 148, 1, 185, 148, 1, 
-    191, 148, 1, 205, 148, 1, 222, 180, 148, 1, 233, 136, 148, 1, 232, 185, 
-    148, 1, 214, 27, 148, 1, 220, 103, 148, 1, 218, 224, 148, 1, 206, 148, 1, 
-    162, 148, 5, 253, 176, 148, 25, 5, 255, 74, 148, 25, 5, 73, 148, 25, 5, 
-    236, 34, 148, 25, 5, 70, 148, 25, 5, 214, 118, 148, 25, 5, 149, 153, 148, 
-    25, 5, 149, 222, 181, 148, 25, 5, 75, 148, 25, 5, 245, 210, 148, 25, 5, 
-    254, 202, 148, 25, 5, 76, 148, 25, 5, 226, 184, 148, 25, 5, 253, 193, 
-    148, 5, 213, 152, 148, 233, 24, 78, 148, 254, 203, 233, 24, 78, 148, 1, 
-    215, 184, 148, 1, 246, 39, 148, 1, 149, 222, 181, 148, 1, 149, 232, 186, 
-    148, 25, 5, 149, 156, 148, 25, 5, 149, 232, 186, 148, 21, 210, 86, 148, 
-    21, 110, 148, 21, 105, 148, 21, 158, 148, 21, 161, 148, 21, 189, 148, 21, 
-    194, 148, 21, 198, 148, 21, 195, 148, 21, 200, 148, 244, 3, 21, 210, 87, 
-    31, 226, 238, 224, 224, 64, 161, 148, 244, 3, 21, 123, 31, 226, 238, 224, 
-    224, 64, 161, 148, 244, 3, 21, 113, 31, 226, 238, 224, 224, 64, 161, 148, 
-    244, 3, 21, 134, 31, 226, 238, 224, 224, 64, 161, 148, 244, 3, 21, 123, 
-    31, 245, 43, 224, 224, 64, 161, 148, 244, 3, 21, 113, 31, 245, 43, 224, 
-    224, 64, 161, 148, 244, 3, 21, 134, 31, 245, 43, 224, 224, 64, 161, 148, 
-    5, 215, 84, 165, 5, 254, 76, 165, 5, 213, 147, 165, 1, 61, 165, 1, 255, 
-    74, 165, 1, 73, 165, 1, 236, 34, 165, 1, 70, 165, 1, 214, 118, 165, 1, 
-    149, 153, 165, 1, 149, 156, 165, 1, 75, 165, 1, 245, 210, 165, 1, 254, 
-    202, 165, 1, 76, 165, 1, 226, 184, 165, 1, 253, 193, 165, 1, 176, 165, 1, 
-    234, 133, 165, 1, 243, 136, 165, 1, 242, 250, 165, 1, 229, 78, 165, 1, 
-    251, 34, 165, 1, 250, 158, 165, 1, 235, 142, 165, 1, 235, 115, 165, 1, 
-    227, 166, 165, 1, 215, 157, 165, 1, 215, 145, 165, 1, 248, 136, 165, 1, 
-    248, 120, 165, 1, 228, 111, 165, 1, 217, 106, 165, 1, 216, 209, 165, 1, 
-    248, 222, 165, 1, 248, 26, 165, 1, 197, 165, 1, 190, 165, 1, 225, 148, 
-    165, 1, 252, 192, 165, 1, 252, 19, 165, 1, 185, 165, 1, 191, 165, 1, 205, 
-    165, 1, 222, 180, 165, 1, 233, 136, 165, 1, 232, 185, 165, 1, 214, 27, 
-    165, 1, 220, 103, 165, 1, 218, 224, 165, 1, 206, 165, 1, 162, 165, 5, 
-    227, 206, 165, 5, 253, 176, 165, 25, 5, 255, 74, 165, 25, 5, 73, 165, 25, 
-    5, 236, 34, 165, 25, 5, 70, 165, 25, 5, 214, 118, 165, 25, 5, 149, 153, 
-    165, 25, 5, 149, 222, 181, 165, 25, 5, 75, 165, 25, 5, 245, 210, 165, 25, 
-    5, 254, 202, 165, 25, 5, 76, 165, 25, 5, 226, 184, 165, 25, 5, 253, 193, 
-    165, 5, 213, 152, 165, 233, 24, 78, 165, 254, 203, 233, 24, 78, 165, 1, 
-    244, 197, 165, 1, 149, 222, 181, 165, 1, 149, 232, 186, 165, 25, 5, 149, 
-    156, 165, 25, 5, 149, 232, 186, 165, 21, 210, 86, 165, 21, 110, 165, 21, 
-    105, 165, 21, 158, 165, 21, 161, 165, 21, 189, 165, 21, 194, 165, 21, 
-    198, 165, 21, 195, 165, 21, 200, 165, 5, 235, 103, 165, 5, 214, 161, 136, 
-    5, 254, 76, 136, 5, 213, 147, 136, 1, 61, 136, 1, 255, 74, 136, 1, 73, 
-    136, 1, 236, 34, 136, 1, 70, 136, 1, 214, 118, 136, 1, 149, 153, 136, 1, 
-    149, 156, 136, 1, 75, 136, 1, 245, 210, 136, 1, 254, 202, 136, 1, 76, 
-    136, 1, 226, 184, 136, 1, 253, 193, 136, 1, 176, 136, 1, 234, 133, 136, 
-    1, 243, 136, 136, 1, 242, 250, 136, 1, 229, 78, 136, 1, 251, 34, 136, 1, 
-    250, 158, 136, 1, 235, 142, 136, 1, 235, 115, 136, 1, 227, 166, 136, 1, 
-    215, 157, 136, 1, 215, 145, 136, 1, 248, 136, 136, 1, 248, 120, 136, 1, 
-    228, 111, 136, 1, 217, 106, 136, 1, 216, 209, 136, 1, 248, 222, 136, 1, 
-    248, 26, 136, 1, 197, 136, 1, 228, 93, 136, 1, 190, 136, 1, 225, 148, 
-    136, 1, 252, 192, 136, 1, 252, 19, 136, 1, 185, 136, 1, 191, 136, 1, 205, 
-    136, 1, 222, 180, 136, 1, 233, 136, 136, 1, 232, 185, 136, 1, 232, 176, 
-    136, 1, 214, 27, 136, 1, 220, 103, 136, 1, 218, 224, 136, 1, 206, 136, 1, 
-    162, 136, 1, 215, 126, 136, 5, 253, 176, 136, 25, 5, 255, 74, 136, 25, 5, 
-    73, 136, 25, 5, 236, 34, 136, 25, 5, 70, 136, 25, 5, 214, 118, 136, 25, 
-    5, 149, 153, 136, 25, 5, 149, 222, 181, 136, 25, 5, 75, 136, 25, 5, 245, 
-    210, 136, 25, 5, 254, 202, 136, 25, 5, 76, 136, 25, 5, 226, 184, 136, 25, 
-    5, 253, 193, 136, 5, 213, 152, 136, 1, 59, 223, 74, 136, 253, 194, 233, 
-    24, 78, 136, 1, 149, 222, 181, 136, 1, 149, 232, 186, 136, 25, 5, 149, 
-    156, 136, 25, 5, 149, 232, 186, 136, 21, 210, 86, 136, 21, 110, 136, 21, 
-    105, 136, 21, 158, 136, 21, 161, 136, 21, 189, 136, 21, 194, 136, 21, 
-    198, 136, 21, 195, 136, 21, 200, 136, 54, 216, 248, 136, 54, 123, 240, 
-    211, 136, 54, 123, 216, 148, 136, 244, 3, 123, 224, 22, 136, 244, 3, 123, 
-    242, 28, 136, 244, 3, 134, 224, 20, 136, 248, 151, 78, 136, 1, 250, 100, 
-    228, 112, 136, 1, 250, 100, 230, 26, 136, 1, 250, 100, 222, 181, 136, 1, 
-    250, 100, 156, 136, 1, 250, 100, 232, 186, 136, 1, 250, 100, 235, 24, 
-    175, 5, 254, 75, 175, 5, 213, 146, 175, 1, 253, 166, 175, 1, 255, 28, 
-    175, 1, 254, 224, 175, 1, 254, 239, 175, 1, 235, 152, 175, 1, 236, 33, 
-    175, 1, 214, 110, 175, 1, 214, 112, 175, 1, 235, 174, 175, 1, 235, 175, 
-    175, 1, 236, 19, 175, 1, 236, 21, 175, 1, 245, 18, 175, 1, 245, 205, 175, 
-    1, 254, 189, 175, 1, 226, 109, 175, 1, 226, 178, 175, 1, 253, 179, 175, 
-    1, 254, 147, 234, 188, 175, 1, 231, 210, 234, 188, 175, 1, 254, 147, 243, 
-    83, 175, 1, 231, 210, 243, 83, 175, 1, 234, 230, 229, 223, 175, 1, 221, 
-    237, 243, 83, 175, 1, 254, 147, 250, 217, 175, 1, 231, 210, 250, 217, 
-    175, 1, 254, 147, 235, 128, 175, 1, 231, 210, 235, 128, 175, 1, 217, 99, 
-    229, 223, 175, 1, 217, 99, 221, 236, 229, 224, 175, 1, 221, 237, 235, 
-    128, 175, 1, 254, 147, 215, 153, 175, 1, 231, 210, 215, 153, 175, 1, 254, 
-    147, 248, 127, 175, 1, 231, 210, 248, 127, 175, 1, 230, 54, 229, 181, 
-    175, 1, 221, 237, 248, 127, 175, 1, 254, 147, 217, 31, 175, 1, 231, 210, 
-    217, 31, 175, 1, 254, 147, 248, 145, 175, 1, 231, 210, 248, 145, 175, 1, 
-    248, 175, 229, 181, 175, 1, 221, 237, 248, 145, 175, 1, 254, 147, 225, 
-    229, 175, 1, 231, 210, 225, 229, 175, 1, 254, 147, 252, 113, 175, 1, 231, 
-    210, 252, 113, 175, 1, 231, 132, 175, 1, 254, 132, 252, 113, 175, 1, 211, 
-    51, 175, 1, 223, 134, 175, 1, 248, 175, 233, 68, 175, 1, 214, 1, 175, 1, 
-    217, 99, 221, 211, 175, 1, 230, 54, 221, 211, 175, 1, 248, 175, 221, 211, 
-    175, 1, 241, 243, 175, 1, 230, 54, 233, 68, 175, 1, 244, 157, 175, 5, 
-    254, 178, 175, 25, 5, 254, 234, 175, 25, 5, 234, 156, 254, 241, 175, 25, 
-    5, 247, 229, 254, 241, 175, 25, 5, 234, 156, 235, 171, 175, 25, 5, 247, 
-    229, 235, 171, 175, 25, 5, 234, 156, 226, 89, 175, 25, 5, 247, 229, 226, 
-    89, 175, 25, 5, 243, 125, 175, 25, 5, 234, 16, 175, 25, 5, 247, 229, 234, 
-    16, 175, 25, 5, 234, 18, 248, 68, 175, 25, 5, 234, 17, 242, 48, 254, 234, 
-    175, 25, 5, 234, 17, 242, 48, 247, 229, 254, 234, 175, 25, 5, 234, 17, 
-    242, 48, 243, 82, 175, 25, 5, 243, 82, 175, 25, 5, 247, 229, 243, 125, 
-    175, 25, 5, 247, 229, 243, 82, 175, 224, 142, 233, 208, 168, 135, 234, 
-    30, 234, 247, 168, 135, 234, 107, 234, 129, 168, 135, 234, 107, 234, 100, 
-    168, 135, 234, 107, 234, 96, 168, 135, 234, 107, 234, 104, 168, 135, 234, 
-    107, 223, 155, 168, 135, 229, 6, 228, 249, 168, 135, 250, 88, 250, 148, 
-    168, 135, 250, 88, 250, 96, 168, 135, 250, 88, 250, 147, 168, 135, 219, 
-    60, 219, 59, 168, 135, 250, 88, 250, 84, 168, 135, 210, 245, 210, 252, 
-    168, 135, 247, 147, 250, 155, 168, 135, 216, 43, 225, 239, 168, 135, 216, 
-    158, 216, 201, 168, 135, 216, 158, 229, 202, 168, 135, 216, 158, 225, 
-    112, 168, 135, 228, 76, 229, 99, 168, 135, 247, 147, 248, 69, 168, 135, 
-    216, 43, 217, 56, 168, 135, 216, 158, 216, 132, 168, 135, 216, 158, 216, 
-    205, 168, 135, 216, 158, 216, 155, 168, 135, 228, 76, 227, 238, 168, 135, 
-    251, 207, 252, 165, 168, 135, 225, 18, 225, 43, 168, 135, 225, 123, 225, 
-    114, 168, 135, 244, 45, 244, 197, 168, 135, 225, 123, 225, 142, 168, 135, 
-    244, 45, 244, 174, 168, 135, 225, 123, 221, 248, 168, 135, 230, 163, 185, 
-    168, 135, 210, 245, 211, 79, 168, 135, 222, 213, 222, 140, 168, 135, 222, 
-    141, 168, 135, 232, 158, 232, 207, 168, 135, 232, 99, 168, 135, 211, 228, 
-    212, 61, 168, 135, 219, 60, 222, 7, 168, 135, 219, 60, 222, 115, 168, 
-    135, 219, 60, 218, 83, 168, 135, 241, 70, 241, 160, 168, 135, 232, 158, 
-    250, 69, 168, 135, 144, 254, 116, 168, 135, 241, 70, 228, 71, 168, 135, 
-    226, 69, 168, 135, 221, 231, 61, 168, 135, 231, 205, 242, 18, 168, 135, 
-    221, 231, 255, 74, 168, 135, 221, 231, 254, 137, 168, 135, 221, 231, 73, 
-    168, 135, 221, 231, 236, 34, 168, 135, 221, 231, 214, 214, 168, 135, 221, 
-    231, 214, 212, 168, 135, 221, 231, 70, 168, 135, 221, 231, 214, 118, 168, 
-    135, 225, 125, 168, 249, 99, 16, 252, 166, 168, 135, 221, 231, 75, 168, 
-    135, 221, 231, 254, 244, 168, 135, 221, 231, 76, 168, 135, 221, 231, 254, 
-    203, 231, 199, 168, 135, 221, 231, 254, 203, 231, 200, 168, 135, 233, 
-    107, 168, 135, 231, 196, 168, 135, 231, 197, 168, 135, 231, 205, 245, 
-    181, 168, 135, 231, 205, 216, 157, 168, 135, 231, 205, 215, 229, 168, 
-    135, 231, 205, 250, 136, 168, 135, 216, 199, 168, 135, 228, 206, 168, 
-    135, 211, 73, 168, 135, 244, 36, 168, 21, 210, 86, 168, 21, 110, 168, 21, 
-    105, 168, 21, 158, 168, 21, 161, 168, 21, 189, 168, 21, 194, 168, 21, 
-    198, 168, 21, 195, 168, 21, 200, 168, 135, 254, 112, 168, 135, 234, 105, 
-    209, 209, 1, 234, 29, 209, 209, 1, 234, 107, 218, 36, 209, 209, 1, 234, 
-    107, 217, 63, 209, 209, 1, 229, 5, 209, 209, 1, 249, 239, 209, 209, 1, 
-    219, 60, 217, 63, 209, 209, 1, 227, 135, 209, 209, 1, 247, 146, 209, 209, 
-    1, 111, 209, 209, 1, 216, 158, 218, 36, 209, 209, 1, 216, 158, 217, 63, 
-    209, 209, 1, 228, 75, 209, 209, 1, 251, 206, 209, 209, 1, 225, 17, 209, 
-    209, 1, 225, 123, 218, 36, 209, 209, 1, 244, 45, 217, 63, 209, 209, 1, 
-    225, 123, 217, 63, 209, 209, 1, 244, 45, 218, 36, 209, 209, 1, 230, 162, 
-    209, 209, 1, 210, 244, 209, 209, 1, 232, 158, 232, 207, 209, 209, 1, 232, 
-    158, 232, 122, 209, 209, 1, 211, 227, 209, 209, 1, 219, 60, 218, 36, 209, 
-    209, 1, 241, 70, 218, 36, 209, 209, 1, 76, 209, 209, 1, 241, 70, 217, 63, 
-    209, 209, 245, 164, 209, 209, 25, 5, 61, 209, 209, 25, 5, 231, 205, 234, 
-    235, 209, 209, 25, 5, 255, 74, 209, 209, 25, 5, 254, 137, 209, 209, 25, 
-    5, 73, 209, 209, 25, 5, 236, 34, 209, 209, 25, 5, 211, 117, 209, 209, 25, 
-    5, 210, 169, 209, 209, 25, 5, 70, 209, 209, 25, 5, 214, 118, 209, 209, 
-    25, 5, 231, 205, 234, 14, 209, 209, 220, 146, 5, 232, 157, 209, 209, 220, 
-    146, 5, 227, 135, 209, 209, 25, 5, 75, 209, 209, 25, 5, 245, 196, 209, 
-    209, 25, 5, 76, 209, 209, 25, 5, 253, 168, 209, 209, 25, 5, 254, 202, 
-    209, 209, 234, 30, 233, 136, 209, 209, 138, 231, 205, 245, 181, 209, 209, 
-    138, 231, 205, 216, 157, 209, 209, 138, 231, 205, 216, 118, 209, 209, 
-    138, 231, 205, 250, 224, 209, 209, 251, 5, 78, 209, 209, 228, 215, 209, 
-    209, 21, 210, 86, 209, 209, 21, 110, 209, 209, 21, 105, 209, 209, 21, 
-    158, 209, 209, 21, 161, 209, 209, 21, 189, 209, 209, 21, 194, 209, 209, 
-    21, 198, 209, 209, 21, 195, 209, 209, 21, 200, 209, 209, 241, 70, 228, 
-    75, 209, 209, 241, 70, 230, 162, 209, 209, 1, 234, 108, 242, 175, 209, 
-    209, 1, 234, 108, 227, 135, 63, 3, 226, 205, 63, 164, 242, 116, 211, 0, 
-    230, 249, 215, 190, 61, 63, 164, 242, 116, 211, 0, 230, 249, 255, 160, 
-    222, 217, 252, 78, 185, 63, 164, 242, 116, 211, 0, 230, 249, 255, 160, 
-    242, 116, 215, 174, 185, 63, 164, 65, 211, 0, 230, 249, 231, 94, 185, 63, 
-    164, 249, 253, 211, 0, 230, 249, 220, 110, 185, 63, 164, 250, 240, 211, 
-    0, 230, 249, 225, 113, 220, 97, 185, 63, 164, 211, 0, 230, 249, 215, 174, 
-    220, 97, 185, 63, 164, 221, 209, 220, 96, 63, 164, 251, 129, 211, 0, 230, 
-    248, 63, 164, 251, 224, 220, 4, 211, 0, 230, 248, 63, 164, 235, 198, 215, 
-    173, 63, 164, 248, 62, 215, 174, 251, 128, 63, 164, 220, 96, 63, 164, 
-    227, 140, 220, 96, 63, 164, 215, 174, 220, 96, 63, 164, 227, 140, 215, 
-    174, 220, 96, 63, 164, 222, 237, 250, 123, 218, 237, 220, 96, 63, 164, 
-    223, 43, 242, 147, 220, 96, 63, 164, 250, 240, 255, 164, 222, 145, 231, 
-    93, 199, 251, 8, 63, 164, 242, 116, 215, 173, 63, 232, 145, 5, 250, 156, 
-    222, 144, 63, 232, 145, 5, 232, 253, 222, 144, 63, 253, 213, 5, 220, 106, 
-    243, 66, 255, 165, 222, 144, 63, 253, 213, 5, 255, 162, 190, 63, 253, 
-    213, 5, 221, 183, 215, 169, 63, 5, 223, 131, 247, 160, 243, 65, 63, 5, 
-    223, 131, 247, 160, 242, 177, 63, 5, 223, 131, 247, 160, 242, 117, 63, 5, 
-    223, 131, 229, 220, 243, 65, 63, 5, 223, 131, 229, 220, 242, 177, 63, 5, 
-    223, 131, 247, 160, 223, 131, 229, 219, 63, 21, 210, 86, 63, 21, 110, 63, 
-    21, 105, 63, 21, 158, 63, 21, 161, 63, 21, 189, 63, 21, 194, 63, 21, 198, 
-    63, 21, 195, 63, 21, 200, 63, 21, 163, 110, 63, 21, 163, 105, 63, 21, 
-    163, 158, 63, 21, 163, 161, 63, 21, 163, 189, 63, 21, 163, 194, 63, 21, 
-    163, 198, 63, 21, 163, 195, 63, 21, 163, 200, 63, 21, 163, 210, 86, 63, 
-    164, 251, 131, 222, 144, 63, 164, 229, 69, 251, 69, 227, 150, 210, 25, 
-    63, 164, 250, 240, 255, 164, 222, 145, 251, 70, 230, 203, 251, 8, 63, 
-    164, 229, 69, 251, 69, 220, 107, 222, 144, 63, 164, 250, 133, 230, 248, 
-    63, 164, 215, 185, 255, 161, 63, 164, 242, 101, 222, 145, 242, 64, 63, 
-    164, 242, 101, 222, 145, 242, 70, 63, 164, 254, 117, 234, 124, 242, 64, 
-    63, 164, 254, 117, 234, 124, 242, 70, 63, 5, 211, 65, 215, 172, 63, 5, 
-    231, 168, 215, 172, 63, 1, 176, 63, 1, 234, 133, 63, 1, 243, 136, 63, 1, 
-    242, 250, 63, 1, 229, 78, 63, 1, 251, 34, 63, 1, 250, 158, 63, 1, 235, 
-    142, 63, 1, 227, 166, 63, 1, 215, 157, 63, 1, 215, 145, 63, 1, 248, 136, 
-    63, 1, 248, 120, 63, 1, 228, 111, 63, 1, 217, 106, 63, 1, 216, 209, 63, 
-    1, 248, 222, 63, 1, 248, 26, 63, 1, 197, 63, 1, 190, 63, 1, 225, 148, 63, 
-    1, 252, 192, 63, 1, 252, 19, 63, 1, 185, 63, 1, 215, 184, 63, 1, 215, 
-    176, 63, 1, 246, 39, 63, 1, 246, 34, 63, 1, 212, 65, 63, 1, 210, 82, 63, 
-    1, 210, 116, 63, 1, 255, 167, 63, 1, 191, 63, 1, 205, 63, 1, 233, 136, 
-    63, 1, 220, 103, 63, 1, 218, 224, 63, 1, 206, 63, 1, 162, 63, 1, 61, 63, 
-    1, 233, 232, 63, 1, 244, 78, 205, 63, 1, 234, 47, 63, 1, 222, 180, 63, 
-    25, 5, 255, 74, 63, 25, 5, 73, 63, 25, 5, 236, 34, 63, 25, 5, 70, 63, 25, 
-    5, 214, 118, 63, 25, 5, 149, 153, 63, 25, 5, 149, 222, 181, 63, 25, 5, 
-    149, 156, 63, 25, 5, 149, 232, 186, 63, 25, 5, 75, 63, 25, 5, 245, 210, 
-    63, 25, 5, 76, 63, 25, 5, 226, 184, 63, 5, 222, 222, 218, 85, 229, 79, 
-    222, 212, 63, 5, 222, 217, 252, 77, 63, 25, 5, 223, 50, 73, 63, 25, 5, 
-    223, 50, 236, 34, 63, 5, 227, 150, 210, 26, 229, 227, 248, 222, 63, 5, 
-    219, 72, 233, 61, 63, 164, 242, 30, 63, 164, 226, 58, 63, 5, 233, 64, 
-    222, 144, 63, 5, 211, 70, 222, 144, 63, 5, 233, 65, 215, 185, 251, 8, 63, 
-    5, 231, 96, 251, 8, 63, 5, 242, 120, 251, 9, 223, 41, 63, 5, 242, 120, 
-    231, 86, 223, 41, 63, 5, 235, 194, 231, 96, 251, 8, 63, 218, 74, 5, 233, 
-    65, 215, 185, 251, 8, 63, 218, 74, 5, 231, 96, 251, 8, 63, 218, 74, 5, 
-    235, 194, 231, 96, 251, 8, 63, 218, 74, 1, 176, 63, 218, 74, 1, 234, 133, 
-    63, 218, 74, 1, 243, 136, 63, 218, 74, 1, 242, 250, 63, 218, 74, 1, 229, 
-    78, 63, 218, 74, 1, 251, 34, 63, 218, 74, 1, 250, 158, 63, 218, 74, 1, 
-    235, 142, 63, 218, 74, 1, 227, 166, 63, 218, 74, 1, 215, 157, 63, 218, 
-    74, 1, 215, 145, 63, 218, 74, 1, 248, 136, 63, 218, 74, 1, 248, 120, 63, 
-    218, 74, 1, 228, 111, 63, 218, 74, 1, 217, 106, 63, 218, 74, 1, 216, 209, 
-    63, 218, 74, 1, 248, 222, 63, 218, 74, 1, 248, 26, 63, 218, 74, 1, 197, 
-    63, 218, 74, 1, 190, 63, 218, 74, 1, 225, 148, 63, 218, 74, 1, 252, 192, 
-    63, 218, 74, 1, 252, 19, 63, 218, 74, 1, 185, 63, 218, 74, 1, 215, 184, 
-    63, 218, 74, 1, 215, 176, 63, 218, 74, 1, 246, 39, 63, 218, 74, 1, 246, 
-    34, 63, 218, 74, 1, 212, 65, 63, 218, 74, 1, 210, 82, 63, 218, 74, 1, 
-    210, 116, 63, 218, 74, 1, 255, 167, 63, 218, 74, 1, 191, 63, 218, 74, 1, 
-    205, 63, 218, 74, 1, 233, 136, 63, 218, 74, 1, 220, 103, 63, 218, 74, 1, 
-    218, 224, 63, 218, 74, 1, 206, 63, 218, 74, 1, 162, 63, 218, 74, 1, 61, 
-    63, 218, 74, 1, 233, 232, 63, 218, 74, 1, 244, 78, 212, 65, 63, 218, 74, 
-    1, 244, 78, 191, 63, 218, 74, 1, 244, 78, 205, 63, 233, 219, 222, 142, 
-    234, 133, 63, 233, 219, 222, 142, 234, 134, 251, 70, 230, 203, 251, 8, 
-    63, 250, 253, 5, 114, 252, 71, 63, 250, 253, 5, 192, 252, 71, 63, 250, 
-    253, 5, 250, 254, 217, 21, 63, 250, 253, 5, 221, 208, 255, 166, 63, 16, 
-    246, 92, 251, 126, 63, 16, 223, 130, 222, 223, 63, 16, 226, 78, 243, 64, 
-    63, 16, 223, 130, 222, 224, 223, 43, 242, 146, 63, 16, 225, 113, 190, 63, 
-    16, 228, 60, 251, 126, 63, 16, 228, 60, 251, 127, 227, 140, 255, 163, 63, 
-    16, 228, 60, 251, 127, 242, 118, 255, 163, 63, 16, 228, 60, 251, 127, 
-    251, 70, 255, 163, 63, 5, 223, 131, 229, 220, 223, 131, 247, 159, 63, 5, 
-    223, 131, 229, 220, 242, 117, 63, 164, 251, 130, 220, 4, 242, 216, 230, 
-    249, 223, 42, 63, 164, 230, 164, 211, 0, 242, 216, 230, 249, 223, 42, 63, 
-    164, 227, 140, 215, 173, 63, 164, 65, 251, 153, 222, 214, 211, 0, 230, 
-    249, 231, 94, 185, 63, 164, 249, 253, 251, 153, 222, 214, 211, 0, 230, 
-    249, 220, 110, 185, 222, 251, 218, 0, 50, 233, 46, 218, 0, 50, 222, 251, 
-    218, 0, 5, 2, 247, 119, 233, 46, 218, 0, 5, 2, 247, 119, 63, 164, 233, 
-    56, 231, 97, 222, 144, 63, 164, 215, 251, 231, 97, 222, 144, 68, 1, 176, 
-    68, 1, 234, 133, 68, 1, 243, 136, 68, 1, 242, 250, 68, 1, 229, 78, 68, 1, 
-    251, 34, 68, 1, 250, 158, 68, 1, 235, 142, 68, 1, 235, 115, 68, 1, 227, 
-    166, 68, 1, 228, 77, 68, 1, 215, 157, 68, 1, 215, 145, 68, 1, 248, 136, 
-    68, 1, 248, 120, 68, 1, 228, 111, 68, 1, 217, 106, 68, 1, 216, 209, 68, 
-    1, 248, 222, 68, 1, 248, 26, 68, 1, 197, 68, 1, 190, 68, 1, 225, 148, 68, 
-    1, 252, 192, 68, 1, 252, 19, 68, 1, 185, 68, 1, 191, 68, 1, 205, 68, 1, 
-    233, 136, 68, 1, 212, 65, 68, 1, 206, 68, 1, 162, 68, 1, 232, 185, 68, 1, 
-    61, 68, 1, 220, 87, 61, 68, 1, 73, 68, 1, 236, 34, 68, 1, 70, 68, 1, 214, 
-    118, 68, 1, 75, 68, 1, 230, 152, 75, 68, 1, 76, 68, 1, 253, 193, 68, 25, 
-    5, 217, 65, 255, 74, 68, 25, 5, 255, 74, 68, 25, 5, 73, 68, 25, 5, 236, 
-    34, 68, 25, 5, 70, 68, 25, 5, 214, 118, 68, 25, 5, 75, 68, 25, 5, 254, 
-    202, 68, 25, 5, 230, 152, 236, 34, 68, 25, 5, 230, 152, 76, 68, 25, 5, 
-    160, 48, 68, 5, 254, 76, 68, 5, 59, 51, 68, 5, 213, 147, 68, 5, 213, 152, 
-    68, 5, 253, 236, 68, 116, 5, 147, 191, 68, 116, 5, 147, 205, 68, 116, 5, 
-    147, 212, 65, 68, 116, 5, 147, 162, 68, 1, 242, 133, 206, 68, 21, 210, 
-    86, 68, 21, 110, 68, 21, 105, 68, 21, 158, 68, 21, 161, 68, 21, 189, 68, 
-    21, 194, 68, 21, 198, 68, 21, 195, 68, 21, 200, 68, 5, 232, 193, 221, 
-    173, 68, 5, 221, 173, 68, 16, 232, 154, 68, 16, 249, 214, 68, 16, 254, 
-    221, 68, 16, 243, 49, 68, 1, 220, 103, 68, 1, 218, 224, 68, 1, 149, 153, 
-    68, 1, 149, 222, 181, 68, 1, 149, 156, 68, 1, 149, 232, 186, 68, 25, 5, 
-    149, 153, 68, 25, 5, 149, 222, 181, 68, 25, 5, 149, 156, 68, 25, 5, 149, 
-    232, 186, 68, 1, 230, 152, 229, 78, 68, 1, 230, 152, 235, 115, 68, 1, 
-    230, 152, 252, 112, 68, 1, 230, 152, 252, 107, 68, 116, 5, 230, 152, 147, 
-    197, 68, 116, 5, 230, 152, 147, 185, 68, 116, 5, 230, 152, 147, 233, 136, 
-    68, 1, 220, 109, 234, 214, 220, 103, 68, 25, 5, 220, 109, 234, 214, 245, 
-    56, 68, 138, 164, 220, 109, 234, 214, 241, 248, 68, 138, 164, 220, 109, 
-    234, 214, 234, 184, 225, 122, 68, 1, 212, 7, 224, 109, 234, 214, 216, 
-    209, 68, 1, 212, 7, 224, 109, 234, 214, 224, 115, 68, 25, 5, 212, 7, 224, 
-    109, 234, 214, 245, 56, 68, 25, 5, 212, 7, 224, 109, 234, 214, 214, 214, 
-    68, 5, 212, 7, 224, 109, 234, 214, 216, 30, 68, 5, 212, 7, 224, 109, 234, 
-    214, 216, 29, 68, 5, 212, 7, 224, 109, 234, 214, 216, 28, 68, 5, 212, 7, 
-    224, 109, 234, 214, 216, 27, 68, 5, 212, 7, 224, 109, 234, 214, 216, 26, 
-    68, 1, 245, 220, 224, 109, 234, 214, 228, 111, 68, 1, 245, 220, 224, 109, 
-    234, 214, 210, 176, 68, 1, 245, 220, 224, 109, 234, 214, 242, 218, 68, 
-    25, 5, 243, 60, 234, 214, 73, 68, 25, 5, 234, 189, 226, 235, 68, 25, 5, 
-    234, 189, 70, 68, 25, 5, 234, 189, 245, 210, 68, 1, 220, 87, 176, 68, 1, 
-    220, 87, 234, 133, 68, 1, 220, 87, 243, 136, 68, 1, 220, 87, 251, 34, 68, 
-    1, 220, 87, 210, 116, 68, 1, 220, 87, 227, 166, 68, 1, 220, 87, 248, 222, 
-    68, 1, 220, 87, 197, 68, 1, 220, 87, 225, 148, 68, 1, 220, 87, 244, 197, 
-    68, 1, 220, 87, 252, 192, 68, 1, 220, 87, 216, 209, 68, 1, 220, 87, 162, 
-    68, 116, 5, 220, 87, 147, 212, 65, 68, 25, 5, 220, 87, 255, 74, 68, 25, 
-    5, 220, 87, 75, 68, 25, 5, 220, 87, 160, 48, 68, 25, 5, 220, 87, 40, 211, 
-    117, 68, 5, 220, 87, 216, 29, 68, 5, 220, 87, 216, 28, 68, 5, 220, 87, 
-    216, 26, 68, 5, 220, 87, 216, 25, 68, 5, 220, 87, 249, 153, 216, 29, 68, 
-    5, 220, 87, 249, 153, 216, 28, 68, 5, 220, 87, 249, 153, 245, 154, 216, 
-    31, 68, 1, 222, 129, 226, 64, 244, 197, 68, 5, 222, 129, 226, 64, 216, 
-    26, 68, 220, 87, 21, 210, 86, 68, 220, 87, 21, 110, 68, 220, 87, 21, 105, 
-    68, 220, 87, 21, 158, 68, 220, 87, 21, 161, 68, 220, 87, 21, 189, 68, 
-    220, 87, 21, 194, 68, 220, 87, 21, 198, 68, 220, 87, 21, 195, 68, 220, 
-    87, 21, 200, 68, 5, 234, 127, 216, 30, 68, 5, 234, 127, 216, 28, 68, 25, 
-    5, 254, 191, 61, 68, 25, 5, 254, 191, 254, 202, 68, 16, 220, 87, 110, 68, 
-    16, 220, 87, 245, 31, 98, 6, 1, 254, 124, 98, 6, 1, 252, 153, 98, 6, 1, 
-    243, 107, 98, 6, 1, 247, 129, 98, 6, 1, 245, 151, 98, 6, 1, 213, 160, 98, 
-    6, 1, 210, 89, 98, 6, 1, 217, 61, 98, 6, 1, 236, 0, 98, 6, 1, 234, 235, 
-    98, 6, 1, 233, 82, 98, 6, 1, 231, 186, 98, 6, 1, 229, 196, 98, 6, 1, 226, 
-    197, 98, 6, 1, 226, 18, 98, 6, 1, 210, 78, 98, 6, 1, 223, 172, 98, 6, 1, 
-    221, 244, 98, 6, 1, 217, 51, 98, 6, 1, 214, 190, 98, 6, 1, 225, 141, 98, 
-    6, 1, 234, 122, 98, 6, 1, 242, 242, 98, 6, 1, 224, 74, 98, 6, 1, 220, 21, 
-    98, 6, 1, 250, 98, 98, 6, 1, 251, 8, 98, 6, 1, 235, 101, 98, 6, 1, 250, 
-    41, 98, 6, 1, 250, 144, 98, 6, 1, 211, 163, 98, 6, 1, 235, 112, 98, 6, 1, 
-    242, 44, 98, 6, 1, 241, 239, 98, 6, 1, 241, 176, 98, 6, 1, 212, 22, 98, 
-    6, 1, 242, 5, 98, 6, 1, 241, 66, 98, 6, 1, 210, 246, 98, 6, 1, 254, 233, 
-    98, 1, 254, 124, 98, 1, 252, 153, 98, 1, 243, 107, 98, 1, 247, 129, 98, 
-    1, 245, 151, 98, 1, 213, 160, 98, 1, 210, 89, 98, 1, 217, 61, 98, 1, 236, 
-    0, 98, 1, 234, 235, 98, 1, 233, 82, 98, 1, 231, 186, 98, 1, 229, 196, 98, 
-    1, 226, 197, 98, 1, 226, 18, 98, 1, 210, 78, 98, 1, 223, 172, 98, 1, 221, 
-    244, 98, 1, 217, 51, 98, 1, 214, 190, 98, 1, 225, 141, 98, 1, 234, 122, 
-    98, 1, 242, 242, 98, 1, 224, 74, 98, 1, 220, 21, 98, 1, 250, 98, 98, 1, 
-    251, 8, 98, 1, 235, 101, 98, 1, 250, 41, 98, 1, 250, 144, 98, 1, 211, 
-    163, 98, 1, 235, 112, 98, 1, 242, 44, 98, 1, 241, 239, 98, 1, 241, 176, 
-    98, 1, 212, 22, 98, 1, 242, 5, 98, 1, 241, 66, 98, 1, 244, 122, 98, 1, 
-    210, 246, 98, 1, 245, 166, 98, 1, 215, 94, 243, 107, 98, 1, 254, 197, 98, 
-    226, 16, 220, 138, 58, 1, 98, 229, 196, 98, 1, 254, 233, 98, 1, 242, 4, 
-    50, 98, 1, 233, 128, 50, 24, 100, 234, 59, 24, 100, 218, 216, 24, 100, 
-    228, 227, 24, 100, 216, 102, 24, 100, 218, 205, 24, 100, 223, 27, 24, 
-    100, 230, 218, 24, 100, 225, 96, 24, 100, 218, 213, 24, 100, 219, 149, 
-    24, 100, 218, 210, 24, 100, 236, 57, 24, 100, 250, 47, 24, 100, 218, 220, 
-    24, 100, 250, 107, 24, 100, 234, 111, 24, 100, 216, 174, 24, 100, 225, 
-    132, 24, 100, 241, 173, 24, 100, 228, 223, 24, 100, 218, 214, 24, 100, 
-    228, 217, 24, 100, 228, 221, 24, 100, 216, 99, 24, 100, 223, 15, 24, 100, 
-    218, 212, 24, 100, 223, 25, 24, 100, 234, 219, 24, 100, 230, 211, 24, 
-    100, 234, 222, 24, 100, 225, 91, 24, 100, 225, 89, 24, 100, 225, 77, 24, 
-    100, 225, 85, 24, 100, 225, 83, 24, 100, 225, 80, 24, 100, 225, 82, 24, 
-    100, 225, 79, 24, 100, 225, 84, 24, 100, 225, 94, 24, 100, 225, 95, 24, 
-    100, 225, 78, 24, 100, 225, 88, 24, 100, 234, 220, 24, 100, 234, 218, 24, 
-    100, 219, 142, 24, 100, 219, 140, 24, 100, 219, 132, 24, 100, 219, 135, 
-    24, 100, 219, 141, 24, 100, 219, 137, 24, 100, 219, 136, 24, 100, 219, 
-    134, 24, 100, 219, 145, 24, 100, 219, 147, 24, 100, 219, 148, 24, 100, 
-    219, 143, 24, 100, 219, 133, 24, 100, 219, 138, 24, 100, 219, 146, 24, 
-    100, 250, 91, 24, 100, 250, 89, 24, 100, 250, 169, 24, 100, 250, 167, 24, 
-    100, 226, 33, 24, 100, 236, 52, 24, 100, 236, 43, 24, 100, 236, 51, 24, 
-    100, 236, 48, 24, 100, 236, 46, 24, 100, 236, 50, 24, 100, 218, 217, 24, 
-    100, 236, 55, 24, 100, 236, 56, 24, 100, 236, 44, 24, 100, 236, 49, 24, 
-    100, 211, 26, 24, 100, 250, 46, 24, 100, 250, 92, 24, 100, 250, 90, 24, 
-    100, 250, 170, 24, 100, 250, 168, 24, 100, 250, 105, 24, 100, 250, 106, 
-    24, 100, 250, 93, 24, 100, 250, 171, 24, 100, 225, 130, 24, 100, 234, 
-    221, 24, 100, 218, 218, 24, 100, 211, 32, 24, 100, 234, 50, 24, 100, 228, 
-    219, 24, 100, 228, 225, 24, 100, 228, 224, 24, 100, 216, 96, 24, 100, 
-    244, 104, 24, 143, 244, 104, 24, 143, 61, 24, 143, 254, 244, 24, 143, 
-    191, 24, 143, 211, 92, 24, 143, 245, 118, 24, 143, 75, 24, 143, 211, 36, 
-    24, 143, 211, 47, 24, 143, 76, 24, 143, 212, 65, 24, 143, 212, 62, 24, 
-    143, 226, 235, 24, 143, 210, 244, 24, 143, 70, 24, 143, 212, 11, 24, 143, 
-    212, 22, 24, 143, 211, 250, 24, 143, 210, 212, 24, 143, 245, 56, 24, 143, 
-    211, 8, 24, 143, 73, 24, 143, 255, 158, 24, 143, 255, 157, 24, 143, 211, 
-    106, 24, 143, 211, 104, 24, 143, 245, 116, 24, 143, 245, 115, 24, 143, 
-    245, 117, 24, 143, 211, 35, 24, 143, 211, 34, 24, 143, 227, 85, 24, 143, 
-    227, 86, 24, 143, 227, 79, 24, 143, 227, 84, 24, 143, 227, 82, 24, 143, 
+    211, 117, 7, 1, 4, 6, 211, 117, 7, 4, 1, 210, 160, 2, 223, 58, 103, 7, 4, 
+    1, 210, 160, 2, 249, 108, 7, 4, 1, 245, 16, 7, 4, 1, 245, 17, 2, 249, 
+    108, 7, 1, 242, 187, 218, 131, 7, 1, 225, 142, 213, 135, 244, 1, 7, 1, 
+    235, 200, 242, 187, 218, 131, 7, 1, 218, 112, 251, 74, 7, 1, 251, 254, 
+    250, 19, 7, 1, 4, 6, 253, 166, 7, 4, 1, 250, 8, 204, 76, 7, 1, 4, 6, 243, 
+    210, 2, 103, 7, 1, 4, 6, 242, 67, 7, 4, 1, 235, 151, 2, 249, 135, 7, 4, 
+    1, 215, 94, 235, 29, 7, 1, 4, 6, 156, 7, 4, 1, 224, 100, 2, 103, 7, 1, 
+    242, 187, 218, 132, 2, 91, 7, 1, 223, 52, 242, 187, 218, 132, 2, 91, 7, 
+    4, 1, 246, 48, 247, 228, 7, 4, 1, 248, 34, 247, 228, 7, 4, 1, 246, 48, 
+    247, 229, 2, 249, 108, 7, 4, 1, 215, 186, 247, 228, 7, 4, 1, 216, 236, 
+    247, 228, 7, 4, 1, 217, 30, 247, 229, 2, 249, 108, 7, 4, 1, 244, 142, 
+    247, 228, 7, 4, 1, 232, 105, 247, 228, 7, 4, 1, 232, 56, 247, 228, 7, 1, 
+    251, 254, 225, 184, 7, 1, 252, 6, 225, 184, 7, 4, 1, 215, 94, 242, 68, 2, 
+    244, 95, 7, 4, 1, 215, 94, 242, 68, 2, 244, 96, 22, 217, 78, 58, 1, 4, 
+    242, 67, 58, 1, 4, 242, 68, 2, 103, 58, 1, 4, 235, 150, 58, 1, 4, 153, 
+    58, 1, 4, 215, 94, 153, 58, 1, 4, 215, 94, 223, 227, 2, 103, 58, 1, 4, 6, 
+    235, 200, 153, 58, 1, 4, 212, 98, 58, 1, 4, 211, 117, 58, 1, 224, 193, 
+    58, 1, 52, 224, 193, 58, 1, 215, 94, 249, 227, 58, 1, 254, 65, 58, 1, 
+    223, 52, 249, 227, 58, 1, 44, 163, 222, 236, 58, 1, 43, 163, 222, 236, 
+    58, 1, 242, 187, 218, 131, 58, 1, 223, 52, 242, 187, 218, 131, 58, 1, 43, 
+    254, 1, 58, 1, 44, 254, 1, 58, 1, 120, 254, 1, 58, 1, 124, 254, 1, 58, 1, 
+    250, 39, 255, 23, 250, 242, 58, 1, 67, 232, 219, 58, 1, 231, 237, 58, 1, 
+    255, 12, 255, 23, 58, 1, 242, 144, 255, 23, 58, 1, 121, 67, 232, 219, 58, 
+    1, 121, 231, 237, 58, 1, 121, 242, 144, 255, 23, 58, 1, 121, 255, 12, 
+    255, 23, 58, 1, 215, 223, 249, 234, 58, 1, 163, 215, 223, 249, 234, 58, 
+    1, 250, 181, 44, 163, 222, 236, 58, 1, 250, 181, 43, 163, 222, 236, 58, 
+    1, 120, 217, 88, 58, 1, 124, 217, 88, 58, 1, 96, 50, 58, 1, 230, 187, 50, 
+    251, 154, 59, 48, 222, 237, 48, 226, 228, 4, 184, 52, 255, 12, 255, 23, 
+    58, 1, 223, 39, 103, 58, 1, 249, 139, 255, 23, 58, 1, 4, 243, 114, 58, 1, 
+    4, 156, 58, 1, 4, 222, 93, 58, 1, 4, 211, 178, 58, 1, 4, 223, 52, 242, 
+    187, 218, 131, 58, 1, 245, 28, 138, 130, 58, 1, 125, 138, 130, 58, 1, 
+    230, 230, 138, 130, 58, 1, 121, 138, 130, 58, 1, 245, 27, 138, 130, 58, 
+    1, 210, 254, 248, 52, 138, 79, 58, 1, 211, 70, 248, 52, 138, 79, 58, 1, 
+    213, 133, 58, 1, 214, 186, 58, 1, 52, 254, 65, 58, 1, 121, 124, 254, 1, 
+    58, 1, 121, 120, 254, 1, 58, 1, 121, 43, 254, 1, 58, 1, 121, 44, 254, 1, 
+    58, 1, 121, 222, 236, 58, 1, 230, 229, 242, 144, 255, 23, 58, 1, 230, 
+    229, 52, 242, 144, 255, 23, 58, 1, 230, 229, 52, 255, 12, 255, 23, 58, 1, 
+    121, 184, 58, 1, 223, 160, 249, 234, 58, 1, 252, 66, 125, 216, 31, 58, 1, 
+    245, 151, 125, 216, 31, 58, 1, 252, 66, 121, 216, 31, 58, 1, 245, 151, 
+    121, 216, 31, 58, 1, 220, 56, 58, 1, 204, 220, 56, 58, 1, 121, 43, 75, 
+    38, 242, 144, 255, 23, 38, 255, 12, 255, 23, 38, 250, 39, 255, 23, 38, 
+    184, 38, 231, 237, 38, 226, 123, 38, 251, 154, 38, 59, 48, 38, 248, 9, 
+    38, 241, 59, 48, 38, 222, 237, 48, 38, 52, 255, 12, 255, 23, 38, 250, 
+    242, 38, 67, 232, 220, 48, 38, 52, 67, 232, 220, 48, 38, 52, 242, 144, 
+    255, 23, 38, 251, 7, 38, 235, 200, 251, 154, 38, 215, 94, 249, 228, 48, 
+    38, 249, 228, 48, 38, 223, 52, 249, 228, 48, 38, 249, 228, 72, 222, 254, 
+    38, 242, 144, 255, 24, 51, 38, 255, 12, 255, 24, 51, 38, 43, 217, 89, 51, 
+    38, 44, 217, 89, 51, 38, 43, 254, 118, 48, 38, 240, 255, 38, 43, 163, 
+    222, 237, 51, 38, 120, 217, 89, 51, 38, 124, 217, 89, 51, 38, 96, 5, 51, 
+    38, 230, 187, 5, 51, 38, 226, 68, 241, 59, 51, 38, 223, 58, 241, 59, 51, 
+    38, 59, 51, 38, 248, 10, 51, 38, 222, 237, 51, 38, 249, 228, 51, 38, 250, 
+    191, 38, 226, 228, 38, 67, 232, 220, 51, 38, 251, 148, 51, 38, 235, 200, 
+    52, 254, 32, 51, 38, 250, 243, 51, 38, 250, 39, 255, 24, 51, 38, 251, 
+    155, 51, 38, 235, 200, 251, 155, 51, 38, 216, 90, 51, 38, 231, 238, 51, 
+    38, 121, 232, 219, 38, 52, 121, 232, 219, 38, 216, 90, 226, 124, 38, 219, 
+    253, 218, 105, 226, 124, 38, 200, 218, 105, 226, 124, 38, 219, 253, 219, 
+    49, 226, 124, 38, 200, 219, 49, 226, 124, 38, 44, 163, 222, 237, 51, 38, 
+    235, 200, 251, 148, 51, 38, 42, 51, 38, 221, 182, 51, 38, 211, 179, 48, 
+    38, 67, 184, 38, 52, 226, 123, 38, 242, 144, 138, 79, 38, 255, 12, 138, 
+    79, 38, 26, 225, 178, 38, 26, 234, 8, 38, 26, 248, 4, 216, 19, 38, 26, 
+    210, 219, 38, 251, 148, 48, 38, 245, 106, 5, 51, 38, 52, 67, 232, 220, 
+    51, 38, 43, 254, 118, 51, 38, 228, 57, 216, 90, 48, 38, 241, 65, 48, 38, 
+    254, 156, 128, 216, 43, 48, 38, 43, 44, 80, 51, 38, 214, 153, 80, 51, 38, 
+    242, 149, 235, 69, 38, 44, 254, 2, 48, 38, 43, 163, 222, 237, 48, 38, 
+    244, 139, 38, 211, 179, 51, 38, 43, 254, 2, 51, 38, 44, 254, 2, 51, 38, 
+    44, 254, 2, 22, 120, 254, 2, 51, 38, 44, 163, 222, 237, 48, 38, 59, 72, 
+    222, 254, 38, 253, 225, 51, 38, 52, 222, 237, 51, 38, 210, 35, 48, 38, 
+    52, 251, 155, 51, 38, 52, 251, 154, 38, 52, 231, 237, 38, 52, 231, 238, 
+    51, 38, 52, 184, 38, 52, 235, 200, 251, 154, 38, 52, 97, 80, 51, 38, 7, 
+    4, 1, 61, 38, 7, 4, 1, 76, 38, 7, 4, 1, 74, 38, 7, 4, 1, 78, 38, 7, 4, 1, 
+    69, 38, 7, 4, 1, 251, 74, 38, 7, 4, 1, 249, 68, 38, 7, 4, 1, 242, 67, 38, 
+    7, 4, 1, 194, 38, 7, 4, 1, 153, 38, 7, 4, 1, 217, 153, 38, 7, 4, 1, 214, 
+    105, 38, 7, 4, 1, 211, 178, 26, 6, 1, 241, 203, 26, 4, 1, 241, 203, 26, 
+    6, 1, 254, 31, 221, 248, 26, 4, 1, 254, 31, 221, 248, 26, 227, 202, 50, 
+    26, 232, 114, 227, 202, 50, 26, 6, 1, 226, 55, 247, 235, 26, 4, 1, 226, 
+    55, 247, 235, 26, 210, 219, 26, 4, 223, 52, 232, 88, 219, 180, 87, 26, 4, 
+    246, 126, 232, 88, 219, 180, 87, 26, 4, 223, 52, 246, 126, 232, 88, 219, 
+    180, 87, 26, 224, 16, 79, 26, 216, 19, 26, 248, 4, 216, 19, 26, 6, 1, 
+    254, 152, 2, 216, 19, 26, 254, 105, 217, 3, 26, 6, 1, 245, 109, 2, 216, 
+    19, 26, 6, 1, 245, 72, 2, 216, 19, 26, 6, 1, 235, 193, 2, 216, 19, 26, 6, 
+    1, 226, 204, 2, 216, 19, 26, 6, 1, 214, 158, 2, 216, 19, 26, 6, 1, 226, 
+    206, 2, 216, 19, 26, 4, 1, 235, 193, 2, 248, 4, 22, 216, 19, 26, 6, 1, 
+    254, 151, 26, 6, 1, 252, 34, 26, 6, 1, 243, 114, 26, 6, 1, 248, 62, 26, 
+    6, 1, 245, 108, 26, 6, 1, 210, 85, 26, 6, 1, 245, 71, 26, 6, 1, 216, 180, 
+    26, 6, 1, 235, 192, 26, 6, 1, 234, 228, 26, 6, 1, 233, 104, 26, 6, 1, 
+    230, 107, 26, 6, 1, 227, 242, 26, 6, 1, 211, 157, 26, 6, 1, 226, 203, 26, 
+    6, 1, 225, 111, 26, 6, 1, 223, 40, 26, 6, 1, 219, 179, 26, 6, 1, 217, 42, 
+    26, 6, 1, 214, 157, 26, 6, 1, 225, 136, 26, 6, 1, 250, 118, 26, 6, 1, 
+    224, 164, 26, 6, 1, 226, 205, 26, 6, 1, 235, 193, 2, 248, 3, 26, 6, 1, 
+    214, 158, 2, 248, 3, 26, 4, 1, 254, 152, 2, 216, 19, 26, 4, 1, 245, 109, 
+    2, 216, 19, 26, 4, 1, 245, 72, 2, 216, 19, 26, 4, 1, 235, 193, 2, 216, 
+    19, 26, 4, 1, 214, 158, 2, 248, 4, 22, 216, 19, 26, 4, 1, 254, 151, 26, 
+    4, 1, 252, 34, 26, 4, 1, 243, 114, 26, 4, 1, 248, 62, 26, 4, 1, 245, 108, 
+    26, 4, 1, 210, 85, 26, 4, 1, 245, 71, 26, 4, 1, 216, 180, 26, 4, 1, 235, 
+    192, 26, 4, 1, 234, 228, 26, 4, 1, 233, 104, 26, 4, 1, 230, 107, 26, 4, 
+    1, 227, 242, 26, 4, 1, 211, 157, 26, 4, 1, 226, 203, 26, 4, 1, 225, 111, 
+    26, 4, 1, 223, 40, 26, 4, 1, 40, 219, 179, 26, 4, 1, 219, 179, 26, 4, 1, 
+    217, 42, 26, 4, 1, 214, 157, 26, 4, 1, 225, 136, 26, 4, 1, 250, 118, 26, 
+    4, 1, 224, 164, 26, 4, 1, 226, 205, 26, 4, 1, 235, 193, 2, 248, 3, 26, 4, 
+    1, 214, 158, 2, 248, 3, 26, 4, 1, 226, 204, 2, 216, 19, 26, 4, 1, 214, 
+    158, 2, 216, 19, 26, 4, 1, 226, 206, 2, 216, 19, 26, 6, 234, 253, 87, 26, 
+    252, 35, 87, 26, 216, 181, 87, 26, 214, 158, 2, 241, 59, 87, 26, 214, 
+    158, 2, 255, 12, 22, 241, 59, 87, 26, 214, 158, 2, 248, 10, 22, 241, 59, 
+    87, 26, 225, 137, 87, 26, 225, 112, 87, 26, 234, 253, 87, 26, 1, 254, 31, 
+    234, 12, 26, 4, 1, 254, 31, 234, 12, 26, 1, 218, 139, 26, 4, 1, 218, 139, 
+    26, 1, 247, 235, 26, 4, 1, 247, 235, 26, 1, 234, 12, 26, 4, 1, 234, 12, 
+    26, 1, 221, 248, 26, 4, 1, 221, 248, 81, 6, 1, 220, 57, 81, 4, 1, 220, 
+    57, 81, 6, 1, 244, 148, 81, 4, 1, 244, 148, 81, 6, 1, 234, 123, 81, 4, 1, 
+    234, 123, 81, 6, 1, 241, 52, 81, 4, 1, 241, 52, 81, 6, 1, 243, 109, 81, 
+    4, 1, 243, 109, 81, 6, 1, 220, 24, 81, 4, 1, 220, 24, 81, 6, 1, 248, 77, 
+    81, 4, 1, 248, 77, 26, 234, 229, 87, 26, 223, 41, 87, 26, 232, 88, 219, 
+    180, 87, 26, 1, 210, 224, 26, 6, 216, 181, 87, 26, 232, 88, 245, 109, 87, 
+    26, 223, 52, 232, 88, 245, 109, 87, 26, 6, 1, 220, 9, 26, 4, 1, 220, 9, 
+    26, 6, 232, 88, 219, 180, 87, 26, 6, 1, 221, 245, 26, 4, 1, 221, 245, 26, 
+    223, 41, 2, 218, 105, 87, 26, 6, 223, 52, 232, 88, 219, 180, 87, 26, 6, 
+    246, 126, 232, 88, 219, 180, 87, 26, 6, 223, 52, 246, 126, 232, 88, 219, 
+    180, 87, 33, 6, 1, 236, 68, 2, 242, 143, 33, 6, 1, 235, 196, 33, 6, 1, 
+    247, 170, 33, 6, 1, 242, 194, 33, 6, 1, 214, 202, 236, 67, 33, 6, 1, 246, 
+    44, 33, 6, 1, 251, 84, 74, 33, 6, 1, 211, 8, 33, 6, 1, 235, 132, 33, 6, 
+    1, 232, 193, 33, 6, 1, 228, 183, 33, 6, 1, 215, 175, 33, 6, 1, 234, 54, 
+    33, 6, 1, 240, 161, 2, 242, 143, 33, 6, 1, 219, 253, 69, 33, 6, 1, 246, 
+    40, 33, 6, 1, 61, 33, 6, 1, 252, 83, 33, 6, 1, 213, 255, 33, 6, 1, 242, 
+    243, 33, 6, 1, 248, 98, 33, 6, 1, 236, 67, 33, 6, 1, 210, 74, 33, 6, 1, 
+    210, 94, 33, 6, 1, 74, 33, 6, 1, 219, 253, 74, 33, 6, 1, 176, 33, 6, 1, 
+    245, 182, 33, 6, 1, 245, 167, 33, 6, 1, 245, 158, 33, 6, 1, 78, 33, 6, 1, 
+    225, 224, 33, 6, 1, 245, 100, 33, 6, 1, 245, 90, 33, 6, 1, 217, 23, 33, 
+    6, 1, 69, 33, 6, 1, 245, 210, 33, 6, 1, 162, 33, 6, 1, 215, 179, 33, 6, 
+    1, 250, 139, 33, 6, 1, 220, 104, 33, 6, 1, 220, 67, 33, 6, 1, 242, 10, 
+    50, 33, 6, 1, 211, 27, 33, 6, 1, 219, 54, 50, 33, 6, 1, 76, 33, 6, 1, 
+    210, 212, 33, 6, 1, 192, 33, 4, 1, 61, 33, 4, 1, 252, 83, 33, 4, 1, 213, 
+    255, 33, 4, 1, 242, 243, 33, 4, 1, 248, 98, 33, 4, 1, 236, 67, 33, 4, 1, 
+    210, 74, 33, 4, 1, 210, 94, 33, 4, 1, 74, 33, 4, 1, 219, 253, 74, 33, 4, 
+    1, 176, 33, 4, 1, 245, 182, 33, 4, 1, 245, 167, 33, 4, 1, 245, 158, 33, 
+    4, 1, 78, 33, 4, 1, 225, 224, 33, 4, 1, 245, 100, 33, 4, 1, 245, 90, 33, 
+    4, 1, 217, 23, 33, 4, 1, 69, 33, 4, 1, 245, 210, 33, 4, 1, 162, 33, 4, 1, 
+    215, 179, 33, 4, 1, 250, 139, 33, 4, 1, 220, 104, 33, 4, 1, 220, 67, 33, 
+    4, 1, 242, 10, 50, 33, 4, 1, 211, 27, 33, 4, 1, 219, 54, 50, 33, 4, 1, 
+    76, 33, 4, 1, 210, 212, 33, 4, 1, 192, 33, 4, 1, 236, 68, 2, 242, 143, 
+    33, 4, 1, 235, 196, 33, 4, 1, 247, 170, 33, 4, 1, 242, 194, 33, 4, 1, 
+    214, 202, 236, 67, 33, 4, 1, 246, 44, 33, 4, 1, 251, 84, 74, 33, 4, 1, 
+    211, 8, 33, 4, 1, 235, 132, 33, 4, 1, 232, 193, 33, 4, 1, 228, 183, 33, 
+    4, 1, 215, 175, 33, 4, 1, 234, 54, 33, 4, 1, 240, 161, 2, 242, 143, 33, 
+    4, 1, 219, 253, 69, 33, 4, 1, 246, 40, 33, 6, 1, 226, 205, 33, 4, 1, 226, 
+    205, 33, 6, 1, 211, 59, 33, 4, 1, 211, 59, 33, 6, 1, 235, 190, 76, 33, 4, 
+    1, 235, 190, 76, 33, 6, 1, 232, 198, 210, 183, 33, 4, 1, 232, 198, 210, 
+    183, 33, 6, 1, 235, 190, 232, 198, 210, 183, 33, 4, 1, 235, 190, 232, 
+    198, 210, 183, 33, 6, 1, 252, 1, 210, 183, 33, 4, 1, 252, 1, 210, 183, 
+    33, 6, 1, 235, 190, 252, 1, 210, 183, 33, 4, 1, 235, 190, 252, 1, 210, 
+    183, 33, 6, 1, 233, 239, 33, 4, 1, 233, 239, 33, 6, 1, 224, 164, 33, 4, 
+    1, 224, 164, 33, 6, 1, 244, 90, 33, 4, 1, 244, 90, 33, 6, 1, 235, 152, 
+    33, 4, 1, 235, 152, 33, 6, 1, 235, 153, 2, 52, 242, 144, 255, 23, 33, 4, 
+    1, 235, 153, 2, 52, 242, 144, 255, 23, 33, 6, 1, 214, 205, 33, 4, 1, 214, 
+    205, 33, 6, 1, 222, 187, 226, 205, 33, 4, 1, 222, 187, 226, 205, 33, 6, 
+    1, 226, 206, 2, 216, 66, 33, 4, 1, 226, 206, 2, 216, 66, 33, 6, 1, 226, 
+    144, 33, 4, 1, 226, 144, 33, 6, 1, 234, 12, 33, 4, 1, 234, 12, 33, 216, 
+    147, 50, 38, 33, 216, 66, 38, 33, 226, 69, 38, 33, 248, 162, 225, 21, 38, 
+    33, 224, 158, 225, 21, 38, 33, 225, 6, 38, 33, 240, 218, 216, 147, 50, 
+    38, 33, 230, 196, 50, 33, 6, 1, 219, 253, 240, 161, 2, 217, 78, 33, 4, 1, 
+    219, 253, 240, 161, 2, 217, 78, 33, 6, 1, 220, 148, 50, 33, 4, 1, 220, 
+    148, 50, 33, 6, 1, 245, 101, 2, 216, 115, 33, 4, 1, 245, 101, 2, 216, 
+    115, 33, 6, 1, 242, 244, 2, 214, 156, 33, 4, 1, 242, 244, 2, 214, 156, 
+    33, 6, 1, 242, 244, 2, 91, 33, 4, 1, 242, 244, 2, 91, 33, 6, 1, 242, 244, 
+    2, 230, 229, 103, 33, 4, 1, 242, 244, 2, 230, 229, 103, 33, 6, 1, 210, 
+    75, 2, 248, 47, 33, 4, 1, 210, 75, 2, 248, 47, 33, 6, 1, 210, 95, 2, 248, 
+    47, 33, 4, 1, 210, 95, 2, 248, 47, 33, 6, 1, 235, 19, 2, 248, 47, 33, 4, 
+    1, 235, 19, 2, 248, 47, 33, 6, 1, 235, 19, 2, 67, 91, 33, 4, 1, 235, 19, 
+    2, 67, 91, 33, 6, 1, 235, 19, 2, 91, 33, 4, 1, 235, 19, 2, 91, 33, 6, 1, 
+    252, 132, 176, 33, 4, 1, 252, 132, 176, 33, 6, 1, 245, 159, 2, 248, 47, 
+    33, 4, 1, 245, 159, 2, 248, 47, 33, 6, 27, 245, 159, 242, 243, 33, 4, 27, 
+    245, 159, 242, 243, 33, 6, 1, 225, 225, 2, 230, 229, 103, 33, 4, 1, 225, 
+    225, 2, 230, 229, 103, 33, 6, 1, 255, 29, 162, 33, 4, 1, 255, 29, 162, 
+    33, 6, 1, 245, 91, 2, 248, 47, 33, 4, 1, 245, 91, 2, 248, 47, 33, 6, 1, 
+    217, 24, 2, 248, 47, 33, 4, 1, 217, 24, 2, 248, 47, 33, 6, 1, 218, 123, 
+    69, 33, 4, 1, 218, 123, 69, 33, 6, 1, 218, 123, 104, 2, 91, 33, 4, 1, 
+    218, 123, 104, 2, 91, 33, 6, 1, 242, 56, 2, 248, 47, 33, 4, 1, 242, 56, 
+    2, 248, 47, 33, 6, 27, 217, 24, 215, 179, 33, 4, 27, 217, 24, 215, 179, 
+    33, 6, 1, 250, 140, 2, 248, 47, 33, 4, 1, 250, 140, 2, 248, 47, 33, 6, 1, 
+    250, 140, 2, 67, 91, 33, 4, 1, 250, 140, 2, 67, 91, 33, 6, 1, 220, 35, 
+    33, 4, 1, 220, 35, 33, 6, 1, 255, 29, 250, 139, 33, 4, 1, 255, 29, 250, 
+    139, 33, 6, 1, 255, 29, 250, 140, 2, 248, 47, 33, 4, 1, 255, 29, 250, 
+    140, 2, 248, 47, 33, 1, 226, 62, 33, 6, 1, 210, 75, 2, 251, 154, 33, 4, 
+    1, 210, 75, 2, 251, 154, 33, 6, 1, 235, 19, 2, 103, 33, 4, 1, 235, 19, 2, 
+    103, 33, 6, 1, 245, 183, 2, 217, 78, 33, 4, 1, 245, 183, 2, 217, 78, 33, 
+    6, 1, 245, 159, 2, 103, 33, 4, 1, 245, 159, 2, 103, 33, 6, 1, 245, 159, 
+    2, 217, 78, 33, 4, 1, 245, 159, 2, 217, 78, 33, 6, 1, 234, 133, 250, 139, 
+    33, 4, 1, 234, 133, 250, 139, 33, 6, 1, 245, 168, 2, 217, 78, 33, 4, 1, 
+    245, 168, 2, 217, 78, 33, 4, 1, 226, 62, 33, 6, 1, 116, 2, 251, 154, 33, 
+    4, 1, 116, 2, 251, 154, 33, 6, 1, 116, 2, 248, 9, 33, 4, 1, 116, 2, 248, 
+    9, 33, 6, 27, 116, 236, 67, 33, 4, 27, 116, 236, 67, 33, 6, 1, 236, 68, 
+    2, 251, 154, 33, 4, 1, 236, 68, 2, 251, 154, 33, 6, 1, 221, 197, 33, 4, 
+    1, 221, 197, 33, 6, 1, 221, 198, 2, 248, 9, 33, 4, 1, 221, 198, 2, 248, 
+    9, 33, 6, 1, 210, 75, 2, 248, 9, 33, 4, 1, 210, 75, 2, 248, 9, 33, 6, 1, 
+    210, 95, 2, 248, 9, 33, 4, 1, 210, 95, 2, 248, 9, 33, 6, 1, 255, 29, 246, 
+    44, 33, 4, 1, 255, 29, 246, 44, 33, 6, 1, 240, 161, 2, 231, 237, 33, 4, 
+    1, 240, 161, 2, 231, 237, 33, 6, 1, 240, 161, 2, 248, 9, 33, 4, 1, 240, 
+    161, 2, 248, 9, 33, 6, 1, 144, 2, 248, 9, 33, 4, 1, 144, 2, 248, 9, 33, 
+    6, 1, 252, 142, 78, 33, 4, 1, 252, 142, 78, 33, 6, 1, 252, 142, 144, 2, 
+    248, 9, 33, 4, 1, 252, 142, 144, 2, 248, 9, 33, 6, 1, 160, 2, 248, 9, 33, 
+    4, 1, 160, 2, 248, 9, 33, 6, 1, 104, 2, 231, 237, 33, 4, 1, 104, 2, 231, 
+    237, 33, 6, 1, 104, 2, 248, 9, 33, 4, 1, 104, 2, 248, 9, 33, 6, 1, 104, 
+    2, 52, 142, 33, 4, 1, 104, 2, 52, 142, 33, 6, 1, 250, 140, 2, 248, 9, 33, 
+    4, 1, 250, 140, 2, 248, 9, 33, 6, 1, 242, 244, 2, 248, 47, 33, 4, 1, 242, 
+    244, 2, 248, 47, 33, 6, 1, 211, 28, 2, 248, 9, 33, 4, 1, 211, 28, 2, 248, 
+    9, 33, 6, 1, 242, 244, 2, 218, 105, 22, 103, 33, 4, 1, 242, 244, 2, 218, 
+    105, 22, 103, 33, 6, 1, 242, 56, 2, 103, 33, 4, 1, 242, 56, 2, 103, 33, 
+    6, 1, 242, 56, 2, 91, 33, 4, 1, 242, 56, 2, 91, 33, 6, 1, 234, 20, 248, 
+    98, 33, 4, 1, 234, 20, 248, 98, 33, 6, 1, 234, 20, 247, 170, 33, 4, 1, 
+    234, 20, 247, 170, 33, 6, 1, 234, 20, 210, 27, 33, 4, 1, 234, 20, 210, 
+    27, 33, 6, 1, 234, 20, 246, 38, 33, 4, 1, 234, 20, 246, 38, 33, 6, 1, 
+    234, 20, 232, 193, 33, 4, 1, 234, 20, 232, 193, 33, 6, 1, 234, 20, 228, 
+    183, 33, 4, 1, 234, 20, 228, 183, 33, 6, 1, 234, 20, 219, 111, 33, 4, 1, 
+    234, 20, 219, 111, 33, 6, 1, 234, 20, 216, 61, 33, 4, 1, 234, 20, 216, 
+    61, 33, 6, 1, 223, 52, 210, 94, 33, 4, 1, 223, 52, 210, 94, 33, 6, 1, 
+    245, 183, 2, 103, 33, 4, 1, 245, 183, 2, 103, 33, 6, 1, 233, 4, 33, 4, 1, 
+    233, 4, 33, 6, 1, 223, 42, 33, 4, 1, 223, 42, 33, 6, 1, 211, 92, 33, 4, 
+    1, 211, 92, 33, 6, 1, 224, 91, 33, 4, 1, 224, 91, 33, 6, 1, 212, 22, 33, 
+    4, 1, 212, 22, 33, 6, 1, 254, 175, 176, 33, 4, 1, 254, 175, 176, 33, 6, 
+    1, 245, 183, 2, 230, 229, 103, 33, 4, 1, 245, 183, 2, 230, 229, 103, 33, 
+    6, 1, 245, 159, 2, 230, 229, 103, 33, 4, 1, 245, 159, 2, 230, 229, 103, 
+    33, 6, 1, 225, 225, 2, 248, 47, 33, 4, 1, 225, 225, 2, 248, 47, 33, 6, 1, 
+    220, 36, 2, 248, 47, 33, 4, 1, 220, 36, 2, 248, 47, 150, 6, 1, 253, 172, 
+    150, 6, 1, 252, 47, 150, 6, 1, 242, 210, 150, 6, 1, 248, 229, 150, 6, 1, 
+    245, 221, 150, 6, 1, 210, 116, 150, 6, 1, 245, 205, 150, 6, 1, 245, 73, 
+    150, 6, 1, 112, 150, 6, 1, 210, 74, 150, 6, 1, 235, 234, 150, 6, 1, 232, 
+    196, 150, 6, 1, 211, 160, 150, 6, 1, 251, 41, 150, 6, 1, 234, 171, 150, 
+    6, 1, 241, 75, 150, 6, 1, 235, 147, 150, 6, 1, 242, 253, 150, 6, 1, 250, 
+    134, 150, 6, 1, 231, 63, 150, 6, 1, 211, 8, 150, 6, 1, 228, 44, 150, 6, 
+    1, 220, 104, 150, 6, 1, 213, 138, 150, 6, 1, 250, 165, 150, 6, 1, 225, 
+    208, 150, 6, 1, 235, 116, 150, 6, 1, 205, 150, 6, 1, 221, 163, 150, 6, 1, 
+    213, 179, 150, 6, 1, 216, 63, 150, 6, 1, 223, 98, 150, 6, 1, 249, 246, 
+    150, 6, 1, 210, 249, 150, 6, 1, 225, 49, 150, 6, 1, 234, 182, 150, 6, 1, 
+    226, 226, 150, 6, 1, 244, 150, 150, 58, 1, 43, 163, 222, 236, 150, 254, 
+    65, 150, 245, 162, 79, 150, 245, 39, 79, 150, 249, 227, 150, 224, 16, 79, 
+    150, 255, 30, 79, 150, 4, 1, 253, 172, 150, 4, 1, 252, 47, 150, 4, 1, 
+    242, 210, 150, 4, 1, 248, 229, 150, 4, 1, 245, 221, 150, 4, 1, 210, 116, 
+    150, 4, 1, 245, 205, 150, 4, 1, 245, 73, 150, 4, 1, 112, 150, 4, 1, 210, 
+    74, 150, 4, 1, 235, 234, 150, 4, 1, 232, 196, 150, 4, 1, 211, 160, 150, 
+    4, 1, 251, 41, 150, 4, 1, 234, 171, 150, 4, 1, 241, 75, 150, 4, 1, 235, 
+    147, 150, 4, 1, 242, 253, 150, 4, 1, 250, 134, 150, 4, 1, 231, 63, 150, 
+    4, 1, 211, 8, 150, 4, 1, 228, 44, 150, 4, 1, 220, 104, 150, 4, 1, 213, 
+    138, 150, 4, 1, 250, 165, 150, 4, 1, 225, 208, 150, 4, 1, 235, 116, 150, 
+    4, 1, 205, 150, 4, 1, 221, 163, 150, 4, 1, 213, 179, 150, 4, 1, 216, 63, 
+    150, 4, 1, 223, 98, 150, 4, 1, 249, 246, 150, 4, 1, 210, 249, 150, 4, 1, 
+    225, 49, 150, 4, 1, 234, 182, 150, 4, 1, 226, 226, 150, 4, 1, 244, 150, 
+    150, 4, 27, 245, 222, 210, 249, 150, 243, 236, 218, 131, 150, 240, 175, 
+    150, 246, 103, 50, 94, 255, 24, 245, 65, 94, 255, 24, 221, 164, 94, 255, 
+    24, 220, 90, 94, 255, 24, 210, 104, 224, 74, 94, 255, 24, 210, 104, 243, 
+    132, 94, 255, 24, 216, 76, 94, 255, 24, 223, 50, 94, 255, 24, 210, 103, 
+    94, 255, 24, 225, 249, 94, 255, 24, 211, 20, 94, 255, 24, 216, 215, 94, 
+    255, 24, 243, 48, 94, 255, 24, 243, 49, 230, 74, 94, 255, 24, 243, 46, 
+    94, 255, 24, 224, 75, 226, 20, 94, 255, 24, 216, 254, 243, 63, 94, 255, 
+    24, 225, 230, 94, 255, 24, 253, 208, 242, 48, 94, 255, 24, 230, 84, 94, 
+    255, 24, 231, 213, 94, 255, 24, 231, 54, 94, 255, 24, 231, 55, 234, 183, 
+    94, 255, 24, 248, 171, 94, 255, 24, 224, 86, 94, 255, 24, 216, 254, 224, 
+    70, 94, 255, 24, 211, 30, 252, 48, 210, 230, 94, 255, 24, 226, 211, 94, 
+    255, 24, 236, 26, 94, 255, 24, 248, 78, 94, 255, 24, 210, 33, 94, 164, 
+    231, 148, 250, 43, 94, 225, 14, 220, 38, 94, 225, 14, 242, 1, 221, 164, 
+    94, 225, 14, 242, 1, 225, 243, 94, 225, 14, 242, 1, 224, 79, 94, 225, 14, 
+    241, 165, 94, 225, 14, 215, 177, 94, 225, 14, 221, 164, 94, 225, 14, 225, 
+    243, 94, 225, 14, 224, 79, 94, 225, 14, 241, 68, 94, 225, 14, 241, 69, 
+    242, 3, 31, 214, 3, 94, 225, 14, 224, 20, 94, 225, 14, 248, 216, 177, 
+    231, 176, 94, 225, 14, 231, 43, 94, 224, 144, 231, 173, 94, 225, 14, 223, 
+    172, 94, 224, 144, 225, 251, 94, 225, 14, 220, 23, 247, 128, 94, 225, 14, 
+    219, 161, 247, 128, 94, 224, 144, 219, 55, 225, 245, 94, 164, 214, 160, 
+    247, 128, 94, 164, 232, 114, 247, 128, 94, 224, 144, 227, 199, 242, 47, 
+    94, 225, 14, 224, 80, 224, 74, 94, 1, 254, 179, 94, 1, 252, 36, 94, 1, 
+    242, 208, 94, 1, 248, 197, 94, 1, 241, 245, 94, 1, 214, 3, 94, 1, 210, 
+    97, 94, 1, 241, 204, 94, 1, 216, 231, 94, 1, 210, 233, 94, 1, 40, 235, 0, 
+    94, 1, 235, 0, 94, 1, 233, 100, 94, 1, 40, 231, 70, 94, 1, 231, 70, 94, 
+    1, 40, 227, 198, 94, 1, 227, 198, 94, 1, 221, 251, 94, 1, 253, 170, 94, 
+    1, 40, 225, 224, 94, 1, 225, 224, 94, 1, 40, 215, 180, 94, 1, 215, 180, 
+    94, 1, 224, 42, 94, 1, 223, 70, 94, 1, 220, 22, 94, 1, 217, 39, 94, 27, 
+    211, 6, 52, 214, 3, 94, 27, 211, 6, 214, 4, 210, 233, 94, 27, 211, 6, 52, 
+    210, 233, 94, 224, 144, 243, 48, 94, 224, 144, 243, 46, 9, 54, 50, 9, 5, 
+    221, 244, 9, 244, 38, 231, 159, 9, 5, 222, 25, 9, 5, 221, 247, 254, 45, 
+    249, 117, 222, 195, 254, 45, 244, 12, 222, 195, 9, 223, 137, 254, 45, 
+    225, 186, 230, 198, 50, 254, 45, 225, 186, 216, 249, 216, 149, 50, 254, 
+    230, 50, 9, 249, 227, 9, 248, 158, 220, 139, 9, 225, 16, 213, 241, 50, 9, 
+    5, 230, 179, 9, 5, 222, 5, 254, 181, 212, 45, 9, 5, 254, 181, 253, 229, 
+    9, 5, 223, 170, 254, 180, 9, 5, 223, 178, 254, 161, 254, 112, 9, 5, 217, 
+    71, 9, 4, 125, 217, 81, 9, 4, 125, 27, 109, 2, 233, 109, 2, 211, 43, 9, 
+    4, 125, 210, 108, 9, 4, 244, 173, 9, 4, 248, 192, 9, 4, 234, 211, 9, 220, 
+    152, 9, 1, 79, 9, 215, 212, 59, 224, 144, 79, 9, 224, 16, 79, 9, 1, 234, 
+    215, 211, 43, 9, 1, 242, 26, 9, 1, 109, 2, 231, 233, 48, 9, 1, 109, 2, 
+    182, 48, 9, 1, 212, 31, 2, 182, 48, 9, 1, 109, 2, 182, 51, 9, 1, 77, 2, 
+    182, 48, 9, 1, 254, 179, 9, 1, 252, 62, 9, 1, 217, 9, 231, 169, 9, 1, 
+    217, 8, 9, 1, 216, 193, 9, 1, 235, 129, 9, 1, 242, 44, 9, 1, 234, 135, 9, 
+    1, 248, 203, 9, 1, 216, 203, 9, 1, 223, 98, 9, 1, 210, 108, 9, 1, 221, 
+    168, 9, 1, 220, 61, 9, 1, 222, 28, 9, 1, 248, 224, 9, 1, 217, 81, 9, 1, 
+    210, 111, 9, 1, 254, 205, 9, 1, 242, 251, 9, 1, 234, 181, 2, 113, 170, 
+    48, 9, 1, 234, 181, 2, 134, 170, 51, 9, 1, 244, 176, 77, 2, 235, 200, 
+    214, 105, 9, 1, 244, 176, 77, 2, 113, 170, 48, 9, 1, 244, 176, 77, 2, 
+    134, 170, 48, 9, 217, 44, 9, 1, 244, 150, 9, 1, 224, 84, 9, 1, 235, 0, 9, 
+    1, 233, 108, 9, 1, 231, 83, 9, 1, 228, 67, 9, 1, 241, 225, 9, 1, 212, 30, 
+    9, 1, 109, 231, 197, 9, 1, 211, 43, 9, 244, 171, 9, 248, 190, 9, 234, 
+    209, 9, 244, 173, 9, 248, 192, 9, 234, 211, 9, 220, 95, 9, 218, 46, 9, 
+    231, 231, 48, 9, 182, 48, 9, 182, 51, 9, 218, 66, 254, 179, 9, 235, 200, 
+    248, 192, 9, 164, 228, 68, 242, 225, 9, 209, 255, 9, 25, 5, 4, 214, 106, 
+    48, 9, 25, 5, 235, 200, 4, 214, 106, 48, 9, 25, 5, 59, 51, 9, 223, 52, 
+    248, 192, 9, 244, 174, 2, 113, 247, 126, 9, 212, 32, 182, 51, 254, 45, 
+    21, 210, 86, 254, 45, 21, 111, 254, 45, 21, 105, 254, 45, 21, 158, 254, 
+    45, 21, 161, 254, 45, 21, 190, 254, 45, 21, 195, 254, 45, 21, 199, 254, 
+    45, 21, 196, 254, 45, 21, 201, 9, 225, 185, 50, 9, 248, 91, 220, 139, 9, 
+    216, 147, 220, 139, 9, 244, 89, 225, 12, 218, 158, 9, 1, 247, 127, 252, 
+    62, 9, 1, 247, 127, 224, 84, 9, 1, 218, 24, 254, 179, 9, 1, 109, 212, 46, 
+    9, 1, 109, 2, 212, 32, 182, 48, 9, 1, 109, 2, 212, 32, 182, 51, 9, 1, 
+    125, 242, 26, 9, 1, 125, 182, 254, 179, 9, 1, 125, 182, 212, 30, 9, 1, 
+    104, 2, 182, 48, 9, 1, 125, 182, 211, 43, 9, 1, 215, 149, 9, 1, 215, 147, 
+    9, 1, 252, 72, 9, 1, 217, 9, 2, 222, 236, 9, 1, 217, 9, 2, 134, 170, 72, 
+    246, 111, 9, 1, 225, 208, 9, 1, 217, 6, 9, 1, 252, 60, 9, 1, 122, 2, 182, 
+    48, 9, 1, 122, 2, 113, 170, 67, 48, 9, 1, 227, 157, 9, 1, 246, 51, 9, 1, 
+    122, 2, 134, 170, 48, 9, 1, 217, 27, 9, 1, 217, 25, 9, 1, 248, 138, 9, 1, 
+    248, 204, 2, 222, 236, 9, 1, 248, 204, 2, 59, 51, 9, 1, 248, 204, 2, 59, 
+    252, 51, 22, 4, 217, 81, 9, 1, 248, 209, 9, 1, 248, 140, 9, 1, 246, 78, 
+    9, 1, 248, 204, 2, 134, 170, 72, 246, 111, 9, 1, 248, 204, 2, 244, 19, 
+    170, 48, 9, 1, 222, 173, 9, 1, 223, 99, 2, 4, 214, 105, 9, 1, 223, 99, 2, 
+    222, 236, 9, 1, 223, 99, 2, 59, 51, 9, 1, 223, 99, 2, 4, 214, 106, 51, 9, 
+    1, 223, 99, 2, 59, 252, 51, 22, 59, 48, 9, 1, 223, 99, 2, 113, 170, 48, 
+    9, 1, 235, 126, 9, 1, 223, 99, 2, 244, 19, 170, 48, 9, 1, 221, 169, 2, 
+    59, 252, 51, 22, 59, 48, 9, 1, 221, 169, 2, 134, 170, 51, 9, 1, 221, 169, 
+    2, 134, 170, 252, 51, 22, 134, 170, 48, 9, 1, 222, 29, 2, 113, 170, 51, 
+    9, 1, 222, 29, 2, 134, 170, 48, 9, 1, 217, 82, 2, 134, 170, 48, 9, 1, 
+    254, 206, 2, 134, 170, 48, 9, 1, 247, 127, 244, 150, 9, 1, 244, 151, 2, 
+    59, 230, 114, 51, 9, 1, 244, 151, 2, 59, 51, 9, 1, 213, 248, 9, 1, 244, 
+    151, 2, 134, 170, 51, 9, 1, 225, 206, 9, 1, 224, 85, 2, 59, 48, 9, 1, 
+    224, 85, 2, 134, 170, 48, 9, 1, 234, 180, 9, 1, 217, 251, 235, 0, 9, 1, 
+    235, 1, 2, 222, 236, 9, 1, 235, 1, 2, 59, 48, 9, 1, 229, 84, 9, 1, 235, 
+    1, 2, 134, 170, 51, 9, 1, 243, 129, 9, 1, 243, 130, 2, 222, 236, 9, 1, 
+    229, 7, 9, 1, 243, 130, 2, 113, 170, 51, 9, 1, 242, 108, 9, 1, 243, 130, 
+    2, 134, 170, 48, 9, 1, 233, 109, 2, 4, 214, 105, 9, 1, 233, 109, 2, 59, 
+    48, 9, 1, 233, 109, 2, 134, 170, 48, 9, 1, 233, 109, 2, 134, 170, 51, 9, 
+    1, 228, 68, 2, 59, 51, 9, 1, 228, 68, 242, 225, 9, 1, 222, 216, 9, 1, 
+    228, 68, 2, 222, 236, 9, 1, 228, 68, 2, 134, 170, 48, 9, 1, 241, 226, 
+    247, 149, 9, 1, 217, 28, 2, 59, 48, 9, 1, 241, 226, 2, 77, 48, 9, 1, 241, 
+    226, 242, 178, 9, 1, 241, 226, 242, 179, 2, 182, 48, 9, 1, 217, 9, 231, 
+    170, 242, 178, 9, 1, 212, 31, 2, 222, 236, 9, 1, 234, 79, 226, 238, 9, 1, 
+    226, 238, 9, 1, 69, 9, 1, 210, 212, 9, 1, 234, 79, 210, 212, 9, 1, 212, 
+    31, 2, 113, 170, 48, 9, 1, 213, 255, 9, 1, 244, 176, 211, 43, 9, 1, 77, 
+    2, 217, 78, 9, 1, 77, 2, 4, 214, 105, 9, 1, 212, 31, 2, 59, 48, 9, 1, 76, 
+    9, 1, 77, 2, 134, 170, 51, 9, 1, 77, 252, 140, 9, 1, 77, 252, 141, 2, 
+    182, 48, 9, 243, 236, 218, 131, 9, 1, 254, 252, 9, 4, 125, 27, 222, 29, 
+    2, 233, 109, 2, 109, 231, 197, 9, 4, 125, 27, 224, 85, 2, 233, 109, 2, 
+    109, 231, 197, 9, 4, 125, 66, 65, 17, 9, 4, 125, 233, 109, 254, 179, 9, 
+    4, 125, 235, 129, 9, 4, 125, 134, 247, 126, 9, 4, 125, 221, 168, 9, 245, 
+    151, 64, 253, 174, 9, 218, 154, 64, 222, 140, 245, 183, 241, 162, 9, 4, 
+    125, 222, 185, 210, 86, 9, 4, 125, 214, 159, 223, 118, 210, 86, 9, 4, 
+    125, 247, 127, 241, 243, 64, 234, 135, 9, 4, 125, 66, 53, 17, 9, 4, 121, 
+    221, 168, 9, 4, 125, 231, 232, 9, 4, 212, 30, 9, 4, 211, 43, 9, 4, 125, 
+    211, 43, 9, 4, 125, 228, 67, 9, 225, 44, 64, 222, 15, 9, 245, 160, 250, 
+    183, 121, 218, 131, 9, 245, 160, 250, 183, 125, 218, 131, 9, 222, 185, 
+    125, 218, 132, 2, 244, 112, 250, 182, 9, 4, 121, 231, 83, 9, 1, 248, 204, 
+    2, 235, 200, 214, 105, 9, 1, 223, 99, 2, 235, 200, 214, 105, 245, 30, 
+    254, 45, 21, 210, 86, 245, 30, 254, 45, 21, 111, 245, 30, 254, 45, 21, 
+    105, 245, 30, 254, 45, 21, 158, 245, 30, 254, 45, 21, 161, 245, 30, 254, 
+    45, 21, 190, 245, 30, 254, 45, 21, 195, 245, 30, 254, 45, 21, 199, 245, 
+    30, 254, 45, 21, 196, 245, 30, 254, 45, 21, 201, 9, 1, 220, 62, 2, 59, 
+    51, 9, 1, 248, 225, 2, 59, 51, 9, 1, 242, 252, 2, 59, 51, 9, 5, 219, 160, 
+    254, 134, 9, 5, 219, 160, 224, 238, 231, 63, 9, 1, 241, 226, 2, 235, 200, 
+    214, 105, 183, 245, 151, 64, 226, 18, 183, 218, 20, 243, 236, 218, 131, 
+    183, 218, 68, 243, 236, 218, 131, 183, 218, 20, 249, 234, 183, 218, 68, 
+    249, 234, 183, 203, 249, 234, 183, 249, 235, 219, 108, 233, 52, 183, 249, 
+    235, 219, 108, 222, 254, 183, 218, 20, 249, 235, 219, 108, 233, 52, 183, 
+    218, 68, 249, 235, 219, 108, 222, 254, 183, 249, 188, 183, 242, 8, 226, 
+    254, 183, 242, 8, 231, 41, 183, 242, 8, 253, 226, 183, 255, 30, 79, 183, 
+    1, 254, 183, 183, 1, 218, 24, 254, 183, 183, 1, 252, 33, 183, 1, 243, 
+    120, 183, 1, 243, 121, 243, 98, 183, 1, 248, 200, 183, 1, 247, 127, 248, 
+    201, 222, 232, 183, 1, 241, 245, 183, 1, 212, 30, 183, 1, 210, 108, 183, 
+    1, 241, 202, 183, 1, 216, 227, 183, 1, 216, 228, 243, 98, 183, 1, 210, 
+    199, 183, 1, 210, 200, 241, 245, 183, 1, 234, 231, 183, 1, 233, 107, 183, 
+    1, 230, 195, 183, 1, 227, 198, 183, 1, 220, 145, 183, 1, 40, 220, 145, 
+    183, 1, 76, 183, 1, 225, 224, 183, 1, 223, 52, 225, 224, 183, 1, 222, 26, 
+    183, 1, 224, 78, 183, 1, 222, 232, 183, 1, 220, 22, 183, 1, 217, 37, 183, 
+    1, 225, 172, 252, 20, 183, 1, 225, 172, 242, 249, 183, 1, 225, 172, 248, 
+    28, 183, 224, 154, 48, 183, 224, 154, 51, 183, 224, 154, 246, 125, 183, 
+    210, 17, 48, 183, 210, 17, 51, 183, 210, 17, 246, 125, 183, 223, 134, 48, 
+    183, 223, 134, 51, 183, 246, 126, 210, 24, 241, 51, 183, 246, 126, 210, 
+    24, 254, 113, 183, 241, 248, 48, 183, 241, 248, 51, 183, 241, 247, 246, 
+    125, 183, 245, 87, 48, 183, 245, 87, 51, 183, 222, 109, 183, 244, 144, 
+    247, 128, 183, 223, 251, 183, 222, 136, 183, 113, 67, 170, 48, 183, 113, 
+    67, 170, 51, 183, 134, 170, 48, 183, 134, 170, 51, 183, 226, 252, 232, 
+    220, 48, 183, 226, 252, 232, 220, 51, 183, 230, 61, 183, 252, 139, 183, 
+    1, 219, 51, 210, 80, 183, 1, 219, 51, 234, 128, 183, 1, 219, 51, 244, 
+    162, 9, 1, 252, 63, 2, 134, 170, 241, 1, 51, 9, 1, 252, 63, 2, 59, 252, 
+    51, 22, 134, 170, 48, 9, 1, 252, 63, 2, 134, 170, 225, 10, 214, 153, 51, 
+    9, 1, 252, 63, 2, 134, 170, 225, 10, 214, 153, 252, 51, 22, 113, 170, 48, 
+    9, 1, 252, 63, 2, 113, 170, 252, 51, 22, 59, 48, 9, 1, 252, 63, 2, 235, 
+    200, 4, 214, 106, 51, 9, 1, 252, 63, 2, 4, 214, 105, 9, 1, 122, 2, 113, 
+    170, 48, 9, 1, 122, 2, 134, 170, 225, 10, 214, 153, 51, 9, 1, 248, 204, 
+    2, 113, 170, 213, 189, 252, 51, 22, 4, 217, 81, 9, 1, 248, 204, 2, 235, 
+    200, 4, 214, 106, 51, 9, 1, 223, 99, 2, 91, 9, 1, 221, 169, 2, 244, 19, 
+    170, 48, 9, 1, 254, 206, 2, 113, 170, 48, 9, 1, 254, 206, 2, 134, 170, 
+    225, 10, 246, 112, 48, 9, 1, 254, 206, 2, 113, 170, 213, 189, 48, 9, 1, 
+    244, 151, 2, 113, 170, 51, 9, 1, 244, 151, 2, 134, 170, 225, 10, 214, 
+    153, 51, 9, 1, 234, 181, 2, 59, 48, 9, 1, 234, 181, 2, 134, 170, 48, 9, 
+    1, 234, 181, 2, 134, 170, 225, 10, 214, 153, 51, 9, 1, 66, 2, 59, 48, 9, 
+    1, 66, 2, 59, 51, 9, 1, 228, 68, 2, 113, 170, 51, 9, 1, 228, 68, 2, 4, 
+    217, 81, 9, 1, 228, 68, 2, 4, 214, 105, 9, 1, 233, 109, 2, 130, 9, 1, 
+    223, 99, 2, 113, 170, 213, 189, 48, 9, 1, 223, 99, 2, 182, 48, 9, 1, 221, 
+    169, 2, 113, 170, 213, 189, 48, 9, 1, 122, 2, 4, 9, 1, 217, 82, 51, 9, 1, 
+    122, 2, 4, 9, 1, 217, 82, 22, 113, 247, 126, 9, 1, 221, 169, 2, 4, 9, 1, 
+    217, 82, 22, 113, 247, 126, 9, 1, 223, 99, 2, 4, 9, 1, 217, 82, 22, 113, 
+    247, 126, 9, 1, 122, 2, 4, 9, 1, 217, 82, 48, 9, 1, 109, 2, 245, 30, 254, 
+    45, 21, 113, 48, 9, 1, 109, 2, 245, 30, 254, 45, 21, 134, 48, 9, 1, 244, 
+    176, 77, 2, 245, 30, 254, 45, 21, 113, 48, 9, 1, 244, 176, 77, 2, 245, 
+    30, 254, 45, 21, 134, 48, 9, 1, 244, 176, 77, 2, 245, 30, 254, 45, 21, 
+    244, 19, 51, 9, 1, 212, 31, 2, 245, 30, 254, 45, 21, 113, 48, 9, 1, 212, 
+    31, 2, 245, 30, 254, 45, 21, 134, 48, 9, 1, 77, 252, 141, 2, 245, 30, 
+    254, 45, 21, 113, 48, 9, 1, 77, 252, 141, 2, 245, 30, 254, 45, 21, 134, 
+    48, 9, 1, 122, 2, 245, 30, 254, 45, 21, 244, 19, 51, 9, 1, 221, 169, 2, 
+    245, 30, 254, 45, 21, 244, 19, 48, 9, 1, 221, 169, 2, 235, 200, 214, 105, 
+    9, 1, 235, 1, 2, 113, 170, 48, 216, 206, 1, 242, 53, 216, 206, 1, 220, 
+    70, 216, 206, 1, 228, 66, 216, 206, 1, 223, 187, 216, 206, 1, 252, 197, 
+    216, 206, 1, 233, 1, 216, 206, 1, 235, 14, 216, 206, 1, 254, 168, 216, 
+    206, 1, 214, 25, 216, 206, 1, 231, 82, 216, 206, 1, 244, 202, 216, 206, 
+    1, 248, 31, 216, 206, 1, 216, 208, 216, 206, 1, 233, 137, 216, 206, 1, 
+    243, 138, 216, 206, 1, 242, 184, 216, 206, 1, 221, 167, 216, 206, 1, 248, 
+    156, 216, 206, 1, 210, 100, 216, 206, 1, 217, 38, 216, 206, 1, 211, 103, 
+    216, 206, 1, 225, 237, 216, 206, 1, 235, 134, 216, 206, 1, 250, 142, 216, 
+    206, 1, 215, 156, 216, 206, 1, 241, 195, 216, 206, 1, 234, 137, 216, 206, 
+    1, 216, 207, 216, 206, 1, 210, 115, 216, 206, 1, 220, 60, 216, 206, 1, 
+    222, 32, 216, 206, 1, 248, 227, 216, 206, 1, 112, 216, 206, 1, 210, 23, 
+    216, 206, 1, 254, 202, 216, 206, 1, 242, 250, 216, 206, 1, 224, 88, 216, 
+    206, 1, 212, 63, 216, 206, 255, 31, 216, 206, 255, 47, 216, 206, 240, 
+    121, 216, 206, 245, 216, 216, 206, 214, 222, 216, 206, 226, 186, 216, 
+    206, 245, 224, 216, 206, 245, 24, 216, 206, 226, 251, 216, 206, 227, 3, 
+    216, 206, 218, 46, 216, 206, 1, 229, 230, 228, 142, 21, 210, 86, 228, 
+    142, 21, 111, 228, 142, 21, 105, 228, 142, 21, 158, 228, 142, 21, 161, 
+    228, 142, 21, 190, 228, 142, 21, 195, 228, 142, 21, 199, 228, 142, 21, 
+    196, 228, 142, 21, 201, 228, 142, 1, 61, 228, 142, 1, 245, 217, 228, 142, 
+    1, 74, 228, 142, 1, 76, 228, 142, 1, 69, 228, 142, 1, 226, 187, 228, 142, 
+    1, 78, 228, 142, 1, 248, 217, 228, 142, 1, 230, 30, 228, 142, 1, 252, 
+    199, 228, 142, 1, 191, 228, 142, 1, 217, 106, 228, 142, 1, 235, 147, 228, 
+    142, 1, 250, 165, 228, 142, 1, 248, 229, 228, 142, 1, 205, 228, 142, 1, 
+    222, 181, 228, 142, 1, 206, 228, 142, 1, 243, 86, 228, 142, 1, 244, 204, 
+    228, 142, 1, 176, 228, 142, 1, 233, 141, 228, 142, 1, 229, 234, 211, 223, 
+    228, 142, 1, 186, 228, 142, 1, 227, 169, 228, 142, 1, 198, 228, 142, 1, 
+    162, 228, 142, 1, 212, 65, 228, 142, 1, 192, 228, 142, 1, 227, 170, 211, 
+    223, 228, 142, 1, 235, 67, 235, 147, 228, 142, 1, 235, 67, 250, 165, 228, 
+    142, 1, 235, 67, 205, 228, 142, 38, 219, 253, 125, 216, 31, 228, 142, 38, 
+    219, 253, 121, 216, 31, 228, 142, 38, 219, 253, 222, 231, 216, 31, 228, 
+    142, 38, 200, 248, 46, 216, 31, 228, 142, 38, 200, 125, 216, 31, 228, 
+    142, 38, 200, 121, 216, 31, 228, 142, 38, 200, 222, 231, 216, 31, 228, 
+    142, 38, 229, 198, 79, 228, 142, 38, 52, 59, 48, 228, 142, 125, 138, 254, 
+    65, 228, 142, 121, 138, 254, 65, 228, 142, 16, 226, 188, 248, 58, 228, 
+    142, 16, 243, 85, 228, 142, 249, 227, 228, 142, 245, 39, 79, 228, 142, 
+    233, 114, 221, 254, 1, 254, 185, 221, 254, 1, 251, 236, 221, 254, 1, 243, 
+    119, 221, 254, 1, 248, 202, 221, 254, 1, 235, 158, 221, 254, 1, 252, 197, 
+    221, 254, 1, 210, 89, 221, 254, 1, 235, 166, 221, 254, 1, 216, 68, 221, 
+    254, 1, 210, 182, 221, 254, 1, 235, 15, 221, 254, 1, 233, 134, 221, 254, 
+    1, 230, 195, 221, 254, 1, 227, 198, 221, 254, 1, 219, 158, 221, 254, 1, 
+    236, 6, 221, 254, 1, 244, 129, 221, 254, 1, 215, 182, 221, 254, 1, 224, 
+    13, 221, 254, 1, 222, 232, 221, 254, 1, 220, 87, 221, 254, 1, 217, 101, 
+    221, 254, 164, 236, 6, 221, 254, 164, 236, 5, 221, 254, 164, 226, 247, 
+    221, 254, 164, 248, 215, 221, 254, 58, 1, 245, 113, 210, 182, 221, 254, 
+    164, 245, 113, 210, 182, 221, 254, 25, 5, 200, 76, 221, 254, 25, 5, 76, 
+    221, 254, 25, 5, 226, 122, 255, 82, 221, 254, 25, 5, 200, 255, 82, 221, 
+    254, 25, 5, 255, 82, 221, 254, 25, 5, 226, 122, 61, 221, 254, 25, 5, 200, 
+    61, 221, 254, 25, 5, 61, 221, 254, 58, 1, 219, 253, 61, 221, 254, 25, 5, 
+    219, 253, 61, 221, 254, 25, 5, 200, 69, 221, 254, 25, 5, 69, 221, 254, 
+    58, 1, 74, 221, 254, 25, 5, 200, 74, 221, 254, 25, 5, 74, 221, 254, 25, 
+    5, 78, 221, 254, 25, 5, 218, 46, 221, 254, 164, 229, 97, 221, 254, 224, 
+    144, 229, 97, 221, 254, 224, 144, 254, 227, 221, 254, 224, 144, 254, 122, 
+    221, 254, 224, 144, 252, 122, 221, 254, 224, 144, 253, 209, 221, 254, 
+    224, 144, 220, 10, 221, 254, 255, 30, 79, 221, 254, 224, 144, 231, 73, 
+    224, 48, 221, 254, 224, 144, 210, 31, 221, 254, 224, 144, 224, 48, 221, 
+    254, 224, 144, 210, 114, 221, 254, 224, 144, 215, 90, 221, 254, 224, 144, 
+    254, 17, 221, 254, 224, 144, 219, 55, 231, 150, 221, 254, 224, 144, 254, 
+    108, 231, 187, 1, 242, 31, 231, 187, 1, 255, 34, 231, 187, 1, 254, 225, 
+    231, 187, 1, 255, 8, 231, 187, 1, 254, 218, 231, 187, 1, 214, 124, 231, 
+    187, 1, 253, 168, 231, 187, 1, 235, 166, 231, 187, 1, 253, 206, 231, 187, 
+    1, 254, 190, 231, 187, 1, 254, 195, 231, 187, 1, 254, 187, 231, 187, 1, 
+    254, 144, 231, 187, 1, 254, 131, 231, 187, 1, 253, 245, 231, 187, 1, 236, 
+    6, 231, 187, 1, 254, 80, 231, 187, 1, 253, 216, 231, 187, 1, 254, 53, 
+    231, 187, 1, 254, 49, 231, 187, 1, 253, 239, 231, 187, 1, 253, 214, 231, 
+    187, 1, 246, 63, 231, 187, 1, 235, 8, 231, 187, 1, 254, 205, 231, 187, 
+    254, 231, 79, 231, 187, 213, 136, 79, 231, 187, 243, 60, 79, 231, 187, 
+    224, 143, 9, 1, 252, 63, 2, 4, 214, 106, 51, 9, 1, 151, 2, 113, 170, 48, 
+    9, 1, 217, 82, 2, 113, 170, 48, 9, 1, 244, 151, 2, 59, 252, 51, 22, 134, 
+    170, 48, 9, 1, 224, 85, 2, 59, 51, 9, 1, 233, 109, 2, 52, 130, 9, 1, 66, 
+    2, 134, 170, 48, 9, 1, 77, 2, 113, 170, 252, 51, 22, 182, 48, 9, 1, 77, 
+    2, 113, 170, 252, 51, 22, 59, 48, 9, 1, 223, 99, 2, 232, 129, 9, 1, 212, 
+    31, 2, 59, 211, 231, 9, 1, 222, 203, 211, 43, 9, 249, 107, 244, 173, 9, 
+    249, 107, 248, 192, 9, 249, 107, 234, 211, 9, 249, 107, 244, 171, 9, 249, 
+    107, 248, 190, 9, 249, 107, 234, 209, 9, 138, 123, 59, 48, 9, 138, 113, 
+    170, 48, 9, 138, 232, 130, 48, 9, 138, 123, 59, 51, 9, 138, 113, 170, 51, 
+    9, 138, 232, 130, 51, 9, 204, 244, 171, 9, 204, 248, 190, 9, 204, 234, 
+    209, 9, 4, 125, 212, 30, 9, 244, 174, 2, 222, 236, 9, 244, 174, 2, 59, 
+    48, 9, 234, 212, 2, 59, 51, 9, 43, 254, 2, 48, 9, 44, 254, 2, 48, 9, 43, 
+    254, 2, 51, 9, 44, 254, 2, 51, 9, 52, 44, 254, 2, 48, 9, 52, 44, 254, 2, 
+    72, 2, 247, 128, 9, 44, 254, 2, 72, 2, 247, 128, 9, 248, 193, 2, 247, 
+    128, 84, 5, 235, 200, 251, 7, 84, 5, 251, 7, 84, 5, 254, 83, 84, 5, 213, 
+    147, 84, 1, 219, 253, 61, 84, 1, 61, 84, 1, 255, 82, 84, 1, 74, 84, 1, 
+    236, 40, 84, 1, 69, 84, 1, 214, 118, 84, 1, 149, 153, 84, 1, 149, 156, 
+    84, 1, 251, 10, 76, 84, 1, 219, 253, 76, 84, 1, 76, 84, 1, 254, 210, 84, 
+    1, 251, 10, 78, 84, 1, 219, 253, 78, 84, 1, 78, 84, 1, 253, 200, 84, 1, 
+    176, 84, 1, 234, 138, 84, 1, 243, 142, 84, 1, 243, 0, 84, 1, 229, 82, 84, 
+    1, 251, 41, 84, 1, 250, 165, 84, 1, 235, 147, 84, 1, 235, 120, 84, 1, 
+    227, 169, 84, 1, 215, 157, 84, 1, 215, 145, 84, 1, 248, 143, 84, 1, 248, 
+    127, 84, 1, 228, 115, 84, 1, 217, 106, 84, 1, 216, 209, 84, 1, 248, 229, 
+    84, 1, 248, 33, 84, 1, 198, 84, 1, 228, 97, 84, 1, 191, 84, 1, 225, 150, 
+    84, 1, 252, 199, 84, 1, 252, 26, 84, 1, 186, 84, 1, 192, 84, 1, 205, 84, 
+    1, 222, 181, 84, 1, 233, 141, 84, 1, 232, 190, 84, 1, 232, 181, 84, 1, 
+    214, 27, 84, 1, 220, 104, 84, 1, 218, 225, 84, 1, 206, 84, 1, 162, 84, 
+    25, 5, 226, 238, 84, 25, 5, 226, 185, 84, 5, 227, 209, 84, 5, 253, 183, 
+    84, 25, 5, 255, 82, 84, 25, 5, 74, 84, 25, 5, 236, 40, 84, 25, 5, 69, 84, 
+    25, 5, 214, 118, 84, 25, 5, 149, 153, 84, 25, 5, 149, 222, 182, 84, 25, 
+    5, 251, 10, 76, 84, 25, 5, 219, 253, 76, 84, 25, 5, 76, 84, 25, 5, 254, 
+    210, 84, 25, 5, 251, 10, 78, 84, 25, 5, 219, 253, 78, 84, 25, 5, 78, 84, 
+    25, 5, 253, 200, 84, 5, 213, 152, 84, 25, 5, 224, 188, 76, 84, 25, 5, 
+    253, 179, 84, 226, 208, 84, 218, 113, 5, 214, 216, 84, 218, 113, 5, 254, 
+    85, 84, 242, 144, 255, 23, 84, 255, 12, 255, 23, 84, 25, 5, 251, 10, 200, 
+    76, 84, 25, 5, 214, 214, 84, 25, 5, 214, 117, 84, 1, 224, 91, 84, 1, 234, 
+    121, 84, 1, 242, 233, 84, 1, 210, 116, 84, 1, 248, 132, 84, 1, 223, 42, 
+    84, 1, 244, 204, 84, 1, 210, 168, 84, 1, 149, 222, 182, 84, 1, 149, 232, 
+    191, 84, 25, 5, 149, 156, 84, 25, 5, 149, 232, 191, 84, 248, 186, 84, 52, 
+    248, 186, 84, 21, 210, 86, 84, 21, 111, 84, 21, 105, 84, 21, 158, 84, 21, 
+    161, 84, 21, 190, 84, 21, 195, 84, 21, 199, 84, 21, 196, 84, 21, 201, 84, 
+    255, 30, 50, 84, 5, 125, 219, 19, 247, 128, 84, 1, 251, 10, 61, 84, 1, 
+    226, 238, 84, 1, 226, 185, 84, 1, 253, 179, 84, 1, 214, 214, 84, 1, 214, 
+    117, 84, 1, 210, 82, 84, 1, 114, 192, 84, 1, 243, 36, 84, 1, 235, 102, 
+    84, 1, 242, 187, 218, 131, 84, 1, 248, 133, 84, 1, 252, 119, 146, 5, 251, 
+    7, 146, 5, 254, 83, 146, 5, 213, 147, 146, 1, 61, 146, 1, 255, 82, 146, 
+    1, 74, 146, 1, 236, 40, 146, 1, 69, 146, 1, 214, 118, 146, 1, 149, 153, 
+    146, 1, 149, 156, 146, 1, 76, 146, 1, 254, 210, 146, 1, 78, 146, 1, 253, 
+    200, 146, 1, 176, 146, 1, 234, 138, 146, 1, 243, 142, 146, 1, 243, 0, 
+    146, 1, 229, 82, 146, 1, 251, 41, 146, 1, 250, 165, 146, 1, 235, 147, 
+    146, 1, 235, 120, 146, 1, 227, 169, 146, 1, 215, 157, 146, 1, 215, 145, 
+    146, 1, 248, 143, 146, 1, 248, 127, 146, 1, 228, 115, 146, 1, 217, 106, 
+    146, 1, 216, 209, 146, 1, 248, 229, 146, 1, 248, 33, 146, 1, 198, 146, 1, 
+    191, 146, 1, 225, 150, 146, 1, 252, 199, 146, 1, 252, 26, 146, 1, 186, 
+    146, 1, 192, 146, 1, 205, 146, 1, 233, 141, 146, 1, 220, 104, 146, 1, 
+    218, 225, 146, 1, 206, 146, 1, 162, 146, 5, 227, 209, 146, 5, 253, 183, 
+    146, 25, 5, 255, 82, 146, 25, 5, 74, 146, 25, 5, 236, 40, 146, 25, 5, 69, 
+    146, 25, 5, 214, 118, 146, 25, 5, 149, 153, 146, 25, 5, 149, 222, 182, 
+    146, 25, 5, 76, 146, 25, 5, 254, 210, 146, 25, 5, 78, 146, 25, 5, 253, 
+    200, 146, 5, 213, 152, 146, 1, 234, 130, 217, 106, 146, 253, 201, 233, 
+    29, 79, 146, 1, 222, 181, 146, 1, 223, 42, 146, 1, 210, 168, 146, 1, 149, 
+    222, 182, 146, 1, 149, 232, 191, 146, 25, 5, 149, 156, 146, 25, 5, 149, 
+    232, 191, 146, 21, 210, 86, 146, 21, 111, 146, 21, 105, 146, 21, 158, 
+    146, 21, 161, 146, 21, 190, 146, 21, 195, 146, 21, 199, 146, 21, 196, 
+    146, 21, 201, 146, 1, 223, 191, 2, 230, 229, 248, 6, 146, 1, 223, 191, 2, 
+    232, 114, 248, 6, 146, 222, 120, 79, 146, 222, 120, 50, 146, 249, 106, 
+    227, 201, 111, 146, 249, 106, 227, 201, 105, 146, 249, 106, 227, 201, 
+    158, 146, 249, 106, 227, 201, 161, 146, 249, 106, 227, 201, 123, 233, 22, 
+    216, 202, 216, 197, 248, 56, 146, 249, 106, 248, 57, 219, 121, 146, 235, 
+    167, 146, 243, 110, 79, 185, 5, 255, 7, 251, 251, 185, 5, 251, 251, 185, 
+    5, 213, 147, 185, 1, 61, 185, 1, 255, 82, 185, 1, 74, 185, 1, 236, 40, 
+    185, 1, 69, 185, 1, 214, 118, 185, 1, 245, 217, 185, 1, 254, 210, 185, 1, 
+    226, 187, 185, 1, 253, 200, 185, 1, 176, 185, 1, 234, 138, 185, 1, 243, 
+    142, 185, 1, 243, 0, 185, 1, 229, 82, 185, 1, 251, 41, 185, 1, 250, 165, 
+    185, 1, 235, 147, 185, 1, 235, 120, 185, 1, 227, 169, 185, 1, 215, 157, 
+    185, 1, 215, 145, 185, 1, 248, 143, 185, 1, 248, 127, 185, 1, 228, 115, 
+    185, 1, 217, 106, 185, 1, 216, 209, 185, 1, 248, 229, 185, 1, 248, 33, 
+    185, 1, 198, 185, 1, 191, 185, 1, 225, 150, 185, 1, 252, 199, 185, 1, 
+    252, 26, 185, 1, 186, 185, 1, 192, 185, 1, 205, 185, 1, 233, 141, 185, 1, 
+    232, 190, 185, 1, 214, 27, 185, 1, 220, 104, 185, 1, 206, 185, 1, 162, 
+    185, 5, 227, 209, 185, 25, 5, 255, 82, 185, 25, 5, 74, 185, 25, 5, 236, 
+    40, 185, 25, 5, 69, 185, 25, 5, 214, 118, 185, 25, 5, 245, 217, 185, 25, 
+    5, 254, 210, 185, 25, 5, 226, 187, 185, 25, 5, 253, 200, 185, 5, 213, 
+    152, 185, 5, 214, 218, 185, 1, 234, 121, 185, 1, 242, 233, 185, 1, 210, 
+    116, 185, 1, 222, 181, 185, 1, 244, 204, 185, 21, 210, 86, 185, 21, 111, 
+    185, 21, 105, 185, 21, 158, 185, 21, 161, 185, 21, 190, 185, 21, 195, 
+    185, 21, 199, 185, 21, 196, 185, 21, 201, 185, 216, 75, 185, 255, 6, 185, 
+    235, 185, 185, 214, 146, 185, 245, 189, 226, 192, 185, 5, 211, 78, 171, 
+    5, 251, 7, 171, 5, 254, 83, 171, 5, 213, 147, 171, 1, 61, 171, 1, 255, 
+    82, 171, 1, 74, 171, 1, 236, 40, 171, 1, 69, 171, 1, 214, 118, 171, 1, 
+    149, 153, 171, 1, 149, 156, 171, 25, 251, 10, 76, 171, 1, 76, 171, 1, 
+    254, 210, 171, 25, 251, 10, 78, 171, 1, 78, 171, 1, 253, 200, 171, 1, 
+    176, 171, 1, 234, 138, 171, 1, 243, 142, 171, 1, 243, 0, 171, 1, 229, 82, 
+    171, 1, 251, 41, 171, 1, 250, 165, 171, 1, 235, 147, 171, 1, 235, 120, 
+    171, 1, 227, 169, 171, 1, 215, 157, 171, 1, 215, 145, 171, 1, 248, 143, 
+    171, 1, 248, 127, 171, 1, 228, 115, 171, 1, 217, 106, 171, 1, 216, 209, 
+    171, 1, 248, 229, 171, 1, 248, 33, 171, 1, 198, 171, 1, 191, 171, 1, 225, 
+    150, 171, 1, 252, 199, 171, 1, 252, 26, 171, 1, 186, 171, 1, 192, 171, 1, 
+    205, 171, 1, 233, 141, 171, 1, 232, 190, 171, 1, 214, 27, 171, 1, 220, 
+    104, 171, 1, 218, 225, 171, 1, 206, 171, 1, 162, 171, 5, 227, 209, 171, 
+    5, 253, 183, 171, 25, 5, 255, 82, 171, 25, 5, 74, 171, 25, 5, 236, 40, 
+    171, 25, 5, 69, 171, 25, 5, 214, 118, 171, 25, 5, 149, 153, 171, 25, 5, 
+    149, 222, 182, 171, 25, 5, 251, 10, 76, 171, 25, 5, 76, 171, 25, 5, 254, 
+    210, 171, 25, 5, 251, 10, 78, 171, 25, 5, 78, 171, 25, 5, 253, 200, 171, 
+    5, 213, 152, 171, 226, 208, 171, 1, 149, 222, 182, 171, 1, 149, 232, 191, 
+    171, 25, 5, 149, 156, 171, 25, 5, 149, 232, 191, 171, 21, 210, 86, 171, 
+    21, 111, 171, 21, 105, 171, 21, 158, 171, 21, 161, 171, 21, 190, 171, 21, 
+    195, 171, 21, 199, 171, 21, 196, 171, 21, 201, 171, 255, 30, 50, 171, 
+    222, 120, 50, 157, 5, 251, 7, 157, 5, 254, 83, 157, 5, 213, 147, 157, 1, 
+    61, 157, 1, 255, 82, 157, 1, 74, 157, 1, 236, 40, 157, 1, 69, 157, 1, 
+    214, 118, 157, 1, 149, 153, 157, 1, 149, 156, 157, 1, 76, 157, 1, 254, 
+    210, 157, 1, 78, 157, 1, 253, 200, 157, 1, 176, 157, 1, 234, 138, 157, 1, 
+    243, 142, 157, 1, 243, 0, 157, 1, 229, 82, 157, 1, 251, 41, 157, 1, 250, 
+    165, 157, 1, 235, 147, 157, 1, 235, 120, 157, 1, 227, 169, 157, 1, 215, 
+    157, 157, 1, 215, 145, 157, 1, 248, 143, 157, 1, 248, 127, 157, 1, 228, 
+    115, 157, 1, 217, 106, 157, 1, 216, 209, 157, 1, 248, 229, 157, 1, 248, 
+    33, 157, 1, 198, 157, 1, 191, 157, 1, 225, 150, 157, 1, 252, 199, 157, 1, 
+    252, 26, 157, 1, 186, 157, 1, 192, 157, 1, 205, 157, 1, 233, 141, 157, 1, 
+    232, 190, 157, 1, 214, 27, 157, 1, 220, 104, 157, 1, 218, 225, 157, 1, 
+    206, 157, 1, 162, 157, 5, 227, 209, 157, 5, 253, 183, 157, 25, 5, 255, 
+    82, 157, 25, 5, 74, 157, 25, 5, 236, 40, 157, 25, 5, 69, 157, 25, 5, 214, 
+    118, 157, 25, 5, 149, 153, 157, 25, 5, 149, 222, 182, 157, 25, 5, 76, 
+    157, 25, 5, 254, 210, 157, 25, 5, 78, 157, 25, 5, 253, 200, 157, 5, 213, 
+    152, 157, 254, 211, 233, 29, 79, 157, 253, 201, 233, 29, 79, 157, 1, 222, 
+    181, 157, 1, 223, 42, 157, 1, 210, 168, 157, 1, 149, 222, 182, 157, 1, 
+    149, 232, 191, 157, 25, 5, 149, 156, 157, 25, 5, 149, 232, 191, 157, 21, 
+    210, 86, 157, 21, 111, 157, 21, 105, 157, 21, 158, 157, 21, 161, 157, 21, 
+    190, 157, 21, 195, 157, 21, 199, 157, 21, 196, 157, 21, 201, 157, 235, 
+    167, 157, 1, 212, 65, 157, 244, 10, 123, 224, 24, 157, 244, 10, 123, 242, 
+    34, 157, 244, 10, 134, 224, 22, 157, 244, 10, 123, 219, 119, 157, 244, 
+    10, 123, 245, 196, 157, 244, 10, 134, 219, 118, 36, 5, 254, 83, 36, 5, 
+    213, 147, 36, 1, 61, 36, 1, 255, 82, 36, 1, 74, 36, 1, 236, 40, 36, 1, 
+    69, 36, 1, 214, 118, 36, 1, 76, 36, 1, 245, 217, 36, 1, 254, 210, 36, 1, 
+    78, 36, 1, 226, 187, 36, 1, 253, 200, 36, 1, 176, 36, 1, 229, 82, 36, 1, 
+    251, 41, 36, 1, 235, 147, 36, 1, 227, 169, 36, 1, 215, 157, 36, 1, 228, 
+    115, 36, 1, 217, 106, 36, 1, 198, 36, 1, 228, 97, 36, 1, 191, 36, 1, 186, 
+    36, 1, 192, 36, 1, 205, 36, 1, 222, 181, 36, 1, 233, 141, 36, 1, 232, 
+    190, 36, 1, 232, 181, 36, 1, 214, 27, 36, 1, 220, 104, 36, 1, 218, 225, 
+    36, 1, 206, 36, 1, 162, 36, 25, 5, 255, 82, 36, 25, 5, 74, 36, 25, 5, 
+    236, 40, 36, 25, 5, 69, 36, 25, 5, 214, 118, 36, 25, 5, 76, 36, 25, 5, 
+    245, 217, 36, 25, 5, 254, 210, 36, 25, 5, 78, 36, 25, 5, 226, 187, 36, 
+    25, 5, 253, 200, 36, 5, 213, 152, 36, 226, 208, 36, 253, 201, 233, 29, 
+    79, 36, 21, 210, 86, 36, 21, 111, 36, 21, 105, 36, 21, 158, 36, 21, 161, 
+    36, 21, 190, 36, 21, 195, 36, 21, 199, 36, 21, 196, 36, 21, 201, 36, 54, 
+    216, 248, 36, 54, 123, 240, 217, 36, 54, 123, 216, 148, 36, 248, 154, 50, 
+    36, 230, 140, 50, 36, 211, 45, 50, 36, 248, 95, 50, 36, 249, 147, 50, 36, 
+    253, 246, 72, 50, 36, 222, 120, 50, 36, 54, 50, 148, 5, 251, 7, 148, 5, 
+    254, 83, 148, 5, 213, 147, 148, 1, 61, 148, 1, 255, 82, 148, 1, 74, 148, 
+    1, 236, 40, 148, 1, 69, 148, 1, 214, 118, 148, 1, 149, 153, 148, 1, 149, 
+    156, 148, 1, 76, 148, 1, 245, 217, 148, 1, 254, 210, 148, 1, 78, 148, 1, 
+    226, 187, 148, 1, 253, 200, 148, 1, 176, 148, 1, 234, 138, 148, 1, 243, 
+    142, 148, 1, 243, 0, 148, 1, 229, 82, 148, 1, 251, 41, 148, 1, 250, 165, 
+    148, 1, 235, 147, 148, 1, 235, 120, 148, 1, 227, 169, 148, 1, 215, 157, 
+    148, 1, 215, 145, 148, 1, 248, 143, 148, 1, 248, 127, 148, 1, 228, 115, 
+    148, 1, 217, 106, 148, 1, 216, 209, 148, 1, 248, 229, 148, 1, 248, 33, 
+    148, 1, 198, 148, 1, 191, 148, 1, 225, 150, 148, 1, 252, 199, 148, 1, 
+    252, 26, 148, 1, 186, 148, 1, 192, 148, 1, 205, 148, 1, 222, 181, 148, 1, 
+    233, 141, 148, 1, 232, 190, 148, 1, 214, 27, 148, 1, 220, 104, 148, 1, 
+    218, 225, 148, 1, 206, 148, 1, 162, 148, 5, 253, 183, 148, 25, 5, 255, 
+    82, 148, 25, 5, 74, 148, 25, 5, 236, 40, 148, 25, 5, 69, 148, 25, 5, 214, 
+    118, 148, 25, 5, 149, 153, 148, 25, 5, 149, 222, 182, 148, 25, 5, 76, 
+    148, 25, 5, 245, 217, 148, 25, 5, 254, 210, 148, 25, 5, 78, 148, 25, 5, 
+    226, 187, 148, 25, 5, 253, 200, 148, 5, 213, 152, 148, 233, 29, 79, 148, 
+    254, 211, 233, 29, 79, 148, 1, 215, 184, 148, 1, 246, 46, 148, 1, 149, 
+    222, 182, 148, 1, 149, 232, 191, 148, 25, 5, 149, 156, 148, 25, 5, 149, 
+    232, 191, 148, 21, 210, 86, 148, 21, 111, 148, 21, 105, 148, 21, 158, 
+    148, 21, 161, 148, 21, 190, 148, 21, 195, 148, 21, 199, 148, 21, 196, 
+    148, 21, 201, 148, 244, 10, 21, 210, 87, 31, 226, 241, 224, 226, 64, 161, 
+    148, 244, 10, 21, 123, 31, 226, 241, 224, 226, 64, 161, 148, 244, 10, 21, 
+    113, 31, 226, 241, 224, 226, 64, 161, 148, 244, 10, 21, 134, 31, 226, 
+    241, 224, 226, 64, 161, 148, 244, 10, 21, 123, 31, 245, 50, 224, 226, 64, 
+    161, 148, 244, 10, 21, 113, 31, 245, 50, 224, 226, 64, 161, 148, 244, 10, 
+    21, 134, 31, 245, 50, 224, 226, 64, 161, 148, 5, 215, 84, 165, 5, 254, 
+    83, 165, 5, 213, 147, 165, 1, 61, 165, 1, 255, 82, 165, 1, 74, 165, 1, 
+    236, 40, 165, 1, 69, 165, 1, 214, 118, 165, 1, 149, 153, 165, 1, 149, 
+    156, 165, 1, 76, 165, 1, 245, 217, 165, 1, 254, 210, 165, 1, 78, 165, 1, 
+    226, 187, 165, 1, 253, 200, 165, 1, 176, 165, 1, 234, 138, 165, 1, 243, 
+    142, 165, 1, 243, 0, 165, 1, 229, 82, 165, 1, 251, 41, 165, 1, 250, 165, 
+    165, 1, 235, 147, 165, 1, 235, 120, 165, 1, 227, 169, 165, 1, 215, 157, 
+    165, 1, 215, 145, 165, 1, 248, 143, 165, 1, 248, 127, 165, 1, 228, 115, 
+    165, 1, 217, 106, 165, 1, 216, 209, 165, 1, 248, 229, 165, 1, 248, 33, 
+    165, 1, 198, 165, 1, 191, 165, 1, 225, 150, 165, 1, 252, 199, 165, 1, 
+    252, 26, 165, 1, 186, 165, 1, 192, 165, 1, 205, 165, 1, 222, 181, 165, 1, 
+    233, 141, 165, 1, 232, 190, 165, 1, 214, 27, 165, 1, 220, 104, 165, 1, 
+    218, 225, 165, 1, 206, 165, 1, 162, 165, 5, 227, 209, 165, 5, 253, 183, 
+    165, 25, 5, 255, 82, 165, 25, 5, 74, 165, 25, 5, 236, 40, 165, 25, 5, 69, 
+    165, 25, 5, 214, 118, 165, 25, 5, 149, 153, 165, 25, 5, 149, 222, 182, 
+    165, 25, 5, 76, 165, 25, 5, 245, 217, 165, 25, 5, 254, 210, 165, 25, 5, 
+    78, 165, 25, 5, 226, 187, 165, 25, 5, 253, 200, 165, 5, 213, 152, 165, 
+    233, 29, 79, 165, 254, 211, 233, 29, 79, 165, 1, 244, 204, 165, 1, 149, 
+    222, 182, 165, 1, 149, 232, 191, 165, 25, 5, 149, 156, 165, 25, 5, 149, 
+    232, 191, 165, 21, 210, 86, 165, 21, 111, 165, 21, 105, 165, 21, 158, 
+    165, 21, 161, 165, 21, 190, 165, 21, 195, 165, 21, 199, 165, 21, 196, 
+    165, 21, 201, 165, 5, 235, 108, 165, 5, 214, 161, 136, 5, 254, 83, 136, 
+    5, 213, 147, 136, 1, 61, 136, 1, 255, 82, 136, 1, 74, 136, 1, 236, 40, 
+    136, 1, 69, 136, 1, 214, 118, 136, 1, 149, 153, 136, 1, 149, 156, 136, 1, 
+    76, 136, 1, 245, 217, 136, 1, 254, 210, 136, 1, 78, 136, 1, 226, 187, 
+    136, 1, 253, 200, 136, 1, 176, 136, 1, 234, 138, 136, 1, 243, 142, 136, 
+    1, 243, 0, 136, 1, 229, 82, 136, 1, 251, 41, 136, 1, 250, 165, 136, 1, 
+    235, 147, 136, 1, 235, 120, 136, 1, 227, 169, 136, 1, 215, 157, 136, 1, 
+    215, 145, 136, 1, 248, 143, 136, 1, 248, 127, 136, 1, 228, 115, 136, 1, 
+    217, 106, 136, 1, 216, 209, 136, 1, 248, 229, 136, 1, 248, 33, 136, 1, 
+    198, 136, 1, 228, 97, 136, 1, 191, 136, 1, 225, 150, 136, 1, 252, 199, 
+    136, 1, 252, 26, 136, 1, 186, 136, 1, 192, 136, 1, 205, 136, 1, 222, 181, 
+    136, 1, 233, 141, 136, 1, 232, 190, 136, 1, 232, 181, 136, 1, 214, 27, 
+    136, 1, 220, 104, 136, 1, 218, 225, 136, 1, 206, 136, 1, 162, 136, 1, 
+    215, 126, 136, 5, 253, 183, 136, 25, 5, 255, 82, 136, 25, 5, 74, 136, 25, 
+    5, 236, 40, 136, 25, 5, 69, 136, 25, 5, 214, 118, 136, 25, 5, 149, 153, 
+    136, 25, 5, 149, 222, 182, 136, 25, 5, 76, 136, 25, 5, 245, 217, 136, 25, 
+    5, 254, 210, 136, 25, 5, 78, 136, 25, 5, 226, 187, 136, 25, 5, 253, 200, 
+    136, 5, 213, 152, 136, 1, 59, 223, 76, 136, 253, 201, 233, 29, 79, 136, 
+    1, 149, 222, 182, 136, 1, 149, 232, 191, 136, 25, 5, 149, 156, 136, 25, 
+    5, 149, 232, 191, 136, 21, 210, 86, 136, 21, 111, 136, 21, 105, 136, 21, 
+    158, 136, 21, 161, 136, 21, 190, 136, 21, 195, 136, 21, 199, 136, 21, 
+    196, 136, 21, 201, 136, 54, 216, 248, 136, 54, 123, 240, 217, 136, 54, 
+    123, 216, 148, 136, 244, 10, 123, 224, 24, 136, 244, 10, 123, 242, 34, 
+    136, 244, 10, 134, 224, 22, 136, 248, 158, 79, 136, 1, 250, 107, 228, 
+    116, 136, 1, 250, 107, 230, 30, 136, 1, 250, 107, 222, 182, 136, 1, 250, 
+    107, 156, 136, 1, 250, 107, 232, 191, 136, 1, 250, 107, 235, 29, 175, 5, 
+    254, 82, 175, 5, 213, 146, 175, 1, 253, 173, 175, 1, 255, 36, 175, 1, 
+    254, 232, 175, 1, 254, 247, 175, 1, 235, 157, 175, 1, 236, 39, 175, 1, 
+    214, 110, 175, 1, 214, 112, 175, 1, 235, 180, 175, 1, 235, 181, 175, 1, 
+    236, 25, 175, 1, 236, 27, 175, 1, 245, 25, 175, 1, 245, 212, 175, 1, 254, 
+    197, 175, 1, 226, 112, 175, 1, 226, 181, 175, 1, 253, 186, 175, 1, 254, 
+    154, 234, 193, 175, 1, 231, 214, 234, 193, 175, 1, 254, 154, 243, 89, 
+    175, 1, 231, 214, 243, 89, 175, 1, 234, 235, 229, 227, 175, 1, 221, 238, 
+    243, 89, 175, 1, 254, 154, 250, 224, 175, 1, 231, 214, 250, 224, 175, 1, 
+    254, 154, 235, 133, 175, 1, 231, 214, 235, 133, 175, 1, 217, 99, 229, 
+    227, 175, 1, 217, 99, 221, 237, 229, 228, 175, 1, 221, 238, 235, 133, 
+    175, 1, 254, 154, 215, 153, 175, 1, 231, 214, 215, 153, 175, 1, 254, 154, 
+    248, 134, 175, 1, 231, 214, 248, 134, 175, 1, 230, 58, 229, 185, 175, 1, 
+    221, 238, 248, 134, 175, 1, 254, 154, 217, 31, 175, 1, 231, 214, 217, 31, 
+    175, 1, 254, 154, 248, 152, 175, 1, 231, 214, 248, 152, 175, 1, 248, 182, 
+    229, 185, 175, 1, 221, 238, 248, 152, 175, 1, 254, 154, 225, 232, 175, 1, 
+    231, 214, 225, 232, 175, 1, 254, 154, 252, 120, 175, 1, 231, 214, 252, 
+    120, 175, 1, 231, 136, 175, 1, 254, 139, 252, 120, 175, 1, 211, 51, 175, 
+    1, 223, 136, 175, 1, 248, 182, 233, 73, 175, 1, 214, 1, 175, 1, 217, 99, 
+    221, 212, 175, 1, 230, 58, 221, 212, 175, 1, 248, 182, 221, 212, 175, 1, 
+    241, 249, 175, 1, 230, 58, 233, 73, 175, 1, 244, 164, 175, 5, 254, 186, 
+    175, 25, 5, 254, 242, 175, 25, 5, 234, 161, 254, 249, 175, 25, 5, 247, 
+    236, 254, 249, 175, 25, 5, 234, 161, 235, 177, 175, 25, 5, 247, 236, 235, 
+    177, 175, 25, 5, 234, 161, 226, 92, 175, 25, 5, 247, 236, 226, 92, 175, 
+    25, 5, 243, 131, 175, 25, 5, 234, 21, 175, 25, 5, 247, 236, 234, 21, 175, 
+    25, 5, 234, 23, 248, 75, 175, 25, 5, 234, 22, 242, 54, 254, 242, 175, 25, 
+    5, 234, 22, 242, 54, 247, 236, 254, 242, 175, 25, 5, 234, 22, 242, 54, 
+    243, 88, 175, 25, 5, 243, 88, 175, 25, 5, 247, 236, 243, 131, 175, 25, 5, 
+    247, 236, 243, 88, 175, 224, 144, 233, 213, 168, 135, 234, 35, 234, 252, 
+    168, 135, 234, 112, 234, 134, 168, 135, 234, 112, 234, 105, 168, 135, 
+    234, 112, 234, 101, 168, 135, 234, 112, 234, 109, 168, 135, 234, 112, 
+    223, 157, 168, 135, 229, 10, 228, 253, 168, 135, 250, 95, 250, 155, 168, 
+    135, 250, 95, 250, 103, 168, 135, 250, 95, 250, 154, 168, 135, 219, 61, 
+    219, 60, 168, 135, 250, 95, 250, 91, 168, 135, 210, 245, 210, 252, 168, 
+    135, 247, 154, 250, 162, 168, 135, 216, 43, 225, 242, 168, 135, 216, 158, 
+    216, 201, 168, 135, 216, 158, 229, 206, 168, 135, 216, 158, 225, 114, 
+    168, 135, 228, 80, 229, 103, 168, 135, 247, 154, 248, 76, 168, 135, 216, 
+    43, 217, 56, 168, 135, 216, 158, 216, 132, 168, 135, 216, 158, 216, 205, 
+    168, 135, 216, 158, 216, 155, 168, 135, 228, 80, 227, 242, 168, 135, 251, 
+    214, 252, 172, 168, 135, 225, 20, 225, 45, 168, 135, 225, 125, 225, 116, 
+    168, 135, 244, 52, 244, 204, 168, 135, 225, 125, 225, 144, 168, 135, 244, 
+    52, 244, 181, 168, 135, 225, 125, 221, 249, 168, 135, 230, 167, 186, 168, 
+    135, 210, 245, 211, 79, 168, 135, 222, 214, 222, 141, 168, 135, 222, 142, 
+    168, 135, 232, 163, 232, 212, 168, 135, 232, 103, 168, 135, 211, 228, 
+    212, 61, 168, 135, 219, 61, 222, 8, 168, 135, 219, 61, 222, 116, 168, 
+    135, 219, 61, 218, 83, 168, 135, 241, 76, 241, 166, 168, 135, 232, 163, 
+    250, 76, 168, 135, 144, 254, 123, 168, 135, 241, 76, 228, 75, 168, 135, 
+    226, 72, 168, 135, 221, 232, 61, 168, 135, 231, 209, 242, 24, 168, 135, 
+    221, 232, 255, 82, 168, 135, 221, 232, 254, 144, 168, 135, 221, 232, 74, 
+    168, 135, 221, 232, 236, 40, 168, 135, 221, 232, 214, 214, 168, 135, 221, 
+    232, 214, 212, 168, 135, 221, 232, 69, 168, 135, 221, 232, 214, 118, 168, 
+    135, 225, 127, 168, 249, 106, 16, 252, 173, 168, 135, 221, 232, 76, 168, 
+    135, 221, 232, 254, 252, 168, 135, 221, 232, 78, 168, 135, 221, 232, 254, 
+    211, 231, 203, 168, 135, 221, 232, 254, 211, 231, 204, 168, 135, 233, 
+    112, 168, 135, 231, 200, 168, 135, 231, 201, 168, 135, 231, 209, 245, 
+    188, 168, 135, 231, 209, 216, 157, 168, 135, 231, 209, 215, 229, 168, 
+    135, 231, 209, 250, 143, 168, 135, 216, 199, 168, 135, 228, 210, 168, 
+    135, 211, 73, 168, 135, 244, 43, 168, 21, 210, 86, 168, 21, 111, 168, 21, 
+    105, 168, 21, 158, 168, 21, 161, 168, 21, 190, 168, 21, 195, 168, 21, 
+    199, 168, 21, 196, 168, 21, 201, 168, 135, 254, 119, 168, 135, 234, 110, 
+    209, 209, 1, 234, 34, 209, 209, 1, 234, 112, 218, 36, 209, 209, 1, 234, 
+    112, 217, 63, 209, 209, 1, 229, 9, 209, 209, 1, 249, 246, 209, 209, 1, 
+    219, 61, 217, 63, 209, 209, 1, 227, 138, 209, 209, 1, 247, 153, 209, 209, 
+    1, 112, 209, 209, 1, 216, 158, 218, 36, 209, 209, 1, 216, 158, 217, 63, 
+    209, 209, 1, 228, 79, 209, 209, 1, 251, 213, 209, 209, 1, 225, 19, 209, 
+    209, 1, 225, 125, 218, 36, 209, 209, 1, 244, 52, 217, 63, 209, 209, 1, 
+    225, 125, 217, 63, 209, 209, 1, 244, 52, 218, 36, 209, 209, 1, 230, 166, 
+    209, 209, 1, 210, 244, 209, 209, 1, 232, 163, 232, 212, 209, 209, 1, 232, 
+    163, 232, 127, 209, 209, 1, 211, 227, 209, 209, 1, 219, 61, 218, 36, 209, 
+    209, 1, 241, 76, 218, 36, 209, 209, 1, 78, 209, 209, 1, 241, 76, 217, 63, 
+    209, 209, 245, 171, 209, 209, 25, 5, 61, 209, 209, 25, 5, 231, 209, 234, 
+    240, 209, 209, 25, 5, 255, 82, 209, 209, 25, 5, 254, 144, 209, 209, 25, 
+    5, 74, 209, 209, 25, 5, 236, 40, 209, 209, 25, 5, 211, 117, 209, 209, 25, 
+    5, 210, 169, 209, 209, 25, 5, 69, 209, 209, 25, 5, 214, 118, 209, 209, 
+    25, 5, 231, 209, 234, 19, 209, 209, 220, 147, 5, 232, 162, 209, 209, 220, 
+    147, 5, 227, 138, 209, 209, 25, 5, 76, 209, 209, 25, 5, 245, 203, 209, 
+    209, 25, 5, 78, 209, 209, 25, 5, 253, 175, 209, 209, 25, 5, 254, 210, 
+    209, 209, 234, 35, 233, 141, 209, 209, 138, 231, 209, 245, 188, 209, 209, 
+    138, 231, 209, 216, 157, 209, 209, 138, 231, 209, 216, 118, 209, 209, 
+    138, 231, 209, 250, 231, 209, 209, 251, 12, 79, 209, 209, 228, 219, 209, 
+    209, 21, 210, 86, 209, 209, 21, 111, 209, 209, 21, 105, 209, 209, 21, 
+    158, 209, 209, 21, 161, 209, 209, 21, 190, 209, 209, 21, 195, 209, 209, 
+    21, 199, 209, 209, 21, 196, 209, 209, 21, 201, 209, 209, 241, 76, 228, 
+    79, 209, 209, 241, 76, 230, 166, 209, 209, 1, 234, 113, 242, 181, 209, 
+    209, 1, 234, 113, 227, 138, 63, 3, 226, 208, 63, 164, 242, 122, 211, 0, 
+    230, 253, 215, 190, 61, 63, 164, 242, 122, 211, 0, 230, 253, 255, 168, 
+    222, 218, 252, 85, 186, 63, 164, 242, 122, 211, 0, 230, 253, 255, 168, 
+    242, 122, 215, 174, 186, 63, 164, 65, 211, 0, 230, 253, 231, 98, 186, 63, 
+    164, 250, 4, 211, 0, 230, 253, 220, 111, 186, 63, 164, 250, 247, 211, 0, 
+    230, 253, 225, 115, 220, 98, 186, 63, 164, 211, 0, 230, 253, 215, 174, 
+    220, 98, 186, 63, 164, 221, 210, 220, 97, 63, 164, 251, 136, 211, 0, 230, 
+    252, 63, 164, 251, 231, 220, 5, 211, 0, 230, 252, 63, 164, 235, 204, 215, 
+    173, 63, 164, 248, 69, 215, 174, 251, 135, 63, 164, 220, 97, 63, 164, 
+    227, 143, 220, 97, 63, 164, 215, 174, 220, 97, 63, 164, 227, 143, 215, 
+    174, 220, 97, 63, 164, 222, 239, 250, 130, 218, 238, 220, 97, 63, 164, 
+    223, 45, 242, 153, 220, 97, 63, 164, 250, 247, 255, 172, 222, 146, 231, 
+    97, 200, 251, 15, 63, 164, 242, 122, 215, 173, 63, 232, 150, 5, 250, 163, 
+    222, 145, 63, 232, 150, 5, 233, 2, 222, 145, 63, 253, 220, 5, 220, 107, 
+    243, 72, 255, 173, 222, 145, 63, 253, 220, 5, 255, 170, 191, 63, 253, 
+    220, 5, 221, 184, 215, 169, 63, 5, 223, 133, 247, 167, 243, 71, 63, 5, 
+    223, 133, 247, 167, 242, 183, 63, 5, 223, 133, 247, 167, 242, 123, 63, 5, 
+    223, 133, 229, 224, 243, 71, 63, 5, 223, 133, 229, 224, 242, 183, 63, 5, 
+    223, 133, 247, 167, 223, 133, 229, 223, 63, 21, 210, 86, 63, 21, 111, 63, 
+    21, 105, 63, 21, 158, 63, 21, 161, 63, 21, 190, 63, 21, 195, 63, 21, 199, 
+    63, 21, 196, 63, 21, 201, 63, 21, 163, 111, 63, 21, 163, 105, 63, 21, 
+    163, 158, 63, 21, 163, 161, 63, 21, 163, 190, 63, 21, 163, 195, 63, 21, 
+    163, 199, 63, 21, 163, 196, 63, 21, 163, 201, 63, 21, 163, 210, 86, 63, 
+    164, 251, 138, 222, 145, 63, 164, 229, 73, 251, 76, 227, 153, 210, 25, 
+    63, 164, 250, 247, 255, 172, 222, 146, 251, 77, 230, 207, 251, 15, 63, 
+    164, 229, 73, 251, 76, 220, 108, 222, 145, 63, 164, 250, 140, 230, 252, 
+    63, 164, 215, 185, 255, 169, 63, 164, 242, 107, 222, 146, 242, 70, 63, 
+    164, 242, 107, 222, 146, 242, 76, 63, 164, 254, 124, 234, 129, 242, 70, 
+    63, 164, 254, 124, 234, 129, 242, 76, 63, 5, 211, 65, 215, 172, 63, 5, 
+    231, 172, 215, 172, 63, 1, 176, 63, 1, 234, 138, 63, 1, 243, 142, 63, 1, 
+    243, 0, 63, 1, 229, 82, 63, 1, 251, 41, 63, 1, 250, 165, 63, 1, 235, 147, 
+    63, 1, 227, 169, 63, 1, 215, 157, 63, 1, 215, 145, 63, 1, 248, 143, 63, 
+    1, 248, 127, 63, 1, 228, 115, 63, 1, 217, 106, 63, 1, 216, 209, 63, 1, 
+    248, 229, 63, 1, 248, 33, 63, 1, 198, 63, 1, 191, 63, 1, 225, 150, 63, 1, 
+    252, 199, 63, 1, 252, 26, 63, 1, 186, 63, 1, 215, 184, 63, 1, 215, 176, 
+    63, 1, 246, 46, 63, 1, 246, 41, 63, 1, 212, 65, 63, 1, 210, 82, 63, 1, 
+    210, 116, 63, 1, 255, 175, 63, 1, 192, 63, 1, 205, 63, 1, 233, 141, 63, 
+    1, 220, 104, 63, 1, 218, 225, 63, 1, 206, 63, 1, 162, 63, 1, 61, 63, 1, 
+    233, 237, 63, 1, 244, 85, 205, 63, 1, 234, 52, 63, 1, 222, 181, 63, 25, 
+    5, 255, 82, 63, 25, 5, 74, 63, 25, 5, 236, 40, 63, 25, 5, 69, 63, 25, 5, 
+    214, 118, 63, 25, 5, 149, 153, 63, 25, 5, 149, 222, 182, 63, 25, 5, 149, 
+    156, 63, 25, 5, 149, 232, 191, 63, 25, 5, 76, 63, 25, 5, 245, 217, 63, 
+    25, 5, 78, 63, 25, 5, 226, 187, 63, 5, 222, 224, 218, 85, 229, 83, 222, 
+    213, 63, 5, 222, 218, 252, 84, 63, 25, 5, 223, 52, 74, 63, 25, 5, 223, 
+    52, 236, 40, 63, 5, 227, 153, 210, 26, 229, 231, 248, 229, 63, 5, 219, 
+    73, 233, 66, 63, 164, 242, 36, 63, 164, 226, 61, 63, 5, 233, 69, 222, 
+    145, 63, 5, 211, 70, 222, 145, 63, 5, 233, 70, 215, 185, 251, 15, 63, 5, 
+    231, 100, 251, 15, 63, 5, 242, 126, 251, 16, 223, 43, 63, 5, 242, 126, 
+    231, 90, 223, 43, 63, 5, 235, 200, 231, 100, 251, 15, 63, 218, 74, 5, 
+    233, 70, 215, 185, 251, 15, 63, 218, 74, 5, 231, 100, 251, 15, 63, 218, 
+    74, 5, 235, 200, 231, 100, 251, 15, 63, 218, 74, 1, 176, 63, 218, 74, 1, 
+    234, 138, 63, 218, 74, 1, 243, 142, 63, 218, 74, 1, 243, 0, 63, 218, 74, 
+    1, 229, 82, 63, 218, 74, 1, 251, 41, 63, 218, 74, 1, 250, 165, 63, 218, 
+    74, 1, 235, 147, 63, 218, 74, 1, 227, 169, 63, 218, 74, 1, 215, 157, 63, 
+    218, 74, 1, 215, 145, 63, 218, 74, 1, 248, 143, 63, 218, 74, 1, 248, 127, 
+    63, 218, 74, 1, 228, 115, 63, 218, 74, 1, 217, 106, 63, 218, 74, 1, 216, 
+    209, 63, 218, 74, 1, 248, 229, 63, 218, 74, 1, 248, 33, 63, 218, 74, 1, 
+    198, 63, 218, 74, 1, 191, 63, 218, 74, 1, 225, 150, 63, 218, 74, 1, 252, 
+    199, 63, 218, 74, 1, 252, 26, 63, 218, 74, 1, 186, 63, 218, 74, 1, 215, 
+    184, 63, 218, 74, 1, 215, 176, 63, 218, 74, 1, 246, 46, 63, 218, 74, 1, 
+    246, 41, 63, 218, 74, 1, 212, 65, 63, 218, 74, 1, 210, 82, 63, 218, 74, 
+    1, 210, 116, 63, 218, 74, 1, 255, 175, 63, 218, 74, 1, 192, 63, 218, 74, 
+    1, 205, 63, 218, 74, 1, 233, 141, 63, 218, 74, 1, 220, 104, 63, 218, 74, 
+    1, 218, 225, 63, 218, 74, 1, 206, 63, 218, 74, 1, 162, 63, 218, 74, 1, 
+    61, 63, 218, 74, 1, 233, 237, 63, 218, 74, 1, 244, 85, 212, 65, 63, 218, 
+    74, 1, 244, 85, 192, 63, 218, 74, 1, 244, 85, 205, 63, 233, 224, 222, 
+    143, 234, 138, 63, 233, 224, 222, 143, 234, 139, 251, 77, 230, 207, 251, 
+    15, 63, 251, 4, 5, 114, 252, 78, 63, 251, 4, 5, 193, 252, 78, 63, 251, 4, 
+    5, 251, 5, 217, 21, 63, 251, 4, 5, 221, 209, 255, 174, 63, 16, 246, 99, 
+    251, 133, 63, 16, 223, 132, 222, 225, 63, 16, 226, 81, 243, 70, 63, 16, 
+    223, 132, 222, 226, 223, 45, 242, 152, 63, 16, 225, 115, 191, 63, 16, 
+    228, 64, 251, 133, 63, 16, 228, 64, 251, 134, 227, 143, 255, 171, 63, 16, 
+    228, 64, 251, 134, 242, 124, 255, 171, 63, 16, 228, 64, 251, 134, 251, 
+    77, 255, 171, 63, 5, 223, 133, 229, 224, 223, 133, 247, 166, 63, 5, 223, 
+    133, 229, 224, 242, 123, 63, 164, 251, 137, 220, 5, 242, 222, 230, 253, 
+    223, 44, 63, 164, 230, 168, 211, 0, 242, 222, 230, 253, 223, 44, 63, 164, 
+    227, 143, 215, 173, 63, 164, 65, 251, 160, 222, 215, 211, 0, 230, 253, 
+    231, 98, 186, 63, 164, 250, 4, 251, 160, 222, 215, 211, 0, 230, 253, 220, 
+    111, 186, 222, 253, 218, 0, 50, 233, 51, 218, 0, 50, 222, 253, 218, 0, 5, 
+    2, 247, 126, 233, 51, 218, 0, 5, 2, 247, 126, 63, 164, 233, 61, 231, 101, 
+    222, 145, 63, 164, 215, 251, 231, 101, 222, 145, 68, 1, 176, 68, 1, 234, 
+    138, 68, 1, 243, 142, 68, 1, 243, 0, 68, 1, 229, 82, 68, 1, 251, 41, 68, 
+    1, 250, 165, 68, 1, 235, 147, 68, 1, 235, 120, 68, 1, 227, 169, 68, 1, 
+    228, 81, 68, 1, 215, 157, 68, 1, 215, 145, 68, 1, 248, 143, 68, 1, 248, 
+    127, 68, 1, 228, 115, 68, 1, 217, 106, 68, 1, 216, 209, 68, 1, 248, 229, 
+    68, 1, 248, 33, 68, 1, 198, 68, 1, 191, 68, 1, 225, 150, 68, 1, 252, 199, 
+    68, 1, 252, 26, 68, 1, 186, 68, 1, 192, 68, 1, 205, 68, 1, 233, 141, 68, 
+    1, 212, 65, 68, 1, 206, 68, 1, 162, 68, 1, 232, 190, 68, 1, 61, 68, 1, 
+    220, 88, 61, 68, 1, 74, 68, 1, 236, 40, 68, 1, 69, 68, 1, 214, 118, 68, 
+    1, 76, 68, 1, 230, 156, 76, 68, 1, 78, 68, 1, 253, 200, 68, 25, 5, 217, 
+    65, 255, 82, 68, 25, 5, 255, 82, 68, 25, 5, 74, 68, 25, 5, 236, 40, 68, 
+    25, 5, 69, 68, 25, 5, 214, 118, 68, 25, 5, 76, 68, 25, 5, 254, 210, 68, 
+    25, 5, 230, 156, 236, 40, 68, 25, 5, 230, 156, 78, 68, 25, 5, 160, 48, 
+    68, 5, 254, 83, 68, 5, 59, 51, 68, 5, 213, 147, 68, 5, 213, 152, 68, 5, 
+    253, 243, 68, 117, 5, 147, 192, 68, 117, 5, 147, 205, 68, 117, 5, 147, 
+    212, 65, 68, 117, 5, 147, 162, 68, 1, 242, 139, 206, 68, 21, 210, 86, 68, 
+    21, 111, 68, 21, 105, 68, 21, 158, 68, 21, 161, 68, 21, 190, 68, 21, 195, 
+    68, 21, 199, 68, 21, 196, 68, 21, 201, 68, 5, 232, 198, 221, 174, 68, 5, 
+    221, 174, 68, 16, 232, 159, 68, 16, 249, 221, 68, 16, 254, 229, 68, 16, 
+    243, 55, 68, 1, 220, 104, 68, 1, 218, 225, 68, 1, 149, 153, 68, 1, 149, 
+    222, 182, 68, 1, 149, 156, 68, 1, 149, 232, 191, 68, 25, 5, 149, 153, 68, 
+    25, 5, 149, 222, 182, 68, 25, 5, 149, 156, 68, 25, 5, 149, 232, 191, 68, 
+    1, 230, 156, 229, 82, 68, 1, 230, 156, 235, 120, 68, 1, 230, 156, 252, 
+    119, 68, 1, 230, 156, 252, 114, 68, 117, 5, 230, 156, 147, 198, 68, 117, 
+    5, 230, 156, 147, 186, 68, 117, 5, 230, 156, 147, 233, 141, 68, 1, 220, 
+    110, 234, 219, 220, 104, 68, 25, 5, 220, 110, 234, 219, 245, 63, 68, 138, 
+    164, 220, 110, 234, 219, 241, 254, 68, 138, 164, 220, 110, 234, 219, 234, 
+    189, 225, 124, 68, 1, 212, 7, 224, 111, 234, 219, 216, 209, 68, 1, 212, 
+    7, 224, 111, 234, 219, 224, 117, 68, 25, 5, 212, 7, 224, 111, 234, 219, 
+    245, 63, 68, 25, 5, 212, 7, 224, 111, 234, 219, 214, 214, 68, 5, 212, 7, 
+    224, 111, 234, 219, 216, 30, 68, 5, 212, 7, 224, 111, 234, 219, 216, 29, 
+    68, 5, 212, 7, 224, 111, 234, 219, 216, 28, 68, 5, 212, 7, 224, 111, 234, 
+    219, 216, 27, 68, 5, 212, 7, 224, 111, 234, 219, 216, 26, 68, 1, 245, 
+    227, 224, 111, 234, 219, 228, 115, 68, 1, 245, 227, 224, 111, 234, 219, 
+    210, 176, 68, 1, 245, 227, 224, 111, 234, 219, 242, 224, 68, 25, 5, 243, 
+    66, 234, 219, 74, 68, 25, 5, 234, 194, 226, 238, 68, 25, 5, 234, 194, 69, 
+    68, 25, 5, 234, 194, 245, 217, 68, 1, 220, 88, 176, 68, 1, 220, 88, 234, 
+    138, 68, 1, 220, 88, 243, 142, 68, 1, 220, 88, 251, 41, 68, 1, 220, 88, 
+    210, 116, 68, 1, 220, 88, 227, 169, 68, 1, 220, 88, 248, 229, 68, 1, 220, 
+    88, 198, 68, 1, 220, 88, 225, 150, 68, 1, 220, 88, 244, 204, 68, 1, 220, 
+    88, 252, 199, 68, 1, 220, 88, 216, 209, 68, 1, 220, 88, 162, 68, 117, 5, 
+    220, 88, 147, 212, 65, 68, 25, 5, 220, 88, 255, 82, 68, 25, 5, 220, 88, 
+    76, 68, 25, 5, 220, 88, 160, 48, 68, 25, 5, 220, 88, 40, 211, 117, 68, 5, 
+    220, 88, 216, 29, 68, 5, 220, 88, 216, 28, 68, 5, 220, 88, 216, 26, 68, 
+    5, 220, 88, 216, 25, 68, 5, 220, 88, 249, 160, 216, 29, 68, 5, 220, 88, 
+    249, 160, 216, 28, 68, 5, 220, 88, 249, 160, 245, 161, 216, 31, 68, 1, 
+    222, 130, 226, 67, 244, 204, 68, 5, 222, 130, 226, 67, 216, 26, 68, 220, 
+    88, 21, 210, 86, 68, 220, 88, 21, 111, 68, 220, 88, 21, 105, 68, 220, 88, 
+    21, 158, 68, 220, 88, 21, 161, 68, 220, 88, 21, 190, 68, 220, 88, 21, 
+    195, 68, 220, 88, 21, 199, 68, 220, 88, 21, 196, 68, 220, 88, 21, 201, 
+    68, 5, 234, 132, 216, 30, 68, 5, 234, 132, 216, 28, 68, 25, 5, 254, 199, 
+    61, 68, 25, 5, 254, 199, 254, 210, 68, 16, 220, 88, 111, 68, 16, 220, 88, 
+    245, 38, 98, 6, 1, 254, 131, 98, 6, 1, 252, 160, 98, 6, 1, 243, 113, 98, 
+    6, 1, 247, 136, 98, 6, 1, 245, 158, 98, 6, 1, 213, 160, 98, 6, 1, 210, 
+    89, 98, 6, 1, 217, 61, 98, 6, 1, 236, 6, 98, 6, 1, 234, 240, 98, 6, 1, 
+    233, 87, 98, 6, 1, 231, 190, 98, 6, 1, 229, 200, 98, 6, 1, 226, 200, 98, 
+    6, 1, 226, 21, 98, 6, 1, 210, 78, 98, 6, 1, 223, 174, 98, 6, 1, 221, 245, 
+    98, 6, 1, 217, 51, 98, 6, 1, 214, 190, 98, 6, 1, 225, 143, 98, 6, 1, 234, 
+    127, 98, 6, 1, 242, 248, 98, 6, 1, 224, 76, 98, 6, 1, 220, 22, 98, 6, 1, 
+    250, 105, 98, 6, 1, 251, 15, 98, 6, 1, 235, 106, 98, 6, 1, 250, 48, 98, 
+    6, 1, 250, 151, 98, 6, 1, 211, 163, 98, 6, 1, 235, 117, 98, 6, 1, 242, 
+    50, 98, 6, 1, 241, 245, 98, 6, 1, 241, 182, 98, 6, 1, 212, 22, 98, 6, 1, 
+    242, 11, 98, 6, 1, 241, 72, 98, 6, 1, 210, 246, 98, 6, 1, 254, 241, 98, 
+    1, 254, 131, 98, 1, 252, 160, 98, 1, 243, 113, 98, 1, 247, 136, 98, 1, 
+    245, 158, 98, 1, 213, 160, 98, 1, 210, 89, 98, 1, 217, 61, 98, 1, 236, 6, 
+    98, 1, 234, 240, 98, 1, 233, 87, 98, 1, 231, 190, 98, 1, 229, 200, 98, 1, 
+    226, 200, 98, 1, 226, 21, 98, 1, 210, 78, 98, 1, 223, 174, 98, 1, 221, 
+    245, 98, 1, 217, 51, 98, 1, 214, 190, 98, 1, 225, 143, 98, 1, 234, 127, 
+    98, 1, 242, 248, 98, 1, 224, 76, 98, 1, 220, 22, 98, 1, 250, 105, 98, 1, 
+    251, 15, 98, 1, 235, 106, 98, 1, 250, 48, 98, 1, 250, 151, 98, 1, 211, 
+    163, 98, 1, 235, 117, 98, 1, 242, 50, 98, 1, 241, 245, 98, 1, 241, 182, 
+    98, 1, 212, 22, 98, 1, 242, 11, 98, 1, 241, 72, 98, 1, 244, 129, 98, 1, 
+    210, 246, 98, 1, 245, 173, 98, 1, 215, 94, 243, 113, 98, 1, 254, 205, 98, 
+    226, 19, 220, 139, 58, 1, 98, 229, 200, 98, 1, 254, 241, 98, 1, 242, 10, 
+    50, 98, 1, 233, 133, 50, 24, 100, 234, 64, 24, 100, 218, 217, 24, 100, 
+    228, 231, 24, 100, 216, 102, 24, 100, 218, 206, 24, 100, 223, 29, 24, 
+    100, 230, 222, 24, 100, 225, 98, 24, 100, 218, 214, 24, 100, 219, 150, 
+    24, 100, 218, 211, 24, 100, 236, 63, 24, 100, 250, 54, 24, 100, 218, 221, 
+    24, 100, 250, 114, 24, 100, 234, 116, 24, 100, 216, 174, 24, 100, 225, 
+    134, 24, 100, 241, 179, 24, 100, 228, 227, 24, 100, 218, 215, 24, 100, 
+    228, 221, 24, 100, 228, 225, 24, 100, 216, 99, 24, 100, 223, 17, 24, 100, 
+    218, 213, 24, 100, 223, 27, 24, 100, 234, 224, 24, 100, 230, 215, 24, 
+    100, 234, 227, 24, 100, 225, 93, 24, 100, 225, 91, 24, 100, 225, 79, 24, 
+    100, 225, 87, 24, 100, 225, 85, 24, 100, 225, 82, 24, 100, 225, 84, 24, 
+    100, 225, 81, 24, 100, 225, 86, 24, 100, 225, 96, 24, 100, 225, 97, 24, 
+    100, 225, 80, 24, 100, 225, 90, 24, 100, 234, 225, 24, 100, 234, 223, 24, 
+    100, 219, 143, 24, 100, 219, 141, 24, 100, 219, 133, 24, 100, 219, 136, 
+    24, 100, 219, 142, 24, 100, 219, 138, 24, 100, 219, 137, 24, 100, 219, 
+    135, 24, 100, 219, 146, 24, 100, 219, 148, 24, 100, 219, 149, 24, 100, 
+    219, 144, 24, 100, 219, 134, 24, 100, 219, 139, 24, 100, 219, 147, 24, 
+    100, 250, 98, 24, 100, 250, 96, 24, 100, 250, 176, 24, 100, 250, 174, 24, 
+    100, 226, 36, 24, 100, 236, 58, 24, 100, 236, 49, 24, 100, 236, 57, 24, 
+    100, 236, 54, 24, 100, 236, 52, 24, 100, 236, 56, 24, 100, 218, 218, 24, 
+    100, 236, 61, 24, 100, 236, 62, 24, 100, 236, 50, 24, 100, 236, 55, 24, 
+    100, 211, 26, 24, 100, 250, 53, 24, 100, 250, 99, 24, 100, 250, 97, 24, 
+    100, 250, 177, 24, 100, 250, 175, 24, 100, 250, 112, 24, 100, 250, 113, 
+    24, 100, 250, 100, 24, 100, 250, 178, 24, 100, 225, 132, 24, 100, 234, 
+    226, 24, 100, 218, 219, 24, 100, 211, 32, 24, 100, 234, 55, 24, 100, 228, 
+    223, 24, 100, 228, 229, 24, 100, 228, 228, 24, 100, 216, 96, 24, 100, 
+    244, 111, 24, 143, 244, 111, 24, 143, 61, 24, 143, 254, 252, 24, 143, 
+    192, 24, 143, 211, 92, 24, 143, 245, 125, 24, 143, 76, 24, 143, 211, 36, 
+    24, 143, 211, 47, 24, 143, 78, 24, 143, 212, 65, 24, 143, 212, 62, 24, 
+    143, 226, 238, 24, 143, 210, 244, 24, 143, 69, 24, 143, 212, 11, 24, 143, 
+    212, 22, 24, 143, 211, 250, 24, 143, 210, 212, 24, 143, 245, 63, 24, 143, 
+    211, 8, 24, 143, 74, 24, 143, 255, 166, 24, 143, 255, 165, 24, 143, 211, 
+    106, 24, 143, 211, 104, 24, 143, 245, 123, 24, 143, 245, 122, 24, 143, 
+    245, 124, 24, 143, 211, 35, 24, 143, 211, 34, 24, 143, 227, 88, 24, 143, 
+    227, 89, 24, 143, 227, 82, 24, 143, 227, 87, 24, 143, 227, 85, 24, 143, 
     210, 238, 24, 143, 210, 237, 24, 143, 210, 236, 24, 143, 210, 239, 24, 
     143, 210, 240, 24, 143, 215, 30, 24, 143, 215, 29, 24, 143, 215, 27, 24, 
     143, 215, 24, 24, 143, 215, 25, 24, 143, 210, 211, 24, 143, 210, 208, 24, 
     143, 210, 209, 24, 143, 210, 203, 24, 143, 210, 204, 24, 143, 210, 205, 
-    24, 143, 210, 207, 24, 143, 245, 50, 24, 143, 245, 52, 24, 143, 211, 7, 
-    24, 143, 240, 154, 24, 143, 240, 146, 24, 143, 240, 149, 24, 143, 240, 
-    147, 24, 143, 240, 151, 24, 143, 240, 153, 24, 143, 254, 35, 24, 143, 
-    254, 32, 24, 143, 254, 30, 24, 143, 254, 31, 24, 143, 218, 221, 24, 143, 
-    255, 159, 24, 143, 211, 105, 24, 143, 211, 33, 24, 143, 227, 81, 24, 143, 
-    227, 80, 24, 90, 234, 59, 24, 90, 218, 216, 24, 90, 234, 52, 24, 90, 228, 
-    227, 24, 90, 228, 225, 24, 90, 228, 224, 24, 90, 216, 102, 24, 90, 223, 
-    27, 24, 90, 223, 22, 24, 90, 223, 19, 24, 90, 223, 12, 24, 90, 223, 7, 
-    24, 90, 223, 2, 24, 90, 223, 13, 24, 90, 223, 25, 24, 90, 230, 218, 24, 
-    90, 225, 96, 24, 90, 225, 85, 24, 90, 219, 149, 24, 90, 218, 210, 24, 90, 
-    236, 57, 24, 90, 250, 47, 24, 90, 250, 107, 24, 90, 234, 111, 24, 90, 
-    216, 174, 24, 90, 225, 132, 24, 90, 241, 173, 24, 90, 234, 53, 24, 90, 
-    234, 51, 24, 90, 228, 223, 24, 90, 228, 217, 24, 90, 228, 219, 24, 90, 
-    228, 222, 24, 90, 228, 218, 24, 90, 216, 99, 24, 90, 216, 96, 24, 90, 
-    223, 20, 24, 90, 223, 15, 24, 90, 223, 1, 24, 90, 223, 0, 24, 90, 218, 
-    212, 24, 90, 223, 17, 24, 90, 223, 16, 24, 90, 223, 9, 24, 90, 223, 11, 
-    24, 90, 223, 24, 24, 90, 223, 4, 24, 90, 223, 14, 24, 90, 223, 23, 24, 
-    90, 222, 255, 24, 90, 230, 214, 24, 90, 230, 209, 24, 90, 230, 211, 24, 
-    90, 230, 208, 24, 90, 230, 206, 24, 90, 230, 212, 24, 90, 230, 217, 24, 
-    90, 230, 215, 24, 90, 234, 222, 24, 90, 225, 87, 24, 90, 225, 88, 24, 90, 
-    225, 93, 24, 90, 234, 220, 24, 90, 219, 142, 24, 90, 219, 132, 24, 90, 
-    219, 135, 24, 90, 219, 137, 24, 90, 226, 33, 24, 90, 236, 52, 24, 90, 
-    236, 45, 24, 90, 218, 217, 24, 90, 236, 53, 24, 90, 211, 26, 24, 90, 211, 
-    22, 24, 90, 211, 23, 24, 90, 225, 130, 24, 90, 234, 221, 24, 90, 241, 
-    171, 24, 90, 241, 169, 24, 90, 241, 172, 24, 90, 241, 170, 24, 90, 211, 
-    32, 24, 90, 234, 55, 24, 90, 234, 54, 24, 90, 234, 58, 24, 90, 234, 56, 
-    24, 90, 234, 57, 24, 90, 218, 214, 29, 3, 162, 29, 3, 240, 223, 29, 3, 
-    241, 181, 29, 3, 242, 47, 29, 3, 241, 221, 29, 3, 241, 239, 29, 3, 241, 
-    69, 29, 3, 241, 68, 29, 3, 233, 136, 29, 3, 232, 99, 29, 3, 232, 242, 29, 
-    3, 233, 135, 29, 3, 233, 51, 29, 3, 233, 59, 29, 3, 232, 157, 29, 3, 232, 
-    71, 29, 3, 241, 190, 29, 3, 241, 184, 29, 3, 241, 186, 29, 3, 241, 189, 
-    29, 3, 241, 187, 29, 3, 241, 188, 29, 3, 241, 185, 29, 3, 241, 183, 29, 
-    3, 185, 29, 3, 230, 103, 29, 3, 230, 231, 29, 3, 231, 238, 29, 3, 231, 
-    81, 29, 3, 231, 92, 29, 3, 230, 162, 29, 3, 230, 43, 29, 3, 217, 164, 29, 
-    3, 217, 158, 29, 3, 217, 160, 29, 3, 217, 163, 29, 3, 217, 161, 29, 3, 
-    217, 162, 29, 3, 217, 159, 29, 3, 217, 157, 29, 3, 205, 29, 3, 222, 141, 
-    29, 3, 223, 36, 29, 3, 223, 185, 29, 3, 223, 109, 29, 3, 223, 129, 29, 3, 
-    222, 212, 29, 3, 222, 110, 29, 3, 206, 29, 3, 218, 84, 29, 3, 219, 192, 
-    29, 3, 222, 32, 29, 3, 221, 171, 29, 3, 221, 182, 29, 3, 219, 59, 29, 3, 
-    217, 254, 29, 3, 220, 103, 29, 3, 219, 226, 29, 3, 220, 33, 29, 3, 220, 
-    99, 29, 3, 220, 62, 29, 3, 220, 64, 29, 3, 220, 8, 29, 3, 219, 209, 29, 
-    3, 224, 89, 29, 3, 224, 31, 29, 3, 224, 54, 29, 3, 224, 88, 29, 3, 224, 
-    69, 29, 3, 224, 70, 29, 3, 224, 43, 29, 3, 224, 42, 29, 3, 223, 243, 29, 
-    3, 223, 239, 29, 3, 223, 242, 29, 3, 223, 240, 29, 3, 223, 241, 29, 3, 
-    224, 66, 29, 3, 224, 60, 29, 3, 224, 62, 29, 3, 224, 65, 29, 3, 224, 63, 
-    29, 3, 224, 64, 29, 3, 224, 61, 29, 3, 224, 59, 29, 3, 224, 55, 29, 3, 
-    224, 58, 29, 3, 224, 56, 29, 3, 224, 57, 29, 3, 252, 192, 29, 3, 251, 
-    126, 29, 3, 252, 7, 29, 3, 252, 190, 29, 3, 252, 67, 29, 3, 252, 76, 29, 
-    3, 251, 206, 29, 3, 251, 84, 29, 3, 214, 27, 29, 3, 212, 116, 29, 3, 213, 
-    176, 29, 3, 214, 26, 29, 3, 213, 250, 29, 3, 213, 255, 29, 3, 213, 138, 
-    29, 3, 212, 107, 29, 3, 217, 106, 29, 3, 215, 119, 29, 3, 216, 118, 29, 
-    3, 217, 102, 29, 3, 217, 12, 29, 3, 217, 23, 29, 3, 111, 29, 3, 215, 80, 
-    29, 3, 251, 34, 29, 3, 249, 113, 29, 3, 250, 52, 29, 3, 251, 33, 29, 3, 
-    250, 183, 29, 3, 250, 191, 29, 3, 249, 239, 29, 3, 249, 82, 29, 3, 211, 
-    165, 29, 3, 211, 141, 29, 3, 211, 157, 29, 3, 211, 164, 29, 3, 211, 161, 
-    29, 3, 211, 162, 29, 3, 211, 148, 29, 3, 211, 147, 29, 3, 211, 136, 29, 
-    3, 211, 132, 29, 3, 211, 135, 29, 3, 211, 133, 29, 3, 211, 134, 29, 3, 
-    197, 29, 3, 227, 238, 29, 3, 228, 234, 29, 3, 229, 226, 29, 3, 229, 104, 
-    29, 3, 229, 108, 29, 3, 228, 75, 29, 3, 227, 175, 29, 3, 227, 166, 29, 3, 
-    227, 129, 29, 3, 227, 149, 29, 3, 227, 165, 29, 3, 227, 156, 29, 3, 227, 
-    157, 29, 3, 227, 135, 29, 3, 227, 120, 29, 3, 242, 181, 61, 29, 3, 242, 
-    181, 70, 29, 3, 242, 181, 73, 29, 3, 242, 181, 255, 74, 29, 3, 242, 181, 
-    245, 210, 29, 3, 242, 181, 75, 29, 3, 242, 181, 76, 29, 3, 242, 181, 212, 
-    65, 29, 3, 176, 29, 3, 233, 218, 29, 3, 234, 93, 29, 3, 235, 11, 29, 3, 
-    234, 182, 29, 3, 234, 183, 29, 3, 234, 29, 29, 3, 234, 28, 29, 3, 233, 
-    183, 29, 3, 233, 177, 29, 3, 233, 182, 29, 3, 233, 178, 29, 3, 233, 179, 
-    29, 3, 233, 172, 29, 3, 233, 166, 29, 3, 233, 168, 29, 3, 233, 171, 29, 
-    3, 233, 169, 29, 3, 233, 170, 29, 3, 233, 167, 29, 3, 233, 165, 29, 3, 
-    233, 161, 29, 3, 233, 164, 29, 3, 233, 162, 29, 3, 233, 163, 29, 3, 212, 
-    65, 29, 3, 211, 195, 29, 3, 211, 250, 29, 3, 212, 64, 29, 3, 212, 17, 29, 
-    3, 212, 22, 29, 3, 211, 227, 29, 3, 211, 226, 29, 3, 225, 140, 61, 29, 3, 
-    225, 140, 70, 29, 3, 225, 140, 73, 29, 3, 225, 140, 255, 74, 29, 3, 225, 
-    140, 245, 210, 29, 3, 225, 140, 75, 29, 3, 225, 140, 76, 29, 3, 210, 116, 
-    29, 3, 210, 13, 29, 3, 210, 44, 29, 3, 210, 115, 29, 3, 210, 92, 29, 3, 
-    210, 94, 29, 3, 210, 23, 29, 3, 210, 0, 29, 3, 210, 82, 29, 3, 210, 62, 
-    29, 3, 210, 69, 29, 3, 210, 81, 29, 3, 210, 73, 29, 3, 210, 74, 29, 3, 
-    210, 67, 29, 3, 210, 53, 29, 3, 191, 29, 3, 210, 212, 29, 3, 211, 8, 29, 
-    3, 211, 103, 29, 3, 211, 44, 29, 3, 211, 47, 29, 3, 210, 244, 29, 3, 210, 
-    235, 29, 3, 248, 222, 29, 3, 246, 79, 29, 3, 248, 4, 29, 3, 248, 221, 29, 
-    3, 248, 78, 29, 3, 248, 91, 29, 3, 247, 146, 29, 3, 246, 48, 29, 3, 248, 
-    136, 29, 3, 248, 101, 29, 3, 248, 113, 29, 3, 248, 135, 29, 3, 248, 123, 
-    29, 3, 248, 124, 29, 3, 248, 106, 29, 3, 248, 92, 29, 3, 235, 142, 29, 3, 
-    235, 52, 29, 3, 235, 109, 29, 3, 235, 141, 29, 3, 235, 125, 29, 3, 235, 
-    127, 29, 3, 235, 69, 29, 3, 235, 32, 29, 3, 243, 136, 29, 3, 242, 114, 
-    29, 3, 242, 215, 29, 3, 243, 133, 29, 3, 243, 56, 29, 3, 243, 63, 29, 3, 
-    242, 175, 29, 3, 242, 174, 29, 3, 242, 79, 29, 3, 242, 75, 29, 3, 242, 
-    78, 29, 3, 242, 76, 29, 3, 242, 77, 29, 3, 243, 30, 29, 3, 243, 10, 29, 
-    3, 243, 20, 29, 3, 243, 29, 29, 3, 243, 24, 29, 3, 243, 25, 29, 3, 243, 
-    14, 29, 3, 242, 255, 29, 3, 216, 209, 29, 3, 216, 137, 29, 3, 216, 176, 
-    29, 3, 216, 208, 29, 3, 216, 195, 29, 3, 216, 196, 29, 3, 216, 157, 29, 
-    3, 216, 129, 29, 3, 250, 158, 29, 3, 250, 70, 29, 3, 250, 111, 29, 3, 
-    250, 157, 29, 3, 250, 129, 29, 3, 250, 132, 29, 3, 250, 87, 29, 3, 250, 
-    59, 29, 3, 225, 148, 29, 3, 225, 115, 29, 3, 225, 134, 29, 3, 225, 147, 
-    29, 3, 225, 136, 29, 3, 225, 137, 29, 3, 225, 122, 29, 3, 225, 111, 29, 
+    24, 143, 210, 207, 24, 143, 245, 57, 24, 143, 245, 59, 24, 143, 211, 7, 
+    24, 143, 240, 160, 24, 143, 240, 152, 24, 143, 240, 155, 24, 143, 240, 
+    153, 24, 143, 240, 157, 24, 143, 240, 159, 24, 143, 254, 42, 24, 143, 
+    254, 39, 24, 143, 254, 37, 24, 143, 254, 38, 24, 143, 218, 222, 24, 143, 
+    255, 167, 24, 143, 211, 105, 24, 143, 211, 33, 24, 143, 227, 84, 24, 143, 
+    227, 83, 24, 90, 234, 64, 24, 90, 218, 217, 24, 90, 234, 57, 24, 90, 228, 
+    231, 24, 90, 228, 229, 24, 90, 228, 228, 24, 90, 216, 102, 24, 90, 223, 
+    29, 24, 90, 223, 24, 24, 90, 223, 21, 24, 90, 223, 14, 24, 90, 223, 9, 
+    24, 90, 223, 4, 24, 90, 223, 15, 24, 90, 223, 27, 24, 90, 230, 222, 24, 
+    90, 225, 98, 24, 90, 225, 87, 24, 90, 219, 150, 24, 90, 218, 211, 24, 90, 
+    236, 63, 24, 90, 250, 54, 24, 90, 250, 114, 24, 90, 234, 116, 24, 90, 
+    216, 174, 24, 90, 225, 134, 24, 90, 241, 179, 24, 90, 234, 58, 24, 90, 
+    234, 56, 24, 90, 228, 227, 24, 90, 228, 221, 24, 90, 228, 223, 24, 90, 
+    228, 226, 24, 90, 228, 222, 24, 90, 216, 99, 24, 90, 216, 96, 24, 90, 
+    223, 22, 24, 90, 223, 17, 24, 90, 223, 3, 24, 90, 223, 2, 24, 90, 218, 
+    213, 24, 90, 223, 19, 24, 90, 223, 18, 24, 90, 223, 11, 24, 90, 223, 13, 
+    24, 90, 223, 26, 24, 90, 223, 6, 24, 90, 223, 16, 24, 90, 223, 25, 24, 
+    90, 223, 1, 24, 90, 230, 218, 24, 90, 230, 213, 24, 90, 230, 215, 24, 90, 
+    230, 212, 24, 90, 230, 210, 24, 90, 230, 216, 24, 90, 230, 221, 24, 90, 
+    230, 219, 24, 90, 234, 227, 24, 90, 225, 89, 24, 90, 225, 90, 24, 90, 
+    225, 95, 24, 90, 234, 225, 24, 90, 219, 143, 24, 90, 219, 133, 24, 90, 
+    219, 136, 24, 90, 219, 138, 24, 90, 226, 36, 24, 90, 236, 58, 24, 90, 
+    236, 51, 24, 90, 218, 218, 24, 90, 236, 59, 24, 90, 211, 26, 24, 90, 211, 
+    22, 24, 90, 211, 23, 24, 90, 225, 132, 24, 90, 234, 226, 24, 90, 241, 
+    177, 24, 90, 241, 175, 24, 90, 241, 178, 24, 90, 241, 176, 24, 90, 211, 
+    32, 24, 90, 234, 60, 24, 90, 234, 59, 24, 90, 234, 63, 24, 90, 234, 61, 
+    24, 90, 234, 62, 24, 90, 218, 215, 29, 3, 162, 29, 3, 240, 229, 29, 3, 
+    241, 187, 29, 3, 242, 53, 29, 3, 241, 227, 29, 3, 241, 245, 29, 3, 241, 
+    75, 29, 3, 241, 74, 29, 3, 233, 141, 29, 3, 232, 103, 29, 3, 232, 247, 
+    29, 3, 233, 140, 29, 3, 233, 56, 29, 3, 233, 64, 29, 3, 232, 162, 29, 3, 
+    232, 75, 29, 3, 241, 196, 29, 3, 241, 190, 29, 3, 241, 192, 29, 3, 241, 
+    195, 29, 3, 241, 193, 29, 3, 241, 194, 29, 3, 241, 191, 29, 3, 241, 189, 
+    29, 3, 186, 29, 3, 230, 107, 29, 3, 230, 235, 29, 3, 231, 242, 29, 3, 
+    231, 85, 29, 3, 231, 96, 29, 3, 230, 166, 29, 3, 230, 47, 29, 3, 217, 
+    164, 29, 3, 217, 158, 29, 3, 217, 160, 29, 3, 217, 163, 29, 3, 217, 161, 
+    29, 3, 217, 162, 29, 3, 217, 159, 29, 3, 217, 157, 29, 3, 205, 29, 3, 
+    222, 142, 29, 3, 223, 38, 29, 3, 223, 187, 29, 3, 223, 111, 29, 3, 223, 
+    131, 29, 3, 222, 213, 29, 3, 222, 111, 29, 3, 206, 29, 3, 218, 84, 29, 3, 
+    219, 193, 29, 3, 222, 33, 29, 3, 221, 172, 29, 3, 221, 183, 29, 3, 219, 
+    60, 29, 3, 217, 254, 29, 3, 220, 104, 29, 3, 219, 227, 29, 3, 220, 34, 
+    29, 3, 220, 100, 29, 3, 220, 63, 29, 3, 220, 65, 29, 3, 220, 9, 29, 3, 
+    219, 210, 29, 3, 224, 91, 29, 3, 224, 33, 29, 3, 224, 56, 29, 3, 224, 90, 
+    29, 3, 224, 71, 29, 3, 224, 72, 29, 3, 224, 45, 29, 3, 224, 44, 29, 3, 
+    223, 245, 29, 3, 223, 241, 29, 3, 223, 244, 29, 3, 223, 242, 29, 3, 223, 
+    243, 29, 3, 224, 68, 29, 3, 224, 62, 29, 3, 224, 64, 29, 3, 224, 67, 29, 
+    3, 224, 65, 29, 3, 224, 66, 29, 3, 224, 63, 29, 3, 224, 61, 29, 3, 224, 
+    57, 29, 3, 224, 60, 29, 3, 224, 58, 29, 3, 224, 59, 29, 3, 252, 199, 29, 
+    3, 251, 133, 29, 3, 252, 14, 29, 3, 252, 197, 29, 3, 252, 74, 29, 3, 252, 
+    83, 29, 3, 251, 213, 29, 3, 251, 91, 29, 3, 214, 27, 29, 3, 212, 116, 29, 
+    3, 213, 176, 29, 3, 214, 26, 29, 3, 213, 250, 29, 3, 213, 255, 29, 3, 
+    213, 138, 29, 3, 212, 107, 29, 3, 217, 106, 29, 3, 215, 119, 29, 3, 216, 
+    118, 29, 3, 217, 102, 29, 3, 217, 12, 29, 3, 217, 23, 29, 3, 112, 29, 3, 
+    215, 80, 29, 3, 251, 41, 29, 3, 249, 120, 29, 3, 250, 59, 29, 3, 251, 40, 
+    29, 3, 250, 190, 29, 3, 250, 198, 29, 3, 249, 246, 29, 3, 249, 89, 29, 3, 
+    211, 165, 29, 3, 211, 141, 29, 3, 211, 157, 29, 3, 211, 164, 29, 3, 211, 
+    161, 29, 3, 211, 162, 29, 3, 211, 148, 29, 3, 211, 147, 29, 3, 211, 136, 
+    29, 3, 211, 132, 29, 3, 211, 135, 29, 3, 211, 133, 29, 3, 211, 134, 29, 
+    3, 198, 29, 3, 227, 242, 29, 3, 228, 238, 29, 3, 229, 230, 29, 3, 229, 
+    108, 29, 3, 229, 112, 29, 3, 228, 79, 29, 3, 227, 178, 29, 3, 227, 169, 
+    29, 3, 227, 132, 29, 3, 227, 152, 29, 3, 227, 168, 29, 3, 227, 159, 29, 
+    3, 227, 160, 29, 3, 227, 138, 29, 3, 227, 123, 29, 3, 242, 187, 61, 29, 
+    3, 242, 187, 69, 29, 3, 242, 187, 74, 29, 3, 242, 187, 255, 82, 29, 3, 
+    242, 187, 245, 217, 29, 3, 242, 187, 76, 29, 3, 242, 187, 78, 29, 3, 242, 
+    187, 212, 65, 29, 3, 176, 29, 3, 233, 223, 29, 3, 234, 98, 29, 3, 235, 
+    16, 29, 3, 234, 187, 29, 3, 234, 188, 29, 3, 234, 34, 29, 3, 234, 33, 29, 
+    3, 233, 188, 29, 3, 233, 182, 29, 3, 233, 187, 29, 3, 233, 183, 29, 3, 
+    233, 184, 29, 3, 233, 177, 29, 3, 233, 171, 29, 3, 233, 173, 29, 3, 233, 
+    176, 29, 3, 233, 174, 29, 3, 233, 175, 29, 3, 233, 172, 29, 3, 233, 170, 
+    29, 3, 233, 166, 29, 3, 233, 169, 29, 3, 233, 167, 29, 3, 233, 168, 29, 
+    3, 212, 65, 29, 3, 211, 195, 29, 3, 211, 250, 29, 3, 212, 64, 29, 3, 212, 
+    17, 29, 3, 212, 22, 29, 3, 211, 227, 29, 3, 211, 226, 29, 3, 225, 142, 
+    61, 29, 3, 225, 142, 69, 29, 3, 225, 142, 74, 29, 3, 225, 142, 255, 82, 
+    29, 3, 225, 142, 245, 217, 29, 3, 225, 142, 76, 29, 3, 225, 142, 78, 29, 
+    3, 210, 116, 29, 3, 210, 13, 29, 3, 210, 44, 29, 3, 210, 115, 29, 3, 210, 
+    92, 29, 3, 210, 94, 29, 3, 210, 23, 29, 3, 210, 0, 29, 3, 210, 82, 29, 3, 
+    210, 62, 29, 3, 210, 69, 29, 3, 210, 81, 29, 3, 210, 73, 29, 3, 210, 74, 
+    29, 3, 210, 67, 29, 3, 210, 53, 29, 3, 192, 29, 3, 210, 212, 29, 3, 211, 
+    8, 29, 3, 211, 103, 29, 3, 211, 44, 29, 3, 211, 47, 29, 3, 210, 244, 29, 
+    3, 210, 235, 29, 3, 248, 229, 29, 3, 246, 86, 29, 3, 248, 11, 29, 3, 248, 
+    228, 29, 3, 248, 85, 29, 3, 248, 98, 29, 3, 247, 153, 29, 3, 246, 55, 29, 
+    3, 248, 143, 29, 3, 248, 108, 29, 3, 248, 120, 29, 3, 248, 142, 29, 3, 
+    248, 130, 29, 3, 248, 131, 29, 3, 248, 113, 29, 3, 248, 99, 29, 3, 235, 
+    147, 29, 3, 235, 57, 29, 3, 235, 114, 29, 3, 235, 146, 29, 3, 235, 130, 
+    29, 3, 235, 132, 29, 3, 235, 74, 29, 3, 235, 37, 29, 3, 243, 142, 29, 3, 
+    242, 120, 29, 3, 242, 221, 29, 3, 243, 139, 29, 3, 243, 62, 29, 3, 243, 
+    69, 29, 3, 242, 181, 29, 3, 242, 180, 29, 3, 242, 85, 29, 3, 242, 81, 29, 
+    3, 242, 84, 29, 3, 242, 82, 29, 3, 242, 83, 29, 3, 243, 36, 29, 3, 243, 
+    16, 29, 3, 243, 26, 29, 3, 243, 35, 29, 3, 243, 30, 29, 3, 243, 31, 29, 
+    3, 243, 20, 29, 3, 243, 5, 29, 3, 216, 209, 29, 3, 216, 137, 29, 3, 216, 
+    176, 29, 3, 216, 208, 29, 3, 216, 195, 29, 3, 216, 196, 29, 3, 216, 157, 
+    29, 3, 216, 129, 29, 3, 250, 165, 29, 3, 250, 77, 29, 3, 250, 118, 29, 3, 
+    250, 164, 29, 3, 250, 136, 29, 3, 250, 139, 29, 3, 250, 94, 29, 3, 250, 
+    66, 29, 3, 225, 150, 29, 3, 225, 117, 29, 3, 225, 136, 29, 3, 225, 149, 
+    29, 3, 225, 138, 29, 3, 225, 139, 29, 3, 225, 124, 29, 3, 225, 113, 29, 
     3, 215, 184, 29, 3, 215, 164, 29, 3, 215, 168, 29, 3, 215, 183, 29, 3, 
     215, 178, 29, 3, 215, 179, 29, 3, 215, 167, 29, 3, 215, 162, 29, 3, 215, 
     39, 29, 3, 215, 31, 29, 3, 215, 35, 29, 3, 215, 38, 29, 3, 215, 36, 29, 
-    3, 215, 37, 29, 3, 215, 33, 29, 3, 215, 32, 29, 3, 244, 197, 29, 3, 243, 
-    235, 29, 3, 244, 122, 29, 3, 244, 196, 29, 3, 244, 148, 29, 3, 244, 155, 
-    29, 3, 244, 44, 29, 3, 243, 214, 29, 3, 190, 29, 3, 224, 151, 29, 3, 225, 
-    109, 29, 3, 226, 90, 29, 3, 225, 212, 29, 3, 225, 222, 29, 3, 225, 17, 
-    29, 3, 224, 115, 29, 3, 222, 100, 29, 3, 230, 32, 29, 3, 243, 208, 29, 
-    38, 243, 54, 22, 25, 233, 24, 78, 29, 38, 25, 233, 24, 78, 29, 38, 243, 
-    54, 78, 29, 221, 174, 78, 29, 211, 208, 29, 243, 230, 218, 130, 29, 249, 
-    220, 29, 220, 151, 29, 249, 227, 29, 224, 200, 249, 227, 29, 224, 14, 78, 
-    29, 226, 16, 220, 138, 29, 21, 110, 29, 21, 105, 29, 21, 158, 29, 21, 
-    161, 29, 21, 189, 29, 21, 194, 29, 21, 198, 29, 21, 195, 29, 21, 200, 29, 
-    54, 216, 248, 29, 54, 215, 73, 29, 54, 216, 163, 29, 54, 244, 16, 29, 54, 
-    244, 115, 29, 54, 219, 112, 29, 54, 220, 117, 29, 54, 245, 185, 29, 54, 
-    228, 196, 29, 54, 240, 211, 29, 54, 216, 249, 216, 148, 29, 3, 221, 178, 
-    230, 43, 29, 3, 230, 39, 29, 3, 230, 40, 29, 3, 230, 41, 29, 3, 221, 178, 
-    251, 84, 29, 3, 251, 81, 29, 3, 251, 82, 29, 3, 251, 83, 29, 3, 221, 178, 
-    243, 214, 29, 3, 243, 210, 29, 3, 243, 211, 29, 3, 243, 212, 29, 3, 221, 
-    178, 224, 115, 29, 3, 224, 111, 29, 3, 224, 112, 29, 3, 224, 113, 29, 
-    216, 32, 164, 210, 247, 29, 216, 32, 164, 248, 42, 29, 216, 32, 164, 222, 
-    239, 29, 216, 32, 164, 219, 252, 222, 239, 29, 216, 32, 164, 247, 236, 
-    29, 216, 32, 164, 234, 165, 29, 216, 32, 164, 250, 95, 29, 216, 32, 164, 
-    241, 178, 29, 216, 32, 164, 248, 41, 29, 216, 32, 164, 233, 195, 169, 1, 
-    61, 169, 1, 75, 169, 1, 73, 169, 1, 76, 169, 1, 70, 169, 1, 214, 105, 
-    169, 1, 243, 136, 169, 1, 176, 169, 1, 243, 63, 169, 1, 242, 215, 169, 1, 
-    242, 175, 169, 1, 242, 114, 169, 1, 242, 80, 169, 1, 162, 169, 1, 241, 
-    239, 169, 1, 241, 181, 169, 1, 241, 69, 169, 1, 240, 223, 169, 1, 240, 
-    202, 169, 1, 233, 136, 169, 1, 233, 59, 169, 1, 232, 242, 169, 1, 232, 
-    157, 169, 1, 232, 99, 169, 1, 232, 72, 169, 1, 185, 169, 1, 231, 92, 169, 
-    1, 230, 231, 169, 1, 230, 162, 169, 1, 230, 103, 169, 1, 197, 169, 1, 
-    241, 91, 169, 1, 229, 214, 169, 1, 229, 108, 169, 1, 228, 234, 169, 1, 
-    228, 75, 169, 1, 227, 238, 169, 1, 227, 177, 169, 1, 224, 30, 169, 1, 
-    224, 17, 169, 1, 224, 10, 169, 1, 224, 2, 169, 1, 223, 247, 169, 1, 223, 
-    245, 169, 1, 206, 169, 1, 222, 92, 169, 1, 221, 182, 169, 1, 219, 192, 
-    169, 1, 219, 59, 169, 1, 218, 84, 169, 1, 218, 3, 169, 1, 248, 222, 169, 
-    1, 217, 106, 169, 1, 248, 91, 169, 1, 217, 23, 169, 1, 248, 4, 169, 1, 
-    216, 118, 169, 1, 247, 146, 169, 1, 246, 79, 169, 1, 246, 51, 169, 1, 
-    247, 157, 169, 1, 216, 60, 169, 1, 216, 59, 169, 1, 216, 48, 169, 1, 216, 
+    3, 215, 37, 29, 3, 215, 33, 29, 3, 215, 32, 29, 3, 244, 204, 29, 3, 243, 
+    241, 29, 3, 244, 129, 29, 3, 244, 203, 29, 3, 244, 155, 29, 3, 244, 162, 
+    29, 3, 244, 51, 29, 3, 243, 220, 29, 3, 191, 29, 3, 224, 153, 29, 3, 225, 
+    111, 29, 3, 226, 93, 29, 3, 225, 214, 29, 3, 225, 224, 29, 3, 225, 19, 
+    29, 3, 224, 117, 29, 3, 222, 101, 29, 3, 230, 36, 29, 3, 243, 214, 29, 
+    38, 243, 60, 22, 25, 233, 29, 79, 29, 38, 25, 233, 29, 79, 29, 38, 243, 
+    60, 79, 29, 221, 175, 79, 29, 211, 208, 29, 243, 236, 218, 131, 29, 249, 
+    227, 29, 220, 152, 29, 249, 234, 29, 224, 202, 249, 234, 29, 224, 16, 79, 
+    29, 226, 19, 220, 139, 29, 21, 111, 29, 21, 105, 29, 21, 158, 29, 21, 
+    161, 29, 21, 190, 29, 21, 195, 29, 21, 199, 29, 21, 196, 29, 21, 201, 29, 
+    54, 216, 248, 29, 54, 215, 73, 29, 54, 216, 163, 29, 54, 244, 23, 29, 54, 
+    244, 122, 29, 54, 219, 113, 29, 54, 220, 118, 29, 54, 245, 192, 29, 54, 
+    228, 200, 29, 54, 240, 217, 29, 54, 216, 249, 216, 148, 29, 3, 221, 179, 
+    230, 47, 29, 3, 230, 43, 29, 3, 230, 44, 29, 3, 230, 45, 29, 3, 221, 179, 
+    251, 91, 29, 3, 251, 88, 29, 3, 251, 89, 29, 3, 251, 90, 29, 3, 221, 179, 
+    243, 220, 29, 3, 243, 216, 29, 3, 243, 217, 29, 3, 243, 218, 29, 3, 221, 
+    179, 224, 117, 29, 3, 224, 113, 29, 3, 224, 114, 29, 3, 224, 115, 29, 
+    216, 32, 164, 210, 247, 29, 216, 32, 164, 248, 49, 29, 216, 32, 164, 222, 
+    241, 29, 216, 32, 164, 219, 253, 222, 241, 29, 216, 32, 164, 247, 243, 
+    29, 216, 32, 164, 234, 170, 29, 216, 32, 164, 250, 102, 29, 216, 32, 164, 
+    241, 184, 29, 216, 32, 164, 248, 48, 29, 216, 32, 164, 233, 200, 169, 1, 
+    61, 169, 1, 76, 169, 1, 74, 169, 1, 78, 169, 1, 69, 169, 1, 214, 105, 
+    169, 1, 243, 142, 169, 1, 176, 169, 1, 243, 69, 169, 1, 242, 221, 169, 1, 
+    242, 181, 169, 1, 242, 120, 169, 1, 242, 86, 169, 1, 162, 169, 1, 241, 
+    245, 169, 1, 241, 187, 169, 1, 241, 75, 169, 1, 240, 229, 169, 1, 240, 
+    208, 169, 1, 233, 141, 169, 1, 233, 64, 169, 1, 232, 247, 169, 1, 232, 
+    162, 169, 1, 232, 103, 169, 1, 232, 76, 169, 1, 186, 169, 1, 231, 96, 
+    169, 1, 230, 235, 169, 1, 230, 166, 169, 1, 230, 107, 169, 1, 198, 169, 
+    1, 241, 97, 169, 1, 229, 218, 169, 1, 229, 112, 169, 1, 228, 238, 169, 1, 
+    228, 79, 169, 1, 227, 242, 169, 1, 227, 180, 169, 1, 224, 32, 169, 1, 
+    224, 19, 169, 1, 224, 12, 169, 1, 224, 4, 169, 1, 223, 249, 169, 1, 223, 
+    247, 169, 1, 206, 169, 1, 222, 93, 169, 1, 221, 183, 169, 1, 219, 193, 
+    169, 1, 219, 60, 169, 1, 218, 84, 169, 1, 218, 3, 169, 1, 248, 229, 169, 
+    1, 217, 106, 169, 1, 248, 98, 169, 1, 217, 23, 169, 1, 248, 11, 169, 1, 
+    216, 118, 169, 1, 247, 153, 169, 1, 246, 86, 169, 1, 246, 58, 169, 1, 
+    247, 164, 169, 1, 216, 60, 169, 1, 216, 59, 169, 1, 216, 48, 169, 1, 216, 
     47, 169, 1, 216, 46, 169, 1, 216, 45, 169, 1, 215, 184, 169, 1, 215, 179, 
     169, 1, 215, 168, 169, 1, 215, 167, 169, 1, 215, 164, 169, 1, 215, 163, 
     169, 1, 212, 65, 169, 1, 212, 22, 169, 1, 211, 250, 169, 1, 211, 227, 
-    169, 1, 211, 195, 169, 1, 211, 183, 169, 1, 191, 169, 1, 211, 47, 169, 1, 
+    169, 1, 211, 195, 169, 1, 211, 183, 169, 1, 192, 169, 1, 211, 47, 169, 1, 
     211, 8, 169, 1, 210, 244, 169, 1, 210, 212, 169, 1, 210, 177, 18, 19, 
-    240, 169, 18, 19, 75, 18, 19, 255, 38, 18, 19, 73, 18, 19, 236, 34, 18, 
-    19, 76, 18, 19, 226, 184, 18, 19, 211, 116, 226, 184, 18, 19, 72, 245, 
-    210, 18, 19, 72, 73, 18, 19, 61, 18, 19, 255, 74, 18, 19, 212, 22, 18, 
+    240, 175, 18, 19, 76, 18, 19, 255, 46, 18, 19, 74, 18, 19, 236, 40, 18, 
+    19, 78, 18, 19, 226, 187, 18, 19, 211, 116, 226, 187, 18, 19, 73, 245, 
+    217, 18, 19, 73, 74, 18, 19, 61, 18, 19, 255, 82, 18, 19, 212, 22, 18, 
     19, 159, 212, 22, 18, 19, 211, 250, 18, 19, 159, 211, 250, 18, 19, 211, 
     242, 18, 19, 159, 211, 242, 18, 19, 211, 227, 18, 19, 159, 211, 227, 18, 
-    19, 211, 215, 18, 19, 159, 211, 215, 18, 19, 229, 191, 211, 215, 18, 19, 
+    19, 211, 215, 18, 19, 159, 211, 215, 18, 19, 229, 195, 211, 215, 18, 19, 
     212, 65, 18, 19, 159, 212, 65, 18, 19, 212, 64, 18, 19, 159, 212, 64, 18, 
-    19, 229, 191, 212, 64, 18, 19, 254, 202, 18, 19, 211, 116, 212, 98, 18, 
-    19, 242, 181, 218, 130, 18, 19, 40, 142, 18, 19, 40, 242, 137, 18, 19, 
-    40, 251, 176, 163, 222, 234, 18, 19, 40, 216, 15, 163, 222, 234, 18, 19, 
-    40, 44, 163, 222, 234, 18, 19, 40, 222, 234, 18, 19, 40, 52, 142, 18, 19, 
-    40, 52, 219, 252, 67, 218, 91, 18, 19, 40, 230, 225, 247, 121, 18, 19, 
-    40, 219, 252, 203, 91, 18, 19, 40, 225, 23, 18, 19, 40, 124, 217, 88, 18, 
-    19, 245, 151, 18, 19, 236, 0, 18, 19, 226, 197, 18, 19, 254, 124, 18, 19, 
-    225, 222, 18, 19, 226, 88, 18, 19, 225, 109, 18, 19, 225, 72, 18, 19, 
-    225, 17, 18, 19, 224, 250, 18, 19, 211, 116, 224, 250, 18, 19, 72, 241, 
-    221, 18, 19, 72, 241, 181, 18, 19, 190, 18, 19, 226, 90, 18, 19, 224, 
-    113, 18, 19, 159, 224, 113, 18, 19, 224, 111, 18, 19, 159, 224, 111, 18, 
-    19, 224, 110, 18, 19, 159, 224, 110, 18, 19, 224, 108, 18, 19, 159, 224, 
-    108, 18, 19, 224, 107, 18, 19, 159, 224, 107, 18, 19, 224, 115, 18, 19, 
-    159, 224, 115, 18, 19, 224, 114, 18, 19, 159, 224, 114, 18, 19, 211, 116, 
-    224, 114, 18, 19, 226, 106, 18, 19, 159, 226, 106, 18, 19, 72, 242, 61, 
+    19, 229, 195, 212, 64, 18, 19, 254, 210, 18, 19, 211, 116, 212, 98, 18, 
+    19, 242, 187, 218, 131, 18, 19, 40, 142, 18, 19, 40, 242, 143, 18, 19, 
+    40, 251, 183, 163, 222, 236, 18, 19, 40, 216, 15, 163, 222, 236, 18, 19, 
+    40, 44, 163, 222, 236, 18, 19, 40, 222, 236, 18, 19, 40, 52, 142, 18, 19, 
+    40, 52, 219, 253, 67, 218, 92, 18, 19, 40, 230, 229, 247, 128, 18, 19, 
+    40, 219, 253, 203, 91, 18, 19, 40, 225, 25, 18, 19, 40, 124, 217, 88, 18, 
+    19, 245, 158, 18, 19, 236, 6, 18, 19, 226, 200, 18, 19, 254, 131, 18, 19, 
+    225, 224, 18, 19, 226, 91, 18, 19, 225, 111, 18, 19, 225, 74, 18, 19, 
+    225, 19, 18, 19, 224, 252, 18, 19, 211, 116, 224, 252, 18, 19, 73, 241, 
+    227, 18, 19, 73, 241, 187, 18, 19, 191, 18, 19, 226, 93, 18, 19, 224, 
+    115, 18, 19, 159, 224, 115, 18, 19, 224, 113, 18, 19, 159, 224, 113, 18, 
+    19, 224, 112, 18, 19, 159, 224, 112, 18, 19, 224, 110, 18, 19, 159, 224, 
+    110, 18, 19, 224, 109, 18, 19, 159, 224, 109, 18, 19, 224, 117, 18, 19, 
+    159, 224, 117, 18, 19, 224, 116, 18, 19, 159, 224, 116, 18, 19, 211, 116, 
+    224, 116, 18, 19, 226, 109, 18, 19, 159, 226, 109, 18, 19, 73, 242, 67, 
     18, 19, 217, 23, 18, 19, 217, 100, 18, 19, 216, 118, 18, 19, 216, 104, 
-    18, 19, 111, 18, 19, 216, 18, 18, 19, 211, 116, 216, 18, 18, 19, 72, 248, 
-    78, 18, 19, 72, 248, 4, 18, 19, 217, 106, 18, 19, 217, 102, 18, 19, 215, 
+    18, 19, 112, 18, 19, 216, 18, 18, 19, 211, 116, 216, 18, 18, 19, 73, 248, 
+    85, 18, 19, 73, 248, 11, 18, 19, 217, 106, 18, 19, 217, 102, 18, 19, 215, 
     78, 18, 19, 159, 215, 78, 18, 19, 215, 62, 18, 19, 159, 215, 62, 18, 19, 
     215, 61, 18, 19, 159, 215, 61, 18, 19, 105, 18, 19, 159, 105, 18, 19, 
     215, 54, 18, 19, 159, 215, 54, 18, 19, 215, 80, 18, 19, 159, 215, 80, 18, 
-    19, 215, 79, 18, 19, 159, 215, 79, 18, 19, 229, 191, 215, 79, 18, 19, 
+    19, 215, 79, 18, 19, 159, 215, 79, 18, 19, 229, 195, 215, 79, 18, 19, 
     217, 153, 18, 19, 215, 152, 18, 19, 215, 136, 18, 19, 215, 134, 18, 19, 
-    215, 157, 18, 19, 234, 183, 18, 19, 235, 8, 18, 19, 234, 93, 18, 19, 234, 
-    84, 18, 19, 234, 29, 18, 19, 234, 11, 18, 19, 211, 116, 234, 11, 18, 19, 
-    176, 18, 19, 235, 11, 18, 19, 233, 179, 18, 19, 159, 233, 179, 18, 19, 
-    233, 177, 18, 19, 159, 233, 177, 18, 19, 233, 176, 18, 19, 159, 233, 176, 
-    18, 19, 233, 175, 18, 19, 159, 233, 175, 18, 19, 233, 174, 18, 19, 159, 
-    233, 174, 18, 19, 233, 183, 18, 19, 159, 233, 183, 18, 19, 233, 182, 18, 
-    19, 159, 233, 182, 18, 19, 229, 191, 233, 182, 18, 19, 235, 24, 18, 19, 
-    233, 184, 18, 19, 219, 28, 234, 177, 18, 19, 219, 28, 234, 85, 18, 19, 
-    219, 28, 234, 24, 18, 19, 219, 28, 234, 249, 18, 19, 250, 191, 18, 19, 
-    251, 32, 18, 19, 250, 52, 18, 19, 250, 42, 18, 19, 249, 239, 18, 19, 249, 
-    175, 18, 19, 211, 116, 249, 175, 18, 19, 251, 34, 18, 19, 251, 33, 18, 
-    19, 249, 80, 18, 19, 159, 249, 80, 18, 19, 249, 78, 18, 19, 159, 249, 78, 
-    18, 19, 249, 77, 18, 19, 159, 249, 77, 18, 19, 249, 76, 18, 19, 159, 249, 
-    76, 18, 19, 249, 75, 18, 19, 159, 249, 75, 18, 19, 249, 82, 18, 19, 159, 
-    249, 82, 18, 19, 249, 81, 18, 19, 159, 249, 81, 18, 19, 229, 191, 249, 
-    81, 18, 19, 251, 67, 18, 19, 221, 210, 216, 211, 18, 19, 231, 92, 18, 19, 
-    231, 237, 18, 19, 230, 231, 18, 19, 230, 202, 18, 19, 230, 162, 18, 19, 
-    230, 133, 18, 19, 211, 116, 230, 133, 18, 19, 185, 18, 19, 231, 238, 18, 
-    19, 230, 41, 18, 19, 159, 230, 41, 18, 19, 230, 39, 18, 19, 159, 230, 39, 
-    18, 19, 230, 38, 18, 19, 159, 230, 38, 18, 19, 230, 37, 18, 19, 159, 230, 
-    37, 18, 19, 230, 36, 18, 19, 159, 230, 36, 18, 19, 230, 43, 18, 19, 159, 
-    230, 43, 18, 19, 230, 42, 18, 19, 159, 230, 42, 18, 19, 229, 191, 230, 
-    42, 18, 19, 193, 18, 19, 159, 193, 18, 19, 230, 235, 18, 19, 253, 206, 
-    193, 18, 19, 221, 210, 193, 18, 19, 229, 108, 18, 19, 229, 225, 18, 19, 
-    228, 234, 18, 19, 228, 209, 18, 19, 228, 75, 18, 19, 228, 65, 18, 19, 
-    211, 116, 228, 65, 18, 19, 197, 18, 19, 229, 226, 18, 19, 227, 173, 18, 
-    19, 159, 227, 173, 18, 19, 227, 175, 18, 19, 159, 227, 175, 18, 19, 227, 
-    174, 18, 19, 159, 227, 174, 18, 19, 229, 191, 227, 174, 18, 19, 230, 26, 
-    18, 19, 72, 229, 80, 18, 19, 228, 239, 18, 19, 233, 59, 18, 19, 233, 134, 
-    18, 19, 232, 242, 18, 19, 232, 228, 18, 19, 232, 157, 18, 19, 232, 128, 
-    18, 19, 211, 116, 232, 128, 18, 19, 233, 136, 18, 19, 233, 135, 18, 19, 
-    232, 69, 18, 19, 159, 232, 69, 18, 19, 232, 68, 18, 19, 159, 232, 68, 18, 
-    19, 232, 67, 18, 19, 159, 232, 67, 18, 19, 232, 66, 18, 19, 159, 232, 66, 
-    18, 19, 232, 65, 18, 19, 159, 232, 65, 18, 19, 232, 71, 18, 19, 159, 232, 
-    71, 18, 19, 232, 70, 18, 19, 159, 232, 70, 18, 19, 156, 18, 19, 159, 156, 
-    18, 19, 147, 156, 18, 19, 221, 182, 18, 19, 222, 30, 18, 19, 219, 192, 
-    18, 19, 219, 176, 18, 19, 219, 59, 18, 19, 219, 41, 18, 19, 211, 116, 
-    219, 41, 18, 19, 206, 18, 19, 222, 32, 18, 19, 217, 250, 18, 19, 159, 
-    217, 250, 18, 19, 217, 244, 18, 19, 159, 217, 244, 18, 19, 217, 243, 18, 
-    19, 159, 217, 243, 18, 19, 217, 239, 18, 19, 159, 217, 239, 18, 19, 217, 
-    238, 18, 19, 159, 217, 238, 18, 19, 217, 254, 18, 19, 159, 217, 254, 18, 
-    19, 217, 253, 18, 19, 159, 217, 253, 18, 19, 229, 191, 217, 253, 18, 19, 
-    222, 92, 18, 19, 253, 206, 222, 92, 18, 19, 217, 255, 18, 19, 251, 219, 
-    222, 92, 18, 19, 230, 128, 219, 109, 18, 19, 229, 191, 219, 100, 18, 19, 
-    229, 191, 222, 90, 18, 19, 229, 191, 218, 236, 18, 19, 229, 191, 218, 87, 
-    18, 19, 229, 191, 219, 99, 18, 19, 229, 191, 221, 185, 18, 19, 220, 64, 
-    18, 19, 220, 33, 18, 19, 220, 28, 18, 19, 220, 8, 18, 19, 220, 2, 18, 19, 
-    220, 103, 18, 19, 220, 99, 18, 19, 219, 207, 18, 19, 159, 219, 207, 18, 
-    19, 219, 206, 18, 19, 159, 219, 206, 18, 19, 219, 205, 18, 19, 159, 219, 
-    205, 18, 19, 219, 204, 18, 19, 159, 219, 204, 18, 19, 219, 203, 18, 19, 
-    159, 219, 203, 18, 19, 219, 209, 18, 19, 159, 219, 209, 18, 19, 219, 208, 
-    18, 19, 159, 219, 208, 18, 19, 220, 105, 18, 19, 211, 47, 18, 19, 211, 
-    101, 18, 19, 211, 8, 18, 19, 210, 255, 18, 19, 210, 244, 18, 19, 210, 
-    229, 18, 19, 211, 116, 210, 229, 18, 19, 191, 18, 19, 211, 103, 18, 19, 
-    210, 174, 18, 19, 159, 210, 174, 18, 19, 210, 173, 18, 19, 159, 210, 173, 
-    18, 19, 210, 172, 18, 19, 159, 210, 172, 18, 19, 210, 171, 18, 19, 159, 
-    210, 171, 18, 19, 210, 170, 18, 19, 159, 210, 170, 18, 19, 210, 176, 18, 
-    19, 159, 210, 176, 18, 19, 210, 175, 18, 19, 159, 210, 175, 18, 19, 229, 
-    191, 210, 175, 18, 19, 211, 117, 18, 19, 252, 5, 211, 117, 18, 19, 159, 
-    211, 117, 18, 19, 221, 210, 211, 8, 18, 19, 223, 129, 18, 19, 223, 224, 
-    223, 129, 18, 19, 159, 233, 59, 18, 19, 223, 184, 18, 19, 223, 36, 18, 
-    19, 222, 240, 18, 19, 222, 212, 18, 19, 222, 198, 18, 19, 159, 232, 157, 
-    18, 19, 205, 18, 19, 223, 185, 18, 19, 159, 233, 136, 18, 19, 222, 109, 
-    18, 19, 159, 222, 109, 18, 19, 153, 18, 19, 159, 153, 18, 19, 147, 153, 
-    18, 19, 244, 155, 18, 19, 244, 194, 18, 19, 244, 122, 18, 19, 244, 109, 
-    18, 19, 244, 44, 18, 19, 244, 35, 18, 19, 244, 197, 18, 19, 244, 196, 18, 
-    19, 243, 213, 18, 19, 159, 243, 213, 18, 19, 245, 7, 18, 19, 216, 196, 
-    18, 19, 230, 24, 216, 196, 18, 19, 216, 176, 18, 19, 230, 24, 216, 176, 
-    18, 19, 216, 172, 18, 19, 230, 24, 216, 172, 18, 19, 216, 157, 18, 19, 
-    216, 154, 18, 19, 216, 209, 18, 19, 216, 208, 18, 19, 216, 128, 18, 19, 
-    159, 216, 128, 18, 19, 216, 211, 18, 19, 215, 143, 18, 19, 215, 141, 18, 
-    19, 215, 140, 18, 19, 215, 145, 18, 19, 215, 146, 18, 19, 215, 52, 18, 
-    19, 215, 51, 18, 19, 215, 50, 18, 19, 215, 53, 18, 19, 227, 194, 241, 
-    239, 18, 19, 227, 194, 241, 181, 18, 19, 227, 194, 241, 162, 18, 19, 227, 
-    194, 241, 69, 18, 19, 227, 194, 241, 54, 18, 19, 227, 194, 162, 18, 19, 
-    227, 194, 242, 47, 18, 19, 227, 194, 242, 61, 18, 19, 227, 193, 242, 61, 
-    18, 19, 241, 155, 18, 19, 224, 85, 18, 19, 224, 54, 18, 19, 224, 49, 18, 
-    19, 224, 43, 18, 19, 224, 38, 18, 19, 224, 89, 18, 19, 224, 88, 18, 19, 
-    224, 97, 18, 19, 216, 56, 18, 19, 216, 54, 18, 19, 216, 53, 18, 19, 216, 
-    57, 18, 19, 159, 223, 129, 18, 19, 159, 223, 36, 18, 19, 159, 222, 212, 
-    18, 19, 159, 205, 18, 19, 229, 76, 18, 19, 229, 28, 18, 19, 229, 24, 18, 
-    19, 229, 5, 18, 19, 229, 0, 18, 19, 229, 78, 18, 19, 229, 77, 18, 19, 
-    229, 80, 18, 19, 228, 104, 18, 19, 221, 210, 220, 64, 18, 19, 221, 210, 
-    220, 33, 18, 19, 221, 210, 220, 8, 18, 19, 221, 210, 220, 103, 18, 19, 
+    215, 157, 18, 19, 234, 188, 18, 19, 235, 13, 18, 19, 234, 98, 18, 19, 
+    234, 89, 18, 19, 234, 34, 18, 19, 234, 16, 18, 19, 211, 116, 234, 16, 18, 
+    19, 176, 18, 19, 235, 16, 18, 19, 233, 184, 18, 19, 159, 233, 184, 18, 
+    19, 233, 182, 18, 19, 159, 233, 182, 18, 19, 233, 181, 18, 19, 159, 233, 
+    181, 18, 19, 233, 180, 18, 19, 159, 233, 180, 18, 19, 233, 179, 18, 19, 
+    159, 233, 179, 18, 19, 233, 188, 18, 19, 159, 233, 188, 18, 19, 233, 187, 
+    18, 19, 159, 233, 187, 18, 19, 229, 195, 233, 187, 18, 19, 235, 29, 18, 
+    19, 233, 189, 18, 19, 219, 29, 234, 182, 18, 19, 219, 29, 234, 90, 18, 
+    19, 219, 29, 234, 29, 18, 19, 219, 29, 234, 254, 18, 19, 250, 198, 18, 
+    19, 251, 39, 18, 19, 250, 59, 18, 19, 250, 49, 18, 19, 249, 246, 18, 19, 
+    249, 182, 18, 19, 211, 116, 249, 182, 18, 19, 251, 41, 18, 19, 251, 40, 
+    18, 19, 249, 87, 18, 19, 159, 249, 87, 18, 19, 249, 85, 18, 19, 159, 249, 
+    85, 18, 19, 249, 84, 18, 19, 159, 249, 84, 18, 19, 249, 83, 18, 19, 159, 
+    249, 83, 18, 19, 249, 82, 18, 19, 159, 249, 82, 18, 19, 249, 89, 18, 19, 
+    159, 249, 89, 18, 19, 249, 88, 18, 19, 159, 249, 88, 18, 19, 229, 195, 
+    249, 88, 18, 19, 251, 74, 18, 19, 221, 211, 216, 211, 18, 19, 231, 96, 
+    18, 19, 231, 241, 18, 19, 230, 235, 18, 19, 230, 206, 18, 19, 230, 166, 
+    18, 19, 230, 137, 18, 19, 211, 116, 230, 137, 18, 19, 186, 18, 19, 231, 
+    242, 18, 19, 230, 45, 18, 19, 159, 230, 45, 18, 19, 230, 43, 18, 19, 159, 
+    230, 43, 18, 19, 230, 42, 18, 19, 159, 230, 42, 18, 19, 230, 41, 18, 19, 
+    159, 230, 41, 18, 19, 230, 40, 18, 19, 159, 230, 40, 18, 19, 230, 47, 18, 
+    19, 159, 230, 47, 18, 19, 230, 46, 18, 19, 159, 230, 46, 18, 19, 229, 
+    195, 230, 46, 18, 19, 194, 18, 19, 159, 194, 18, 19, 230, 239, 18, 19, 
+    253, 213, 194, 18, 19, 221, 211, 194, 18, 19, 229, 112, 18, 19, 229, 229, 
+    18, 19, 228, 238, 18, 19, 228, 213, 18, 19, 228, 79, 18, 19, 228, 69, 18, 
+    19, 211, 116, 228, 69, 18, 19, 198, 18, 19, 229, 230, 18, 19, 227, 176, 
+    18, 19, 159, 227, 176, 18, 19, 227, 178, 18, 19, 159, 227, 178, 18, 19, 
+    227, 177, 18, 19, 159, 227, 177, 18, 19, 229, 195, 227, 177, 18, 19, 230, 
+    30, 18, 19, 73, 229, 84, 18, 19, 228, 243, 18, 19, 233, 64, 18, 19, 233, 
+    139, 18, 19, 232, 247, 18, 19, 232, 233, 18, 19, 232, 162, 18, 19, 232, 
+    133, 18, 19, 211, 116, 232, 133, 18, 19, 233, 141, 18, 19, 233, 140, 18, 
+    19, 232, 73, 18, 19, 159, 232, 73, 18, 19, 232, 72, 18, 19, 159, 232, 72, 
+    18, 19, 232, 71, 18, 19, 159, 232, 71, 18, 19, 232, 70, 18, 19, 159, 232, 
+    70, 18, 19, 232, 69, 18, 19, 159, 232, 69, 18, 19, 232, 75, 18, 19, 159, 
+    232, 75, 18, 19, 232, 74, 18, 19, 159, 232, 74, 18, 19, 156, 18, 19, 159, 
+    156, 18, 19, 147, 156, 18, 19, 221, 183, 18, 19, 222, 31, 18, 19, 219, 
+    193, 18, 19, 219, 177, 18, 19, 219, 60, 18, 19, 219, 42, 18, 19, 211, 
+    116, 219, 42, 18, 19, 206, 18, 19, 222, 33, 18, 19, 217, 250, 18, 19, 
+    159, 217, 250, 18, 19, 217, 244, 18, 19, 159, 217, 244, 18, 19, 217, 243, 
+    18, 19, 159, 217, 243, 18, 19, 217, 239, 18, 19, 159, 217, 239, 18, 19, 
+    217, 238, 18, 19, 159, 217, 238, 18, 19, 217, 254, 18, 19, 159, 217, 254, 
+    18, 19, 217, 253, 18, 19, 159, 217, 253, 18, 19, 229, 195, 217, 253, 18, 
+    19, 222, 93, 18, 19, 253, 213, 222, 93, 18, 19, 217, 255, 18, 19, 251, 
+    226, 222, 93, 18, 19, 230, 132, 219, 110, 18, 19, 229, 195, 219, 101, 18, 
+    19, 229, 195, 222, 91, 18, 19, 229, 195, 218, 237, 18, 19, 229, 195, 218, 
+    87, 18, 19, 229, 195, 219, 100, 18, 19, 229, 195, 221, 186, 18, 19, 220, 
+    65, 18, 19, 220, 34, 18, 19, 220, 29, 18, 19, 220, 9, 18, 19, 220, 3, 18, 
+    19, 220, 104, 18, 19, 220, 100, 18, 19, 219, 208, 18, 19, 159, 219, 208, 
+    18, 19, 219, 207, 18, 19, 159, 219, 207, 18, 19, 219, 206, 18, 19, 159, 
+    219, 206, 18, 19, 219, 205, 18, 19, 159, 219, 205, 18, 19, 219, 204, 18, 
+    19, 159, 219, 204, 18, 19, 219, 210, 18, 19, 159, 219, 210, 18, 19, 219, 
+    209, 18, 19, 159, 219, 209, 18, 19, 220, 106, 18, 19, 211, 47, 18, 19, 
+    211, 101, 18, 19, 211, 8, 18, 19, 210, 255, 18, 19, 210, 244, 18, 19, 
+    210, 229, 18, 19, 211, 116, 210, 229, 18, 19, 192, 18, 19, 211, 103, 18, 
+    19, 210, 174, 18, 19, 159, 210, 174, 18, 19, 210, 173, 18, 19, 159, 210, 
+    173, 18, 19, 210, 172, 18, 19, 159, 210, 172, 18, 19, 210, 171, 18, 19, 
+    159, 210, 171, 18, 19, 210, 170, 18, 19, 159, 210, 170, 18, 19, 210, 176, 
+    18, 19, 159, 210, 176, 18, 19, 210, 175, 18, 19, 159, 210, 175, 18, 19, 
+    229, 195, 210, 175, 18, 19, 211, 117, 18, 19, 252, 12, 211, 117, 18, 19, 
+    159, 211, 117, 18, 19, 221, 211, 211, 8, 18, 19, 223, 131, 18, 19, 223, 
+    226, 223, 131, 18, 19, 159, 233, 64, 18, 19, 223, 186, 18, 19, 223, 38, 
+    18, 19, 222, 242, 18, 19, 222, 213, 18, 19, 222, 199, 18, 19, 159, 232, 
+    162, 18, 19, 205, 18, 19, 223, 187, 18, 19, 159, 233, 141, 18, 19, 222, 
+    110, 18, 19, 159, 222, 110, 18, 19, 153, 18, 19, 159, 153, 18, 19, 147, 
+    153, 18, 19, 244, 162, 18, 19, 244, 201, 18, 19, 244, 129, 18, 19, 244, 
+    116, 18, 19, 244, 51, 18, 19, 244, 42, 18, 19, 244, 204, 18, 19, 244, 
+    203, 18, 19, 243, 219, 18, 19, 159, 243, 219, 18, 19, 245, 14, 18, 19, 
+    216, 196, 18, 19, 230, 28, 216, 196, 18, 19, 216, 176, 18, 19, 230, 28, 
+    216, 176, 18, 19, 216, 172, 18, 19, 230, 28, 216, 172, 18, 19, 216, 157, 
+    18, 19, 216, 154, 18, 19, 216, 209, 18, 19, 216, 208, 18, 19, 216, 128, 
+    18, 19, 159, 216, 128, 18, 19, 216, 211, 18, 19, 215, 143, 18, 19, 215, 
+    141, 18, 19, 215, 140, 18, 19, 215, 145, 18, 19, 215, 146, 18, 19, 215, 
+    52, 18, 19, 215, 51, 18, 19, 215, 50, 18, 19, 215, 53, 18, 19, 227, 197, 
+    241, 245, 18, 19, 227, 197, 241, 187, 18, 19, 227, 197, 241, 168, 18, 19, 
+    227, 197, 241, 75, 18, 19, 227, 197, 241, 60, 18, 19, 227, 197, 162, 18, 
+    19, 227, 197, 242, 53, 18, 19, 227, 197, 242, 67, 18, 19, 227, 196, 242, 
+    67, 18, 19, 241, 161, 18, 19, 224, 87, 18, 19, 224, 56, 18, 19, 224, 51, 
+    18, 19, 224, 45, 18, 19, 224, 40, 18, 19, 224, 91, 18, 19, 224, 90, 18, 
+    19, 224, 99, 18, 19, 216, 56, 18, 19, 216, 54, 18, 19, 216, 53, 18, 19, 
+    216, 57, 18, 19, 159, 223, 131, 18, 19, 159, 223, 38, 18, 19, 159, 222, 
+    213, 18, 19, 159, 205, 18, 19, 229, 80, 18, 19, 229, 32, 18, 19, 229, 28, 
+    18, 19, 229, 9, 18, 19, 229, 4, 18, 19, 229, 82, 18, 19, 229, 81, 18, 19, 
+    229, 84, 18, 19, 228, 108, 18, 19, 221, 211, 220, 65, 18, 19, 221, 211, 
+    220, 34, 18, 19, 221, 211, 220, 9, 18, 19, 221, 211, 220, 104, 18, 19, 
     211, 213, 216, 196, 18, 19, 211, 213, 216, 176, 18, 19, 211, 213, 216, 
     157, 18, 19, 211, 213, 216, 209, 18, 19, 211, 213, 216, 211, 18, 19, 232, 
-    249, 18, 19, 232, 248, 18, 19, 232, 247, 18, 19, 232, 246, 18, 19, 232, 
-    255, 18, 19, 232, 254, 18, 19, 233, 0, 18, 19, 216, 210, 216, 196, 18, 
-    19, 216, 210, 216, 176, 18, 19, 216, 210, 216, 172, 18, 19, 216, 210, 
-    216, 157, 18, 19, 216, 210, 216, 154, 18, 19, 216, 210, 216, 209, 18, 19, 
-    216, 210, 216, 208, 18, 19, 216, 210, 216, 211, 18, 19, 254, 190, 253, 
-    159, 18, 19, 251, 219, 75, 18, 19, 251, 219, 73, 18, 19, 251, 219, 76, 
-    18, 19, 251, 219, 61, 18, 19, 251, 219, 212, 22, 18, 19, 251, 219, 211, 
-    250, 18, 19, 251, 219, 211, 227, 18, 19, 251, 219, 212, 65, 18, 19, 251, 
-    219, 229, 108, 18, 19, 251, 219, 228, 234, 18, 19, 251, 219, 228, 75, 18, 
-    19, 251, 219, 197, 18, 19, 251, 219, 234, 183, 18, 19, 251, 219, 234, 93, 
-    18, 19, 251, 219, 234, 29, 18, 19, 251, 219, 176, 18, 19, 221, 210, 241, 
-    239, 18, 19, 221, 210, 241, 181, 18, 19, 221, 210, 241, 69, 18, 19, 221, 
-    210, 162, 18, 19, 72, 242, 221, 18, 19, 72, 242, 225, 18, 19, 72, 242, 
-    237, 18, 19, 72, 242, 236, 18, 19, 72, 242, 226, 18, 19, 72, 242, 250, 
-    18, 19, 72, 222, 141, 18, 19, 72, 222, 212, 18, 19, 72, 223, 129, 18, 19, 
-    72, 223, 109, 18, 19, 72, 223, 36, 18, 19, 72, 205, 18, 19, 72, 211, 195, 
-    18, 19, 72, 211, 227, 18, 19, 72, 212, 22, 18, 19, 72, 212, 17, 18, 19, 
-    72, 211, 250, 18, 19, 72, 212, 65, 18, 19, 72, 240, 195, 18, 19, 72, 240, 
-    196, 18, 19, 72, 240, 199, 18, 19, 72, 240, 198, 18, 19, 72, 240, 197, 
-    18, 19, 72, 240, 201, 18, 19, 72, 216, 137, 18, 19, 72, 216, 157, 18, 19, 
-    72, 216, 196, 18, 19, 72, 216, 195, 18, 19, 72, 216, 176, 18, 19, 72, 
-    216, 209, 18, 19, 72, 215, 124, 18, 19, 72, 215, 134, 18, 19, 72, 215, 
-    152, 18, 19, 72, 215, 151, 18, 19, 72, 215, 136, 18, 19, 72, 215, 157, 
-    18, 19, 72, 224, 151, 18, 19, 72, 225, 17, 18, 19, 72, 225, 222, 18, 19, 
-    72, 225, 212, 18, 19, 72, 225, 109, 18, 19, 72, 190, 18, 19, 72, 226, 
-    106, 18, 19, 72, 242, 114, 18, 19, 72, 242, 175, 18, 19, 72, 243, 63, 18, 
-    19, 72, 243, 56, 18, 19, 72, 242, 215, 18, 19, 72, 243, 136, 18, 19, 72, 
-    234, 101, 18, 19, 72, 234, 106, 18, 19, 72, 234, 120, 18, 19, 72, 234, 
-    119, 18, 19, 72, 234, 113, 18, 19, 72, 234, 133, 18, 19, 72, 234, 42, 18, 
-    19, 72, 234, 43, 18, 19, 72, 234, 46, 18, 19, 72, 234, 45, 18, 19, 72, 
-    234, 44, 18, 19, 72, 234, 47, 18, 19, 72, 234, 48, 18, 19, 72, 227, 238, 
-    18, 19, 72, 228, 75, 18, 19, 72, 229, 108, 18, 19, 72, 229, 104, 18, 19, 
-    72, 228, 234, 18, 19, 72, 197, 18, 19, 72, 230, 103, 18, 19, 72, 230, 
-    162, 18, 19, 72, 231, 92, 18, 19, 72, 231, 81, 18, 19, 72, 230, 231, 18, 
-    19, 72, 185, 18, 19, 72, 210, 212, 18, 19, 72, 210, 244, 18, 19, 72, 211, 
-    47, 18, 19, 72, 211, 44, 18, 19, 72, 211, 8, 18, 19, 72, 191, 18, 19, 72, 
-    235, 52, 18, 19, 221, 210, 235, 52, 18, 19, 72, 235, 69, 18, 19, 72, 235, 
-    127, 18, 19, 72, 235, 125, 18, 19, 72, 235, 109, 18, 19, 221, 210, 235, 
-    109, 18, 19, 72, 235, 142, 18, 19, 72, 235, 82, 18, 19, 72, 235, 86, 18, 
-    19, 72, 235, 96, 18, 19, 72, 235, 95, 18, 19, 72, 235, 94, 18, 19, 72, 
-    235, 97, 18, 19, 72, 232, 99, 18, 19, 72, 232, 157, 18, 19, 72, 233, 59, 
-    18, 19, 72, 233, 51, 18, 19, 72, 232, 242, 18, 19, 72, 233, 136, 18, 19, 
-    72, 247, 150, 18, 19, 72, 247, 151, 18, 19, 72, 247, 156, 18, 19, 72, 
-    247, 155, 18, 19, 72, 247, 152, 18, 19, 72, 247, 157, 18, 19, 72, 232, 
-    245, 18, 19, 72, 232, 247, 18, 19, 72, 232, 251, 18, 19, 72, 232, 250, 
-    18, 19, 72, 232, 249, 18, 19, 72, 232, 255, 18, 19, 72, 216, 51, 18, 19, 
-    72, 216, 53, 18, 19, 72, 216, 56, 18, 19, 72, 216, 55, 18, 19, 72, 216, 
-    54, 18, 19, 72, 216, 57, 18, 19, 72, 216, 46, 18, 19, 72, 216, 47, 18, 
-    19, 72, 216, 59, 18, 19, 72, 216, 58, 18, 19, 72, 216, 48, 18, 19, 72, 
-    216, 60, 18, 19, 72, 210, 13, 18, 19, 72, 210, 23, 18, 19, 72, 210, 94, 
-    18, 19, 72, 210, 92, 18, 19, 72, 210, 44, 18, 19, 72, 210, 116, 18, 19, 
-    72, 210, 159, 18, 19, 72, 65, 210, 159, 18, 19, 72, 246, 29, 18, 19, 72, 
-    246, 30, 18, 19, 72, 246, 37, 18, 19, 72, 246, 36, 18, 19, 72, 246, 32, 
-    18, 19, 72, 246, 39, 18, 19, 72, 218, 84, 18, 19, 72, 219, 59, 18, 19, 
-    72, 221, 182, 18, 19, 72, 221, 171, 18, 19, 72, 219, 192, 18, 19, 72, 
-    206, 18, 19, 72, 219, 226, 18, 19, 72, 220, 8, 18, 19, 72, 220, 64, 18, 
-    19, 72, 220, 62, 18, 19, 72, 220, 33, 18, 19, 72, 220, 103, 18, 19, 72, 
-    220, 105, 18, 19, 72, 215, 164, 18, 19, 72, 215, 167, 18, 19, 72, 215, 
-    179, 18, 19, 72, 215, 178, 18, 19, 72, 215, 168, 18, 19, 72, 215, 184, 
-    18, 19, 72, 250, 70, 18, 19, 72, 250, 87, 18, 19, 72, 250, 132, 18, 19, 
-    72, 250, 129, 18, 19, 72, 250, 111, 18, 19, 72, 250, 158, 18, 19, 72, 
-    215, 127, 18, 19, 72, 215, 128, 18, 19, 72, 215, 131, 18, 19, 72, 215, 
-    130, 18, 19, 72, 215, 129, 18, 19, 72, 215, 132, 18, 19, 250, 112, 50, 
-    18, 19, 243, 230, 218, 130, 18, 19, 224, 81, 18, 19, 229, 74, 18, 19, 
-    228, 101, 18, 19, 228, 100, 18, 19, 228, 99, 18, 19, 228, 98, 18, 19, 
-    228, 103, 18, 19, 228, 102, 18, 19, 211, 213, 216, 126, 18, 19, 211, 213, 
-    216, 125, 18, 19, 211, 213, 216, 124, 18, 19, 211, 213, 216, 123, 18, 19, 
-    211, 213, 216, 122, 18, 19, 211, 213, 216, 129, 18, 19, 211, 213, 216, 
-    128, 18, 19, 211, 213, 40, 216, 211, 18, 19, 251, 219, 212, 98, 226, 227, 
-    219, 20, 78, 226, 227, 1, 252, 49, 226, 227, 1, 232, 88, 226, 227, 1, 
-    244, 152, 226, 227, 1, 222, 16, 226, 227, 1, 228, 194, 226, 227, 1, 214, 
-    226, 226, 227, 1, 248, 198, 226, 227, 1, 216, 81, 226, 227, 1, 249, 230, 
-    226, 227, 1, 250, 181, 226, 227, 1, 230, 92, 226, 227, 1, 242, 157, 226, 
-    227, 1, 229, 64, 226, 227, 1, 218, 123, 226, 227, 1, 222, 136, 226, 227, 
-    1, 254, 199, 226, 227, 1, 226, 188, 226, 227, 1, 214, 150, 226, 227, 1, 
-    245, 232, 226, 227, 1, 235, 189, 226, 227, 1, 245, 233, 226, 227, 1, 226, 
-    159, 226, 227, 1, 214, 206, 226, 227, 1, 236, 40, 226, 227, 1, 245, 230, 
-    226, 227, 1, 225, 203, 226, 227, 244, 151, 78, 226, 227, 223, 50, 244, 
-    151, 78, 178, 1, 244, 142, 244, 134, 244, 156, 245, 7, 178, 1, 214, 105, 
-    178, 1, 214, 135, 214, 151, 70, 178, 1, 210, 214, 178, 1, 211, 117, 178, 
-    1, 212, 98, 178, 1, 216, 131, 216, 130, 216, 152, 178, 1, 245, 60, 178, 
-    1, 254, 94, 61, 178, 1, 226, 144, 76, 178, 1, 255, 18, 61, 178, 1, 254, 
-    228, 178, 1, 232, 134, 76, 178, 1, 219, 245, 76, 178, 1, 76, 178, 1, 226, 
-    235, 178, 1, 226, 197, 178, 1, 223, 165, 223, 178, 223, 95, 153, 178, 1, 
-    234, 194, 178, 1, 250, 178, 178, 1, 234, 195, 235, 24, 178, 1, 243, 203, 
-    178, 1, 245, 139, 178, 1, 243, 59, 242, 67, 243, 203, 178, 1, 243, 97, 
-    178, 1, 211, 188, 211, 182, 212, 98, 178, 1, 242, 39, 242, 61, 178, 1, 
-    242, 43, 242, 61, 178, 1, 232, 136, 242, 61, 178, 1, 219, 248, 242, 61, 
-    178, 1, 229, 186, 227, 158, 229, 187, 230, 26, 178, 1, 219, 246, 230, 26, 
-    178, 1, 246, 116, 178, 1, 235, 169, 235, 173, 235, 163, 73, 178, 1, 75, 
-    178, 1, 235, 118, 235, 145, 178, 1, 243, 44, 178, 1, 232, 137, 254, 244, 
-    178, 1, 219, 250, 61, 178, 1, 235, 155, 245, 114, 178, 1, 225, 165, 225, 
-    187, 226, 106, 178, 1, 254, 164, 245, 112, 178, 1, 219, 25, 222, 92, 178, 
-    1, 219, 180, 232, 133, 222, 92, 178, 1, 219, 244, 222, 92, 178, 1, 251, 
-    67, 178, 1, 210, 159, 178, 1, 216, 64, 216, 74, 215, 41, 217, 153, 178, 
-    1, 219, 243, 217, 153, 178, 1, 249, 61, 178, 1, 252, 32, 252, 35, 251, 
-    225, 253, 159, 178, 1, 219, 249, 253, 159, 178, 1, 246, 115, 178, 1, 226, 
-    172, 178, 1, 245, 197, 245, 199, 75, 178, 1, 231, 179, 231, 187, 193, 
-    178, 1, 232, 135, 193, 178, 1, 219, 247, 193, 178, 1, 233, 74, 233, 115, 
-    232, 144, 156, 178, 1, 246, 117, 178, 1, 235, 231, 178, 1, 235, 232, 178, 
-    1, 248, 211, 248, 216, 249, 61, 178, 1, 226, 139, 245, 59, 76, 178, 1, 
-    245, 228, 178, 1, 235, 188, 178, 1, 249, 79, 178, 1, 251, 18, 178, 1, 
-    250, 190, 178, 1, 218, 162, 178, 1, 232, 132, 178, 1, 219, 242, 178, 1, 
-    240, 111, 178, 1, 224, 97, 178, 1, 211, 178, 178, 219, 156, 224, 141, 
-    178, 230, 86, 224, 141, 178, 249, 132, 224, 141, 178, 254, 7, 87, 178, 
-    215, 82, 87, 178, 252, 47, 87, 217, 84, 1, 61, 217, 84, 1, 73, 217, 84, 
-    1, 70, 217, 84, 1, 176, 217, 84, 1, 243, 136, 217, 84, 1, 229, 78, 217, 
-    84, 1, 217, 106, 217, 84, 1, 248, 222, 217, 84, 1, 197, 217, 84, 1, 190, 
-    217, 84, 1, 252, 192, 217, 84, 1, 185, 217, 84, 1, 191, 217, 84, 1, 233, 
-    136, 217, 84, 1, 212, 65, 217, 84, 1, 206, 217, 84, 1, 162, 217, 84, 25, 
-    5, 73, 217, 84, 25, 5, 70, 217, 84, 5, 213, 152, 242, 8, 1, 61, 242, 8, 
-    1, 73, 242, 8, 1, 70, 242, 8, 1, 176, 242, 8, 1, 243, 136, 242, 8, 1, 
-    229, 78, 242, 8, 1, 217, 106, 242, 8, 1, 248, 222, 242, 8, 1, 197, 242, 
-    8, 1, 190, 242, 8, 1, 252, 192, 242, 8, 1, 185, 242, 8, 1, 191, 242, 8, 
-    1, 205, 242, 8, 1, 233, 136, 242, 8, 1, 212, 65, 242, 8, 1, 206, 242, 8, 
-    1, 162, 242, 8, 25, 5, 73, 242, 8, 25, 5, 70, 242, 8, 5, 226, 50, 225, 
-    127, 219, 156, 224, 141, 225, 127, 52, 224, 141, 251, 121, 1, 61, 251, 
-    121, 1, 73, 251, 121, 1, 70, 251, 121, 1, 176, 251, 121, 1, 243, 136, 
-    251, 121, 1, 229, 78, 251, 121, 1, 217, 106, 251, 121, 1, 248, 222, 251, 
-    121, 1, 197, 251, 121, 1, 190, 251, 121, 1, 252, 192, 251, 121, 1, 185, 
-    251, 121, 1, 191, 251, 121, 1, 205, 251, 121, 1, 233, 136, 251, 121, 1, 
-    212, 65, 251, 121, 1, 206, 251, 121, 1, 162, 251, 121, 25, 5, 73, 251, 
-    121, 25, 5, 70, 217, 83, 1, 61, 217, 83, 1, 73, 217, 83, 1, 70, 217, 83, 
-    1, 176, 217, 83, 1, 243, 136, 217, 83, 1, 229, 78, 217, 83, 1, 217, 106, 
-    217, 83, 1, 248, 222, 217, 83, 1, 197, 217, 83, 1, 190, 217, 83, 1, 252, 
-    192, 217, 83, 1, 185, 217, 83, 1, 191, 217, 83, 1, 233, 136, 217, 83, 1, 
-    212, 65, 217, 83, 1, 206, 217, 83, 25, 5, 73, 217, 83, 25, 5, 70, 69, 1, 
-    176, 69, 1, 234, 133, 69, 1, 234, 29, 69, 1, 234, 106, 69, 1, 229, 5, 69, 
-    1, 251, 34, 69, 1, 250, 158, 69, 1, 249, 239, 69, 1, 250, 87, 69, 1, 227, 
-    135, 69, 1, 248, 222, 69, 1, 215, 145, 69, 1, 247, 146, 69, 1, 215, 140, 
-    69, 1, 228, 81, 69, 1, 217, 106, 69, 1, 216, 209, 69, 1, 111, 69, 1, 216, 
-    157, 69, 1, 228, 75, 69, 1, 252, 192, 69, 1, 225, 148, 69, 1, 225, 17, 
-    69, 1, 225, 122, 69, 1, 230, 162, 69, 1, 210, 244, 69, 1, 222, 212, 69, 
-    1, 232, 157, 69, 1, 213, 138, 69, 1, 220, 103, 69, 1, 218, 185, 69, 1, 
-    206, 69, 1, 162, 69, 1, 233, 136, 69, 1, 224, 89, 69, 235, 244, 25, 224, 
-    75, 69, 235, 244, 25, 224, 88, 69, 235, 244, 25, 224, 54, 69, 235, 244, 
-    25, 224, 49, 69, 235, 244, 25, 224, 31, 69, 235, 244, 25, 224, 3, 69, 
-    235, 244, 25, 223, 247, 69, 235, 244, 25, 223, 246, 69, 235, 244, 25, 
-    222, 101, 69, 235, 244, 25, 222, 94, 69, 235, 244, 25, 232, 63, 69, 235, 
-    244, 25, 232, 53, 69, 235, 244, 25, 224, 70, 69, 235, 244, 25, 224, 81, 
-    69, 235, 244, 25, 224, 39, 215, 49, 110, 69, 235, 244, 25, 224, 39, 215, 
-    49, 105, 69, 235, 244, 25, 224, 71, 69, 25, 235, 230, 254, 46, 69, 25, 
-    235, 230, 255, 74, 69, 25, 5, 255, 74, 69, 25, 5, 73, 69, 25, 5, 236, 34, 
-    69, 25, 5, 211, 117, 69, 25, 5, 210, 169, 69, 25, 5, 70, 69, 25, 5, 214, 
-    118, 69, 25, 5, 214, 229, 69, 25, 5, 226, 235, 69, 25, 5, 191, 69, 25, 5, 
-    236, 61, 69, 25, 5, 75, 69, 25, 5, 254, 244, 69, 25, 5, 254, 202, 69, 25, 
-    5, 226, 184, 69, 25, 5, 253, 193, 69, 5, 228, 207, 69, 5, 223, 127, 69, 
-    5, 210, 180, 69, 5, 230, 53, 69, 5, 215, 214, 69, 5, 252, 144, 69, 5, 
-    222, 207, 69, 5, 216, 41, 69, 5, 234, 242, 69, 5, 254, 204, 69, 5, 221, 
-    245, 221, 239, 69, 5, 213, 149, 69, 5, 249, 233, 69, 5, 252, 118, 69, 5, 
-    234, 126, 69, 5, 252, 138, 69, 5, 251, 10, 225, 73, 233, 188, 69, 5, 233, 
-    31, 216, 18, 69, 5, 252, 21, 69, 5, 225, 124, 230, 100, 69, 5, 234, 10, 
-    69, 249, 99, 16, 223, 29, 69, 5, 253, 175, 69, 5, 253, 196, 69, 21, 210, 
-    86, 69, 21, 110, 69, 21, 105, 69, 21, 158, 69, 21, 161, 69, 21, 189, 69, 
-    21, 194, 69, 21, 198, 69, 21, 195, 69, 21, 200, 69, 16, 233, 31, 253, 
-    198, 219, 44, 69, 16, 233, 31, 253, 198, 230, 72, 69, 16, 233, 31, 253, 
-    198, 225, 72, 69, 16, 233, 31, 253, 198, 252, 50, 69, 16, 233, 31, 253, 
-    198, 251, 104, 69, 16, 233, 31, 253, 198, 224, 216, 69, 16, 233, 31, 253, 
-    198, 224, 210, 69, 16, 233, 31, 253, 198, 224, 208, 69, 16, 233, 31, 253, 
-    198, 224, 214, 69, 16, 233, 31, 253, 198, 224, 212, 83, 251, 237, 83, 
-    245, 164, 83, 249, 220, 83, 243, 230, 218, 130, 83, 249, 227, 83, 244, 
-    12, 247, 119, 83, 216, 40, 219, 53, 240, 169, 83, 219, 191, 3, 251, 173, 
-    231, 155, 83, 231, 184, 249, 220, 83, 231, 184, 243, 230, 218, 130, 83, 
-    228, 192, 83, 243, 254, 45, 221, 158, 110, 83, 243, 254, 45, 221, 158, 
-    105, 83, 243, 254, 45, 221, 158, 158, 83, 25, 220, 138, 83, 21, 210, 86, 
-    83, 21, 110, 83, 21, 105, 83, 21, 158, 83, 21, 161, 83, 21, 189, 83, 21, 
-    194, 83, 21, 198, 83, 21, 195, 83, 21, 200, 83, 1, 61, 83, 1, 75, 83, 1, 
-    73, 83, 1, 76, 83, 1, 70, 83, 1, 226, 235, 83, 1, 214, 214, 83, 1, 245, 
-    210, 83, 1, 197, 83, 1, 254, 116, 83, 1, 252, 192, 83, 1, 190, 83, 1, 
-    224, 89, 83, 1, 243, 136, 83, 1, 185, 83, 1, 233, 136, 83, 1, 206, 83, 1, 
-    220, 103, 83, 1, 217, 106, 83, 1, 248, 222, 83, 1, 250, 158, 83, 1, 235, 
-    142, 83, 1, 191, 83, 1, 205, 83, 1, 212, 65, 83, 1, 244, 197, 83, 1, 176, 
-    83, 1, 234, 133, 83, 1, 215, 184, 83, 1, 210, 116, 83, 1, 242, 47, 83, 1, 
-    210, 16, 83, 1, 232, 255, 83, 1, 210, 69, 83, 1, 250, 111, 83, 1, 216, 
-    40, 199, 25, 50, 83, 1, 216, 40, 75, 83, 1, 216, 40, 73, 83, 1, 216, 40, 
-    76, 83, 1, 216, 40, 70, 83, 1, 216, 40, 226, 235, 83, 1, 216, 40, 214, 
-    214, 83, 1, 216, 40, 254, 116, 83, 1, 216, 40, 252, 192, 83, 1, 216, 40, 
-    190, 83, 1, 216, 40, 224, 89, 83, 1, 216, 40, 243, 136, 83, 1, 216, 40, 
-    185, 83, 1, 216, 40, 217, 106, 83, 1, 216, 40, 248, 222, 83, 1, 216, 40, 
-    250, 158, 83, 1, 216, 40, 235, 142, 83, 1, 216, 40, 215, 184, 83, 1, 216, 
-    40, 191, 83, 1, 216, 40, 212, 65, 83, 1, 216, 40, 176, 83, 1, 216, 40, 
-    243, 133, 83, 1, 216, 40, 242, 47, 83, 1, 216, 40, 235, 108, 83, 1, 216, 
-    40, 228, 232, 83, 1, 216, 40, 246, 39, 83, 1, 219, 191, 75, 83, 1, 219, 
-    191, 73, 83, 1, 219, 191, 235, 153, 83, 1, 219, 191, 214, 214, 83, 1, 
-    219, 191, 70, 83, 1, 219, 191, 254, 116, 83, 1, 219, 191, 176, 83, 1, 
-    219, 191, 243, 136, 83, 1, 219, 191, 162, 83, 1, 219, 191, 190, 83, 1, 
-    219, 191, 220, 103, 83, 1, 219, 191, 217, 106, 83, 1, 219, 191, 248, 222, 
-    83, 1, 219, 191, 235, 142, 83, 1, 219, 191, 244, 197, 83, 1, 219, 191, 
-    243, 133, 83, 1, 219, 191, 242, 47, 83, 1, 219, 191, 215, 184, 83, 1, 
-    219, 191, 210, 116, 83, 1, 219, 191, 223, 185, 83, 1, 219, 191, 250, 158, 
-    83, 1, 219, 191, 210, 82, 83, 1, 231, 184, 73, 83, 1, 231, 184, 176, 83, 
-    1, 231, 184, 205, 83, 1, 231, 184, 244, 197, 83, 1, 231, 184, 210, 82, 
-    83, 1, 254, 163, 243, 117, 254, 77, 110, 83, 1, 254, 163, 243, 117, 213, 
-    148, 110, 83, 1, 254, 163, 243, 117, 248, 187, 83, 1, 254, 163, 243, 117, 
-    214, 224, 83, 1, 254, 163, 243, 117, 235, 194, 214, 224, 83, 1, 254, 163, 
-    243, 117, 252, 156, 83, 1, 254, 163, 243, 117, 134, 252, 156, 83, 1, 254, 
-    163, 243, 117, 61, 83, 1, 254, 163, 243, 117, 73, 83, 1, 254, 163, 243, 
-    117, 176, 83, 1, 254, 163, 243, 117, 229, 78, 83, 1, 254, 163, 243, 117, 
-    251, 34, 83, 1, 254, 163, 243, 117, 215, 157, 83, 1, 254, 163, 243, 117, 
-    215, 145, 83, 1, 254, 163, 243, 117, 248, 136, 83, 1, 254, 163, 243, 117, 
-    228, 111, 83, 1, 254, 163, 243, 117, 217, 106, 83, 1, 254, 163, 243, 117, 
-    248, 222, 83, 1, 254, 163, 243, 117, 190, 83, 1, 254, 163, 243, 117, 225, 
-    148, 83, 1, 254, 163, 243, 117, 218, 224, 83, 1, 254, 163, 243, 117, 210, 
-    82, 83, 1, 254, 163, 243, 117, 210, 116, 83, 1, 254, 163, 243, 117, 254, 
-    210, 83, 1, 216, 40, 254, 163, 243, 117, 217, 106, 83, 1, 216, 40, 254, 
-    163, 243, 117, 210, 82, 83, 1, 231, 184, 254, 163, 243, 117, 242, 250, 
-    83, 1, 231, 184, 254, 163, 243, 117, 229, 78, 83, 1, 231, 184, 254, 163, 
-    243, 117, 251, 34, 83, 1, 231, 184, 254, 163, 243, 117, 235, 115, 83, 1, 
-    231, 184, 254, 163, 243, 117, 215, 157, 83, 1, 231, 184, 254, 163, 243, 
-    117, 248, 120, 83, 1, 231, 184, 254, 163, 243, 117, 217, 106, 83, 1, 231, 
-    184, 254, 163, 243, 117, 248, 26, 83, 1, 231, 184, 254, 163, 243, 117, 
-    218, 224, 83, 1, 231, 184, 254, 163, 243, 117, 249, 73, 83, 1, 231, 184, 
-    254, 163, 243, 117, 210, 82, 83, 1, 231, 184, 254, 163, 243, 117, 210, 
-    116, 83, 1, 254, 163, 243, 117, 163, 70, 83, 1, 254, 163, 243, 117, 163, 
-    191, 83, 1, 231, 184, 254, 163, 243, 117, 252, 19, 83, 1, 254, 163, 243, 
-    117, 248, 212, 83, 1, 231, 184, 254, 163, 243, 117, 232, 255, 18, 19, 
-    226, 110, 18, 19, 253, 168, 18, 19, 255, 29, 18, 19, 212, 25, 18, 19, 
-    224, 222, 18, 19, 225, 230, 18, 19, 224, 106, 18, 19, 217, 32, 18, 19, 
-    234, 190, 18, 19, 233, 180, 18, 19, 231, 133, 18, 19, 228, 38, 18, 19, 
-    229, 182, 18, 19, 233, 69, 18, 19, 219, 23, 18, 19, 221, 212, 18, 19, 
-    219, 233, 18, 19, 220, 67, 18, 19, 219, 202, 18, 19, 210, 220, 18, 19, 
-    211, 52, 18, 19, 223, 135, 18, 19, 227, 172, 18, 19, 226, 217, 227, 172, 
-    18, 19, 227, 171, 18, 19, 226, 217, 227, 171, 18, 19, 227, 170, 18, 19, 
-    226, 217, 227, 170, 18, 19, 227, 169, 18, 19, 226, 217, 227, 169, 18, 19, 
-    222, 106, 18, 19, 222, 105, 18, 19, 222, 104, 18, 19, 222, 103, 18, 19, 
-    222, 102, 18, 19, 222, 110, 18, 19, 226, 217, 226, 106, 18, 19, 226, 217, 
-    217, 153, 18, 19, 226, 217, 235, 24, 18, 19, 226, 217, 251, 67, 18, 19, 
-    226, 217, 193, 18, 19, 226, 217, 230, 26, 18, 19, 226, 217, 222, 92, 18, 
-    19, 226, 217, 220, 105, 18, 19, 245, 220, 212, 98, 18, 19, 212, 7, 212, 
-    98, 18, 19, 40, 4, 222, 234, 18, 19, 40, 223, 158, 247, 121, 18, 19, 223, 
-    224, 222, 107, 18, 19, 159, 232, 128, 18, 19, 159, 233, 135, 18, 19, 216, 
-    127, 18, 19, 216, 129, 18, 19, 215, 137, 18, 19, 215, 139, 18, 19, 215, 
-    144, 18, 19, 216, 50, 18, 19, 216, 52, 18, 19, 221, 210, 219, 207, 18, 
-    19, 221, 210, 220, 2, 18, 19, 221, 210, 241, 54, 18, 19, 72, 242, 74, 18, 
-    19, 72, 248, 53, 243, 56, 18, 19, 72, 243, 133, 18, 19, 72, 242, 79, 18, 
-    19, 221, 210, 235, 34, 18, 19, 72, 235, 32, 18, 19, 252, 69, 248, 53, 
-    156, 18, 19, 252, 69, 248, 53, 153, 18, 19, 72, 248, 48, 222, 92, 232, 
-    224, 213, 122, 233, 11, 232, 224, 1, 176, 232, 224, 1, 234, 133, 232, 
-    224, 1, 243, 136, 232, 224, 1, 242, 250, 232, 224, 1, 229, 78, 232, 224, 
-    1, 251, 34, 232, 224, 1, 250, 158, 232, 224, 1, 235, 142, 232, 224, 1, 
-    235, 115, 232, 224, 1, 211, 71, 232, 224, 1, 217, 106, 232, 224, 1, 216, 
-    209, 232, 224, 1, 248, 222, 232, 224, 1, 248, 26, 232, 224, 1, 197, 232, 
-    224, 1, 190, 232, 224, 1, 225, 148, 232, 224, 1, 252, 192, 232, 224, 1, 
-    252, 19, 232, 224, 1, 185, 232, 224, 1, 191, 232, 224, 1, 205, 232, 224, 
-    1, 233, 136, 232, 224, 1, 212, 65, 232, 224, 1, 220, 103, 232, 224, 1, 
-    218, 224, 232, 224, 1, 206, 232, 224, 1, 162, 232, 224, 25, 5, 61, 232, 
-    224, 25, 5, 73, 232, 224, 25, 5, 70, 232, 224, 25, 5, 245, 210, 232, 224, 
-    25, 5, 254, 202, 232, 224, 25, 5, 226, 184, 232, 224, 25, 5, 253, 193, 
-    232, 224, 25, 5, 75, 232, 224, 25, 5, 76, 232, 224, 218, 74, 1, 191, 232, 
-    224, 218, 74, 1, 205, 232, 224, 218, 74, 1, 212, 65, 232, 224, 4, 1, 176, 
-    232, 224, 4, 1, 229, 78, 232, 224, 4, 1, 254, 76, 232, 224, 4, 1, 217, 
-    106, 232, 224, 4, 1, 197, 232, 224, 4, 1, 190, 232, 224, 4, 1, 185, 232, 
-    224, 4, 1, 205, 232, 224, 4, 1, 233, 136, 232, 224, 5, 230, 90, 232, 224, 
-    5, 234, 172, 232, 224, 5, 222, 33, 232, 224, 5, 232, 128, 232, 224, 245, 
-    32, 78, 232, 224, 224, 14, 78, 232, 224, 21, 210, 86, 232, 224, 21, 110, 
-    232, 224, 21, 105, 232, 224, 21, 158, 232, 224, 21, 161, 232, 224, 21, 
-    189, 232, 224, 21, 194, 232, 224, 21, 198, 232, 224, 21, 195, 232, 224, 
-    21, 200, 39, 233, 60, 1, 176, 39, 233, 60, 1, 211, 165, 39, 233, 60, 1, 
-    229, 78, 39, 233, 60, 1, 215, 184, 39, 233, 60, 1, 206, 39, 233, 60, 1, 
-    191, 39, 233, 60, 1, 217, 106, 39, 233, 60, 1, 216, 209, 39, 233, 60, 1, 
-    233, 136, 39, 233, 60, 1, 190, 39, 233, 60, 1, 225, 148, 39, 233, 60, 1, 
-    185, 39, 233, 60, 1, 244, 197, 39, 233, 60, 1, 214, 27, 39, 233, 60, 1, 
-    162, 39, 233, 60, 1, 224, 89, 39, 233, 60, 1, 234, 133, 39, 233, 60, 1, 
-    215, 176, 39, 233, 60, 1, 197, 39, 233, 60, 1, 61, 39, 233, 60, 1, 73, 
-    39, 233, 60, 1, 245, 210, 39, 233, 60, 1, 245, 198, 39, 233, 60, 1, 70, 
-    39, 233, 60, 1, 226, 184, 39, 233, 60, 1, 76, 39, 233, 60, 1, 214, 214, 
-    39, 233, 60, 1, 75, 39, 233, 60, 1, 253, 191, 39, 233, 60, 1, 254, 202, 
-    39, 233, 60, 1, 216, 29, 39, 233, 60, 1, 216, 28, 39, 233, 60, 1, 216, 
-    27, 39, 233, 60, 1, 216, 26, 39, 233, 60, 1, 216, 25, 166, 39, 173, 1, 
-    125, 224, 89, 166, 39, 173, 1, 121, 224, 89, 166, 39, 173, 1, 125, 176, 
-    166, 39, 173, 1, 125, 211, 165, 166, 39, 173, 1, 125, 229, 78, 166, 39, 
-    173, 1, 121, 176, 166, 39, 173, 1, 121, 211, 165, 166, 39, 173, 1, 121, 
-    229, 78, 166, 39, 173, 1, 125, 215, 184, 166, 39, 173, 1, 125, 206, 166, 
-    39, 173, 1, 125, 191, 166, 39, 173, 1, 121, 215, 184, 166, 39, 173, 1, 
-    121, 206, 166, 39, 173, 1, 121, 191, 166, 39, 173, 1, 125, 217, 106, 166, 
-    39, 173, 1, 125, 216, 209, 166, 39, 173, 1, 125, 197, 166, 39, 173, 1, 
-    121, 217, 106, 166, 39, 173, 1, 121, 216, 209, 166, 39, 173, 1, 121, 197, 
-    166, 39, 173, 1, 125, 190, 166, 39, 173, 1, 125, 225, 148, 166, 39, 173, 
-    1, 125, 185, 166, 39, 173, 1, 121, 190, 166, 39, 173, 1, 121, 225, 148, 
-    166, 39, 173, 1, 121, 185, 166, 39, 173, 1, 125, 244, 197, 166, 39, 173, 
-    1, 125, 214, 27, 166, 39, 173, 1, 125, 233, 136, 166, 39, 173, 1, 121, 
-    244, 197, 166, 39, 173, 1, 121, 214, 27, 166, 39, 173, 1, 121, 233, 136, 
-    166, 39, 173, 1, 125, 162, 166, 39, 173, 1, 125, 248, 222, 166, 39, 173, 
-    1, 125, 252, 192, 166, 39, 173, 1, 121, 162, 166, 39, 173, 1, 121, 248, 
-    222, 166, 39, 173, 1, 121, 252, 192, 166, 39, 173, 1, 125, 233, 185, 166, 
-    39, 173, 1, 125, 211, 138, 166, 39, 173, 1, 121, 233, 185, 166, 39, 173, 
-    1, 121, 211, 138, 166, 39, 173, 1, 125, 218, 83, 166, 39, 173, 1, 121, 
-    218, 83, 166, 39, 173, 25, 5, 25, 219, 240, 166, 39, 173, 25, 5, 255, 74, 
-    166, 39, 173, 25, 5, 236, 34, 166, 39, 173, 25, 5, 70, 166, 39, 173, 25, 
-    5, 214, 118, 166, 39, 173, 25, 5, 75, 166, 39, 173, 25, 5, 254, 244, 166, 
-    39, 173, 25, 5, 76, 166, 39, 173, 25, 5, 227, 1, 166, 39, 173, 25, 5, 
-    214, 214, 166, 39, 173, 25, 5, 253, 168, 166, 39, 173, 25, 5, 255, 29, 
-    166, 39, 173, 25, 5, 214, 111, 166, 39, 173, 25, 5, 226, 110, 166, 39, 
-    173, 25, 5, 226, 254, 166, 39, 173, 25, 5, 214, 210, 166, 39, 173, 25, 5, 
-    235, 153, 166, 39, 173, 1, 40, 214, 105, 166, 39, 173, 1, 40, 229, 80, 
-    166, 39, 173, 1, 40, 230, 26, 166, 39, 173, 1, 40, 193, 166, 39, 173, 1, 
-    40, 235, 24, 166, 39, 173, 1, 40, 249, 61, 166, 39, 173, 1, 40, 253, 159, 
-    166, 39, 173, 138, 231, 159, 166, 39, 173, 138, 231, 158, 166, 39, 173, 
-    21, 210, 86, 166, 39, 173, 21, 110, 166, 39, 173, 21, 105, 166, 39, 173, 
-    21, 158, 166, 39, 173, 21, 161, 166, 39, 173, 21, 189, 166, 39, 173, 21, 
-    194, 166, 39, 173, 21, 198, 166, 39, 173, 21, 195, 166, 39, 173, 21, 200, 
-    166, 39, 173, 89, 21, 110, 166, 39, 173, 5, 233, 121, 166, 39, 173, 5, 
-    233, 120, 69, 16, 225, 237, 69, 16, 230, 73, 234, 26, 69, 16, 225, 73, 
-    234, 26, 69, 16, 252, 51, 234, 26, 69, 16, 251, 105, 234, 26, 69, 16, 
-    224, 217, 234, 26, 69, 16, 224, 211, 234, 26, 69, 16, 224, 209, 234, 26, 
-    69, 16, 224, 215, 234, 26, 69, 16, 224, 213, 234, 26, 69, 16, 248, 174, 
-    234, 26, 69, 16, 248, 170, 234, 26, 69, 16, 248, 169, 234, 26, 69, 16, 
-    248, 172, 234, 26, 69, 16, 248, 171, 234, 26, 69, 16, 248, 168, 234, 26, 
-    69, 16, 215, 87, 69, 16, 230, 73, 222, 206, 69, 16, 225, 73, 222, 206, 
-    69, 16, 252, 51, 222, 206, 69, 16, 251, 105, 222, 206, 69, 16, 224, 217, 
-    222, 206, 69, 16, 224, 211, 222, 206, 69, 16, 224, 209, 222, 206, 69, 16, 
-    224, 215, 222, 206, 69, 16, 224, 213, 222, 206, 69, 16, 248, 174, 222, 
-    206, 69, 16, 248, 170, 222, 206, 69, 16, 248, 169, 222, 206, 69, 16, 248, 
-    172, 222, 206, 69, 16, 248, 171, 222, 206, 69, 16, 248, 168, 222, 206, 
-    251, 122, 1, 176, 251, 122, 1, 243, 136, 251, 122, 1, 229, 78, 251, 122, 
-    1, 229, 23, 251, 122, 1, 190, 251, 122, 1, 252, 192, 251, 122, 1, 185, 
-    251, 122, 1, 230, 106, 251, 122, 1, 217, 106, 251, 122, 1, 248, 222, 251, 
-    122, 1, 197, 251, 122, 1, 228, 37, 251, 122, 1, 251, 34, 251, 122, 1, 
-    235, 142, 251, 122, 1, 227, 166, 251, 122, 1, 227, 159, 251, 122, 1, 191, 
-    251, 122, 1, 205, 251, 122, 1, 233, 136, 251, 122, 1, 214, 27, 251, 122, 
-    1, 206, 251, 122, 1, 61, 251, 122, 1, 162, 251, 122, 25, 5, 73, 251, 122, 
-    25, 5, 70, 251, 122, 25, 5, 75, 251, 122, 25, 5, 76, 251, 122, 25, 5, 
-    254, 244, 251, 122, 226, 61, 251, 122, 245, 144, 64, 221, 173, 39, 89, 1, 
-    125, 176, 39, 89, 1, 125, 234, 133, 39, 89, 1, 125, 233, 172, 39, 89, 1, 
-    121, 176, 39, 89, 1, 121, 233, 172, 39, 89, 1, 121, 234, 133, 39, 89, 1, 
-    229, 78, 39, 89, 1, 125, 251, 34, 39, 89, 1, 125, 250, 158, 39, 89, 1, 
-    121, 251, 34, 39, 89, 1, 121, 206, 39, 89, 1, 121, 250, 158, 39, 89, 1, 
-    227, 166, 39, 89, 1, 223, 141, 39, 89, 1, 125, 223, 139, 39, 89, 1, 248, 
-    222, 39, 89, 1, 121, 223, 139, 39, 89, 1, 223, 150, 39, 89, 1, 125, 217, 
-    106, 39, 89, 1, 125, 216, 209, 39, 89, 1, 121, 217, 106, 39, 89, 1, 121, 
-    216, 209, 39, 89, 1, 197, 39, 89, 1, 252, 192, 39, 89, 1, 125, 190, 39, 
-    89, 1, 125, 225, 148, 39, 89, 1, 125, 244, 197, 39, 89, 1, 121, 190, 39, 
-    89, 1, 121, 244, 197, 39, 89, 1, 121, 225, 148, 39, 89, 1, 185, 39, 89, 
-    1, 121, 191, 39, 89, 1, 125, 191, 39, 89, 1, 205, 39, 89, 1, 222, 138, 
-    39, 89, 1, 233, 136, 39, 89, 1, 232, 94, 39, 89, 1, 212, 65, 39, 89, 1, 
-    125, 220, 103, 39, 89, 1, 125, 218, 224, 39, 89, 1, 125, 206, 39, 89, 1, 
-    125, 162, 39, 89, 1, 232, 185, 39, 89, 1, 61, 39, 89, 1, 121, 162, 39, 
-    89, 1, 73, 39, 89, 1, 236, 34, 39, 89, 1, 70, 39, 89, 1, 214, 118, 39, 
-    89, 1, 245, 210, 39, 89, 1, 226, 184, 39, 89, 1, 233, 121, 39, 89, 1, 
-    242, 133, 206, 39, 89, 116, 5, 147, 205, 39, 89, 116, 5, 147, 233, 136, 
-    39, 89, 116, 5, 233, 137, 217, 59, 233, 110, 39, 89, 5, 231, 205, 234, 
-    232, 233, 110, 39, 89, 116, 5, 40, 229, 78, 39, 89, 116, 5, 121, 190, 39, 
-    89, 116, 5, 125, 223, 140, 177, 121, 190, 39, 89, 116, 5, 185, 39, 89, 
-    116, 5, 252, 192, 39, 89, 116, 5, 206, 39, 89, 5, 222, 11, 39, 89, 25, 5, 
-    61, 39, 89, 25, 5, 231, 205, 221, 227, 39, 89, 25, 5, 255, 74, 39, 89, 
-    25, 5, 217, 65, 255, 74, 39, 89, 25, 5, 73, 39, 89, 25, 5, 236, 34, 39, 
-    89, 25, 5, 214, 214, 39, 89, 25, 5, 214, 117, 39, 89, 25, 5, 70, 39, 89, 
-    25, 5, 214, 118, 39, 89, 25, 5, 76, 39, 89, 25, 5, 227, 2, 51, 39, 89, 
-    25, 5, 226, 110, 39, 89, 25, 5, 75, 39, 89, 25, 5, 254, 244, 39, 89, 25, 
-    5, 226, 184, 39, 89, 25, 5, 254, 202, 39, 89, 25, 5, 89, 254, 202, 39, 
-    89, 25, 5, 227, 2, 48, 39, 89, 5, 231, 205, 234, 231, 39, 89, 5, 216, 30, 
-    39, 89, 5, 216, 29, 39, 89, 5, 234, 98, 216, 28, 39, 89, 5, 234, 98, 216, 
-    27, 39, 89, 5, 234, 98, 216, 26, 39, 89, 5, 223, 189, 242, 46, 39, 89, 5, 
-    231, 205, 221, 254, 39, 89, 5, 234, 97, 234, 216, 39, 89, 38, 249, 116, 
-    247, 121, 39, 89, 241, 47, 21, 210, 86, 39, 89, 241, 47, 21, 110, 39, 89, 
-    241, 47, 21, 105, 39, 89, 241, 47, 21, 158, 39, 89, 241, 47, 21, 161, 39, 
-    89, 241, 47, 21, 189, 39, 89, 241, 47, 21, 194, 39, 89, 241, 47, 21, 198, 
-    39, 89, 241, 47, 21, 195, 39, 89, 241, 47, 21, 200, 39, 89, 89, 21, 210, 
-    86, 39, 89, 89, 21, 110, 39, 89, 89, 21, 105, 39, 89, 89, 21, 158, 39, 
-    89, 89, 21, 161, 39, 89, 89, 21, 189, 39, 89, 89, 21, 194, 39, 89, 89, 
-    21, 198, 39, 89, 89, 21, 195, 39, 89, 89, 21, 200, 39, 89, 5, 211, 249, 
-    39, 89, 5, 211, 248, 39, 89, 5, 221, 216, 39, 89, 5, 234, 161, 39, 89, 5, 
-    240, 233, 39, 89, 5, 247, 135, 39, 89, 5, 223, 50, 222, 188, 223, 150, 
-    39, 89, 5, 231, 205, 211, 72, 39, 89, 5, 235, 7, 39, 89, 5, 235, 6, 39, 
-    89, 5, 221, 223, 39, 89, 5, 221, 222, 39, 89, 5, 242, 10, 39, 89, 5, 251, 
-    31, 102, 5, 214, 200, 223, 31, 102, 5, 214, 200, 251, 2, 102, 5, 250, 
-    187, 102, 5, 218, 16, 102, 5, 251, 234, 102, 1, 254, 185, 102, 1, 254, 
-    186, 217, 14, 102, 1, 236, 30, 102, 1, 236, 31, 217, 14, 102, 1, 214, 
-    203, 102, 1, 214, 204, 217, 14, 102, 1, 223, 189, 223, 80, 102, 1, 223, 
-    189, 223, 81, 217, 14, 102, 1, 233, 137, 233, 25, 102, 1, 233, 137, 233, 
-    26, 217, 14, 102, 1, 245, 180, 102, 1, 254, 200, 102, 1, 226, 213, 102, 
-    1, 226, 214, 217, 14, 102, 1, 176, 102, 1, 235, 14, 231, 208, 102, 1, 
-    243, 136, 102, 1, 243, 137, 242, 162, 102, 1, 229, 78, 102, 1, 251, 34, 
-    102, 1, 251, 35, 233, 124, 102, 1, 235, 142, 102, 1, 235, 143, 235, 119, 
-    102, 1, 227, 166, 102, 1, 217, 107, 233, 77, 102, 1, 217, 107, 230, 68, 
-    231, 208, 102, 1, 248, 223, 230, 68, 254, 146, 102, 1, 248, 223, 230, 68, 
-    231, 208, 102, 1, 229, 230, 223, 153, 102, 1, 217, 106, 102, 1, 217, 107, 
-    217, 36, 102, 1, 248, 222, 102, 1, 248, 223, 231, 226, 102, 1, 197, 102, 
-    1, 190, 102, 1, 226, 91, 234, 227, 102, 1, 252, 192, 102, 1, 252, 193, 
-    234, 173, 102, 1, 185, 102, 1, 191, 102, 1, 205, 102, 1, 233, 136, 102, 
-    1, 212, 65, 102, 1, 222, 35, 222, 21, 102, 1, 222, 35, 221, 234, 102, 1, 
-    206, 102, 1, 162, 102, 5, 223, 71, 102, 25, 5, 217, 14, 102, 25, 5, 214, 
-    199, 102, 25, 5, 214, 200, 221, 230, 102, 25, 5, 218, 48, 102, 25, 5, 
-    218, 49, 236, 22, 102, 25, 5, 223, 189, 223, 80, 102, 25, 5, 223, 189, 
-    223, 81, 217, 14, 102, 25, 5, 233, 137, 233, 25, 102, 25, 5, 233, 137, 
-    233, 26, 217, 14, 102, 25, 5, 217, 66, 102, 25, 5, 217, 67, 223, 80, 102, 
-    25, 5, 217, 67, 217, 14, 102, 25, 5, 217, 67, 223, 81, 217, 14, 102, 25, 
-    5, 225, 185, 102, 25, 5, 225, 186, 217, 14, 102, 254, 251, 254, 250, 102, 
-    1, 234, 252, 221, 229, 102, 1, 234, 103, 221, 229, 102, 1, 215, 34, 221, 
-    229, 102, 1, 245, 204, 221, 229, 102, 1, 214, 0, 221, 229, 102, 1, 210, 
-    107, 221, 229, 102, 1, 253, 210, 221, 229, 102, 21, 210, 86, 102, 21, 
-    110, 102, 21, 105, 102, 21, 158, 102, 21, 161, 102, 21, 189, 102, 21, 
-    194, 102, 21, 198, 102, 21, 195, 102, 21, 200, 102, 226, 30, 102, 226, 
-    56, 102, 211, 238, 102, 250, 237, 226, 49, 102, 250, 237, 219, 173, 102, 
-    250, 237, 226, 3, 102, 226, 55, 102, 28, 16, 247, 127, 102, 28, 16, 248, 
-    52, 102, 28, 16, 246, 65, 102, 28, 16, 248, 177, 102, 28, 16, 248, 178, 
-    218, 16, 102, 28, 16, 247, 206, 102, 28, 16, 248, 215, 102, 28, 16, 248, 
-    34, 102, 28, 16, 248, 199, 102, 28, 16, 248, 178, 243, 58, 102, 28, 16, 
-    38, 217, 10, 102, 28, 16, 38, 245, 142, 102, 28, 16, 38, 234, 168, 102, 
-    28, 16, 38, 234, 170, 102, 28, 16, 38, 235, 123, 102, 28, 16, 38, 234, 
-    169, 2, 235, 123, 102, 28, 16, 38, 234, 171, 2, 235, 123, 102, 28, 16, 
-    38, 252, 38, 102, 28, 16, 38, 242, 166, 102, 28, 16, 222, 250, 204, 246, 
-    75, 102, 28, 16, 222, 250, 204, 248, 213, 102, 28, 16, 222, 250, 250, 1, 
-    215, 112, 102, 28, 16, 222, 250, 250, 1, 217, 74, 102, 28, 16, 233, 45, 
-    204, 226, 44, 102, 28, 16, 233, 45, 204, 224, 140, 102, 28, 16, 233, 45, 
-    250, 1, 225, 39, 102, 28, 16, 233, 45, 250, 1, 225, 27, 102, 28, 16, 233, 
-    45, 204, 225, 62, 207, 5, 226, 27, 207, 5, 226, 40, 207, 5, 226, 36, 207, 
-    1, 61, 207, 1, 73, 207, 1, 70, 207, 1, 254, 244, 207, 1, 76, 207, 1, 75, 
-    207, 1, 245, 56, 207, 1, 176, 207, 1, 224, 89, 207, 1, 243, 136, 207, 1, 
-    229, 78, 207, 1, 251, 34, 207, 1, 235, 142, 207, 1, 210, 116, 207, 1, 
-    227, 166, 207, 1, 217, 106, 207, 1, 248, 222, 207, 1, 197, 207, 1, 190, 
-    207, 1, 244, 197, 207, 1, 214, 27, 207, 1, 252, 192, 207, 1, 185, 207, 1, 
-    191, 207, 1, 205, 207, 1, 233, 136, 207, 1, 212, 65, 207, 1, 206, 207, 1, 
-    211, 165, 207, 1, 162, 207, 116, 5, 226, 53, 207, 116, 5, 226, 29, 207, 
-    116, 5, 226, 26, 207, 25, 5, 226, 43, 207, 25, 5, 226, 25, 207, 25, 5, 
-    226, 47, 207, 25, 5, 226, 35, 207, 25, 5, 226, 54, 207, 25, 5, 226, 45, 
-    207, 5, 226, 57, 207, 5, 213, 152, 207, 116, 5, 225, 249, 185, 207, 116, 
-    5, 225, 249, 212, 65, 207, 1, 234, 133, 207, 1, 217, 232, 207, 21, 210, 
-    86, 207, 21, 110, 207, 21, 105, 207, 21, 158, 207, 21, 161, 207, 21, 189, 
-    207, 21, 194, 207, 21, 198, 207, 21, 195, 207, 21, 200, 207, 253, 176, 
-    207, 1, 223, 53, 207, 1, 233, 8, 207, 1, 252, 19, 207, 1, 40, 235, 24, 
-    207, 1, 40, 193, 252, 121, 1, 61, 252, 121, 1, 219, 165, 61, 252, 121, 1, 
-    162, 252, 121, 1, 219, 165, 162, 252, 121, 1, 231, 182, 162, 252, 121, 1, 
-    252, 192, 252, 121, 1, 234, 213, 252, 192, 252, 121, 1, 190, 252, 121, 1, 
-    219, 165, 190, 252, 121, 1, 197, 252, 121, 1, 231, 182, 197, 252, 121, 1, 
-    212, 65, 252, 121, 1, 219, 165, 212, 65, 252, 121, 1, 226, 68, 212, 65, 
-    252, 121, 1, 243, 136, 252, 121, 1, 219, 165, 243, 136, 252, 121, 1, 235, 
-    142, 252, 121, 1, 248, 222, 252, 121, 1, 205, 252, 121, 1, 219, 165, 205, 
-    252, 121, 1, 185, 252, 121, 1, 219, 165, 185, 252, 121, 1, 219, 27, 217, 
-    106, 252, 121, 1, 228, 56, 217, 106, 252, 121, 1, 206, 252, 121, 1, 219, 
-    165, 206, 252, 121, 1, 231, 182, 206, 252, 121, 1, 191, 252, 121, 1, 219, 
-    165, 191, 252, 121, 1, 229, 78, 252, 121, 1, 233, 136, 252, 121, 1, 219, 
-    165, 233, 136, 252, 121, 1, 227, 166, 252, 121, 1, 251, 34, 252, 121, 1, 
-    229, 149, 252, 121, 1, 231, 125, 252, 121, 1, 73, 252, 121, 1, 70, 252, 
-    121, 5, 216, 34, 252, 121, 25, 5, 75, 252, 121, 25, 5, 226, 68, 75, 252, 
-    121, 25, 5, 245, 210, 252, 121, 25, 5, 73, 252, 121, 25, 5, 234, 213, 73, 
-    252, 121, 25, 5, 76, 252, 121, 25, 5, 234, 213, 76, 252, 121, 25, 5, 70, 
-    252, 121, 25, 5, 104, 31, 219, 165, 206, 252, 121, 116, 5, 229, 80, 252, 
-    121, 116, 5, 242, 61, 252, 121, 226, 38, 252, 121, 226, 34, 252, 121, 16, 
-    251, 242, 229, 230, 231, 38, 252, 121, 16, 251, 242, 225, 65, 252, 121, 
-    16, 251, 242, 235, 49, 252, 121, 16, 251, 242, 226, 38, 196, 1, 176, 196, 
-    1, 234, 40, 196, 1, 234, 133, 196, 1, 243, 136, 196, 1, 242, 187, 196, 1, 
-    229, 78, 196, 1, 251, 34, 196, 1, 250, 158, 196, 1, 235, 142, 196, 1, 
-    227, 166, 196, 1, 217, 106, 196, 1, 216, 209, 196, 1, 248, 222, 196, 1, 
-    197, 196, 1, 190, 196, 1, 225, 43, 196, 1, 225, 148, 196, 1, 244, 197, 
-    196, 1, 244, 76, 196, 1, 252, 192, 196, 1, 251, 223, 196, 1, 185, 196, 1, 
-    230, 169, 196, 1, 215, 184, 196, 1, 215, 176, 196, 1, 246, 39, 196, 1, 
-    191, 196, 1, 205, 196, 1, 233, 136, 196, 1, 162, 196, 1, 241, 154, 196, 
-    1, 214, 27, 196, 1, 206, 196, 1, 220, 103, 196, 1, 212, 65, 196, 1, 61, 
-    196, 218, 74, 1, 191, 196, 218, 74, 1, 205, 196, 25, 5, 255, 74, 196, 25, 
-    5, 73, 196, 25, 5, 76, 196, 25, 5, 226, 184, 196, 25, 5, 70, 196, 25, 5, 
-    214, 118, 196, 25, 5, 75, 196, 116, 5, 235, 24, 196, 116, 5, 193, 196, 
-    116, 5, 156, 196, 116, 5, 230, 26, 196, 116, 5, 226, 106, 196, 116, 5, 
-    153, 196, 116, 5, 217, 153, 196, 116, 5, 227, 143, 196, 116, 5, 234, 231, 
-    196, 5, 223, 151, 196, 5, 227, 206, 196, 224, 142, 217, 104, 196, 224, 
-    142, 227, 153, 216, 121, 217, 104, 196, 224, 142, 250, 165, 196, 224, 
-    142, 215, 171, 250, 165, 196, 224, 142, 215, 170, 196, 21, 210, 86, 196, 
-    21, 110, 196, 21, 105, 196, 21, 158, 196, 21, 161, 196, 21, 189, 196, 21, 
-    194, 196, 21, 198, 196, 21, 195, 196, 21, 200, 196, 1, 215, 157, 196, 1, 
-    215, 145, 196, 1, 248, 136, 226, 211, 250, 104, 21, 210, 86, 226, 211, 
-    250, 104, 21, 110, 226, 211, 250, 104, 21, 105, 226, 211, 250, 104, 21, 
-    158, 226, 211, 250, 104, 21, 161, 226, 211, 250, 104, 21, 189, 226, 211, 
-    250, 104, 21, 194, 226, 211, 250, 104, 21, 198, 226, 211, 250, 104, 21, 
-    195, 226, 211, 250, 104, 21, 200, 226, 211, 250, 104, 1, 233, 136, 226, 
-    211, 250, 104, 1, 253, 207, 226, 211, 250, 104, 1, 254, 217, 226, 211, 
-    250, 104, 1, 254, 116, 226, 211, 250, 104, 1, 254, 179, 226, 211, 250, 
-    104, 1, 233, 135, 226, 211, 250, 104, 1, 255, 36, 226, 211, 250, 104, 1, 
-    255, 37, 226, 211, 250, 104, 1, 255, 35, 226, 211, 250, 104, 1, 255, 30, 
-    226, 211, 250, 104, 1, 232, 242, 226, 211, 250, 104, 1, 235, 172, 226, 
-    211, 250, 104, 1, 236, 35, 226, 211, 250, 104, 1, 235, 191, 226, 211, 
-    250, 104, 1, 235, 180, 226, 211, 250, 104, 1, 232, 99, 226, 211, 250, 
-    104, 1, 214, 221, 226, 211, 250, 104, 1, 214, 219, 226, 211, 250, 104, 1, 
-    214, 168, 226, 211, 250, 104, 1, 214, 111, 226, 211, 250, 104, 1, 233, 
-    59, 226, 211, 250, 104, 1, 245, 109, 226, 211, 250, 104, 1, 245, 213, 
-    226, 211, 250, 104, 1, 245, 151, 226, 211, 250, 104, 1, 245, 87, 226, 
-    211, 250, 104, 1, 232, 157, 226, 211, 250, 104, 1, 226, 138, 226, 211, 
-    250, 104, 1, 226, 253, 226, 211, 250, 104, 1, 226, 126, 226, 211, 250, 
-    104, 1, 226, 223, 226, 211, 250, 104, 230, 104, 215, 122, 226, 211, 250, 
-    104, 243, 131, 215, 123, 226, 211, 250, 104, 230, 102, 215, 123, 226, 
-    211, 250, 104, 223, 93, 226, 211, 250, 104, 225, 146, 226, 211, 250, 104, 
-    254, 209, 226, 211, 250, 104, 224, 142, 230, 99, 226, 211, 250, 104, 224, 
-    142, 52, 230, 99, 207, 224, 142, 251, 242, 218, 9, 207, 224, 142, 251, 
-    242, 226, 39, 207, 224, 142, 251, 242, 224, 130, 207, 224, 142, 251, 242, 
-    251, 20, 207, 224, 142, 251, 242, 233, 9, 221, 226, 207, 224, 142, 251, 
-    242, 235, 14, 221, 226, 207, 224, 142, 251, 242, 248, 223, 221, 226, 207, 
-    224, 142, 251, 242, 252, 193, 221, 226, 213, 252, 138, 234, 211, 213, 
-    252, 138, 220, 78, 213, 252, 138, 224, 199, 213, 252, 5, 228, 210, 213, 
-    252, 5, 211, 80, 230, 223, 218, 1, 213, 252, 138, 211, 80, 254, 214, 235, 
-    244, 218, 1, 213, 252, 138, 211, 80, 235, 244, 218, 1, 213, 252, 138, 
-    211, 80, 234, 199, 235, 244, 218, 1, 213, 252, 138, 251, 3, 51, 213, 252, 
-    138, 211, 80, 234, 199, 235, 244, 218, 2, 221, 198, 213, 252, 138, 52, 
-    218, 1, 213, 252, 138, 215, 212, 218, 1, 213, 252, 138, 234, 199, 254, 
-    78, 213, 252, 138, 59, 51, 213, 252, 138, 113, 170, 51, 213, 252, 138, 
-    134, 170, 51, 213, 252, 138, 222, 241, 234, 210, 235, 244, 218, 1, 213, 
-    252, 138, 253, 205, 235, 244, 218, 1, 213, 252, 5, 213, 148, 218, 1, 213, 
-    252, 5, 213, 148, 214, 216, 213, 252, 5, 223, 50, 213, 148, 214, 216, 
-    213, 252, 5, 213, 148, 254, 78, 213, 252, 5, 223, 50, 213, 148, 254, 78, 
-    213, 252, 5, 213, 148, 214, 217, 2, 217, 78, 213, 252, 5, 213, 148, 254, 
-    79, 2, 217, 78, 213, 252, 5, 254, 77, 254, 92, 213, 252, 5, 254, 77, 252, 
-    167, 213, 252, 5, 254, 77, 214, 20, 213, 252, 5, 254, 77, 214, 21, 2, 
-    217, 78, 213, 252, 5, 216, 69, 213, 252, 5, 241, 192, 199, 254, 76, 213, 
-    252, 5, 199, 254, 76, 213, 252, 5, 222, 143, 199, 254, 76, 213, 252, 5, 
-    254, 77, 214, 223, 230, 91, 213, 252, 5, 254, 21, 213, 252, 5, 222, 188, 
-    254, 21, 213, 252, 138, 251, 3, 48, 213, 252, 5, 235, 103, 213, 252, 5, 
-    214, 161, 7, 1, 4, 6, 61, 7, 1, 4, 6, 254, 244, 7, 4, 1, 215, 94, 254, 
-    244, 7, 1, 4, 6, 252, 135, 253, 159, 7, 1, 4, 6, 251, 67, 7, 1, 4, 6, 
-    249, 61, 7, 1, 4, 6, 245, 60, 7, 1, 4, 6, 75, 7, 4, 1, 215, 94, 204, 75, 
-    7, 4, 1, 215, 94, 73, 7, 1, 4, 6, 235, 145, 7, 1, 4, 6, 235, 24, 7, 1, 4, 
-    6, 233, 150, 2, 91, 7, 1, 4, 6, 193, 7, 1, 4, 6, 223, 50, 230, 26, 7, 1, 
-    4, 6, 76, 7, 1, 4, 6, 204, 76, 7, 4, 1, 219, 188, 76, 7, 4, 1, 219, 188, 
-    204, 76, 7, 4, 1, 219, 188, 144, 2, 91, 7, 4, 1, 215, 94, 226, 235, 7, 1, 
-    4, 6, 226, 135, 7, 4, 1, 216, 15, 163, 76, 7, 4, 1, 251, 176, 163, 76, 7, 
-    1, 4, 6, 226, 106, 7, 1, 4, 6, 223, 50, 153, 7, 1, 4, 6, 215, 94, 153, 7, 
-    1, 4, 6, 217, 153, 7, 1, 4, 6, 70, 7, 4, 1, 219, 188, 70, 7, 4, 1, 219, 
-    188, 248, 1, 70, 7, 4, 1, 219, 188, 215, 94, 193, 7, 1, 4, 6, 214, 105, 
-    7, 1, 4, 6, 212, 98, 7, 1, 4, 6, 210, 159, 7, 1, 4, 6, 245, 9, 7, 1, 213, 
-    135, 233, 83, 218, 251, 7, 1, 254, 197, 26, 1, 4, 6, 243, 108, 26, 1, 4, 
-    6, 233, 99, 26, 1, 4, 6, 225, 109, 26, 1, 4, 6, 223, 38, 26, 1, 4, 6, 
-    224, 162, 33, 1, 4, 6, 245, 175, 58, 1, 6, 61, 58, 1, 6, 254, 244, 58, 1, 
-    6, 253, 159, 58, 1, 6, 252, 135, 253, 159, 58, 1, 6, 249, 61, 58, 1, 6, 
-    75, 58, 1, 6, 223, 50, 75, 58, 1, 6, 243, 203, 58, 1, 6, 242, 61, 58, 1, 
-    6, 73, 58, 1, 6, 235, 145, 58, 1, 6, 235, 24, 58, 1, 6, 156, 58, 1, 6, 
-    193, 58, 1, 6, 230, 26, 58, 1, 6, 223, 50, 230, 26, 58, 1, 6, 76, 58, 1, 
-    6, 226, 135, 58, 1, 6, 226, 106, 58, 1, 6, 153, 58, 1, 6, 217, 153, 58, 
-    1, 6, 70, 58, 1, 6, 212, 98, 58, 1, 4, 61, 58, 1, 4, 215, 94, 61, 58, 1, 
-    4, 254, 144, 58, 1, 4, 215, 94, 254, 244, 58, 1, 4, 253, 159, 58, 1, 4, 
-    249, 61, 58, 1, 4, 75, 58, 1, 4, 221, 196, 58, 1, 4, 204, 75, 58, 1, 4, 
-    215, 94, 204, 75, 58, 1, 4, 243, 203, 58, 1, 4, 215, 94, 73, 58, 1, 4, 
-    235, 24, 58, 1, 4, 193, 58, 1, 4, 245, 139, 58, 1, 4, 76, 58, 1, 4, 204, 
-    76, 58, 1, 4, 216, 15, 163, 76, 58, 1, 4, 251, 176, 163, 76, 58, 1, 4, 
-    226, 106, 58, 1, 4, 217, 153, 58, 1, 4, 70, 58, 1, 4, 219, 188, 70, 58, 
-    1, 4, 215, 94, 193, 58, 1, 4, 214, 105, 58, 1, 4, 254, 197, 58, 1, 4, 
-    252, 27, 58, 1, 4, 26, 243, 108, 58, 1, 4, 248, 55, 58, 1, 4, 26, 225, 
-    134, 58, 1, 4, 250, 111, 7, 218, 66, 4, 1, 73, 7, 218, 66, 4, 1, 153, 7, 
-    218, 66, 4, 1, 70, 7, 218, 66, 4, 1, 214, 105, 26, 218, 66, 4, 1, 252, 
-    27, 26, 218, 66, 4, 1, 243, 108, 26, 218, 66, 4, 1, 223, 38, 26, 218, 66, 
-    4, 1, 225, 134, 26, 218, 66, 4, 1, 250, 111, 7, 4, 1, 214, 214, 7, 4, 1, 
-    57, 2, 230, 225, 183, 7, 4, 1, 249, 62, 2, 230, 225, 183, 7, 4, 1, 245, 
-    8, 2, 230, 225, 183, 7, 4, 1, 232, 51, 2, 230, 225, 183, 7, 4, 1, 230, 
-    27, 2, 230, 225, 183, 7, 4, 1, 226, 107, 2, 230, 225, 183, 7, 4, 1, 223, 
-    225, 2, 230, 225, 183, 7, 4, 1, 223, 225, 2, 244, 89, 22, 230, 225, 183, 
-    7, 4, 1, 222, 93, 2, 230, 225, 183, 7, 4, 1, 217, 154, 2, 230, 225, 183, 
-    7, 4, 1, 210, 160, 2, 230, 225, 183, 7, 4, 1, 215, 94, 243, 203, 58, 1, 
-    33, 245, 151, 7, 4, 1, 235, 214, 243, 203, 7, 4, 1, 216, 212, 2, 218, 
-    108, 7, 4, 6, 1, 240, 155, 2, 91, 7, 4, 1, 235, 187, 2, 91, 7, 4, 1, 226, 
-    107, 2, 91, 7, 4, 6, 1, 104, 2, 91, 7, 4, 1, 214, 158, 2, 91, 7, 4, 1, 
-    57, 2, 226, 67, 103, 7, 4, 1, 249, 62, 2, 226, 67, 103, 7, 4, 1, 245, 8, 
-    2, 226, 67, 103, 7, 4, 1, 243, 204, 2, 226, 67, 103, 7, 4, 1, 235, 25, 2, 
-    226, 67, 103, 7, 4, 1, 233, 150, 2, 226, 67, 103, 7, 4, 1, 232, 51, 2, 
-    226, 67, 103, 7, 4, 1, 230, 27, 2, 226, 67, 103, 7, 4, 1, 226, 107, 2, 
-    226, 67, 103, 7, 4, 1, 223, 225, 2, 226, 67, 103, 7, 4, 1, 222, 93, 2, 
-    226, 67, 103, 7, 4, 1, 245, 77, 2, 226, 67, 103, 7, 4, 1, 214, 106, 2, 
-    226, 67, 103, 7, 4, 1, 211, 179, 2, 226, 67, 103, 7, 4, 1, 210, 160, 2, 
-    226, 67, 103, 7, 4, 1, 115, 2, 223, 56, 103, 7, 4, 1, 254, 145, 2, 223, 
-    56, 103, 7, 4, 1, 249, 62, 2, 241, 53, 22, 217, 78, 7, 4, 1, 160, 2, 223, 
-    56, 103, 7, 4, 1, 204, 160, 2, 223, 56, 103, 7, 4, 1, 223, 50, 204, 160, 
-    2, 223, 56, 103, 7, 4, 1, 221, 197, 2, 223, 56, 103, 7, 4, 1, 240, 155, 
-    2, 223, 56, 103, 7, 4, 1, 204, 144, 2, 223, 56, 103, 7, 4, 1, 245, 77, 2, 
-    223, 56, 103, 7, 4, 1, 104, 2, 223, 56, 103, 7, 4, 1, 245, 10, 2, 223, 
-    56, 103, 58, 1, 4, 215, 94, 254, 144, 58, 1, 4, 251, 67, 58, 1, 4, 251, 
-    68, 2, 249, 101, 58, 1, 4, 245, 60, 58, 1, 4, 223, 50, 204, 75, 58, 1, 4, 
-    245, 7, 58, 1, 4, 247, 120, 235, 146, 2, 91, 58, 1, 4, 119, 243, 203, 58, 
-    1, 4, 215, 94, 242, 61, 58, 1, 4, 240, 155, 2, 91, 58, 1, 4, 235, 186, 
-    58, 1, 4, 6, 73, 58, 1, 4, 6, 240, 155, 2, 91, 58, 1, 4, 235, 146, 2, 
-    249, 128, 58, 1, 4, 233, 150, 2, 223, 56, 103, 58, 1, 4, 233, 150, 2, 
-    226, 67, 103, 58, 1, 4, 6, 156, 58, 1, 4, 232, 51, 2, 103, 58, 1, 4, 215, 
-    94, 232, 51, 2, 199, 233, 37, 58, 1, 4, 230, 27, 2, 43, 103, 58, 1, 4, 
-    230, 27, 2, 223, 56, 103, 58, 1, 4, 6, 230, 26, 58, 1, 4, 252, 135, 76, 
-    58, 1, 4, 225, 134, 58, 1, 4, 222, 93, 2, 103, 58, 1, 4, 245, 76, 58, 1, 
-    4, 217, 154, 2, 226, 67, 103, 58, 1, 4, 104, 130, 58, 1, 4, 214, 157, 58, 
-    1, 4, 6, 70, 58, 1, 4, 214, 106, 2, 103, 58, 1, 4, 215, 94, 214, 105, 58, 
-    1, 4, 210, 159, 58, 1, 4, 210, 160, 2, 223, 56, 103, 58, 1, 4, 210, 160, 
-    2, 249, 101, 58, 1, 4, 245, 9, 58, 1, 4, 216, 180, 38, 246, 119, 242, 
-    138, 255, 15, 38, 246, 119, 255, 4, 255, 15, 38, 219, 70, 51, 38, 218, 7, 
-    78, 38, 231, 232, 38, 242, 135, 38, 231, 230, 38, 255, 2, 38, 242, 136, 
-    38, 255, 3, 38, 7, 4, 1, 223, 225, 51, 38, 251, 146, 38, 231, 231, 38, 
-    52, 250, 32, 48, 38, 226, 226, 48, 38, 210, 35, 51, 38, 235, 173, 51, 38, 
-    214, 151, 48, 38, 214, 134, 48, 38, 7, 4, 1, 244, 64, 204, 115, 48, 38, 
-    7, 4, 1, 254, 244, 38, 7, 4, 1, 254, 74, 38, 7, 4, 1, 253, 177, 38, 7, 4, 
-    1, 251, 68, 250, 184, 38, 7, 4, 1, 235, 214, 249, 61, 38, 7, 4, 1, 245, 
-    60, 38, 7, 4, 1, 243, 203, 38, 7, 1, 4, 6, 243, 203, 38, 7, 4, 1, 235, 
-    24, 38, 7, 4, 1, 156, 38, 7, 1, 4, 6, 156, 38, 7, 1, 4, 6, 193, 38, 7, 4, 
-    1, 230, 26, 38, 7, 1, 4, 6, 230, 26, 38, 7, 1, 4, 6, 153, 38, 7, 4, 1, 
-    223, 225, 222, 187, 38, 7, 4, 1, 222, 92, 38, 7, 4, 1, 199, 222, 92, 38, 
-    7, 4, 1, 210, 159, 38, 52, 235, 194, 251, 148, 51, 38, 254, 149, 128, 
-    216, 43, 51, 38, 43, 253, 251, 48, 38, 44, 253, 251, 22, 124, 253, 251, 
-    51, 7, 6, 1, 115, 2, 222, 235, 51, 7, 4, 1, 115, 2, 222, 235, 51, 7, 6, 
-    1, 57, 2, 59, 48, 7, 4, 1, 57, 2, 59, 48, 7, 6, 1, 57, 2, 59, 51, 7, 4, 
-    1, 57, 2, 59, 51, 7, 6, 1, 57, 2, 232, 215, 51, 7, 4, 1, 57, 2, 232, 215, 
-    51, 7, 6, 1, 251, 68, 2, 250, 185, 22, 142, 7, 4, 1, 251, 68, 2, 250, 
-    185, 22, 142, 7, 6, 1, 249, 62, 2, 59, 48, 7, 4, 1, 249, 62, 2, 59, 48, 
-    7, 6, 1, 249, 62, 2, 59, 51, 7, 4, 1, 249, 62, 2, 59, 51, 7, 6, 1, 249, 
-    62, 2, 232, 215, 51, 7, 4, 1, 249, 62, 2, 232, 215, 51, 7, 6, 1, 249, 62, 
-    2, 250, 184, 7, 4, 1, 249, 62, 2, 250, 184, 7, 6, 1, 249, 62, 2, 250, 32, 
-    51, 7, 4, 1, 249, 62, 2, 250, 32, 51, 7, 6, 1, 160, 2, 231, 234, 22, 242, 
-    137, 7, 4, 1, 160, 2, 231, 234, 22, 242, 137, 7, 6, 1, 160, 2, 231, 234, 
-    22, 142, 7, 4, 1, 160, 2, 231, 234, 22, 142, 7, 6, 1, 160, 2, 250, 32, 
-    51, 7, 4, 1, 160, 2, 250, 32, 51, 7, 6, 1, 160, 2, 216, 90, 51, 7, 4, 1, 
-    160, 2, 216, 90, 51, 7, 6, 1, 160, 2, 250, 185, 22, 251, 147, 7, 4, 1, 
-    160, 2, 250, 185, 22, 251, 147, 7, 6, 1, 245, 8, 2, 59, 48, 7, 4, 1, 245, 
-    8, 2, 59, 48, 7, 6, 1, 243, 204, 2, 231, 233, 7, 4, 1, 243, 204, 2, 231, 
-    233, 7, 6, 1, 242, 62, 2, 59, 48, 7, 4, 1, 242, 62, 2, 59, 48, 7, 6, 1, 
-    242, 62, 2, 59, 51, 7, 4, 1, 242, 62, 2, 59, 51, 7, 6, 1, 242, 62, 2, 
-    248, 2, 7, 4, 1, 242, 62, 2, 248, 2, 7, 6, 1, 242, 62, 2, 250, 184, 7, 4, 
-    1, 242, 62, 2, 250, 184, 7, 6, 1, 242, 62, 2, 251, 148, 51, 7, 4, 1, 242, 
-    62, 2, 251, 148, 51, 7, 6, 1, 240, 155, 2, 216, 90, 51, 7, 4, 1, 240, 
-    155, 2, 216, 90, 51, 7, 6, 1, 240, 155, 2, 248, 3, 22, 142, 7, 4, 1, 240, 
-    155, 2, 248, 3, 22, 142, 7, 6, 1, 235, 25, 2, 142, 7, 4, 1, 235, 25, 2, 
-    142, 7, 6, 1, 235, 25, 2, 59, 51, 7, 4, 1, 235, 25, 2, 59, 51, 7, 6, 1, 
-    235, 25, 2, 232, 215, 51, 7, 4, 1, 235, 25, 2, 232, 215, 51, 7, 6, 1, 
-    233, 150, 2, 59, 51, 7, 4, 1, 233, 150, 2, 59, 51, 7, 6, 1, 233, 150, 2, 
-    59, 252, 44, 22, 231, 233, 7, 4, 1, 233, 150, 2, 59, 252, 44, 22, 231, 
-    233, 7, 6, 1, 233, 150, 2, 232, 215, 51, 7, 4, 1, 233, 150, 2, 232, 215, 
-    51, 7, 6, 1, 233, 150, 2, 250, 32, 51, 7, 4, 1, 233, 150, 2, 250, 32, 51, 
-    7, 6, 1, 232, 51, 2, 142, 7, 4, 1, 232, 51, 2, 142, 7, 6, 1, 232, 51, 2, 
-    59, 48, 7, 4, 1, 232, 51, 2, 59, 48, 7, 6, 1, 232, 51, 2, 59, 51, 7, 4, 
-    1, 232, 51, 2, 59, 51, 7, 6, 1, 230, 27, 2, 59, 48, 7, 4, 1, 230, 27, 2, 
-    59, 48, 7, 6, 1, 230, 27, 2, 59, 51, 7, 4, 1, 230, 27, 2, 59, 51, 7, 6, 
-    1, 230, 27, 2, 232, 215, 51, 7, 4, 1, 230, 27, 2, 232, 215, 51, 7, 6, 1, 
-    230, 27, 2, 250, 32, 51, 7, 4, 1, 230, 27, 2, 250, 32, 51, 7, 6, 1, 144, 
-    2, 216, 90, 22, 142, 7, 4, 1, 144, 2, 216, 90, 22, 142, 7, 6, 1, 144, 2, 
-    216, 90, 22, 248, 2, 7, 4, 1, 144, 2, 216, 90, 22, 248, 2, 7, 6, 1, 144, 
-    2, 231, 234, 22, 242, 137, 7, 4, 1, 144, 2, 231, 234, 22, 242, 137, 7, 6, 
-    1, 144, 2, 231, 234, 22, 142, 7, 4, 1, 144, 2, 231, 234, 22, 142, 7, 6, 
-    1, 226, 107, 2, 142, 7, 4, 1, 226, 107, 2, 142, 7, 6, 1, 226, 107, 2, 59, 
-    48, 7, 4, 1, 226, 107, 2, 59, 48, 7, 6, 1, 223, 225, 2, 59, 48, 7, 4, 1, 
-    223, 225, 2, 59, 48, 7, 6, 1, 223, 225, 2, 59, 51, 7, 4, 1, 223, 225, 2, 
-    59, 51, 7, 6, 1, 223, 225, 2, 59, 252, 44, 22, 231, 233, 7, 4, 1, 223, 
-    225, 2, 59, 252, 44, 22, 231, 233, 7, 6, 1, 223, 225, 2, 232, 215, 51, 7, 
-    4, 1, 223, 225, 2, 232, 215, 51, 7, 6, 1, 222, 93, 2, 59, 48, 7, 4, 1, 
-    222, 93, 2, 59, 48, 7, 6, 1, 222, 93, 2, 59, 51, 7, 4, 1, 222, 93, 2, 59, 
-    51, 7, 6, 1, 222, 93, 2, 255, 4, 22, 59, 48, 7, 4, 1, 222, 93, 2, 255, 4, 
-    22, 59, 48, 7, 6, 1, 222, 93, 2, 250, 236, 22, 59, 48, 7, 4, 1, 222, 93, 
-    2, 250, 236, 22, 59, 48, 7, 6, 1, 222, 93, 2, 59, 252, 44, 22, 59, 48, 7, 
-    4, 1, 222, 93, 2, 59, 252, 44, 22, 59, 48, 7, 6, 1, 217, 154, 2, 59, 48, 
+    254, 18, 19, 232, 253, 18, 19, 232, 252, 18, 19, 232, 251, 18, 19, 233, 
+    4, 18, 19, 233, 3, 18, 19, 233, 5, 18, 19, 216, 210, 216, 196, 18, 19, 
+    216, 210, 216, 176, 18, 19, 216, 210, 216, 172, 18, 19, 216, 210, 216, 
+    157, 18, 19, 216, 210, 216, 154, 18, 19, 216, 210, 216, 209, 18, 19, 216, 
+    210, 216, 208, 18, 19, 216, 210, 216, 211, 18, 19, 254, 198, 253, 166, 
+    18, 19, 251, 226, 76, 18, 19, 251, 226, 74, 18, 19, 251, 226, 78, 18, 19, 
+    251, 226, 61, 18, 19, 251, 226, 212, 22, 18, 19, 251, 226, 211, 250, 18, 
+    19, 251, 226, 211, 227, 18, 19, 251, 226, 212, 65, 18, 19, 251, 226, 229, 
+    112, 18, 19, 251, 226, 228, 238, 18, 19, 251, 226, 228, 79, 18, 19, 251, 
+    226, 198, 18, 19, 251, 226, 234, 188, 18, 19, 251, 226, 234, 98, 18, 19, 
+    251, 226, 234, 34, 18, 19, 251, 226, 176, 18, 19, 221, 211, 241, 245, 18, 
+    19, 221, 211, 241, 187, 18, 19, 221, 211, 241, 75, 18, 19, 221, 211, 162, 
+    18, 19, 73, 242, 227, 18, 19, 73, 242, 231, 18, 19, 73, 242, 243, 18, 19, 
+    73, 242, 242, 18, 19, 73, 242, 232, 18, 19, 73, 243, 0, 18, 19, 73, 222, 
+    142, 18, 19, 73, 222, 213, 18, 19, 73, 223, 131, 18, 19, 73, 223, 111, 
+    18, 19, 73, 223, 38, 18, 19, 73, 205, 18, 19, 73, 211, 195, 18, 19, 73, 
+    211, 227, 18, 19, 73, 212, 22, 18, 19, 73, 212, 17, 18, 19, 73, 211, 250, 
+    18, 19, 73, 212, 65, 18, 19, 73, 240, 201, 18, 19, 73, 240, 202, 18, 19, 
+    73, 240, 205, 18, 19, 73, 240, 204, 18, 19, 73, 240, 203, 18, 19, 73, 
+    240, 207, 18, 19, 73, 216, 137, 18, 19, 73, 216, 157, 18, 19, 73, 216, 
+    196, 18, 19, 73, 216, 195, 18, 19, 73, 216, 176, 18, 19, 73, 216, 209, 
+    18, 19, 73, 215, 124, 18, 19, 73, 215, 134, 18, 19, 73, 215, 152, 18, 19, 
+    73, 215, 151, 18, 19, 73, 215, 136, 18, 19, 73, 215, 157, 18, 19, 73, 
+    224, 153, 18, 19, 73, 225, 19, 18, 19, 73, 225, 224, 18, 19, 73, 225, 
+    214, 18, 19, 73, 225, 111, 18, 19, 73, 191, 18, 19, 73, 226, 109, 18, 19, 
+    73, 242, 120, 18, 19, 73, 242, 181, 18, 19, 73, 243, 69, 18, 19, 73, 243, 
+    62, 18, 19, 73, 242, 221, 18, 19, 73, 243, 142, 18, 19, 73, 234, 106, 18, 
+    19, 73, 234, 111, 18, 19, 73, 234, 125, 18, 19, 73, 234, 124, 18, 19, 73, 
+    234, 118, 18, 19, 73, 234, 138, 18, 19, 73, 234, 47, 18, 19, 73, 234, 48, 
+    18, 19, 73, 234, 51, 18, 19, 73, 234, 50, 18, 19, 73, 234, 49, 18, 19, 
+    73, 234, 52, 18, 19, 73, 234, 53, 18, 19, 73, 227, 242, 18, 19, 73, 228, 
+    79, 18, 19, 73, 229, 112, 18, 19, 73, 229, 108, 18, 19, 73, 228, 238, 18, 
+    19, 73, 198, 18, 19, 73, 230, 107, 18, 19, 73, 230, 166, 18, 19, 73, 231, 
+    96, 18, 19, 73, 231, 85, 18, 19, 73, 230, 235, 18, 19, 73, 186, 18, 19, 
+    73, 210, 212, 18, 19, 73, 210, 244, 18, 19, 73, 211, 47, 18, 19, 73, 211, 
+    44, 18, 19, 73, 211, 8, 18, 19, 73, 192, 18, 19, 73, 235, 57, 18, 19, 
+    221, 211, 235, 57, 18, 19, 73, 235, 74, 18, 19, 73, 235, 132, 18, 19, 73, 
+    235, 130, 18, 19, 73, 235, 114, 18, 19, 221, 211, 235, 114, 18, 19, 73, 
+    235, 147, 18, 19, 73, 235, 87, 18, 19, 73, 235, 91, 18, 19, 73, 235, 101, 
+    18, 19, 73, 235, 100, 18, 19, 73, 235, 99, 18, 19, 73, 235, 102, 18, 19, 
+    73, 232, 103, 18, 19, 73, 232, 162, 18, 19, 73, 233, 64, 18, 19, 73, 233, 
+    56, 18, 19, 73, 232, 247, 18, 19, 73, 233, 141, 18, 19, 73, 247, 157, 18, 
+    19, 73, 247, 158, 18, 19, 73, 247, 163, 18, 19, 73, 247, 162, 18, 19, 73, 
+    247, 159, 18, 19, 73, 247, 164, 18, 19, 73, 232, 250, 18, 19, 73, 232, 
+    252, 18, 19, 73, 233, 0, 18, 19, 73, 232, 255, 18, 19, 73, 232, 254, 18, 
+    19, 73, 233, 4, 18, 19, 73, 216, 51, 18, 19, 73, 216, 53, 18, 19, 73, 
+    216, 56, 18, 19, 73, 216, 55, 18, 19, 73, 216, 54, 18, 19, 73, 216, 57, 
+    18, 19, 73, 216, 46, 18, 19, 73, 216, 47, 18, 19, 73, 216, 59, 18, 19, 
+    73, 216, 58, 18, 19, 73, 216, 48, 18, 19, 73, 216, 60, 18, 19, 73, 210, 
+    13, 18, 19, 73, 210, 23, 18, 19, 73, 210, 94, 18, 19, 73, 210, 92, 18, 
+    19, 73, 210, 44, 18, 19, 73, 210, 116, 18, 19, 73, 210, 159, 18, 19, 73, 
+    65, 210, 159, 18, 19, 73, 246, 36, 18, 19, 73, 246, 37, 18, 19, 73, 246, 
+    44, 18, 19, 73, 246, 43, 18, 19, 73, 246, 39, 18, 19, 73, 246, 46, 18, 
+    19, 73, 218, 84, 18, 19, 73, 219, 60, 18, 19, 73, 221, 183, 18, 19, 73, 
+    221, 172, 18, 19, 73, 219, 193, 18, 19, 73, 206, 18, 19, 73, 219, 227, 
+    18, 19, 73, 220, 9, 18, 19, 73, 220, 65, 18, 19, 73, 220, 63, 18, 19, 73, 
+    220, 34, 18, 19, 73, 220, 104, 18, 19, 73, 220, 106, 18, 19, 73, 215, 
+    164, 18, 19, 73, 215, 167, 18, 19, 73, 215, 179, 18, 19, 73, 215, 178, 
+    18, 19, 73, 215, 168, 18, 19, 73, 215, 184, 18, 19, 73, 250, 77, 18, 19, 
+    73, 250, 94, 18, 19, 73, 250, 139, 18, 19, 73, 250, 136, 18, 19, 73, 250, 
+    118, 18, 19, 73, 250, 165, 18, 19, 73, 215, 127, 18, 19, 73, 215, 128, 
+    18, 19, 73, 215, 131, 18, 19, 73, 215, 130, 18, 19, 73, 215, 129, 18, 19, 
+    73, 215, 132, 18, 19, 250, 119, 50, 18, 19, 243, 236, 218, 131, 18, 19, 
+    224, 83, 18, 19, 229, 78, 18, 19, 228, 105, 18, 19, 228, 104, 18, 19, 
+    228, 103, 18, 19, 228, 102, 18, 19, 228, 107, 18, 19, 228, 106, 18, 19, 
+    211, 213, 216, 126, 18, 19, 211, 213, 216, 125, 18, 19, 211, 213, 216, 
+    124, 18, 19, 211, 213, 216, 123, 18, 19, 211, 213, 216, 122, 18, 19, 211, 
+    213, 216, 129, 18, 19, 211, 213, 216, 128, 18, 19, 211, 213, 40, 216, 
+    211, 18, 19, 251, 226, 212, 98, 226, 230, 219, 21, 79, 226, 230, 1, 252, 
+    56, 226, 230, 1, 232, 92, 226, 230, 1, 244, 159, 226, 230, 1, 222, 17, 
+    226, 230, 1, 228, 198, 226, 230, 1, 214, 226, 226, 230, 1, 248, 205, 226, 
+    230, 1, 216, 81, 226, 230, 1, 249, 237, 226, 230, 1, 250, 188, 226, 230, 
+    1, 230, 96, 226, 230, 1, 242, 163, 226, 230, 1, 229, 68, 226, 230, 1, 
+    218, 124, 226, 230, 1, 222, 137, 226, 230, 1, 254, 207, 226, 230, 1, 226, 
+    191, 226, 230, 1, 214, 150, 226, 230, 1, 245, 239, 226, 230, 1, 235, 195, 
+    226, 230, 1, 245, 240, 226, 230, 1, 226, 162, 226, 230, 1, 214, 206, 226, 
+    230, 1, 236, 46, 226, 230, 1, 245, 237, 226, 230, 1, 225, 205, 226, 230, 
+    244, 158, 79, 226, 230, 223, 52, 244, 158, 79, 178, 1, 244, 149, 244, 
+    141, 244, 163, 245, 14, 178, 1, 214, 105, 178, 1, 214, 135, 214, 151, 69, 
+    178, 1, 210, 214, 178, 1, 211, 117, 178, 1, 212, 98, 178, 1, 216, 131, 
+    216, 130, 216, 152, 178, 1, 245, 67, 178, 1, 254, 101, 61, 178, 1, 226, 
+    147, 78, 178, 1, 255, 26, 61, 178, 1, 254, 236, 178, 1, 232, 139, 78, 
+    178, 1, 219, 246, 78, 178, 1, 78, 178, 1, 226, 238, 178, 1, 226, 200, 
+    178, 1, 223, 167, 223, 180, 223, 97, 153, 178, 1, 234, 199, 178, 1, 250, 
+    185, 178, 1, 234, 200, 235, 29, 178, 1, 243, 209, 178, 1, 245, 146, 178, 
+    1, 243, 65, 242, 73, 243, 209, 178, 1, 243, 103, 178, 1, 211, 188, 211, 
+    182, 212, 98, 178, 1, 242, 45, 242, 67, 178, 1, 242, 49, 242, 67, 178, 1, 
+    232, 141, 242, 67, 178, 1, 219, 249, 242, 67, 178, 1, 229, 190, 227, 161, 
+    229, 191, 230, 30, 178, 1, 219, 247, 230, 30, 178, 1, 246, 123, 178, 1, 
+    235, 175, 235, 179, 235, 168, 74, 178, 1, 76, 178, 1, 235, 123, 235, 150, 
+    178, 1, 243, 50, 178, 1, 232, 142, 254, 252, 178, 1, 219, 251, 61, 178, 
+    1, 235, 160, 245, 121, 178, 1, 225, 167, 225, 189, 226, 109, 178, 1, 254, 
+    172, 245, 119, 178, 1, 219, 26, 222, 93, 178, 1, 219, 181, 232, 138, 222, 
+    93, 178, 1, 219, 245, 222, 93, 178, 1, 251, 74, 178, 1, 210, 159, 178, 1, 
+    216, 64, 216, 74, 215, 41, 217, 153, 178, 1, 219, 244, 217, 153, 178, 1, 
+    249, 68, 178, 1, 252, 39, 252, 42, 251, 232, 253, 166, 178, 1, 219, 250, 
+    253, 166, 178, 1, 246, 122, 178, 1, 226, 175, 178, 1, 245, 204, 245, 206, 
+    76, 178, 1, 231, 183, 231, 191, 194, 178, 1, 232, 140, 194, 178, 1, 219, 
+    248, 194, 178, 1, 233, 79, 233, 120, 232, 149, 156, 178, 1, 246, 124, 
+    178, 1, 235, 237, 178, 1, 235, 238, 178, 1, 248, 218, 248, 223, 249, 68, 
+    178, 1, 226, 142, 245, 66, 78, 178, 1, 245, 235, 178, 1, 235, 194, 178, 
+    1, 249, 86, 178, 1, 251, 25, 178, 1, 250, 197, 178, 1, 218, 163, 178, 1, 
+    232, 137, 178, 1, 219, 243, 178, 1, 240, 117, 178, 1, 224, 99, 178, 1, 
+    211, 178, 178, 219, 157, 224, 143, 178, 230, 90, 224, 143, 178, 249, 139, 
+    224, 143, 178, 254, 14, 87, 178, 215, 82, 87, 178, 252, 54, 87, 217, 84, 
+    1, 61, 217, 84, 1, 74, 217, 84, 1, 69, 217, 84, 1, 176, 217, 84, 1, 243, 
+    142, 217, 84, 1, 229, 82, 217, 84, 1, 217, 106, 217, 84, 1, 248, 229, 
+    217, 84, 1, 198, 217, 84, 1, 191, 217, 84, 1, 252, 199, 217, 84, 1, 186, 
+    217, 84, 1, 192, 217, 84, 1, 233, 141, 217, 84, 1, 212, 65, 217, 84, 1, 
+    206, 217, 84, 1, 162, 217, 84, 25, 5, 74, 217, 84, 25, 5, 69, 217, 84, 5, 
+    213, 152, 242, 14, 1, 61, 242, 14, 1, 74, 242, 14, 1, 69, 242, 14, 1, 
+    176, 242, 14, 1, 243, 142, 242, 14, 1, 229, 82, 242, 14, 1, 217, 106, 
+    242, 14, 1, 248, 229, 242, 14, 1, 198, 242, 14, 1, 191, 242, 14, 1, 252, 
+    199, 242, 14, 1, 186, 242, 14, 1, 192, 242, 14, 1, 205, 242, 14, 1, 233, 
+    141, 242, 14, 1, 212, 65, 242, 14, 1, 206, 242, 14, 1, 162, 242, 14, 25, 
+    5, 74, 242, 14, 25, 5, 69, 242, 14, 5, 226, 53, 225, 129, 219, 157, 224, 
+    143, 225, 129, 52, 224, 143, 251, 128, 1, 61, 251, 128, 1, 74, 251, 128, 
+    1, 69, 251, 128, 1, 176, 251, 128, 1, 243, 142, 251, 128, 1, 229, 82, 
+    251, 128, 1, 217, 106, 251, 128, 1, 248, 229, 251, 128, 1, 198, 251, 128, 
+    1, 191, 251, 128, 1, 252, 199, 251, 128, 1, 186, 251, 128, 1, 192, 251, 
+    128, 1, 205, 251, 128, 1, 233, 141, 251, 128, 1, 212, 65, 251, 128, 1, 
+    206, 251, 128, 1, 162, 251, 128, 25, 5, 74, 251, 128, 25, 5, 69, 217, 83, 
+    1, 61, 217, 83, 1, 74, 217, 83, 1, 69, 217, 83, 1, 176, 217, 83, 1, 243, 
+    142, 217, 83, 1, 229, 82, 217, 83, 1, 217, 106, 217, 83, 1, 248, 229, 
+    217, 83, 1, 198, 217, 83, 1, 191, 217, 83, 1, 252, 199, 217, 83, 1, 186, 
+    217, 83, 1, 192, 217, 83, 1, 233, 141, 217, 83, 1, 212, 65, 217, 83, 1, 
+    206, 217, 83, 25, 5, 74, 217, 83, 25, 5, 69, 70, 1, 176, 70, 1, 234, 138, 
+    70, 1, 234, 34, 70, 1, 234, 111, 70, 1, 229, 9, 70, 1, 251, 41, 70, 1, 
+    250, 165, 70, 1, 249, 246, 70, 1, 250, 94, 70, 1, 227, 138, 70, 1, 248, 
+    229, 70, 1, 215, 145, 70, 1, 247, 153, 70, 1, 215, 140, 70, 1, 228, 85, 
+    70, 1, 217, 106, 70, 1, 216, 209, 70, 1, 112, 70, 1, 216, 157, 70, 1, 
+    228, 79, 70, 1, 252, 199, 70, 1, 225, 150, 70, 1, 225, 19, 70, 1, 225, 
+    124, 70, 1, 230, 166, 70, 1, 210, 244, 70, 1, 222, 213, 70, 1, 232, 162, 
+    70, 1, 213, 138, 70, 1, 220, 104, 70, 1, 218, 186, 70, 1, 206, 70, 1, 
+    162, 70, 1, 233, 141, 70, 1, 224, 91, 70, 235, 250, 25, 224, 77, 70, 235, 
+    250, 25, 224, 90, 70, 235, 250, 25, 224, 56, 70, 235, 250, 25, 224, 51, 
+    70, 235, 250, 25, 224, 33, 70, 235, 250, 25, 224, 5, 70, 235, 250, 25, 
+    223, 249, 70, 235, 250, 25, 223, 248, 70, 235, 250, 25, 222, 102, 70, 
+    235, 250, 25, 222, 95, 70, 235, 250, 25, 232, 67, 70, 235, 250, 25, 232, 
+    57, 70, 235, 250, 25, 224, 72, 70, 235, 250, 25, 224, 83, 70, 235, 250, 
+    25, 224, 41, 215, 49, 111, 70, 235, 250, 25, 224, 41, 215, 49, 105, 70, 
+    235, 250, 25, 224, 73, 70, 25, 235, 236, 254, 53, 70, 25, 235, 236, 255, 
+    82, 70, 25, 5, 255, 82, 70, 25, 5, 74, 70, 25, 5, 236, 40, 70, 25, 5, 
+    211, 117, 70, 25, 5, 210, 169, 70, 25, 5, 69, 70, 25, 5, 214, 118, 70, 
+    25, 5, 214, 229, 70, 25, 5, 226, 238, 70, 25, 5, 192, 70, 25, 5, 236, 67, 
+    70, 25, 5, 76, 70, 25, 5, 254, 252, 70, 25, 5, 254, 210, 70, 25, 5, 226, 
+    187, 70, 25, 5, 253, 200, 70, 5, 228, 211, 70, 5, 223, 129, 70, 5, 210, 
+    180, 70, 5, 230, 57, 70, 5, 215, 214, 70, 5, 252, 151, 70, 5, 222, 208, 
+    70, 5, 216, 41, 70, 5, 234, 247, 70, 5, 254, 212, 70, 5, 221, 246, 221, 
+    240, 70, 5, 213, 149, 70, 5, 249, 240, 70, 5, 252, 125, 70, 5, 234, 131, 
+    70, 5, 252, 145, 70, 5, 251, 17, 225, 75, 233, 193, 70, 5, 233, 36, 216, 
+    18, 70, 5, 252, 28, 70, 5, 225, 126, 230, 104, 70, 5, 234, 15, 70, 249, 
+    106, 16, 223, 31, 70, 5, 253, 182, 70, 5, 253, 203, 70, 21, 210, 86, 70, 
+    21, 111, 70, 21, 105, 70, 21, 158, 70, 21, 161, 70, 21, 190, 70, 21, 195, 
+    70, 21, 199, 70, 21, 196, 70, 21, 201, 70, 16, 233, 36, 253, 205, 219, 
+    45, 70, 16, 233, 36, 253, 205, 230, 76, 70, 16, 233, 36, 253, 205, 225, 
+    74, 70, 16, 233, 36, 253, 205, 252, 57, 70, 16, 233, 36, 253, 205, 251, 
+    111, 70, 16, 233, 36, 253, 205, 224, 218, 70, 16, 233, 36, 253, 205, 224, 
+    212, 70, 16, 233, 36, 253, 205, 224, 210, 70, 16, 233, 36, 253, 205, 224, 
+    216, 70, 16, 233, 36, 253, 205, 224, 214, 83, 251, 244, 83, 245, 171, 83, 
+    249, 227, 83, 243, 236, 218, 131, 83, 249, 234, 83, 244, 19, 247, 126, 
+    83, 216, 40, 219, 54, 240, 175, 83, 219, 192, 3, 251, 180, 231, 159, 83, 
+    231, 188, 249, 227, 83, 231, 188, 243, 236, 218, 131, 83, 228, 196, 83, 
+    244, 5, 45, 221, 159, 111, 83, 244, 5, 45, 221, 159, 105, 83, 244, 5, 45, 
+    221, 159, 158, 83, 25, 220, 139, 83, 21, 210, 86, 83, 21, 111, 83, 21, 
+    105, 83, 21, 158, 83, 21, 161, 83, 21, 190, 83, 21, 195, 83, 21, 199, 83, 
+    21, 196, 83, 21, 201, 83, 1, 61, 83, 1, 76, 83, 1, 74, 83, 1, 78, 83, 1, 
+    69, 83, 1, 226, 238, 83, 1, 214, 214, 83, 1, 245, 217, 83, 1, 198, 83, 1, 
+    254, 123, 83, 1, 252, 199, 83, 1, 191, 83, 1, 224, 91, 83, 1, 243, 142, 
+    83, 1, 186, 83, 1, 233, 141, 83, 1, 206, 83, 1, 220, 104, 83, 1, 217, 
+    106, 83, 1, 248, 229, 83, 1, 250, 165, 83, 1, 235, 147, 83, 1, 192, 83, 
+    1, 205, 83, 1, 212, 65, 83, 1, 244, 204, 83, 1, 176, 83, 1, 234, 138, 83, 
+    1, 215, 184, 83, 1, 210, 116, 83, 1, 242, 53, 83, 1, 210, 16, 83, 1, 233, 
+    4, 83, 1, 210, 69, 83, 1, 250, 118, 83, 1, 216, 40, 200, 25, 50, 83, 1, 
+    216, 40, 76, 83, 1, 216, 40, 74, 83, 1, 216, 40, 78, 83, 1, 216, 40, 69, 
+    83, 1, 216, 40, 226, 238, 83, 1, 216, 40, 214, 214, 83, 1, 216, 40, 254, 
+    123, 83, 1, 216, 40, 252, 199, 83, 1, 216, 40, 191, 83, 1, 216, 40, 224, 
+    91, 83, 1, 216, 40, 243, 142, 83, 1, 216, 40, 186, 83, 1, 216, 40, 217, 
+    106, 83, 1, 216, 40, 248, 229, 83, 1, 216, 40, 250, 165, 83, 1, 216, 40, 
+    235, 147, 83, 1, 216, 40, 215, 184, 83, 1, 216, 40, 192, 83, 1, 216, 40, 
+    212, 65, 83, 1, 216, 40, 176, 83, 1, 216, 40, 243, 139, 83, 1, 216, 40, 
+    242, 53, 83, 1, 216, 40, 235, 113, 83, 1, 216, 40, 228, 236, 83, 1, 216, 
+    40, 246, 46, 83, 1, 219, 192, 76, 83, 1, 219, 192, 74, 83, 1, 219, 192, 
+    235, 158, 83, 1, 219, 192, 214, 214, 83, 1, 219, 192, 69, 83, 1, 219, 
+    192, 254, 123, 83, 1, 219, 192, 176, 83, 1, 219, 192, 243, 142, 83, 1, 
+    219, 192, 162, 83, 1, 219, 192, 191, 83, 1, 219, 192, 220, 104, 83, 1, 
+    219, 192, 217, 106, 83, 1, 219, 192, 248, 229, 83, 1, 219, 192, 235, 147, 
+    83, 1, 219, 192, 244, 204, 83, 1, 219, 192, 243, 139, 83, 1, 219, 192, 
+    242, 53, 83, 1, 219, 192, 215, 184, 83, 1, 219, 192, 210, 116, 83, 1, 
+    219, 192, 223, 187, 83, 1, 219, 192, 250, 165, 83, 1, 219, 192, 210, 82, 
+    83, 1, 231, 188, 74, 83, 1, 231, 188, 176, 83, 1, 231, 188, 205, 83, 1, 
+    231, 188, 244, 204, 83, 1, 231, 188, 210, 82, 83, 1, 254, 171, 243, 123, 
+    254, 84, 111, 83, 1, 254, 171, 243, 123, 213, 148, 111, 83, 1, 254, 171, 
+    243, 123, 248, 194, 83, 1, 254, 171, 243, 123, 214, 224, 83, 1, 254, 171, 
+    243, 123, 235, 200, 214, 224, 83, 1, 254, 171, 243, 123, 252, 163, 83, 1, 
+    254, 171, 243, 123, 134, 252, 163, 83, 1, 254, 171, 243, 123, 61, 83, 1, 
+    254, 171, 243, 123, 74, 83, 1, 254, 171, 243, 123, 176, 83, 1, 254, 171, 
+    243, 123, 229, 82, 83, 1, 254, 171, 243, 123, 251, 41, 83, 1, 254, 171, 
+    243, 123, 215, 157, 83, 1, 254, 171, 243, 123, 215, 145, 83, 1, 254, 171, 
+    243, 123, 248, 143, 83, 1, 254, 171, 243, 123, 228, 115, 83, 1, 254, 171, 
+    243, 123, 217, 106, 83, 1, 254, 171, 243, 123, 248, 229, 83, 1, 254, 171, 
+    243, 123, 191, 83, 1, 254, 171, 243, 123, 225, 150, 83, 1, 254, 171, 243, 
+    123, 218, 225, 83, 1, 254, 171, 243, 123, 210, 82, 83, 1, 254, 171, 243, 
+    123, 210, 116, 83, 1, 254, 171, 243, 123, 254, 218, 83, 1, 216, 40, 254, 
+    171, 243, 123, 217, 106, 83, 1, 216, 40, 254, 171, 243, 123, 210, 82, 83, 
+    1, 231, 188, 254, 171, 243, 123, 243, 0, 83, 1, 231, 188, 254, 171, 243, 
+    123, 229, 82, 83, 1, 231, 188, 254, 171, 243, 123, 251, 41, 83, 1, 231, 
+    188, 254, 171, 243, 123, 235, 120, 83, 1, 231, 188, 254, 171, 243, 123, 
+    215, 157, 83, 1, 231, 188, 254, 171, 243, 123, 248, 127, 83, 1, 231, 188, 
+    254, 171, 243, 123, 217, 106, 83, 1, 231, 188, 254, 171, 243, 123, 248, 
+    33, 83, 1, 231, 188, 254, 171, 243, 123, 218, 225, 83, 1, 231, 188, 254, 
+    171, 243, 123, 249, 80, 83, 1, 231, 188, 254, 171, 243, 123, 210, 82, 83, 
+    1, 231, 188, 254, 171, 243, 123, 210, 116, 83, 1, 254, 171, 243, 123, 
+    163, 69, 83, 1, 254, 171, 243, 123, 163, 192, 83, 1, 231, 188, 254, 171, 
+    243, 123, 252, 26, 83, 1, 254, 171, 243, 123, 248, 219, 83, 1, 231, 188, 
+    254, 171, 243, 123, 233, 4, 18, 19, 226, 113, 18, 19, 253, 175, 18, 19, 
+    255, 37, 18, 19, 212, 25, 18, 19, 224, 224, 18, 19, 225, 233, 18, 19, 
+    224, 108, 18, 19, 217, 32, 18, 19, 234, 195, 18, 19, 233, 185, 18, 19, 
+    231, 137, 18, 19, 228, 42, 18, 19, 229, 186, 18, 19, 233, 74, 18, 19, 
+    219, 24, 18, 19, 221, 213, 18, 19, 219, 234, 18, 19, 220, 68, 18, 19, 
+    219, 203, 18, 19, 210, 220, 18, 19, 211, 52, 18, 19, 223, 137, 18, 19, 
+    227, 175, 18, 19, 226, 220, 227, 175, 18, 19, 227, 174, 18, 19, 226, 220, 
+    227, 174, 18, 19, 227, 173, 18, 19, 226, 220, 227, 173, 18, 19, 227, 172, 
+    18, 19, 226, 220, 227, 172, 18, 19, 222, 107, 18, 19, 222, 106, 18, 19, 
+    222, 105, 18, 19, 222, 104, 18, 19, 222, 103, 18, 19, 222, 111, 18, 19, 
+    226, 220, 226, 109, 18, 19, 226, 220, 217, 153, 18, 19, 226, 220, 235, 
+    29, 18, 19, 226, 220, 251, 74, 18, 19, 226, 220, 194, 18, 19, 226, 220, 
+    230, 30, 18, 19, 226, 220, 222, 93, 18, 19, 226, 220, 220, 106, 18, 19, 
+    245, 227, 212, 98, 18, 19, 212, 7, 212, 98, 18, 19, 40, 4, 222, 236, 18, 
+    19, 40, 223, 160, 247, 128, 18, 19, 223, 226, 222, 108, 18, 19, 159, 232, 
+    133, 18, 19, 159, 233, 140, 18, 19, 216, 127, 18, 19, 216, 129, 18, 19, 
+    215, 137, 18, 19, 215, 139, 18, 19, 215, 144, 18, 19, 216, 50, 18, 19, 
+    216, 52, 18, 19, 221, 211, 219, 208, 18, 19, 221, 211, 220, 3, 18, 19, 
+    221, 211, 241, 60, 18, 19, 73, 242, 80, 18, 19, 73, 248, 60, 243, 62, 18, 
+    19, 73, 243, 139, 18, 19, 73, 242, 85, 18, 19, 221, 211, 235, 39, 18, 19, 
+    73, 235, 37, 18, 19, 252, 76, 248, 60, 156, 18, 19, 252, 76, 248, 60, 
+    153, 18, 19, 73, 248, 55, 222, 93, 232, 229, 213, 122, 233, 16, 232, 229, 
+    1, 176, 232, 229, 1, 234, 138, 232, 229, 1, 243, 142, 232, 229, 1, 243, 
+    0, 232, 229, 1, 229, 82, 232, 229, 1, 251, 41, 232, 229, 1, 250, 165, 
+    232, 229, 1, 235, 147, 232, 229, 1, 235, 120, 232, 229, 1, 211, 71, 232, 
+    229, 1, 217, 106, 232, 229, 1, 216, 209, 232, 229, 1, 248, 229, 232, 229, 
+    1, 248, 33, 232, 229, 1, 198, 232, 229, 1, 191, 232, 229, 1, 225, 150, 
+    232, 229, 1, 252, 199, 232, 229, 1, 252, 26, 232, 229, 1, 186, 232, 229, 
+    1, 192, 232, 229, 1, 205, 232, 229, 1, 233, 141, 232, 229, 1, 212, 65, 
+    232, 229, 1, 220, 104, 232, 229, 1, 218, 225, 232, 229, 1, 206, 232, 229, 
+    1, 162, 232, 229, 25, 5, 61, 232, 229, 25, 5, 74, 232, 229, 25, 5, 69, 
+    232, 229, 25, 5, 245, 217, 232, 229, 25, 5, 254, 210, 232, 229, 25, 5, 
+    226, 187, 232, 229, 25, 5, 253, 200, 232, 229, 25, 5, 76, 232, 229, 25, 
+    5, 78, 232, 229, 218, 74, 1, 192, 232, 229, 218, 74, 1, 205, 232, 229, 
+    218, 74, 1, 212, 65, 232, 229, 4, 1, 176, 232, 229, 4, 1, 229, 82, 232, 
+    229, 4, 1, 254, 83, 232, 229, 4, 1, 217, 106, 232, 229, 4, 1, 198, 232, 
+    229, 4, 1, 191, 232, 229, 4, 1, 186, 232, 229, 4, 1, 205, 232, 229, 4, 1, 
+    233, 141, 232, 229, 5, 230, 94, 232, 229, 5, 234, 177, 232, 229, 5, 222, 
+    34, 232, 229, 5, 232, 133, 232, 229, 245, 39, 79, 232, 229, 224, 16, 79, 
+    232, 229, 21, 210, 86, 232, 229, 21, 111, 232, 229, 21, 105, 232, 229, 
+    21, 158, 232, 229, 21, 161, 232, 229, 21, 190, 232, 229, 21, 195, 232, 
+    229, 21, 199, 232, 229, 21, 196, 232, 229, 21, 201, 39, 233, 65, 1, 176, 
+    39, 233, 65, 1, 211, 165, 39, 233, 65, 1, 229, 82, 39, 233, 65, 1, 215, 
+    184, 39, 233, 65, 1, 206, 39, 233, 65, 1, 192, 39, 233, 65, 1, 217, 106, 
+    39, 233, 65, 1, 216, 209, 39, 233, 65, 1, 233, 141, 39, 233, 65, 1, 191, 
+    39, 233, 65, 1, 225, 150, 39, 233, 65, 1, 186, 39, 233, 65, 1, 244, 204, 
+    39, 233, 65, 1, 214, 27, 39, 233, 65, 1, 162, 39, 233, 65, 1, 224, 91, 
+    39, 233, 65, 1, 234, 138, 39, 233, 65, 1, 215, 176, 39, 233, 65, 1, 198, 
+    39, 233, 65, 1, 61, 39, 233, 65, 1, 74, 39, 233, 65, 1, 245, 217, 39, 
+    233, 65, 1, 245, 205, 39, 233, 65, 1, 69, 39, 233, 65, 1, 226, 187, 39, 
+    233, 65, 1, 78, 39, 233, 65, 1, 214, 214, 39, 233, 65, 1, 76, 39, 233, 
+    65, 1, 253, 198, 39, 233, 65, 1, 254, 210, 39, 233, 65, 1, 216, 29, 39, 
+    233, 65, 1, 216, 28, 39, 233, 65, 1, 216, 27, 39, 233, 65, 1, 216, 26, 
+    39, 233, 65, 1, 216, 25, 166, 39, 173, 1, 125, 224, 91, 166, 39, 173, 1, 
+    121, 224, 91, 166, 39, 173, 1, 125, 176, 166, 39, 173, 1, 125, 211, 165, 
+    166, 39, 173, 1, 125, 229, 82, 166, 39, 173, 1, 121, 176, 166, 39, 173, 
+    1, 121, 211, 165, 166, 39, 173, 1, 121, 229, 82, 166, 39, 173, 1, 125, 
+    215, 184, 166, 39, 173, 1, 125, 206, 166, 39, 173, 1, 125, 192, 166, 39, 
+    173, 1, 121, 215, 184, 166, 39, 173, 1, 121, 206, 166, 39, 173, 1, 121, 
+    192, 166, 39, 173, 1, 125, 217, 106, 166, 39, 173, 1, 125, 216, 209, 166, 
+    39, 173, 1, 125, 198, 166, 39, 173, 1, 121, 217, 106, 166, 39, 173, 1, 
+    121, 216, 209, 166, 39, 173, 1, 121, 198, 166, 39, 173, 1, 125, 191, 166, 
+    39, 173, 1, 125, 225, 150, 166, 39, 173, 1, 125, 186, 166, 39, 173, 1, 
+    121, 191, 166, 39, 173, 1, 121, 225, 150, 166, 39, 173, 1, 121, 186, 166, 
+    39, 173, 1, 125, 244, 204, 166, 39, 173, 1, 125, 214, 27, 166, 39, 173, 
+    1, 125, 233, 141, 166, 39, 173, 1, 121, 244, 204, 166, 39, 173, 1, 121, 
+    214, 27, 166, 39, 173, 1, 121, 233, 141, 166, 39, 173, 1, 125, 162, 166, 
+    39, 173, 1, 125, 248, 229, 166, 39, 173, 1, 125, 252, 199, 166, 39, 173, 
+    1, 121, 162, 166, 39, 173, 1, 121, 248, 229, 166, 39, 173, 1, 121, 252, 
+    199, 166, 39, 173, 1, 125, 233, 190, 166, 39, 173, 1, 125, 211, 138, 166, 
+    39, 173, 1, 121, 233, 190, 166, 39, 173, 1, 121, 211, 138, 166, 39, 173, 
+    1, 125, 218, 83, 166, 39, 173, 1, 121, 218, 83, 166, 39, 173, 25, 5, 25, 
+    219, 241, 166, 39, 173, 25, 5, 255, 82, 166, 39, 173, 25, 5, 236, 40, 
+    166, 39, 173, 25, 5, 69, 166, 39, 173, 25, 5, 214, 118, 166, 39, 173, 25, 
+    5, 76, 166, 39, 173, 25, 5, 254, 252, 166, 39, 173, 25, 5, 78, 166, 39, 
+    173, 25, 5, 227, 4, 166, 39, 173, 25, 5, 214, 214, 166, 39, 173, 25, 5, 
+    253, 175, 166, 39, 173, 25, 5, 255, 37, 166, 39, 173, 25, 5, 214, 111, 
+    166, 39, 173, 25, 5, 226, 113, 166, 39, 173, 25, 5, 227, 1, 166, 39, 173, 
+    25, 5, 214, 210, 166, 39, 173, 25, 5, 235, 158, 166, 39, 173, 1, 40, 214, 
+    105, 166, 39, 173, 1, 40, 229, 84, 166, 39, 173, 1, 40, 230, 30, 166, 39, 
+    173, 1, 40, 194, 166, 39, 173, 1, 40, 235, 29, 166, 39, 173, 1, 40, 249, 
+    68, 166, 39, 173, 1, 40, 253, 166, 166, 39, 173, 138, 231, 163, 166, 39, 
+    173, 138, 231, 162, 166, 39, 173, 21, 210, 86, 166, 39, 173, 21, 111, 
+    166, 39, 173, 21, 105, 166, 39, 173, 21, 158, 166, 39, 173, 21, 161, 166, 
+    39, 173, 21, 190, 166, 39, 173, 21, 195, 166, 39, 173, 21, 199, 166, 39, 
+    173, 21, 196, 166, 39, 173, 21, 201, 166, 39, 173, 89, 21, 111, 166, 39, 
+    173, 5, 233, 126, 166, 39, 173, 5, 233, 125, 70, 16, 225, 240, 70, 16, 
+    230, 77, 234, 31, 70, 16, 225, 75, 234, 31, 70, 16, 252, 58, 234, 31, 70, 
+    16, 251, 112, 234, 31, 70, 16, 224, 219, 234, 31, 70, 16, 224, 213, 234, 
+    31, 70, 16, 224, 211, 234, 31, 70, 16, 224, 217, 234, 31, 70, 16, 224, 
+    215, 234, 31, 70, 16, 248, 181, 234, 31, 70, 16, 248, 177, 234, 31, 70, 
+    16, 248, 176, 234, 31, 70, 16, 248, 179, 234, 31, 70, 16, 248, 178, 234, 
+    31, 70, 16, 248, 175, 234, 31, 70, 16, 215, 87, 70, 16, 230, 77, 222, 
+    207, 70, 16, 225, 75, 222, 207, 70, 16, 252, 58, 222, 207, 70, 16, 251, 
+    112, 222, 207, 70, 16, 224, 219, 222, 207, 70, 16, 224, 213, 222, 207, 
+    70, 16, 224, 211, 222, 207, 70, 16, 224, 217, 222, 207, 70, 16, 224, 215, 
+    222, 207, 70, 16, 248, 181, 222, 207, 70, 16, 248, 177, 222, 207, 70, 16, 
+    248, 176, 222, 207, 70, 16, 248, 179, 222, 207, 70, 16, 248, 178, 222, 
+    207, 70, 16, 248, 175, 222, 207, 251, 129, 1, 176, 251, 129, 1, 243, 142, 
+    251, 129, 1, 229, 82, 251, 129, 1, 229, 27, 251, 129, 1, 191, 251, 129, 
+    1, 252, 199, 251, 129, 1, 186, 251, 129, 1, 230, 110, 251, 129, 1, 217, 
+    106, 251, 129, 1, 248, 229, 251, 129, 1, 198, 251, 129, 1, 228, 41, 251, 
+    129, 1, 251, 41, 251, 129, 1, 235, 147, 251, 129, 1, 227, 169, 251, 129, 
+    1, 227, 162, 251, 129, 1, 192, 251, 129, 1, 205, 251, 129, 1, 233, 141, 
+    251, 129, 1, 214, 27, 251, 129, 1, 206, 251, 129, 1, 61, 251, 129, 1, 
+    162, 251, 129, 25, 5, 74, 251, 129, 25, 5, 69, 251, 129, 25, 5, 76, 251, 
+    129, 25, 5, 78, 251, 129, 25, 5, 254, 252, 251, 129, 226, 64, 251, 129, 
+    245, 151, 64, 221, 174, 39, 89, 1, 125, 176, 39, 89, 1, 125, 234, 138, 
+    39, 89, 1, 125, 233, 177, 39, 89, 1, 121, 176, 39, 89, 1, 121, 233, 177, 
+    39, 89, 1, 121, 234, 138, 39, 89, 1, 229, 82, 39, 89, 1, 125, 251, 41, 
+    39, 89, 1, 125, 250, 165, 39, 89, 1, 121, 251, 41, 39, 89, 1, 121, 206, 
+    39, 89, 1, 121, 250, 165, 39, 89, 1, 227, 169, 39, 89, 1, 223, 143, 39, 
+    89, 1, 125, 223, 141, 39, 89, 1, 248, 229, 39, 89, 1, 121, 223, 141, 39, 
+    89, 1, 223, 152, 39, 89, 1, 125, 217, 106, 39, 89, 1, 125, 216, 209, 39, 
+    89, 1, 121, 217, 106, 39, 89, 1, 121, 216, 209, 39, 89, 1, 198, 39, 89, 
+    1, 252, 199, 39, 89, 1, 125, 191, 39, 89, 1, 125, 225, 150, 39, 89, 1, 
+    125, 244, 204, 39, 89, 1, 121, 191, 39, 89, 1, 121, 244, 204, 39, 89, 1, 
+    121, 225, 150, 39, 89, 1, 186, 39, 89, 1, 121, 192, 39, 89, 1, 125, 192, 
+    39, 89, 1, 205, 39, 89, 1, 222, 139, 39, 89, 1, 233, 141, 39, 89, 1, 232, 
+    98, 39, 89, 1, 212, 65, 39, 89, 1, 125, 220, 104, 39, 89, 1, 125, 218, 
+    225, 39, 89, 1, 125, 206, 39, 89, 1, 125, 162, 39, 89, 1, 232, 190, 39, 
+    89, 1, 61, 39, 89, 1, 121, 162, 39, 89, 1, 74, 39, 89, 1, 236, 40, 39, 
+    89, 1, 69, 39, 89, 1, 214, 118, 39, 89, 1, 245, 217, 39, 89, 1, 226, 187, 
+    39, 89, 1, 233, 126, 39, 89, 1, 242, 139, 206, 39, 89, 117, 5, 147, 205, 
+    39, 89, 117, 5, 147, 233, 141, 39, 89, 117, 5, 233, 142, 217, 59, 233, 
+    115, 39, 89, 5, 231, 209, 234, 237, 233, 115, 39, 89, 117, 5, 40, 229, 
+    82, 39, 89, 117, 5, 121, 191, 39, 89, 117, 5, 125, 223, 142, 177, 121, 
+    191, 39, 89, 117, 5, 186, 39, 89, 117, 5, 252, 199, 39, 89, 117, 5, 206, 
+    39, 89, 5, 222, 12, 39, 89, 25, 5, 61, 39, 89, 25, 5, 231, 209, 221, 228, 
+    39, 89, 25, 5, 255, 82, 39, 89, 25, 5, 217, 65, 255, 82, 39, 89, 25, 5, 
+    74, 39, 89, 25, 5, 236, 40, 39, 89, 25, 5, 214, 214, 39, 89, 25, 5, 214, 
+    117, 39, 89, 25, 5, 69, 39, 89, 25, 5, 214, 118, 39, 89, 25, 5, 78, 39, 
+    89, 25, 5, 227, 5, 51, 39, 89, 25, 5, 226, 113, 39, 89, 25, 5, 76, 39, 
+    89, 25, 5, 254, 252, 39, 89, 25, 5, 226, 187, 39, 89, 25, 5, 254, 210, 
+    39, 89, 25, 5, 89, 254, 210, 39, 89, 25, 5, 227, 5, 48, 39, 89, 5, 231, 
+    209, 234, 236, 39, 89, 5, 216, 30, 39, 89, 5, 216, 29, 39, 89, 5, 234, 
+    103, 216, 28, 39, 89, 5, 234, 103, 216, 27, 39, 89, 5, 234, 103, 216, 26, 
+    39, 89, 5, 223, 191, 242, 52, 39, 89, 5, 231, 209, 221, 255, 39, 89, 5, 
+    234, 102, 234, 221, 39, 89, 38, 249, 123, 247, 128, 39, 89, 241, 53, 21, 
+    210, 86, 39, 89, 241, 53, 21, 111, 39, 89, 241, 53, 21, 105, 39, 89, 241, 
+    53, 21, 158, 39, 89, 241, 53, 21, 161, 39, 89, 241, 53, 21, 190, 39, 89, 
+    241, 53, 21, 195, 39, 89, 241, 53, 21, 199, 39, 89, 241, 53, 21, 196, 39, 
+    89, 241, 53, 21, 201, 39, 89, 89, 21, 210, 86, 39, 89, 89, 21, 111, 39, 
+    89, 89, 21, 105, 39, 89, 89, 21, 158, 39, 89, 89, 21, 161, 39, 89, 89, 
+    21, 190, 39, 89, 89, 21, 195, 39, 89, 89, 21, 199, 39, 89, 89, 21, 196, 
+    39, 89, 89, 21, 201, 39, 89, 5, 211, 249, 39, 89, 5, 211, 248, 39, 89, 5, 
+    221, 217, 39, 89, 5, 234, 166, 39, 89, 5, 240, 239, 39, 89, 5, 247, 142, 
+    39, 89, 5, 223, 52, 222, 189, 223, 152, 39, 89, 5, 231, 209, 211, 72, 39, 
+    89, 5, 235, 12, 39, 89, 5, 235, 11, 39, 89, 5, 221, 224, 39, 89, 5, 221, 
+    223, 39, 89, 5, 242, 16, 39, 89, 5, 251, 38, 102, 5, 214, 200, 223, 33, 
+    102, 5, 214, 200, 251, 9, 102, 5, 250, 194, 102, 5, 218, 16, 102, 5, 251, 
+    241, 102, 1, 254, 193, 102, 1, 254, 194, 217, 14, 102, 1, 236, 36, 102, 
+    1, 236, 37, 217, 14, 102, 1, 214, 203, 102, 1, 214, 204, 217, 14, 102, 1, 
+    223, 191, 223, 82, 102, 1, 223, 191, 223, 83, 217, 14, 102, 1, 233, 142, 
+    233, 30, 102, 1, 233, 142, 233, 31, 217, 14, 102, 1, 245, 187, 102, 1, 
+    254, 208, 102, 1, 226, 216, 102, 1, 226, 217, 217, 14, 102, 1, 176, 102, 
+    1, 235, 19, 231, 212, 102, 1, 243, 142, 102, 1, 243, 143, 242, 168, 102, 
+    1, 229, 82, 102, 1, 251, 41, 102, 1, 251, 42, 233, 129, 102, 1, 235, 147, 
+    102, 1, 235, 148, 235, 124, 102, 1, 227, 169, 102, 1, 217, 107, 233, 82, 
+    102, 1, 217, 107, 230, 72, 231, 212, 102, 1, 248, 230, 230, 72, 254, 153, 
+    102, 1, 248, 230, 230, 72, 231, 212, 102, 1, 229, 234, 223, 155, 102, 1, 
+    217, 106, 102, 1, 217, 107, 217, 36, 102, 1, 248, 229, 102, 1, 248, 230, 
+    231, 230, 102, 1, 198, 102, 1, 191, 102, 1, 226, 94, 234, 232, 102, 1, 
+    252, 199, 102, 1, 252, 200, 234, 178, 102, 1, 186, 102, 1, 192, 102, 1, 
+    205, 102, 1, 233, 141, 102, 1, 212, 65, 102, 1, 222, 36, 222, 22, 102, 1, 
+    222, 36, 221, 235, 102, 1, 206, 102, 1, 162, 102, 5, 223, 73, 102, 25, 5, 
+    217, 14, 102, 25, 5, 214, 199, 102, 25, 5, 214, 200, 221, 231, 102, 25, 
+    5, 218, 48, 102, 25, 5, 218, 49, 236, 28, 102, 25, 5, 223, 191, 223, 82, 
+    102, 25, 5, 223, 191, 223, 83, 217, 14, 102, 25, 5, 233, 142, 233, 30, 
+    102, 25, 5, 233, 142, 233, 31, 217, 14, 102, 25, 5, 217, 66, 102, 25, 5, 
+    217, 67, 223, 82, 102, 25, 5, 217, 67, 217, 14, 102, 25, 5, 217, 67, 223, 
+    83, 217, 14, 102, 25, 5, 225, 187, 102, 25, 5, 225, 188, 217, 14, 102, 
+    255, 3, 255, 2, 102, 1, 235, 1, 221, 230, 102, 1, 234, 108, 221, 230, 
+    102, 1, 215, 34, 221, 230, 102, 1, 245, 211, 221, 230, 102, 1, 214, 0, 
+    221, 230, 102, 1, 210, 107, 221, 230, 102, 1, 253, 217, 221, 230, 102, 
+    21, 210, 86, 102, 21, 111, 102, 21, 105, 102, 21, 158, 102, 21, 161, 102, 
+    21, 190, 102, 21, 195, 102, 21, 199, 102, 21, 196, 102, 21, 201, 102, 
+    226, 33, 102, 226, 59, 102, 211, 238, 102, 250, 244, 226, 52, 102, 250, 
+    244, 219, 174, 102, 250, 244, 226, 6, 102, 226, 58, 102, 28, 16, 247, 
+    134, 102, 28, 16, 248, 59, 102, 28, 16, 246, 72, 102, 28, 16, 248, 184, 
+    102, 28, 16, 248, 185, 218, 16, 102, 28, 16, 247, 213, 102, 28, 16, 248, 
+    222, 102, 28, 16, 248, 41, 102, 28, 16, 248, 206, 102, 28, 16, 248, 185, 
+    243, 64, 102, 28, 16, 38, 217, 10, 102, 28, 16, 38, 245, 149, 102, 28, 
+    16, 38, 234, 173, 102, 28, 16, 38, 234, 175, 102, 28, 16, 38, 235, 128, 
+    102, 28, 16, 38, 234, 174, 2, 235, 128, 102, 28, 16, 38, 234, 176, 2, 
+    235, 128, 102, 28, 16, 38, 252, 45, 102, 28, 16, 38, 242, 172, 102, 28, 
+    16, 222, 252, 204, 246, 82, 102, 28, 16, 222, 252, 204, 248, 220, 102, 
+    28, 16, 222, 252, 250, 8, 215, 112, 102, 28, 16, 222, 252, 250, 8, 217, 
+    74, 102, 28, 16, 233, 50, 204, 226, 47, 102, 28, 16, 233, 50, 204, 224, 
+    142, 102, 28, 16, 233, 50, 250, 8, 225, 41, 102, 28, 16, 233, 50, 250, 8, 
+    225, 29, 102, 28, 16, 233, 50, 204, 225, 64, 207, 5, 226, 30, 207, 5, 
+    226, 43, 207, 5, 226, 39, 207, 1, 61, 207, 1, 74, 207, 1, 69, 207, 1, 
+    254, 252, 207, 1, 78, 207, 1, 76, 207, 1, 245, 63, 207, 1, 176, 207, 1, 
+    224, 91, 207, 1, 243, 142, 207, 1, 229, 82, 207, 1, 251, 41, 207, 1, 235, 
+    147, 207, 1, 210, 116, 207, 1, 227, 169, 207, 1, 217, 106, 207, 1, 248, 
+    229, 207, 1, 198, 207, 1, 191, 207, 1, 244, 204, 207, 1, 214, 27, 207, 1, 
+    252, 199, 207, 1, 186, 207, 1, 192, 207, 1, 205, 207, 1, 233, 141, 207, 
+    1, 212, 65, 207, 1, 206, 207, 1, 211, 165, 207, 1, 162, 207, 117, 5, 226, 
+    56, 207, 117, 5, 226, 32, 207, 117, 5, 226, 29, 207, 25, 5, 226, 46, 207, 
+    25, 5, 226, 28, 207, 25, 5, 226, 50, 207, 25, 5, 226, 38, 207, 25, 5, 
+    226, 57, 207, 25, 5, 226, 48, 207, 5, 226, 60, 207, 5, 213, 152, 207, 
+    117, 5, 225, 252, 186, 207, 117, 5, 225, 252, 212, 65, 207, 1, 234, 138, 
+    207, 1, 217, 232, 207, 21, 210, 86, 207, 21, 111, 207, 21, 105, 207, 21, 
+    158, 207, 21, 161, 207, 21, 190, 207, 21, 195, 207, 21, 199, 207, 21, 
+    196, 207, 21, 201, 207, 253, 183, 207, 1, 223, 55, 207, 1, 233, 13, 207, 
+    1, 252, 26, 207, 1, 40, 235, 29, 207, 1, 40, 194, 252, 128, 1, 61, 252, 
+    128, 1, 219, 166, 61, 252, 128, 1, 162, 252, 128, 1, 219, 166, 162, 252, 
+    128, 1, 231, 186, 162, 252, 128, 1, 252, 199, 252, 128, 1, 234, 218, 252, 
+    199, 252, 128, 1, 191, 252, 128, 1, 219, 166, 191, 252, 128, 1, 198, 252, 
+    128, 1, 231, 186, 198, 252, 128, 1, 212, 65, 252, 128, 1, 219, 166, 212, 
+    65, 252, 128, 1, 226, 71, 212, 65, 252, 128, 1, 243, 142, 252, 128, 1, 
+    219, 166, 243, 142, 252, 128, 1, 235, 147, 252, 128, 1, 248, 229, 252, 
+    128, 1, 205, 252, 128, 1, 219, 166, 205, 252, 128, 1, 186, 252, 128, 1, 
+    219, 166, 186, 252, 128, 1, 219, 28, 217, 106, 252, 128, 1, 228, 60, 217, 
+    106, 252, 128, 1, 206, 252, 128, 1, 219, 166, 206, 252, 128, 1, 231, 186, 
+    206, 252, 128, 1, 192, 252, 128, 1, 219, 166, 192, 252, 128, 1, 229, 82, 
+    252, 128, 1, 233, 141, 252, 128, 1, 219, 166, 233, 141, 252, 128, 1, 227, 
+    169, 252, 128, 1, 251, 41, 252, 128, 1, 229, 153, 252, 128, 1, 231, 129, 
+    252, 128, 1, 74, 252, 128, 1, 69, 252, 128, 5, 216, 34, 252, 128, 25, 5, 
+    76, 252, 128, 25, 5, 226, 71, 76, 252, 128, 25, 5, 245, 217, 252, 128, 
+    25, 5, 74, 252, 128, 25, 5, 234, 218, 74, 252, 128, 25, 5, 78, 252, 128, 
+    25, 5, 234, 218, 78, 252, 128, 25, 5, 69, 252, 128, 25, 5, 104, 31, 219, 
+    166, 206, 252, 128, 117, 5, 229, 84, 252, 128, 117, 5, 242, 67, 252, 128, 
+    226, 41, 252, 128, 226, 37, 252, 128, 16, 251, 249, 229, 234, 231, 42, 
+    252, 128, 16, 251, 249, 225, 67, 252, 128, 16, 251, 249, 235, 54, 252, 
+    128, 16, 251, 249, 226, 41, 197, 1, 176, 197, 1, 234, 45, 197, 1, 234, 
+    138, 197, 1, 243, 142, 197, 1, 242, 193, 197, 1, 229, 82, 197, 1, 251, 
+    41, 197, 1, 250, 165, 197, 1, 235, 147, 197, 1, 227, 169, 197, 1, 217, 
+    106, 197, 1, 216, 209, 197, 1, 248, 229, 197, 1, 198, 197, 1, 191, 197, 
+    1, 225, 45, 197, 1, 225, 150, 197, 1, 244, 204, 197, 1, 244, 83, 197, 1, 
+    252, 199, 197, 1, 251, 230, 197, 1, 186, 197, 1, 230, 173, 197, 1, 215, 
+    184, 197, 1, 215, 176, 197, 1, 246, 46, 197, 1, 192, 197, 1, 205, 197, 1, 
+    233, 141, 197, 1, 162, 197, 1, 241, 160, 197, 1, 214, 27, 197, 1, 206, 
+    197, 1, 220, 104, 197, 1, 212, 65, 197, 1, 61, 197, 218, 74, 1, 192, 197, 
+    218, 74, 1, 205, 197, 25, 5, 255, 82, 197, 25, 5, 74, 197, 25, 5, 78, 
+    197, 25, 5, 226, 187, 197, 25, 5, 69, 197, 25, 5, 214, 118, 197, 25, 5, 
+    76, 197, 117, 5, 235, 29, 197, 117, 5, 194, 197, 117, 5, 156, 197, 117, 
+    5, 230, 30, 197, 117, 5, 226, 109, 197, 117, 5, 153, 197, 117, 5, 217, 
+    153, 197, 117, 5, 227, 146, 197, 117, 5, 234, 236, 197, 5, 223, 153, 197, 
+    5, 227, 209, 197, 224, 144, 217, 104, 197, 224, 144, 227, 156, 216, 121, 
+    217, 104, 197, 224, 144, 250, 172, 197, 224, 144, 215, 171, 250, 172, 
+    197, 224, 144, 215, 170, 197, 21, 210, 86, 197, 21, 111, 197, 21, 105, 
+    197, 21, 158, 197, 21, 161, 197, 21, 190, 197, 21, 195, 197, 21, 199, 
+    197, 21, 196, 197, 21, 201, 197, 1, 215, 157, 197, 1, 215, 145, 197, 1, 
+    248, 143, 226, 214, 250, 111, 21, 210, 86, 226, 214, 250, 111, 21, 111, 
+    226, 214, 250, 111, 21, 105, 226, 214, 250, 111, 21, 158, 226, 214, 250, 
+    111, 21, 161, 226, 214, 250, 111, 21, 190, 226, 214, 250, 111, 21, 195, 
+    226, 214, 250, 111, 21, 199, 226, 214, 250, 111, 21, 196, 226, 214, 250, 
+    111, 21, 201, 226, 214, 250, 111, 1, 233, 141, 226, 214, 250, 111, 1, 
+    253, 214, 226, 214, 250, 111, 1, 254, 225, 226, 214, 250, 111, 1, 254, 
+    123, 226, 214, 250, 111, 1, 254, 187, 226, 214, 250, 111, 1, 233, 140, 
+    226, 214, 250, 111, 1, 255, 44, 226, 214, 250, 111, 1, 255, 45, 226, 214, 
+    250, 111, 1, 255, 43, 226, 214, 250, 111, 1, 255, 38, 226, 214, 250, 111, 
+    1, 232, 247, 226, 214, 250, 111, 1, 235, 178, 226, 214, 250, 111, 1, 236, 
+    41, 226, 214, 250, 111, 1, 235, 197, 226, 214, 250, 111, 1, 235, 186, 
+    226, 214, 250, 111, 1, 232, 103, 226, 214, 250, 111, 1, 214, 221, 226, 
+    214, 250, 111, 1, 214, 219, 226, 214, 250, 111, 1, 214, 168, 226, 214, 
+    250, 111, 1, 214, 111, 226, 214, 250, 111, 1, 233, 64, 226, 214, 250, 
+    111, 1, 245, 116, 226, 214, 250, 111, 1, 245, 220, 226, 214, 250, 111, 1, 
+    245, 158, 226, 214, 250, 111, 1, 245, 94, 226, 214, 250, 111, 1, 232, 
+    162, 226, 214, 250, 111, 1, 226, 141, 226, 214, 250, 111, 1, 227, 0, 226, 
+    214, 250, 111, 1, 226, 129, 226, 214, 250, 111, 1, 226, 226, 226, 214, 
+    250, 111, 230, 108, 215, 122, 226, 214, 250, 111, 243, 137, 215, 123, 
+    226, 214, 250, 111, 230, 106, 215, 123, 226, 214, 250, 111, 223, 95, 226, 
+    214, 250, 111, 225, 148, 226, 214, 250, 111, 254, 217, 226, 214, 250, 
+    111, 224, 144, 230, 103, 226, 214, 250, 111, 224, 144, 52, 230, 103, 207, 
+    224, 144, 251, 249, 218, 9, 207, 224, 144, 251, 249, 226, 42, 207, 224, 
+    144, 251, 249, 224, 132, 207, 224, 144, 251, 249, 251, 27, 207, 224, 144, 
+    251, 249, 233, 14, 221, 227, 207, 224, 144, 251, 249, 235, 19, 221, 227, 
+    207, 224, 144, 251, 249, 248, 230, 221, 227, 207, 224, 144, 251, 249, 
+    252, 200, 221, 227, 213, 252, 138, 234, 216, 213, 252, 138, 220, 79, 213, 
+    252, 138, 224, 201, 213, 252, 5, 228, 214, 213, 252, 5, 211, 80, 230, 
+    227, 218, 1, 213, 252, 138, 211, 80, 254, 222, 235, 250, 218, 1, 213, 
+    252, 138, 211, 80, 235, 250, 218, 1, 213, 252, 138, 211, 80, 234, 204, 
+    235, 250, 218, 1, 213, 252, 138, 251, 10, 51, 213, 252, 138, 211, 80, 
+    234, 204, 235, 250, 218, 2, 221, 199, 213, 252, 138, 52, 218, 1, 213, 
+    252, 138, 215, 212, 218, 1, 213, 252, 138, 234, 204, 254, 85, 213, 252, 
+    138, 59, 51, 213, 252, 138, 113, 170, 51, 213, 252, 138, 134, 170, 51, 
+    213, 252, 138, 222, 243, 234, 215, 235, 250, 218, 1, 213, 252, 138, 253, 
+    212, 235, 250, 218, 1, 213, 252, 5, 213, 148, 218, 1, 213, 252, 5, 213, 
+    148, 214, 216, 213, 252, 5, 223, 52, 213, 148, 214, 216, 213, 252, 5, 
+    213, 148, 254, 85, 213, 252, 5, 223, 52, 213, 148, 254, 85, 213, 252, 5, 
+    213, 148, 214, 217, 2, 217, 78, 213, 252, 5, 213, 148, 254, 86, 2, 217, 
+    78, 213, 252, 5, 254, 84, 254, 99, 213, 252, 5, 254, 84, 252, 174, 213, 
+    252, 5, 254, 84, 214, 20, 213, 252, 5, 254, 84, 214, 21, 2, 217, 78, 213, 
+    252, 5, 216, 69, 213, 252, 5, 241, 198, 200, 254, 83, 213, 252, 5, 200, 
+    254, 83, 213, 252, 5, 222, 144, 200, 254, 83, 213, 252, 5, 254, 84, 214, 
+    223, 230, 95, 213, 252, 5, 254, 28, 213, 252, 5, 222, 189, 254, 28, 213, 
+    252, 138, 251, 10, 48, 213, 252, 5, 235, 108, 213, 252, 5, 214, 161, 7, 
+    1, 4, 6, 61, 7, 1, 4, 6, 254, 252, 7, 4, 1, 215, 94, 254, 252, 7, 1, 4, 
+    6, 252, 142, 253, 166, 7, 1, 4, 6, 251, 74, 7, 1, 4, 6, 249, 68, 7, 1, 4, 
+    6, 245, 67, 7, 1, 4, 6, 76, 7, 4, 1, 215, 94, 204, 76, 7, 4, 1, 215, 94, 
+    74, 7, 1, 4, 6, 235, 150, 7, 1, 4, 6, 235, 29, 7, 1, 4, 6, 233, 155, 2, 
+    91, 7, 1, 4, 6, 194, 7, 1, 4, 6, 223, 52, 230, 30, 7, 1, 4, 6, 78, 7, 1, 
+    4, 6, 204, 78, 7, 4, 1, 219, 189, 78, 7, 4, 1, 219, 189, 204, 78, 7, 4, 
+    1, 219, 189, 144, 2, 91, 7, 4, 1, 215, 94, 226, 238, 7, 1, 4, 6, 226, 
+    138, 7, 4, 1, 216, 15, 163, 78, 7, 4, 1, 251, 183, 163, 78, 7, 1, 4, 6, 
+    226, 109, 7, 1, 4, 6, 223, 52, 153, 7, 1, 4, 6, 215, 94, 153, 7, 1, 4, 6, 
+    217, 153, 7, 1, 4, 6, 69, 7, 4, 1, 219, 189, 69, 7, 4, 1, 219, 189, 248, 
+    8, 69, 7, 4, 1, 219, 189, 215, 94, 194, 7, 1, 4, 6, 214, 105, 7, 1, 4, 6, 
+    212, 98, 7, 1, 4, 6, 210, 159, 7, 1, 4, 6, 245, 16, 7, 1, 213, 135, 233, 
+    88, 218, 252, 7, 1, 254, 205, 26, 1, 4, 6, 243, 114, 26, 1, 4, 6, 233, 
+    104, 26, 1, 4, 6, 225, 111, 26, 1, 4, 6, 223, 40, 26, 1, 4, 6, 224, 164, 
+    33, 1, 4, 6, 245, 182, 58, 1, 6, 61, 58, 1, 6, 254, 252, 58, 1, 6, 253, 
+    166, 58, 1, 6, 252, 142, 253, 166, 58, 1, 6, 249, 68, 58, 1, 6, 76, 58, 
+    1, 6, 223, 52, 76, 58, 1, 6, 243, 209, 58, 1, 6, 242, 67, 58, 1, 6, 74, 
+    58, 1, 6, 235, 150, 58, 1, 6, 235, 29, 58, 1, 6, 156, 58, 1, 6, 194, 58, 
+    1, 6, 230, 30, 58, 1, 6, 223, 52, 230, 30, 58, 1, 6, 78, 58, 1, 6, 226, 
+    138, 58, 1, 6, 226, 109, 58, 1, 6, 153, 58, 1, 6, 217, 153, 58, 1, 6, 69, 
+    58, 1, 6, 212, 98, 58, 1, 4, 61, 58, 1, 4, 215, 94, 61, 58, 1, 4, 254, 
+    151, 58, 1, 4, 215, 94, 254, 252, 58, 1, 4, 253, 166, 58, 1, 4, 249, 68, 
+    58, 1, 4, 76, 58, 1, 4, 221, 197, 58, 1, 4, 204, 76, 58, 1, 4, 215, 94, 
+    204, 76, 58, 1, 4, 243, 209, 58, 1, 4, 215, 94, 74, 58, 1, 4, 235, 29, 
+    58, 1, 4, 194, 58, 1, 4, 245, 146, 58, 1, 4, 78, 58, 1, 4, 204, 78, 58, 
+    1, 4, 216, 15, 163, 78, 58, 1, 4, 251, 183, 163, 78, 58, 1, 4, 226, 109, 
+    58, 1, 4, 217, 153, 58, 1, 4, 69, 58, 1, 4, 219, 189, 69, 58, 1, 4, 215, 
+    94, 194, 58, 1, 4, 214, 105, 58, 1, 4, 254, 205, 58, 1, 4, 252, 34, 58, 
+    1, 4, 26, 243, 114, 58, 1, 4, 248, 62, 58, 1, 4, 26, 225, 136, 58, 1, 4, 
+    250, 118, 7, 218, 66, 4, 1, 74, 7, 218, 66, 4, 1, 153, 7, 218, 66, 4, 1, 
+    69, 7, 218, 66, 4, 1, 214, 105, 26, 218, 66, 4, 1, 252, 34, 26, 218, 66, 
+    4, 1, 243, 114, 26, 218, 66, 4, 1, 223, 40, 26, 218, 66, 4, 1, 225, 136, 
+    26, 218, 66, 4, 1, 250, 118, 7, 4, 1, 214, 214, 7, 4, 1, 57, 2, 230, 229, 
+    184, 7, 4, 1, 249, 69, 2, 230, 229, 184, 7, 4, 1, 245, 15, 2, 230, 229, 
+    184, 7, 4, 1, 232, 55, 2, 230, 229, 184, 7, 4, 1, 230, 31, 2, 230, 229, 
+    184, 7, 4, 1, 226, 110, 2, 230, 229, 184, 7, 4, 1, 223, 227, 2, 230, 229, 
+    184, 7, 4, 1, 223, 227, 2, 244, 96, 22, 230, 229, 184, 7, 4, 1, 222, 94, 
+    2, 230, 229, 184, 7, 4, 1, 217, 154, 2, 230, 229, 184, 7, 4, 1, 210, 160, 
+    2, 230, 229, 184, 7, 4, 1, 215, 94, 243, 209, 58, 1, 33, 245, 158, 7, 4, 
+    1, 235, 220, 243, 209, 7, 4, 1, 216, 212, 2, 218, 109, 7, 4, 6, 1, 240, 
+    161, 2, 91, 7, 4, 1, 235, 193, 2, 91, 7, 4, 1, 226, 110, 2, 91, 7, 4, 6, 
+    1, 104, 2, 91, 7, 4, 1, 214, 158, 2, 91, 7, 4, 1, 57, 2, 226, 70, 103, 7, 
+    4, 1, 249, 69, 2, 226, 70, 103, 7, 4, 1, 245, 15, 2, 226, 70, 103, 7, 4, 
+    1, 243, 210, 2, 226, 70, 103, 7, 4, 1, 235, 30, 2, 226, 70, 103, 7, 4, 1, 
+    233, 155, 2, 226, 70, 103, 7, 4, 1, 232, 55, 2, 226, 70, 103, 7, 4, 1, 
+    230, 31, 2, 226, 70, 103, 7, 4, 1, 226, 110, 2, 226, 70, 103, 7, 4, 1, 
+    223, 227, 2, 226, 70, 103, 7, 4, 1, 222, 94, 2, 226, 70, 103, 7, 4, 1, 
+    245, 84, 2, 226, 70, 103, 7, 4, 1, 214, 106, 2, 226, 70, 103, 7, 4, 1, 
+    211, 179, 2, 226, 70, 103, 7, 4, 1, 210, 160, 2, 226, 70, 103, 7, 4, 1, 
+    116, 2, 223, 58, 103, 7, 4, 1, 254, 152, 2, 223, 58, 103, 7, 4, 1, 249, 
+    69, 2, 241, 59, 22, 217, 78, 7, 4, 1, 160, 2, 223, 58, 103, 7, 4, 1, 204, 
+    160, 2, 223, 58, 103, 7, 4, 1, 223, 52, 204, 160, 2, 223, 58, 103, 7, 4, 
+    1, 221, 198, 2, 223, 58, 103, 7, 4, 1, 240, 161, 2, 223, 58, 103, 7, 4, 
+    1, 204, 144, 2, 223, 58, 103, 7, 4, 1, 245, 84, 2, 223, 58, 103, 7, 4, 1, 
+    104, 2, 223, 58, 103, 7, 4, 1, 245, 17, 2, 223, 58, 103, 58, 1, 4, 215, 
+    94, 254, 151, 58, 1, 4, 251, 74, 58, 1, 4, 251, 75, 2, 249, 108, 58, 1, 
+    4, 245, 67, 58, 1, 4, 223, 52, 204, 76, 58, 1, 4, 245, 14, 58, 1, 4, 247, 
+    127, 235, 151, 2, 91, 58, 1, 4, 119, 243, 209, 58, 1, 4, 215, 94, 242, 
+    67, 58, 1, 4, 240, 161, 2, 91, 58, 1, 4, 235, 192, 58, 1, 4, 6, 74, 58, 
+    1, 4, 6, 240, 161, 2, 91, 58, 1, 4, 235, 151, 2, 249, 135, 58, 1, 4, 233, 
+    155, 2, 223, 58, 103, 58, 1, 4, 233, 155, 2, 226, 70, 103, 58, 1, 4, 6, 
+    156, 58, 1, 4, 232, 55, 2, 103, 58, 1, 4, 215, 94, 232, 55, 2, 200, 233, 
+    42, 58, 1, 4, 230, 31, 2, 43, 103, 58, 1, 4, 230, 31, 2, 223, 58, 103, 
+    58, 1, 4, 6, 230, 30, 58, 1, 4, 252, 142, 78, 58, 1, 4, 225, 136, 58, 1, 
+    4, 222, 94, 2, 103, 58, 1, 4, 245, 83, 58, 1, 4, 217, 154, 2, 226, 70, 
+    103, 58, 1, 4, 104, 130, 58, 1, 4, 214, 157, 58, 1, 4, 6, 69, 58, 1, 4, 
+    214, 106, 2, 103, 58, 1, 4, 215, 94, 214, 105, 58, 1, 4, 210, 159, 58, 1, 
+    4, 210, 160, 2, 223, 58, 103, 58, 1, 4, 210, 160, 2, 249, 108, 58, 1, 4, 
+    245, 16, 58, 1, 4, 216, 180, 38, 246, 126, 242, 144, 255, 23, 38, 246, 
+    126, 255, 12, 255, 23, 38, 219, 71, 51, 38, 218, 7, 79, 38, 231, 236, 38, 
+    242, 141, 38, 231, 234, 38, 255, 10, 38, 242, 142, 38, 255, 11, 38, 7, 4, 
+    1, 223, 227, 51, 38, 251, 153, 38, 231, 235, 38, 52, 250, 39, 48, 38, 
+    226, 229, 48, 38, 210, 35, 51, 38, 235, 179, 51, 38, 214, 151, 48, 38, 
+    214, 134, 48, 38, 7, 4, 1, 244, 71, 204, 116, 48, 38, 7, 4, 1, 254, 252, 
+    38, 7, 4, 1, 254, 81, 38, 7, 4, 1, 253, 184, 38, 7, 4, 1, 251, 75, 250, 
+    191, 38, 7, 4, 1, 235, 220, 249, 68, 38, 7, 4, 1, 245, 67, 38, 7, 4, 1, 
+    243, 209, 38, 7, 1, 4, 6, 243, 209, 38, 7, 4, 1, 235, 29, 38, 7, 4, 1, 
+    156, 38, 7, 1, 4, 6, 156, 38, 7, 1, 4, 6, 194, 38, 7, 4, 1, 230, 30, 38, 
+    7, 1, 4, 6, 230, 30, 38, 7, 1, 4, 6, 153, 38, 7, 4, 1, 223, 227, 222, 
+    188, 38, 7, 4, 1, 222, 93, 38, 7, 4, 1, 200, 222, 93, 38, 7, 4, 1, 210, 
+    159, 38, 52, 235, 200, 251, 155, 51, 38, 254, 156, 128, 216, 43, 51, 38, 
+    43, 254, 2, 48, 38, 44, 254, 2, 22, 124, 254, 2, 51, 7, 6, 1, 116, 2, 
+    222, 237, 51, 7, 4, 1, 116, 2, 222, 237, 51, 7, 6, 1, 57, 2, 59, 48, 7, 
+    4, 1, 57, 2, 59, 48, 7, 6, 1, 57, 2, 59, 51, 7, 4, 1, 57, 2, 59, 51, 7, 
+    6, 1, 57, 2, 232, 220, 51, 7, 4, 1, 57, 2, 232, 220, 51, 7, 6, 1, 251, 
+    75, 2, 250, 192, 22, 142, 7, 4, 1, 251, 75, 2, 250, 192, 22, 142, 7, 6, 
+    1, 249, 69, 2, 59, 48, 7, 4, 1, 249, 69, 2, 59, 48, 7, 6, 1, 249, 69, 2, 
+    59, 51, 7, 4, 1, 249, 69, 2, 59, 51, 7, 6, 1, 249, 69, 2, 232, 220, 51, 
+    7, 4, 1, 249, 69, 2, 232, 220, 51, 7, 6, 1, 249, 69, 2, 250, 191, 7, 4, 
+    1, 249, 69, 2, 250, 191, 7, 6, 1, 249, 69, 2, 250, 39, 51, 7, 4, 1, 249, 
+    69, 2, 250, 39, 51, 7, 6, 1, 160, 2, 231, 238, 22, 242, 143, 7, 4, 1, 
+    160, 2, 231, 238, 22, 242, 143, 7, 6, 1, 160, 2, 231, 238, 22, 142, 7, 4, 
+    1, 160, 2, 231, 238, 22, 142, 7, 6, 1, 160, 2, 250, 39, 51, 7, 4, 1, 160, 
+    2, 250, 39, 51, 7, 6, 1, 160, 2, 216, 90, 51, 7, 4, 1, 160, 2, 216, 90, 
+    51, 7, 6, 1, 160, 2, 250, 192, 22, 251, 154, 7, 4, 1, 160, 2, 250, 192, 
+    22, 251, 154, 7, 6, 1, 245, 15, 2, 59, 48, 7, 4, 1, 245, 15, 2, 59, 48, 
+    7, 6, 1, 243, 210, 2, 231, 237, 7, 4, 1, 243, 210, 2, 231, 237, 7, 6, 1, 
+    242, 68, 2, 59, 48, 7, 4, 1, 242, 68, 2, 59, 48, 7, 6, 1, 242, 68, 2, 59, 
+    51, 7, 4, 1, 242, 68, 2, 59, 51, 7, 6, 1, 242, 68, 2, 248, 9, 7, 4, 1, 
+    242, 68, 2, 248, 9, 7, 6, 1, 242, 68, 2, 250, 191, 7, 4, 1, 242, 68, 2, 
+    250, 191, 7, 6, 1, 242, 68, 2, 251, 155, 51, 7, 4, 1, 242, 68, 2, 251, 
+    155, 51, 7, 6, 1, 240, 161, 2, 216, 90, 51, 7, 4, 1, 240, 161, 2, 216, 
+    90, 51, 7, 6, 1, 240, 161, 2, 248, 10, 22, 142, 7, 4, 1, 240, 161, 2, 
+    248, 10, 22, 142, 7, 6, 1, 235, 30, 2, 142, 7, 4, 1, 235, 30, 2, 142, 7, 
+    6, 1, 235, 30, 2, 59, 51, 7, 4, 1, 235, 30, 2, 59, 51, 7, 6, 1, 235, 30, 
+    2, 232, 220, 51, 7, 4, 1, 235, 30, 2, 232, 220, 51, 7, 6, 1, 233, 155, 2, 
+    59, 51, 7, 4, 1, 233, 155, 2, 59, 51, 7, 6, 1, 233, 155, 2, 59, 252, 51, 
+    22, 231, 237, 7, 4, 1, 233, 155, 2, 59, 252, 51, 22, 231, 237, 7, 6, 1, 
+    233, 155, 2, 232, 220, 51, 7, 4, 1, 233, 155, 2, 232, 220, 51, 7, 6, 1, 
+    233, 155, 2, 250, 39, 51, 7, 4, 1, 233, 155, 2, 250, 39, 51, 7, 6, 1, 
+    232, 55, 2, 142, 7, 4, 1, 232, 55, 2, 142, 7, 6, 1, 232, 55, 2, 59, 48, 
+    7, 4, 1, 232, 55, 2, 59, 48, 7, 6, 1, 232, 55, 2, 59, 51, 7, 4, 1, 232, 
+    55, 2, 59, 51, 7, 6, 1, 230, 31, 2, 59, 48, 7, 4, 1, 230, 31, 2, 59, 48, 
+    7, 6, 1, 230, 31, 2, 59, 51, 7, 4, 1, 230, 31, 2, 59, 51, 7, 6, 1, 230, 
+    31, 2, 232, 220, 51, 7, 4, 1, 230, 31, 2, 232, 220, 51, 7, 6, 1, 230, 31, 
+    2, 250, 39, 51, 7, 4, 1, 230, 31, 2, 250, 39, 51, 7, 6, 1, 144, 2, 216, 
+    90, 22, 142, 7, 4, 1, 144, 2, 216, 90, 22, 142, 7, 6, 1, 144, 2, 216, 90, 
+    22, 248, 9, 7, 4, 1, 144, 2, 216, 90, 22, 248, 9, 7, 6, 1, 144, 2, 231, 
+    238, 22, 242, 143, 7, 4, 1, 144, 2, 231, 238, 22, 242, 143, 7, 6, 1, 144, 
+    2, 231, 238, 22, 142, 7, 4, 1, 144, 2, 231, 238, 22, 142, 7, 6, 1, 226, 
+    110, 2, 142, 7, 4, 1, 226, 110, 2, 142, 7, 6, 1, 226, 110, 2, 59, 48, 7, 
+    4, 1, 226, 110, 2, 59, 48, 7, 6, 1, 223, 227, 2, 59, 48, 7, 4, 1, 223, 
+    227, 2, 59, 48, 7, 6, 1, 223, 227, 2, 59, 51, 7, 4, 1, 223, 227, 2, 59, 
+    51, 7, 6, 1, 223, 227, 2, 59, 252, 51, 22, 231, 237, 7, 4, 1, 223, 227, 
+    2, 59, 252, 51, 22, 231, 237, 7, 6, 1, 223, 227, 2, 232, 220, 51, 7, 4, 
+    1, 223, 227, 2, 232, 220, 51, 7, 6, 1, 222, 94, 2, 59, 48, 7, 4, 1, 222, 
+    94, 2, 59, 48, 7, 6, 1, 222, 94, 2, 59, 51, 7, 4, 1, 222, 94, 2, 59, 51, 
+    7, 6, 1, 222, 94, 2, 255, 12, 22, 59, 48, 7, 4, 1, 222, 94, 2, 255, 12, 
+    22, 59, 48, 7, 6, 1, 222, 94, 2, 250, 243, 22, 59, 48, 7, 4, 1, 222, 94, 
+    2, 250, 243, 22, 59, 48, 7, 6, 1, 222, 94, 2, 59, 252, 51, 22, 59, 48, 7, 
+    4, 1, 222, 94, 2, 59, 252, 51, 22, 59, 48, 7, 6, 1, 217, 154, 2, 59, 48, 
     7, 4, 1, 217, 154, 2, 59, 48, 7, 6, 1, 217, 154, 2, 59, 51, 7, 4, 1, 217, 
-    154, 2, 59, 51, 7, 6, 1, 217, 154, 2, 232, 215, 51, 7, 4, 1, 217, 154, 2, 
-    232, 215, 51, 7, 6, 1, 217, 154, 2, 250, 32, 51, 7, 4, 1, 217, 154, 2, 
-    250, 32, 51, 7, 6, 1, 104, 2, 248, 3, 51, 7, 4, 1, 104, 2, 248, 3, 51, 7, 
-    6, 1, 104, 2, 216, 90, 51, 7, 4, 1, 104, 2, 216, 90, 51, 7, 6, 1, 104, 2, 
-    250, 32, 51, 7, 4, 1, 104, 2, 250, 32, 51, 7, 6, 1, 104, 2, 216, 90, 22, 
-    142, 7, 4, 1, 104, 2, 216, 90, 22, 142, 7, 6, 1, 104, 2, 231, 234, 22, 
-    248, 2, 7, 4, 1, 104, 2, 231, 234, 22, 248, 2, 7, 6, 1, 214, 106, 2, 183, 
-    7, 4, 1, 214, 106, 2, 183, 7, 6, 1, 214, 106, 2, 59, 51, 7, 4, 1, 214, 
-    106, 2, 59, 51, 7, 6, 1, 212, 99, 2, 242, 137, 7, 4, 1, 212, 99, 2, 242, 
-    137, 7, 6, 1, 212, 99, 2, 142, 7, 4, 1, 212, 99, 2, 142, 7, 6, 1, 212, 
-    99, 2, 248, 2, 7, 4, 1, 212, 99, 2, 248, 2, 7, 6, 1, 212, 99, 2, 59, 48, 
-    7, 4, 1, 212, 99, 2, 59, 48, 7, 6, 1, 212, 99, 2, 59, 51, 7, 4, 1, 212, 
-    99, 2, 59, 51, 7, 6, 1, 211, 179, 2, 59, 48, 7, 4, 1, 211, 179, 2, 59, 
-    48, 7, 6, 1, 211, 179, 2, 248, 2, 7, 4, 1, 211, 179, 2, 248, 2, 7, 6, 1, 
-    211, 118, 2, 59, 48, 7, 4, 1, 211, 118, 2, 59, 48, 7, 6, 1, 210, 160, 2, 
-    250, 31, 7, 4, 1, 210, 160, 2, 250, 31, 7, 6, 1, 210, 160, 2, 59, 51, 7, 
-    4, 1, 210, 160, 2, 59, 51, 7, 6, 1, 210, 160, 2, 232, 215, 51, 7, 4, 1, 
-    210, 160, 2, 232, 215, 51, 7, 4, 1, 242, 62, 2, 232, 215, 51, 7, 4, 1, 
-    217, 154, 2, 248, 2, 7, 4, 1, 212, 99, 2, 222, 235, 48, 7, 4, 1, 211, 
-    118, 2, 222, 235, 48, 7, 4, 1, 115, 2, 44, 163, 222, 234, 7, 4, 1, 199, 
-    222, 93, 2, 59, 48, 7, 4, 1, 199, 222, 93, 2, 248, 0, 91, 7, 4, 1, 199, 
-    222, 93, 2, 125, 91, 7, 6, 1, 220, 77, 222, 92, 7, 4, 1, 248, 55, 7, 6, 
-    1, 115, 2, 59, 51, 7, 4, 1, 115, 2, 59, 51, 7, 6, 1, 115, 2, 241, 53, 48, 
-    7, 4, 1, 115, 2, 241, 53, 48, 7, 6, 1, 115, 2, 250, 32, 22, 142, 7, 4, 1, 
-    115, 2, 250, 32, 22, 142, 7, 6, 1, 115, 2, 250, 32, 22, 242, 137, 7, 4, 
-    1, 115, 2, 250, 32, 22, 242, 137, 7, 6, 1, 115, 2, 250, 32, 22, 241, 53, 
-    48, 7, 4, 1, 115, 2, 250, 32, 22, 241, 53, 48, 7, 6, 1, 115, 2, 250, 32, 
-    22, 183, 7, 4, 1, 115, 2, 250, 32, 22, 183, 7, 6, 1, 115, 2, 250, 32, 22, 
-    59, 51, 7, 4, 1, 115, 2, 250, 32, 22, 59, 51, 7, 6, 1, 115, 2, 251, 148, 
-    22, 142, 7, 4, 1, 115, 2, 251, 148, 22, 142, 7, 6, 1, 115, 2, 251, 148, 
-    22, 242, 137, 7, 4, 1, 115, 2, 251, 148, 22, 242, 137, 7, 6, 1, 115, 2, 
-    251, 148, 22, 241, 53, 48, 7, 4, 1, 115, 2, 251, 148, 22, 241, 53, 48, 7, 
-    6, 1, 115, 2, 251, 148, 22, 183, 7, 4, 1, 115, 2, 251, 148, 22, 183, 7, 
-    6, 1, 115, 2, 251, 148, 22, 59, 51, 7, 4, 1, 115, 2, 251, 148, 22, 59, 
+    154, 2, 59, 51, 7, 6, 1, 217, 154, 2, 232, 220, 51, 7, 4, 1, 217, 154, 2, 
+    232, 220, 51, 7, 6, 1, 217, 154, 2, 250, 39, 51, 7, 4, 1, 217, 154, 2, 
+    250, 39, 51, 7, 6, 1, 104, 2, 248, 10, 51, 7, 4, 1, 104, 2, 248, 10, 51, 
+    7, 6, 1, 104, 2, 216, 90, 51, 7, 4, 1, 104, 2, 216, 90, 51, 7, 6, 1, 104, 
+    2, 250, 39, 51, 7, 4, 1, 104, 2, 250, 39, 51, 7, 6, 1, 104, 2, 216, 90, 
+    22, 142, 7, 4, 1, 104, 2, 216, 90, 22, 142, 7, 6, 1, 104, 2, 231, 238, 
+    22, 248, 9, 7, 4, 1, 104, 2, 231, 238, 22, 248, 9, 7, 6, 1, 214, 106, 2, 
+    184, 7, 4, 1, 214, 106, 2, 184, 7, 6, 1, 214, 106, 2, 59, 51, 7, 4, 1, 
+    214, 106, 2, 59, 51, 7, 6, 1, 212, 99, 2, 242, 143, 7, 4, 1, 212, 99, 2, 
+    242, 143, 7, 6, 1, 212, 99, 2, 142, 7, 4, 1, 212, 99, 2, 142, 7, 6, 1, 
+    212, 99, 2, 248, 9, 7, 4, 1, 212, 99, 2, 248, 9, 7, 6, 1, 212, 99, 2, 59, 
+    48, 7, 4, 1, 212, 99, 2, 59, 48, 7, 6, 1, 212, 99, 2, 59, 51, 7, 4, 1, 
+    212, 99, 2, 59, 51, 7, 6, 1, 211, 179, 2, 59, 48, 7, 4, 1, 211, 179, 2, 
+    59, 48, 7, 6, 1, 211, 179, 2, 248, 9, 7, 4, 1, 211, 179, 2, 248, 9, 7, 6, 
+    1, 211, 118, 2, 59, 48, 7, 4, 1, 211, 118, 2, 59, 48, 7, 6, 1, 210, 160, 
+    2, 250, 38, 7, 4, 1, 210, 160, 2, 250, 38, 7, 6, 1, 210, 160, 2, 59, 51, 
+    7, 4, 1, 210, 160, 2, 59, 51, 7, 6, 1, 210, 160, 2, 232, 220, 51, 7, 4, 
+    1, 210, 160, 2, 232, 220, 51, 7, 4, 1, 242, 68, 2, 232, 220, 51, 7, 4, 1, 
+    217, 154, 2, 248, 9, 7, 4, 1, 212, 99, 2, 222, 237, 48, 7, 4, 1, 211, 
+    118, 2, 222, 237, 48, 7, 4, 1, 116, 2, 44, 163, 222, 236, 7, 4, 1, 200, 
+    222, 94, 2, 59, 48, 7, 4, 1, 200, 222, 94, 2, 248, 7, 91, 7, 4, 1, 200, 
+    222, 94, 2, 125, 91, 7, 6, 1, 220, 78, 222, 93, 7, 4, 1, 248, 62, 7, 6, 
+    1, 116, 2, 59, 51, 7, 4, 1, 116, 2, 59, 51, 7, 6, 1, 116, 2, 241, 59, 48, 
+    7, 4, 1, 116, 2, 241, 59, 48, 7, 6, 1, 116, 2, 250, 39, 22, 142, 7, 4, 1, 
+    116, 2, 250, 39, 22, 142, 7, 6, 1, 116, 2, 250, 39, 22, 242, 143, 7, 4, 
+    1, 116, 2, 250, 39, 22, 242, 143, 7, 6, 1, 116, 2, 250, 39, 22, 241, 59, 
+    48, 7, 4, 1, 116, 2, 250, 39, 22, 241, 59, 48, 7, 6, 1, 116, 2, 250, 39, 
+    22, 184, 7, 4, 1, 116, 2, 250, 39, 22, 184, 7, 6, 1, 116, 2, 250, 39, 22, 
+    59, 51, 7, 4, 1, 116, 2, 250, 39, 22, 59, 51, 7, 6, 1, 116, 2, 251, 155, 
+    22, 142, 7, 4, 1, 116, 2, 251, 155, 22, 142, 7, 6, 1, 116, 2, 251, 155, 
+    22, 242, 143, 7, 4, 1, 116, 2, 251, 155, 22, 242, 143, 7, 6, 1, 116, 2, 
+    251, 155, 22, 241, 59, 48, 7, 4, 1, 116, 2, 251, 155, 22, 241, 59, 48, 7, 
+    6, 1, 116, 2, 251, 155, 22, 184, 7, 4, 1, 116, 2, 251, 155, 22, 184, 7, 
+    6, 1, 116, 2, 251, 155, 22, 59, 51, 7, 4, 1, 116, 2, 251, 155, 22, 59, 
     51, 7, 6, 1, 160, 2, 59, 51, 7, 4, 1, 160, 2, 59, 51, 7, 6, 1, 160, 2, 
-    241, 53, 48, 7, 4, 1, 160, 2, 241, 53, 48, 7, 6, 1, 160, 2, 183, 7, 4, 1, 
-    160, 2, 183, 7, 6, 1, 160, 2, 250, 32, 22, 142, 7, 4, 1, 160, 2, 250, 32, 
-    22, 142, 7, 6, 1, 160, 2, 250, 32, 22, 242, 137, 7, 4, 1, 160, 2, 250, 
-    32, 22, 242, 137, 7, 6, 1, 160, 2, 250, 32, 22, 241, 53, 48, 7, 4, 1, 
-    160, 2, 250, 32, 22, 241, 53, 48, 7, 6, 1, 160, 2, 250, 32, 22, 183, 7, 
-    4, 1, 160, 2, 250, 32, 22, 183, 7, 6, 1, 160, 2, 250, 32, 22, 59, 51, 7, 
-    4, 1, 160, 2, 250, 32, 22, 59, 51, 7, 6, 1, 240, 155, 2, 241, 53, 48, 7, 
-    4, 1, 240, 155, 2, 241, 53, 48, 7, 6, 1, 240, 155, 2, 59, 51, 7, 4, 1, 
-    240, 155, 2, 59, 51, 7, 6, 1, 144, 2, 59, 51, 7, 4, 1, 144, 2, 59, 51, 7, 
-    6, 1, 144, 2, 241, 53, 48, 7, 4, 1, 144, 2, 241, 53, 48, 7, 6, 1, 144, 2, 
-    250, 32, 22, 142, 7, 4, 1, 144, 2, 250, 32, 22, 142, 7, 6, 1, 144, 2, 
-    250, 32, 22, 242, 137, 7, 4, 1, 144, 2, 250, 32, 22, 242, 137, 7, 6, 1, 
-    144, 2, 250, 32, 22, 241, 53, 48, 7, 4, 1, 144, 2, 250, 32, 22, 241, 53, 
-    48, 7, 6, 1, 144, 2, 250, 32, 22, 183, 7, 4, 1, 144, 2, 250, 32, 22, 183, 
-    7, 6, 1, 144, 2, 250, 32, 22, 59, 51, 7, 4, 1, 144, 2, 250, 32, 22, 59, 
-    51, 7, 6, 1, 144, 2, 240, 250, 22, 142, 7, 4, 1, 144, 2, 240, 250, 22, 
-    142, 7, 6, 1, 144, 2, 240, 250, 22, 242, 137, 7, 4, 1, 144, 2, 240, 250, 
-    22, 242, 137, 7, 6, 1, 144, 2, 240, 250, 22, 241, 53, 48, 7, 4, 1, 144, 
-    2, 240, 250, 22, 241, 53, 48, 7, 6, 1, 144, 2, 240, 250, 22, 183, 7, 4, 
-    1, 144, 2, 240, 250, 22, 183, 7, 6, 1, 144, 2, 240, 250, 22, 59, 51, 7, 
-    4, 1, 144, 2, 240, 250, 22, 59, 51, 7, 6, 1, 104, 2, 59, 51, 7, 4, 1, 
-    104, 2, 59, 51, 7, 6, 1, 104, 2, 241, 53, 48, 7, 4, 1, 104, 2, 241, 53, 
-    48, 7, 6, 1, 104, 2, 240, 250, 22, 142, 7, 4, 1, 104, 2, 240, 250, 22, 
-    142, 7, 6, 1, 104, 2, 240, 250, 22, 242, 137, 7, 4, 1, 104, 2, 240, 250, 
-    22, 242, 137, 7, 6, 1, 104, 2, 240, 250, 22, 241, 53, 48, 7, 4, 1, 104, 
-    2, 240, 250, 22, 241, 53, 48, 7, 6, 1, 104, 2, 240, 250, 22, 183, 7, 4, 
-    1, 104, 2, 240, 250, 22, 183, 7, 6, 1, 104, 2, 240, 250, 22, 59, 51, 7, 
-    4, 1, 104, 2, 240, 250, 22, 59, 51, 7, 6, 1, 211, 118, 2, 242, 137, 7, 4, 
-    1, 211, 118, 2, 242, 137, 7, 6, 1, 211, 118, 2, 59, 51, 7, 4, 1, 211, 
-    118, 2, 59, 51, 7, 6, 1, 211, 118, 2, 241, 53, 48, 7, 4, 1, 211, 118, 2, 
-    241, 53, 48, 7, 6, 1, 211, 118, 2, 183, 7, 4, 1, 211, 118, 2, 183, 7, 6, 
-    1, 230, 224, 232, 186, 7, 4, 1, 230, 224, 232, 186, 7, 6, 1, 230, 224, 
-    214, 105, 7, 4, 1, 230, 224, 214, 105, 7, 6, 1, 211, 118, 2, 232, 124, 7, 
-    4, 1, 211, 118, 2, 232, 124, 26, 4, 1, 254, 145, 2, 224, 155, 26, 4, 1, 
-    254, 145, 2, 248, 154, 26, 4, 1, 254, 145, 2, 224, 156, 22, 214, 13, 26, 
-    4, 1, 254, 145, 2, 248, 155, 22, 214, 13, 26, 4, 1, 254, 145, 2, 224, 
-    156, 22, 226, 111, 26, 4, 1, 254, 145, 2, 248, 155, 22, 226, 111, 26, 4, 
-    1, 254, 145, 2, 224, 156, 22, 225, 176, 26, 4, 1, 254, 145, 2, 248, 155, 
-    22, 225, 176, 26, 6, 1, 254, 145, 2, 224, 155, 26, 6, 1, 254, 145, 2, 
-    248, 154, 26, 6, 1, 254, 145, 2, 224, 156, 22, 214, 13, 26, 6, 1, 254, 
-    145, 2, 248, 155, 22, 214, 13, 26, 6, 1, 254, 145, 2, 224, 156, 22, 226, 
-    111, 26, 6, 1, 254, 145, 2, 248, 155, 22, 226, 111, 26, 6, 1, 254, 145, 
-    2, 224, 156, 22, 225, 176, 26, 6, 1, 254, 145, 2, 248, 155, 22, 225, 176, 
-    26, 4, 1, 245, 102, 2, 224, 155, 26, 4, 1, 245, 102, 2, 248, 154, 26, 4, 
-    1, 245, 102, 2, 224, 156, 22, 214, 13, 26, 4, 1, 245, 102, 2, 248, 155, 
-    22, 214, 13, 26, 4, 1, 245, 102, 2, 224, 156, 22, 226, 111, 26, 4, 1, 
-    245, 102, 2, 248, 155, 22, 226, 111, 26, 6, 1, 245, 102, 2, 224, 155, 26, 
-    6, 1, 245, 102, 2, 248, 154, 26, 6, 1, 245, 102, 2, 224, 156, 22, 214, 
-    13, 26, 6, 1, 245, 102, 2, 248, 155, 22, 214, 13, 26, 6, 1, 245, 102, 2, 
-    224, 156, 22, 226, 111, 26, 6, 1, 245, 102, 2, 248, 155, 22, 226, 111, 
-    26, 4, 1, 245, 65, 2, 224, 155, 26, 4, 1, 245, 65, 2, 248, 154, 26, 4, 1, 
-    245, 65, 2, 224, 156, 22, 214, 13, 26, 4, 1, 245, 65, 2, 248, 155, 22, 
-    214, 13, 26, 4, 1, 245, 65, 2, 224, 156, 22, 226, 111, 26, 4, 1, 245, 65, 
-    2, 248, 155, 22, 226, 111, 26, 4, 1, 245, 65, 2, 224, 156, 22, 225, 176, 
-    26, 4, 1, 245, 65, 2, 248, 155, 22, 225, 176, 26, 6, 1, 245, 65, 2, 224, 
-    155, 26, 6, 1, 245, 65, 2, 248, 154, 26, 6, 1, 245, 65, 2, 224, 156, 22, 
-    214, 13, 26, 6, 1, 245, 65, 2, 248, 155, 22, 214, 13, 26, 6, 1, 245, 65, 
-    2, 224, 156, 22, 226, 111, 26, 6, 1, 245, 65, 2, 248, 155, 22, 226, 111, 
-    26, 6, 1, 245, 65, 2, 224, 156, 22, 225, 176, 26, 6, 1, 245, 65, 2, 248, 
-    155, 22, 225, 176, 26, 4, 1, 235, 187, 2, 224, 155, 26, 4, 1, 235, 187, 
-    2, 248, 154, 26, 4, 1, 235, 187, 2, 224, 156, 22, 214, 13, 26, 4, 1, 235, 
-    187, 2, 248, 155, 22, 214, 13, 26, 4, 1, 235, 187, 2, 224, 156, 22, 226, 
-    111, 26, 4, 1, 235, 187, 2, 248, 155, 22, 226, 111, 26, 4, 1, 235, 187, 
-    2, 224, 156, 22, 225, 176, 26, 4, 1, 235, 187, 2, 248, 155, 22, 225, 176, 
-    26, 6, 1, 235, 187, 2, 224, 155, 26, 6, 1, 235, 187, 2, 248, 154, 26, 6, 
-    1, 235, 187, 2, 224, 156, 22, 214, 13, 26, 6, 1, 235, 187, 2, 248, 155, 
-    22, 214, 13, 26, 6, 1, 235, 187, 2, 224, 156, 22, 226, 111, 26, 6, 1, 
-    235, 187, 2, 248, 155, 22, 226, 111, 26, 6, 1, 235, 187, 2, 224, 156, 22, 
-    225, 176, 26, 6, 1, 235, 187, 2, 248, 155, 22, 225, 176, 26, 4, 1, 226, 
-    201, 2, 224, 155, 26, 4, 1, 226, 201, 2, 248, 154, 26, 4, 1, 226, 201, 2, 
-    224, 156, 22, 214, 13, 26, 4, 1, 226, 201, 2, 248, 155, 22, 214, 13, 26, 
-    4, 1, 226, 201, 2, 224, 156, 22, 226, 111, 26, 4, 1, 226, 201, 2, 248, 
-    155, 22, 226, 111, 26, 6, 1, 226, 201, 2, 224, 155, 26, 6, 1, 226, 201, 
-    2, 248, 154, 26, 6, 1, 226, 201, 2, 224, 156, 22, 214, 13, 26, 6, 1, 226, 
-    201, 2, 248, 155, 22, 214, 13, 26, 6, 1, 226, 201, 2, 224, 156, 22, 226, 
-    111, 26, 6, 1, 226, 201, 2, 248, 155, 22, 226, 111, 26, 4, 1, 214, 158, 
-    2, 224, 155, 26, 4, 1, 214, 158, 2, 248, 154, 26, 4, 1, 214, 158, 2, 224, 
-    156, 22, 214, 13, 26, 4, 1, 214, 158, 2, 248, 155, 22, 214, 13, 26, 4, 1, 
-    214, 158, 2, 224, 156, 22, 226, 111, 26, 4, 1, 214, 158, 2, 248, 155, 22, 
-    226, 111, 26, 4, 1, 214, 158, 2, 224, 156, 22, 225, 176, 26, 4, 1, 214, 
-    158, 2, 248, 155, 22, 225, 176, 26, 6, 1, 214, 158, 2, 248, 154, 26, 6, 
-    1, 214, 158, 2, 248, 155, 22, 214, 13, 26, 6, 1, 214, 158, 2, 248, 155, 
-    22, 226, 111, 26, 6, 1, 214, 158, 2, 248, 155, 22, 225, 176, 26, 4, 1, 
-    226, 203, 2, 224, 155, 26, 4, 1, 226, 203, 2, 248, 154, 26, 4, 1, 226, 
-    203, 2, 224, 156, 22, 214, 13, 26, 4, 1, 226, 203, 2, 248, 155, 22, 214, 
-    13, 26, 4, 1, 226, 203, 2, 224, 156, 22, 226, 111, 26, 4, 1, 226, 203, 2, 
-    248, 155, 22, 226, 111, 26, 4, 1, 226, 203, 2, 224, 156, 22, 225, 176, 
-    26, 4, 1, 226, 203, 2, 248, 155, 22, 225, 176, 26, 6, 1, 226, 203, 2, 
-    224, 155, 26, 6, 1, 226, 203, 2, 248, 154, 26, 6, 1, 226, 203, 2, 224, 
-    156, 22, 214, 13, 26, 6, 1, 226, 203, 2, 248, 155, 22, 214, 13, 26, 6, 1, 
-    226, 203, 2, 224, 156, 22, 226, 111, 26, 6, 1, 226, 203, 2, 248, 155, 22, 
-    226, 111, 26, 6, 1, 226, 203, 2, 224, 156, 22, 225, 176, 26, 6, 1, 226, 
-    203, 2, 248, 155, 22, 225, 176, 26, 4, 1, 254, 145, 2, 214, 13, 26, 4, 1, 
-    254, 145, 2, 226, 111, 26, 4, 1, 245, 102, 2, 214, 13, 26, 4, 1, 245, 
-    102, 2, 226, 111, 26, 4, 1, 245, 65, 2, 214, 13, 26, 4, 1, 245, 65, 2, 
-    226, 111, 26, 4, 1, 235, 187, 2, 214, 13, 26, 4, 1, 235, 187, 2, 226, 
-    111, 26, 4, 1, 226, 201, 2, 214, 13, 26, 4, 1, 226, 201, 2, 226, 111, 26, 
-    4, 1, 214, 158, 2, 214, 13, 26, 4, 1, 214, 158, 2, 226, 111, 26, 4, 1, 
-    226, 203, 2, 214, 13, 26, 4, 1, 226, 203, 2, 226, 111, 26, 4, 1, 254, 
-    145, 2, 224, 156, 22, 210, 219, 26, 4, 1, 254, 145, 2, 248, 155, 22, 210, 
-    219, 26, 4, 1, 254, 145, 2, 224, 156, 22, 214, 14, 22, 210, 219, 26, 4, 
-    1, 254, 145, 2, 248, 155, 22, 214, 14, 22, 210, 219, 26, 4, 1, 254, 145, 
-    2, 224, 156, 22, 226, 112, 22, 210, 219, 26, 4, 1, 254, 145, 2, 248, 155, 
-    22, 226, 112, 22, 210, 219, 26, 4, 1, 254, 145, 2, 224, 156, 22, 225, 
-    177, 22, 210, 219, 26, 4, 1, 254, 145, 2, 248, 155, 22, 225, 177, 22, 
-    210, 219, 26, 6, 1, 254, 145, 2, 224, 156, 22, 224, 168, 26, 6, 1, 254, 
-    145, 2, 248, 155, 22, 224, 168, 26, 6, 1, 254, 145, 2, 224, 156, 22, 214, 
-    14, 22, 224, 168, 26, 6, 1, 254, 145, 2, 248, 155, 22, 214, 14, 22, 224, 
-    168, 26, 6, 1, 254, 145, 2, 224, 156, 22, 226, 112, 22, 224, 168, 26, 6, 
-    1, 254, 145, 2, 248, 155, 22, 226, 112, 22, 224, 168, 26, 6, 1, 254, 145, 
-    2, 224, 156, 22, 225, 177, 22, 224, 168, 26, 6, 1, 254, 145, 2, 248, 155, 
-    22, 225, 177, 22, 224, 168, 26, 4, 1, 245, 65, 2, 224, 156, 22, 210, 219, 
-    26, 4, 1, 245, 65, 2, 248, 155, 22, 210, 219, 26, 4, 1, 245, 65, 2, 224, 
-    156, 22, 214, 14, 22, 210, 219, 26, 4, 1, 245, 65, 2, 248, 155, 22, 214, 
-    14, 22, 210, 219, 26, 4, 1, 245, 65, 2, 224, 156, 22, 226, 112, 22, 210, 
-    219, 26, 4, 1, 245, 65, 2, 248, 155, 22, 226, 112, 22, 210, 219, 26, 4, 
-    1, 245, 65, 2, 224, 156, 22, 225, 177, 22, 210, 219, 26, 4, 1, 245, 65, 
-    2, 248, 155, 22, 225, 177, 22, 210, 219, 26, 6, 1, 245, 65, 2, 224, 156, 
-    22, 224, 168, 26, 6, 1, 245, 65, 2, 248, 155, 22, 224, 168, 26, 6, 1, 
-    245, 65, 2, 224, 156, 22, 214, 14, 22, 224, 168, 26, 6, 1, 245, 65, 2, 
-    248, 155, 22, 214, 14, 22, 224, 168, 26, 6, 1, 245, 65, 2, 224, 156, 22, 
-    226, 112, 22, 224, 168, 26, 6, 1, 245, 65, 2, 248, 155, 22, 226, 112, 22, 
-    224, 168, 26, 6, 1, 245, 65, 2, 224, 156, 22, 225, 177, 22, 224, 168, 26, 
-    6, 1, 245, 65, 2, 248, 155, 22, 225, 177, 22, 224, 168, 26, 4, 1, 226, 
-    203, 2, 224, 156, 22, 210, 219, 26, 4, 1, 226, 203, 2, 248, 155, 22, 210, 
-    219, 26, 4, 1, 226, 203, 2, 224, 156, 22, 214, 14, 22, 210, 219, 26, 4, 
-    1, 226, 203, 2, 248, 155, 22, 214, 14, 22, 210, 219, 26, 4, 1, 226, 203, 
-    2, 224, 156, 22, 226, 112, 22, 210, 219, 26, 4, 1, 226, 203, 2, 248, 155, 
-    22, 226, 112, 22, 210, 219, 26, 4, 1, 226, 203, 2, 224, 156, 22, 225, 
-    177, 22, 210, 219, 26, 4, 1, 226, 203, 2, 248, 155, 22, 225, 177, 22, 
-    210, 219, 26, 6, 1, 226, 203, 2, 224, 156, 22, 224, 168, 26, 6, 1, 226, 
-    203, 2, 248, 155, 22, 224, 168, 26, 6, 1, 226, 203, 2, 224, 156, 22, 214, 
-    14, 22, 224, 168, 26, 6, 1, 226, 203, 2, 248, 155, 22, 214, 14, 22, 224, 
-    168, 26, 6, 1, 226, 203, 2, 224, 156, 22, 226, 112, 22, 224, 168, 26, 6, 
-    1, 226, 203, 2, 248, 155, 22, 226, 112, 22, 224, 168, 26, 6, 1, 226, 203, 
-    2, 224, 156, 22, 225, 177, 22, 224, 168, 26, 6, 1, 226, 203, 2, 248, 155, 
-    22, 225, 177, 22, 224, 168, 26, 4, 1, 254, 145, 2, 213, 120, 26, 4, 1, 
-    254, 145, 2, 231, 233, 26, 4, 1, 254, 145, 2, 214, 14, 22, 210, 219, 26, 
-    4, 1, 254, 145, 2, 210, 219, 26, 4, 1, 254, 145, 2, 226, 112, 22, 210, 
-    219, 26, 4, 1, 254, 145, 2, 225, 176, 26, 4, 1, 254, 145, 2, 225, 177, 
-    22, 210, 219, 26, 6, 1, 254, 145, 2, 213, 120, 26, 6, 1, 254, 145, 2, 
-    231, 233, 26, 6, 1, 254, 145, 2, 214, 13, 26, 6, 1, 254, 145, 2, 226, 
-    111, 26, 6, 1, 254, 145, 2, 224, 168, 26, 234, 3, 26, 224, 168, 26, 224, 
-    155, 26, 225, 176, 26, 247, 253, 22, 225, 176, 26, 4, 1, 245, 65, 2, 214, 
-    14, 22, 210, 219, 26, 4, 1, 245, 65, 2, 210, 219, 26, 4, 1, 245, 65, 2, 
-    226, 112, 22, 210, 219, 26, 4, 1, 245, 65, 2, 225, 176, 26, 4, 1, 245, 
-    65, 2, 225, 177, 22, 210, 219, 26, 6, 1, 245, 102, 2, 214, 13, 26, 6, 1, 
-    245, 102, 2, 226, 111, 26, 6, 1, 245, 65, 2, 214, 13, 26, 6, 1, 245, 65, 
-    2, 226, 111, 26, 6, 1, 245, 65, 2, 224, 168, 26, 224, 156, 22, 214, 13, 
-    26, 224, 156, 22, 226, 111, 26, 224, 156, 22, 225, 176, 26, 4, 1, 235, 
-    187, 2, 213, 120, 26, 4, 1, 235, 187, 2, 231, 233, 26, 4, 1, 235, 187, 2, 
-    247, 253, 22, 214, 13, 26, 4, 1, 235, 187, 2, 247, 253, 22, 226, 111, 26, 
-    4, 1, 235, 187, 2, 225, 176, 26, 4, 1, 235, 187, 2, 247, 253, 22, 225, 
-    176, 26, 6, 1, 235, 187, 2, 213, 120, 26, 6, 1, 235, 187, 2, 231, 233, 
-    26, 6, 1, 235, 187, 2, 214, 13, 26, 6, 1, 235, 187, 2, 226, 111, 26, 248, 
-    155, 22, 214, 13, 26, 248, 155, 22, 226, 111, 26, 248, 155, 22, 225, 176, 
-    26, 4, 1, 214, 158, 2, 213, 120, 26, 4, 1, 214, 158, 2, 231, 233, 26, 4, 
-    1, 214, 158, 2, 247, 253, 22, 214, 13, 26, 4, 1, 214, 158, 2, 247, 253, 
-    22, 226, 111, 26, 4, 1, 223, 39, 2, 224, 155, 26, 4, 1, 223, 39, 2, 248, 
-    154, 26, 4, 1, 214, 158, 2, 225, 176, 26, 4, 1, 214, 158, 2, 247, 253, 
-    22, 225, 176, 26, 6, 1, 214, 158, 2, 213, 120, 26, 6, 1, 214, 158, 2, 
-    231, 233, 26, 6, 1, 214, 158, 2, 214, 13, 26, 6, 1, 214, 158, 2, 226, 
-    111, 26, 6, 1, 223, 39, 2, 248, 154, 26, 247, 253, 22, 214, 13, 26, 247, 
-    253, 22, 226, 111, 26, 214, 13, 26, 4, 1, 226, 203, 2, 214, 14, 22, 210, 
-    219, 26, 4, 1, 226, 203, 2, 210, 219, 26, 4, 1, 226, 203, 2, 226, 112, 
-    22, 210, 219, 26, 4, 1, 226, 203, 2, 225, 176, 26, 4, 1, 226, 203, 2, 
-    225, 177, 22, 210, 219, 26, 6, 1, 226, 201, 2, 214, 13, 26, 6, 1, 226, 
-    201, 2, 226, 111, 26, 6, 1, 226, 203, 2, 214, 13, 26, 6, 1, 226, 203, 2, 
-    226, 111, 26, 6, 1, 226, 203, 2, 224, 168, 26, 226, 111, 26, 248, 154, 
-    245, 152, 224, 28, 245, 161, 224, 28, 245, 152, 219, 19, 245, 161, 219, 
-    19, 216, 142, 219, 19, 244, 10, 219, 19, 219, 124, 219, 19, 244, 113, 
-    219, 19, 224, 142, 219, 19, 216, 171, 219, 19, 242, 36, 219, 19, 210, 87, 
-    211, 245, 219, 19, 210, 87, 211, 245, 228, 68, 210, 87, 211, 245, 235, 
-    64, 233, 39, 78, 222, 244, 78, 240, 169, 228, 69, 240, 169, 244, 113, 
-    248, 157, 245, 152, 248, 157, 245, 161, 248, 157, 203, 130, 52, 67, 232, 
-    214, 52, 121, 232, 214, 43, 219, 156, 223, 255, 78, 44, 219, 156, 223, 
-    255, 78, 219, 156, 232, 110, 223, 255, 78, 219, 156, 241, 164, 223, 255, 
-    78, 43, 52, 223, 255, 78, 44, 52, 223, 255, 78, 52, 232, 110, 223, 255, 
-    78, 52, 241, 164, 223, 255, 78, 248, 206, 52, 248, 206, 251, 114, 215, 
-    223, 251, 114, 123, 59, 233, 57, 113, 59, 233, 57, 203, 245, 164, 240, 
-    167, 225, 11, 232, 215, 220, 138, 226, 16, 220, 138, 233, 39, 245, 159, 
-    222, 244, 245, 159, 224, 247, 247, 197, 244, 20, 233, 39, 226, 118, 222, 
-    244, 226, 118, 229, 195, 228, 74, 219, 19, 225, 184, 230, 194, 50, 225, 
-    184, 216, 249, 216, 149, 50, 224, 191, 52, 224, 191, 215, 212, 224, 191, 
-    223, 50, 224, 191, 223, 50, 52, 224, 191, 223, 50, 215, 212, 224, 191, 
-    250, 239, 219, 156, 233, 43, 254, 111, 223, 255, 78, 219, 156, 222, 248, 
-    254, 111, 223, 255, 78, 223, 108, 78, 52, 245, 32, 78, 235, 202, 226, 
-    120, 214, 180, 135, 216, 112, 250, 240, 235, 217, 225, 11, 253, 215, 240, 
-    170, 251, 114, 244, 3, 219, 96, 43, 42, 251, 159, 2, 224, 8, 44, 42, 251, 
-    159, 2, 224, 8, 52, 224, 14, 78, 224, 14, 245, 32, 78, 245, 32, 224, 14, 
-    78, 216, 71, 5, 245, 66, 223, 50, 225, 69, 50, 85, 140, 251, 114, 85, 97, 
-    251, 114, 121, 253, 217, 223, 50, 220, 151, 250, 2, 214, 163, 113, 253, 
-    216, 254, 159, 213, 188, 249, 218, 230, 183, 50, 217, 235, 248, 157, 235, 
-    194, 214, 180, 244, 53, 224, 142, 78, 134, 59, 224, 141, 224, 25, 224, 
-    191, 244, 12, 59, 224, 141, 244, 82, 59, 224, 141, 113, 59, 224, 141, 
-    244, 12, 59, 78, 246, 119, 249, 131, 215, 222, 67, 244, 12, 247, 119, 
-    231, 83, 11, 219, 19, 211, 209, 235, 64, 243, 228, 254, 53, 235, 192, 
-    216, 86, 235, 192, 220, 138, 235, 192, 225, 23, 235, 229, 217, 183, 217, 
-    252, 255, 6, 217, 183, 217, 252, 235, 229, 10, 244, 21, 220, 81, 255, 6, 
-    10, 244, 21, 220, 81, 229, 190, 21, 220, 82, 228, 70, 21, 220, 82, 218, 
-    24, 210, 86, 218, 24, 7, 4, 1, 73, 218, 24, 161, 218, 24, 189, 218, 24, 
-    194, 218, 24, 198, 218, 24, 195, 218, 24, 200, 218, 24, 96, 50, 218, 24, 
-    230, 182, 218, 24, 245, 99, 50, 218, 24, 43, 226, 4, 218, 24, 44, 226, 4, 
-    218, 24, 7, 4, 1, 230, 26, 218, 66, 210, 86, 218, 66, 110, 218, 66, 105, 
-    218, 66, 158, 218, 66, 161, 218, 66, 189, 218, 66, 194, 218, 66, 198, 
-    218, 66, 195, 218, 66, 200, 218, 66, 96, 50, 218, 66, 230, 182, 218, 66, 
-    245, 99, 50, 218, 66, 43, 226, 4, 218, 66, 44, 226, 4, 7, 218, 66, 4, 1, 
-    61, 7, 218, 66, 4, 1, 75, 7, 218, 66, 4, 1, 76, 7, 218, 66, 4, 1, 211, 
-    178, 7, 218, 66, 4, 1, 221, 196, 7, 218, 66, 4, 1, 242, 61, 7, 218, 66, 
-    4, 1, 235, 24, 7, 218, 66, 4, 1, 156, 7, 218, 66, 4, 1, 193, 7, 218, 66, 
-    4, 1, 230, 26, 7, 218, 66, 4, 1, 226, 106, 7, 218, 66, 4, 1, 222, 92, 7, 
-    218, 66, 4, 1, 217, 153, 245, 47, 50, 249, 228, 50, 249, 118, 50, 243, 
-    252, 243, 255, 50, 232, 199, 50, 230, 195, 50, 229, 211, 50, 225, 163, 
-    50, 222, 119, 50, 211, 217, 50, 166, 220, 50, 50, 247, 128, 50, 245, 48, 
-    50, 234, 77, 50, 215, 113, 50, 246, 102, 50, 243, 41, 225, 194, 50, 225, 
-    161, 50, 242, 110, 50, 253, 183, 50, 240, 229, 50, 250, 186, 50, 232, 
-    192, 216, 4, 50, 219, 1, 50, 216, 246, 50, 235, 242, 222, 119, 50, 215, 
-    97, 232, 199, 50, 38, 43, 242, 0, 48, 38, 44, 242, 0, 48, 38, 199, 67, 
-    232, 215, 226, 121, 38, 219, 252, 67, 232, 215, 226, 121, 38, 254, 89, 
-    80, 48, 38, 250, 3, 80, 48, 38, 43, 80, 48, 38, 44, 80, 48, 38, 222, 235, 
-    226, 121, 38, 250, 3, 222, 235, 226, 121, 38, 254, 89, 222, 235, 226, 
-    121, 38, 134, 170, 48, 38, 244, 12, 170, 48, 38, 245, 147, 250, 36, 38, 
-    245, 147, 218, 235, 38, 245, 147, 247, 249, 38, 245, 147, 250, 37, 252, 
-    181, 38, 43, 44, 80, 48, 38, 245, 147, 221, 189, 38, 245, 147, 234, 136, 
-    38, 245, 147, 214, 155, 225, 8, 215, 226, 38, 223, 51, 219, 48, 226, 121, 
-    38, 52, 67, 218, 104, 226, 121, 38, 254, 99, 87, 38, 215, 212, 214, 182, 
-    38, 211, 247, 251, 141, 48, 38, 140, 80, 226, 121, 38, 199, 52, 219, 48, 
-    226, 121, 38, 97, 242, 0, 2, 252, 140, 246, 104, 38, 140, 242, 0, 2, 252, 
-    140, 246, 104, 38, 43, 80, 51, 38, 44, 80, 51, 38, 253, 218, 48, 255, 12, 
-    226, 232, 254, 252, 216, 43, 216, 197, 218, 75, 139, 6, 251, 67, 248, 72, 
-    250, 179, 250, 176, 232, 215, 87, 250, 241, 226, 232, 251, 27, 214, 189, 
-    245, 49, 249, 192, 221, 186, 248, 72, 244, 180, 119, 4, 243, 203, 119, 6, 
-    242, 61, 251, 220, 6, 242, 61, 139, 6, 242, 61, 225, 38, 249, 192, 225, 
-    38, 249, 193, 117, 113, 225, 109, 119, 6, 73, 251, 220, 6, 73, 119, 6, 
-    156, 119, 4, 156, 233, 150, 57, 252, 142, 87, 139, 6, 230, 26, 227, 197, 
-    50, 219, 32, 223, 120, 249, 163, 119, 6, 226, 106, 139, 6, 226, 106, 139, 
-    6, 224, 97, 119, 6, 153, 251, 220, 6, 153, 139, 6, 153, 224, 197, 217, 
-    72, 223, 63, 220, 133, 78, 217, 2, 50, 215, 254, 164, 50, 213, 240, 139, 
-    6, 210, 159, 226, 134, 50, 226, 222, 50, 235, 194, 226, 222, 50, 251, 
-    220, 6, 210, 159, 215, 94, 26, 4, 1, 235, 186, 234, 174, 50, 254, 108, 
-    50, 119, 6, 253, 159, 251, 220, 6, 251, 67, 245, 69, 87, 119, 4, 75, 119, 
-    6, 75, 119, 6, 245, 7, 215, 94, 6, 245, 7, 119, 6, 193, 119, 4, 76, 112, 
-    87, 252, 30, 87, 242, 203, 87, 248, 191, 87, 235, 233, 219, 30, 222, 188, 
-    6, 224, 97, 244, 183, 50, 139, 4, 225, 109, 139, 4, 243, 108, 139, 6, 
-    243, 108, 139, 6, 225, 109, 139, 230, 25, 218, 41, 215, 94, 35, 6, 243, 
-    203, 215, 94, 35, 6, 156, 223, 50, 35, 6, 156, 215, 94, 35, 6, 211, 117, 
-    139, 32, 6, 249, 61, 139, 32, 4, 249, 61, 139, 32, 4, 75, 139, 32, 4, 73, 
-    139, 32, 4, 235, 145, 224, 171, 232, 214, 215, 94, 254, 127, 225, 184, 
-    50, 254, 181, 215, 94, 4, 245, 7, 16, 31, 221, 253, 219, 30, 212, 114, 
-    244, 3, 123, 220, 119, 212, 114, 244, 3, 123, 228, 195, 212, 114, 244, 3, 
-    123, 216, 242, 212, 114, 244, 3, 123, 216, 169, 212, 114, 244, 3, 113, 
-    216, 167, 212, 114, 244, 3, 123, 244, 118, 212, 114, 244, 3, 113, 244, 
-    117, 212, 114, 244, 3, 134, 244, 117, 212, 114, 244, 3, 244, 12, 244, 
-    117, 212, 114, 244, 3, 123, 219, 116, 212, 114, 244, 3, 244, 82, 219, 
-    114, 212, 114, 244, 3, 123, 245, 189, 212, 114, 244, 3, 134, 245, 187, 
-    212, 114, 244, 3, 244, 82, 245, 187, 212, 114, 244, 3, 220, 123, 245, 
-    187, 244, 3, 227, 198, 110, 222, 199, 227, 199, 110, 222, 199, 227, 199, 
-    105, 222, 199, 227, 199, 158, 222, 199, 227, 199, 161, 222, 199, 227, 
-    199, 189, 222, 199, 227, 199, 194, 222, 199, 227, 199, 198, 222, 199, 
-    227, 199, 195, 222, 199, 227, 199, 200, 222, 199, 227, 199, 216, 248, 
-    222, 199, 227, 199, 245, 168, 222, 199, 227, 199, 215, 76, 222, 199, 227, 
-    199, 244, 115, 222, 199, 227, 199, 123, 240, 211, 222, 199, 227, 199, 
-    244, 82, 240, 211, 222, 199, 227, 199, 123, 216, 148, 4, 222, 199, 227, 
-    199, 110, 4, 222, 199, 227, 199, 105, 4, 222, 199, 227, 199, 158, 4, 222, 
-    199, 227, 199, 161, 4, 222, 199, 227, 199, 189, 4, 222, 199, 227, 199, 
-    194, 4, 222, 199, 227, 199, 198, 4, 222, 199, 227, 199, 195, 4, 222, 199, 
-    227, 199, 200, 4, 222, 199, 227, 199, 216, 248, 4, 222, 199, 227, 199, 
-    245, 168, 4, 222, 199, 227, 199, 215, 76, 4, 222, 199, 227, 199, 244, 
-    115, 4, 222, 199, 227, 199, 123, 240, 211, 4, 222, 199, 227, 199, 244, 
-    82, 240, 211, 4, 222, 199, 227, 199, 123, 216, 148, 222, 199, 227, 199, 
-    123, 216, 149, 251, 68, 249, 61, 222, 199, 227, 199, 244, 82, 216, 148, 
-    222, 199, 227, 199, 216, 249, 216, 148, 222, 199, 227, 199, 223, 50, 123, 
-    240, 211, 7, 4, 1, 223, 50, 251, 67, 222, 199, 227, 199, 219, 126, 233, 
-    79, 17, 222, 199, 227, 199, 244, 116, 245, 227, 17, 222, 199, 227, 199, 
-    244, 116, 216, 148, 222, 199, 227, 199, 123, 240, 212, 216, 148, 212, 
-    114, 244, 3, 210, 87, 216, 167, 140, 74, 214, 153, 74, 97, 74, 246, 105, 
-    74, 43, 44, 74, 120, 124, 74, 228, 57, 212, 9, 74, 228, 57, 245, 221, 74, 
-    219, 29, 245, 221, 74, 219, 29, 212, 9, 74, 140, 80, 2, 91, 97, 80, 2, 
-    91, 140, 212, 36, 74, 97, 212, 36, 74, 140, 113, 241, 235, 74, 214, 153, 
-    113, 241, 235, 74, 97, 113, 241, 235, 74, 246, 105, 113, 241, 235, 74, 
-    140, 80, 2, 217, 78, 97, 80, 2, 217, 78, 140, 80, 243, 244, 130, 214, 
-    153, 80, 243, 244, 130, 97, 80, 243, 244, 130, 246, 105, 80, 243, 244, 
-    130, 120, 124, 80, 2, 252, 128, 140, 80, 2, 103, 97, 80, 2, 103, 140, 80, 
-    2, 232, 124, 97, 80, 2, 232, 124, 43, 44, 212, 36, 74, 43, 44, 80, 2, 91, 
-    246, 105, 210, 35, 74, 214, 153, 80, 2, 216, 78, 233, 38, 214, 153, 80, 
-    2, 216, 78, 222, 242, 246, 105, 80, 2, 216, 78, 233, 38, 246, 105, 80, 2, 
-    216, 78, 222, 242, 97, 80, 2, 249, 162, 246, 104, 246, 105, 80, 2, 249, 
-    162, 233, 38, 254, 89, 216, 15, 220, 154, 74, 250, 3, 216, 15, 220, 154, 
-    74, 228, 57, 212, 9, 80, 216, 43, 199, 130, 140, 80, 216, 43, 252, 142, 
-    117, 97, 80, 216, 43, 130, 254, 89, 204, 250, 37, 74, 250, 3, 204, 250, 
-    37, 74, 140, 242, 0, 2, 252, 140, 214, 152, 140, 242, 0, 2, 252, 140, 
-    246, 104, 214, 153, 242, 0, 2, 252, 140, 222, 242, 214, 153, 242, 0, 2, 
-    252, 140, 233, 38, 97, 242, 0, 2, 252, 140, 214, 152, 97, 242, 0, 2, 252, 
-    140, 246, 104, 246, 105, 242, 0, 2, 252, 140, 222, 242, 246, 105, 242, 0, 
-    2, 252, 140, 233, 38, 97, 80, 117, 140, 74, 214, 153, 80, 140, 64, 246, 
-    105, 74, 140, 80, 117, 97, 74, 140, 226, 71, 253, 248, 214, 153, 226, 71, 
-    253, 248, 97, 226, 71, 253, 248, 246, 105, 226, 71, 253, 248, 140, 242, 
-    0, 117, 97, 241, 255, 97, 242, 0, 117, 140, 241, 255, 140, 52, 80, 2, 91, 
-    43, 44, 52, 80, 2, 91, 97, 52, 80, 2, 91, 140, 52, 74, 214, 153, 52, 74, 
-    97, 52, 74, 246, 105, 52, 74, 43, 44, 52, 74, 120, 124, 52, 74, 228, 57, 
-    212, 9, 52, 74, 228, 57, 245, 221, 52, 74, 219, 29, 245, 221, 52, 74, 
-    219, 29, 212, 9, 52, 74, 140, 215, 212, 74, 97, 215, 212, 74, 140, 218, 
-    231, 74, 97, 218, 231, 74, 214, 153, 80, 2, 52, 91, 246, 105, 80, 2, 52, 
-    91, 140, 248, 156, 74, 214, 153, 248, 156, 74, 97, 248, 156, 74, 246, 
-    105, 248, 156, 74, 140, 80, 216, 43, 130, 97, 80, 216, 43, 130, 140, 71, 
-    74, 214, 153, 71, 74, 97, 71, 74, 246, 105, 71, 74, 214, 153, 71, 80, 
-    243, 244, 130, 214, 153, 71, 80, 226, 198, 225, 215, 214, 153, 71, 80, 
-    226, 198, 225, 216, 2, 203, 130, 214, 153, 71, 80, 226, 198, 225, 216, 2, 
-    67, 130, 214, 153, 71, 52, 74, 214, 153, 71, 52, 80, 226, 198, 225, 215, 
-    97, 71, 80, 243, 244, 212, 56, 228, 57, 212, 9, 80, 216, 43, 249, 161, 
-    219, 29, 245, 221, 80, 216, 43, 249, 161, 120, 124, 71, 74, 44, 80, 2, 4, 
-    250, 36, 246, 105, 80, 140, 64, 214, 153, 74, 134, 97, 253, 248, 140, 80, 
-    2, 67, 91, 97, 80, 2, 67, 91, 43, 44, 80, 2, 67, 91, 140, 80, 2, 52, 67, 
-    91, 97, 80, 2, 52, 67, 91, 43, 44, 80, 2, 52, 67, 91, 140, 226, 174, 74, 
-    97, 226, 174, 74, 43, 44, 226, 174, 74, 31, 254, 155, 249, 215, 225, 254, 
-    247, 234, 216, 188, 245, 28, 216, 188, 247, 139, 228, 53, 245, 29, 245, 
-    153, 220, 128, 235, 246, 229, 222, 245, 171, 226, 232, 228, 53, 254, 125, 
-    245, 171, 226, 232, 4, 245, 171, 226, 232, 249, 187, 253, 239, 231, 63, 
-    247, 139, 228, 53, 249, 189, 253, 239, 231, 63, 4, 249, 187, 253, 239, 
-    231, 63, 245, 144, 64, 224, 173, 230, 25, 224, 181, 230, 25, 249, 166, 
-    230, 25, 218, 41, 230, 183, 50, 230, 181, 50, 59, 225, 23, 247, 170, 219, 
-    96, 220, 129, 230, 182, 253, 218, 226, 168, 222, 235, 226, 168, 251, 115, 
-    226, 168, 42, 222, 194, 249, 110, 222, 194, 244, 5, 222, 194, 224, 169, 
-    111, 235, 235, 44, 254, 110, 254, 110, 231, 89, 254, 110, 219, 0, 254, 
-    110, 247, 172, 247, 139, 228, 53, 247, 175, 226, 9, 111, 228, 53, 226, 9, 
-    111, 232, 147, 254, 119, 232, 147, 226, 159, 235, 199, 214, 175, 235, 
-    212, 52, 235, 212, 215, 212, 235, 212, 249, 183, 235, 212, 218, 14, 235, 
-    212, 213, 129, 235, 212, 250, 3, 235, 212, 250, 3, 249, 183, 235, 212, 
-    254, 89, 249, 183, 235, 212, 216, 187, 252, 68, 223, 138, 224, 170, 59, 
-    230, 182, 245, 34, 243, 47, 224, 170, 241, 58, 216, 90, 226, 168, 223, 
-    50, 183, 235, 194, 233, 66, 222, 92, 219, 158, 212, 35, 211, 200, 224, 
-    181, 228, 53, 183, 230, 183, 183, 253, 211, 128, 111, 228, 53, 253, 211, 
-    128, 111, 254, 49, 128, 111, 254, 49, 251, 89, 228, 53, 255, 5, 128, 111, 
-    229, 101, 254, 49, 228, 60, 255, 5, 128, 111, 254, 149, 128, 111, 228, 
-    53, 254, 149, 128, 111, 254, 149, 128, 177, 128, 111, 215, 212, 183, 254, 
-    156, 128, 111, 245, 95, 111, 243, 46, 245, 95, 111, 247, 235, 252, 24, 
-    254, 51, 216, 197, 232, 222, 243, 46, 128, 111, 254, 49, 128, 216, 43, 
-    177, 216, 197, 236, 16, 226, 232, 236, 16, 64, 177, 254, 49, 128, 111, 
-    249, 228, 245, 98, 245, 99, 249, 227, 222, 235, 236, 1, 128, 111, 222, 
-    235, 128, 111, 249, 155, 111, 245, 68, 245, 97, 111, 218, 158, 245, 98, 
-    248, 56, 128, 111, 128, 216, 43, 251, 79, 248, 73, 231, 89, 251, 78, 224, 
-    12, 128, 111, 228, 53, 128, 111, 240, 105, 111, 228, 53, 240, 105, 111, 
-    218, 110, 245, 95, 111, 233, 16, 177, 128, 111, 242, 131, 177, 128, 111, 
-    233, 16, 117, 128, 111, 242, 131, 117, 128, 111, 233, 16, 251, 89, 228, 
-    53, 128, 111, 242, 131, 251, 89, 228, 53, 128, 111, 230, 98, 233, 15, 
-    230, 98, 242, 130, 252, 24, 228, 53, 245, 95, 111, 228, 53, 233, 15, 228, 
-    53, 242, 130, 229, 101, 233, 16, 228, 60, 128, 111, 229, 101, 242, 131, 
-    228, 60, 128, 111, 233, 16, 177, 245, 95, 111, 242, 131, 177, 245, 95, 
-    111, 229, 101, 233, 16, 228, 60, 245, 95, 111, 229, 101, 242, 131, 228, 
-    60, 245, 95, 111, 233, 16, 177, 242, 130, 242, 131, 177, 233, 15, 229, 
-    101, 233, 16, 228, 60, 242, 130, 229, 101, 242, 131, 228, 60, 233, 15, 
-    224, 203, 218, 56, 224, 204, 177, 128, 111, 218, 57, 177, 128, 111, 224, 
-    204, 177, 245, 95, 111, 218, 57, 177, 245, 95, 111, 247, 139, 228, 53, 
-    224, 206, 247, 139, 228, 53, 218, 58, 218, 65, 226, 232, 218, 23, 226, 
-    232, 228, 53, 115, 218, 65, 226, 232, 228, 53, 115, 218, 23, 226, 232, 
-    218, 65, 64, 177, 128, 111, 218, 23, 64, 177, 128, 111, 229, 101, 115, 
-    218, 65, 64, 228, 60, 128, 111, 229, 101, 115, 218, 23, 64, 228, 60, 128, 
-    111, 218, 65, 64, 2, 228, 53, 128, 111, 218, 23, 64, 2, 228, 53, 128, 
-    111, 230, 82, 230, 83, 230, 84, 230, 83, 214, 175, 42, 236, 16, 226, 232, 
-    42, 226, 151, 226, 232, 42, 236, 16, 64, 177, 128, 111, 42, 226, 151, 64, 
-    177, 128, 111, 42, 250, 252, 42, 249, 103, 37, 225, 23, 37, 230, 182, 37, 
-    216, 86, 37, 247, 170, 219, 96, 37, 59, 226, 168, 37, 222, 235, 226, 168, 
-    37, 253, 218, 226, 168, 37, 245, 98, 37, 248, 157, 92, 225, 23, 92, 230, 
-    182, 92, 216, 86, 92, 59, 226, 168, 44, 217, 88, 43, 217, 88, 124, 217, 
-    88, 120, 217, 88, 253, 221, 230, 157, 215, 192, 244, 26, 215, 212, 67, 
-    252, 142, 44, 215, 93, 52, 67, 252, 142, 52, 44, 215, 93, 247, 139, 228, 
-    53, 224, 164, 228, 53, 215, 192, 247, 139, 228, 53, 244, 27, 229, 103, 
-    52, 67, 252, 142, 52, 44, 215, 93, 224, 204, 214, 184, 223, 92, 218, 57, 
-    214, 184, 223, 92, 228, 58, 218, 78, 226, 232, 249, 187, 253, 239, 228, 
-    58, 218, 77, 228, 58, 218, 78, 64, 177, 128, 111, 249, 187, 253, 239, 
-    228, 58, 218, 78, 177, 128, 111, 226, 151, 226, 232, 236, 16, 226, 232, 
-    230, 88, 241, 201, 249, 197, 231, 138, 235, 209, 211, 145, 229, 203, 228, 
-    59, 44, 254, 111, 2, 254, 26, 44, 215, 226, 230, 25, 232, 147, 254, 119, 
-    230, 25, 232, 147, 226, 159, 230, 25, 235, 199, 230, 25, 214, 175, 247, 
-    250, 226, 168, 59, 226, 168, 218, 158, 226, 168, 247, 170, 216, 86, 251, 
-    165, 43, 228, 58, 244, 182, 220, 150, 224, 181, 44, 228, 58, 244, 182, 
-    220, 150, 224, 181, 43, 220, 150, 224, 181, 44, 220, 150, 224, 181, 223, 
-    50, 216, 90, 245, 98, 249, 100, 232, 147, 226, 159, 249, 100, 232, 147, 
-    254, 119, 52, 218, 64, 52, 218, 22, 52, 235, 199, 52, 214, 175, 225, 48, 
-    128, 22, 226, 9, 111, 233, 16, 2, 247, 121, 242, 131, 2, 247, 121, 213, 
-    187, 230, 98, 233, 15, 213, 187, 230, 98, 242, 130, 233, 16, 128, 216, 
-    43, 177, 242, 130, 242, 131, 128, 216, 43, 177, 233, 15, 128, 216, 43, 
-    177, 233, 15, 128, 216, 43, 177, 242, 130, 128, 216, 43, 177, 224, 203, 
-    128, 216, 43, 177, 218, 56, 247, 139, 228, 53, 224, 207, 177, 245, 100, 
-    247, 139, 228, 53, 218, 59, 177, 245, 100, 228, 53, 42, 236, 16, 64, 177, 
-    128, 111, 228, 53, 42, 226, 151, 64, 177, 128, 111, 42, 236, 16, 64, 177, 
-    228, 53, 128, 111, 42, 226, 151, 64, 177, 228, 53, 128, 111, 233, 16, 
-    251, 89, 228, 53, 245, 95, 111, 242, 131, 251, 89, 228, 53, 245, 95, 111, 
-    224, 204, 251, 89, 228, 53, 245, 95, 111, 218, 57, 251, 89, 228, 53, 245, 
-    95, 111, 228, 53, 228, 58, 218, 78, 226, 232, 247, 139, 228, 53, 249, 
-    189, 253, 239, 228, 58, 218, 77, 228, 53, 228, 58, 218, 78, 64, 177, 128, 
-    111, 247, 139, 228, 53, 249, 189, 253, 239, 228, 58, 218, 78, 177, 245, 
-    100, 67, 245, 164, 230, 223, 203, 245, 164, 120, 44, 248, 0, 245, 164, 
-    124, 44, 248, 0, 245, 164, 245, 171, 64, 2, 199, 203, 91, 245, 171, 64, 
-    2, 67, 252, 142, 253, 208, 245, 144, 64, 203, 91, 4, 245, 171, 64, 2, 67, 
-    252, 142, 253, 208, 245, 144, 64, 203, 91, 245, 171, 64, 2, 59, 48, 245, 
-    171, 64, 2, 226, 124, 4, 245, 171, 64, 2, 226, 124, 245, 171, 64, 2, 214, 
-    183, 245, 171, 64, 2, 113, 203, 218, 91, 249, 187, 2, 199, 203, 91, 249, 
-    187, 2, 67, 252, 142, 253, 208, 245, 144, 64, 203, 91, 4, 249, 187, 2, 
-    67, 252, 142, 253, 208, 245, 144, 64, 203, 91, 249, 187, 2, 226, 124, 4, 
-    249, 187, 2, 226, 124, 210, 160, 188, 252, 174, 231, 62, 247, 251, 50, 
-    245, 173, 74, 240, 235, 120, 253, 250, 124, 253, 250, 224, 176, 225, 166, 
-    212, 32, 232, 214, 43, 250, 182, 44, 250, 182, 43, 244, 58, 44, 244, 58, 
-    251, 176, 44, 249, 133, 251, 176, 43, 249, 133, 216, 15, 44, 249, 133, 
-    216, 15, 43, 249, 133, 223, 50, 228, 53, 50, 42, 232, 105, 254, 26, 221, 
-    165, 221, 172, 217, 2, 223, 121, 224, 242, 235, 239, 213, 165, 218, 235, 
-    225, 42, 64, 235, 208, 50, 215, 94, 228, 53, 50, 212, 42, 240, 237, 216, 
-    15, 43, 249, 161, 216, 15, 44, 249, 161, 251, 176, 43, 249, 161, 251, 
-    176, 44, 249, 161, 216, 15, 163, 235, 212, 251, 176, 163, 235, 212, 243, 
-    241, 219, 76, 120, 253, 251, 252, 25, 113, 203, 252, 130, 226, 161, 234, 
-    139, 245, 91, 216, 43, 216, 197, 222, 252, 211, 179, 236, 1, 115, 223, 
-    118, 251, 164, 234, 138, 233, 43, 254, 111, 127, 222, 248, 254, 111, 127, 
-    245, 91, 216, 43, 216, 197, 233, 47, 252, 36, 222, 234, 249, 71, 254, 
-    156, 254, 2, 217, 182, 216, 5, 222, 124, 247, 216, 226, 152, 249, 199, 
-    217, 53, 219, 87, 249, 152, 249, 151, 254, 67, 243, 226, 16, 240, 152, 
-    254, 67, 243, 226, 16, 218, 229, 224, 28, 254, 67, 243, 226, 16, 224, 29, 
-    245, 100, 254, 67, 243, 226, 16, 224, 29, 247, 175, 254, 67, 243, 226, 
-    16, 224, 29, 247, 249, 254, 67, 243, 226, 16, 224, 29, 235, 57, 254, 67, 
-    243, 226, 16, 224, 29, 250, 36, 254, 67, 243, 226, 16, 250, 37, 218, 136, 
-    254, 67, 243, 226, 16, 250, 37, 235, 57, 254, 67, 243, 226, 16, 219, 97, 
-    130, 254, 67, 243, 226, 16, 252, 182, 130, 254, 67, 243, 226, 16, 224, 
-    29, 219, 96, 254, 67, 243, 226, 16, 224, 29, 252, 181, 254, 67, 243, 226, 
-    16, 224, 29, 233, 15, 254, 67, 243, 226, 16, 224, 29, 242, 130, 254, 67, 
-    243, 226, 16, 140, 214, 19, 254, 67, 243, 226, 16, 97, 214, 19, 254, 67, 
-    243, 226, 16, 224, 29, 140, 74, 254, 67, 243, 226, 16, 224, 29, 97, 74, 
-    254, 67, 243, 226, 16, 250, 37, 252, 181, 254, 67, 243, 226, 16, 124, 
-    217, 89, 214, 183, 254, 67, 243, 226, 16, 248, 56, 218, 136, 254, 67, 
-    243, 226, 16, 224, 29, 124, 250, 239, 254, 67, 243, 226, 16, 224, 29, 
-    248, 55, 254, 67, 243, 226, 16, 124, 217, 89, 235, 57, 254, 67, 243, 226, 
-    16, 214, 153, 214, 19, 254, 67, 243, 226, 16, 224, 29, 214, 153, 74, 254, 
-    67, 243, 226, 16, 120, 217, 89, 226, 124, 254, 67, 243, 226, 16, 248, 67, 
-    218, 136, 254, 67, 243, 226, 16, 224, 29, 120, 250, 239, 254, 67, 243, 
-    226, 16, 224, 29, 248, 66, 254, 67, 243, 226, 16, 120, 217, 89, 235, 57, 
-    254, 67, 243, 226, 16, 246, 105, 214, 19, 254, 67, 243, 226, 16, 224, 29, 
-    246, 105, 74, 254, 67, 243, 226, 16, 223, 254, 214, 183, 254, 67, 243, 
-    226, 16, 248, 56, 214, 183, 254, 67, 243, 226, 16, 247, 250, 214, 183, 
-    254, 67, 243, 226, 16, 235, 58, 214, 183, 254, 67, 243, 226, 16, 250, 37, 
-    214, 183, 254, 67, 243, 226, 16, 120, 220, 6, 235, 57, 254, 67, 243, 226, 
-    16, 223, 254, 224, 28, 254, 67, 243, 226, 16, 250, 37, 218, 157, 254, 67, 
-    243, 226, 16, 224, 29, 249, 227, 254, 67, 243, 226, 16, 120, 217, 89, 
-    248, 2, 254, 67, 243, 226, 16, 248, 67, 248, 2, 254, 67, 243, 226, 16, 
-    218, 158, 248, 2, 254, 67, 243, 226, 16, 235, 58, 248, 2, 254, 67, 243, 
-    226, 16, 250, 37, 248, 2, 254, 67, 243, 226, 16, 124, 220, 6, 218, 136, 
-    254, 67, 243, 226, 16, 43, 220, 6, 218, 136, 254, 67, 243, 226, 16, 216, 
-    90, 248, 2, 254, 67, 243, 226, 16, 242, 131, 248, 2, 254, 67, 243, 226, 
-    16, 249, 221, 130, 254, 67, 243, 226, 16, 248, 67, 183, 254, 67, 243, 
-    226, 16, 210, 34, 254, 67, 243, 226, 16, 218, 137, 183, 254, 67, 243, 
-    226, 16, 220, 152, 214, 183, 254, 67, 243, 226, 16, 224, 29, 228, 53, 
-    245, 100, 254, 67, 243, 226, 16, 224, 29, 224, 13, 254, 67, 243, 226, 16, 
-    124, 250, 240, 183, 254, 67, 243, 226, 16, 120, 250, 240, 183, 254, 67, 
-    243, 226, 16, 235, 186, 254, 67, 243, 226, 16, 223, 38, 254, 67, 243, 
-    226, 16, 226, 202, 254, 67, 243, 226, 16, 254, 145, 214, 183, 254, 67, 
-    243, 226, 16, 245, 102, 214, 183, 254, 67, 243, 226, 16, 235, 187, 214, 
-    183, 254, 67, 243, 226, 16, 226, 203, 214, 183, 254, 67, 243, 226, 16, 
-    254, 144, 228, 53, 250, 131, 78, 44, 254, 111, 2, 246, 105, 210, 35, 74, 
-    219, 236, 204, 251, 164, 252, 46, 87, 67, 232, 215, 2, 230, 225, 247, 
-    121, 235, 217, 87, 249, 184, 214, 181, 87, 247, 190, 214, 181, 87, 245, 
-    155, 87, 249, 211, 87, 71, 42, 2, 250, 176, 67, 232, 214, 245, 131, 87, 
-    254, 140, 234, 140, 87, 241, 214, 87, 37, 203, 252, 142, 2, 228, 51, 37, 
-    215, 227, 246, 107, 251, 136, 250, 37, 2, 228, 55, 74, 214, 179, 87, 230, 
-    138, 87, 240, 165, 87, 226, 175, 242, 60, 87, 226, 175, 233, 148, 87, 
-    225, 245, 87, 225, 244, 87, 247, 198, 249, 98, 16, 244, 21, 105, 219, 51, 
-    87, 254, 67, 243, 226, 16, 224, 28, 248, 84, 220, 139, 234, 140, 87, 224, 
-    193, 226, 76, 229, 83, 226, 76, 224, 189, 221, 190, 87, 250, 18, 221, 
-    190, 87, 43, 226, 5, 214, 160, 103, 43, 226, 5, 245, 22, 43, 226, 5, 232, 
-    109, 103, 44, 226, 5, 214, 160, 103, 44, 226, 5, 245, 22, 44, 226, 5, 
-    232, 109, 103, 43, 42, 251, 159, 214, 160, 249, 161, 43, 42, 251, 159, 
-    245, 22, 43, 42, 251, 159, 232, 109, 249, 161, 44, 42, 251, 159, 214, 
-    160, 249, 161, 44, 42, 251, 159, 245, 22, 44, 42, 251, 159, 232, 109, 
-    249, 161, 43, 249, 100, 251, 159, 214, 160, 103, 43, 249, 100, 251, 159, 
-    230, 225, 225, 102, 43, 249, 100, 251, 159, 232, 109, 103, 249, 100, 251, 
-    159, 245, 22, 44, 249, 100, 251, 159, 214, 160, 103, 44, 249, 100, 251, 
-    159, 230, 225, 225, 102, 44, 249, 100, 251, 159, 232, 109, 103, 235, 213, 
-    245, 22, 203, 232, 215, 245, 22, 214, 160, 43, 177, 232, 109, 44, 249, 
-    100, 251, 159, 221, 173, 214, 160, 44, 177, 232, 109, 43, 249, 100, 251, 
-    159, 221, 173, 218, 42, 216, 14, 218, 42, 251, 175, 216, 15, 42, 127, 
-    251, 176, 42, 127, 251, 176, 42, 251, 159, 117, 216, 15, 42, 127, 34, 16, 
-    251, 175, 43, 67, 93, 232, 214, 44, 67, 93, 232, 214, 203, 221, 206, 232, 
-    213, 203, 221, 206, 232, 212, 203, 221, 206, 232, 211, 203, 221, 206, 
-    232, 210, 248, 47, 16, 192, 67, 22, 216, 15, 222, 252, 248, 47, 16, 192, 
-    67, 22, 251, 176, 222, 252, 248, 47, 16, 192, 67, 2, 250, 36, 248, 47, 
-    16, 192, 124, 22, 203, 2, 250, 36, 248, 47, 16, 192, 120, 22, 203, 2, 
-    250, 36, 248, 47, 16, 192, 67, 2, 215, 226, 248, 47, 16, 192, 124, 22, 
-    203, 2, 215, 226, 248, 47, 16, 192, 120, 22, 203, 2, 215, 226, 248, 47, 
-    16, 192, 67, 22, 212, 35, 248, 47, 16, 192, 124, 22, 203, 2, 212, 35, 
-    248, 47, 16, 192, 120, 22, 203, 2, 212, 35, 248, 47, 16, 192, 124, 22, 
-    241, 45, 248, 47, 16, 192, 120, 22, 241, 45, 248, 47, 16, 192, 67, 22, 
-    216, 15, 233, 47, 248, 47, 16, 192, 67, 22, 251, 176, 233, 47, 42, 244, 
-    33, 223, 55, 87, 245, 183, 87, 67, 232, 215, 245, 22, 231, 34, 251, 147, 
-    231, 34, 199, 117, 219, 251, 231, 34, 219, 252, 117, 232, 138, 231, 34, 
-    199, 117, 113, 219, 238, 231, 34, 113, 219, 239, 117, 232, 138, 231, 34, 
-    113, 219, 239, 235, 65, 231, 34, 215, 209, 231, 34, 216, 224, 231, 34, 
-    225, 189, 245, 225, 242, 123, 243, 220, 216, 15, 226, 4, 251, 176, 226, 
-    4, 216, 15, 249, 100, 127, 251, 176, 249, 100, 127, 216, 15, 216, 7, 220, 
-    54, 127, 251, 176, 216, 7, 220, 54, 127, 71, 215, 240, 252, 36, 222, 235, 
-    2, 250, 36, 218, 121, 244, 65, 255, 18, 249, 97, 245, 172, 235, 199, 248, 
-    84, 245, 25, 87, 85, 222, 248, 52, 215, 226, 85, 233, 43, 52, 215, 226, 
-    85, 214, 162, 52, 215, 226, 85, 246, 106, 52, 215, 226, 85, 222, 248, 52, 
-    215, 227, 2, 67, 130, 85, 233, 43, 52, 215, 227, 2, 67, 130, 85, 222, 
-    248, 215, 227, 2, 52, 67, 130, 254, 174, 250, 4, 218, 127, 216, 87, 250, 
-    4, 240, 238, 2, 244, 51, 221, 242, 16, 31, 227, 203, 16, 31, 218, 153, 
-    64, 241, 234, 16, 31, 218, 153, 64, 216, 213, 16, 31, 245, 144, 64, 216, 
-    213, 16, 31, 245, 144, 64, 215, 244, 16, 31, 245, 133, 16, 31, 255, 8, 
-    16, 31, 252, 45, 16, 31, 252, 180, 16, 31, 203, 217, 90, 16, 31, 232, 
-    215, 244, 146, 16, 31, 67, 217, 90, 16, 31, 244, 21, 244, 146, 16, 31, 
-    250, 231, 223, 54, 16, 31, 220, 29, 226, 131, 16, 31, 220, 29, 236, 0, 
-    16, 31, 248, 152, 232, 205, 245, 78, 16, 31, 248, 32, 249, 179, 110, 16, 
-    31, 248, 32, 249, 179, 105, 16, 31, 248, 32, 249, 179, 158, 16, 31, 248, 
-    32, 249, 179, 161, 16, 31, 152, 255, 8, 16, 31, 217, 178, 236, 63, 16, 
-    31, 245, 144, 64, 215, 245, 251, 214, 16, 31, 251, 6, 16, 31, 245, 144, 
-    64, 231, 82, 16, 31, 218, 62, 16, 31, 245, 78, 16, 31, 244, 108, 220, 
-    138, 16, 31, 242, 122, 220, 138, 16, 31, 223, 122, 220, 138, 16, 31, 214, 
-    174, 220, 138, 16, 31, 219, 19, 16, 31, 248, 64, 251, 217, 87, 204, 251, 
-    164, 16, 31, 229, 86, 16, 31, 248, 65, 244, 21, 105, 16, 31, 218, 63, 
-    244, 21, 105, 226, 242, 103, 226, 242, 250, 153, 226, 242, 244, 24, 226, 
-    242, 235, 194, 244, 24, 226, 242, 252, 43, 251, 125, 226, 242, 251, 171, 
-    216, 112, 226, 242, 251, 156, 252, 147, 240, 104, 226, 242, 254, 128, 64, 
-    250, 130, 226, 242, 248, 157, 226, 242, 249, 88, 255, 12, 227, 201, 226, 
-    242, 52, 252, 181, 37, 21, 110, 37, 21, 105, 37, 21, 158, 37, 21, 161, 
-    37, 21, 189, 37, 21, 194, 37, 21, 198, 37, 21, 195, 37, 21, 200, 37, 54, 
-    216, 248, 37, 54, 245, 168, 37, 54, 215, 76, 37, 54, 216, 165, 37, 54, 
-    244, 6, 37, 54, 244, 119, 37, 54, 219, 120, 37, 54, 220, 120, 37, 54, 
-    245, 191, 37, 54, 228, 198, 37, 54, 215, 73, 88, 21, 110, 88, 21, 105, 
-    88, 21, 158, 88, 21, 161, 88, 21, 189, 88, 21, 194, 88, 21, 198, 88, 21, 
-    195, 88, 21, 200, 88, 54, 216, 248, 88, 54, 245, 168, 88, 54, 215, 76, 
-    88, 54, 216, 165, 88, 54, 244, 6, 88, 54, 244, 119, 88, 54, 219, 120, 88, 
-    54, 220, 120, 88, 54, 245, 191, 88, 54, 228, 198, 88, 54, 215, 73, 21, 
-    123, 243, 230, 218, 130, 21, 113, 243, 230, 218, 130, 21, 134, 243, 230, 
-    218, 130, 21, 244, 12, 243, 230, 218, 130, 21, 244, 82, 243, 230, 218, 
-    130, 21, 219, 126, 243, 230, 218, 130, 21, 220, 123, 243, 230, 218, 130, 
-    21, 245, 194, 243, 230, 218, 130, 21, 228, 201, 243, 230, 218, 130, 54, 
-    216, 249, 243, 230, 218, 130, 54, 245, 169, 243, 230, 218, 130, 54, 215, 
-    77, 243, 230, 218, 130, 54, 216, 166, 243, 230, 218, 130, 54, 244, 7, 
-    243, 230, 218, 130, 54, 244, 120, 243, 230, 218, 130, 54, 219, 121, 243, 
-    230, 218, 130, 54, 220, 121, 243, 230, 218, 130, 54, 245, 192, 243, 230, 
-    218, 130, 54, 228, 199, 243, 230, 218, 130, 54, 215, 74, 243, 230, 218, 
-    130, 88, 7, 4, 1, 61, 88, 7, 4, 1, 253, 159, 88, 7, 4, 1, 251, 67, 88, 7, 
-    4, 1, 249, 61, 88, 7, 4, 1, 75, 88, 7, 4, 1, 245, 7, 88, 7, 4, 1, 243, 
-    203, 88, 7, 4, 1, 242, 61, 88, 7, 4, 1, 73, 88, 7, 4, 1, 235, 145, 88, 7, 
-    4, 1, 235, 24, 88, 7, 4, 1, 156, 88, 7, 4, 1, 193, 88, 7, 4, 1, 230, 26, 
-    88, 7, 4, 1, 76, 88, 7, 4, 1, 226, 106, 88, 7, 4, 1, 224, 97, 88, 7, 4, 
-    1, 153, 88, 7, 4, 1, 222, 92, 88, 7, 4, 1, 217, 153, 88, 7, 4, 1, 70, 88, 
-    7, 4, 1, 214, 105, 88, 7, 4, 1, 212, 98, 88, 7, 4, 1, 211, 178, 88, 7, 4, 
-    1, 211, 117, 88, 7, 4, 1, 210, 159, 37, 7, 6, 1, 61, 37, 7, 6, 1, 253, 
-    159, 37, 7, 6, 1, 251, 67, 37, 7, 6, 1, 249, 61, 37, 7, 6, 1, 75, 37, 7, 
-    6, 1, 245, 7, 37, 7, 6, 1, 243, 203, 37, 7, 6, 1, 242, 61, 37, 7, 6, 1, 
-    73, 37, 7, 6, 1, 235, 145, 37, 7, 6, 1, 235, 24, 37, 7, 6, 1, 156, 37, 7, 
-    6, 1, 193, 37, 7, 6, 1, 230, 26, 37, 7, 6, 1, 76, 37, 7, 6, 1, 226, 106, 
-    37, 7, 6, 1, 224, 97, 37, 7, 6, 1, 153, 37, 7, 6, 1, 222, 92, 37, 7, 6, 
-    1, 217, 153, 37, 7, 6, 1, 70, 37, 7, 6, 1, 214, 105, 37, 7, 6, 1, 212, 
-    98, 37, 7, 6, 1, 211, 178, 37, 7, 6, 1, 211, 117, 37, 7, 6, 1, 210, 159, 
-    37, 7, 4, 1, 61, 37, 7, 4, 1, 253, 159, 37, 7, 4, 1, 251, 67, 37, 7, 4, 
-    1, 249, 61, 37, 7, 4, 1, 75, 37, 7, 4, 1, 245, 7, 37, 7, 4, 1, 243, 203, 
-    37, 7, 4, 1, 242, 61, 37, 7, 4, 1, 73, 37, 7, 4, 1, 235, 145, 37, 7, 4, 
-    1, 235, 24, 37, 7, 4, 1, 156, 37, 7, 4, 1, 193, 37, 7, 4, 1, 230, 26, 37, 
-    7, 4, 1, 76, 37, 7, 4, 1, 226, 106, 37, 7, 4, 1, 224, 97, 37, 7, 4, 1, 
-    153, 37, 7, 4, 1, 222, 92, 37, 7, 4, 1, 217, 153, 37, 7, 4, 1, 70, 37, 7, 
-    4, 1, 214, 105, 37, 7, 4, 1, 212, 98, 37, 7, 4, 1, 211, 178, 37, 7, 4, 1, 
-    211, 117, 37, 7, 4, 1, 210, 159, 37, 21, 210, 86, 152, 37, 54, 245, 168, 
-    152, 37, 54, 215, 76, 152, 37, 54, 216, 165, 152, 37, 54, 244, 6, 152, 
-    37, 54, 244, 119, 152, 37, 54, 219, 120, 152, 37, 54, 220, 120, 152, 37, 
-    54, 245, 191, 152, 37, 54, 228, 198, 152, 37, 54, 215, 73, 52, 37, 21, 
-    110, 52, 37, 21, 105, 52, 37, 21, 158, 52, 37, 21, 161, 52, 37, 21, 189, 
-    52, 37, 21, 194, 52, 37, 21, 198, 52, 37, 21, 195, 52, 37, 21, 200, 52, 
-    37, 54, 216, 248, 152, 37, 21, 210, 86, 93, 99, 192, 241, 45, 93, 99, 
-    114, 241, 45, 93, 99, 192, 213, 239, 93, 99, 114, 213, 239, 93, 99, 192, 
-    215, 212, 248, 158, 241, 45, 93, 99, 114, 215, 212, 248, 158, 241, 45, 
-    93, 99, 192, 215, 212, 248, 158, 213, 239, 93, 99, 114, 215, 212, 248, 
-    158, 213, 239, 93, 99, 192, 224, 25, 248, 158, 241, 45, 93, 99, 114, 224, 
-    25, 248, 158, 241, 45, 93, 99, 192, 224, 25, 248, 158, 213, 239, 93, 99, 
-    114, 224, 25, 248, 158, 213, 239, 93, 99, 192, 124, 22, 222, 252, 93, 99, 
-    124, 192, 22, 44, 241, 222, 93, 99, 124, 114, 22, 44, 232, 231, 93, 99, 
-    114, 124, 22, 222, 252, 93, 99, 192, 124, 22, 233, 47, 93, 99, 124, 192, 
-    22, 43, 241, 222, 93, 99, 124, 114, 22, 43, 232, 231, 93, 99, 114, 124, 
-    22, 233, 47, 93, 99, 192, 120, 22, 222, 252, 93, 99, 120, 192, 22, 44, 
-    241, 222, 93, 99, 120, 114, 22, 44, 232, 231, 93, 99, 114, 120, 22, 222, 
-    252, 93, 99, 192, 120, 22, 233, 47, 93, 99, 120, 192, 22, 43, 241, 222, 
-    93, 99, 120, 114, 22, 43, 232, 231, 93, 99, 114, 120, 22, 233, 47, 93, 
-    99, 192, 67, 22, 222, 252, 93, 99, 67, 192, 22, 44, 241, 222, 93, 99, 
-    120, 114, 22, 44, 124, 232, 231, 93, 99, 124, 114, 22, 44, 120, 232, 231, 
-    93, 99, 67, 114, 22, 44, 232, 231, 93, 99, 124, 192, 22, 44, 120, 241, 
-    222, 93, 99, 120, 192, 22, 44, 124, 241, 222, 93, 99, 114, 67, 22, 222, 
-    252, 93, 99, 192, 67, 22, 233, 47, 93, 99, 67, 192, 22, 43, 241, 222, 93, 
-    99, 120, 114, 22, 43, 124, 232, 231, 93, 99, 124, 114, 22, 43, 120, 232, 
-    231, 93, 99, 67, 114, 22, 43, 232, 231, 93, 99, 124, 192, 22, 43, 120, 
-    241, 222, 93, 99, 120, 192, 22, 43, 124, 241, 222, 93, 99, 114, 67, 22, 
-    233, 47, 93, 99, 192, 124, 22, 241, 45, 93, 99, 43, 114, 22, 44, 124, 
-    232, 231, 93, 99, 44, 114, 22, 43, 124, 232, 231, 93, 99, 124, 192, 22, 
-    203, 241, 222, 93, 99, 124, 114, 22, 203, 232, 231, 93, 99, 44, 192, 22, 
-    43, 124, 241, 222, 93, 99, 43, 192, 22, 44, 124, 241, 222, 93, 99, 114, 
-    124, 22, 241, 45, 93, 99, 192, 120, 22, 241, 45, 93, 99, 43, 114, 22, 44, 
-    120, 232, 231, 93, 99, 44, 114, 22, 43, 120, 232, 231, 93, 99, 120, 192, 
-    22, 203, 241, 222, 93, 99, 120, 114, 22, 203, 232, 231, 93, 99, 44, 192, 
-    22, 43, 120, 241, 222, 93, 99, 43, 192, 22, 44, 120, 241, 222, 93, 99, 
-    114, 120, 22, 241, 45, 93, 99, 192, 67, 22, 241, 45, 93, 99, 43, 114, 22, 
-    44, 67, 232, 231, 93, 99, 44, 114, 22, 43, 67, 232, 231, 93, 99, 67, 192, 
-    22, 203, 241, 222, 93, 99, 120, 114, 22, 124, 203, 232, 231, 93, 99, 124, 
-    114, 22, 120, 203, 232, 231, 93, 99, 67, 114, 22, 203, 232, 231, 93, 99, 
-    43, 120, 114, 22, 44, 124, 232, 231, 93, 99, 44, 120, 114, 22, 43, 124, 
-    232, 231, 93, 99, 43, 124, 114, 22, 44, 120, 232, 231, 93, 99, 44, 124, 
-    114, 22, 43, 120, 232, 231, 93, 99, 124, 192, 22, 120, 203, 241, 222, 93, 
-    99, 120, 192, 22, 124, 203, 241, 222, 93, 99, 44, 192, 22, 43, 67, 241, 
-    222, 93, 99, 43, 192, 22, 44, 67, 241, 222, 93, 99, 114, 67, 22, 241, 45, 
-    93, 99, 192, 52, 248, 158, 241, 45, 93, 99, 114, 52, 248, 158, 241, 45, 
-    93, 99, 192, 52, 248, 158, 213, 239, 93, 99, 114, 52, 248, 158, 213, 239, 
-    93, 99, 52, 241, 45, 93, 99, 52, 213, 239, 93, 99, 124, 219, 156, 22, 44, 
-    246, 114, 93, 99, 124, 52, 22, 44, 219, 155, 93, 99, 52, 124, 22, 222, 
-    252, 93, 99, 124, 219, 156, 22, 43, 246, 114, 93, 99, 124, 52, 22, 43, 
-    219, 155, 93, 99, 52, 124, 22, 233, 47, 93, 99, 120, 219, 156, 22, 44, 
-    246, 114, 93, 99, 120, 52, 22, 44, 219, 155, 93, 99, 52, 120, 22, 222, 
-    252, 93, 99, 120, 219, 156, 22, 43, 246, 114, 93, 99, 120, 52, 22, 43, 
-    219, 155, 93, 99, 52, 120, 22, 233, 47, 93, 99, 67, 219, 156, 22, 44, 
-    246, 114, 93, 99, 67, 52, 22, 44, 219, 155, 93, 99, 52, 67, 22, 222, 252, 
-    93, 99, 67, 219, 156, 22, 43, 246, 114, 93, 99, 67, 52, 22, 43, 219, 155, 
-    93, 99, 52, 67, 22, 233, 47, 93, 99, 124, 219, 156, 22, 203, 246, 114, 
-    93, 99, 124, 52, 22, 203, 219, 155, 93, 99, 52, 124, 22, 241, 45, 93, 99, 
-    120, 219, 156, 22, 203, 246, 114, 93, 99, 120, 52, 22, 203, 219, 155, 93, 
-    99, 52, 120, 22, 241, 45, 93, 99, 67, 219, 156, 22, 203, 246, 114, 93, 
-    99, 67, 52, 22, 203, 219, 155, 93, 99, 52, 67, 22, 241, 45, 93, 99, 192, 
-    254, 27, 124, 22, 222, 252, 93, 99, 192, 254, 27, 124, 22, 233, 47, 93, 
-    99, 192, 254, 27, 120, 22, 233, 47, 93, 99, 192, 254, 27, 120, 22, 222, 
-    252, 93, 99, 192, 248, 0, 214, 160, 44, 216, 43, 232, 109, 233, 47, 93, 
-    99, 192, 248, 0, 214, 160, 43, 216, 43, 232, 109, 222, 252, 93, 99, 192, 
-    248, 0, 249, 131, 93, 99, 192, 233, 47, 93, 99, 192, 214, 163, 93, 99, 
-    192, 222, 252, 93, 99, 192, 246, 107, 93, 99, 114, 233, 47, 93, 99, 114, 
-    214, 163, 93, 99, 114, 222, 252, 93, 99, 114, 246, 107, 93, 99, 192, 43, 
-    22, 114, 222, 252, 93, 99, 192, 120, 22, 114, 246, 107, 93, 99, 114, 43, 
-    22, 192, 222, 252, 93, 99, 114, 120, 22, 192, 246, 107, 214, 160, 163, 
-    251, 214, 232, 109, 123, 245, 190, 251, 214, 232, 109, 123, 224, 23, 251, 
-    214, 232, 109, 134, 245, 188, 251, 214, 232, 109, 163, 251, 214, 232, 
-    109, 244, 82, 245, 188, 251, 214, 232, 109, 134, 224, 21, 251, 214, 232, 
-    109, 220, 123, 245, 188, 251, 214, 243, 230, 251, 214, 43, 220, 123, 245, 
-    188, 251, 214, 43, 134, 224, 21, 251, 214, 43, 244, 82, 245, 188, 251, 
-    214, 43, 163, 251, 214, 43, 134, 245, 188, 251, 214, 43, 123, 224, 23, 
-    251, 214, 43, 123, 245, 190, 251, 214, 44, 163, 251, 214, 192, 220, 93, 
-    231, 83, 220, 93, 248, 163, 220, 93, 214, 160, 123, 245, 190, 251, 214, 
-    44, 123, 245, 190, 251, 214, 224, 27, 232, 109, 233, 47, 224, 27, 232, 
-    109, 222, 252, 224, 27, 214, 160, 233, 47, 224, 27, 214, 160, 43, 22, 
-    232, 109, 43, 22, 232, 109, 222, 252, 224, 27, 214, 160, 43, 22, 232, 
-    109, 222, 252, 224, 27, 214, 160, 43, 22, 214, 160, 44, 22, 232, 109, 
-    233, 47, 224, 27, 214, 160, 43, 22, 214, 160, 44, 22, 232, 109, 222, 252, 
-    224, 27, 214, 160, 222, 252, 224, 27, 214, 160, 44, 22, 232, 109, 233, 
-    47, 224, 27, 214, 160, 44, 22, 232, 109, 43, 22, 232, 109, 222, 252, 85, 
-    218, 235, 71, 218, 235, 71, 42, 2, 222, 184, 249, 160, 71, 42, 249, 188, 
-    85, 4, 218, 235, 42, 2, 203, 244, 106, 42, 2, 67, 244, 106, 42, 2, 226, 
-    145, 249, 127, 244, 106, 42, 2, 214, 160, 43, 216, 43, 232, 109, 44, 244, 
-    106, 42, 2, 214, 160, 44, 216, 43, 232, 109, 43, 244, 106, 42, 2, 248, 0, 
-    249, 127, 244, 106, 85, 4, 218, 235, 71, 4, 218, 235, 85, 223, 117, 71, 
-    223, 117, 85, 67, 223, 117, 71, 67, 223, 117, 85, 226, 7, 71, 226, 7, 85, 
-    214, 162, 215, 226, 71, 214, 162, 215, 226, 85, 214, 162, 4, 215, 226, 
-    71, 214, 162, 4, 215, 226, 85, 222, 248, 215, 226, 71, 222, 248, 215, 
-    226, 85, 222, 248, 4, 215, 226, 71, 222, 248, 4, 215, 226, 85, 222, 248, 
-    225, 9, 71, 222, 248, 225, 9, 85, 246, 106, 215, 226, 71, 246, 106, 215, 
-    226, 85, 246, 106, 4, 215, 226, 71, 246, 106, 4, 215, 226, 85, 233, 43, 
-    215, 226, 71, 233, 43, 215, 226, 85, 233, 43, 4, 215, 226, 71, 233, 43, 
-    4, 215, 226, 85, 233, 43, 225, 9, 71, 233, 43, 225, 9, 85, 247, 249, 71, 
-    247, 249, 71, 247, 250, 249, 188, 85, 4, 247, 249, 244, 90, 232, 105, 71, 
-    250, 36, 246, 119, 250, 36, 250, 37, 2, 67, 244, 106, 251, 112, 85, 250, 
-    36, 250, 37, 2, 43, 163, 251, 222, 250, 37, 2, 44, 163, 251, 222, 250, 
-    37, 2, 232, 109, 163, 251, 222, 250, 37, 2, 214, 160, 163, 251, 222, 250, 
-    37, 2, 214, 160, 44, 224, 27, 251, 222, 250, 37, 2, 254, 156, 251, 89, 
-    214, 160, 43, 224, 27, 251, 222, 43, 163, 85, 250, 36, 44, 163, 85, 250, 
-    36, 235, 195, 251, 114, 235, 195, 71, 250, 36, 214, 160, 163, 235, 195, 
-    71, 250, 36, 232, 109, 163, 235, 195, 71, 250, 36, 214, 160, 43, 224, 27, 
-    250, 34, 254, 26, 214, 160, 44, 224, 27, 250, 34, 254, 26, 232, 109, 44, 
-    224, 27, 250, 34, 254, 26, 232, 109, 43, 224, 27, 250, 34, 254, 26, 214, 
-    160, 163, 250, 36, 232, 109, 163, 250, 36, 85, 232, 109, 44, 215, 226, 
-    85, 232, 109, 43, 215, 226, 85, 214, 160, 43, 215, 226, 85, 214, 160, 44, 
-    215, 226, 71, 251, 114, 42, 2, 43, 163, 251, 222, 42, 2, 44, 163, 251, 
-    222, 42, 2, 214, 160, 43, 248, 0, 163, 251, 222, 42, 2, 232, 109, 44, 
-    248, 0, 163, 251, 222, 71, 42, 2, 67, 251, 233, 232, 214, 71, 214, 162, 
-    215, 227, 2, 247, 121, 214, 162, 215, 227, 2, 43, 163, 251, 222, 214, 
-    162, 215, 227, 2, 44, 163, 251, 222, 233, 86, 250, 36, 71, 42, 2, 214, 
-    160, 43, 224, 26, 71, 42, 2, 232, 109, 43, 224, 26, 71, 42, 2, 232, 109, 
-    44, 224, 26, 71, 42, 2, 214, 160, 44, 224, 26, 71, 250, 37, 2, 214, 160, 
-    43, 224, 26, 71, 250, 37, 2, 232, 109, 43, 224, 26, 71, 250, 37, 2, 232, 
-    109, 44, 224, 26, 71, 250, 37, 2, 214, 160, 44, 224, 26, 214, 160, 43, 
-    215, 226, 214, 160, 44, 215, 226, 232, 109, 43, 215, 226, 71, 231, 83, 
-    218, 235, 85, 231, 83, 218, 235, 71, 231, 83, 4, 218, 235, 85, 231, 83, 
-    4, 218, 235, 232, 109, 44, 215, 226, 85, 218, 39, 2, 223, 133, 249, 248, 
-    214, 194, 219, 61, 249, 223, 85, 218, 157, 71, 218, 157, 232, 229, 216, 
-    133, 218, 38, 253, 235, 228, 72, 248, 39, 228, 72, 249, 196, 226, 164, 
-    85, 217, 1, 71, 217, 1, 252, 157, 251, 164, 252, 157, 93, 2, 250, 130, 
-    252, 157, 93, 2, 211, 178, 221, 255, 214, 195, 2, 223, 161, 246, 85, 240, 
-    244, 252, 23, 71, 220, 3, 225, 102, 85, 220, 3, 225, 102, 220, 88, 223, 
-    50, 222, 188, 244, 56, 241, 229, 251, 114, 85, 43, 225, 8, 235, 243, 85, 
-    44, 225, 8, 235, 243, 71, 43, 225, 8, 235, 243, 71, 120, 225, 8, 235, 
-    243, 71, 44, 225, 8, 235, 243, 71, 124, 225, 8, 235, 243, 219, 102, 22, 
-    249, 130, 250, 220, 50, 223, 173, 50, 251, 240, 50, 251, 26, 254, 103, 
-    226, 146, 249, 131, 250, 112, 223, 38, 249, 132, 64, 232, 119, 249, 132, 
-    64, 235, 117, 218, 158, 22, 249, 137, 244, 169, 87, 254, 249, 220, 90, 
-    242, 23, 22, 219, 190, 225, 221, 87, 210, 254, 211, 69, 215, 216, 31, 
-    241, 224, 215, 216, 31, 233, 108, 215, 216, 31, 244, 97, 215, 216, 31, 
-    216, 134, 215, 216, 31, 211, 239, 215, 216, 31, 212, 40, 215, 216, 31, 
-    230, 116, 215, 216, 31, 245, 224, 212, 1, 64, 248, 19, 71, 243, 240, 244, 
-    191, 71, 219, 75, 244, 191, 85, 219, 75, 244, 191, 71, 218, 39, 2, 223, 
-    133, 244, 93, 224, 23, 230, 129, 233, 81, 224, 23, 230, 129, 231, 55, 
-    244, 139, 50, 245, 224, 231, 191, 50, 235, 39, 221, 221, 214, 145, 229, 
-    94, 225, 21, 254, 13, 217, 41, 243, 53, 251, 4, 233, 20, 213, 150, 232, 
-    239, 221, 192, 222, 20, 250, 249, 254, 43, 225, 53, 71, 250, 118, 234, 
-    79, 71, 250, 118, 224, 15, 71, 250, 118, 222, 196, 71, 250, 118, 251, 
-    232, 71, 250, 118, 234, 31, 71, 250, 118, 225, 232, 85, 250, 118, 234, 
-    79, 85, 250, 118, 224, 15, 85, 250, 118, 222, 196, 85, 250, 118, 251, 
-    232, 85, 250, 118, 234, 31, 85, 250, 118, 225, 232, 85, 219, 17, 218, 51, 
-    71, 241, 229, 218, 51, 71, 247, 250, 218, 51, 85, 249, 246, 218, 51, 71, 
-    219, 17, 218, 51, 85, 241, 229, 218, 51, 85, 247, 250, 218, 51, 71, 249, 
-    246, 218, 51, 240, 244, 218, 239, 224, 23, 228, 48, 245, 190, 228, 48, 
-    252, 74, 245, 190, 228, 43, 252, 74, 219, 119, 228, 43, 230, 58, 244, 67, 
-    50, 230, 58, 229, 189, 50, 230, 58, 220, 77, 50, 212, 9, 182, 249, 131, 
-    245, 221, 182, 249, 131, 214, 171, 223, 113, 87, 223, 113, 16, 31, 215, 
-    48, 225, 35, 223, 113, 16, 31, 215, 47, 225, 35, 223, 113, 16, 31, 215, 
-    46, 225, 35, 223, 113, 16, 31, 215, 45, 225, 35, 223, 113, 16, 31, 215, 
-    44, 225, 35, 223, 113, 16, 31, 215, 43, 225, 35, 223, 113, 16, 31, 215, 
-    42, 225, 35, 223, 113, 16, 31, 243, 51, 231, 139, 85, 214, 171, 223, 113, 
-    87, 223, 114, 226, 21, 87, 225, 253, 226, 21, 87, 225, 175, 226, 21, 50, 
-    211, 255, 87, 247, 242, 244, 190, 247, 242, 244, 189, 247, 242, 244, 188, 
-    247, 242, 244, 187, 247, 242, 244, 186, 247, 242, 244, 185, 71, 250, 37, 
-    2, 59, 222, 252, 71, 250, 37, 2, 113, 247, 119, 85, 250, 37, 2, 71, 59, 
-    222, 252, 85, 250, 37, 2, 113, 71, 247, 119, 230, 143, 31, 211, 69, 230, 
-    143, 31, 210, 253, 247, 225, 31, 242, 132, 211, 69, 247, 225, 31, 233, 
-    14, 210, 253, 247, 225, 31, 233, 14, 211, 69, 247, 225, 31, 242, 132, 
-    210, 253, 71, 244, 74, 85, 244, 74, 242, 23, 22, 225, 105, 254, 121, 249, 
-    129, 217, 236, 218, 165, 64, 254, 227, 221, 207, 254, 170, 244, 52, 243, 
-    61, 218, 165, 64, 241, 203, 253, 200, 87, 244, 63, 226, 127, 71, 218, 
-    157, 134, 232, 209, 249, 176, 222, 252, 134, 232, 209, 249, 176, 233, 47, 
-    212, 50, 50, 125, 213, 130, 50, 246, 111, 244, 139, 50, 246, 111, 231, 
-    191, 50, 235, 204, 244, 139, 22, 231, 191, 50, 231, 191, 22, 244, 139, 
-    50, 231, 191, 2, 218, 104, 50, 231, 191, 2, 218, 104, 22, 231, 191, 22, 
-    244, 139, 50, 67, 231, 191, 2, 218, 104, 50, 203, 231, 191, 2, 218, 104, 
-    50, 231, 83, 71, 250, 36, 231, 83, 85, 250, 36, 231, 83, 4, 71, 250, 36, 
-    231, 154, 87, 247, 168, 87, 214, 169, 225, 252, 87, 249, 232, 243, 225, 
-    214, 141, 229, 89, 250, 162, 226, 62, 235, 45, 213, 185, 250, 94, 85, 
-    230, 130, 232, 226, 220, 113, 220, 148, 224, 6, 220, 131, 219, 56, 252, 
-    160, 252, 127, 92, 234, 139, 71, 246, 94, 231, 186, 71, 246, 94, 234, 79, 
-    85, 246, 94, 231, 186, 85, 246, 94, 234, 79, 219, 62, 211, 230, 219, 65, 
-    218, 39, 252, 52, 249, 248, 223, 160, 85, 219, 61, 216, 135, 249, 249, 
-    22, 223, 160, 215, 94, 71, 220, 3, 225, 102, 215, 94, 85, 220, 3, 225, 
-    102, 71, 247, 250, 236, 1, 218, 235, 249, 126, 233, 92, 247, 194, 250, 
-    245, 226, 167, 225, 105, 250, 246, 219, 89, 241, 213, 2, 71, 249, 131, 
-    37, 249, 126, 233, 92, 250, 154, 228, 76, 245, 125, 254, 142, 226, 192, 
-    43, 212, 26, 215, 252, 85, 215, 55, 43, 212, 26, 215, 252, 71, 215, 55, 
-    43, 212, 26, 215, 252, 85, 43, 233, 93, 231, 54, 71, 43, 233, 93, 231, 
-    54, 246, 90, 219, 83, 50, 114, 71, 246, 106, 215, 226, 43, 250, 1, 245, 
-    125, 92, 221, 255, 244, 176, 248, 0, 236, 1, 71, 250, 37, 236, 1, 85, 
-    218, 235, 85, 215, 193, 223, 61, 43, 245, 124, 223, 61, 43, 245, 123, 
-    253, 212, 16, 31, 214, 145, 114, 250, 37, 2, 218, 104, 22, 113, 170, 48, 
-    225, 190, 222, 249, 235, 206, 225, 190, 233, 44, 235, 206, 225, 190, 235, 
-    194, 225, 190, 85, 249, 132, 226, 198, 220, 30, 220, 18, 219, 230, 250, 
-    62, 250, 227, 241, 158, 219, 127, 243, 62, 211, 230, 240, 221, 243, 62, 
-    2, 242, 13, 231, 174, 16, 31, 232, 230, 230, 116, 214, 195, 226, 198, 
-    242, 123, 244, 13, 244, 75, 236, 1, 241, 60, 244, 130, 222, 15, 42, 244, 
-    12, 249, 160, 219, 105, 240, 113, 219, 108, 225, 169, 2, 252, 160, 216, 
-    243, 235, 132, 252, 147, 87, 241, 232, 242, 134, 87, 243, 233, 224, 143, 
-    249, 104, 226, 198, 85, 218, 235, 71, 244, 75, 2, 203, 230, 225, 85, 218, 
-    105, 214, 160, 251, 218, 221, 194, 85, 221, 194, 232, 109, 251, 218, 221, 
-    194, 71, 221, 194, 71, 114, 250, 131, 78, 217, 2, 232, 155, 50, 217, 54, 
-    246, 89, 254, 192, 245, 120, 223, 158, 244, 86, 223, 158, 242, 16, 213, 
-    174, 242, 16, 211, 198, 242, 16, 232, 109, 44, 225, 199, 225, 199, 214, 
-    160, 44, 225, 199, 71, 228, 231, 85, 228, 231, 250, 131, 78, 114, 250, 
-    131, 78, 230, 85, 211, 178, 114, 230, 85, 211, 178, 252, 157, 211, 178, 
-    114, 252, 157, 211, 178, 226, 127, 26, 249, 131, 114, 26, 249, 131, 204, 
-    250, 176, 249, 131, 114, 204, 250, 176, 249, 131, 7, 249, 131, 220, 92, 
-    71, 7, 249, 131, 226, 127, 7, 249, 131, 231, 188, 249, 131, 218, 158, 64, 
-    248, 150, 244, 12, 217, 16, 253, 217, 244, 12, 252, 158, 253, 217, 114, 
-    244, 12, 252, 158, 253, 217, 244, 12, 249, 244, 253, 217, 85, 244, 12, 
-    225, 10, 218, 157, 71, 244, 12, 225, 10, 218, 157, 219, 12, 218, 112, 
-    226, 127, 71, 218, 157, 37, 71, 218, 157, 204, 250, 176, 85, 218, 157, 
-    85, 250, 176, 71, 218, 157, 226, 127, 85, 218, 157, 114, 226, 127, 85, 
-    218, 157, 225, 61, 218, 157, 220, 92, 71, 218, 157, 114, 253, 217, 204, 
-    250, 176, 253, 217, 245, 194, 218, 245, 253, 217, 245, 194, 225, 10, 85, 
-    218, 157, 245, 194, 225, 10, 225, 61, 218, 157, 219, 126, 225, 10, 85, 
-    218, 157, 245, 194, 225, 10, 223, 115, 85, 218, 157, 114, 245, 194, 225, 
-    10, 223, 115, 85, 218, 157, 215, 77, 225, 10, 85, 218, 157, 219, 121, 
-    225, 10, 253, 217, 217, 16, 253, 217, 204, 250, 176, 217, 16, 253, 217, 
-    114, 217, 16, 253, 217, 219, 126, 225, 158, 85, 22, 71, 244, 55, 85, 244, 
-    55, 71, 244, 55, 245, 194, 225, 158, 226, 127, 85, 244, 55, 37, 204, 250, 
-    176, 245, 194, 225, 10, 218, 157, 114, 217, 16, 225, 61, 253, 217, 219, 
-    63, 216, 106, 215, 219, 219, 63, 114, 250, 115, 219, 63, 219, 14, 114, 
-    219, 14, 252, 158, 253, 217, 245, 194, 217, 16, 224, 172, 253, 217, 114, 
-    245, 194, 217, 16, 224, 172, 253, 217, 249, 132, 78, 220, 92, 71, 250, 
-    36, 152, 92, 249, 132, 78, 232, 109, 44, 246, 87, 71, 218, 235, 214, 160, 
-    44, 246, 87, 71, 218, 235, 232, 109, 44, 220, 92, 71, 218, 235, 214, 160, 
-    44, 220, 92, 71, 218, 235, 85, 224, 14, 164, 226, 148, 71, 224, 14, 164, 
-    226, 148, 71, 245, 32, 164, 226, 148, 85, 247, 250, 230, 183, 71, 211, 
-    178, 114, 245, 32, 164, 87, 192, 67, 130, 231, 83, 67, 130, 114, 67, 130, 
-    114, 219, 156, 215, 94, 249, 221, 223, 255, 164, 226, 148, 114, 219, 156, 
-    249, 221, 223, 255, 164, 226, 148, 114, 52, 215, 94, 249, 221, 223, 255, 
-    164, 226, 148, 114, 52, 249, 221, 223, 255, 164, 226, 148, 114, 121, 219, 
-    156, 249, 221, 223, 255, 164, 226, 148, 114, 121, 52, 249, 221, 223, 255, 
-    164, 226, 148, 249, 92, 218, 141, 226, 16, 5, 226, 148, 114, 245, 32, 
-    164, 226, 148, 114, 241, 229, 245, 32, 164, 226, 148, 114, 85, 241, 228, 
-    222, 188, 114, 85, 241, 229, 251, 114, 244, 56, 241, 228, 222, 188, 244, 
-    56, 241, 229, 251, 114, 231, 83, 43, 226, 5, 226, 148, 231, 83, 44, 226, 
-    5, 226, 148, 231, 83, 244, 64, 43, 226, 5, 226, 148, 231, 83, 244, 64, 
-    44, 226, 5, 226, 148, 231, 83, 233, 43, 254, 111, 251, 159, 226, 148, 
-    231, 83, 222, 248, 254, 111, 251, 159, 226, 148, 114, 233, 43, 254, 111, 
-    223, 255, 164, 226, 148, 114, 222, 248, 254, 111, 223, 255, 164, 226, 
-    148, 114, 233, 43, 254, 111, 251, 159, 226, 148, 114, 222, 248, 254, 111, 
-    251, 159, 226, 148, 192, 43, 216, 7, 220, 54, 251, 159, 226, 148, 192, 
-    44, 216, 7, 220, 54, 251, 159, 226, 148, 231, 83, 43, 249, 100, 251, 159, 
-    226, 148, 231, 83, 44, 249, 100, 251, 159, 226, 148, 247, 205, 152, 37, 
-    21, 110, 247, 205, 152, 37, 21, 105, 247, 205, 152, 37, 21, 158, 247, 
-    205, 152, 37, 21, 161, 247, 205, 152, 37, 21, 189, 247, 205, 152, 37, 21, 
-    194, 247, 205, 152, 37, 21, 198, 247, 205, 152, 37, 21, 195, 247, 205, 
-    152, 37, 21, 200, 247, 205, 152, 37, 54, 216, 248, 247, 205, 37, 35, 21, 
-    110, 247, 205, 37, 35, 21, 105, 247, 205, 37, 35, 21, 158, 247, 205, 37, 
-    35, 21, 161, 247, 205, 37, 35, 21, 189, 247, 205, 37, 35, 21, 194, 247, 
-    205, 37, 35, 21, 198, 247, 205, 37, 35, 21, 195, 247, 205, 37, 35, 21, 
-    200, 247, 205, 37, 35, 54, 216, 248, 247, 205, 152, 37, 35, 21, 110, 247, 
-    205, 152, 37, 35, 21, 105, 247, 205, 152, 37, 35, 21, 158, 247, 205, 152, 
-    37, 35, 21, 161, 247, 205, 152, 37, 35, 21, 189, 247, 205, 152, 37, 35, 
-    21, 194, 247, 205, 152, 37, 35, 21, 198, 247, 205, 152, 37, 35, 21, 195, 
-    247, 205, 152, 37, 35, 21, 200, 247, 205, 152, 37, 35, 54, 216, 248, 114, 
-    211, 246, 97, 74, 114, 96, 50, 114, 230, 183, 50, 114, 247, 170, 50, 114, 
-    219, 29, 245, 221, 74, 114, 97, 74, 114, 228, 57, 245, 221, 74, 246, 99, 
-    225, 12, 97, 74, 114, 222, 185, 97, 74, 215, 225, 97, 74, 114, 215, 225, 
-    97, 74, 248, 156, 215, 225, 97, 74, 114, 248, 156, 215, 225, 97, 74, 85, 
-    97, 74, 216, 145, 216, 13, 97, 253, 250, 216, 145, 251, 174, 97, 253, 
-    250, 85, 97, 253, 250, 114, 85, 249, 92, 246, 105, 22, 97, 74, 114, 85, 
-    249, 92, 214, 153, 22, 97, 74, 218, 232, 85, 97, 74, 114, 249, 207, 85, 
-    97, 74, 222, 247, 71, 97, 74, 233, 42, 71, 97, 74, 252, 184, 220, 92, 71, 
-    97, 74, 243, 242, 220, 92, 71, 97, 74, 114, 232, 109, 222, 246, 71, 97, 
-    74, 114, 214, 160, 222, 246, 71, 97, 74, 228, 50, 232, 109, 222, 246, 71, 
-    97, 74, 249, 100, 232, 124, 228, 50, 214, 160, 222, 246, 71, 97, 74, 37, 
-    114, 71, 97, 74, 211, 252, 97, 74, 251, 221, 219, 29, 245, 221, 74, 251, 
-    221, 97, 74, 251, 221, 228, 57, 245, 221, 74, 114, 251, 221, 219, 29, 
-    245, 221, 74, 114, 251, 221, 97, 74, 114, 251, 221, 228, 57, 245, 221, 
-    74, 217, 18, 97, 74, 114, 217, 17, 97, 74, 212, 18, 97, 74, 114, 212, 18, 
-    97, 74, 226, 173, 97, 74, 52, 249, 100, 232, 124, 134, 247, 215, 254, 
-    110, 71, 215, 227, 249, 188, 4, 71, 215, 226, 225, 172, 204, 218, 64, 
-    204, 218, 22, 43, 222, 91, 252, 174, 248, 61, 44, 222, 91, 252, 174, 248, 
-    61, 177, 2, 59, 235, 216, 223, 51, 219, 48, 224, 202, 218, 64, 218, 23, 
-    224, 202, 219, 47, 67, 252, 142, 2, 203, 91, 11, 222, 229, 247, 255, 199, 
-    247, 169, 11, 244, 176, 247, 255, 92, 232, 147, 254, 119, 92, 232, 147, 
-    226, 159, 71, 247, 250, 2, 250, 174, 247, 121, 22, 2, 247, 121, 245, 171, 
-    64, 226, 171, 214, 152, 232, 109, 44, 249, 162, 2, 247, 121, 214, 160, 
-    43, 249, 162, 2, 247, 121, 43, 226, 129, 235, 67, 44, 226, 129, 235, 67, 
-    243, 230, 226, 129, 235, 67, 233, 86, 120, 217, 88, 233, 86, 124, 217, 
-    88, 43, 22, 44, 52, 215, 93, 43, 22, 44, 217, 88, 43, 230, 88, 199, 44, 
-    217, 88, 199, 43, 217, 88, 120, 217, 89, 2, 250, 37, 48, 232, 106, 247, 
-    174, 251, 79, 203, 222, 134, 71, 249, 206, 247, 249, 71, 249, 206, 247, 
-    250, 2, 140, 216, 115, 71, 249, 206, 247, 250, 2, 97, 216, 115, 71, 42, 
-    2, 140, 216, 115, 71, 42, 2, 97, 216, 115, 11, 43, 71, 42, 127, 11, 44, 
-    71, 42, 127, 11, 43, 254, 111, 127, 11, 44, 254, 111, 127, 11, 43, 52, 
-    254, 111, 127, 11, 44, 52, 254, 111, 127, 11, 43, 71, 216, 7, 220, 54, 
-    127, 11, 44, 71, 216, 7, 220, 54, 127, 11, 43, 244, 64, 226, 4, 11, 44, 
-    244, 64, 226, 4, 214, 153, 224, 25, 74, 246, 105, 224, 25, 74, 254, 89, 
-    243, 99, 250, 37, 74, 250, 3, 243, 99, 250, 37, 74, 44, 80, 2, 37, 225, 
-    23, 199, 140, 74, 199, 97, 74, 199, 43, 44, 74, 199, 140, 52, 74, 199, 
-    97, 52, 74, 199, 43, 44, 52, 74, 199, 140, 80, 243, 244, 130, 199, 97, 
-    80, 243, 244, 130, 199, 140, 52, 80, 243, 244, 130, 199, 97, 52, 80, 243, 
-    244, 130, 199, 97, 218, 231, 74, 46, 47, 251, 216, 46, 47, 247, 118, 46, 
-    47, 246, 246, 46, 47, 247, 117, 46, 47, 246, 182, 46, 47, 247, 53, 46, 
-    47, 246, 245, 46, 47, 247, 116, 46, 47, 246, 150, 46, 47, 247, 21, 46, 
-    47, 246, 213, 46, 47, 247, 84, 46, 47, 246, 181, 46, 47, 247, 52, 46, 47, 
-    246, 244, 46, 47, 247, 115, 46, 47, 246, 134, 46, 47, 247, 5, 46, 47, 
+    241, 59, 48, 7, 4, 1, 160, 2, 241, 59, 48, 7, 6, 1, 160, 2, 184, 7, 4, 1, 
+    160, 2, 184, 7, 6, 1, 160, 2, 250, 39, 22, 142, 7, 4, 1, 160, 2, 250, 39, 
+    22, 142, 7, 6, 1, 160, 2, 250, 39, 22, 242, 143, 7, 4, 1, 160, 2, 250, 
+    39, 22, 242, 143, 7, 6, 1, 160, 2, 250, 39, 22, 241, 59, 48, 7, 4, 1, 
+    160, 2, 250, 39, 22, 241, 59, 48, 7, 6, 1, 160, 2, 250, 39, 22, 184, 7, 
+    4, 1, 160, 2, 250, 39, 22, 184, 7, 6, 1, 160, 2, 250, 39, 22, 59, 51, 7, 
+    4, 1, 160, 2, 250, 39, 22, 59, 51, 7, 6, 1, 240, 161, 2, 241, 59, 48, 7, 
+    4, 1, 240, 161, 2, 241, 59, 48, 7, 6, 1, 240, 161, 2, 59, 51, 7, 4, 1, 
+    240, 161, 2, 59, 51, 7, 6, 1, 144, 2, 59, 51, 7, 4, 1, 144, 2, 59, 51, 7, 
+    6, 1, 144, 2, 241, 59, 48, 7, 4, 1, 144, 2, 241, 59, 48, 7, 6, 1, 144, 2, 
+    250, 39, 22, 142, 7, 4, 1, 144, 2, 250, 39, 22, 142, 7, 6, 1, 144, 2, 
+    250, 39, 22, 242, 143, 7, 4, 1, 144, 2, 250, 39, 22, 242, 143, 7, 6, 1, 
+    144, 2, 250, 39, 22, 241, 59, 48, 7, 4, 1, 144, 2, 250, 39, 22, 241, 59, 
+    48, 7, 6, 1, 144, 2, 250, 39, 22, 184, 7, 4, 1, 144, 2, 250, 39, 22, 184, 
+    7, 6, 1, 144, 2, 250, 39, 22, 59, 51, 7, 4, 1, 144, 2, 250, 39, 22, 59, 
+    51, 7, 6, 1, 144, 2, 241, 0, 22, 142, 7, 4, 1, 144, 2, 241, 0, 22, 142, 
+    7, 6, 1, 144, 2, 241, 0, 22, 242, 143, 7, 4, 1, 144, 2, 241, 0, 22, 242, 
+    143, 7, 6, 1, 144, 2, 241, 0, 22, 241, 59, 48, 7, 4, 1, 144, 2, 241, 0, 
+    22, 241, 59, 48, 7, 6, 1, 144, 2, 241, 0, 22, 184, 7, 4, 1, 144, 2, 241, 
+    0, 22, 184, 7, 6, 1, 144, 2, 241, 0, 22, 59, 51, 7, 4, 1, 144, 2, 241, 0, 
+    22, 59, 51, 7, 6, 1, 104, 2, 59, 51, 7, 4, 1, 104, 2, 59, 51, 7, 6, 1, 
+    104, 2, 241, 59, 48, 7, 4, 1, 104, 2, 241, 59, 48, 7, 6, 1, 104, 2, 241, 
+    0, 22, 142, 7, 4, 1, 104, 2, 241, 0, 22, 142, 7, 6, 1, 104, 2, 241, 0, 
+    22, 242, 143, 7, 4, 1, 104, 2, 241, 0, 22, 242, 143, 7, 6, 1, 104, 2, 
+    241, 0, 22, 241, 59, 48, 7, 4, 1, 104, 2, 241, 0, 22, 241, 59, 48, 7, 6, 
+    1, 104, 2, 241, 0, 22, 184, 7, 4, 1, 104, 2, 241, 0, 22, 184, 7, 6, 1, 
+    104, 2, 241, 0, 22, 59, 51, 7, 4, 1, 104, 2, 241, 0, 22, 59, 51, 7, 6, 1, 
+    211, 118, 2, 242, 143, 7, 4, 1, 211, 118, 2, 242, 143, 7, 6, 1, 211, 118, 
+    2, 59, 51, 7, 4, 1, 211, 118, 2, 59, 51, 7, 6, 1, 211, 118, 2, 241, 59, 
+    48, 7, 4, 1, 211, 118, 2, 241, 59, 48, 7, 6, 1, 211, 118, 2, 184, 7, 4, 
+    1, 211, 118, 2, 184, 7, 6, 1, 230, 228, 232, 191, 7, 4, 1, 230, 228, 232, 
+    191, 7, 6, 1, 230, 228, 214, 105, 7, 4, 1, 230, 228, 214, 105, 7, 6, 1, 
+    211, 118, 2, 232, 129, 7, 4, 1, 211, 118, 2, 232, 129, 26, 4, 1, 254, 
+    152, 2, 224, 157, 26, 4, 1, 254, 152, 2, 248, 161, 26, 4, 1, 254, 152, 2, 
+    224, 158, 22, 214, 13, 26, 4, 1, 254, 152, 2, 248, 162, 22, 214, 13, 26, 
+    4, 1, 254, 152, 2, 224, 158, 22, 226, 114, 26, 4, 1, 254, 152, 2, 248, 
+    162, 22, 226, 114, 26, 4, 1, 254, 152, 2, 224, 158, 22, 225, 178, 26, 4, 
+    1, 254, 152, 2, 248, 162, 22, 225, 178, 26, 6, 1, 254, 152, 2, 224, 157, 
+    26, 6, 1, 254, 152, 2, 248, 161, 26, 6, 1, 254, 152, 2, 224, 158, 22, 
+    214, 13, 26, 6, 1, 254, 152, 2, 248, 162, 22, 214, 13, 26, 6, 1, 254, 
+    152, 2, 224, 158, 22, 226, 114, 26, 6, 1, 254, 152, 2, 248, 162, 22, 226, 
+    114, 26, 6, 1, 254, 152, 2, 224, 158, 22, 225, 178, 26, 6, 1, 254, 152, 
+    2, 248, 162, 22, 225, 178, 26, 4, 1, 245, 109, 2, 224, 157, 26, 4, 1, 
+    245, 109, 2, 248, 161, 26, 4, 1, 245, 109, 2, 224, 158, 22, 214, 13, 26, 
+    4, 1, 245, 109, 2, 248, 162, 22, 214, 13, 26, 4, 1, 245, 109, 2, 224, 
+    158, 22, 226, 114, 26, 4, 1, 245, 109, 2, 248, 162, 22, 226, 114, 26, 6, 
+    1, 245, 109, 2, 224, 157, 26, 6, 1, 245, 109, 2, 248, 161, 26, 6, 1, 245, 
+    109, 2, 224, 158, 22, 214, 13, 26, 6, 1, 245, 109, 2, 248, 162, 22, 214, 
+    13, 26, 6, 1, 245, 109, 2, 224, 158, 22, 226, 114, 26, 6, 1, 245, 109, 2, 
+    248, 162, 22, 226, 114, 26, 4, 1, 245, 72, 2, 224, 157, 26, 4, 1, 245, 
+    72, 2, 248, 161, 26, 4, 1, 245, 72, 2, 224, 158, 22, 214, 13, 26, 4, 1, 
+    245, 72, 2, 248, 162, 22, 214, 13, 26, 4, 1, 245, 72, 2, 224, 158, 22, 
+    226, 114, 26, 4, 1, 245, 72, 2, 248, 162, 22, 226, 114, 26, 4, 1, 245, 
+    72, 2, 224, 158, 22, 225, 178, 26, 4, 1, 245, 72, 2, 248, 162, 22, 225, 
+    178, 26, 6, 1, 245, 72, 2, 224, 157, 26, 6, 1, 245, 72, 2, 248, 161, 26, 
+    6, 1, 245, 72, 2, 224, 158, 22, 214, 13, 26, 6, 1, 245, 72, 2, 248, 162, 
+    22, 214, 13, 26, 6, 1, 245, 72, 2, 224, 158, 22, 226, 114, 26, 6, 1, 245, 
+    72, 2, 248, 162, 22, 226, 114, 26, 6, 1, 245, 72, 2, 224, 158, 22, 225, 
+    178, 26, 6, 1, 245, 72, 2, 248, 162, 22, 225, 178, 26, 4, 1, 235, 193, 2, 
+    224, 157, 26, 4, 1, 235, 193, 2, 248, 161, 26, 4, 1, 235, 193, 2, 224, 
+    158, 22, 214, 13, 26, 4, 1, 235, 193, 2, 248, 162, 22, 214, 13, 26, 4, 1, 
+    235, 193, 2, 224, 158, 22, 226, 114, 26, 4, 1, 235, 193, 2, 248, 162, 22, 
+    226, 114, 26, 4, 1, 235, 193, 2, 224, 158, 22, 225, 178, 26, 4, 1, 235, 
+    193, 2, 248, 162, 22, 225, 178, 26, 6, 1, 235, 193, 2, 224, 157, 26, 6, 
+    1, 235, 193, 2, 248, 161, 26, 6, 1, 235, 193, 2, 224, 158, 22, 214, 13, 
+    26, 6, 1, 235, 193, 2, 248, 162, 22, 214, 13, 26, 6, 1, 235, 193, 2, 224, 
+    158, 22, 226, 114, 26, 6, 1, 235, 193, 2, 248, 162, 22, 226, 114, 26, 6, 
+    1, 235, 193, 2, 224, 158, 22, 225, 178, 26, 6, 1, 235, 193, 2, 248, 162, 
+    22, 225, 178, 26, 4, 1, 226, 204, 2, 224, 157, 26, 4, 1, 226, 204, 2, 
+    248, 161, 26, 4, 1, 226, 204, 2, 224, 158, 22, 214, 13, 26, 4, 1, 226, 
+    204, 2, 248, 162, 22, 214, 13, 26, 4, 1, 226, 204, 2, 224, 158, 22, 226, 
+    114, 26, 4, 1, 226, 204, 2, 248, 162, 22, 226, 114, 26, 6, 1, 226, 204, 
+    2, 224, 157, 26, 6, 1, 226, 204, 2, 248, 161, 26, 6, 1, 226, 204, 2, 224, 
+    158, 22, 214, 13, 26, 6, 1, 226, 204, 2, 248, 162, 22, 214, 13, 26, 6, 1, 
+    226, 204, 2, 224, 158, 22, 226, 114, 26, 6, 1, 226, 204, 2, 248, 162, 22, 
+    226, 114, 26, 4, 1, 214, 158, 2, 224, 157, 26, 4, 1, 214, 158, 2, 248, 
+    161, 26, 4, 1, 214, 158, 2, 224, 158, 22, 214, 13, 26, 4, 1, 214, 158, 2, 
+    248, 162, 22, 214, 13, 26, 4, 1, 214, 158, 2, 224, 158, 22, 226, 114, 26, 
+    4, 1, 214, 158, 2, 248, 162, 22, 226, 114, 26, 4, 1, 214, 158, 2, 224, 
+    158, 22, 225, 178, 26, 4, 1, 214, 158, 2, 248, 162, 22, 225, 178, 26, 6, 
+    1, 214, 158, 2, 248, 161, 26, 6, 1, 214, 158, 2, 248, 162, 22, 214, 13, 
+    26, 6, 1, 214, 158, 2, 248, 162, 22, 226, 114, 26, 6, 1, 214, 158, 2, 
+    248, 162, 22, 225, 178, 26, 4, 1, 226, 206, 2, 224, 157, 26, 4, 1, 226, 
+    206, 2, 248, 161, 26, 4, 1, 226, 206, 2, 224, 158, 22, 214, 13, 26, 4, 1, 
+    226, 206, 2, 248, 162, 22, 214, 13, 26, 4, 1, 226, 206, 2, 224, 158, 22, 
+    226, 114, 26, 4, 1, 226, 206, 2, 248, 162, 22, 226, 114, 26, 4, 1, 226, 
+    206, 2, 224, 158, 22, 225, 178, 26, 4, 1, 226, 206, 2, 248, 162, 22, 225, 
+    178, 26, 6, 1, 226, 206, 2, 224, 157, 26, 6, 1, 226, 206, 2, 248, 161, 
+    26, 6, 1, 226, 206, 2, 224, 158, 22, 214, 13, 26, 6, 1, 226, 206, 2, 248, 
+    162, 22, 214, 13, 26, 6, 1, 226, 206, 2, 224, 158, 22, 226, 114, 26, 6, 
+    1, 226, 206, 2, 248, 162, 22, 226, 114, 26, 6, 1, 226, 206, 2, 224, 158, 
+    22, 225, 178, 26, 6, 1, 226, 206, 2, 248, 162, 22, 225, 178, 26, 4, 1, 
+    254, 152, 2, 214, 13, 26, 4, 1, 254, 152, 2, 226, 114, 26, 4, 1, 245, 
+    109, 2, 214, 13, 26, 4, 1, 245, 109, 2, 226, 114, 26, 4, 1, 245, 72, 2, 
+    214, 13, 26, 4, 1, 245, 72, 2, 226, 114, 26, 4, 1, 235, 193, 2, 214, 13, 
+    26, 4, 1, 235, 193, 2, 226, 114, 26, 4, 1, 226, 204, 2, 214, 13, 26, 4, 
+    1, 226, 204, 2, 226, 114, 26, 4, 1, 214, 158, 2, 214, 13, 26, 4, 1, 214, 
+    158, 2, 226, 114, 26, 4, 1, 226, 206, 2, 214, 13, 26, 4, 1, 226, 206, 2, 
+    226, 114, 26, 4, 1, 254, 152, 2, 224, 158, 22, 210, 219, 26, 4, 1, 254, 
+    152, 2, 248, 162, 22, 210, 219, 26, 4, 1, 254, 152, 2, 224, 158, 22, 214, 
+    14, 22, 210, 219, 26, 4, 1, 254, 152, 2, 248, 162, 22, 214, 14, 22, 210, 
+    219, 26, 4, 1, 254, 152, 2, 224, 158, 22, 226, 115, 22, 210, 219, 26, 4, 
+    1, 254, 152, 2, 248, 162, 22, 226, 115, 22, 210, 219, 26, 4, 1, 254, 152, 
+    2, 224, 158, 22, 225, 179, 22, 210, 219, 26, 4, 1, 254, 152, 2, 248, 162, 
+    22, 225, 179, 22, 210, 219, 26, 6, 1, 254, 152, 2, 224, 158, 22, 224, 
+    170, 26, 6, 1, 254, 152, 2, 248, 162, 22, 224, 170, 26, 6, 1, 254, 152, 
+    2, 224, 158, 22, 214, 14, 22, 224, 170, 26, 6, 1, 254, 152, 2, 248, 162, 
+    22, 214, 14, 22, 224, 170, 26, 6, 1, 254, 152, 2, 224, 158, 22, 226, 115, 
+    22, 224, 170, 26, 6, 1, 254, 152, 2, 248, 162, 22, 226, 115, 22, 224, 
+    170, 26, 6, 1, 254, 152, 2, 224, 158, 22, 225, 179, 22, 224, 170, 26, 6, 
+    1, 254, 152, 2, 248, 162, 22, 225, 179, 22, 224, 170, 26, 4, 1, 245, 72, 
+    2, 224, 158, 22, 210, 219, 26, 4, 1, 245, 72, 2, 248, 162, 22, 210, 219, 
+    26, 4, 1, 245, 72, 2, 224, 158, 22, 214, 14, 22, 210, 219, 26, 4, 1, 245, 
+    72, 2, 248, 162, 22, 214, 14, 22, 210, 219, 26, 4, 1, 245, 72, 2, 224, 
+    158, 22, 226, 115, 22, 210, 219, 26, 4, 1, 245, 72, 2, 248, 162, 22, 226, 
+    115, 22, 210, 219, 26, 4, 1, 245, 72, 2, 224, 158, 22, 225, 179, 22, 210, 
+    219, 26, 4, 1, 245, 72, 2, 248, 162, 22, 225, 179, 22, 210, 219, 26, 6, 
+    1, 245, 72, 2, 224, 158, 22, 224, 170, 26, 6, 1, 245, 72, 2, 248, 162, 
+    22, 224, 170, 26, 6, 1, 245, 72, 2, 224, 158, 22, 214, 14, 22, 224, 170, 
+    26, 6, 1, 245, 72, 2, 248, 162, 22, 214, 14, 22, 224, 170, 26, 6, 1, 245, 
+    72, 2, 224, 158, 22, 226, 115, 22, 224, 170, 26, 6, 1, 245, 72, 2, 248, 
+    162, 22, 226, 115, 22, 224, 170, 26, 6, 1, 245, 72, 2, 224, 158, 22, 225, 
+    179, 22, 224, 170, 26, 6, 1, 245, 72, 2, 248, 162, 22, 225, 179, 22, 224, 
+    170, 26, 4, 1, 226, 206, 2, 224, 158, 22, 210, 219, 26, 4, 1, 226, 206, 
+    2, 248, 162, 22, 210, 219, 26, 4, 1, 226, 206, 2, 224, 158, 22, 214, 14, 
+    22, 210, 219, 26, 4, 1, 226, 206, 2, 248, 162, 22, 214, 14, 22, 210, 219, 
+    26, 4, 1, 226, 206, 2, 224, 158, 22, 226, 115, 22, 210, 219, 26, 4, 1, 
+    226, 206, 2, 248, 162, 22, 226, 115, 22, 210, 219, 26, 4, 1, 226, 206, 2, 
+    224, 158, 22, 225, 179, 22, 210, 219, 26, 4, 1, 226, 206, 2, 248, 162, 
+    22, 225, 179, 22, 210, 219, 26, 6, 1, 226, 206, 2, 224, 158, 22, 224, 
+    170, 26, 6, 1, 226, 206, 2, 248, 162, 22, 224, 170, 26, 6, 1, 226, 206, 
+    2, 224, 158, 22, 214, 14, 22, 224, 170, 26, 6, 1, 226, 206, 2, 248, 162, 
+    22, 214, 14, 22, 224, 170, 26, 6, 1, 226, 206, 2, 224, 158, 22, 226, 115, 
+    22, 224, 170, 26, 6, 1, 226, 206, 2, 248, 162, 22, 226, 115, 22, 224, 
+    170, 26, 6, 1, 226, 206, 2, 224, 158, 22, 225, 179, 22, 224, 170, 26, 6, 
+    1, 226, 206, 2, 248, 162, 22, 225, 179, 22, 224, 170, 26, 4, 1, 254, 152, 
+    2, 213, 120, 26, 4, 1, 254, 152, 2, 231, 237, 26, 4, 1, 254, 152, 2, 214, 
+    14, 22, 210, 219, 26, 4, 1, 254, 152, 2, 210, 219, 26, 4, 1, 254, 152, 2, 
+    226, 115, 22, 210, 219, 26, 4, 1, 254, 152, 2, 225, 178, 26, 4, 1, 254, 
+    152, 2, 225, 179, 22, 210, 219, 26, 6, 1, 254, 152, 2, 213, 120, 26, 6, 
+    1, 254, 152, 2, 231, 237, 26, 6, 1, 254, 152, 2, 214, 13, 26, 6, 1, 254, 
+    152, 2, 226, 114, 26, 6, 1, 254, 152, 2, 224, 170, 26, 234, 8, 26, 224, 
+    170, 26, 224, 157, 26, 225, 178, 26, 248, 4, 22, 225, 178, 26, 4, 1, 245, 
+    72, 2, 214, 14, 22, 210, 219, 26, 4, 1, 245, 72, 2, 210, 219, 26, 4, 1, 
+    245, 72, 2, 226, 115, 22, 210, 219, 26, 4, 1, 245, 72, 2, 225, 178, 26, 
+    4, 1, 245, 72, 2, 225, 179, 22, 210, 219, 26, 6, 1, 245, 109, 2, 214, 13, 
+    26, 6, 1, 245, 109, 2, 226, 114, 26, 6, 1, 245, 72, 2, 214, 13, 26, 6, 1, 
+    245, 72, 2, 226, 114, 26, 6, 1, 245, 72, 2, 224, 170, 26, 224, 158, 22, 
+    214, 13, 26, 224, 158, 22, 226, 114, 26, 224, 158, 22, 225, 178, 26, 4, 
+    1, 235, 193, 2, 213, 120, 26, 4, 1, 235, 193, 2, 231, 237, 26, 4, 1, 235, 
+    193, 2, 248, 4, 22, 214, 13, 26, 4, 1, 235, 193, 2, 248, 4, 22, 226, 114, 
+    26, 4, 1, 235, 193, 2, 225, 178, 26, 4, 1, 235, 193, 2, 248, 4, 22, 225, 
+    178, 26, 6, 1, 235, 193, 2, 213, 120, 26, 6, 1, 235, 193, 2, 231, 237, 
+    26, 6, 1, 235, 193, 2, 214, 13, 26, 6, 1, 235, 193, 2, 226, 114, 26, 248, 
+    162, 22, 214, 13, 26, 248, 162, 22, 226, 114, 26, 248, 162, 22, 225, 178, 
+    26, 4, 1, 214, 158, 2, 213, 120, 26, 4, 1, 214, 158, 2, 231, 237, 26, 4, 
+    1, 214, 158, 2, 248, 4, 22, 214, 13, 26, 4, 1, 214, 158, 2, 248, 4, 22, 
+    226, 114, 26, 4, 1, 223, 41, 2, 224, 157, 26, 4, 1, 223, 41, 2, 248, 161, 
+    26, 4, 1, 214, 158, 2, 225, 178, 26, 4, 1, 214, 158, 2, 248, 4, 22, 225, 
+    178, 26, 6, 1, 214, 158, 2, 213, 120, 26, 6, 1, 214, 158, 2, 231, 237, 
+    26, 6, 1, 214, 158, 2, 214, 13, 26, 6, 1, 214, 158, 2, 226, 114, 26, 6, 
+    1, 223, 41, 2, 248, 161, 26, 248, 4, 22, 214, 13, 26, 248, 4, 22, 226, 
+    114, 26, 214, 13, 26, 4, 1, 226, 206, 2, 214, 14, 22, 210, 219, 26, 4, 1, 
+    226, 206, 2, 210, 219, 26, 4, 1, 226, 206, 2, 226, 115, 22, 210, 219, 26, 
+    4, 1, 226, 206, 2, 225, 178, 26, 4, 1, 226, 206, 2, 225, 179, 22, 210, 
+    219, 26, 6, 1, 226, 204, 2, 214, 13, 26, 6, 1, 226, 204, 2, 226, 114, 26, 
+    6, 1, 226, 206, 2, 214, 13, 26, 6, 1, 226, 206, 2, 226, 114, 26, 6, 1, 
+    226, 206, 2, 224, 170, 26, 226, 114, 26, 248, 161, 245, 159, 224, 30, 
+    245, 168, 224, 30, 245, 159, 219, 20, 245, 168, 219, 20, 216, 142, 219, 
+    20, 244, 17, 219, 20, 219, 125, 219, 20, 244, 120, 219, 20, 224, 144, 
+    219, 20, 216, 171, 219, 20, 242, 42, 219, 20, 210, 87, 211, 245, 219, 20, 
+    210, 87, 211, 245, 228, 72, 210, 87, 211, 245, 235, 69, 233, 44, 79, 222, 
+    246, 79, 240, 175, 228, 73, 240, 175, 244, 120, 248, 164, 245, 159, 248, 
+    164, 245, 168, 248, 164, 203, 130, 52, 67, 232, 219, 52, 121, 232, 219, 
+    43, 219, 157, 224, 1, 79, 44, 219, 157, 224, 1, 79, 219, 157, 232, 115, 
+    224, 1, 79, 219, 157, 241, 170, 224, 1, 79, 43, 52, 224, 1, 79, 44, 52, 
+    224, 1, 79, 52, 232, 115, 224, 1, 79, 52, 241, 170, 224, 1, 79, 248, 213, 
+    52, 248, 213, 251, 121, 215, 223, 251, 121, 123, 59, 233, 62, 113, 59, 
+    233, 62, 203, 245, 171, 240, 173, 225, 13, 232, 220, 220, 139, 226, 19, 
+    220, 139, 233, 44, 245, 166, 222, 246, 245, 166, 224, 249, 247, 204, 244, 
+    27, 233, 44, 226, 121, 222, 246, 226, 121, 229, 199, 228, 78, 219, 20, 
+    225, 186, 230, 198, 50, 225, 186, 216, 249, 216, 149, 50, 224, 193, 52, 
+    224, 193, 215, 212, 224, 193, 223, 52, 224, 193, 223, 52, 52, 224, 193, 
+    223, 52, 215, 212, 224, 193, 250, 246, 219, 157, 233, 48, 254, 118, 224, 
+    1, 79, 219, 157, 222, 250, 254, 118, 224, 1, 79, 223, 110, 79, 52, 245, 
+    39, 79, 235, 208, 226, 123, 214, 180, 135, 216, 112, 250, 247, 235, 223, 
+    225, 13, 253, 222, 240, 176, 251, 121, 244, 10, 219, 97, 43, 42, 251, 
+    166, 2, 224, 10, 44, 42, 251, 166, 2, 224, 10, 52, 224, 16, 79, 224, 16, 
+    245, 39, 79, 245, 39, 224, 16, 79, 216, 71, 5, 245, 73, 223, 52, 225, 71, 
+    50, 85, 140, 251, 121, 85, 97, 251, 121, 121, 253, 224, 223, 52, 220, 
+    152, 250, 9, 214, 163, 113, 253, 223, 254, 167, 213, 188, 249, 225, 230, 
+    187, 50, 217, 235, 248, 164, 235, 200, 214, 180, 244, 60, 224, 144, 79, 
+    134, 59, 224, 143, 224, 27, 224, 193, 244, 19, 59, 224, 143, 244, 89, 59, 
+    224, 143, 113, 59, 224, 143, 244, 19, 59, 79, 246, 126, 249, 138, 215, 
+    222, 67, 244, 19, 247, 126, 231, 87, 11, 219, 20, 211, 209, 235, 69, 243, 
+    234, 254, 60, 235, 198, 216, 86, 235, 198, 220, 139, 235, 198, 225, 25, 
+    233, 44, 235, 171, 222, 246, 235, 171, 244, 100, 218, 91, 235, 171, 224, 
+    249, 247, 204, 235, 171, 235, 235, 217, 183, 217, 252, 255, 14, 217, 183, 
+    217, 252, 235, 235, 9, 244, 28, 220, 82, 255, 14, 9, 244, 28, 220, 82, 
+    229, 194, 21, 220, 83, 228, 74, 21, 220, 83, 218, 24, 210, 86, 218, 24, 
+    7, 4, 1, 74, 218, 24, 161, 218, 24, 190, 218, 24, 195, 218, 24, 199, 218, 
+    24, 196, 218, 24, 201, 218, 24, 96, 50, 218, 24, 230, 186, 218, 24, 245, 
+    106, 50, 218, 24, 43, 226, 7, 218, 24, 44, 226, 7, 218, 24, 7, 4, 1, 230, 
+    30, 218, 66, 210, 86, 218, 66, 111, 218, 66, 105, 218, 66, 158, 218, 66, 
+    161, 218, 66, 190, 218, 66, 195, 218, 66, 199, 218, 66, 196, 218, 66, 
+    201, 218, 66, 96, 50, 218, 66, 230, 186, 218, 66, 245, 106, 50, 218, 66, 
+    43, 226, 7, 218, 66, 44, 226, 7, 7, 218, 66, 4, 1, 61, 7, 218, 66, 4, 1, 
+    76, 7, 218, 66, 4, 1, 78, 7, 218, 66, 4, 1, 211, 178, 7, 218, 66, 4, 1, 
+    221, 197, 7, 218, 66, 4, 1, 242, 67, 7, 218, 66, 4, 1, 235, 29, 7, 218, 
+    66, 4, 1, 156, 7, 218, 66, 4, 1, 194, 7, 218, 66, 4, 1, 230, 30, 7, 218, 
+    66, 4, 1, 226, 109, 7, 218, 66, 4, 1, 222, 93, 7, 218, 66, 4, 1, 217, 
+    153, 245, 54, 50, 249, 235, 50, 249, 125, 50, 244, 3, 244, 6, 50, 232, 
+    204, 50, 230, 199, 50, 229, 215, 50, 225, 165, 50, 222, 120, 50, 211, 
+    217, 50, 166, 220, 51, 50, 247, 135, 50, 245, 55, 50, 234, 82, 50, 215, 
+    113, 50, 246, 109, 50, 243, 47, 225, 196, 50, 225, 163, 50, 242, 116, 50, 
+    253, 190, 50, 240, 235, 50, 250, 193, 50, 232, 197, 216, 4, 50, 219, 2, 
+    50, 216, 246, 50, 235, 248, 222, 120, 50, 215, 97, 232, 204, 50, 38, 43, 
+    242, 6, 48, 38, 44, 242, 6, 48, 38, 200, 67, 232, 220, 226, 124, 38, 219, 
+    253, 67, 232, 220, 226, 124, 38, 254, 96, 80, 48, 38, 250, 10, 80, 48, 
+    38, 43, 80, 48, 38, 44, 80, 48, 38, 222, 237, 226, 124, 38, 250, 10, 222, 
+    237, 226, 124, 38, 254, 96, 222, 237, 226, 124, 38, 134, 170, 48, 38, 
+    244, 19, 170, 48, 38, 245, 154, 250, 43, 38, 245, 154, 218, 236, 38, 245, 
+    154, 248, 0, 38, 245, 154, 250, 44, 252, 188, 38, 43, 44, 80, 48, 38, 
+    245, 154, 221, 190, 38, 245, 154, 234, 141, 38, 245, 154, 214, 155, 225, 
+    10, 215, 226, 38, 223, 53, 219, 49, 226, 124, 38, 52, 67, 218, 105, 226, 
+    124, 38, 254, 106, 87, 38, 215, 212, 214, 182, 38, 211, 247, 251, 148, 
+    48, 38, 140, 80, 226, 124, 38, 200, 52, 219, 49, 226, 124, 38, 97, 242, 
+    6, 2, 252, 147, 246, 111, 38, 140, 242, 6, 2, 252, 147, 246, 111, 38, 43, 
+    80, 51, 38, 44, 80, 51, 38, 253, 225, 48, 255, 20, 226, 235, 255, 4, 216, 
+    43, 216, 197, 218, 75, 139, 6, 251, 74, 248, 79, 250, 186, 250, 183, 232, 
+    220, 87, 250, 248, 226, 235, 251, 34, 214, 189, 245, 56, 249, 199, 221, 
+    187, 248, 79, 244, 187, 119, 4, 243, 209, 119, 6, 242, 67, 251, 227, 6, 
+    242, 67, 139, 6, 242, 67, 225, 40, 249, 199, 225, 40, 249, 200, 115, 113, 
+    225, 111, 119, 6, 74, 251, 227, 6, 74, 119, 6, 156, 119, 4, 156, 233, 
+    155, 57, 252, 149, 87, 139, 6, 230, 30, 227, 200, 50, 219, 33, 223, 122, 
+    249, 170, 119, 6, 226, 109, 139, 6, 226, 109, 139, 6, 224, 99, 119, 6, 
+    153, 251, 227, 6, 153, 139, 6, 153, 224, 199, 217, 72, 223, 65, 220, 134, 
+    79, 217, 2, 50, 215, 254, 164, 50, 213, 240, 139, 6, 210, 159, 226, 137, 
+    50, 226, 225, 50, 235, 200, 226, 225, 50, 251, 227, 6, 210, 159, 215, 94, 
+    26, 4, 1, 235, 192, 234, 179, 50, 254, 115, 50, 119, 6, 253, 166, 251, 
+    227, 6, 251, 74, 245, 76, 87, 119, 4, 76, 119, 6, 76, 119, 6, 245, 14, 
+    215, 94, 6, 245, 14, 119, 6, 194, 119, 4, 78, 109, 87, 252, 37, 87, 242, 
+    209, 87, 248, 198, 87, 235, 239, 219, 31, 222, 189, 6, 224, 99, 244, 190, 
+    50, 139, 4, 225, 111, 139, 4, 243, 114, 139, 6, 243, 114, 139, 6, 225, 
+    111, 139, 230, 29, 218, 41, 215, 94, 35, 6, 243, 209, 215, 94, 35, 6, 
+    156, 223, 52, 35, 6, 156, 215, 94, 35, 6, 211, 117, 139, 32, 6, 249, 68, 
+    139, 32, 4, 249, 68, 139, 32, 4, 76, 139, 32, 4, 74, 139, 32, 4, 235, 
+    150, 224, 173, 232, 219, 215, 94, 254, 134, 225, 186, 50, 254, 189, 215, 
+    94, 4, 245, 14, 16, 31, 221, 254, 219, 31, 212, 114, 244, 10, 123, 220, 
+    120, 212, 114, 244, 10, 123, 228, 199, 212, 114, 244, 10, 123, 216, 242, 
+    212, 114, 244, 10, 123, 216, 169, 212, 114, 244, 10, 113, 216, 167, 212, 
+    114, 244, 10, 123, 244, 125, 212, 114, 244, 10, 113, 244, 124, 212, 114, 
+    244, 10, 134, 244, 124, 212, 114, 244, 10, 244, 19, 244, 124, 212, 114, 
+    244, 10, 123, 219, 117, 212, 114, 244, 10, 244, 89, 219, 115, 212, 114, 
+    244, 10, 123, 245, 196, 212, 114, 244, 10, 134, 245, 194, 212, 114, 244, 
+    10, 244, 89, 245, 194, 212, 114, 244, 10, 220, 124, 245, 194, 244, 10, 
+    227, 201, 111, 222, 200, 227, 202, 111, 222, 200, 227, 202, 105, 222, 
+    200, 227, 202, 158, 222, 200, 227, 202, 161, 222, 200, 227, 202, 190, 
+    222, 200, 227, 202, 195, 222, 200, 227, 202, 199, 222, 200, 227, 202, 
+    196, 222, 200, 227, 202, 201, 222, 200, 227, 202, 216, 248, 222, 200, 
+    227, 202, 245, 175, 222, 200, 227, 202, 215, 76, 222, 200, 227, 202, 244, 
+    122, 222, 200, 227, 202, 123, 240, 217, 222, 200, 227, 202, 244, 89, 240, 
+    217, 222, 200, 227, 202, 123, 216, 148, 4, 222, 200, 227, 202, 111, 4, 
+    222, 200, 227, 202, 105, 4, 222, 200, 227, 202, 158, 4, 222, 200, 227, 
+    202, 161, 4, 222, 200, 227, 202, 190, 4, 222, 200, 227, 202, 195, 4, 222, 
+    200, 227, 202, 199, 4, 222, 200, 227, 202, 196, 4, 222, 200, 227, 202, 
+    201, 4, 222, 200, 227, 202, 216, 248, 4, 222, 200, 227, 202, 245, 175, 4, 
+    222, 200, 227, 202, 215, 76, 4, 222, 200, 227, 202, 244, 122, 4, 222, 
+    200, 227, 202, 123, 240, 217, 4, 222, 200, 227, 202, 244, 89, 240, 217, 
+    4, 222, 200, 227, 202, 123, 216, 148, 222, 200, 227, 202, 123, 216, 149, 
+    251, 75, 249, 68, 222, 200, 227, 202, 244, 89, 216, 148, 222, 200, 227, 
+    202, 216, 249, 216, 148, 222, 200, 227, 202, 223, 52, 123, 240, 217, 7, 
+    4, 1, 223, 52, 251, 74, 222, 200, 227, 202, 219, 127, 233, 84, 17, 222, 
+    200, 227, 202, 244, 123, 245, 234, 17, 222, 200, 227, 202, 244, 123, 216, 
+    148, 222, 200, 227, 202, 123, 240, 218, 216, 148, 212, 114, 244, 10, 210, 
+    87, 216, 167, 140, 75, 214, 153, 75, 97, 75, 246, 112, 75, 43, 44, 75, 
+    120, 124, 75, 228, 61, 212, 9, 75, 228, 61, 245, 228, 75, 219, 30, 245, 
+    228, 75, 219, 30, 212, 9, 75, 140, 80, 2, 91, 97, 80, 2, 91, 140, 212, 
+    36, 75, 97, 212, 36, 75, 140, 113, 241, 241, 75, 214, 153, 113, 241, 241, 
+    75, 97, 113, 241, 241, 75, 246, 112, 113, 241, 241, 75, 140, 80, 2, 217, 
+    78, 97, 80, 2, 217, 78, 140, 80, 243, 251, 130, 214, 153, 80, 243, 251, 
+    130, 97, 80, 243, 251, 130, 246, 112, 80, 243, 251, 130, 120, 124, 80, 2, 
+    252, 135, 140, 80, 2, 103, 97, 80, 2, 103, 140, 80, 2, 232, 129, 97, 80, 
+    2, 232, 129, 43, 44, 212, 36, 75, 43, 44, 80, 2, 91, 246, 112, 210, 35, 
+    75, 214, 153, 80, 2, 216, 78, 233, 43, 214, 153, 80, 2, 216, 78, 222, 
+    244, 246, 112, 80, 2, 216, 78, 233, 43, 246, 112, 80, 2, 216, 78, 222, 
+    244, 97, 80, 2, 249, 169, 246, 111, 246, 112, 80, 2, 249, 169, 233, 43, 
+    254, 96, 216, 15, 220, 155, 75, 250, 10, 216, 15, 220, 155, 75, 228, 61, 
+    212, 9, 80, 216, 43, 200, 130, 140, 80, 216, 43, 252, 149, 115, 97, 80, 
+    216, 43, 130, 254, 96, 204, 250, 44, 75, 250, 10, 204, 250, 44, 75, 140, 
+    242, 6, 2, 252, 147, 214, 152, 140, 242, 6, 2, 252, 147, 246, 111, 214, 
+    153, 242, 6, 2, 252, 147, 222, 244, 214, 153, 242, 6, 2, 252, 147, 233, 
+    43, 97, 242, 6, 2, 252, 147, 214, 152, 97, 242, 6, 2, 252, 147, 246, 111, 
+    246, 112, 242, 6, 2, 252, 147, 222, 244, 246, 112, 242, 6, 2, 252, 147, 
+    233, 43, 97, 80, 115, 140, 75, 214, 153, 80, 140, 64, 246, 112, 75, 140, 
+    80, 115, 97, 75, 140, 226, 74, 253, 255, 214, 153, 226, 74, 253, 255, 97, 
+    226, 74, 253, 255, 246, 112, 226, 74, 253, 255, 140, 242, 6, 115, 97, 
+    242, 5, 97, 242, 6, 115, 140, 242, 5, 140, 52, 80, 2, 91, 43, 44, 52, 80, 
+    2, 91, 97, 52, 80, 2, 91, 140, 52, 75, 214, 153, 52, 75, 97, 52, 75, 246, 
+    112, 52, 75, 43, 44, 52, 75, 120, 124, 52, 75, 228, 61, 212, 9, 52, 75, 
+    228, 61, 245, 228, 52, 75, 219, 30, 245, 228, 52, 75, 219, 30, 212, 9, 
+    52, 75, 140, 215, 212, 75, 97, 215, 212, 75, 140, 218, 232, 75, 97, 218, 
+    232, 75, 214, 153, 80, 2, 52, 91, 246, 112, 80, 2, 52, 91, 140, 248, 163, 
+    75, 214, 153, 248, 163, 75, 97, 248, 163, 75, 246, 112, 248, 163, 75, 
+    140, 80, 216, 43, 130, 97, 80, 216, 43, 130, 140, 71, 75, 214, 153, 71, 
+    75, 97, 71, 75, 246, 112, 71, 75, 214, 153, 71, 80, 243, 251, 130, 214, 
+    153, 71, 80, 226, 201, 225, 217, 214, 153, 71, 80, 226, 201, 225, 218, 2, 
+    203, 130, 214, 153, 71, 80, 226, 201, 225, 218, 2, 67, 130, 214, 153, 71, 
+    52, 75, 214, 153, 71, 52, 80, 226, 201, 225, 217, 97, 71, 80, 243, 251, 
+    212, 56, 228, 61, 212, 9, 80, 216, 43, 249, 168, 219, 30, 245, 228, 80, 
+    216, 43, 249, 168, 120, 124, 71, 75, 44, 80, 2, 4, 250, 43, 246, 112, 80, 
+    140, 64, 214, 153, 75, 134, 97, 253, 255, 140, 80, 2, 67, 91, 97, 80, 2, 
+    67, 91, 43, 44, 80, 2, 67, 91, 140, 80, 2, 52, 67, 91, 97, 80, 2, 52, 67, 
+    91, 43, 44, 80, 2, 52, 67, 91, 140, 226, 177, 75, 97, 226, 177, 75, 43, 
+    44, 226, 177, 75, 31, 254, 163, 249, 222, 226, 1, 247, 241, 216, 188, 
+    245, 35, 216, 188, 247, 146, 228, 57, 245, 36, 245, 160, 220, 129, 235, 
+    252, 229, 226, 245, 178, 226, 235, 228, 57, 254, 132, 245, 178, 226, 235, 
+    4, 245, 178, 226, 235, 249, 194, 253, 246, 231, 67, 247, 146, 228, 57, 
+    249, 196, 253, 246, 231, 67, 4, 249, 194, 253, 246, 231, 67, 245, 151, 
+    64, 224, 175, 230, 29, 224, 183, 230, 29, 249, 173, 230, 29, 218, 41, 
+    230, 187, 50, 230, 185, 50, 59, 225, 25, 247, 177, 219, 97, 220, 130, 
+    230, 186, 253, 225, 226, 171, 222, 237, 226, 171, 251, 122, 226, 171, 42, 
+    222, 195, 249, 117, 222, 195, 244, 12, 222, 195, 224, 171, 112, 235, 241, 
+    44, 254, 117, 254, 117, 231, 93, 254, 117, 219, 1, 254, 117, 247, 179, 
+    247, 146, 228, 57, 247, 182, 226, 12, 112, 228, 57, 226, 12, 112, 232, 
+    152, 254, 126, 232, 152, 226, 162, 235, 205, 214, 175, 235, 218, 52, 235, 
+    218, 215, 212, 235, 218, 249, 190, 235, 218, 218, 14, 235, 218, 213, 129, 
+    235, 218, 250, 10, 235, 218, 250, 10, 249, 190, 235, 218, 254, 96, 249, 
+    190, 235, 218, 216, 187, 252, 75, 223, 140, 224, 172, 59, 230, 186, 245, 
+    41, 243, 53, 224, 172, 241, 64, 216, 90, 226, 171, 223, 52, 184, 235, 
+    200, 233, 71, 222, 93, 219, 159, 212, 35, 211, 200, 224, 183, 228, 57, 
+    184, 230, 187, 184, 253, 218, 128, 112, 228, 57, 253, 218, 128, 112, 254, 
+    56, 128, 112, 254, 56, 251, 96, 228, 57, 255, 13, 128, 112, 229, 105, 
+    254, 56, 228, 64, 255, 13, 128, 112, 254, 156, 128, 112, 228, 57, 254, 
+    156, 128, 112, 254, 156, 128, 177, 128, 112, 215, 212, 184, 254, 164, 
+    128, 112, 245, 102, 112, 243, 52, 245, 102, 112, 247, 242, 252, 31, 254, 
+    58, 216, 197, 232, 227, 243, 52, 128, 112, 254, 56, 128, 216, 43, 177, 
+    216, 197, 236, 22, 226, 235, 236, 22, 64, 177, 254, 56, 128, 112, 249, 
+    235, 245, 105, 245, 106, 249, 234, 222, 237, 236, 7, 128, 112, 222, 237, 
+    128, 112, 249, 162, 112, 245, 75, 245, 104, 112, 218, 159, 245, 105, 248, 
+    63, 128, 112, 128, 216, 43, 251, 86, 248, 80, 231, 93, 251, 85, 224, 14, 
+    128, 112, 228, 57, 128, 112, 240, 111, 112, 228, 57, 240, 111, 112, 218, 
+    111, 245, 102, 112, 233, 21, 177, 128, 112, 242, 137, 177, 128, 112, 233, 
+    21, 115, 128, 112, 242, 137, 115, 128, 112, 233, 21, 251, 96, 228, 57, 
+    128, 112, 242, 137, 251, 96, 228, 57, 128, 112, 230, 102, 233, 20, 230, 
+    102, 242, 136, 252, 31, 228, 57, 245, 102, 112, 228, 57, 233, 20, 228, 
+    57, 242, 136, 229, 105, 233, 21, 228, 64, 128, 112, 229, 105, 242, 137, 
+    228, 64, 128, 112, 233, 21, 177, 245, 102, 112, 242, 137, 177, 245, 102, 
+    112, 229, 105, 233, 21, 228, 64, 245, 102, 112, 229, 105, 242, 137, 228, 
+    64, 245, 102, 112, 233, 21, 177, 242, 136, 242, 137, 177, 233, 20, 229, 
+    105, 233, 21, 228, 64, 242, 136, 229, 105, 242, 137, 228, 64, 233, 20, 
+    224, 205, 218, 56, 224, 206, 177, 128, 112, 218, 57, 177, 128, 112, 224, 
+    206, 177, 245, 102, 112, 218, 57, 177, 245, 102, 112, 247, 146, 228, 57, 
+    224, 208, 247, 146, 228, 57, 218, 58, 218, 65, 226, 235, 218, 23, 226, 
+    235, 228, 57, 116, 218, 65, 226, 235, 228, 57, 116, 218, 23, 226, 235, 
+    218, 65, 64, 177, 128, 112, 218, 23, 64, 177, 128, 112, 229, 105, 116, 
+    218, 65, 64, 228, 64, 128, 112, 229, 105, 116, 218, 23, 64, 228, 64, 128, 
+    112, 218, 65, 64, 2, 228, 57, 128, 112, 218, 23, 64, 2, 228, 57, 128, 
+    112, 230, 86, 230, 87, 230, 88, 230, 87, 214, 175, 42, 236, 22, 226, 235, 
+    42, 226, 154, 226, 235, 42, 236, 22, 64, 177, 128, 112, 42, 226, 154, 64, 
+    177, 128, 112, 42, 251, 3, 42, 249, 110, 37, 225, 25, 37, 230, 186, 37, 
+    216, 86, 37, 247, 177, 219, 97, 37, 59, 226, 171, 37, 222, 237, 226, 171, 
+    37, 253, 225, 226, 171, 37, 245, 105, 37, 248, 164, 92, 225, 25, 92, 230, 
+    186, 92, 216, 86, 92, 59, 226, 171, 44, 217, 88, 43, 217, 88, 124, 217, 
+    88, 120, 217, 88, 253, 228, 230, 161, 215, 192, 244, 33, 215, 212, 67, 
+    252, 149, 44, 215, 93, 52, 67, 252, 149, 52, 44, 215, 93, 247, 146, 228, 
+    57, 224, 166, 228, 57, 215, 192, 247, 146, 228, 57, 244, 34, 229, 107, 
+    52, 67, 252, 149, 52, 44, 215, 93, 224, 206, 214, 184, 223, 94, 218, 57, 
+    214, 184, 223, 94, 228, 62, 218, 78, 226, 235, 249, 194, 253, 246, 228, 
+    62, 218, 77, 228, 62, 218, 78, 64, 177, 128, 112, 249, 194, 253, 246, 
+    228, 62, 218, 78, 177, 128, 112, 226, 154, 226, 235, 236, 22, 226, 235, 
+    230, 92, 241, 207, 249, 204, 231, 142, 235, 215, 211, 145, 229, 207, 228, 
+    63, 44, 254, 118, 2, 254, 33, 44, 215, 226, 230, 29, 232, 152, 254, 126, 
+    230, 29, 232, 152, 226, 162, 230, 29, 235, 205, 230, 29, 214, 175, 248, 
+    1, 226, 171, 59, 226, 171, 218, 159, 226, 171, 247, 177, 216, 86, 251, 
+    172, 43, 228, 62, 244, 189, 220, 151, 224, 183, 44, 228, 62, 244, 189, 
+    220, 151, 224, 183, 43, 220, 151, 224, 183, 44, 220, 151, 224, 183, 223, 
+    52, 216, 90, 245, 105, 249, 107, 232, 152, 226, 162, 249, 107, 232, 152, 
+    254, 126, 52, 218, 64, 52, 218, 22, 52, 235, 205, 52, 214, 175, 225, 50, 
+    128, 22, 226, 12, 112, 233, 21, 2, 247, 128, 242, 137, 2, 247, 128, 213, 
+    187, 230, 102, 233, 20, 213, 187, 230, 102, 242, 136, 233, 21, 128, 216, 
+    43, 177, 242, 136, 242, 137, 128, 216, 43, 177, 233, 20, 128, 216, 43, 
+    177, 233, 20, 128, 216, 43, 177, 242, 136, 128, 216, 43, 177, 224, 205, 
+    128, 216, 43, 177, 218, 56, 247, 146, 228, 57, 224, 209, 177, 245, 107, 
+    247, 146, 228, 57, 218, 59, 177, 245, 107, 228, 57, 42, 236, 22, 64, 177, 
+    128, 112, 228, 57, 42, 226, 154, 64, 177, 128, 112, 42, 236, 22, 64, 177, 
+    228, 57, 128, 112, 42, 226, 154, 64, 177, 228, 57, 128, 112, 233, 21, 
+    251, 96, 228, 57, 245, 102, 112, 242, 137, 251, 96, 228, 57, 245, 102, 
+    112, 224, 206, 251, 96, 228, 57, 245, 102, 112, 218, 57, 251, 96, 228, 
+    57, 245, 102, 112, 228, 57, 228, 62, 218, 78, 226, 235, 247, 146, 228, 
+    57, 249, 196, 253, 246, 228, 62, 218, 77, 228, 57, 228, 62, 218, 78, 64, 
+    177, 128, 112, 247, 146, 228, 57, 249, 196, 253, 246, 228, 62, 218, 78, 
+    177, 245, 107, 67, 245, 171, 230, 227, 203, 245, 171, 120, 44, 248, 7, 
+    245, 171, 124, 44, 248, 7, 245, 171, 245, 178, 64, 2, 200, 203, 91, 245, 
+    178, 64, 2, 67, 252, 149, 253, 215, 245, 151, 64, 203, 91, 4, 245, 178, 
+    64, 2, 67, 252, 149, 253, 215, 245, 151, 64, 203, 91, 245, 178, 64, 2, 
+    59, 48, 245, 178, 64, 2, 226, 127, 4, 245, 178, 64, 2, 226, 127, 245, 
+    178, 64, 2, 214, 183, 245, 178, 64, 2, 113, 203, 218, 92, 249, 194, 2, 
+    200, 203, 91, 249, 194, 2, 67, 252, 149, 253, 215, 245, 151, 64, 203, 91, 
+    4, 249, 194, 2, 67, 252, 149, 253, 215, 245, 151, 64, 203, 91, 249, 194, 
+    2, 226, 127, 4, 249, 194, 2, 226, 127, 210, 160, 189, 252, 181, 231, 66, 
+    248, 2, 50, 245, 180, 75, 240, 241, 120, 254, 1, 124, 254, 1, 224, 178, 
+    225, 168, 212, 32, 232, 219, 43, 250, 189, 44, 250, 189, 43, 244, 65, 44, 
+    244, 65, 251, 183, 44, 249, 140, 251, 183, 43, 249, 140, 216, 15, 44, 
+    249, 140, 216, 15, 43, 249, 140, 223, 52, 228, 57, 50, 42, 232, 110, 254, 
+    33, 221, 166, 221, 173, 217, 2, 223, 123, 224, 244, 235, 245, 213, 165, 
+    218, 236, 225, 44, 64, 235, 214, 50, 215, 94, 228, 57, 50, 212, 42, 240, 
+    243, 216, 15, 43, 249, 168, 216, 15, 44, 249, 168, 251, 183, 43, 249, 
+    168, 251, 183, 44, 249, 168, 216, 15, 163, 235, 218, 251, 183, 163, 235, 
+    218, 243, 248, 219, 77, 120, 254, 2, 252, 32, 113, 203, 252, 137, 226, 
+    164, 234, 144, 245, 98, 216, 43, 216, 197, 222, 254, 211, 179, 236, 7, 
+    116, 223, 120, 251, 171, 234, 143, 233, 48, 254, 118, 127, 222, 250, 254, 
+    118, 127, 245, 98, 216, 43, 216, 197, 233, 52, 252, 43, 222, 236, 249, 
+    78, 254, 164, 254, 9, 217, 182, 216, 5, 222, 125, 247, 223, 226, 155, 
+    249, 206, 217, 53, 219, 88, 249, 159, 249, 158, 254, 74, 243, 232, 16, 
+    240, 158, 254, 74, 243, 232, 16, 218, 230, 224, 30, 254, 74, 243, 232, 
+    16, 224, 31, 245, 107, 254, 74, 243, 232, 16, 224, 31, 247, 182, 254, 74, 
+    243, 232, 16, 224, 31, 248, 0, 254, 74, 243, 232, 16, 224, 31, 235, 62, 
+    254, 74, 243, 232, 16, 224, 31, 250, 43, 254, 74, 243, 232, 16, 250, 44, 
+    218, 137, 254, 74, 243, 232, 16, 250, 44, 235, 62, 254, 74, 243, 232, 16, 
+    219, 98, 130, 254, 74, 243, 232, 16, 252, 189, 130, 254, 74, 243, 232, 
+    16, 224, 31, 219, 97, 254, 74, 243, 232, 16, 224, 31, 252, 188, 254, 74, 
+    243, 232, 16, 224, 31, 233, 20, 254, 74, 243, 232, 16, 224, 31, 242, 136, 
+    254, 74, 243, 232, 16, 140, 214, 19, 254, 74, 243, 232, 16, 97, 214, 19, 
+    254, 74, 243, 232, 16, 224, 31, 140, 75, 254, 74, 243, 232, 16, 224, 31, 
+    97, 75, 254, 74, 243, 232, 16, 250, 44, 252, 188, 254, 74, 243, 232, 16, 
+    124, 217, 89, 214, 183, 254, 74, 243, 232, 16, 248, 63, 218, 137, 254, 
+    74, 243, 232, 16, 224, 31, 124, 250, 246, 254, 74, 243, 232, 16, 224, 31, 
+    248, 62, 254, 74, 243, 232, 16, 124, 217, 89, 235, 62, 254, 74, 243, 232, 
+    16, 214, 153, 214, 19, 254, 74, 243, 232, 16, 224, 31, 214, 153, 75, 254, 
+    74, 243, 232, 16, 120, 217, 89, 226, 127, 254, 74, 243, 232, 16, 248, 74, 
+    218, 137, 254, 74, 243, 232, 16, 224, 31, 120, 250, 246, 254, 74, 243, 
+    232, 16, 224, 31, 248, 73, 254, 74, 243, 232, 16, 120, 217, 89, 235, 62, 
+    254, 74, 243, 232, 16, 246, 112, 214, 19, 254, 74, 243, 232, 16, 224, 31, 
+    246, 112, 75, 254, 74, 243, 232, 16, 224, 0, 214, 183, 254, 74, 243, 232, 
+    16, 248, 63, 214, 183, 254, 74, 243, 232, 16, 248, 1, 214, 183, 254, 74, 
+    243, 232, 16, 235, 63, 214, 183, 254, 74, 243, 232, 16, 250, 44, 214, 
+    183, 254, 74, 243, 232, 16, 120, 220, 7, 235, 62, 254, 74, 243, 232, 16, 
+    224, 0, 224, 30, 254, 74, 243, 232, 16, 250, 44, 218, 158, 254, 74, 243, 
+    232, 16, 224, 31, 249, 234, 254, 74, 243, 232, 16, 120, 217, 89, 248, 9, 
+    254, 74, 243, 232, 16, 248, 74, 248, 9, 254, 74, 243, 232, 16, 218, 159, 
+    248, 9, 254, 74, 243, 232, 16, 235, 63, 248, 9, 254, 74, 243, 232, 16, 
+    250, 44, 248, 9, 254, 74, 243, 232, 16, 124, 220, 7, 218, 137, 254, 74, 
+    243, 232, 16, 43, 220, 7, 218, 137, 254, 74, 243, 232, 16, 216, 90, 248, 
+    9, 254, 74, 243, 232, 16, 242, 137, 248, 9, 254, 74, 243, 232, 16, 249, 
+    228, 130, 254, 74, 243, 232, 16, 248, 74, 184, 254, 74, 243, 232, 16, 
+    210, 34, 254, 74, 243, 232, 16, 218, 138, 184, 254, 74, 243, 232, 16, 
+    220, 153, 214, 183, 254, 74, 243, 232, 16, 224, 31, 228, 57, 245, 107, 
+    254, 74, 243, 232, 16, 224, 31, 224, 15, 254, 74, 243, 232, 16, 124, 250, 
+    247, 184, 254, 74, 243, 232, 16, 120, 250, 247, 184, 254, 74, 243, 232, 
+    16, 235, 192, 254, 74, 243, 232, 16, 223, 40, 254, 74, 243, 232, 16, 226, 
+    205, 254, 74, 243, 232, 16, 254, 152, 214, 183, 254, 74, 243, 232, 16, 
+    245, 109, 214, 183, 254, 74, 243, 232, 16, 235, 193, 214, 183, 254, 74, 
+    243, 232, 16, 226, 206, 214, 183, 254, 74, 243, 232, 16, 254, 151, 228, 
+    57, 250, 138, 79, 44, 254, 118, 2, 246, 112, 210, 35, 75, 219, 237, 204, 
+    251, 171, 252, 53, 87, 67, 232, 220, 2, 230, 229, 247, 128, 235, 223, 87, 
+    249, 191, 214, 181, 87, 247, 197, 214, 181, 87, 245, 162, 87, 249, 218, 
+    87, 71, 42, 2, 250, 183, 67, 232, 219, 245, 138, 87, 254, 147, 234, 145, 
+    87, 241, 220, 87, 37, 203, 252, 149, 2, 228, 55, 37, 215, 227, 246, 114, 
+    251, 143, 250, 44, 2, 228, 59, 75, 214, 179, 87, 230, 142, 87, 240, 171, 
+    87, 226, 178, 242, 66, 87, 226, 178, 233, 153, 87, 225, 248, 87, 225, 
+    247, 87, 247, 205, 249, 105, 16, 244, 28, 105, 219, 52, 87, 254, 74, 243, 
+    232, 16, 224, 30, 248, 91, 220, 140, 234, 145, 87, 224, 195, 226, 79, 
+    229, 87, 226, 79, 224, 191, 221, 191, 87, 250, 25, 221, 191, 87, 43, 226, 
+    8, 214, 160, 103, 43, 226, 8, 245, 29, 43, 226, 8, 232, 114, 103, 44, 
+    226, 8, 214, 160, 103, 44, 226, 8, 245, 29, 44, 226, 8, 232, 114, 103, 
+    43, 42, 251, 166, 214, 160, 249, 168, 43, 42, 251, 166, 245, 29, 43, 42, 
+    251, 166, 232, 114, 249, 168, 44, 42, 251, 166, 214, 160, 249, 168, 44, 
+    42, 251, 166, 245, 29, 44, 42, 251, 166, 232, 114, 249, 168, 43, 249, 
+    107, 251, 166, 214, 160, 103, 43, 249, 107, 251, 166, 230, 229, 225, 104, 
+    43, 249, 107, 251, 166, 232, 114, 103, 249, 107, 251, 166, 245, 29, 44, 
+    249, 107, 251, 166, 214, 160, 103, 44, 249, 107, 251, 166, 230, 229, 225, 
+    104, 44, 249, 107, 251, 166, 232, 114, 103, 235, 219, 245, 29, 203, 232, 
+    220, 245, 29, 214, 160, 43, 177, 232, 114, 44, 249, 107, 251, 166, 221, 
+    174, 214, 160, 44, 177, 232, 114, 43, 249, 107, 251, 166, 221, 174, 218, 
+    42, 216, 14, 218, 42, 251, 182, 216, 15, 42, 127, 251, 183, 42, 127, 251, 
+    183, 42, 251, 166, 115, 216, 15, 42, 127, 34, 16, 251, 182, 43, 67, 93, 
+    232, 219, 44, 67, 93, 232, 219, 203, 221, 207, 232, 218, 203, 221, 207, 
+    232, 217, 203, 221, 207, 232, 216, 203, 221, 207, 232, 215, 248, 54, 16, 
+    193, 67, 22, 216, 15, 222, 254, 248, 54, 16, 193, 67, 22, 251, 183, 222, 
+    254, 248, 54, 16, 193, 67, 2, 250, 43, 248, 54, 16, 193, 124, 22, 203, 2, 
+    250, 43, 248, 54, 16, 193, 120, 22, 203, 2, 250, 43, 248, 54, 16, 193, 
+    67, 2, 215, 226, 248, 54, 16, 193, 124, 22, 203, 2, 215, 226, 248, 54, 
+    16, 193, 120, 22, 203, 2, 215, 226, 248, 54, 16, 193, 67, 22, 212, 35, 
+    248, 54, 16, 193, 124, 22, 203, 2, 212, 35, 248, 54, 16, 193, 120, 22, 
+    203, 2, 212, 35, 248, 54, 16, 193, 124, 22, 241, 51, 248, 54, 16, 193, 
+    120, 22, 241, 51, 248, 54, 16, 193, 67, 22, 216, 15, 233, 52, 248, 54, 
+    16, 193, 67, 22, 251, 183, 233, 52, 42, 244, 40, 223, 57, 87, 245, 190, 
+    87, 67, 232, 220, 245, 29, 231, 38, 251, 154, 231, 38, 200, 115, 219, 
+    252, 231, 38, 219, 253, 115, 232, 143, 231, 38, 200, 115, 113, 219, 239, 
+    231, 38, 113, 219, 240, 115, 232, 143, 231, 38, 113, 219, 240, 235, 70, 
+    231, 38, 215, 209, 231, 38, 216, 224, 231, 38, 225, 191, 245, 232, 242, 
+    129, 243, 226, 216, 15, 226, 7, 251, 183, 226, 7, 216, 15, 249, 107, 127, 
+    251, 183, 249, 107, 127, 216, 15, 216, 7, 220, 55, 127, 251, 183, 216, 7, 
+    220, 55, 127, 71, 215, 240, 252, 43, 222, 237, 2, 250, 43, 218, 122, 244, 
+    72, 255, 26, 249, 104, 245, 179, 235, 205, 248, 91, 245, 32, 87, 85, 222, 
+    250, 52, 215, 226, 85, 233, 48, 52, 215, 226, 85, 214, 162, 52, 215, 226, 
+    85, 246, 113, 52, 215, 226, 85, 222, 250, 52, 215, 227, 2, 67, 130, 85, 
+    233, 48, 52, 215, 227, 2, 67, 130, 85, 222, 250, 215, 227, 2, 52, 67, 
+    130, 254, 182, 250, 11, 218, 128, 216, 87, 250, 11, 240, 244, 2, 244, 58, 
+    221, 243, 16, 31, 227, 206, 16, 31, 218, 154, 64, 241, 240, 16, 31, 218, 
+    154, 64, 216, 213, 16, 31, 245, 151, 64, 216, 213, 16, 31, 245, 151, 64, 
+    215, 244, 16, 31, 245, 140, 16, 31, 255, 16, 16, 31, 252, 52, 16, 31, 
+    252, 187, 16, 31, 203, 217, 90, 16, 31, 232, 220, 244, 153, 16, 31, 67, 
+    217, 90, 16, 31, 244, 28, 244, 153, 16, 31, 250, 238, 223, 56, 16, 31, 
+    220, 30, 226, 134, 16, 31, 220, 30, 236, 6, 16, 31, 248, 159, 232, 210, 
+    245, 85, 16, 31, 248, 39, 249, 186, 111, 16, 31, 248, 39, 249, 186, 105, 
+    16, 31, 248, 39, 249, 186, 158, 16, 31, 248, 39, 249, 186, 161, 16, 31, 
+    152, 255, 16, 16, 31, 217, 178, 236, 69, 16, 31, 245, 151, 64, 215, 245, 
+    251, 221, 16, 31, 251, 13, 16, 31, 245, 151, 64, 231, 86, 16, 31, 218, 
+    62, 16, 31, 245, 85, 16, 31, 244, 115, 220, 139, 16, 31, 242, 128, 220, 
+    139, 16, 31, 223, 124, 220, 139, 16, 31, 214, 174, 220, 139, 16, 31, 219, 
+    20, 16, 31, 248, 71, 251, 224, 87, 204, 251, 171, 16, 31, 229, 90, 16, 
+    31, 248, 72, 244, 28, 105, 16, 31, 218, 63, 244, 28, 105, 226, 245, 103, 
+    226, 245, 250, 160, 226, 245, 244, 31, 226, 245, 235, 200, 244, 31, 226, 
+    245, 252, 50, 251, 132, 226, 245, 251, 178, 216, 112, 226, 245, 251, 163, 
+    252, 154, 240, 110, 226, 245, 254, 135, 64, 250, 137, 226, 245, 248, 164, 
+    226, 245, 249, 95, 255, 20, 227, 204, 226, 245, 52, 252, 188, 37, 21, 
+    111, 37, 21, 105, 37, 21, 158, 37, 21, 161, 37, 21, 190, 37, 21, 195, 37, 
+    21, 199, 37, 21, 196, 37, 21, 201, 37, 54, 216, 248, 37, 54, 245, 175, 
+    37, 54, 215, 76, 37, 54, 216, 165, 37, 54, 244, 13, 37, 54, 244, 126, 37, 
+    54, 219, 121, 37, 54, 220, 121, 37, 54, 245, 198, 37, 54, 228, 202, 37, 
+    54, 215, 73, 88, 21, 111, 88, 21, 105, 88, 21, 158, 88, 21, 161, 88, 21, 
+    190, 88, 21, 195, 88, 21, 199, 88, 21, 196, 88, 21, 201, 88, 54, 216, 
+    248, 88, 54, 245, 175, 88, 54, 215, 76, 88, 54, 216, 165, 88, 54, 244, 
+    13, 88, 54, 244, 126, 88, 54, 219, 121, 88, 54, 220, 121, 88, 54, 245, 
+    198, 88, 54, 228, 202, 88, 54, 215, 73, 21, 123, 243, 236, 218, 131, 21, 
+    113, 243, 236, 218, 131, 21, 134, 243, 236, 218, 131, 21, 244, 19, 243, 
+    236, 218, 131, 21, 244, 89, 243, 236, 218, 131, 21, 219, 127, 243, 236, 
+    218, 131, 21, 220, 124, 243, 236, 218, 131, 21, 245, 201, 243, 236, 218, 
+    131, 21, 228, 205, 243, 236, 218, 131, 54, 216, 249, 243, 236, 218, 131, 
+    54, 245, 176, 243, 236, 218, 131, 54, 215, 77, 243, 236, 218, 131, 54, 
+    216, 166, 243, 236, 218, 131, 54, 244, 14, 243, 236, 218, 131, 54, 244, 
+    127, 243, 236, 218, 131, 54, 219, 122, 243, 236, 218, 131, 54, 220, 122, 
+    243, 236, 218, 131, 54, 245, 199, 243, 236, 218, 131, 54, 228, 203, 243, 
+    236, 218, 131, 54, 215, 74, 243, 236, 218, 131, 88, 7, 4, 1, 61, 88, 7, 
+    4, 1, 253, 166, 88, 7, 4, 1, 251, 74, 88, 7, 4, 1, 249, 68, 88, 7, 4, 1, 
+    76, 88, 7, 4, 1, 245, 14, 88, 7, 4, 1, 243, 209, 88, 7, 4, 1, 242, 67, 
+    88, 7, 4, 1, 74, 88, 7, 4, 1, 235, 150, 88, 7, 4, 1, 235, 29, 88, 7, 4, 
+    1, 156, 88, 7, 4, 1, 194, 88, 7, 4, 1, 230, 30, 88, 7, 4, 1, 78, 88, 7, 
+    4, 1, 226, 109, 88, 7, 4, 1, 224, 99, 88, 7, 4, 1, 153, 88, 7, 4, 1, 222, 
+    93, 88, 7, 4, 1, 217, 153, 88, 7, 4, 1, 69, 88, 7, 4, 1, 214, 105, 88, 7, 
+    4, 1, 212, 98, 88, 7, 4, 1, 211, 178, 88, 7, 4, 1, 211, 117, 88, 7, 4, 1, 
+    210, 159, 37, 7, 6, 1, 61, 37, 7, 6, 1, 253, 166, 37, 7, 6, 1, 251, 74, 
+    37, 7, 6, 1, 249, 68, 37, 7, 6, 1, 76, 37, 7, 6, 1, 245, 14, 37, 7, 6, 1, 
+    243, 209, 37, 7, 6, 1, 242, 67, 37, 7, 6, 1, 74, 37, 7, 6, 1, 235, 150, 
+    37, 7, 6, 1, 235, 29, 37, 7, 6, 1, 156, 37, 7, 6, 1, 194, 37, 7, 6, 1, 
+    230, 30, 37, 7, 6, 1, 78, 37, 7, 6, 1, 226, 109, 37, 7, 6, 1, 224, 99, 
+    37, 7, 6, 1, 153, 37, 7, 6, 1, 222, 93, 37, 7, 6, 1, 217, 153, 37, 7, 6, 
+    1, 69, 37, 7, 6, 1, 214, 105, 37, 7, 6, 1, 212, 98, 37, 7, 6, 1, 211, 
+    178, 37, 7, 6, 1, 211, 117, 37, 7, 6, 1, 210, 159, 37, 7, 4, 1, 61, 37, 
+    7, 4, 1, 253, 166, 37, 7, 4, 1, 251, 74, 37, 7, 4, 1, 249, 68, 37, 7, 4, 
+    1, 76, 37, 7, 4, 1, 245, 14, 37, 7, 4, 1, 243, 209, 37, 7, 4, 1, 242, 67, 
+    37, 7, 4, 1, 74, 37, 7, 4, 1, 235, 150, 37, 7, 4, 1, 235, 29, 37, 7, 4, 
+    1, 156, 37, 7, 4, 1, 194, 37, 7, 4, 1, 230, 30, 37, 7, 4, 1, 78, 37, 7, 
+    4, 1, 226, 109, 37, 7, 4, 1, 224, 99, 37, 7, 4, 1, 153, 37, 7, 4, 1, 222, 
+    93, 37, 7, 4, 1, 217, 153, 37, 7, 4, 1, 69, 37, 7, 4, 1, 214, 105, 37, 7, 
+    4, 1, 212, 98, 37, 7, 4, 1, 211, 178, 37, 7, 4, 1, 211, 117, 37, 7, 4, 1, 
+    210, 159, 37, 21, 210, 86, 152, 37, 54, 245, 175, 152, 37, 54, 215, 76, 
+    152, 37, 54, 216, 165, 152, 37, 54, 244, 13, 152, 37, 54, 244, 126, 152, 
+    37, 54, 219, 121, 152, 37, 54, 220, 121, 152, 37, 54, 245, 198, 152, 37, 
+    54, 228, 202, 152, 37, 54, 215, 73, 52, 37, 21, 111, 52, 37, 21, 105, 52, 
+    37, 21, 158, 52, 37, 21, 161, 52, 37, 21, 190, 52, 37, 21, 195, 52, 37, 
+    21, 199, 52, 37, 21, 196, 52, 37, 21, 201, 52, 37, 54, 216, 248, 152, 37, 
+    21, 210, 86, 93, 99, 193, 241, 51, 93, 99, 114, 241, 51, 93, 99, 193, 
+    213, 239, 93, 99, 114, 213, 239, 93, 99, 193, 215, 212, 248, 165, 241, 
+    51, 93, 99, 114, 215, 212, 248, 165, 241, 51, 93, 99, 193, 215, 212, 248, 
+    165, 213, 239, 93, 99, 114, 215, 212, 248, 165, 213, 239, 93, 99, 193, 
+    224, 27, 248, 165, 241, 51, 93, 99, 114, 224, 27, 248, 165, 241, 51, 93, 
+    99, 193, 224, 27, 248, 165, 213, 239, 93, 99, 114, 224, 27, 248, 165, 
+    213, 239, 93, 99, 193, 124, 22, 222, 254, 93, 99, 124, 193, 22, 44, 241, 
+    228, 93, 99, 124, 114, 22, 44, 232, 236, 93, 99, 114, 124, 22, 222, 254, 
+    93, 99, 193, 124, 22, 233, 52, 93, 99, 124, 193, 22, 43, 241, 228, 93, 
+    99, 124, 114, 22, 43, 232, 236, 93, 99, 114, 124, 22, 233, 52, 93, 99, 
+    193, 120, 22, 222, 254, 93, 99, 120, 193, 22, 44, 241, 228, 93, 99, 120, 
+    114, 22, 44, 232, 236, 93, 99, 114, 120, 22, 222, 254, 93, 99, 193, 120, 
+    22, 233, 52, 93, 99, 120, 193, 22, 43, 241, 228, 93, 99, 120, 114, 22, 
+    43, 232, 236, 93, 99, 114, 120, 22, 233, 52, 93, 99, 193, 67, 22, 222, 
+    254, 93, 99, 67, 193, 22, 44, 241, 228, 93, 99, 120, 114, 22, 44, 124, 
+    232, 236, 93, 99, 124, 114, 22, 44, 120, 232, 236, 93, 99, 67, 114, 22, 
+    44, 232, 236, 93, 99, 124, 193, 22, 44, 120, 241, 228, 93, 99, 120, 193, 
+    22, 44, 124, 241, 228, 93, 99, 114, 67, 22, 222, 254, 93, 99, 193, 67, 
+    22, 233, 52, 93, 99, 67, 193, 22, 43, 241, 228, 93, 99, 120, 114, 22, 43, 
+    124, 232, 236, 93, 99, 124, 114, 22, 43, 120, 232, 236, 93, 99, 67, 114, 
+    22, 43, 232, 236, 93, 99, 124, 193, 22, 43, 120, 241, 228, 93, 99, 120, 
+    193, 22, 43, 124, 241, 228, 93, 99, 114, 67, 22, 233, 52, 93, 99, 193, 
+    124, 22, 241, 51, 93, 99, 43, 114, 22, 44, 124, 232, 236, 93, 99, 44, 
+    114, 22, 43, 124, 232, 236, 93, 99, 124, 193, 22, 203, 241, 228, 93, 99, 
+    124, 114, 22, 203, 232, 236, 93, 99, 44, 193, 22, 43, 124, 241, 228, 93, 
+    99, 43, 193, 22, 44, 124, 241, 228, 93, 99, 114, 124, 22, 241, 51, 93, 
+    99, 193, 120, 22, 241, 51, 93, 99, 43, 114, 22, 44, 120, 232, 236, 93, 
+    99, 44, 114, 22, 43, 120, 232, 236, 93, 99, 120, 193, 22, 203, 241, 228, 
+    93, 99, 120, 114, 22, 203, 232, 236, 93, 99, 44, 193, 22, 43, 120, 241, 
+    228, 93, 99, 43, 193, 22, 44, 120, 241, 228, 93, 99, 114, 120, 22, 241, 
+    51, 93, 99, 193, 67, 22, 241, 51, 93, 99, 43, 114, 22, 44, 67, 232, 236, 
+    93, 99, 44, 114, 22, 43, 67, 232, 236, 93, 99, 67, 193, 22, 203, 241, 
+    228, 93, 99, 120, 114, 22, 124, 203, 232, 236, 93, 99, 124, 114, 22, 120, 
+    203, 232, 236, 93, 99, 67, 114, 22, 203, 232, 236, 93, 99, 43, 120, 114, 
+    22, 44, 124, 232, 236, 93, 99, 44, 120, 114, 22, 43, 124, 232, 236, 93, 
+    99, 43, 124, 114, 22, 44, 120, 232, 236, 93, 99, 44, 124, 114, 22, 43, 
+    120, 232, 236, 93, 99, 124, 193, 22, 120, 203, 241, 228, 93, 99, 120, 
+    193, 22, 124, 203, 241, 228, 93, 99, 44, 193, 22, 43, 67, 241, 228, 93, 
+    99, 43, 193, 22, 44, 67, 241, 228, 93, 99, 114, 67, 22, 241, 51, 93, 99, 
+    193, 52, 248, 165, 241, 51, 93, 99, 114, 52, 248, 165, 241, 51, 93, 99, 
+    193, 52, 248, 165, 213, 239, 93, 99, 114, 52, 248, 165, 213, 239, 93, 99, 
+    52, 241, 51, 93, 99, 52, 213, 239, 93, 99, 124, 219, 157, 22, 44, 246, 
+    121, 93, 99, 124, 52, 22, 44, 219, 156, 93, 99, 52, 124, 22, 222, 254, 
+    93, 99, 124, 219, 157, 22, 43, 246, 121, 93, 99, 124, 52, 22, 43, 219, 
+    156, 93, 99, 52, 124, 22, 233, 52, 93, 99, 120, 219, 157, 22, 44, 246, 
+    121, 93, 99, 120, 52, 22, 44, 219, 156, 93, 99, 52, 120, 22, 222, 254, 
+    93, 99, 120, 219, 157, 22, 43, 246, 121, 93, 99, 120, 52, 22, 43, 219, 
+    156, 93, 99, 52, 120, 22, 233, 52, 93, 99, 67, 219, 157, 22, 44, 246, 
+    121, 93, 99, 67, 52, 22, 44, 219, 156, 93, 99, 52, 67, 22, 222, 254, 93, 
+    99, 67, 219, 157, 22, 43, 246, 121, 93, 99, 67, 52, 22, 43, 219, 156, 93, 
+    99, 52, 67, 22, 233, 52, 93, 99, 124, 219, 157, 22, 203, 246, 121, 93, 
+    99, 124, 52, 22, 203, 219, 156, 93, 99, 52, 124, 22, 241, 51, 93, 99, 
+    120, 219, 157, 22, 203, 246, 121, 93, 99, 120, 52, 22, 203, 219, 156, 93, 
+    99, 52, 120, 22, 241, 51, 93, 99, 67, 219, 157, 22, 203, 246, 121, 93, 
+    99, 67, 52, 22, 203, 219, 156, 93, 99, 52, 67, 22, 241, 51, 93, 99, 193, 
+    254, 34, 124, 22, 222, 254, 93, 99, 193, 254, 34, 124, 22, 233, 52, 93, 
+    99, 193, 254, 34, 120, 22, 233, 52, 93, 99, 193, 254, 34, 120, 22, 222, 
+    254, 93, 99, 193, 248, 7, 214, 160, 44, 216, 43, 232, 114, 233, 52, 93, 
+    99, 193, 248, 7, 214, 160, 43, 216, 43, 232, 114, 222, 254, 93, 99, 193, 
+    248, 7, 249, 138, 93, 99, 193, 233, 52, 93, 99, 193, 214, 163, 93, 99, 
+    193, 222, 254, 93, 99, 193, 246, 114, 93, 99, 114, 233, 52, 93, 99, 114, 
+    214, 163, 93, 99, 114, 222, 254, 93, 99, 114, 246, 114, 93, 99, 193, 43, 
+    22, 114, 222, 254, 93, 99, 193, 120, 22, 114, 246, 114, 93, 99, 114, 43, 
+    22, 193, 222, 254, 93, 99, 114, 120, 22, 193, 246, 114, 214, 160, 163, 
+    251, 221, 232, 114, 123, 245, 197, 251, 221, 232, 114, 123, 224, 25, 251, 
+    221, 232, 114, 134, 245, 195, 251, 221, 232, 114, 163, 251, 221, 232, 
+    114, 244, 89, 245, 195, 251, 221, 232, 114, 134, 224, 23, 251, 221, 232, 
+    114, 220, 124, 245, 195, 251, 221, 243, 236, 251, 221, 43, 220, 124, 245, 
+    195, 251, 221, 43, 134, 224, 23, 251, 221, 43, 244, 89, 245, 195, 251, 
+    221, 43, 163, 251, 221, 43, 134, 245, 195, 251, 221, 43, 123, 224, 25, 
+    251, 221, 43, 123, 245, 197, 251, 221, 44, 163, 251, 221, 193, 220, 94, 
+    231, 87, 220, 94, 248, 170, 220, 94, 214, 160, 123, 245, 197, 251, 221, 
+    44, 123, 245, 197, 251, 221, 224, 29, 232, 114, 233, 52, 224, 29, 232, 
+    114, 222, 254, 224, 29, 214, 160, 233, 52, 224, 29, 214, 160, 43, 22, 
+    232, 114, 43, 22, 232, 114, 222, 254, 224, 29, 214, 160, 43, 22, 232, 
+    114, 222, 254, 224, 29, 214, 160, 43, 22, 214, 160, 44, 22, 232, 114, 
+    233, 52, 224, 29, 214, 160, 43, 22, 214, 160, 44, 22, 232, 114, 222, 254, 
+    224, 29, 214, 160, 222, 254, 224, 29, 214, 160, 44, 22, 232, 114, 233, 
+    52, 224, 29, 214, 160, 44, 22, 232, 114, 43, 22, 232, 114, 222, 254, 85, 
+    218, 236, 71, 218, 236, 71, 42, 2, 222, 185, 249, 167, 71, 42, 249, 195, 
+    85, 4, 218, 236, 42, 2, 203, 244, 113, 42, 2, 67, 244, 113, 42, 2, 226, 
+    148, 249, 134, 244, 113, 42, 2, 214, 160, 43, 216, 43, 232, 114, 44, 244, 
+    113, 42, 2, 214, 160, 44, 216, 43, 232, 114, 43, 244, 113, 42, 2, 248, 7, 
+    249, 134, 244, 113, 85, 4, 218, 236, 71, 4, 218, 236, 85, 223, 119, 71, 
+    223, 119, 85, 67, 223, 119, 71, 67, 223, 119, 85, 226, 10, 71, 226, 10, 
+    85, 214, 162, 215, 226, 71, 214, 162, 215, 226, 85, 214, 162, 4, 215, 
+    226, 71, 214, 162, 4, 215, 226, 85, 222, 250, 215, 226, 71, 222, 250, 
+    215, 226, 85, 222, 250, 4, 215, 226, 71, 222, 250, 4, 215, 226, 85, 222, 
+    250, 225, 11, 71, 222, 250, 225, 11, 85, 246, 113, 215, 226, 71, 246, 
+    113, 215, 226, 85, 246, 113, 4, 215, 226, 71, 246, 113, 4, 215, 226, 85, 
+    233, 48, 215, 226, 71, 233, 48, 215, 226, 85, 233, 48, 4, 215, 226, 71, 
+    233, 48, 4, 215, 226, 85, 233, 48, 225, 11, 71, 233, 48, 225, 11, 85, 
+    248, 0, 71, 248, 0, 71, 248, 1, 249, 195, 85, 4, 248, 0, 244, 97, 232, 
+    110, 71, 250, 43, 246, 126, 250, 43, 250, 44, 2, 67, 244, 113, 251, 119, 
+    85, 250, 43, 250, 44, 2, 43, 163, 251, 229, 250, 44, 2, 44, 163, 251, 
+    229, 250, 44, 2, 232, 114, 163, 251, 229, 250, 44, 2, 214, 160, 163, 251, 
+    229, 250, 44, 2, 214, 160, 44, 224, 29, 251, 229, 250, 44, 2, 254, 164, 
+    251, 96, 214, 160, 43, 224, 29, 251, 229, 43, 163, 85, 250, 43, 44, 163, 
+    85, 250, 43, 235, 201, 251, 121, 235, 201, 71, 250, 43, 214, 160, 163, 
+    235, 201, 71, 250, 43, 232, 114, 163, 235, 201, 71, 250, 43, 214, 160, 
+    43, 224, 29, 250, 41, 254, 33, 214, 160, 44, 224, 29, 250, 41, 254, 33, 
+    232, 114, 44, 224, 29, 250, 41, 254, 33, 232, 114, 43, 224, 29, 250, 41, 
+    254, 33, 214, 160, 163, 250, 43, 232, 114, 163, 250, 43, 85, 232, 114, 
+    44, 215, 226, 85, 232, 114, 43, 215, 226, 85, 214, 160, 43, 215, 226, 85, 
+    214, 160, 44, 215, 226, 71, 251, 121, 42, 2, 43, 163, 251, 229, 42, 2, 
+    44, 163, 251, 229, 42, 2, 214, 160, 43, 248, 7, 163, 251, 229, 42, 2, 
+    232, 114, 44, 248, 7, 163, 251, 229, 71, 42, 2, 67, 251, 240, 232, 219, 
+    71, 214, 162, 215, 227, 2, 247, 128, 214, 162, 215, 227, 2, 43, 163, 251, 
+    229, 214, 162, 215, 227, 2, 44, 163, 251, 229, 233, 91, 250, 43, 71, 42, 
+    2, 214, 160, 43, 224, 28, 71, 42, 2, 232, 114, 43, 224, 28, 71, 42, 2, 
+    232, 114, 44, 224, 28, 71, 42, 2, 214, 160, 44, 224, 28, 71, 250, 44, 2, 
+    214, 160, 43, 224, 28, 71, 250, 44, 2, 232, 114, 43, 224, 28, 71, 250, 
+    44, 2, 232, 114, 44, 224, 28, 71, 250, 44, 2, 214, 160, 44, 224, 28, 214, 
+    160, 43, 215, 226, 214, 160, 44, 215, 226, 232, 114, 43, 215, 226, 71, 
+    231, 87, 218, 236, 85, 231, 87, 218, 236, 71, 231, 87, 4, 218, 236, 85, 
+    231, 87, 4, 218, 236, 232, 114, 44, 215, 226, 85, 218, 39, 2, 223, 135, 
+    249, 255, 214, 194, 219, 62, 249, 230, 85, 218, 158, 71, 218, 158, 232, 
+    234, 216, 133, 218, 38, 253, 242, 228, 76, 248, 46, 228, 76, 249, 203, 
+    226, 167, 85, 217, 1, 71, 217, 1, 252, 164, 251, 171, 252, 164, 93, 2, 
+    250, 137, 252, 164, 93, 2, 211, 178, 222, 0, 214, 195, 2, 223, 163, 246, 
+    92, 240, 250, 252, 30, 71, 220, 4, 225, 104, 85, 220, 4, 225, 104, 220, 
+    89, 223, 52, 222, 189, 244, 63, 241, 235, 251, 121, 85, 43, 225, 10, 235, 
+    249, 85, 44, 225, 10, 235, 249, 71, 43, 225, 10, 235, 249, 71, 120, 225, 
+    10, 235, 249, 71, 44, 225, 10, 235, 249, 71, 124, 225, 10, 235, 249, 219, 
+    103, 22, 249, 137, 250, 227, 50, 223, 175, 50, 251, 247, 50, 251, 33, 
+    254, 110, 226, 149, 249, 138, 250, 119, 223, 40, 249, 139, 64, 232, 124, 
+    249, 139, 64, 235, 122, 218, 159, 22, 249, 144, 244, 176, 87, 255, 1, 
+    220, 91, 242, 29, 22, 219, 191, 225, 223, 87, 210, 254, 211, 69, 215, 
+    216, 31, 241, 230, 215, 216, 31, 233, 113, 215, 216, 31, 244, 104, 215, 
+    216, 31, 216, 134, 215, 216, 31, 211, 239, 215, 216, 31, 212, 40, 215, 
+    216, 31, 230, 120, 215, 216, 31, 245, 231, 212, 1, 64, 248, 26, 71, 243, 
+    247, 244, 198, 71, 219, 76, 244, 198, 85, 219, 76, 244, 198, 71, 218, 39, 
+    2, 223, 135, 244, 100, 224, 25, 230, 133, 233, 86, 224, 25, 230, 133, 
+    231, 59, 244, 146, 50, 245, 231, 231, 195, 50, 235, 44, 221, 222, 214, 
+    145, 229, 98, 225, 23, 254, 20, 217, 41, 243, 59, 251, 11, 233, 25, 213, 
+    150, 232, 244, 221, 193, 222, 21, 251, 0, 254, 50, 225, 55, 71, 250, 125, 
+    234, 84, 71, 250, 125, 224, 17, 71, 250, 125, 222, 197, 71, 250, 125, 
+    251, 239, 71, 250, 125, 234, 36, 71, 250, 125, 225, 235, 85, 250, 125, 
+    234, 84, 85, 250, 125, 224, 17, 85, 250, 125, 222, 197, 85, 250, 125, 
+    251, 239, 85, 250, 125, 234, 36, 85, 250, 125, 225, 235, 85, 219, 18, 
+    218, 51, 71, 241, 235, 218, 51, 71, 248, 1, 218, 51, 85, 249, 253, 218, 
+    51, 71, 219, 18, 218, 51, 85, 241, 235, 218, 51, 85, 248, 1, 218, 51, 71, 
+    249, 253, 218, 51, 240, 250, 218, 240, 224, 25, 228, 52, 245, 197, 228, 
+    52, 252, 81, 245, 197, 228, 47, 252, 81, 219, 120, 228, 47, 230, 62, 244, 
+    74, 50, 230, 62, 229, 193, 50, 230, 62, 220, 78, 50, 212, 9, 183, 249, 
+    138, 245, 228, 183, 249, 138, 214, 171, 223, 115, 87, 223, 115, 16, 31, 
+    215, 48, 225, 37, 223, 115, 16, 31, 215, 47, 225, 37, 223, 115, 16, 31, 
+    215, 46, 225, 37, 223, 115, 16, 31, 215, 45, 225, 37, 223, 115, 16, 31, 
+    215, 44, 225, 37, 223, 115, 16, 31, 215, 43, 225, 37, 223, 115, 16, 31, 
+    215, 42, 225, 37, 223, 115, 16, 31, 243, 57, 231, 143, 85, 214, 171, 223, 
+    115, 87, 223, 116, 226, 24, 87, 226, 0, 226, 24, 87, 225, 177, 226, 24, 
+    50, 211, 255, 87, 247, 249, 244, 197, 247, 249, 244, 196, 247, 249, 244, 
+    195, 247, 249, 244, 194, 247, 249, 244, 193, 247, 249, 244, 192, 71, 250, 
+    44, 2, 59, 222, 254, 71, 250, 44, 2, 113, 247, 126, 85, 250, 44, 2, 71, 
+    59, 222, 254, 85, 250, 44, 2, 113, 71, 247, 126, 230, 147, 31, 211, 69, 
+    230, 147, 31, 210, 253, 247, 232, 31, 242, 138, 211, 69, 247, 232, 31, 
+    233, 19, 210, 253, 247, 232, 31, 233, 19, 211, 69, 247, 232, 31, 242, 
+    138, 210, 253, 71, 244, 81, 85, 244, 81, 242, 29, 22, 225, 107, 254, 128, 
+    249, 136, 217, 236, 218, 166, 64, 254, 235, 221, 208, 254, 178, 244, 59, 
+    243, 67, 218, 166, 64, 241, 209, 253, 207, 87, 244, 70, 226, 130, 71, 
+    218, 158, 134, 232, 214, 249, 183, 222, 254, 134, 232, 214, 249, 183, 
+    233, 52, 212, 50, 50, 125, 213, 130, 50, 246, 118, 244, 146, 50, 246, 
+    118, 231, 195, 50, 235, 210, 244, 146, 22, 231, 195, 50, 231, 195, 22, 
+    244, 146, 50, 231, 195, 2, 218, 105, 50, 231, 195, 2, 218, 105, 22, 231, 
+    195, 22, 244, 146, 50, 67, 231, 195, 2, 218, 105, 50, 203, 231, 195, 2, 
+    218, 105, 50, 231, 87, 71, 250, 43, 231, 87, 85, 250, 43, 231, 87, 4, 71, 
+    250, 43, 231, 158, 87, 247, 175, 87, 214, 169, 225, 255, 87, 249, 239, 
+    243, 231, 214, 141, 229, 93, 250, 169, 226, 65, 235, 50, 213, 185, 250, 
+    101, 85, 230, 134, 232, 231, 220, 114, 220, 149, 224, 8, 220, 132, 219, 
+    57, 252, 167, 252, 134, 92, 234, 144, 71, 246, 101, 231, 190, 71, 246, 
+    101, 234, 84, 85, 246, 101, 231, 190, 85, 246, 101, 234, 84, 219, 63, 
+    211, 230, 219, 66, 218, 39, 252, 59, 249, 255, 223, 162, 85, 219, 62, 
+    216, 135, 250, 0, 22, 223, 162, 215, 94, 71, 220, 4, 225, 104, 215, 94, 
+    85, 220, 4, 225, 104, 71, 248, 1, 236, 7, 218, 236, 249, 133, 233, 97, 
+    247, 201, 250, 252, 226, 170, 225, 107, 250, 253, 219, 90, 241, 219, 2, 
+    71, 249, 138, 37, 249, 133, 233, 97, 250, 161, 228, 80, 245, 132, 254, 
+    149, 226, 195, 43, 212, 26, 215, 252, 85, 215, 55, 43, 212, 26, 215, 252, 
+    71, 215, 55, 43, 212, 26, 215, 252, 85, 43, 233, 98, 231, 58, 71, 43, 
+    233, 98, 231, 58, 246, 97, 219, 84, 50, 114, 71, 246, 113, 215, 226, 43, 
+    250, 8, 245, 132, 92, 222, 0, 244, 183, 248, 7, 236, 7, 71, 250, 44, 236, 
+    7, 85, 218, 236, 85, 215, 193, 223, 63, 43, 245, 131, 223, 63, 43, 245, 
+    130, 253, 219, 16, 31, 214, 145, 114, 250, 44, 2, 218, 105, 22, 113, 170, 
+    48, 225, 192, 222, 251, 235, 212, 225, 192, 233, 49, 235, 212, 225, 192, 
+    235, 200, 225, 192, 85, 249, 139, 226, 201, 220, 31, 220, 19, 219, 231, 
+    250, 69, 250, 234, 241, 164, 219, 128, 243, 68, 211, 230, 240, 227, 243, 
+    68, 2, 242, 19, 231, 178, 16, 31, 232, 235, 230, 120, 214, 195, 226, 201, 
+    242, 129, 244, 20, 244, 82, 236, 7, 241, 66, 244, 137, 222, 16, 42, 244, 
+    19, 249, 167, 219, 106, 240, 119, 219, 109, 225, 171, 2, 252, 167, 216, 
+    243, 235, 137, 252, 154, 87, 241, 238, 242, 140, 87, 243, 239, 224, 145, 
+    249, 111, 226, 201, 85, 218, 236, 71, 244, 82, 2, 203, 230, 229, 85, 218, 
+    106, 214, 160, 251, 225, 221, 195, 85, 221, 195, 232, 114, 251, 225, 221, 
+    195, 71, 221, 195, 71, 114, 250, 138, 79, 217, 2, 232, 160, 50, 217, 54, 
+    246, 96, 254, 200, 245, 127, 223, 160, 244, 93, 223, 160, 242, 22, 213, 
+    174, 242, 22, 211, 198, 242, 22, 232, 114, 44, 225, 201, 225, 201, 214, 
+    160, 44, 225, 201, 71, 228, 235, 85, 228, 235, 250, 138, 79, 114, 250, 
+    138, 79, 230, 89, 211, 178, 114, 230, 89, 211, 178, 252, 164, 211, 178, 
+    114, 252, 164, 211, 178, 226, 130, 26, 249, 138, 114, 26, 249, 138, 204, 
+    250, 183, 249, 138, 114, 204, 250, 183, 249, 138, 7, 249, 138, 220, 93, 
+    71, 7, 249, 138, 226, 130, 7, 249, 138, 231, 192, 249, 138, 218, 159, 64, 
+    248, 157, 244, 19, 217, 16, 253, 224, 244, 19, 252, 165, 253, 224, 114, 
+    244, 19, 252, 165, 253, 224, 244, 19, 249, 251, 253, 224, 85, 244, 19, 
+    225, 12, 218, 158, 71, 244, 19, 225, 12, 218, 158, 219, 13, 218, 113, 
+    226, 130, 71, 218, 158, 37, 71, 218, 158, 204, 250, 183, 85, 218, 158, 
+    85, 250, 183, 71, 218, 158, 226, 130, 85, 218, 158, 114, 226, 130, 85, 
+    218, 158, 225, 63, 218, 158, 220, 93, 71, 218, 158, 114, 253, 224, 204, 
+    250, 183, 253, 224, 245, 201, 218, 246, 253, 224, 245, 201, 225, 12, 85, 
+    218, 158, 245, 201, 225, 12, 225, 63, 218, 158, 219, 127, 225, 12, 85, 
+    218, 158, 245, 201, 225, 12, 223, 117, 85, 218, 158, 114, 245, 201, 225, 
+    12, 223, 117, 85, 218, 158, 215, 77, 225, 12, 85, 218, 158, 219, 122, 
+    225, 12, 253, 224, 217, 16, 253, 224, 204, 250, 183, 217, 16, 253, 224, 
+    114, 217, 16, 253, 224, 219, 127, 225, 160, 85, 22, 71, 244, 62, 85, 244, 
+    62, 71, 244, 62, 245, 201, 225, 160, 226, 130, 85, 244, 62, 37, 204, 250, 
+    183, 245, 201, 225, 12, 218, 158, 114, 217, 16, 225, 63, 253, 224, 219, 
+    64, 216, 106, 215, 219, 219, 64, 114, 250, 122, 219, 64, 219, 15, 114, 
+    219, 15, 252, 165, 253, 224, 245, 201, 217, 16, 224, 174, 253, 224, 114, 
+    245, 201, 217, 16, 224, 174, 253, 224, 249, 139, 79, 220, 93, 71, 250, 
+    43, 152, 92, 249, 139, 79, 232, 114, 44, 246, 94, 71, 218, 236, 214, 160, 
+    44, 246, 94, 71, 218, 236, 232, 114, 44, 220, 93, 71, 218, 236, 214, 160, 
+    44, 220, 93, 71, 218, 236, 85, 224, 16, 164, 226, 151, 71, 224, 16, 164, 
+    226, 151, 71, 245, 39, 164, 226, 151, 85, 248, 1, 230, 187, 71, 211, 178, 
+    114, 245, 39, 164, 87, 193, 67, 130, 231, 87, 67, 130, 114, 67, 130, 114, 
+    219, 157, 215, 94, 249, 228, 224, 1, 164, 226, 151, 114, 219, 157, 249, 
+    228, 224, 1, 164, 226, 151, 114, 52, 215, 94, 249, 228, 224, 1, 164, 226, 
+    151, 114, 52, 249, 228, 224, 1, 164, 226, 151, 114, 121, 219, 157, 249, 
+    228, 224, 1, 164, 226, 151, 114, 121, 52, 249, 228, 224, 1, 164, 226, 
+    151, 249, 99, 218, 142, 226, 19, 5, 226, 151, 114, 245, 39, 164, 226, 
+    151, 114, 241, 235, 245, 39, 164, 226, 151, 114, 85, 241, 234, 222, 189, 
+    114, 85, 241, 235, 251, 121, 244, 63, 241, 234, 222, 189, 244, 63, 241, 
+    235, 251, 121, 231, 87, 43, 226, 8, 226, 151, 231, 87, 44, 226, 8, 226, 
+    151, 231, 87, 244, 71, 43, 226, 8, 226, 151, 231, 87, 244, 71, 44, 226, 
+    8, 226, 151, 231, 87, 233, 48, 254, 118, 251, 166, 226, 151, 231, 87, 
+    222, 250, 254, 118, 251, 166, 226, 151, 114, 233, 48, 254, 118, 224, 1, 
+    164, 226, 151, 114, 222, 250, 254, 118, 224, 1, 164, 226, 151, 114, 233, 
+    48, 254, 118, 251, 166, 226, 151, 114, 222, 250, 254, 118, 251, 166, 226, 
+    151, 193, 43, 216, 7, 220, 55, 251, 166, 226, 151, 193, 44, 216, 7, 220, 
+    55, 251, 166, 226, 151, 231, 87, 43, 249, 107, 251, 166, 226, 151, 231, 
+    87, 44, 249, 107, 251, 166, 226, 151, 247, 212, 152, 37, 21, 111, 247, 
+    212, 152, 37, 21, 105, 247, 212, 152, 37, 21, 158, 247, 212, 152, 37, 21, 
+    161, 247, 212, 152, 37, 21, 190, 247, 212, 152, 37, 21, 195, 247, 212, 
+    152, 37, 21, 199, 247, 212, 152, 37, 21, 196, 247, 212, 152, 37, 21, 201, 
+    247, 212, 152, 37, 54, 216, 248, 247, 212, 37, 35, 21, 111, 247, 212, 37, 
+    35, 21, 105, 247, 212, 37, 35, 21, 158, 247, 212, 37, 35, 21, 161, 247, 
+    212, 37, 35, 21, 190, 247, 212, 37, 35, 21, 195, 247, 212, 37, 35, 21, 
+    199, 247, 212, 37, 35, 21, 196, 247, 212, 37, 35, 21, 201, 247, 212, 37, 
+    35, 54, 216, 248, 247, 212, 152, 37, 35, 21, 111, 247, 212, 152, 37, 35, 
+    21, 105, 247, 212, 152, 37, 35, 21, 158, 247, 212, 152, 37, 35, 21, 161, 
+    247, 212, 152, 37, 35, 21, 190, 247, 212, 152, 37, 35, 21, 195, 247, 212, 
+    152, 37, 35, 21, 199, 247, 212, 152, 37, 35, 21, 196, 247, 212, 152, 37, 
+    35, 21, 201, 247, 212, 152, 37, 35, 54, 216, 248, 114, 211, 246, 97, 75, 
+    114, 96, 50, 114, 230, 187, 50, 114, 247, 177, 50, 114, 219, 30, 245, 
+    228, 75, 114, 97, 75, 114, 228, 61, 245, 228, 75, 246, 106, 225, 14, 97, 
+    75, 114, 222, 186, 97, 75, 215, 225, 97, 75, 114, 215, 225, 97, 75, 248, 
+    163, 215, 225, 97, 75, 114, 248, 163, 215, 225, 97, 75, 85, 97, 75, 216, 
+    145, 216, 13, 97, 254, 1, 216, 145, 251, 181, 97, 254, 1, 85, 97, 254, 1, 
+    114, 85, 249, 99, 246, 112, 22, 97, 75, 114, 85, 249, 99, 214, 153, 22, 
+    97, 75, 218, 233, 85, 97, 75, 114, 249, 214, 85, 97, 75, 222, 249, 71, 
+    97, 75, 233, 47, 71, 97, 75, 252, 191, 220, 93, 71, 97, 75, 243, 249, 
+    220, 93, 71, 97, 75, 114, 232, 114, 222, 248, 71, 97, 75, 114, 214, 160, 
+    222, 248, 71, 97, 75, 228, 54, 232, 114, 222, 248, 71, 97, 75, 249, 107, 
+    232, 129, 228, 54, 214, 160, 222, 248, 71, 97, 75, 37, 114, 71, 97, 75, 
+    211, 252, 97, 75, 251, 228, 219, 30, 245, 228, 75, 251, 228, 97, 75, 251, 
+    228, 228, 61, 245, 228, 75, 114, 251, 228, 219, 30, 245, 228, 75, 114, 
+    251, 228, 97, 75, 114, 251, 228, 228, 61, 245, 228, 75, 217, 18, 97, 75, 
+    114, 217, 17, 97, 75, 212, 18, 97, 75, 114, 212, 18, 97, 75, 226, 176, 
+    97, 75, 52, 249, 107, 232, 129, 134, 247, 222, 254, 117, 71, 215, 227, 
+    249, 195, 4, 71, 215, 226, 225, 174, 204, 218, 64, 204, 218, 22, 43, 222, 
+    92, 252, 181, 248, 68, 44, 222, 92, 252, 181, 248, 68, 177, 2, 59, 235, 
+    222, 223, 53, 219, 49, 224, 204, 218, 64, 218, 23, 224, 204, 219, 48, 67, 
+    252, 149, 2, 203, 91, 11, 222, 231, 248, 6, 200, 247, 176, 11, 244, 183, 
+    248, 6, 92, 232, 152, 254, 126, 92, 232, 152, 226, 162, 71, 248, 1, 2, 
+    250, 181, 247, 128, 22, 2, 247, 128, 245, 178, 64, 226, 174, 214, 152, 
+    232, 114, 44, 249, 169, 2, 247, 128, 214, 160, 43, 249, 169, 2, 247, 128, 
+    43, 226, 132, 235, 72, 44, 226, 132, 235, 72, 243, 236, 226, 132, 235, 
+    72, 233, 91, 120, 217, 88, 233, 91, 124, 217, 88, 43, 22, 44, 52, 215, 
+    93, 43, 22, 44, 217, 88, 43, 230, 92, 200, 44, 217, 88, 200, 43, 217, 88, 
+    120, 217, 89, 2, 250, 44, 48, 232, 111, 247, 181, 251, 86, 203, 222, 135, 
+    71, 249, 213, 248, 0, 71, 249, 213, 248, 1, 2, 140, 216, 115, 71, 249, 
+    213, 248, 1, 2, 97, 216, 115, 71, 42, 2, 140, 216, 115, 71, 42, 2, 97, 
+    216, 115, 11, 43, 71, 42, 127, 11, 44, 71, 42, 127, 11, 43, 254, 118, 
+    127, 11, 44, 254, 118, 127, 11, 43, 52, 254, 118, 127, 11, 44, 52, 254, 
+    118, 127, 11, 43, 71, 216, 7, 220, 55, 127, 11, 44, 71, 216, 7, 220, 55, 
+    127, 11, 43, 244, 71, 226, 7, 11, 44, 244, 71, 226, 7, 214, 153, 224, 27, 
+    75, 246, 112, 224, 27, 75, 254, 96, 243, 105, 250, 44, 75, 250, 10, 243, 
+    105, 250, 44, 75, 44, 80, 2, 37, 225, 25, 200, 140, 75, 200, 97, 75, 200, 
+    43, 44, 75, 200, 140, 52, 75, 200, 97, 52, 75, 200, 43, 44, 52, 75, 200, 
+    140, 80, 243, 251, 130, 200, 97, 80, 243, 251, 130, 200, 140, 52, 80, 
+    243, 251, 130, 200, 97, 52, 80, 243, 251, 130, 200, 97, 218, 232, 75, 46, 
+    47, 251, 223, 46, 47, 247, 125, 46, 47, 246, 253, 46, 47, 247, 124, 46, 
+    47, 246, 189, 46, 47, 247, 60, 46, 47, 246, 252, 46, 47, 247, 123, 46, 
+    47, 246, 157, 46, 47, 247, 28, 46, 47, 246, 220, 46, 47, 247, 91, 46, 47, 
+    246, 188, 46, 47, 247, 59, 46, 47, 246, 251, 46, 47, 247, 122, 46, 47, 
+    246, 141, 46, 47, 247, 12, 46, 47, 246, 204, 46, 47, 247, 75, 46, 47, 
+    246, 172, 46, 47, 247, 43, 46, 47, 246, 235, 46, 47, 247, 106, 46, 47, 
+    246, 156, 46, 47, 247, 27, 46, 47, 246, 219, 46, 47, 247, 90, 46, 47, 
+    246, 187, 46, 47, 247, 58, 46, 47, 246, 250, 46, 47, 247, 121, 46, 47, 
+    246, 133, 46, 47, 247, 4, 46, 47, 246, 196, 46, 47, 247, 67, 46, 47, 246, 
+    164, 46, 47, 247, 35, 46, 47, 246, 227, 46, 47, 247, 98, 46, 47, 246, 
+    148, 46, 47, 247, 19, 46, 47, 246, 211, 46, 47, 247, 82, 46, 47, 246, 
+    179, 46, 47, 247, 50, 46, 47, 246, 242, 46, 47, 247, 113, 46, 47, 246, 
+    140, 46, 47, 247, 11, 46, 47, 246, 203, 46, 47, 247, 74, 46, 47, 246, 
+    171, 46, 47, 247, 42, 46, 47, 246, 234, 46, 47, 247, 105, 46, 47, 246, 
+    155, 46, 47, 247, 26, 46, 47, 246, 218, 46, 47, 247, 89, 46, 47, 246, 
+    186, 46, 47, 247, 57, 46, 47, 246, 249, 46, 47, 247, 120, 46, 47, 246, 
+    129, 46, 47, 247, 0, 46, 47, 246, 192, 46, 47, 247, 63, 46, 47, 246, 160, 
+    46, 47, 247, 31, 46, 47, 246, 223, 46, 47, 247, 94, 46, 47, 246, 144, 46, 
+    47, 247, 15, 46, 47, 246, 207, 46, 47, 247, 78, 46, 47, 246, 175, 46, 47, 
+    247, 46, 46, 47, 246, 238, 46, 47, 247, 109, 46, 47, 246, 136, 46, 47, 
+    247, 7, 46, 47, 246, 199, 46, 47, 247, 70, 46, 47, 246, 167, 46, 47, 247, 
+    38, 46, 47, 246, 230, 46, 47, 247, 101, 46, 47, 246, 151, 46, 47, 247, 
+    22, 46, 47, 246, 214, 46, 47, 247, 85, 46, 47, 246, 182, 46, 47, 247, 53, 
+    46, 47, 246, 245, 46, 47, 247, 116, 46, 47, 246, 132, 46, 47, 247, 3, 46, 
+    47, 246, 195, 46, 47, 247, 66, 46, 47, 246, 163, 46, 47, 247, 34, 46, 47, 
+    246, 226, 46, 47, 247, 97, 46, 47, 246, 147, 46, 47, 247, 18, 46, 47, 
+    246, 210, 46, 47, 247, 81, 46, 47, 246, 178, 46, 47, 247, 49, 46, 47, 
+    246, 241, 46, 47, 247, 112, 46, 47, 246, 139, 46, 47, 247, 10, 46, 47, 
+    246, 202, 46, 47, 247, 73, 46, 47, 246, 170, 46, 47, 247, 41, 46, 47, 
+    246, 233, 46, 47, 247, 104, 46, 47, 246, 154, 46, 47, 247, 25, 46, 47, 
+    246, 217, 46, 47, 247, 88, 46, 47, 246, 185, 46, 47, 247, 56, 46, 47, 
+    246, 248, 46, 47, 247, 119, 46, 47, 246, 127, 46, 47, 246, 254, 46, 47, 
+    246, 190, 46, 47, 247, 61, 46, 47, 246, 158, 46, 47, 247, 29, 46, 47, 
+    246, 221, 46, 47, 247, 92, 46, 47, 246, 142, 46, 47, 247, 13, 46, 47, 
+    246, 205, 46, 47, 247, 76, 46, 47, 246, 173, 46, 47, 247, 44, 46, 47, 
+    246, 236, 46, 47, 247, 107, 46, 47, 246, 134, 46, 47, 247, 5, 46, 47, 
     246, 197, 46, 47, 247, 68, 46, 47, 246, 165, 46, 47, 247, 36, 46, 47, 
     246, 228, 46, 47, 247, 99, 46, 47, 246, 149, 46, 47, 247, 20, 46, 47, 
     246, 212, 46, 47, 247, 83, 46, 47, 246, 180, 46, 47, 247, 51, 46, 47, 
-    246, 243, 46, 47, 247, 114, 46, 47, 246, 126, 46, 47, 246, 253, 46, 47, 
-    246, 189, 46, 47, 247, 60, 46, 47, 246, 157, 46, 47, 247, 28, 46, 47, 
-    246, 220, 46, 47, 247, 91, 46, 47, 246, 141, 46, 47, 247, 12, 46, 47, 
-    246, 204, 46, 47, 247, 75, 46, 47, 246, 172, 46, 47, 247, 43, 46, 47, 
-    246, 235, 46, 47, 247, 106, 46, 47, 246, 133, 46, 47, 247, 4, 46, 47, 
-    246, 196, 46, 47, 247, 67, 46, 47, 246, 164, 46, 47, 247, 35, 46, 47, 
-    246, 227, 46, 47, 247, 98, 46, 47, 246, 148, 46, 47, 247, 19, 46, 47, 
-    246, 211, 46, 47, 247, 82, 46, 47, 246, 179, 46, 47, 247, 50, 46, 47, 
-    246, 242, 46, 47, 247, 113, 46, 47, 246, 122, 46, 47, 246, 249, 46, 47, 
-    246, 185, 46, 47, 247, 56, 46, 47, 246, 153, 46, 47, 247, 24, 46, 47, 
-    246, 216, 46, 47, 247, 87, 46, 47, 246, 137, 46, 47, 247, 8, 46, 47, 246, 
-    200, 46, 47, 247, 71, 46, 47, 246, 168, 46, 47, 247, 39, 46, 47, 246, 
-    231, 46, 47, 247, 102, 46, 47, 246, 129, 46, 47, 247, 0, 46, 47, 246, 
-    192, 46, 47, 247, 63, 46, 47, 246, 160, 46, 47, 247, 31, 46, 47, 246, 
-    223, 46, 47, 247, 94, 46, 47, 246, 144, 46, 47, 247, 15, 46, 47, 246, 
-    207, 46, 47, 247, 78, 46, 47, 246, 175, 46, 47, 247, 46, 46, 47, 246, 
-    238, 46, 47, 247, 109, 46, 47, 246, 125, 46, 47, 246, 252, 46, 47, 246, 
-    188, 46, 47, 247, 59, 46, 47, 246, 156, 46, 47, 247, 27, 46, 47, 246, 
-    219, 46, 47, 247, 90, 46, 47, 246, 140, 46, 47, 247, 11, 46, 47, 246, 
-    203, 46, 47, 247, 74, 46, 47, 246, 171, 46, 47, 247, 42, 46, 47, 246, 
-    234, 46, 47, 247, 105, 46, 47, 246, 132, 46, 47, 247, 3, 46, 47, 246, 
-    195, 46, 47, 247, 66, 46, 47, 246, 163, 46, 47, 247, 34, 46, 47, 246, 
-    226, 46, 47, 247, 97, 46, 47, 246, 147, 46, 47, 247, 18, 46, 47, 246, 
-    210, 46, 47, 247, 81, 46, 47, 246, 178, 46, 47, 247, 49, 46, 47, 246, 
-    241, 46, 47, 247, 112, 46, 47, 246, 120, 46, 47, 246, 247, 46, 47, 246, 
-    183, 46, 47, 247, 54, 46, 47, 246, 151, 46, 47, 247, 22, 46, 47, 246, 
-    214, 46, 47, 247, 85, 46, 47, 246, 135, 46, 47, 247, 6, 46, 47, 246, 198, 
-    46, 47, 247, 69, 46, 47, 246, 166, 46, 47, 247, 37, 46, 47, 246, 229, 46, 
-    47, 247, 100, 46, 47, 246, 127, 46, 47, 246, 254, 46, 47, 246, 190, 46, 
-    47, 247, 61, 46, 47, 246, 158, 46, 47, 247, 29, 46, 47, 246, 221, 46, 47, 
-    247, 92, 46, 47, 246, 142, 46, 47, 247, 13, 46, 47, 246, 205, 46, 47, 
-    247, 76, 46, 47, 246, 173, 46, 47, 247, 44, 46, 47, 246, 236, 46, 47, 
-    247, 107, 46, 47, 246, 123, 46, 47, 246, 250, 46, 47, 246, 186, 46, 47, 
-    247, 57, 46, 47, 246, 154, 46, 47, 247, 25, 46, 47, 246, 217, 46, 47, 
-    247, 88, 46, 47, 246, 138, 46, 47, 247, 9, 46, 47, 246, 201, 46, 47, 247, 
-    72, 46, 47, 246, 169, 46, 47, 247, 40, 46, 47, 246, 232, 46, 47, 247, 
-    103, 46, 47, 246, 130, 46, 47, 247, 1, 46, 47, 246, 193, 46, 47, 247, 64, 
-    46, 47, 246, 161, 46, 47, 247, 32, 46, 47, 246, 224, 46, 47, 247, 95, 46, 
-    47, 246, 145, 46, 47, 247, 16, 46, 47, 246, 208, 46, 47, 247, 79, 46, 47, 
-    246, 176, 46, 47, 247, 47, 46, 47, 246, 239, 46, 47, 247, 110, 46, 47, 
-    246, 121, 46, 47, 246, 248, 46, 47, 246, 184, 46, 47, 247, 55, 46, 47, 
-    246, 152, 46, 47, 247, 23, 46, 47, 246, 215, 46, 47, 247, 86, 46, 47, 
-    246, 136, 46, 47, 247, 7, 46, 47, 246, 199, 46, 47, 247, 70, 46, 47, 246, 
-    167, 46, 47, 247, 38, 46, 47, 246, 230, 46, 47, 247, 101, 46, 47, 246, 
-    128, 46, 47, 246, 255, 46, 47, 246, 191, 46, 47, 247, 62, 46, 47, 246, 
-    159, 46, 47, 247, 30, 46, 47, 246, 222, 46, 47, 247, 93, 46, 47, 246, 
-    143, 46, 47, 247, 14, 46, 47, 246, 206, 46, 47, 247, 77, 46, 47, 246, 
-    174, 46, 47, 247, 45, 46, 47, 246, 237, 46, 47, 247, 108, 46, 47, 246, 
-    124, 46, 47, 246, 251, 46, 47, 246, 187, 46, 47, 247, 58, 46, 47, 246, 
-    155, 46, 47, 247, 26, 46, 47, 246, 218, 46, 47, 247, 89, 46, 47, 246, 
-    139, 46, 47, 247, 10, 46, 47, 246, 202, 46, 47, 247, 73, 46, 47, 246, 
-    170, 46, 47, 247, 41, 46, 47, 246, 233, 46, 47, 247, 104, 46, 47, 246, 
-    131, 46, 47, 247, 2, 46, 47, 246, 194, 46, 47, 247, 65, 46, 47, 246, 162, 
-    46, 47, 247, 33, 46, 47, 246, 225, 46, 47, 247, 96, 46, 47, 246, 146, 46, 
-    47, 247, 17, 46, 47, 246, 209, 46, 47, 247, 80, 46, 47, 246, 177, 46, 47, 
-    247, 48, 46, 47, 246, 240, 46, 47, 247, 111, 97, 215, 58, 80, 2, 67, 91, 
-    97, 215, 58, 80, 2, 52, 67, 91, 140, 52, 80, 2, 67, 91, 97, 52, 80, 2, 
-    67, 91, 43, 44, 52, 80, 2, 67, 91, 97, 215, 58, 80, 243, 244, 130, 140, 
-    52, 80, 243, 244, 130, 97, 52, 80, 243, 244, 130, 246, 105, 80, 2, 203, 
-    91, 214, 153, 80, 2, 203, 91, 214, 153, 215, 212, 74, 246, 105, 215, 212, 
-    74, 140, 52, 248, 158, 74, 97, 52, 248, 158, 74, 140, 215, 212, 248, 158, 
-    74, 97, 215, 212, 248, 158, 74, 97, 215, 58, 215, 212, 248, 158, 74, 97, 
-    80, 2, 246, 119, 218, 140, 214, 153, 80, 216, 43, 130, 246, 105, 80, 216, 
-    43, 130, 97, 80, 2, 217, 79, 2, 67, 91, 97, 80, 2, 217, 79, 2, 52, 67, 
-    91, 97, 215, 58, 80, 2, 217, 78, 97, 215, 58, 80, 2, 217, 79, 2, 67, 91, 
-    97, 215, 58, 80, 2, 217, 79, 2, 52, 67, 91, 140, 253, 252, 97, 253, 252, 
-    140, 52, 253, 252, 97, 52, 253, 252, 140, 80, 216, 43, 85, 247, 249, 97, 
-    80, 216, 43, 85, 247, 249, 140, 80, 243, 244, 252, 142, 216, 43, 85, 247, 
-    249, 97, 80, 243, 244, 252, 142, 216, 43, 85, 247, 249, 228, 57, 212, 9, 
-    22, 219, 29, 245, 221, 74, 228, 57, 245, 221, 22, 219, 29, 212, 9, 74, 
-    228, 57, 212, 9, 80, 2, 103, 228, 57, 245, 221, 80, 2, 103, 219, 29, 245, 
-    221, 80, 2, 103, 219, 29, 212, 9, 80, 2, 103, 228, 57, 212, 9, 80, 22, 
-    228, 57, 245, 221, 74, 228, 57, 245, 221, 80, 22, 219, 29, 245, 221, 74, 
-    219, 29, 245, 221, 80, 22, 219, 29, 212, 9, 74, 219, 29, 212, 9, 80, 22, 
-    228, 57, 212, 9, 74, 222, 229, 248, 0, 249, 126, 244, 176, 247, 255, 244, 
-    176, 248, 0, 249, 126, 222, 229, 247, 255, 219, 29, 245, 221, 80, 249, 
-    126, 228, 57, 245, 221, 74, 228, 57, 245, 221, 80, 249, 126, 219, 29, 
-    245, 221, 74, 244, 176, 248, 0, 249, 126, 228, 57, 245, 221, 74, 222, 
-    229, 248, 0, 249, 126, 219, 29, 245, 221, 74, 228, 57, 245, 221, 80, 249, 
-    126, 228, 57, 212, 9, 74, 228, 57, 212, 9, 80, 249, 126, 228, 57, 245, 
-    221, 74, 212, 36, 80, 225, 8, 247, 196, 222, 252, 80, 225, 8, 97, 216, 
-    189, 249, 91, 214, 152, 80, 225, 8, 97, 216, 189, 249, 91, 246, 104, 80, 
-    225, 8, 246, 105, 216, 189, 249, 91, 233, 38, 80, 225, 8, 246, 105, 216, 
-    189, 249, 91, 222, 242, 222, 245, 254, 27, 250, 3, 74, 233, 41, 254, 27, 
-    254, 89, 74, 216, 15, 254, 27, 254, 89, 74, 251, 176, 254, 27, 254, 89, 
-    74, 216, 15, 254, 27, 250, 3, 80, 2, 230, 182, 216, 15, 254, 27, 254, 89, 
-    80, 2, 225, 23, 232, 109, 44, 220, 153, 250, 3, 74, 232, 109, 43, 220, 
-    153, 254, 89, 74, 254, 89, 250, 1, 250, 37, 74, 250, 3, 250, 1, 250, 37, 
-    74, 97, 80, 77, 219, 252, 140, 74, 140, 80, 77, 219, 252, 97, 74, 219, 
-    252, 97, 80, 77, 140, 74, 97, 80, 2, 96, 51, 140, 80, 2, 96, 51, 97, 80, 
-    216, 140, 211, 178, 43, 44, 80, 216, 140, 4, 250, 36, 214, 153, 215, 58, 
-    80, 243, 244, 4, 250, 36, 43, 252, 140, 120, 44, 252, 140, 124, 241, 255, 
-    43, 252, 140, 124, 44, 252, 140, 120, 241, 255, 120, 252, 140, 44, 124, 
-    252, 140, 43, 241, 255, 120, 252, 140, 43, 124, 252, 140, 44, 241, 255, 
-    43, 252, 140, 120, 44, 252, 140, 120, 241, 255, 120, 252, 140, 44, 124, 
-    252, 140, 44, 241, 255, 43, 252, 140, 124, 44, 252, 140, 124, 241, 255, 
-    120, 252, 140, 43, 124, 252, 140, 43, 241, 255, 140, 242, 0, 2, 252, 140, 
-    120, 216, 43, 130, 97, 242, 0, 2, 252, 140, 120, 216, 43, 130, 214, 153, 
-    242, 0, 2, 252, 140, 44, 216, 43, 130, 246, 105, 242, 0, 2, 252, 140, 44, 
-    216, 43, 130, 140, 242, 0, 2, 252, 140, 124, 216, 43, 130, 97, 242, 0, 2, 
-    252, 140, 124, 216, 43, 130, 214, 153, 242, 0, 2, 252, 140, 43, 216, 43, 
-    130, 246, 105, 242, 0, 2, 252, 140, 43, 216, 43, 130, 140, 242, 0, 2, 
-    252, 140, 120, 243, 244, 130, 97, 242, 0, 2, 252, 140, 120, 243, 244, 
-    130, 214, 153, 242, 0, 2, 252, 140, 44, 243, 244, 130, 246, 105, 242, 0, 
-    2, 252, 140, 44, 243, 244, 130, 140, 242, 0, 2, 252, 140, 124, 243, 244, 
-    130, 97, 242, 0, 2, 252, 140, 124, 243, 244, 130, 214, 153, 242, 0, 2, 
-    252, 140, 43, 243, 244, 130, 246, 105, 242, 0, 2, 252, 140, 43, 243, 244, 
-    130, 140, 242, 0, 2, 252, 140, 120, 77, 140, 242, 0, 2, 252, 140, 246, 
-    107, 214, 153, 242, 0, 2, 252, 140, 43, 252, 31, 214, 153, 242, 0, 2, 
-    252, 140, 222, 252, 97, 242, 0, 2, 252, 140, 120, 77, 97, 242, 0, 2, 252, 
-    140, 246, 107, 246, 105, 242, 0, 2, 252, 140, 43, 252, 31, 246, 105, 242, 
-    0, 2, 252, 140, 222, 252, 140, 242, 0, 2, 252, 140, 120, 77, 97, 242, 0, 
-    2, 252, 140, 214, 163, 140, 242, 0, 2, 252, 140, 124, 77, 97, 242, 0, 2, 
-    252, 140, 246, 107, 97, 242, 0, 2, 252, 140, 120, 77, 140, 242, 0, 2, 
-    252, 140, 214, 163, 97, 242, 0, 2, 252, 140, 124, 77, 140, 242, 0, 2, 
-    252, 140, 246, 107, 140, 242, 0, 2, 252, 140, 120, 77, 199, 248, 157, 
-    140, 242, 0, 2, 252, 140, 124, 252, 44, 199, 248, 157, 97, 242, 0, 2, 
-    252, 140, 120, 77, 199, 248, 157, 97, 242, 0, 2, 252, 140, 124, 252, 44, 
-    199, 248, 157, 214, 153, 242, 0, 2, 252, 140, 43, 252, 31, 246, 105, 242, 
-    0, 2, 252, 140, 222, 252, 246, 105, 242, 0, 2, 252, 140, 43, 252, 31, 
-    214, 153, 242, 0, 2, 252, 140, 222, 252, 44, 52, 80, 2, 222, 184, 241, 
-    236, 245, 99, 5, 77, 97, 74, 216, 90, 226, 169, 77, 97, 74, 140, 80, 77, 
-    216, 90, 226, 168, 97, 80, 77, 216, 90, 226, 168, 97, 80, 77, 254, 149, 
-    128, 111, 233, 16, 77, 140, 74, 140, 80, 216, 140, 233, 15, 242, 131, 77, 
-    97, 74, 218, 65, 77, 97, 74, 140, 80, 216, 140, 218, 64, 218, 23, 77, 
-    140, 74, 43, 244, 92, 217, 78, 44, 244, 92, 217, 78, 120, 244, 92, 217, 
-    78, 124, 244, 92, 217, 78, 215, 212, 67, 252, 142, 248, 61, 210, 160, 
-    188, 218, 243, 210, 160, 188, 215, 49, 249, 227, 43, 71, 249, 100, 127, 
-    44, 71, 249, 100, 127, 43, 71, 226, 4, 44, 71, 226, 4, 210, 160, 188, 43, 
-    236, 16, 127, 210, 160, 188, 44, 236, 16, 127, 210, 160, 188, 43, 251, 
-    243, 127, 210, 160, 188, 44, 251, 243, 127, 43, 42, 251, 159, 2, 214, 
-    183, 44, 42, 251, 159, 2, 214, 183, 43, 42, 251, 159, 2, 216, 116, 236, 
-    1, 216, 15, 249, 161, 44, 42, 251, 159, 2, 216, 116, 236, 1, 251, 176, 
-    249, 161, 43, 42, 251, 159, 2, 216, 116, 236, 1, 251, 176, 249, 161, 44, 
-    42, 251, 159, 2, 216, 116, 236, 1, 216, 15, 249, 161, 43, 254, 111, 251, 
-    159, 2, 247, 121, 44, 254, 111, 251, 159, 2, 247, 121, 43, 254, 27, 233, 
-    16, 127, 44, 254, 27, 242, 131, 127, 52, 43, 254, 27, 242, 131, 127, 52, 
-    44, 254, 27, 233, 16, 127, 43, 85, 216, 7, 220, 54, 127, 44, 85, 216, 7, 
-    220, 54, 127, 246, 119, 244, 136, 67, 210, 35, 232, 214, 231, 89, 254, 
-    111, 226, 171, 233, 47, 44, 254, 111, 214, 12, 2, 218, 235, 231, 89, 44, 
-    254, 111, 2, 247, 121, 254, 111, 2, 222, 93, 235, 216, 255, 4, 254, 110, 
-    219, 0, 254, 111, 226, 171, 233, 47, 219, 0, 254, 111, 226, 171, 214, 
-    163, 215, 94, 254, 110, 223, 50, 254, 110, 254, 111, 2, 214, 183, 223, 
-    50, 254, 111, 2, 214, 183, 226, 249, 254, 111, 226, 171, 214, 163, 226, 
-    249, 254, 111, 226, 171, 246, 107, 231, 89, 254, 111, 2, 204, 254, 6, 
-    245, 141, 236, 1, 80, 225, 8, 120, 22, 222, 252, 231, 89, 254, 111, 2, 
-    204, 254, 6, 245, 141, 236, 1, 80, 225, 8, 120, 22, 233, 47, 231, 89, 
-    254, 111, 2, 204, 254, 6, 245, 141, 236, 1, 80, 225, 8, 124, 22, 222, 
-    252, 231, 89, 254, 111, 2, 204, 254, 6, 245, 141, 236, 1, 80, 225, 8, 
-    124, 22, 233, 47, 231, 89, 254, 111, 2, 204, 254, 6, 245, 141, 236, 1, 
-    80, 225, 8, 44, 22, 214, 163, 231, 89, 254, 111, 2, 204, 254, 6, 245, 
-    141, 236, 1, 80, 225, 8, 43, 22, 214, 163, 231, 89, 254, 111, 2, 204, 
-    254, 6, 245, 141, 236, 1, 80, 225, 8, 44, 22, 246, 107, 231, 89, 254, 
-    111, 2, 204, 254, 6, 245, 141, 236, 1, 80, 225, 8, 43, 22, 246, 107, 223, 
-    50, 245, 153, 220, 128, 245, 153, 220, 129, 2, 226, 124, 245, 153, 220, 
-    129, 2, 4, 250, 37, 48, 245, 153, 220, 129, 2, 44, 80, 48, 245, 153, 220, 
-    129, 2, 43, 80, 48, 250, 37, 2, 203, 130, 37, 67, 130, 37, 226, 8, 37, 
-    223, 51, 219, 47, 37, 225, 172, 250, 37, 247, 174, 251, 79, 203, 252, 
-    142, 22, 216, 15, 163, 247, 174, 251, 79, 67, 130, 250, 37, 2, 218, 25, 
-    211, 178, 37, 254, 88, 247, 170, 50, 120, 80, 216, 140, 250, 36, 37, 71, 
-    251, 114, 37, 251, 114, 37, 233, 15, 37, 242, 130, 250, 37, 2, 4, 250, 
-    37, 216, 43, 216, 197, 222, 252, 250, 37, 2, 113, 203, 218, 92, 216, 43, 
-    216, 197, 222, 252, 92, 222, 229, 248, 0, 219, 96, 92, 244, 176, 248, 0, 
-    219, 96, 92, 253, 217, 92, 4, 250, 36, 92, 218, 235, 113, 235, 66, 218, 
-    233, 215, 227, 2, 59, 48, 215, 227, 2, 214, 183, 222, 93, 236, 1, 215, 
-    226, 215, 227, 2, 220, 135, 253, 208, 251, 175, 44, 215, 227, 77, 43, 
-    215, 226, 43, 215, 227, 252, 31, 67, 130, 67, 252, 142, 252, 31, 44, 215, 
-    226, 251, 166, 2, 43, 163, 251, 222, 251, 166, 2, 44, 163, 251, 222, 85, 
-    251, 165, 30, 2, 43, 163, 251, 222, 30, 2, 44, 163, 251, 222, 71, 240, 
-    237, 85, 240, 237, 43, 211, 244, 244, 136, 44, 211, 244, 244, 136, 43, 
-    52, 211, 244, 244, 136, 44, 52, 211, 244, 244, 136, 235, 249, 235, 235, 
-    216, 113, 117, 235, 235, 235, 236, 229, 103, 2, 67, 130, 246, 113, 230, 
-    88, 42, 2, 249, 182, 226, 128, 235, 247, 253, 238, 219, 220, 224, 181, 
-    245, 99, 5, 22, 219, 98, 226, 8, 245, 99, 5, 22, 219, 98, 226, 9, 2, 216, 
-    90, 48, 240, 105, 216, 43, 22, 219, 98, 226, 8, 242, 184, 218, 156, 216, 
-    186, 246, 106, 215, 227, 2, 43, 163, 251, 222, 246, 106, 215, 227, 2, 44, 
-    163, 251, 222, 85, 247, 250, 2, 124, 74, 85, 232, 105, 71, 250, 37, 2, 
-    124, 74, 85, 250, 37, 2, 124, 74, 245, 86, 71, 218, 235, 245, 86, 85, 
-    218, 235, 245, 86, 71, 247, 249, 245, 86, 85, 247, 249, 245, 86, 71, 250, 
-    36, 245, 86, 85, 250, 36, 222, 133, 223, 51, 219, 48, 226, 168, 219, 48, 
-    2, 226, 124, 223, 51, 219, 48, 2, 203, 91, 251, 250, 219, 47, 251, 250, 
-    223, 51, 219, 47, 52, 225, 23, 215, 212, 225, 23, 233, 43, 249, 92, 254, 
-    111, 127, 222, 248, 249, 92, 254, 111, 127, 216, 79, 230, 180, 230, 25, 
-    37, 59, 226, 168, 230, 25, 37, 96, 226, 168, 230, 25, 37, 30, 226, 168, 
-    230, 25, 214, 176, 226, 169, 2, 247, 121, 230, 25, 214, 176, 226, 169, 2, 
-    225, 23, 230, 25, 42, 235, 200, 226, 168, 230, 25, 42, 214, 176, 226, 
-    168, 113, 232, 147, 22, 226, 168, 113, 232, 147, 177, 226, 168, 230, 25, 
-    30, 226, 168, 230, 155, 113, 218, 44, 218, 42, 2, 235, 212, 224, 25, 235, 
-    213, 226, 168, 244, 100, 226, 0, 235, 212, 235, 213, 2, 52, 91, 235, 213, 
-    253, 174, 2, 219, 96, 250, 33, 243, 227, 254, 89, 235, 210, 232, 215, 
-    235, 211, 2, 223, 116, 225, 238, 254, 3, 225, 2, 232, 215, 235, 211, 2, 
-    220, 153, 225, 238, 254, 3, 225, 2, 232, 215, 235, 211, 228, 53, 235, 
-    251, 216, 197, 225, 2, 235, 213, 254, 3, 115, 225, 12, 226, 168, 224, 19, 
-    235, 213, 226, 168, 235, 213, 2, 140, 80, 2, 103, 235, 213, 2, 30, 50, 
-    235, 213, 2, 235, 199, 235, 213, 2, 214, 175, 235, 213, 2, 226, 124, 235, 
-    213, 2, 214, 183, 235, 67, 233, 86, 43, 215, 227, 226, 168, 210, 160, 
-    188, 221, 202, 249, 210, 210, 160, 188, 221, 202, 225, 57, 210, 160, 188, 
-    221, 202, 224, 177, 96, 5, 2, 4, 250, 37, 48, 96, 5, 2, 250, 32, 255, 16, 
-    48, 96, 5, 2, 216, 90, 48, 96, 5, 2, 59, 51, 96, 5, 2, 216, 90, 51, 96, 
-    5, 2, 218, 66, 105, 96, 5, 2, 85, 215, 226, 230, 183, 5, 2, 249, 221, 48, 
-    230, 183, 5, 2, 59, 51, 230, 183, 5, 2, 244, 176, 247, 119, 230, 183, 5, 
-    2, 222, 229, 247, 119, 96, 5, 236, 1, 43, 163, 250, 36, 96, 5, 236, 1, 
-    44, 163, 250, 36, 213, 254, 177, 249, 132, 224, 181, 230, 85, 5, 2, 59, 
-    48, 230, 85, 5, 2, 214, 183, 220, 150, 224, 182, 2, 251, 176, 250, 0, 
-    219, 78, 224, 181, 230, 85, 5, 236, 1, 43, 163, 250, 36, 230, 85, 5, 236, 
-    1, 44, 163, 250, 36, 37, 230, 85, 5, 2, 250, 32, 255, 15, 230, 85, 5, 
-    236, 1, 52, 250, 36, 37, 247, 170, 50, 96, 5, 236, 1, 215, 226, 230, 183, 
-    5, 236, 1, 215, 226, 230, 85, 5, 236, 1, 215, 226, 235, 207, 224, 181, 
-    222, 243, 235, 207, 224, 181, 210, 160, 188, 223, 91, 249, 210, 254, 135, 
-    177, 249, 166, 235, 200, 2, 247, 121, 214, 176, 2, 230, 183, 50, 214, 
-    176, 2, 226, 124, 235, 200, 2, 226, 124, 235, 200, 2, 232, 147, 254, 119, 
-    214, 176, 2, 232, 147, 226, 159, 214, 176, 77, 235, 199, 235, 200, 77, 
-    214, 175, 214, 176, 77, 252, 142, 77, 235, 199, 235, 200, 77, 252, 142, 
-    77, 214, 175, 214, 176, 252, 31, 22, 235, 66, 2, 214, 175, 235, 200, 252, 
-    31, 22, 235, 66, 2, 235, 199, 250, 1, 214, 176, 2, 220, 134, 250, 1, 235, 
-    200, 2, 220, 134, 52, 42, 235, 199, 52, 42, 214, 175, 250, 1, 214, 176, 
-    2, 220, 135, 22, 219, 78, 224, 181, 232, 147, 22, 2, 59, 48, 232, 147, 
-    177, 2, 59, 48, 52, 232, 147, 254, 119, 52, 232, 147, 226, 159, 113, 235, 
-    201, 232, 147, 254, 119, 113, 235, 201, 232, 147, 226, 159, 219, 86, 233, 
-    86, 226, 159, 219, 86, 233, 86, 254, 119, 232, 147, 177, 226, 122, 232, 
-    147, 254, 119, 232, 147, 22, 2, 230, 225, 218, 140, 232, 147, 177, 2, 
-    230, 225, 218, 140, 232, 147, 22, 2, 203, 248, 157, 232, 147, 177, 2, 
-    203, 248, 157, 232, 147, 22, 2, 52, 226, 124, 232, 147, 22, 2, 214, 183, 
-    232, 147, 22, 2, 52, 214, 183, 4, 213, 251, 2, 214, 183, 232, 147, 177, 
-    2, 52, 226, 124, 232, 147, 177, 2, 52, 214, 183, 210, 160, 188, 247, 130, 
-    254, 80, 210, 160, 188, 223, 149, 254, 80, 245, 99, 5, 2, 59, 51, 240, 
-    105, 2, 59, 48, 215, 212, 203, 252, 142, 2, 52, 67, 91, 215, 212, 203, 
-    252, 142, 2, 215, 212, 67, 91, 216, 90, 226, 169, 2, 59, 48, 216, 90, 
-    226, 169, 2, 222, 229, 247, 119, 219, 163, 230, 183, 219, 162, 249, 200, 
-    2, 59, 48, 245, 99, 2, 253, 217, 254, 149, 128, 216, 43, 2, 250, 32, 255, 
-    15, 254, 49, 128, 177, 128, 111, 245, 99, 5, 77, 96, 50, 96, 5, 77, 245, 
-    99, 50, 245, 99, 5, 77, 216, 90, 226, 168, 52, 249, 228, 245, 100, 113, 
-    249, 195, 245, 99, 219, 177, 134, 249, 195, 245, 99, 219, 177, 245, 99, 
-    5, 2, 113, 170, 77, 22, 113, 170, 51, 245, 95, 2, 244, 12, 170, 48, 233, 
-    16, 2, 250, 37, 235, 216, 242, 131, 2, 250, 37, 235, 216, 233, 16, 2, 
-    224, 14, 164, 48, 242, 131, 2, 224, 14, 164, 48, 233, 16, 177, 219, 98, 
-    128, 111, 242, 131, 177, 219, 98, 128, 111, 233, 16, 177, 219, 98, 128, 
-    216, 43, 2, 59, 235, 216, 242, 131, 177, 219, 98, 128, 216, 43, 2, 59, 
-    235, 216, 233, 16, 177, 219, 98, 128, 216, 43, 2, 59, 48, 242, 131, 177, 
-    219, 98, 128, 216, 43, 2, 59, 48, 233, 16, 177, 219, 98, 128, 216, 43, 2, 
-    59, 77, 222, 252, 242, 131, 177, 219, 98, 128, 216, 43, 2, 59, 77, 233, 
-    47, 233, 16, 177, 254, 50, 242, 131, 177, 254, 50, 233, 16, 22, 219, 154, 
-    228, 53, 128, 111, 242, 131, 22, 219, 154, 228, 53, 128, 111, 233, 16, 
-    22, 228, 53, 254, 50, 242, 131, 22, 228, 53, 254, 50, 233, 16, 77, 246, 
-    112, 128, 77, 242, 130, 242, 131, 77, 246, 112, 128, 77, 233, 15, 233, 
-    16, 77, 219, 163, 177, 245, 100, 242, 131, 77, 219, 163, 177, 245, 100, 
-    233, 16, 77, 219, 163, 77, 242, 130, 242, 131, 77, 219, 163, 77, 233, 15, 
-    233, 16, 77, 242, 131, 77, 246, 112, 245, 100, 242, 131, 77, 233, 16, 77, 
-    246, 112, 245, 100, 233, 16, 77, 219, 98, 128, 77, 242, 131, 77, 219, 98, 
-    245, 100, 242, 131, 77, 219, 98, 128, 77, 233, 16, 77, 219, 98, 245, 100, 
-    219, 98, 128, 216, 43, 177, 233, 15, 219, 98, 128, 216, 43, 177, 242, 
-    130, 219, 98, 128, 216, 43, 177, 233, 16, 2, 59, 235, 216, 219, 98, 128, 
-    216, 43, 177, 242, 131, 2, 59, 235, 216, 246, 112, 128, 216, 43, 177, 
-    233, 15, 246, 112, 128, 216, 43, 177, 242, 130, 246, 112, 219, 98, 128, 
-    216, 43, 177, 233, 15, 246, 112, 219, 98, 128, 216, 43, 177, 242, 130, 
-    219, 163, 177, 233, 15, 219, 163, 177, 242, 130, 219, 163, 77, 233, 16, 
-    77, 245, 99, 50, 219, 163, 77, 242, 131, 77, 245, 99, 50, 52, 229, 92, 
-    233, 15, 52, 229, 92, 242, 130, 52, 229, 92, 233, 16, 2, 214, 183, 242, 
-    131, 226, 122, 233, 15, 242, 131, 252, 31, 233, 15, 233, 16, 250, 1, 251, 
-    79, 249, 93, 242, 131, 250, 1, 251, 79, 249, 93, 233, 16, 250, 1, 251, 
-    79, 249, 94, 77, 219, 98, 245, 100, 242, 131, 250, 1, 251, 79, 249, 94, 
-    77, 219, 98, 245, 100, 219, 79, 216, 201, 233, 84, 216, 201, 219, 79, 
-    216, 202, 177, 128, 111, 233, 84, 216, 202, 177, 128, 111, 245, 99, 5, 2, 
-    251, 109, 48, 224, 204, 77, 219, 154, 245, 99, 50, 218, 57, 77, 219, 154, 
-    245, 99, 50, 224, 204, 77, 219, 154, 228, 53, 128, 111, 218, 57, 77, 219, 
-    154, 228, 53, 128, 111, 224, 204, 77, 245, 99, 50, 218, 57, 77, 245, 99, 
-    50, 224, 204, 77, 228, 53, 128, 111, 218, 57, 77, 228, 53, 128, 111, 224, 
-    204, 77, 254, 149, 128, 111, 218, 57, 77, 254, 149, 128, 111, 224, 204, 
-    77, 228, 53, 254, 149, 128, 111, 218, 57, 77, 228, 53, 254, 149, 128, 
-    111, 52, 224, 203, 52, 218, 56, 218, 65, 2, 247, 121, 218, 23, 2, 247, 
-    121, 218, 65, 2, 96, 5, 51, 218, 23, 2, 96, 5, 51, 218, 65, 2, 230, 85, 
-    5, 51, 218, 23, 2, 230, 85, 5, 51, 218, 65, 64, 177, 128, 216, 43, 2, 59, 
-    48, 218, 23, 64, 177, 128, 216, 43, 2, 59, 48, 218, 65, 64, 77, 245, 99, 
-    50, 218, 23, 64, 77, 245, 99, 50, 218, 65, 64, 77, 216, 90, 226, 168, 
-    218, 23, 64, 77, 216, 90, 226, 168, 218, 65, 64, 77, 254, 149, 128, 111, 
-    218, 23, 64, 77, 254, 149, 128, 111, 218, 65, 64, 77, 228, 53, 128, 111, 
-    218, 23, 64, 77, 228, 53, 128, 111, 42, 43, 204, 93, 226, 168, 42, 44, 
-    204, 93, 226, 168, 250, 1, 218, 64, 250, 1, 218, 22, 250, 1, 218, 65, 
-    177, 128, 111, 250, 1, 218, 23, 177, 128, 111, 218, 65, 77, 218, 22, 218, 
-    23, 77, 218, 64, 218, 65, 77, 218, 64, 218, 23, 77, 218, 22, 218, 23, 
-    252, 31, 218, 64, 218, 23, 252, 31, 22, 235, 66, 251, 79, 248, 158, 2, 
-    218, 64, 245, 171, 64, 226, 171, 246, 104, 225, 49, 2, 217, 13, 216, 14, 
-    215, 241, 235, 199, 244, 22, 228, 66, 219, 252, 43, 217, 88, 219, 252, 
-    124, 217, 88, 219, 252, 120, 217, 88, 225, 173, 2, 222, 92, 67, 252, 142, 
-    215, 212, 44, 215, 93, 52, 67, 252, 142, 43, 215, 93, 67, 252, 142, 52, 
-    43, 215, 93, 52, 67, 252, 142, 52, 43, 215, 93, 199, 248, 158, 243, 244, 
-    43, 231, 64, 64, 52, 213, 239, 219, 252, 124, 217, 89, 2, 226, 124, 219, 
-    252, 120, 217, 89, 2, 214, 183, 219, 252, 120, 217, 89, 77, 219, 252, 
-    124, 217, 88, 52, 124, 217, 88, 52, 120, 217, 88, 52, 218, 104, 228, 53, 
-    50, 223, 50, 52, 218, 104, 228, 53, 50, 247, 139, 228, 53, 247, 176, 2, 
-    223, 50, 229, 102, 219, 96, 67, 232, 215, 2, 250, 37, 48, 67, 232, 215, 
-    2, 250, 37, 51, 124, 217, 89, 2, 250, 37, 51, 226, 9, 2, 203, 91, 226, 9, 
-    2, 216, 90, 226, 168, 215, 212, 67, 252, 142, 251, 245, 223, 92, 215, 
-    212, 67, 252, 142, 2, 203, 91, 215, 212, 249, 228, 226, 168, 215, 212, 
-    229, 92, 233, 15, 215, 212, 229, 92, 242, 130, 246, 112, 219, 98, 233, 
-    16, 177, 128, 111, 246, 112, 219, 98, 242, 131, 177, 128, 111, 215, 212, 
-    219, 48, 251, 245, 223, 92, 233, 86, 215, 212, 67, 252, 142, 226, 168, 
-    52, 219, 48, 226, 168, 71, 67, 130, 230, 25, 71, 67, 130, 228, 57, 245, 
-    221, 71, 74, 228, 57, 212, 9, 71, 74, 219, 29, 245, 221, 71, 74, 219, 29, 
-    212, 9, 71, 74, 43, 44, 71, 74, 140, 85, 74, 214, 153, 85, 74, 246, 105, 
-    85, 74, 228, 57, 245, 221, 85, 74, 228, 57, 212, 9, 85, 74, 219, 29, 245, 
-    221, 85, 74, 219, 29, 212, 9, 85, 74, 43, 44, 85, 74, 120, 124, 85, 74, 
-    97, 80, 2, 216, 78, 246, 104, 97, 80, 2, 216, 78, 214, 152, 140, 80, 2, 
-    216, 78, 246, 104, 140, 80, 2, 216, 78, 214, 152, 42, 2, 216, 15, 163, 
-    251, 222, 42, 2, 251, 176, 163, 251, 222, 42, 2, 214, 160, 44, 248, 0, 
-    163, 251, 222, 42, 2, 232, 109, 43, 248, 0, 163, 251, 222, 247, 250, 2, 
-    43, 163, 251, 222, 247, 250, 2, 44, 163, 251, 222, 247, 250, 2, 216, 15, 
-    163, 251, 222, 247, 250, 2, 251, 176, 163, 251, 222, 246, 119, 218, 235, 
-    85, 233, 86, 218, 235, 71, 233, 86, 218, 235, 85, 213, 187, 4, 218, 235, 
-    71, 213, 187, 4, 218, 235, 85, 225, 191, 71, 225, 191, 71, 241, 194, 85, 
-    241, 194, 203, 85, 241, 194, 85, 233, 86, 250, 36, 85, 231, 83, 247, 249, 
-    71, 231, 83, 247, 249, 85, 231, 83, 232, 105, 71, 231, 83, 232, 105, 85, 
-    4, 247, 249, 85, 4, 232, 105, 71, 4, 232, 105, 85, 203, 245, 165, 71, 
-    203, 245, 165, 85, 67, 245, 165, 71, 67, 245, 165, 43, 80, 2, 4, 250, 36, 
-    134, 140, 253, 248, 43, 80, 2, 37, 225, 23, 199, 140, 218, 231, 74, 140, 
-    215, 58, 80, 2, 67, 91, 140, 215, 58, 80, 2, 52, 67, 91, 140, 215, 58, 
-    80, 243, 244, 130, 140, 215, 58, 215, 212, 248, 158, 74, 140, 80, 2, 246, 
-    119, 218, 140, 140, 80, 2, 217, 79, 2, 67, 91, 140, 80, 2, 217, 79, 2, 
-    52, 67, 91, 140, 215, 58, 80, 2, 217, 78, 140, 215, 58, 80, 2, 217, 79, 
-    2, 67, 91, 140, 215, 58, 80, 2, 217, 79, 2, 52, 67, 91, 140, 80, 216, 
-    140, 211, 178, 212, 36, 80, 225, 8, 247, 196, 233, 47, 245, 99, 5, 77, 
-    140, 74, 223, 51, 216, 90, 226, 169, 77, 140, 74, 140, 80, 77, 223, 51, 
-    254, 149, 128, 111, 97, 80, 216, 140, 242, 130, 97, 80, 216, 140, 218, 
-    22, 140, 224, 25, 74, 97, 224, 25, 74, 223, 51, 216, 90, 226, 169, 77, 
-    97, 74, 97, 80, 77, 223, 51, 254, 149, 128, 111, 216, 90, 226, 169, 77, 
-    140, 74, 140, 80, 77, 254, 149, 128, 111, 140, 80, 77, 223, 51, 216, 90, 
-    226, 168, 97, 80, 77, 223, 51, 216, 90, 226, 168, 71, 231, 83, 218, 157, 
-    85, 4, 218, 157, 71, 4, 218, 157, 85, 222, 248, 225, 191, 71, 222, 248, 
-    225, 191, 114, 233, 86, 250, 36, 114, 226, 125, 2, 226, 125, 235, 216, 
-    114, 250, 37, 2, 250, 37, 235, 216, 114, 250, 36, 114, 37, 221, 255, 145, 
-    6, 1, 253, 160, 145, 6, 1, 251, 118, 145, 6, 1, 213, 253, 145, 6, 1, 242, 
-    186, 145, 6, 1, 247, 141, 145, 6, 1, 211, 21, 145, 6, 1, 210, 68, 145, 6, 
-    1, 246, 35, 145, 6, 1, 210, 91, 145, 6, 1, 235, 149, 145, 6, 1, 65, 235, 
-    149, 145, 6, 1, 73, 145, 6, 1, 247, 161, 145, 6, 1, 234, 241, 145, 6, 1, 
-    232, 187, 145, 6, 1, 230, 30, 145, 6, 1, 229, 192, 145, 6, 1, 226, 186, 
-    145, 6, 1, 225, 5, 145, 6, 1, 222, 228, 145, 6, 1, 219, 84, 145, 6, 1, 
-    215, 81, 145, 6, 1, 214, 201, 145, 6, 1, 243, 247, 145, 6, 1, 241, 200, 
-    145, 6, 1, 226, 136, 145, 6, 1, 225, 222, 145, 6, 1, 219, 229, 145, 6, 1, 
-    215, 168, 145, 6, 1, 250, 76, 145, 6, 1, 220, 103, 145, 6, 1, 211, 27, 
-    145, 6, 1, 211, 29, 145, 6, 1, 211, 57, 145, 6, 1, 218, 254, 162, 145, 6, 
-    1, 210, 212, 145, 6, 1, 4, 210, 183, 145, 6, 1, 4, 210, 184, 2, 217, 78, 
-    145, 6, 1, 210, 244, 145, 6, 1, 235, 185, 4, 210, 183, 145, 6, 1, 251, 
-    250, 210, 183, 145, 6, 1, 235, 185, 251, 250, 210, 183, 145, 6, 1, 244, 
-    83, 145, 6, 1, 235, 147, 145, 6, 1, 219, 228, 145, 6, 1, 215, 203, 61, 
-    145, 6, 1, 233, 76, 230, 30, 145, 4, 1, 253, 160, 145, 4, 1, 251, 118, 
-    145, 4, 1, 213, 253, 145, 4, 1, 242, 186, 145, 4, 1, 247, 141, 145, 4, 1, 
-    211, 21, 145, 4, 1, 210, 68, 145, 4, 1, 246, 35, 145, 4, 1, 210, 91, 145, 
-    4, 1, 235, 149, 145, 4, 1, 65, 235, 149, 145, 4, 1, 73, 145, 4, 1, 247, 
-    161, 145, 4, 1, 234, 241, 145, 4, 1, 232, 187, 145, 4, 1, 230, 30, 145, 
-    4, 1, 229, 192, 145, 4, 1, 226, 186, 145, 4, 1, 225, 5, 145, 4, 1, 222, 
-    228, 145, 4, 1, 219, 84, 145, 4, 1, 215, 81, 145, 4, 1, 214, 201, 145, 4, 
-    1, 243, 247, 145, 4, 1, 241, 200, 145, 4, 1, 226, 136, 145, 4, 1, 225, 
-    222, 145, 4, 1, 219, 229, 145, 4, 1, 215, 168, 145, 4, 1, 250, 76, 145, 
-    4, 1, 220, 103, 145, 4, 1, 211, 27, 145, 4, 1, 211, 29, 145, 4, 1, 211, 
-    57, 145, 4, 1, 218, 254, 162, 145, 4, 1, 210, 212, 145, 4, 1, 4, 210, 
-    183, 145, 4, 1, 4, 210, 184, 2, 217, 78, 145, 4, 1, 210, 244, 145, 4, 1, 
-    235, 185, 4, 210, 183, 145, 4, 1, 251, 250, 210, 183, 145, 4, 1, 235, 
-    185, 251, 250, 210, 183, 145, 4, 1, 244, 83, 145, 4, 1, 235, 147, 145, 4, 
-    1, 219, 228, 145, 4, 1, 215, 203, 61, 145, 4, 1, 233, 76, 230, 30, 7, 6, 
-    1, 233, 150, 2, 52, 130, 7, 4, 1, 233, 150, 2, 52, 130, 7, 6, 1, 233, 
-    150, 2, 230, 225, 183, 7, 6, 1, 226, 107, 2, 91, 7, 6, 1, 223, 225, 2, 
-    217, 78, 7, 4, 1, 115, 2, 91, 7, 4, 1, 217, 154, 2, 248, 0, 91, 7, 6, 1, 
-    242, 62, 2, 248, 40, 7, 4, 1, 242, 62, 2, 248, 40, 7, 6, 1, 235, 25, 2, 
-    248, 40, 7, 4, 1, 235, 25, 2, 248, 40, 7, 6, 1, 210, 160, 2, 248, 40, 7, 
-    4, 1, 210, 160, 2, 248, 40, 7, 6, 1, 254, 144, 7, 6, 1, 232, 51, 2, 103, 
-    7, 6, 1, 215, 94, 61, 7, 6, 1, 215, 94, 254, 144, 7, 4, 1, 214, 106, 2, 
-    44, 103, 7, 6, 1, 212, 99, 2, 103, 7, 4, 1, 212, 99, 2, 103, 7, 4, 1, 
-    214, 106, 2, 249, 101, 7, 6, 1, 163, 242, 61, 7, 4, 1, 163, 242, 61, 7, 
-    4, 1, 217, 76, 225, 134, 7, 4, 1, 160, 2, 228, 51, 7, 4, 1, 215, 94, 223, 
-    225, 2, 217, 78, 7, 4, 1, 144, 2, 121, 222, 235, 235, 216, 7, 1, 4, 6, 
-    215, 94, 75, 7, 218, 66, 4, 1, 235, 145, 58, 1, 6, 214, 105, 7, 6, 1, 
-    222, 93, 2, 217, 251, 217, 78, 7, 6, 1, 210, 160, 2, 217, 251, 217, 78, 
-    81, 6, 1, 254, 165, 81, 4, 1, 254, 165, 81, 6, 1, 213, 173, 81, 4, 1, 
-    213, 173, 81, 6, 1, 243, 108, 81, 4, 1, 243, 108, 81, 6, 1, 248, 192, 81, 
-    4, 1, 248, 192, 81, 6, 1, 245, 195, 81, 4, 1, 245, 195, 81, 6, 1, 219, 
-    34, 81, 4, 1, 219, 34, 81, 6, 1, 210, 101, 81, 4, 1, 210, 101, 81, 6, 1, 
-    241, 249, 81, 4, 1, 241, 249, 81, 6, 1, 216, 178, 81, 4, 1, 216, 178, 81, 
-    6, 1, 240, 117, 81, 4, 1, 240, 117, 81, 6, 1, 234, 228, 81, 4, 1, 234, 
-    228, 81, 6, 1, 233, 73, 81, 4, 1, 233, 73, 81, 6, 1, 230, 231, 81, 4, 1, 
-    230, 231, 81, 6, 1, 228, 234, 81, 4, 1, 228, 234, 81, 6, 1, 233, 234, 81, 
-    4, 1, 233, 234, 81, 6, 1, 76, 81, 4, 1, 76, 81, 6, 1, 225, 109, 81, 4, 1, 
-    225, 109, 81, 6, 1, 222, 212, 81, 4, 1, 222, 212, 81, 6, 1, 219, 166, 81, 
-    4, 1, 219, 166, 81, 6, 1, 217, 42, 81, 4, 1, 217, 42, 81, 6, 1, 214, 229, 
-    81, 4, 1, 214, 229, 81, 6, 1, 244, 122, 81, 4, 1, 244, 122, 81, 6, 1, 
-    234, 113, 81, 4, 1, 234, 113, 81, 6, 1, 224, 162, 81, 4, 1, 224, 162, 81, 
-    6, 1, 226, 179, 81, 4, 1, 226, 179, 81, 6, 1, 247, 254, 254, 171, 81, 4, 
-    1, 247, 254, 254, 171, 81, 6, 1, 55, 81, 254, 197, 81, 4, 1, 55, 81, 254, 
-    197, 81, 6, 1, 249, 116, 245, 195, 81, 4, 1, 249, 116, 245, 195, 81, 6, 
-    1, 247, 254, 234, 228, 81, 4, 1, 247, 254, 234, 228, 81, 6, 1, 247, 254, 
-    228, 234, 81, 4, 1, 247, 254, 228, 234, 81, 6, 1, 249, 116, 228, 234, 81, 
-    4, 1, 249, 116, 228, 234, 81, 6, 1, 55, 81, 226, 179, 81, 4, 1, 55, 81, 
-    226, 179, 81, 6, 1, 221, 247, 81, 4, 1, 221, 247, 81, 6, 1, 249, 129, 
-    220, 56, 81, 4, 1, 249, 129, 220, 56, 81, 6, 1, 55, 81, 220, 56, 81, 4, 
-    1, 55, 81, 220, 56, 81, 6, 1, 55, 81, 245, 76, 81, 4, 1, 55, 81, 245, 76, 
-    81, 6, 1, 254, 183, 234, 118, 81, 4, 1, 254, 183, 234, 118, 81, 6, 1, 
-    247, 254, 241, 46, 81, 4, 1, 247, 254, 241, 46, 81, 6, 1, 55, 81, 241, 
-    46, 81, 4, 1, 55, 81, 241, 46, 81, 6, 1, 55, 81, 162, 81, 4, 1, 55, 81, 
-    162, 81, 6, 1, 233, 149, 162, 81, 4, 1, 233, 149, 162, 81, 6, 1, 55, 81, 
-    241, 218, 81, 4, 1, 55, 81, 241, 218, 81, 6, 1, 55, 81, 241, 252, 81, 4, 
-    1, 55, 81, 241, 252, 81, 6, 1, 55, 81, 243, 103, 81, 4, 1, 55, 81, 243, 
-    103, 81, 6, 1, 55, 81, 247, 164, 81, 4, 1, 55, 81, 247, 164, 81, 6, 1, 
-    55, 81, 220, 23, 81, 4, 1, 55, 81, 220, 23, 81, 6, 1, 55, 227, 209, 220, 
-    23, 81, 4, 1, 55, 227, 209, 220, 23, 81, 6, 1, 55, 227, 209, 229, 28, 81, 
-    4, 1, 55, 227, 209, 229, 28, 81, 6, 1, 55, 227, 209, 227, 149, 81, 4, 1, 
-    55, 227, 209, 227, 149, 81, 6, 1, 55, 227, 209, 212, 37, 81, 4, 1, 55, 
-    227, 209, 212, 37, 81, 16, 234, 247, 81, 16, 230, 232, 222, 212, 81, 16, 
-    225, 110, 222, 212, 81, 16, 218, 148, 81, 16, 217, 43, 222, 212, 81, 16, 
-    234, 114, 222, 212, 81, 16, 220, 24, 219, 166, 81, 6, 1, 249, 116, 220, 
-    56, 81, 4, 1, 249, 116, 220, 56, 81, 6, 1, 249, 116, 243, 103, 81, 4, 1, 
-    249, 116, 243, 103, 81, 38, 228, 235, 48, 81, 38, 218, 248, 253, 225, 81, 
-    38, 218, 248, 233, 22, 81, 6, 1, 251, 200, 234, 118, 81, 4, 1, 251, 200, 
-    234, 118, 81, 55, 227, 209, 243, 230, 218, 130, 81, 55, 227, 209, 247, 
-    198, 224, 14, 78, 81, 55, 227, 209, 235, 238, 224, 14, 78, 81, 55, 227, 
-    209, 213, 241, 247, 173, 81, 244, 3, 123, 242, 28, 81, 243, 230, 218, 
-    130, 81, 230, 125, 247, 173, 98, 4, 1, 254, 124, 98, 4, 1, 252, 153, 98, 
-    4, 1, 243, 107, 98, 4, 1, 247, 129, 98, 4, 1, 245, 151, 98, 4, 1, 213, 
-    160, 98, 4, 1, 210, 89, 98, 4, 1, 217, 61, 98, 4, 1, 236, 0, 98, 4, 1, 
-    234, 235, 98, 4, 1, 233, 82, 98, 4, 1, 231, 186, 98, 4, 1, 229, 196, 98, 
-    4, 1, 226, 197, 98, 4, 1, 226, 18, 98, 4, 1, 210, 78, 98, 4, 1, 223, 172, 
-    98, 4, 1, 221, 244, 98, 4, 1, 217, 51, 98, 4, 1, 214, 190, 98, 4, 1, 225, 
-    141, 98, 4, 1, 234, 122, 98, 4, 1, 242, 242, 98, 4, 1, 224, 74, 98, 4, 1, 
-    220, 21, 98, 4, 1, 250, 98, 98, 4, 1, 251, 8, 98, 4, 1, 235, 101, 98, 4, 
-    1, 250, 41, 98, 4, 1, 250, 144, 98, 4, 1, 211, 163, 98, 4, 1, 235, 112, 
-    98, 4, 1, 242, 44, 98, 4, 1, 241, 239, 98, 4, 1, 241, 176, 98, 4, 1, 212, 
-    22, 98, 4, 1, 242, 5, 98, 4, 1, 241, 66, 98, 4, 1, 210, 246, 98, 4, 1, 
-    254, 233, 216, 109, 1, 191, 216, 109, 1, 211, 99, 216, 109, 1, 211, 98, 
-    216, 109, 1, 211, 88, 216, 109, 1, 211, 86, 216, 109, 1, 252, 33, 255, 
-    17, 211, 81, 216, 109, 1, 211, 81, 216, 109, 1, 211, 96, 216, 109, 1, 
-    211, 93, 216, 109, 1, 211, 95, 216, 109, 1, 211, 94, 216, 109, 1, 211, 
-    12, 216, 109, 1, 211, 90, 216, 109, 1, 211, 79, 216, 109, 1, 215, 116, 
-    211, 79, 216, 109, 1, 211, 76, 216, 109, 1, 211, 84, 216, 109, 1, 252, 
-    33, 255, 17, 211, 84, 216, 109, 1, 215, 116, 211, 84, 216, 109, 1, 211, 
-    83, 216, 109, 1, 211, 103, 216, 109, 1, 211, 77, 216, 109, 1, 215, 116, 
-    211, 77, 216, 109, 1, 211, 66, 216, 109, 1, 215, 116, 211, 66, 216, 109, 
-    1, 211, 8, 216, 109, 1, 211, 49, 216, 109, 1, 254, 208, 211, 49, 216, 
-    109, 1, 215, 116, 211, 49, 216, 109, 1, 211, 75, 216, 109, 1, 211, 74, 
-    216, 109, 1, 211, 71, 216, 109, 1, 215, 116, 211, 85, 216, 109, 1, 215, 
-    116, 211, 69, 216, 109, 1, 211, 67, 216, 109, 1, 210, 212, 216, 109, 1, 
-    211, 64, 216, 109, 1, 211, 63, 216, 109, 1, 211, 87, 216, 109, 1, 215, 
-    116, 211, 87, 216, 109, 1, 253, 164, 211, 87, 216, 109, 1, 211, 62, 216, 
-    109, 1, 211, 60, 216, 109, 1, 211, 61, 216, 109, 1, 211, 59, 216, 109, 1, 
-    211, 58, 216, 109, 1, 211, 97, 216, 109, 1, 211, 56, 216, 109, 1, 211, 
-    54, 216, 109, 1, 211, 53, 216, 109, 1, 211, 52, 216, 109, 1, 211, 50, 
-    216, 109, 1, 217, 35, 211, 50, 216, 109, 1, 211, 48, 216, 109, 1, 211, 
-    47, 216, 109, 1, 210, 244, 216, 109, 58, 1, 233, 127, 78, 216, 109, 220, 
-    139, 78, 216, 109, 116, 235, 64, 29, 3, 232, 156, 29, 3, 230, 161, 29, 3, 
-    222, 210, 29, 3, 219, 58, 29, 3, 220, 7, 29, 3, 251, 205, 29, 3, 216, 42, 
-    29, 3, 249, 238, 29, 3, 228, 73, 29, 3, 227, 134, 29, 3, 242, 181, 227, 
-    1, 29, 3, 210, 22, 29, 3, 247, 144, 29, 3, 248, 105, 29, 3, 235, 68, 29, 
-    3, 216, 156, 29, 3, 250, 86, 29, 3, 225, 121, 29, 3, 225, 16, 29, 3, 243, 
-    0, 29, 3, 242, 252, 29, 3, 242, 253, 29, 3, 242, 254, 29, 3, 218, 224, 
-    29, 3, 218, 180, 29, 3, 218, 193, 29, 3, 218, 223, 29, 3, 218, 197, 29, 
-    3, 218, 198, 29, 3, 218, 185, 29, 3, 250, 214, 29, 3, 250, 193, 29, 3, 
-    250, 195, 29, 3, 250, 213, 29, 3, 250, 211, 29, 3, 250, 212, 29, 3, 250, 
-    194, 29, 3, 209, 243, 29, 3, 209, 221, 29, 3, 209, 234, 29, 3, 209, 242, 
-    29, 3, 209, 237, 29, 3, 209, 238, 29, 3, 209, 226, 29, 3, 250, 209, 29, 
-    3, 250, 196, 29, 3, 250, 198, 29, 3, 250, 208, 29, 3, 250, 206, 29, 3, 
-    250, 207, 29, 3, 250, 197, 29, 3, 223, 237, 29, 3, 223, 227, 29, 3, 223, 
-    233, 29, 3, 223, 236, 29, 3, 223, 234, 29, 3, 223, 235, 29, 3, 223, 232, 
-    29, 3, 233, 160, 29, 3, 233, 152, 29, 3, 233, 155, 29, 3, 233, 159, 29, 
-    3, 233, 156, 29, 3, 233, 157, 29, 3, 233, 153, 29, 3, 211, 130, 29, 3, 
-    211, 120, 29, 3, 211, 126, 29, 3, 211, 129, 29, 3, 211, 127, 29, 3, 211, 
-    128, 29, 3, 211, 125, 29, 3, 242, 72, 29, 3, 242, 63, 29, 3, 242, 66, 29, 
-    3, 242, 71, 29, 3, 242, 68, 29, 3, 242, 69, 29, 3, 242, 65, 38, 33, 1, 
-    252, 76, 38, 33, 1, 213, 255, 38, 33, 1, 242, 237, 38, 33, 1, 248, 91, 
-    38, 33, 1, 210, 74, 38, 33, 1, 210, 94, 38, 33, 1, 176, 38, 33, 1, 245, 
-    175, 38, 33, 1, 245, 160, 38, 33, 1, 245, 151, 38, 33, 1, 76, 38, 33, 1, 
-    225, 222, 38, 33, 1, 245, 93, 38, 33, 1, 245, 83, 38, 33, 1, 217, 23, 38, 
-    33, 1, 162, 38, 33, 1, 215, 179, 38, 33, 1, 250, 132, 38, 33, 1, 220, 
-    103, 38, 33, 1, 220, 66, 38, 33, 1, 244, 83, 38, 33, 1, 245, 82, 38, 33, 
-    1, 61, 38, 33, 1, 236, 61, 38, 33, 1, 247, 162, 38, 33, 1, 230, 141, 214, 
-    205, 38, 33, 1, 211, 59, 38, 33, 1, 210, 212, 38, 33, 1, 235, 184, 61, 
-    38, 33, 1, 232, 193, 210, 183, 38, 33, 1, 251, 250, 210, 183, 38, 33, 1, 
-    235, 184, 251, 250, 210, 183, 44, 254, 111, 218, 61, 231, 155, 44, 254, 
-    111, 246, 119, 218, 61, 231, 155, 43, 218, 61, 127, 44, 218, 61, 127, 43, 
-    246, 119, 218, 61, 127, 44, 246, 119, 218, 61, 127, 223, 158, 235, 203, 
-    231, 155, 223, 158, 246, 119, 235, 203, 231, 155, 246, 119, 215, 242, 
-    231, 155, 43, 215, 242, 127, 44, 215, 242, 127, 223, 158, 218, 235, 43, 
-    223, 158, 226, 199, 127, 44, 223, 158, 226, 199, 127, 245, 211, 249, 159, 
-    226, 14, 244, 23, 226, 14, 223, 50, 244, 23, 226, 14, 240, 166, 246, 119, 
-    226, 252, 246, 105, 254, 120, 214, 153, 254, 120, 246, 119, 222, 248, 
-    254, 110, 52, 226, 249, 240, 169, 235, 194, 235, 202, 226, 60, 251, 155, 
-    240, 170, 2, 248, 2, 216, 90, 2, 222, 235, 48, 43, 121, 226, 6, 127, 44, 
-    121, 226, 6, 127, 216, 90, 2, 59, 48, 216, 90, 2, 59, 51, 43, 67, 252, 
-    142, 2, 224, 8, 44, 67, 252, 142, 2, 224, 8, 216, 15, 43, 163, 127, 216, 
-    15, 44, 163, 127, 251, 176, 43, 163, 127, 251, 176, 44, 163, 127, 43, 
-    219, 188, 104, 127, 44, 219, 188, 104, 127, 43, 52, 226, 4, 44, 52, 226, 
-    4, 113, 170, 117, 123, 59, 224, 141, 123, 59, 117, 113, 170, 224, 141, 
-    92, 244, 12, 59, 224, 141, 244, 82, 59, 78, 223, 50, 224, 14, 78, 67, 
-    183, 222, 235, 225, 11, 211, 209, 220, 139, 230, 225, 247, 121, 215, 94, 
-    249, 220, 223, 158, 247, 121, 223, 158, 249, 220, 215, 94, 220, 151, 248, 
-    207, 2, 43, 242, 109, 248, 207, 2, 44, 242, 109, 215, 94, 248, 206, 216, 
-    15, 163, 221, 174, 50, 215, 59, 248, 157, 216, 144, 248, 157, 9, 34, 223, 
-    77, 9, 34, 250, 11, 9, 34, 221, 177, 110, 9, 34, 221, 177, 105, 9, 34, 
-    221, 177, 158, 9, 34, 225, 168, 9, 34, 251, 164, 9, 34, 217, 93, 9, 34, 
-    234, 34, 110, 9, 34, 234, 34, 105, 9, 34, 247, 171, 9, 34, 221, 180, 9, 
-    34, 4, 110, 9, 34, 4, 105, 9, 34, 233, 98, 110, 9, 34, 233, 98, 105, 9, 
-    34, 233, 98, 158, 9, 34, 233, 98, 161, 9, 34, 219, 69, 9, 34, 216, 146, 
-    9, 34, 219, 67, 110, 9, 34, 219, 67, 105, 9, 34, 241, 229, 110, 9, 34, 
-    241, 229, 105, 9, 34, 242, 16, 9, 34, 223, 148, 9, 34, 250, 83, 9, 34, 
-    218, 38, 9, 34, 230, 129, 9, 34, 248, 89, 9, 34, 230, 121, 9, 34, 250, 
-    26, 9, 34, 212, 41, 110, 9, 34, 212, 41, 105, 9, 34, 244, 97, 9, 34, 225, 
-    233, 110, 9, 34, 225, 233, 105, 9, 34, 219, 161, 163, 215, 237, 215, 189, 
-    9, 34, 249, 146, 9, 34, 247, 137, 9, 34, 235, 138, 9, 34, 251, 199, 64, 
-    249, 251, 9, 34, 245, 16, 9, 34, 218, 250, 110, 9, 34, 218, 250, 105, 9, 
-    34, 252, 155, 9, 34, 219, 168, 9, 34, 251, 64, 219, 168, 9, 34, 229, 91, 
-    110, 9, 34, 229, 91, 105, 9, 34, 229, 91, 158, 9, 34, 229, 91, 161, 9, 
-    34, 231, 47, 9, 34, 220, 58, 9, 34, 223, 154, 9, 34, 245, 38, 9, 34, 226, 
-    210, 9, 34, 251, 134, 110, 9, 34, 251, 134, 105, 9, 34, 231, 87, 9, 34, 
-    230, 124, 9, 34, 242, 141, 110, 9, 34, 242, 141, 105, 9, 34, 242, 141, 
-    158, 9, 34, 216, 107, 9, 34, 249, 250, 9, 34, 212, 9, 110, 9, 34, 212, 9, 
-    105, 9, 34, 251, 64, 221, 171, 9, 34, 219, 161, 240, 249, 9, 34, 240, 
-    249, 9, 34, 251, 64, 219, 3, 9, 34, 251, 64, 220, 53, 9, 34, 244, 33, 9, 
-    34, 251, 64, 250, 229, 9, 34, 219, 161, 212, 57, 9, 34, 212, 58, 110, 9, 
-    34, 212, 58, 105, 9, 34, 250, 28, 9, 34, 251, 64, 242, 167, 9, 34, 199, 
-    110, 9, 34, 199, 105, 9, 34, 251, 64, 232, 138, 9, 34, 251, 64, 243, 89, 
-    9, 34, 230, 120, 110, 9, 34, 230, 120, 105, 9, 34, 223, 160, 9, 34, 251, 
-    208, 9, 34, 251, 64, 217, 57, 233, 53, 9, 34, 251, 64, 233, 54, 9, 34, 
-    251, 64, 211, 239, 9, 34, 251, 64, 244, 47, 9, 34, 245, 219, 110, 9, 34, 
-    245, 219, 105, 9, 34, 245, 219, 158, 9, 34, 251, 64, 245, 218, 9, 34, 
-    241, 236, 9, 34, 251, 64, 240, 246, 9, 34, 251, 195, 9, 34, 242, 223, 9, 
-    34, 251, 64, 244, 91, 9, 34, 251, 64, 251, 238, 9, 34, 251, 64, 222, 2, 
-    9, 34, 219, 161, 212, 2, 9, 34, 219, 161, 211, 41, 9, 34, 251, 64, 243, 
-    245, 9, 34, 235, 144, 245, 42, 9, 34, 251, 64, 245, 42, 9, 34, 235, 144, 
-    216, 16, 9, 34, 251, 64, 216, 16, 9, 34, 235, 144, 246, 97, 9, 34, 251, 
-    64, 246, 97, 9, 34, 215, 91, 9, 34, 235, 144, 215, 91, 9, 34, 251, 64, 
-    215, 91, 60, 34, 110, 60, 34, 232, 214, 60, 34, 247, 121, 60, 34, 219, 
-    96, 60, 34, 221, 176, 60, 34, 103, 60, 34, 105, 60, 34, 232, 238, 60, 34, 
-    231, 186, 60, 34, 233, 34, 60, 34, 245, 130, 60, 34, 195, 60, 34, 124, 
-    251, 164, 60, 34, 249, 148, 60, 34, 240, 112, 60, 34, 217, 93, 60, 34, 
-    204, 251, 164, 60, 34, 234, 33, 60, 34, 224, 225, 60, 34, 211, 202, 60, 
-    34, 218, 244, 60, 34, 44, 204, 251, 164, 60, 34, 241, 177, 245, 146, 60, 
-    34, 216, 248, 60, 34, 247, 171, 60, 34, 221, 180, 60, 34, 250, 11, 60, 
-    34, 224, 183, 60, 34, 254, 216, 60, 34, 230, 111, 60, 34, 245, 146, 60, 
-    34, 245, 224, 60, 34, 221, 201, 60, 34, 242, 175, 60, 34, 242, 176, 219, 
-    82, 60, 34, 245, 41, 60, 34, 251, 249, 60, 34, 211, 221, 60, 34, 250, 
-    102, 60, 34, 222, 197, 60, 34, 235, 252, 60, 34, 219, 80, 60, 34, 233, 
-    97, 60, 34, 249, 157, 60, 34, 218, 238, 60, 34, 230, 116, 60, 34, 222, 
-    225, 60, 34, 211, 206, 60, 34, 226, 191, 60, 34, 215, 98, 60, 34, 246, 
-    81, 60, 34, 219, 252, 216, 146, 60, 34, 246, 119, 250, 11, 60, 34, 199, 
-    218, 109, 60, 34, 113, 242, 11, 60, 34, 220, 1, 60, 34, 251, 170, 60, 34, 
-    219, 66, 60, 34, 251, 138, 60, 34, 218, 139, 60, 34, 241, 228, 60, 34, 
-    242, 29, 60, 34, 247, 124, 60, 34, 242, 16, 60, 34, 251, 155, 60, 34, 
-    223, 148, 60, 34, 221, 188, 60, 34, 247, 200, 60, 34, 253, 169, 60, 34, 
-    218, 235, 60, 34, 228, 52, 60, 34, 218, 38, 60, 34, 221, 212, 60, 34, 
-    230, 129, 60, 34, 215, 236, 60, 34, 233, 123, 60, 34, 218, 130, 60, 34, 
-    248, 89, 60, 34, 212, 21, 60, 34, 247, 147, 228, 52, 60, 34, 249, 216, 
-    60, 34, 243, 223, 60, 34, 250, 22, 60, 34, 218, 143, 60, 34, 212, 40, 60, 
-    34, 244, 97, 60, 34, 250, 19, 60, 34, 244, 162, 60, 34, 52, 211, 178, 60, 
-    34, 163, 215, 237, 215, 189, 60, 34, 219, 90, 60, 34, 244, 172, 60, 34, 
-    249, 146, 60, 34, 247, 137, 60, 34, 224, 180, 60, 34, 235, 138, 60, 34, 
-    231, 68, 60, 34, 216, 89, 60, 34, 217, 246, 60, 34, 232, 232, 60, 34, 
-    214, 131, 60, 34, 244, 121, 60, 34, 251, 199, 64, 249, 251, 60, 34, 219, 
-    189, 60, 34, 246, 119, 216, 243, 60, 34, 211, 253, 60, 34, 219, 104, 60, 
-    34, 247, 188, 60, 34, 245, 16, 60, 34, 219, 6, 60, 34, 74, 60, 34, 218, 
-    132, 60, 34, 218, 249, 60, 34, 216, 0, 60, 34, 242, 148, 60, 34, 250, 
-    219, 60, 34, 218, 161, 60, 34, 252, 155, 60, 34, 223, 32, 60, 34, 219, 
-    168, 60, 34, 235, 131, 60, 34, 229, 90, 60, 34, 220, 58, 60, 34, 244, 
-    150, 60, 34, 226, 210, 60, 34, 254, 119, 60, 34, 225, 30, 60, 34, 245, 
-    228, 60, 34, 251, 133, 60, 34, 231, 87, 60, 34, 230, 184, 60, 34, 220, 
-    157, 60, 34, 253, 253, 60, 34, 230, 124, 60, 34, 216, 20, 60, 34, 226, 
-    166, 60, 34, 251, 202, 60, 34, 218, 128, 60, 34, 249, 226, 60, 34, 242, 
-    140, 60, 34, 216, 107, 60, 34, 235, 218, 60, 34, 251, 212, 60, 34, 212, 
-    58, 245, 146, 60, 34, 249, 250, 60, 34, 212, 8, 60, 34, 221, 171, 60, 34, 
-    240, 249, 60, 34, 219, 3, 60, 34, 214, 22, 60, 34, 252, 73, 60, 34, 225, 
-    74, 60, 34, 252, 175, 60, 34, 220, 53, 60, 34, 223, 111, 60, 34, 222, 
-    127, 60, 34, 244, 33, 60, 34, 251, 201, 60, 34, 250, 229, 60, 34, 251, 
-    227, 60, 34, 230, 126, 60, 34, 212, 57, 60, 34, 250, 28, 60, 34, 211, 
-    236, 60, 34, 247, 181, 60, 34, 213, 161, 60, 34, 242, 167, 60, 34, 232, 
-    138, 60, 34, 243, 89, 60, 34, 230, 119, 60, 34, 219, 95, 60, 34, 219, 
-    252, 217, 77, 251, 238, 60, 34, 223, 160, 60, 34, 251, 208, 60, 34, 211, 
-    197, 60, 34, 244, 191, 60, 34, 233, 53, 60, 34, 217, 57, 233, 53, 60, 34, 
-    233, 49, 60, 34, 219, 31, 60, 34, 233, 54, 60, 34, 211, 239, 60, 34, 244, 
-    47, 60, 34, 245, 218, 60, 34, 241, 236, 60, 34, 244, 1, 60, 34, 240, 246, 
-    60, 34, 251, 195, 60, 34, 217, 64, 60, 34, 242, 35, 60, 34, 244, 114, 60, 
-    34, 222, 29, 211, 236, 60, 34, 250, 221, 60, 34, 242, 223, 60, 34, 244, 
-    91, 60, 34, 251, 238, 60, 34, 222, 2, 60, 34, 248, 75, 60, 34, 212, 2, 
-    60, 34, 241, 211, 60, 34, 211, 41, 60, 34, 230, 193, 60, 34, 251, 222, 
-    60, 34, 245, 156, 60, 34, 243, 245, 60, 34, 215, 210, 60, 34, 246, 83, 
-    60, 34, 223, 142, 60, 34, 228, 54, 60, 34, 245, 42, 60, 34, 216, 16, 60, 
-    34, 246, 97, 60, 34, 215, 91, 60, 34, 244, 49, 109, 248, 38, 135, 43, 
-    216, 43, 222, 252, 109, 248, 38, 135, 77, 216, 43, 51, 109, 248, 38, 135, 
-    43, 216, 43, 230, 225, 22, 222, 252, 109, 248, 38, 135, 77, 216, 43, 230, 
-    225, 22, 51, 109, 248, 38, 135, 243, 230, 218, 11, 109, 248, 38, 135, 
-    218, 12, 243, 244, 48, 109, 248, 38, 135, 218, 12, 243, 244, 51, 109, 
-    248, 38, 135, 218, 12, 243, 244, 233, 47, 109, 248, 38, 135, 218, 12, 
-    243, 244, 214, 160, 233, 47, 109, 248, 38, 135, 218, 12, 243, 244, 214, 
-    160, 222, 252, 109, 248, 38, 135, 218, 12, 243, 244, 232, 109, 233, 47, 
-    109, 248, 38, 135, 226, 123, 109, 219, 19, 109, 249, 220, 109, 243, 230, 
-    218, 130, 247, 178, 78, 235, 132, 235, 237, 218, 160, 87, 109, 235, 159, 
-    78, 109, 249, 253, 78, 109, 54, 210, 86, 43, 254, 111, 127, 44, 254, 111, 
-    127, 43, 52, 254, 111, 127, 44, 52, 254, 111, 127, 43, 249, 162, 127, 44, 
-    249, 162, 127, 43, 71, 249, 162, 127, 44, 71, 249, 162, 127, 43, 85, 233, 
-    21, 127, 44, 85, 233, 21, 127, 224, 238, 78, 243, 33, 78, 43, 216, 7, 
-    220, 54, 127, 44, 216, 7, 220, 54, 127, 43, 71, 233, 21, 127, 44, 71, 
-    233, 21, 127, 43, 71, 216, 7, 220, 54, 127, 44, 71, 216, 7, 220, 54, 127, 
-    43, 71, 42, 127, 44, 71, 42, 127, 212, 36, 248, 157, 223, 50, 52, 224, 
-    192, 223, 255, 78, 52, 224, 192, 223, 255, 78, 121, 52, 224, 192, 223, 
-    255, 78, 224, 238, 164, 244, 191, 242, 9, 227, 199, 110, 242, 9, 227, 
-    199, 105, 242, 9, 227, 199, 158, 242, 9, 227, 199, 161, 242, 9, 227, 199, 
-    189, 242, 9, 227, 199, 194, 242, 9, 227, 199, 198, 242, 9, 227, 199, 195, 
-    242, 9, 227, 199, 200, 109, 233, 4, 138, 78, 109, 222, 229, 138, 78, 109, 
-    248, 45, 138, 78, 109, 245, 129, 138, 78, 24, 219, 156, 59, 138, 78, 24, 
-    52, 59, 138, 78, 212, 32, 248, 157, 67, 234, 234, 223, 78, 78, 67, 234, 
-    234, 223, 78, 2, 213, 135, 219, 32, 78, 67, 234, 234, 223, 78, 164, 214, 
-    160, 242, 28, 67, 234, 234, 223, 78, 2, 213, 135, 219, 32, 164, 214, 160, 
-    242, 28, 67, 234, 234, 223, 78, 164, 232, 109, 242, 28, 37, 224, 238, 78, 
-    109, 217, 4, 232, 215, 244, 147, 220, 139, 87, 242, 9, 227, 199, 216, 
-    248, 242, 9, 227, 199, 215, 73, 242, 9, 227, 199, 216, 163, 67, 109, 235, 
-    159, 78, 231, 141, 78, 226, 0, 254, 141, 78, 109, 45, 235, 239, 109, 163, 
-    244, 107, 219, 19, 141, 1, 4, 61, 141, 1, 61, 141, 1, 4, 73, 141, 1, 73, 
-    141, 1, 4, 70, 141, 1, 70, 141, 1, 4, 75, 141, 1, 75, 141, 1, 4, 76, 141, 
-    1, 76, 141, 1, 176, 141, 1, 243, 136, 141, 1, 234, 93, 141, 1, 242, 215, 
-    141, 1, 233, 218, 141, 1, 242, 114, 141, 1, 234, 183, 141, 1, 243, 63, 
-    141, 1, 234, 29, 141, 1, 242, 175, 141, 1, 206, 141, 1, 210, 116, 141, 1, 
-    219, 192, 141, 1, 210, 44, 141, 1, 218, 84, 141, 1, 210, 13, 141, 1, 221, 
-    182, 141, 1, 210, 94, 141, 1, 219, 59, 141, 1, 210, 23, 141, 1, 217, 106, 
-    141, 1, 248, 222, 141, 1, 216, 118, 141, 1, 248, 4, 141, 1, 4, 215, 119, 
-    141, 1, 215, 119, 141, 1, 246, 79, 141, 1, 217, 23, 141, 1, 248, 91, 141, 
-    1, 111, 141, 1, 247, 146, 141, 1, 197, 141, 1, 228, 234, 141, 1, 227, 
-    238, 141, 1, 229, 108, 141, 1, 228, 75, 141, 1, 162, 141, 1, 252, 192, 
-    141, 1, 190, 141, 1, 241, 181, 141, 1, 252, 7, 141, 1, 225, 109, 141, 1, 
-    240, 223, 141, 1, 251, 126, 141, 1, 224, 151, 141, 1, 241, 239, 141, 1, 
-    252, 76, 141, 1, 225, 222, 141, 1, 241, 69, 141, 1, 251, 206, 141, 1, 
-    225, 17, 141, 1, 185, 141, 1, 230, 231, 141, 1, 230, 103, 141, 1, 231, 
-    92, 141, 1, 230, 162, 141, 1, 4, 191, 141, 1, 191, 141, 1, 4, 210, 212, 
-    141, 1, 210, 212, 141, 1, 4, 210, 244, 141, 1, 210, 244, 141, 1, 205, 
-    141, 1, 223, 36, 141, 1, 222, 141, 141, 1, 223, 129, 141, 1, 222, 212, 
-    141, 1, 4, 212, 65, 141, 1, 212, 65, 141, 1, 211, 250, 141, 1, 212, 22, 
-    141, 1, 211, 227, 141, 1, 230, 26, 141, 1, 212, 116, 141, 1, 4, 176, 141, 
-    1, 4, 234, 183, 38, 234, 202, 213, 135, 219, 32, 78, 38, 234, 202, 220, 
-    156, 219, 32, 78, 234, 202, 213, 135, 219, 32, 78, 234, 202, 220, 156, 
-    219, 32, 78, 141, 235, 159, 78, 141, 213, 135, 235, 159, 78, 141, 247, 
-    222, 210, 225, 234, 202, 52, 240, 169, 56, 1, 4, 61, 56, 1, 61, 56, 1, 4, 
-    73, 56, 1, 73, 56, 1, 4, 70, 56, 1, 70, 56, 1, 4, 75, 56, 1, 75, 56, 1, 
-    4, 76, 56, 1, 76, 56, 1, 176, 56, 1, 243, 136, 56, 1, 234, 93, 56, 1, 
-    242, 215, 56, 1, 233, 218, 56, 1, 242, 114, 56, 1, 234, 183, 56, 1, 243, 
-    63, 56, 1, 234, 29, 56, 1, 242, 175, 56, 1, 206, 56, 1, 210, 116, 56, 1, 
-    219, 192, 56, 1, 210, 44, 56, 1, 218, 84, 56, 1, 210, 13, 56, 1, 221, 
-    182, 56, 1, 210, 94, 56, 1, 219, 59, 56, 1, 210, 23, 56, 1, 217, 106, 56, 
-    1, 248, 222, 56, 1, 216, 118, 56, 1, 248, 4, 56, 1, 4, 215, 119, 56, 1, 
-    215, 119, 56, 1, 246, 79, 56, 1, 217, 23, 56, 1, 248, 91, 56, 1, 111, 56, 
-    1, 247, 146, 56, 1, 197, 56, 1, 228, 234, 56, 1, 227, 238, 56, 1, 229, 
-    108, 56, 1, 228, 75, 56, 1, 162, 56, 1, 252, 192, 56, 1, 190, 56, 1, 241, 
-    181, 56, 1, 252, 7, 56, 1, 225, 109, 56, 1, 240, 223, 56, 1, 251, 126, 
-    56, 1, 224, 151, 56, 1, 241, 239, 56, 1, 252, 76, 56, 1, 225, 222, 56, 1, 
-    241, 69, 56, 1, 251, 206, 56, 1, 225, 17, 56, 1, 185, 56, 1, 230, 231, 
-    56, 1, 230, 103, 56, 1, 231, 92, 56, 1, 230, 162, 56, 1, 4, 191, 56, 1, 
-    191, 56, 1, 4, 210, 212, 56, 1, 210, 212, 56, 1, 4, 210, 244, 56, 1, 210, 
-    244, 56, 1, 205, 56, 1, 223, 36, 56, 1, 222, 141, 56, 1, 223, 129, 56, 1, 
-    222, 212, 56, 1, 4, 212, 65, 56, 1, 212, 65, 56, 1, 211, 250, 56, 1, 212, 
-    22, 56, 1, 211, 227, 56, 1, 230, 26, 56, 1, 212, 116, 56, 1, 4, 176, 56, 
-    1, 4, 234, 183, 56, 1, 214, 27, 56, 1, 213, 176, 56, 1, 213, 255, 56, 1, 
-    213, 138, 56, 230, 225, 247, 121, 234, 202, 224, 174, 219, 32, 78, 56, 
-    235, 159, 78, 56, 213, 135, 235, 159, 78, 56, 247, 222, 234, 0, 251, 185, 
-    1, 253, 159, 251, 185, 1, 226, 106, 251, 185, 1, 193, 251, 185, 1, 245, 
-    7, 251, 185, 1, 249, 61, 251, 185, 1, 217, 153, 251, 185, 1, 230, 26, 
-    251, 185, 1, 156, 251, 185, 1, 243, 203, 251, 185, 1, 235, 24, 251, 185, 
-    1, 242, 61, 251, 185, 1, 235, 145, 251, 185, 1, 224, 97, 251, 185, 1, 
-    211, 178, 251, 185, 1, 210, 83, 251, 185, 1, 250, 159, 251, 185, 1, 220, 
-    105, 251, 185, 1, 153, 251, 185, 1, 210, 159, 251, 185, 1, 251, 67, 251, 
-    185, 1, 222, 92, 251, 185, 1, 61, 251, 185, 1, 76, 251, 185, 1, 75, 251, 
-    185, 1, 245, 198, 251, 185, 1, 254, 202, 251, 185, 1, 245, 196, 251, 185, 
-    1, 253, 193, 251, 185, 1, 226, 135, 251, 185, 1, 254, 124, 251, 185, 1, 
-    245, 151, 251, 185, 1, 254, 116, 251, 185, 1, 245, 139, 251, 185, 1, 245, 
-    93, 251, 185, 1, 73, 251, 185, 1, 70, 251, 185, 1, 235, 157, 251, 185, 1, 
-    214, 105, 251, 185, 1, 229, 80, 251, 185, 1, 242, 179, 251, 185, 1, 236, 
-    35, 24, 1, 234, 59, 24, 1, 218, 216, 24, 1, 234, 52, 24, 1, 228, 227, 24, 
-    1, 228, 225, 24, 1, 228, 224, 24, 1, 216, 102, 24, 1, 218, 205, 24, 1, 
-    223, 27, 24, 1, 223, 22, 24, 1, 223, 19, 24, 1, 223, 12, 24, 1, 223, 7, 
-    24, 1, 223, 2, 24, 1, 223, 13, 24, 1, 223, 25, 24, 1, 230, 218, 24, 1, 
-    225, 96, 24, 1, 218, 213, 24, 1, 225, 85, 24, 1, 219, 149, 24, 1, 218, 
-    210, 24, 1, 236, 57, 24, 1, 250, 47, 24, 1, 218, 220, 24, 1, 250, 107, 
-    24, 1, 234, 111, 24, 1, 216, 174, 24, 1, 225, 132, 24, 1, 241, 173, 24, 
-    1, 61, 24, 1, 254, 244, 24, 1, 191, 24, 1, 211, 92, 24, 1, 245, 118, 24, 
-    1, 75, 24, 1, 211, 36, 24, 1, 211, 47, 24, 1, 76, 24, 1, 212, 65, 24, 1, 
-    212, 62, 24, 1, 226, 235, 24, 1, 210, 244, 24, 1, 70, 24, 1, 212, 11, 24, 
-    1, 212, 22, 24, 1, 211, 250, 24, 1, 210, 212, 24, 1, 245, 56, 24, 1, 211, 
-    8, 24, 1, 73, 24, 244, 104, 24, 1, 218, 214, 24, 1, 228, 217, 24, 1, 228, 
-    219, 24, 1, 228, 222, 24, 1, 223, 20, 24, 1, 223, 1, 24, 1, 223, 9, 24, 
-    1, 223, 14, 24, 1, 222, 255, 24, 1, 230, 211, 24, 1, 230, 208, 24, 1, 
-    230, 212, 24, 1, 234, 222, 24, 1, 225, 91, 24, 1, 225, 77, 24, 1, 225, 
-    83, 24, 1, 225, 80, 24, 1, 225, 94, 24, 1, 225, 78, 24, 1, 234, 220, 24, 
-    1, 234, 218, 24, 1, 219, 142, 24, 1, 219, 140, 24, 1, 219, 132, 24, 1, 
-    219, 137, 24, 1, 219, 147, 24, 1, 226, 33, 24, 1, 218, 217, 24, 1, 211, 
-    26, 24, 1, 211, 22, 24, 1, 211, 23, 24, 1, 234, 221, 24, 1, 218, 218, 24, 
-    1, 211, 32, 24, 1, 210, 238, 24, 1, 210, 237, 24, 1, 210, 240, 24, 1, 
-    210, 203, 24, 1, 210, 204, 24, 1, 210, 207, 24, 1, 254, 35, 24, 1, 254, 
-    29, 109, 254, 100, 232, 204, 78, 109, 254, 100, 223, 51, 78, 109, 254, 
-    100, 123, 78, 109, 254, 100, 113, 78, 109, 254, 100, 134, 78, 109, 254, 
-    100, 244, 12, 78, 109, 254, 100, 216, 15, 78, 109, 254, 100, 230, 225, 
-    78, 109, 254, 100, 251, 176, 78, 109, 254, 100, 244, 93, 78, 109, 254, 
-    100, 221, 177, 78, 109, 254, 100, 216, 170, 78, 109, 254, 100, 244, 5, 
-    78, 109, 254, 100, 241, 225, 78, 109, 254, 100, 245, 225, 78, 109, 254, 
-    100, 231, 187, 78, 251, 185, 1, 251, 126, 251, 185, 1, 210, 44, 251, 185, 
-    1, 235, 109, 251, 185, 1, 242, 114, 251, 185, 1, 245, 210, 251, 185, 1, 
-    245, 136, 251, 185, 1, 226, 184, 251, 185, 1, 226, 188, 251, 185, 1, 235, 
-    180, 251, 185, 1, 254, 102, 251, 185, 1, 235, 225, 251, 185, 1, 214, 168, 
-    251, 185, 1, 236, 17, 251, 185, 1, 229, 58, 251, 185, 1, 254, 196, 251, 
-    185, 1, 253, 188, 251, 185, 1, 254, 137, 251, 185, 1, 226, 205, 251, 185, 
-    1, 226, 190, 251, 185, 1, 235, 222, 251, 185, 40, 1, 226, 106, 251, 185, 
-    40, 1, 217, 153, 251, 185, 40, 1, 235, 24, 251, 185, 40, 1, 242, 61, 251, 
-    185, 1, 242, 251, 251, 185, 1, 233, 0, 251, 185, 1, 209, 250, 9, 218, 
-    104, 217, 153, 9, 218, 104, 212, 4, 9, 218, 104, 211, 158, 9, 218, 104, 
-    251, 80, 9, 218, 104, 217, 255, 9, 218, 104, 240, 159, 9, 218, 104, 240, 
-    163, 9, 218, 104, 240, 232, 9, 218, 104, 240, 160, 9, 218, 104, 217, 156, 
-    9, 218, 104, 240, 162, 9, 218, 104, 240, 158, 9, 218, 104, 240, 230, 9, 
-    218, 104, 240, 161, 9, 218, 104, 240, 157, 9, 218, 104, 230, 26, 9, 218, 
-    104, 242, 61, 9, 218, 104, 222, 92, 9, 218, 104, 226, 106, 9, 218, 104, 
-    219, 22, 9, 218, 104, 249, 61, 9, 218, 104, 240, 164, 9, 218, 104, 241, 
-    191, 9, 218, 104, 217, 165, 9, 218, 104, 217, 234, 9, 218, 104, 218, 169, 
-    9, 218, 104, 220, 111, 9, 218, 104, 225, 225, 9, 218, 104, 224, 99, 9, 
-    218, 104, 216, 44, 9, 218, 104, 217, 155, 9, 218, 104, 217, 245, 9, 218, 
-    104, 240, 171, 9, 218, 104, 240, 156, 9, 218, 104, 225, 150, 9, 218, 104, 
-    224, 97, 56, 1, 4, 233, 218, 56, 1, 4, 219, 192, 56, 1, 4, 218, 84, 56, 
-    1, 4, 111, 56, 1, 4, 227, 238, 56, 1, 4, 162, 56, 1, 4, 241, 181, 56, 1, 
-    4, 240, 223, 56, 1, 4, 241, 239, 56, 1, 4, 241, 69, 56, 1, 4, 230, 103, 
-    56, 1, 4, 205, 56, 1, 4, 223, 36, 56, 1, 4, 222, 141, 56, 1, 4, 223, 129, 
-    56, 1, 4, 222, 212, 88, 24, 234, 59, 88, 24, 228, 227, 88, 24, 216, 102, 
-    88, 24, 223, 27, 88, 24, 230, 218, 88, 24, 225, 96, 88, 24, 219, 149, 88, 
-    24, 236, 57, 88, 24, 250, 47, 88, 24, 250, 107, 88, 24, 234, 111, 88, 24, 
-    216, 174, 88, 24, 225, 132, 88, 24, 241, 173, 88, 24, 234, 60, 61, 88, 
-    24, 228, 228, 61, 88, 24, 216, 103, 61, 88, 24, 223, 28, 61, 88, 24, 230, 
-    219, 61, 88, 24, 225, 97, 61, 88, 24, 219, 150, 61, 88, 24, 236, 58, 61, 
-    88, 24, 250, 48, 61, 88, 24, 250, 108, 61, 88, 24, 234, 112, 61, 88, 24, 
-    216, 175, 61, 88, 24, 225, 133, 61, 88, 24, 241, 174, 61, 88, 24, 250, 
-    48, 70, 88, 234, 4, 135, 226, 218, 88, 234, 4, 135, 144, 240, 223, 88, 
-    154, 110, 88, 154, 105, 88, 154, 158, 88, 154, 161, 88, 154, 189, 88, 
-    154, 194, 88, 154, 198, 88, 154, 195, 88, 154, 200, 88, 154, 216, 248, 
-    88, 154, 230, 129, 88, 154, 244, 97, 88, 154, 212, 40, 88, 154, 211, 214, 
-    88, 154, 231, 40, 88, 154, 245, 224, 88, 154, 218, 38, 88, 154, 218, 133, 
-    88, 154, 241, 245, 88, 154, 219, 55, 88, 154, 229, 205, 88, 154, 219, 5, 
-    88, 154, 244, 103, 88, 154, 249, 201, 88, 154, 233, 126, 88, 154, 223, 
-    72, 88, 154, 251, 16, 88, 154, 218, 88, 88, 154, 218, 21, 88, 154, 245, 
-    128, 88, 154, 223, 64, 88, 154, 254, 151, 88, 154, 244, 129, 88, 154, 
-    223, 62, 88, 154, 220, 157, 88, 154, 223, 128, 37, 154, 224, 13, 37, 154, 
-    234, 81, 37, 154, 221, 199, 37, 154, 234, 0, 37, 54, 216, 249, 226, 198, 
-    85, 218, 235, 37, 54, 215, 74, 226, 198, 85, 218, 235, 37, 54, 216, 164, 
-    226, 198, 85, 218, 235, 37, 54, 244, 17, 226, 198, 85, 218, 235, 37, 54, 
-    244, 116, 226, 198, 85, 218, 235, 37, 54, 219, 113, 226, 198, 85, 218, 
-    235, 37, 54, 220, 118, 226, 198, 85, 218, 235, 37, 54, 245, 186, 226, 
-    198, 85, 218, 235, 225, 252, 50, 37, 54, 215, 74, 110, 37, 54, 215, 74, 
-    105, 37, 54, 215, 74, 158, 37, 54, 215, 74, 161, 37, 54, 215, 74, 189, 
-    37, 54, 215, 74, 194, 37, 54, 215, 74, 198, 37, 54, 215, 74, 195, 37, 54, 
-    215, 74, 200, 37, 54, 216, 163, 37, 54, 216, 164, 110, 37, 54, 216, 164, 
-    105, 37, 54, 216, 164, 158, 37, 54, 216, 164, 161, 37, 54, 216, 164, 189, 
-    37, 24, 234, 59, 37, 24, 228, 227, 37, 24, 216, 102, 37, 24, 223, 27, 37, 
-    24, 230, 218, 37, 24, 225, 96, 37, 24, 219, 149, 37, 24, 236, 57, 37, 24, 
-    250, 47, 37, 24, 250, 107, 37, 24, 234, 111, 37, 24, 216, 174, 37, 24, 
-    225, 132, 37, 24, 241, 173, 37, 24, 234, 60, 61, 37, 24, 228, 228, 61, 
-    37, 24, 216, 103, 61, 37, 24, 223, 28, 61, 37, 24, 230, 219, 61, 37, 24, 
-    225, 97, 61, 37, 24, 219, 150, 61, 37, 24, 236, 58, 61, 37, 24, 250, 48, 
-    61, 37, 24, 250, 108, 61, 37, 24, 234, 112, 61, 37, 24, 216, 175, 61, 37, 
-    24, 225, 133, 61, 37, 24, 241, 174, 61, 37, 234, 4, 135, 250, 149, 37, 
-    234, 4, 135, 235, 48, 37, 24, 236, 58, 70, 234, 4, 218, 160, 87, 37, 154, 
-    110, 37, 154, 105, 37, 154, 158, 37, 154, 161, 37, 154, 189, 37, 154, 
-    194, 37, 154, 198, 37, 154, 195, 37, 154, 200, 37, 154, 216, 248, 37, 
-    154, 230, 129, 37, 154, 244, 97, 37, 154, 212, 40, 37, 154, 211, 214, 37, 
-    154, 231, 40, 37, 154, 245, 224, 37, 154, 218, 38, 37, 154, 218, 133, 37, 
-    154, 241, 245, 37, 154, 219, 55, 37, 154, 229, 205, 37, 154, 219, 5, 37, 
-    154, 244, 103, 37, 154, 249, 201, 37, 154, 233, 126, 37, 154, 221, 175, 
-    37, 154, 231, 190, 37, 154, 244, 138, 37, 154, 218, 50, 37, 154, 245, 35, 
-    37, 154, 224, 188, 37, 154, 253, 197, 37, 154, 235, 160, 37, 154, 223, 
-    62, 37, 154, 249, 165, 37, 154, 249, 156, 37, 154, 241, 166, 37, 154, 
-    250, 175, 37, 154, 232, 111, 37, 154, 233, 47, 37, 154, 222, 252, 37, 
-    154, 231, 84, 37, 154, 223, 88, 37, 154, 218, 88, 37, 154, 218, 21, 37, 
-    154, 245, 128, 37, 154, 223, 64, 37, 154, 254, 151, 37, 154, 228, 213, 
-    37, 54, 216, 164, 194, 37, 54, 216, 164, 198, 37, 54, 216, 164, 195, 37, 
-    54, 216, 164, 200, 37, 54, 244, 16, 37, 54, 244, 17, 110, 37, 54, 244, 
-    17, 105, 37, 54, 244, 17, 158, 37, 54, 244, 17, 161, 37, 54, 244, 17, 
-    189, 37, 54, 244, 17, 194, 37, 54, 244, 17, 198, 37, 54, 244, 17, 195, 
-    37, 54, 244, 17, 200, 37, 54, 244, 115, 109, 217, 4, 16, 31, 235, 134, 
-    109, 217, 4, 16, 31, 244, 149, 109, 217, 4, 16, 31, 231, 161, 109, 217, 
-    4, 16, 31, 254, 48, 109, 217, 4, 16, 31, 231, 133, 109, 217, 4, 16, 31, 
-    235, 46, 109, 217, 4, 16, 31, 235, 47, 109, 217, 4, 16, 31, 253, 189, 
-    109, 217, 4, 16, 31, 220, 137, 109, 217, 4, 16, 31, 226, 240, 109, 217, 
-    4, 16, 31, 228, 41, 109, 217, 4, 16, 31, 248, 86, 42, 241, 191, 42, 245, 
-    89, 42, 245, 44, 232, 220, 232, 241, 50, 37, 56, 61, 37, 56, 73, 37, 56, 
-    70, 37, 56, 75, 37, 56, 76, 37, 56, 176, 37, 56, 234, 93, 37, 56, 233, 
-    218, 37, 56, 234, 183, 37, 56, 234, 29, 37, 56, 206, 37, 56, 219, 192, 
-    37, 56, 218, 84, 37, 56, 221, 182, 37, 56, 219, 59, 37, 56, 217, 106, 37, 
-    56, 216, 118, 37, 56, 215, 119, 37, 56, 217, 23, 37, 56, 111, 37, 56, 
-    197, 37, 56, 228, 234, 37, 56, 227, 238, 37, 56, 229, 108, 37, 56, 228, 
-    75, 37, 56, 162, 37, 56, 241, 181, 37, 56, 240, 223, 37, 56, 241, 239, 
-    37, 56, 241, 69, 37, 56, 185, 37, 56, 230, 231, 37, 56, 230, 103, 37, 56, 
-    231, 92, 37, 56, 230, 162, 37, 56, 191, 37, 56, 210, 212, 37, 56, 210, 
-    244, 37, 56, 205, 37, 56, 223, 36, 37, 56, 222, 141, 37, 56, 223, 129, 
-    37, 56, 222, 212, 37, 56, 212, 65, 37, 56, 211, 250, 37, 56, 212, 22, 37, 
-    56, 211, 227, 42, 254, 72, 42, 253, 240, 42, 254, 96, 42, 255, 32, 42, 
-    235, 227, 42, 235, 197, 42, 214, 166, 42, 245, 67, 42, 245, 207, 42, 226, 
-    187, 42, 226, 181, 42, 234, 246, 42, 234, 215, 42, 234, 212, 42, 243, 93, 
-    42, 243, 102, 42, 242, 205, 42, 242, 201, 42, 233, 151, 42, 242, 194, 42, 
-    234, 73, 42, 234, 72, 42, 234, 71, 42, 234, 70, 42, 242, 87, 42, 242, 86, 
-    42, 233, 194, 42, 233, 196, 42, 234, 179, 42, 234, 2, 42, 234, 9, 42, 
-    222, 17, 42, 221, 238, 42, 219, 130, 42, 220, 142, 42, 220, 141, 42, 248, 
-    219, 42, 248, 37, 42, 247, 122, 42, 216, 33, 42, 229, 201, 42, 228, 42, 
-    42, 242, 33, 42, 226, 85, 42, 226, 84, 42, 252, 189, 42, 225, 106, 42, 
-    225, 70, 42, 225, 71, 42, 251, 235, 42, 240, 222, 42, 240, 218, 42, 251, 
-    92, 42, 240, 205, 42, 241, 216, 42, 225, 160, 42, 225, 195, 42, 241, 199, 
-    42, 225, 192, 42, 225, 208, 42, 252, 62, 42, 225, 7, 42, 251, 181, 42, 
-    241, 57, 42, 224, 251, 42, 241, 49, 42, 241, 51, 42, 231, 202, 42, 231, 
-    198, 42, 231, 207, 42, 231, 151, 42, 231, 176, 42, 230, 198, 42, 230, 
-    177, 42, 230, 176, 42, 231, 75, 42, 231, 72, 42, 231, 76, 42, 211, 102, 
-    42, 211, 100, 42, 210, 201, 42, 222, 227, 42, 222, 231, 42, 222, 118, 42, 
-    222, 112, 42, 223, 86, 42, 223, 83, 42, 212, 38, 109, 217, 4, 16, 31, 
-    240, 240, 210, 86, 109, 217, 4, 16, 31, 240, 240, 110, 109, 217, 4, 16, 
-    31, 240, 240, 105, 109, 217, 4, 16, 31, 240, 240, 158, 109, 217, 4, 16, 
-    31, 240, 240, 161, 109, 217, 4, 16, 31, 240, 240, 189, 109, 217, 4, 16, 
-    31, 240, 240, 194, 109, 217, 4, 16, 31, 240, 240, 198, 109, 217, 4, 16, 
-    31, 240, 240, 195, 109, 217, 4, 16, 31, 240, 240, 200, 109, 217, 4, 16, 
-    31, 240, 240, 216, 248, 109, 217, 4, 16, 31, 240, 240, 245, 168, 109, 
-    217, 4, 16, 31, 240, 240, 215, 76, 109, 217, 4, 16, 31, 240, 240, 216, 
-    165, 109, 217, 4, 16, 31, 240, 240, 244, 6, 109, 217, 4, 16, 31, 240, 
-    240, 244, 119, 109, 217, 4, 16, 31, 240, 240, 219, 120, 109, 217, 4, 16, 
-    31, 240, 240, 220, 120, 109, 217, 4, 16, 31, 240, 240, 245, 191, 109, 
-    217, 4, 16, 31, 240, 240, 228, 198, 109, 217, 4, 16, 31, 240, 240, 215, 
-    73, 109, 217, 4, 16, 31, 240, 240, 215, 67, 109, 217, 4, 16, 31, 240, 
-    240, 215, 63, 109, 217, 4, 16, 31, 240, 240, 215, 64, 109, 217, 4, 16, 
-    31, 240, 240, 215, 69, 42, 240, 231, 42, 248, 222, 42, 253, 193, 42, 130, 
-    42, 226, 126, 42, 225, 226, 42, 247, 148, 42, 247, 149, 218, 234, 42, 
-    247, 149, 249, 109, 42, 235, 157, 42, 245, 92, 229, 206, 241, 217, 42, 
-    245, 92, 229, 206, 217, 175, 42, 245, 92, 229, 206, 217, 75, 42, 245, 92, 
-    229, 206, 231, 71, 42, 249, 158, 42, 226, 91, 254, 126, 42, 197, 42, 230, 
-    104, 61, 42, 185, 42, 176, 42, 234, 186, 42, 231, 130, 42, 243, 81, 42, 
-    251, 19, 42, 234, 185, 42, 225, 151, 42, 229, 82, 42, 230, 104, 245, 7, 
-    42, 230, 104, 243, 203, 42, 231, 16, 42, 234, 135, 42, 240, 164, 42, 234, 
-    95, 42, 230, 233, 42, 242, 217, 42, 216, 120, 42, 230, 104, 156, 42, 230, 
-    170, 42, 247, 158, 42, 234, 41, 42, 244, 46, 42, 228, 113, 42, 230, 104, 
-    193, 42, 230, 167, 42, 249, 240, 42, 234, 35, 42, 230, 168, 218, 234, 42, 
-    249, 241, 218, 234, 42, 232, 51, 218, 234, 42, 234, 36, 218, 234, 42, 
-    230, 168, 249, 109, 42, 249, 241, 249, 109, 42, 232, 51, 249, 109, 42, 
-    234, 36, 249, 109, 42, 232, 51, 117, 222, 92, 42, 232, 51, 117, 222, 93, 
-    218, 234, 42, 190, 42, 233, 252, 42, 230, 106, 42, 242, 152, 42, 223, 
-    177, 42, 223, 178, 117, 222, 92, 42, 223, 178, 117, 222, 93, 218, 234, 
-    42, 224, 163, 42, 228, 14, 42, 230, 104, 222, 92, 42, 230, 105, 42, 224, 
-    117, 42, 227, 177, 42, 230, 104, 214, 105, 42, 230, 50, 42, 233, 186, 42, 
-    230, 51, 231, 75, 42, 224, 116, 42, 227, 176, 42, 230, 104, 212, 98, 42, 
-    230, 44, 42, 233, 184, 42, 230, 45, 231, 75, 42, 235, 25, 226, 221, 42, 
-    232, 51, 226, 221, 42, 254, 137, 42, 251, 161, 42, 250, 215, 42, 250, 
-    192, 42, 251, 68, 117, 234, 135, 42, 249, 239, 42, 248, 143, 42, 242, 73, 
-    42, 162, 42, 240, 232, 42, 236, 0, 42, 234, 48, 42, 234, 36, 250, 251, 
-    42, 233, 220, 42, 232, 160, 42, 232, 159, 42, 232, 148, 42, 232, 64, 42, 
-    231, 131, 219, 80, 42, 230, 197, 42, 230, 153, 42, 225, 149, 42, 225, 20, 
-    42, 224, 220, 42, 224, 218, 42, 218, 228, 42, 218, 3, 42, 212, 24, 42, 
-    214, 106, 117, 193, 42, 115, 117, 193, 109, 217, 4, 16, 31, 248, 147, 
-    110, 109, 217, 4, 16, 31, 248, 147, 105, 109, 217, 4, 16, 31, 248, 147, 
-    158, 109, 217, 4, 16, 31, 248, 147, 161, 109, 217, 4, 16, 31, 248, 147, 
-    189, 109, 217, 4, 16, 31, 248, 147, 194, 109, 217, 4, 16, 31, 248, 147, 
-    198, 109, 217, 4, 16, 31, 248, 147, 195, 109, 217, 4, 16, 31, 248, 147, 
-    200, 109, 217, 4, 16, 31, 248, 147, 216, 248, 109, 217, 4, 16, 31, 248, 
-    147, 245, 168, 109, 217, 4, 16, 31, 248, 147, 215, 76, 109, 217, 4, 16, 
-    31, 248, 147, 216, 165, 109, 217, 4, 16, 31, 248, 147, 244, 6, 109, 217, 
-    4, 16, 31, 248, 147, 244, 119, 109, 217, 4, 16, 31, 248, 147, 219, 120, 
-    109, 217, 4, 16, 31, 248, 147, 220, 120, 109, 217, 4, 16, 31, 248, 147, 
-    245, 191, 109, 217, 4, 16, 31, 248, 147, 228, 198, 109, 217, 4, 16, 31, 
-    248, 147, 215, 73, 109, 217, 4, 16, 31, 248, 147, 215, 67, 109, 217, 4, 
-    16, 31, 248, 147, 215, 63, 109, 217, 4, 16, 31, 248, 147, 215, 64, 109, 
-    217, 4, 16, 31, 248, 147, 215, 69, 109, 217, 4, 16, 31, 248, 147, 215, 
-    70, 109, 217, 4, 16, 31, 248, 147, 215, 65, 109, 217, 4, 16, 31, 248, 
-    147, 215, 66, 109, 217, 4, 16, 31, 248, 147, 215, 72, 109, 217, 4, 16, 
-    31, 248, 147, 215, 68, 109, 217, 4, 16, 31, 248, 147, 216, 163, 109, 217, 
-    4, 16, 31, 248, 147, 216, 162, 42, 243, 119, 241, 193, 31, 216, 197, 249, 
-    141, 241, 224, 241, 193, 31, 216, 197, 223, 123, 245, 224, 241, 193, 31, 
-    247, 232, 253, 208, 216, 197, 252, 57, 241, 193, 31, 210, 223, 244, 39, 
-    241, 193, 31, 212, 59, 241, 193, 31, 249, 204, 241, 193, 31, 216, 197, 
-    254, 4, 241, 193, 31, 241, 61, 216, 39, 241, 193, 31, 4, 217, 62, 241, 
-    193, 31, 215, 238, 241, 193, 31, 225, 220, 241, 193, 31, 218, 159, 241, 
-    193, 31, 244, 140, 241, 193, 31, 242, 133, 224, 241, 241, 193, 31, 230, 
-    156, 241, 193, 31, 245, 127, 241, 193, 31, 244, 40, 241, 193, 31, 211, 
-    207, 226, 198, 216, 197, 248, 87, 241, 193, 31, 254, 52, 241, 193, 31, 
-    249, 186, 241, 193, 31, 251, 228, 216, 139, 241, 193, 31, 242, 150, 241, 
-    193, 31, 218, 246, 254, 71, 241, 193, 31, 223, 54, 241, 193, 31, 235, 
-    221, 241, 193, 31, 242, 133, 217, 62, 241, 193, 31, 230, 112, 249, 160, 
-    241, 193, 31, 242, 133, 224, 198, 241, 193, 31, 216, 197, 255, 19, 212, 
-    40, 241, 193, 31, 216, 197, 250, 9, 244, 97, 241, 193, 31, 235, 234, 241, 
-    193, 31, 246, 58, 241, 193, 31, 223, 57, 241, 193, 31, 242, 133, 224, 
-    225, 241, 193, 31, 224, 178, 241, 193, 31, 248, 162, 64, 216, 197, 232, 
-    231, 241, 193, 31, 216, 197, 244, 175, 241, 193, 31, 226, 164, 241, 193, 
-    31, 226, 245, 241, 193, 31, 248, 60, 241, 193, 31, 248, 80, 241, 193, 31, 
-    235, 248, 241, 193, 31, 251, 150, 241, 193, 31, 249, 222, 216, 43, 231, 
-    77, 241, 193, 31, 243, 88, 216, 39, 241, 193, 31, 224, 126, 214, 154, 
-    241, 193, 31, 226, 163, 241, 193, 31, 216, 197, 212, 13, 241, 193, 31, 
-    223, 46, 241, 193, 31, 216, 197, 250, 221, 241, 193, 31, 216, 197, 254, 
-    0, 216, 134, 241, 193, 31, 216, 197, 234, 180, 218, 135, 230, 116, 241, 
-    193, 31, 248, 33, 241, 193, 31, 216, 197, 231, 153, 231, 203, 241, 193, 
-    31, 255, 20, 241, 193, 31, 216, 197, 212, 54, 241, 193, 31, 216, 197, 
-    243, 48, 211, 239, 241, 193, 31, 216, 197, 235, 53, 233, 108, 241, 193, 
-    31, 247, 185, 241, 193, 31, 232, 221, 241, 193, 31, 235, 224, 215, 188, 
-    241, 193, 31, 4, 224, 198, 241, 193, 31, 254, 218, 249, 213, 241, 193, 
-    31, 252, 60, 249, 213, 8, 3, 235, 161, 8, 3, 235, 154, 8, 3, 73, 8, 3, 
-    235, 183, 8, 3, 236, 59, 8, 3, 236, 42, 8, 3, 236, 61, 8, 3, 236, 60, 8, 
-    3, 253, 207, 8, 3, 253, 170, 8, 3, 61, 8, 3, 254, 73, 8, 3, 214, 164, 8, 
-    3, 214, 167, 8, 3, 214, 165, 8, 3, 226, 141, 8, 3, 226, 115, 8, 3, 76, 8, 
-    3, 226, 176, 8, 3, 245, 36, 8, 3, 75, 8, 3, 211, 195, 8, 3, 251, 229, 8, 
-    3, 251, 226, 8, 3, 252, 7, 8, 3, 251, 239, 8, 3, 251, 252, 8, 3, 251, 
-    251, 8, 3, 251, 254, 8, 3, 251, 253, 8, 3, 252, 122, 8, 3, 252, 114, 8, 
-    3, 252, 192, 8, 3, 252, 143, 8, 3, 251, 102, 8, 3, 251, 106, 8, 3, 251, 
-    103, 8, 3, 251, 180, 8, 3, 251, 164, 8, 3, 251, 206, 8, 3, 251, 186, 8, 
-    3, 252, 22, 8, 3, 252, 76, 8, 3, 252, 34, 8, 3, 251, 88, 8, 3, 251, 85, 
-    8, 3, 251, 126, 8, 3, 251, 101, 8, 3, 251, 95, 8, 3, 251, 99, 8, 3, 251, 
-    73, 8, 3, 251, 71, 8, 3, 251, 78, 8, 3, 251, 76, 8, 3, 251, 74, 8, 3, 
-    251, 75, 8, 3, 225, 50, 8, 3, 225, 46, 8, 3, 225, 109, 8, 3, 225, 60, 8, 
-    3, 225, 76, 8, 3, 225, 103, 8, 3, 225, 99, 8, 3, 225, 241, 8, 3, 225, 
-    231, 8, 3, 190, 8, 3, 226, 22, 8, 3, 224, 136, 8, 3, 224, 138, 8, 3, 224, 
-    137, 8, 3, 224, 234, 8, 3, 224, 223, 8, 3, 225, 17, 8, 3, 224, 246, 8, 3, 
-    224, 122, 8, 3, 224, 118, 8, 3, 224, 151, 8, 3, 224, 135, 8, 3, 224, 127, 
-    8, 3, 224, 133, 8, 3, 224, 101, 8, 3, 224, 100, 8, 3, 224, 105, 8, 3, 
-    224, 104, 8, 3, 224, 102, 8, 3, 224, 103, 8, 3, 252, 97, 8, 3, 252, 96, 
-    8, 3, 252, 103, 8, 3, 252, 98, 8, 3, 252, 100, 8, 3, 252, 99, 8, 3, 252, 
-    102, 8, 3, 252, 101, 8, 3, 252, 109, 8, 3, 252, 108, 8, 3, 252, 112, 8, 
-    3, 252, 110, 8, 3, 252, 88, 8, 3, 252, 90, 8, 3, 252, 89, 8, 3, 252, 93, 
-    8, 3, 252, 92, 8, 3, 252, 95, 8, 3, 252, 94, 8, 3, 252, 104, 8, 3, 252, 
-    107, 8, 3, 252, 105, 8, 3, 252, 84, 8, 3, 252, 83, 8, 3, 252, 91, 8, 3, 
-    252, 87, 8, 3, 252, 85, 8, 3, 252, 86, 8, 3, 252, 80, 8, 3, 252, 79, 8, 
-    3, 252, 82, 8, 3, 252, 81, 8, 3, 229, 170, 8, 3, 229, 169, 8, 3, 229, 
-    175, 8, 3, 229, 171, 8, 3, 229, 172, 8, 3, 229, 174, 8, 3, 229, 173, 8, 
-    3, 229, 178, 8, 3, 229, 177, 8, 3, 229, 180, 8, 3, 229, 179, 8, 3, 229, 
-    166, 8, 3, 229, 165, 8, 3, 229, 168, 8, 3, 229, 167, 8, 3, 229, 159, 8, 
-    3, 229, 158, 8, 3, 229, 163, 8, 3, 229, 162, 8, 3, 229, 160, 8, 3, 229, 
-    161, 8, 3, 229, 153, 8, 3, 229, 152, 8, 3, 229, 157, 8, 3, 229, 156, 8, 
-    3, 229, 154, 8, 3, 229, 155, 8, 3, 241, 111, 8, 3, 241, 110, 8, 3, 241, 
-    116, 8, 3, 241, 112, 8, 3, 241, 113, 8, 3, 241, 115, 8, 3, 241, 114, 8, 
-    3, 241, 119, 8, 3, 241, 118, 8, 3, 241, 121, 8, 3, 241, 120, 8, 3, 241, 
-    102, 8, 3, 241, 104, 8, 3, 241, 103, 8, 3, 241, 107, 8, 3, 241, 106, 8, 
-    3, 241, 109, 8, 3, 241, 108, 8, 3, 241, 98, 8, 3, 241, 97, 8, 3, 241, 
-    105, 8, 3, 241, 101, 8, 3, 241, 99, 8, 3, 241, 100, 8, 3, 241, 92, 8, 3, 
-    241, 96, 8, 3, 241, 95, 8, 3, 241, 93, 8, 3, 241, 94, 8, 3, 230, 173, 8, 
-    3, 230, 172, 8, 3, 230, 231, 8, 3, 230, 179, 8, 3, 230, 204, 8, 3, 230, 
-    222, 8, 3, 230, 220, 8, 3, 231, 140, 8, 3, 231, 135, 8, 3, 185, 8, 3, 
-    231, 173, 8, 3, 230, 75, 8, 3, 230, 74, 8, 3, 230, 78, 8, 3, 230, 76, 8, 
-    3, 230, 122, 8, 3, 230, 108, 8, 3, 230, 162, 8, 3, 230, 127, 8, 3, 231, 
-    27, 8, 3, 231, 92, 8, 3, 230, 56, 8, 3, 230, 52, 8, 3, 230, 103, 8, 3, 
-    230, 71, 8, 3, 230, 64, 8, 3, 230, 69, 8, 3, 230, 29, 8, 3, 230, 28, 8, 
-    3, 230, 34, 8, 3, 230, 31, 8, 3, 244, 84, 8, 3, 244, 79, 8, 3, 244, 122, 
-    8, 3, 244, 99, 8, 3, 244, 168, 8, 3, 244, 159, 8, 3, 244, 197, 8, 3, 244, 
-    171, 8, 3, 244, 4, 8, 3, 244, 44, 8, 3, 244, 28, 8, 3, 243, 219, 8, 3, 
-    243, 218, 8, 3, 243, 235, 8, 3, 243, 224, 8, 3, 243, 222, 8, 3, 243, 223, 
-    8, 3, 243, 206, 8, 3, 243, 205, 8, 3, 243, 209, 8, 3, 243, 207, 8, 3, 
-    213, 144, 8, 3, 213, 139, 8, 3, 213, 176, 8, 3, 213, 153, 8, 3, 213, 166, 
-    8, 3, 213, 163, 8, 3, 213, 168, 8, 3, 213, 167, 8, 3, 214, 7, 8, 3, 214, 
-    2, 8, 3, 214, 27, 8, 3, 214, 18, 8, 3, 213, 125, 8, 3, 213, 121, 8, 3, 
-    213, 138, 8, 3, 213, 126, 8, 3, 213, 178, 8, 3, 213, 244, 8, 3, 212, 110, 
-    8, 3, 212, 108, 8, 3, 212, 116, 8, 3, 212, 113, 8, 3, 212, 111, 8, 3, 
-    212, 112, 8, 3, 212, 102, 8, 3, 212, 101, 8, 3, 212, 106, 8, 3, 212, 105, 
-    8, 3, 212, 103, 8, 3, 212, 104, 8, 3, 247, 179, 8, 3, 247, 167, 8, 3, 
-    248, 4, 8, 3, 247, 204, 8, 3, 247, 237, 8, 3, 247, 241, 8, 3, 247, 240, 
-    8, 3, 248, 153, 8, 3, 248, 148, 8, 3, 248, 222, 8, 3, 248, 173, 8, 3, 
-    246, 63, 8, 3, 246, 64, 8, 3, 247, 121, 8, 3, 246, 103, 8, 3, 247, 146, 
-    8, 3, 247, 123, 8, 3, 248, 31, 8, 3, 248, 91, 8, 3, 248, 46, 8, 3, 246, 
-    54, 8, 3, 246, 52, 8, 3, 246, 79, 8, 3, 246, 62, 8, 3, 246, 57, 8, 3, 
-    246, 60, 8, 3, 216, 68, 8, 3, 216, 62, 8, 3, 216, 118, 8, 3, 216, 77, 8, 
-    3, 216, 110, 8, 3, 216, 112, 8, 3, 216, 111, 8, 3, 217, 47, 8, 3, 217, 
+    246, 243, 46, 47, 247, 114, 46, 47, 246, 130, 46, 47, 247, 1, 46, 47, 
+    246, 193, 46, 47, 247, 64, 46, 47, 246, 161, 46, 47, 247, 32, 46, 47, 
+    246, 224, 46, 47, 247, 95, 46, 47, 246, 145, 46, 47, 247, 16, 46, 47, 
+    246, 208, 46, 47, 247, 79, 46, 47, 246, 176, 46, 47, 247, 47, 46, 47, 
+    246, 239, 46, 47, 247, 110, 46, 47, 246, 137, 46, 47, 247, 8, 46, 47, 
+    246, 200, 46, 47, 247, 71, 46, 47, 246, 168, 46, 47, 247, 39, 46, 47, 
+    246, 231, 46, 47, 247, 102, 46, 47, 246, 152, 46, 47, 247, 23, 46, 47, 
+    246, 215, 46, 47, 247, 86, 46, 47, 246, 183, 46, 47, 247, 54, 46, 47, 
+    246, 246, 46, 47, 247, 117, 46, 47, 246, 128, 46, 47, 246, 255, 46, 47, 
+    246, 191, 46, 47, 247, 62, 46, 47, 246, 159, 46, 47, 247, 30, 46, 47, 
+    246, 222, 46, 47, 247, 93, 46, 47, 246, 143, 46, 47, 247, 14, 46, 47, 
+    246, 206, 46, 47, 247, 77, 46, 47, 246, 174, 46, 47, 247, 45, 46, 47, 
+    246, 237, 46, 47, 247, 108, 46, 47, 246, 135, 46, 47, 247, 6, 46, 47, 
+    246, 198, 46, 47, 247, 69, 46, 47, 246, 166, 46, 47, 247, 37, 46, 47, 
+    246, 229, 46, 47, 247, 100, 46, 47, 246, 150, 46, 47, 247, 21, 46, 47, 
+    246, 213, 46, 47, 247, 84, 46, 47, 246, 181, 46, 47, 247, 52, 46, 47, 
+    246, 244, 46, 47, 247, 115, 46, 47, 246, 131, 46, 47, 247, 2, 46, 47, 
+    246, 194, 46, 47, 247, 65, 46, 47, 246, 162, 46, 47, 247, 33, 46, 47, 
+    246, 225, 46, 47, 247, 96, 46, 47, 246, 146, 46, 47, 247, 17, 46, 47, 
+    246, 209, 46, 47, 247, 80, 46, 47, 246, 177, 46, 47, 247, 48, 46, 47, 
+    246, 240, 46, 47, 247, 111, 46, 47, 246, 138, 46, 47, 247, 9, 46, 47, 
+    246, 201, 46, 47, 247, 72, 46, 47, 246, 169, 46, 47, 247, 40, 46, 47, 
+    246, 232, 46, 47, 247, 103, 46, 47, 246, 153, 46, 47, 247, 24, 46, 47, 
+    246, 216, 46, 47, 247, 87, 46, 47, 246, 184, 46, 47, 247, 55, 46, 47, 
+    246, 247, 46, 47, 247, 118, 97, 215, 58, 80, 2, 67, 91, 97, 215, 58, 80, 
+    2, 52, 67, 91, 140, 52, 80, 2, 67, 91, 97, 52, 80, 2, 67, 91, 43, 44, 52, 
+    80, 2, 67, 91, 97, 215, 58, 80, 243, 251, 130, 140, 52, 80, 243, 251, 
+    130, 97, 52, 80, 243, 251, 130, 246, 112, 80, 2, 203, 91, 214, 153, 80, 
+    2, 203, 91, 214, 153, 215, 212, 75, 246, 112, 215, 212, 75, 140, 52, 248, 
+    165, 75, 97, 52, 248, 165, 75, 140, 215, 212, 248, 165, 75, 97, 215, 212, 
+    248, 165, 75, 97, 215, 58, 215, 212, 248, 165, 75, 97, 80, 2, 246, 126, 
+    218, 141, 214, 153, 80, 216, 43, 130, 246, 112, 80, 216, 43, 130, 97, 80, 
+    2, 217, 79, 2, 67, 91, 97, 80, 2, 217, 79, 2, 52, 67, 91, 97, 215, 58, 
+    80, 2, 217, 78, 97, 215, 58, 80, 2, 217, 79, 2, 67, 91, 97, 215, 58, 80, 
+    2, 217, 79, 2, 52, 67, 91, 140, 254, 3, 97, 254, 3, 140, 52, 254, 3, 97, 
+    52, 254, 3, 140, 80, 216, 43, 85, 248, 0, 97, 80, 216, 43, 85, 248, 0, 
+    140, 80, 243, 251, 252, 149, 216, 43, 85, 248, 0, 97, 80, 243, 251, 252, 
+    149, 216, 43, 85, 248, 0, 228, 61, 212, 9, 22, 219, 30, 245, 228, 75, 
+    228, 61, 245, 228, 22, 219, 30, 212, 9, 75, 228, 61, 212, 9, 80, 2, 103, 
+    228, 61, 245, 228, 80, 2, 103, 219, 30, 245, 228, 80, 2, 103, 219, 30, 
+    212, 9, 80, 2, 103, 228, 61, 212, 9, 80, 22, 228, 61, 245, 228, 75, 228, 
+    61, 245, 228, 80, 22, 219, 30, 245, 228, 75, 219, 30, 245, 228, 80, 22, 
+    219, 30, 212, 9, 75, 219, 30, 212, 9, 80, 22, 228, 61, 212, 9, 75, 222, 
+    231, 248, 7, 249, 133, 244, 183, 248, 6, 244, 183, 248, 7, 249, 133, 222, 
+    231, 248, 6, 219, 30, 245, 228, 80, 249, 133, 228, 61, 245, 228, 75, 228, 
+    61, 245, 228, 80, 249, 133, 219, 30, 245, 228, 75, 244, 183, 248, 7, 249, 
+    133, 228, 61, 245, 228, 75, 222, 231, 248, 7, 249, 133, 219, 30, 245, 
+    228, 75, 228, 61, 245, 228, 80, 249, 133, 228, 61, 212, 9, 75, 228, 61, 
+    212, 9, 80, 249, 133, 228, 61, 245, 228, 75, 212, 36, 80, 225, 10, 247, 
+    203, 222, 254, 80, 225, 10, 97, 216, 189, 249, 98, 214, 152, 80, 225, 10, 
+    97, 216, 189, 249, 98, 246, 111, 80, 225, 10, 246, 112, 216, 189, 249, 
+    98, 233, 43, 80, 225, 10, 246, 112, 216, 189, 249, 98, 222, 244, 222, 
+    247, 254, 34, 250, 10, 75, 233, 46, 254, 34, 254, 96, 75, 216, 15, 254, 
+    34, 254, 96, 75, 251, 183, 254, 34, 254, 96, 75, 216, 15, 254, 34, 250, 
+    10, 80, 2, 230, 186, 216, 15, 254, 34, 254, 96, 80, 2, 225, 25, 232, 114, 
+    44, 220, 154, 250, 10, 75, 232, 114, 43, 220, 154, 254, 96, 75, 254, 96, 
+    250, 8, 250, 44, 75, 250, 10, 250, 8, 250, 44, 75, 97, 80, 72, 219, 253, 
+    140, 75, 140, 80, 72, 219, 253, 97, 75, 219, 253, 97, 80, 72, 140, 75, 
+    97, 80, 2, 96, 51, 140, 80, 2, 96, 51, 97, 80, 216, 140, 211, 178, 43, 
+    44, 80, 216, 140, 4, 250, 43, 214, 153, 215, 58, 80, 243, 251, 4, 250, 
+    43, 43, 252, 147, 120, 44, 252, 147, 124, 242, 5, 43, 252, 147, 124, 44, 
+    252, 147, 120, 242, 5, 120, 252, 147, 44, 124, 252, 147, 43, 242, 5, 120, 
+    252, 147, 43, 124, 252, 147, 44, 242, 5, 43, 252, 147, 120, 44, 252, 147, 
+    120, 242, 5, 120, 252, 147, 44, 124, 252, 147, 44, 242, 5, 43, 252, 147, 
+    124, 44, 252, 147, 124, 242, 5, 120, 252, 147, 43, 124, 252, 147, 43, 
+    242, 5, 140, 242, 6, 2, 252, 147, 120, 216, 43, 130, 97, 242, 6, 2, 252, 
+    147, 120, 216, 43, 130, 214, 153, 242, 6, 2, 252, 147, 44, 216, 43, 130, 
+    246, 112, 242, 6, 2, 252, 147, 44, 216, 43, 130, 140, 242, 6, 2, 252, 
+    147, 124, 216, 43, 130, 97, 242, 6, 2, 252, 147, 124, 216, 43, 130, 214, 
+    153, 242, 6, 2, 252, 147, 43, 216, 43, 130, 246, 112, 242, 6, 2, 252, 
+    147, 43, 216, 43, 130, 140, 242, 6, 2, 252, 147, 120, 243, 251, 130, 97, 
+    242, 6, 2, 252, 147, 120, 243, 251, 130, 214, 153, 242, 6, 2, 252, 147, 
+    44, 243, 251, 130, 246, 112, 242, 6, 2, 252, 147, 44, 243, 251, 130, 140, 
+    242, 6, 2, 252, 147, 124, 243, 251, 130, 97, 242, 6, 2, 252, 147, 124, 
+    243, 251, 130, 214, 153, 242, 6, 2, 252, 147, 43, 243, 251, 130, 246, 
+    112, 242, 6, 2, 252, 147, 43, 243, 251, 130, 140, 242, 6, 2, 252, 147, 
+    120, 72, 140, 242, 6, 2, 252, 147, 246, 114, 214, 153, 242, 6, 2, 252, 
+    147, 43, 252, 38, 214, 153, 242, 6, 2, 252, 147, 222, 254, 97, 242, 6, 2, 
+    252, 147, 120, 72, 97, 242, 6, 2, 252, 147, 246, 114, 246, 112, 242, 6, 
+    2, 252, 147, 43, 252, 38, 246, 112, 242, 6, 2, 252, 147, 222, 254, 140, 
+    242, 6, 2, 252, 147, 120, 72, 97, 242, 6, 2, 252, 147, 214, 163, 140, 
+    242, 6, 2, 252, 147, 124, 72, 97, 242, 6, 2, 252, 147, 246, 114, 97, 242, 
+    6, 2, 252, 147, 120, 72, 140, 242, 6, 2, 252, 147, 214, 163, 97, 242, 6, 
+    2, 252, 147, 124, 72, 140, 242, 6, 2, 252, 147, 246, 114, 140, 242, 6, 2, 
+    252, 147, 120, 72, 200, 248, 164, 140, 242, 6, 2, 252, 147, 124, 252, 51, 
+    200, 248, 164, 97, 242, 6, 2, 252, 147, 120, 72, 200, 248, 164, 97, 242, 
+    6, 2, 252, 147, 124, 252, 51, 200, 248, 164, 214, 153, 242, 6, 2, 252, 
+    147, 43, 252, 38, 246, 112, 242, 6, 2, 252, 147, 222, 254, 246, 112, 242, 
+    6, 2, 252, 147, 43, 252, 38, 214, 153, 242, 6, 2, 252, 147, 222, 254, 44, 
+    52, 80, 2, 222, 185, 241, 242, 245, 106, 5, 72, 97, 75, 216, 90, 226, 
+    172, 72, 97, 75, 140, 80, 72, 216, 90, 226, 171, 97, 80, 72, 216, 90, 
+    226, 171, 97, 80, 72, 254, 156, 128, 112, 233, 21, 72, 140, 75, 140, 80, 
+    216, 140, 233, 20, 242, 137, 72, 97, 75, 218, 65, 72, 97, 75, 140, 80, 
+    216, 140, 218, 64, 218, 23, 72, 140, 75, 43, 244, 99, 217, 78, 44, 244, 
+    99, 217, 78, 120, 244, 99, 217, 78, 124, 244, 99, 217, 78, 215, 212, 67, 
+    252, 149, 248, 68, 210, 160, 189, 218, 244, 210, 160, 189, 215, 49, 249, 
+    234, 43, 71, 249, 107, 127, 44, 71, 249, 107, 127, 43, 71, 226, 7, 44, 
+    71, 226, 7, 210, 160, 189, 43, 236, 22, 127, 210, 160, 189, 44, 236, 22, 
+    127, 210, 160, 189, 43, 251, 250, 127, 210, 160, 189, 44, 251, 250, 127, 
+    43, 42, 251, 166, 2, 214, 183, 44, 42, 251, 166, 2, 214, 183, 43, 42, 
+    251, 166, 2, 216, 116, 236, 7, 216, 15, 249, 168, 44, 42, 251, 166, 2, 
+    216, 116, 236, 7, 251, 183, 249, 168, 43, 42, 251, 166, 2, 216, 116, 236, 
+    7, 251, 183, 249, 168, 44, 42, 251, 166, 2, 216, 116, 236, 7, 216, 15, 
+    249, 168, 43, 254, 118, 251, 166, 2, 247, 128, 44, 254, 118, 251, 166, 2, 
+    247, 128, 43, 254, 34, 233, 21, 127, 44, 254, 34, 242, 137, 127, 52, 43, 
+    254, 34, 242, 137, 127, 52, 44, 254, 34, 233, 21, 127, 43, 85, 216, 7, 
+    220, 55, 127, 44, 85, 216, 7, 220, 55, 127, 246, 126, 244, 143, 67, 210, 
+    35, 232, 219, 231, 93, 254, 118, 226, 174, 233, 52, 44, 254, 118, 214, 
+    12, 2, 218, 236, 231, 93, 44, 254, 118, 2, 247, 128, 254, 118, 2, 222, 
+    94, 235, 222, 255, 12, 254, 117, 219, 1, 254, 118, 226, 174, 233, 52, 
+    219, 1, 254, 118, 226, 174, 214, 163, 215, 94, 254, 117, 223, 52, 254, 
+    117, 254, 118, 2, 214, 183, 223, 52, 254, 118, 2, 214, 183, 226, 252, 
+    254, 118, 226, 174, 214, 163, 226, 252, 254, 118, 226, 174, 246, 114, 
+    231, 93, 254, 118, 2, 204, 254, 13, 245, 148, 236, 7, 80, 225, 10, 120, 
+    22, 222, 254, 231, 93, 254, 118, 2, 204, 254, 13, 245, 148, 236, 7, 80, 
+    225, 10, 120, 22, 233, 52, 231, 93, 254, 118, 2, 204, 254, 13, 245, 148, 
+    236, 7, 80, 225, 10, 124, 22, 222, 254, 231, 93, 254, 118, 2, 204, 254, 
+    13, 245, 148, 236, 7, 80, 225, 10, 124, 22, 233, 52, 231, 93, 254, 118, 
+    2, 204, 254, 13, 245, 148, 236, 7, 80, 225, 10, 44, 22, 214, 163, 231, 
+    93, 254, 118, 2, 204, 254, 13, 245, 148, 236, 7, 80, 225, 10, 43, 22, 
+    214, 163, 231, 93, 254, 118, 2, 204, 254, 13, 245, 148, 236, 7, 80, 225, 
+    10, 44, 22, 246, 114, 231, 93, 254, 118, 2, 204, 254, 13, 245, 148, 236, 
+    7, 80, 225, 10, 43, 22, 246, 114, 223, 52, 245, 160, 220, 129, 245, 160, 
+    220, 130, 2, 226, 127, 245, 160, 220, 130, 2, 4, 250, 44, 48, 245, 160, 
+    220, 130, 2, 44, 80, 48, 245, 160, 220, 130, 2, 43, 80, 48, 250, 44, 2, 
+    203, 130, 37, 67, 130, 37, 226, 11, 37, 223, 53, 219, 48, 37, 225, 174, 
+    250, 44, 247, 181, 251, 86, 203, 252, 149, 22, 216, 15, 163, 247, 181, 
+    251, 86, 67, 130, 250, 44, 2, 218, 25, 211, 178, 37, 254, 95, 247, 177, 
+    50, 120, 80, 216, 140, 250, 43, 37, 71, 251, 121, 37, 251, 121, 37, 233, 
+    20, 37, 242, 136, 250, 44, 2, 4, 250, 44, 216, 43, 216, 197, 222, 254, 
+    250, 44, 2, 113, 203, 218, 93, 216, 43, 216, 197, 222, 254, 92, 222, 231, 
+    248, 7, 219, 97, 92, 244, 183, 248, 7, 219, 97, 92, 253, 224, 92, 4, 250, 
+    43, 92, 218, 236, 113, 235, 71, 218, 234, 215, 227, 2, 59, 48, 215, 227, 
+    2, 214, 183, 222, 94, 236, 7, 215, 226, 215, 227, 2, 220, 136, 253, 215, 
+    251, 182, 44, 215, 227, 72, 43, 215, 226, 43, 215, 227, 252, 38, 67, 130, 
+    67, 252, 149, 252, 38, 44, 215, 226, 251, 173, 2, 43, 163, 251, 229, 251, 
+    173, 2, 44, 163, 251, 229, 85, 251, 172, 30, 2, 43, 163, 251, 229, 30, 2, 
+    44, 163, 251, 229, 71, 240, 243, 85, 240, 243, 43, 211, 244, 244, 143, 
+    44, 211, 244, 244, 143, 43, 52, 211, 244, 244, 143, 44, 52, 211, 244, 
+    244, 143, 235, 255, 235, 241, 216, 113, 115, 235, 241, 235, 242, 229, 
+    107, 2, 67, 130, 246, 120, 230, 92, 42, 2, 249, 189, 226, 131, 235, 253, 
+    253, 245, 219, 221, 224, 183, 245, 106, 5, 22, 219, 99, 226, 11, 245, 
+    106, 5, 22, 219, 99, 226, 12, 2, 216, 90, 48, 240, 111, 216, 43, 22, 219, 
+    99, 226, 11, 242, 190, 218, 157, 216, 186, 246, 113, 215, 227, 2, 43, 
+    163, 251, 229, 246, 113, 215, 227, 2, 44, 163, 251, 229, 85, 248, 1, 2, 
+    124, 75, 85, 232, 110, 71, 250, 44, 2, 124, 75, 85, 250, 44, 2, 124, 75, 
+    245, 93, 71, 218, 236, 245, 93, 85, 218, 236, 245, 93, 71, 248, 0, 245, 
+    93, 85, 248, 0, 245, 93, 71, 250, 43, 245, 93, 85, 250, 43, 222, 134, 
+    223, 53, 219, 49, 226, 171, 219, 49, 2, 226, 127, 223, 53, 219, 49, 2, 
+    203, 91, 252, 1, 219, 48, 252, 1, 223, 53, 219, 48, 52, 225, 25, 215, 
+    212, 225, 25, 233, 48, 249, 99, 254, 118, 127, 222, 250, 249, 99, 254, 
+    118, 127, 216, 79, 230, 184, 230, 29, 37, 59, 226, 171, 230, 29, 37, 96, 
+    226, 171, 230, 29, 37, 30, 226, 171, 230, 29, 214, 176, 226, 172, 2, 247, 
+    128, 230, 29, 214, 176, 226, 172, 2, 225, 25, 230, 29, 42, 235, 206, 226, 
+    171, 230, 29, 42, 214, 176, 226, 171, 113, 232, 152, 22, 226, 171, 113, 
+    232, 152, 177, 226, 171, 230, 29, 30, 226, 171, 230, 159, 113, 218, 44, 
+    218, 42, 2, 235, 218, 224, 27, 235, 219, 226, 171, 244, 107, 226, 3, 235, 
+    218, 235, 219, 2, 52, 91, 235, 219, 253, 181, 2, 219, 97, 250, 40, 243, 
+    233, 254, 96, 235, 216, 232, 220, 235, 217, 2, 223, 118, 225, 241, 254, 
+    10, 225, 4, 232, 220, 235, 217, 2, 220, 154, 225, 241, 254, 10, 225, 4, 
+    232, 220, 235, 217, 228, 57, 236, 1, 216, 197, 225, 4, 235, 219, 254, 10, 
+    116, 225, 14, 226, 171, 224, 21, 235, 219, 226, 171, 235, 219, 2, 140, 
+    80, 2, 103, 235, 219, 2, 30, 50, 235, 219, 2, 235, 205, 235, 219, 2, 214, 
+    175, 235, 219, 2, 226, 127, 235, 219, 2, 214, 183, 235, 72, 233, 91, 43, 
+    215, 227, 226, 171, 210, 160, 189, 221, 203, 249, 217, 210, 160, 189, 
+    221, 203, 225, 59, 210, 160, 189, 221, 203, 224, 179, 96, 5, 2, 4, 250, 
+    44, 48, 96, 5, 2, 250, 39, 255, 24, 48, 96, 5, 2, 216, 90, 48, 96, 5, 2, 
+    59, 51, 96, 5, 2, 216, 90, 51, 96, 5, 2, 218, 66, 105, 96, 5, 2, 85, 215, 
+    226, 230, 187, 5, 2, 249, 228, 48, 230, 187, 5, 2, 59, 51, 230, 187, 5, 
+    2, 244, 183, 247, 126, 230, 187, 5, 2, 222, 231, 247, 126, 96, 5, 236, 7, 
+    43, 163, 250, 43, 96, 5, 236, 7, 44, 163, 250, 43, 213, 254, 177, 249, 
+    139, 224, 183, 230, 89, 5, 2, 59, 48, 230, 89, 5, 2, 214, 183, 220, 151, 
+    224, 184, 2, 251, 183, 250, 7, 219, 79, 224, 183, 230, 89, 5, 236, 7, 43, 
+    163, 250, 43, 230, 89, 5, 236, 7, 44, 163, 250, 43, 37, 230, 89, 5, 2, 
+    250, 39, 255, 23, 230, 89, 5, 236, 7, 52, 250, 43, 37, 247, 177, 50, 96, 
+    5, 236, 7, 215, 226, 230, 187, 5, 236, 7, 215, 226, 230, 89, 5, 236, 7, 
+    215, 226, 235, 213, 224, 183, 222, 245, 235, 213, 224, 183, 210, 160, 
+    189, 223, 93, 249, 217, 254, 142, 177, 249, 173, 235, 206, 2, 247, 128, 
+    214, 176, 2, 230, 187, 50, 214, 176, 2, 226, 127, 235, 206, 2, 226, 127, 
+    235, 206, 2, 232, 152, 254, 126, 214, 176, 2, 232, 152, 226, 162, 214, 
+    176, 72, 235, 205, 235, 206, 72, 214, 175, 214, 176, 72, 252, 149, 72, 
+    235, 205, 235, 206, 72, 252, 149, 72, 214, 175, 214, 176, 252, 38, 22, 
+    235, 71, 2, 214, 175, 235, 206, 252, 38, 22, 235, 71, 2, 235, 205, 250, 
+    8, 214, 176, 2, 220, 135, 250, 8, 235, 206, 2, 220, 135, 52, 42, 235, 
+    205, 52, 42, 214, 175, 250, 8, 214, 176, 2, 220, 136, 22, 219, 79, 224, 
+    183, 232, 152, 22, 2, 59, 48, 232, 152, 177, 2, 59, 48, 52, 232, 152, 
+    254, 126, 52, 232, 152, 226, 162, 113, 235, 207, 232, 152, 254, 126, 113, 
+    235, 207, 232, 152, 226, 162, 219, 87, 233, 91, 226, 162, 219, 87, 233, 
+    91, 254, 126, 232, 152, 177, 226, 125, 232, 152, 254, 126, 232, 152, 22, 
+    2, 230, 229, 218, 141, 232, 152, 177, 2, 230, 229, 218, 141, 232, 152, 
+    22, 2, 203, 248, 164, 232, 152, 177, 2, 203, 248, 164, 232, 152, 22, 2, 
+    52, 226, 127, 232, 152, 22, 2, 214, 183, 232, 152, 22, 2, 52, 214, 183, 
+    4, 213, 251, 2, 214, 183, 232, 152, 177, 2, 52, 226, 127, 232, 152, 177, 
+    2, 52, 214, 183, 210, 160, 189, 247, 137, 254, 87, 210, 160, 189, 223, 
+    151, 254, 87, 245, 106, 5, 2, 59, 51, 240, 111, 2, 59, 48, 215, 212, 203, 
+    252, 149, 2, 52, 67, 91, 215, 212, 203, 252, 149, 2, 215, 212, 67, 91, 
+    216, 90, 226, 172, 2, 59, 48, 216, 90, 226, 172, 2, 222, 231, 247, 126, 
+    219, 164, 230, 187, 219, 163, 249, 207, 2, 59, 48, 245, 106, 2, 253, 224, 
+    254, 156, 128, 216, 43, 2, 250, 39, 255, 23, 254, 56, 128, 177, 128, 112, 
+    245, 106, 5, 72, 96, 50, 96, 5, 72, 245, 106, 50, 245, 106, 5, 72, 216, 
+    90, 226, 171, 52, 249, 235, 245, 107, 113, 249, 202, 245, 106, 219, 178, 
+    134, 249, 202, 245, 106, 219, 178, 245, 106, 5, 2, 113, 170, 72, 22, 113, 
+    170, 51, 245, 102, 2, 244, 19, 170, 48, 233, 21, 2, 250, 44, 235, 222, 
+    242, 137, 2, 250, 44, 235, 222, 233, 21, 2, 224, 16, 164, 48, 242, 137, 
+    2, 224, 16, 164, 48, 233, 21, 177, 219, 99, 128, 112, 242, 137, 177, 219, 
+    99, 128, 112, 233, 21, 177, 219, 99, 128, 216, 43, 2, 59, 235, 222, 242, 
+    137, 177, 219, 99, 128, 216, 43, 2, 59, 235, 222, 233, 21, 177, 219, 99, 
+    128, 216, 43, 2, 59, 48, 242, 137, 177, 219, 99, 128, 216, 43, 2, 59, 48, 
+    233, 21, 177, 219, 99, 128, 216, 43, 2, 59, 72, 222, 254, 242, 137, 177, 
+    219, 99, 128, 216, 43, 2, 59, 72, 233, 52, 233, 21, 177, 254, 57, 242, 
+    137, 177, 254, 57, 233, 21, 22, 219, 155, 228, 57, 128, 112, 242, 137, 
+    22, 219, 155, 228, 57, 128, 112, 233, 21, 22, 228, 57, 254, 57, 242, 137, 
+    22, 228, 57, 254, 57, 233, 21, 72, 246, 119, 128, 72, 242, 136, 242, 137, 
+    72, 246, 119, 128, 72, 233, 20, 233, 21, 72, 219, 164, 177, 245, 107, 
+    242, 137, 72, 219, 164, 177, 245, 107, 233, 21, 72, 219, 164, 72, 242, 
+    136, 242, 137, 72, 219, 164, 72, 233, 20, 233, 21, 72, 242, 137, 72, 246, 
+    119, 245, 107, 242, 137, 72, 233, 21, 72, 246, 119, 245, 107, 233, 21, 
+    72, 219, 99, 128, 72, 242, 137, 72, 219, 99, 245, 107, 242, 137, 72, 219, 
+    99, 128, 72, 233, 21, 72, 219, 99, 245, 107, 219, 99, 128, 216, 43, 177, 
+    233, 20, 219, 99, 128, 216, 43, 177, 242, 136, 219, 99, 128, 216, 43, 
+    177, 233, 21, 2, 59, 235, 222, 219, 99, 128, 216, 43, 177, 242, 137, 2, 
+    59, 235, 222, 246, 119, 128, 216, 43, 177, 233, 20, 246, 119, 128, 216, 
+    43, 177, 242, 136, 246, 119, 219, 99, 128, 216, 43, 177, 233, 20, 246, 
+    119, 219, 99, 128, 216, 43, 177, 242, 136, 219, 164, 177, 233, 20, 219, 
+    164, 177, 242, 136, 219, 164, 72, 233, 21, 72, 245, 106, 50, 219, 164, 
+    72, 242, 137, 72, 245, 106, 50, 52, 229, 96, 233, 20, 52, 229, 96, 242, 
+    136, 52, 229, 96, 233, 21, 2, 214, 183, 242, 137, 226, 125, 233, 20, 242, 
+    137, 252, 38, 233, 20, 233, 21, 250, 8, 251, 86, 249, 100, 242, 137, 250, 
+    8, 251, 86, 249, 100, 233, 21, 250, 8, 251, 86, 249, 101, 72, 219, 99, 
+    245, 107, 242, 137, 250, 8, 251, 86, 249, 101, 72, 219, 99, 245, 107, 
+    219, 80, 216, 201, 233, 89, 216, 201, 219, 80, 216, 202, 177, 128, 112, 
+    233, 89, 216, 202, 177, 128, 112, 245, 106, 5, 2, 251, 116, 48, 224, 206, 
+    72, 219, 155, 245, 106, 50, 218, 57, 72, 219, 155, 245, 106, 50, 224, 
+    206, 72, 219, 155, 228, 57, 128, 112, 218, 57, 72, 219, 155, 228, 57, 
+    128, 112, 224, 206, 72, 245, 106, 50, 218, 57, 72, 245, 106, 50, 224, 
+    206, 72, 228, 57, 128, 112, 218, 57, 72, 228, 57, 128, 112, 224, 206, 72, 
+    254, 156, 128, 112, 218, 57, 72, 254, 156, 128, 112, 224, 206, 72, 228, 
+    57, 254, 156, 128, 112, 218, 57, 72, 228, 57, 254, 156, 128, 112, 52, 
+    224, 205, 52, 218, 56, 218, 65, 2, 247, 128, 218, 23, 2, 247, 128, 218, 
+    65, 2, 96, 5, 51, 218, 23, 2, 96, 5, 51, 218, 65, 2, 230, 89, 5, 51, 218, 
+    23, 2, 230, 89, 5, 51, 218, 65, 64, 177, 128, 216, 43, 2, 59, 48, 218, 
+    23, 64, 177, 128, 216, 43, 2, 59, 48, 218, 65, 64, 72, 245, 106, 50, 218, 
+    23, 64, 72, 245, 106, 50, 218, 65, 64, 72, 216, 90, 226, 171, 218, 23, 
+    64, 72, 216, 90, 226, 171, 218, 65, 64, 72, 254, 156, 128, 112, 218, 23, 
+    64, 72, 254, 156, 128, 112, 218, 65, 64, 72, 228, 57, 128, 112, 218, 23, 
+    64, 72, 228, 57, 128, 112, 42, 43, 204, 93, 226, 171, 42, 44, 204, 93, 
+    226, 171, 250, 8, 218, 64, 250, 8, 218, 22, 250, 8, 218, 65, 177, 128, 
+    112, 250, 8, 218, 23, 177, 128, 112, 218, 65, 72, 218, 22, 218, 23, 72, 
+    218, 64, 218, 65, 72, 218, 64, 218, 23, 72, 218, 22, 218, 23, 252, 38, 
+    218, 64, 218, 23, 252, 38, 22, 235, 71, 251, 86, 248, 165, 2, 218, 64, 
+    245, 178, 64, 226, 174, 246, 111, 225, 51, 2, 217, 13, 216, 14, 215, 241, 
+    235, 205, 244, 29, 228, 70, 219, 253, 43, 217, 88, 219, 253, 124, 217, 
+    88, 219, 253, 120, 217, 88, 225, 175, 2, 222, 93, 67, 252, 149, 215, 212, 
+    44, 215, 93, 52, 67, 252, 149, 43, 215, 93, 67, 252, 149, 52, 43, 215, 
+    93, 52, 67, 252, 149, 52, 43, 215, 93, 200, 248, 165, 243, 251, 43, 231, 
+    68, 64, 52, 213, 239, 219, 253, 124, 217, 89, 2, 226, 127, 219, 253, 120, 
+    217, 89, 2, 214, 183, 219, 253, 120, 217, 89, 72, 219, 253, 124, 217, 88, 
+    52, 124, 217, 88, 52, 120, 217, 88, 52, 218, 105, 228, 57, 50, 223, 52, 
+    52, 218, 105, 228, 57, 50, 247, 146, 228, 57, 247, 183, 2, 223, 52, 229, 
+    106, 219, 97, 67, 232, 220, 2, 250, 44, 48, 67, 232, 220, 2, 250, 44, 51, 
+    124, 217, 89, 2, 250, 44, 51, 226, 12, 2, 203, 91, 226, 12, 2, 216, 90, 
+    226, 171, 215, 212, 67, 252, 149, 251, 252, 223, 94, 215, 212, 67, 252, 
+    149, 2, 203, 91, 215, 212, 249, 235, 226, 171, 215, 212, 229, 96, 233, 
+    20, 215, 212, 229, 96, 242, 136, 246, 119, 219, 99, 233, 21, 177, 128, 
+    112, 246, 119, 219, 99, 242, 137, 177, 128, 112, 215, 212, 219, 49, 251, 
+    252, 223, 94, 233, 91, 215, 212, 67, 252, 149, 226, 171, 52, 219, 49, 
+    226, 171, 71, 67, 130, 230, 29, 71, 67, 130, 228, 61, 245, 228, 71, 75, 
+    228, 61, 212, 9, 71, 75, 219, 30, 245, 228, 71, 75, 219, 30, 212, 9, 71, 
+    75, 43, 44, 71, 75, 140, 85, 75, 214, 153, 85, 75, 246, 112, 85, 75, 228, 
+    61, 245, 228, 85, 75, 228, 61, 212, 9, 85, 75, 219, 30, 245, 228, 85, 75, 
+    219, 30, 212, 9, 85, 75, 43, 44, 85, 75, 120, 124, 85, 75, 97, 80, 2, 
+    216, 78, 246, 111, 97, 80, 2, 216, 78, 214, 152, 140, 80, 2, 216, 78, 
+    246, 111, 140, 80, 2, 216, 78, 214, 152, 42, 2, 216, 15, 163, 251, 229, 
+    42, 2, 251, 183, 163, 251, 229, 42, 2, 214, 160, 44, 248, 7, 163, 251, 
+    229, 42, 2, 232, 114, 43, 248, 7, 163, 251, 229, 248, 1, 2, 43, 163, 251, 
+    229, 248, 1, 2, 44, 163, 251, 229, 248, 1, 2, 216, 15, 163, 251, 229, 
+    248, 1, 2, 251, 183, 163, 251, 229, 246, 126, 218, 236, 85, 233, 91, 218, 
+    236, 71, 233, 91, 218, 236, 85, 213, 187, 4, 218, 236, 71, 213, 187, 4, 
+    218, 236, 85, 225, 193, 71, 225, 193, 71, 241, 200, 85, 241, 200, 203, 
+    85, 241, 200, 85, 233, 91, 250, 43, 85, 231, 87, 248, 0, 71, 231, 87, 
+    248, 0, 85, 231, 87, 232, 110, 71, 231, 87, 232, 110, 85, 4, 248, 0, 85, 
+    4, 232, 110, 71, 4, 232, 110, 85, 203, 245, 172, 71, 203, 245, 172, 85, 
+    67, 245, 172, 71, 67, 245, 172, 43, 80, 2, 4, 250, 43, 134, 140, 253, 
+    255, 43, 80, 2, 37, 225, 25, 200, 140, 218, 232, 75, 140, 215, 58, 80, 2, 
+    67, 91, 140, 215, 58, 80, 2, 52, 67, 91, 140, 215, 58, 80, 243, 251, 130, 
+    140, 215, 58, 215, 212, 248, 165, 75, 140, 80, 2, 246, 126, 218, 141, 
+    140, 80, 2, 217, 79, 2, 67, 91, 140, 80, 2, 217, 79, 2, 52, 67, 91, 140, 
+    215, 58, 80, 2, 217, 78, 140, 215, 58, 80, 2, 217, 79, 2, 67, 91, 140, 
+    215, 58, 80, 2, 217, 79, 2, 52, 67, 91, 140, 80, 216, 140, 211, 178, 212, 
+    36, 80, 225, 10, 247, 203, 233, 52, 245, 106, 5, 72, 140, 75, 223, 53, 
+    216, 90, 226, 172, 72, 140, 75, 140, 80, 72, 223, 53, 254, 156, 128, 112, 
+    97, 80, 216, 140, 242, 136, 97, 80, 216, 140, 218, 22, 140, 224, 27, 75, 
+    97, 224, 27, 75, 223, 53, 216, 90, 226, 172, 72, 97, 75, 97, 80, 72, 223, 
+    53, 254, 156, 128, 112, 216, 90, 226, 172, 72, 140, 75, 140, 80, 72, 254, 
+    156, 128, 112, 140, 80, 72, 223, 53, 216, 90, 226, 171, 97, 80, 72, 223, 
+    53, 216, 90, 226, 171, 71, 231, 87, 218, 158, 85, 4, 218, 158, 71, 4, 
+    218, 158, 85, 222, 250, 225, 193, 71, 222, 250, 225, 193, 114, 233, 91, 
+    250, 43, 114, 226, 128, 2, 226, 128, 235, 222, 114, 250, 44, 2, 250, 44, 
+    235, 222, 114, 250, 43, 114, 37, 222, 0, 145, 6, 1, 253, 167, 145, 6, 1, 
+    251, 125, 145, 6, 1, 213, 253, 145, 6, 1, 242, 192, 145, 6, 1, 247, 148, 
+    145, 6, 1, 211, 21, 145, 6, 1, 210, 68, 145, 6, 1, 246, 42, 145, 6, 1, 
+    210, 91, 145, 6, 1, 235, 154, 145, 6, 1, 65, 235, 154, 145, 6, 1, 74, 
+    145, 6, 1, 247, 168, 145, 6, 1, 234, 246, 145, 6, 1, 232, 192, 145, 6, 1, 
+    230, 34, 145, 6, 1, 229, 196, 145, 6, 1, 226, 189, 145, 6, 1, 225, 7, 
+    145, 6, 1, 222, 230, 145, 6, 1, 219, 85, 145, 6, 1, 215, 81, 145, 6, 1, 
+    214, 201, 145, 6, 1, 243, 254, 145, 6, 1, 241, 206, 145, 6, 1, 226, 139, 
+    145, 6, 1, 225, 224, 145, 6, 1, 219, 230, 145, 6, 1, 215, 168, 145, 6, 1, 
+    250, 83, 145, 6, 1, 220, 104, 145, 6, 1, 211, 27, 145, 6, 1, 211, 29, 
+    145, 6, 1, 211, 57, 145, 6, 1, 218, 255, 162, 145, 6, 1, 210, 212, 145, 
+    6, 1, 4, 210, 183, 145, 6, 1, 4, 210, 184, 2, 217, 78, 145, 6, 1, 210, 
+    244, 145, 6, 1, 235, 191, 4, 210, 183, 145, 6, 1, 252, 1, 210, 183, 145, 
+    6, 1, 235, 191, 252, 1, 210, 183, 145, 6, 1, 244, 90, 145, 6, 1, 235, 
+    152, 145, 6, 1, 219, 229, 145, 6, 1, 215, 203, 61, 145, 6, 1, 233, 81, 
+    230, 34, 145, 4, 1, 253, 167, 145, 4, 1, 251, 125, 145, 4, 1, 213, 253, 
+    145, 4, 1, 242, 192, 145, 4, 1, 247, 148, 145, 4, 1, 211, 21, 145, 4, 1, 
+    210, 68, 145, 4, 1, 246, 42, 145, 4, 1, 210, 91, 145, 4, 1, 235, 154, 
+    145, 4, 1, 65, 235, 154, 145, 4, 1, 74, 145, 4, 1, 247, 168, 145, 4, 1, 
+    234, 246, 145, 4, 1, 232, 192, 145, 4, 1, 230, 34, 145, 4, 1, 229, 196, 
+    145, 4, 1, 226, 189, 145, 4, 1, 225, 7, 145, 4, 1, 222, 230, 145, 4, 1, 
+    219, 85, 145, 4, 1, 215, 81, 145, 4, 1, 214, 201, 145, 4, 1, 243, 254, 
+    145, 4, 1, 241, 206, 145, 4, 1, 226, 139, 145, 4, 1, 225, 224, 145, 4, 1, 
+    219, 230, 145, 4, 1, 215, 168, 145, 4, 1, 250, 83, 145, 4, 1, 220, 104, 
+    145, 4, 1, 211, 27, 145, 4, 1, 211, 29, 145, 4, 1, 211, 57, 145, 4, 1, 
+    218, 255, 162, 145, 4, 1, 210, 212, 145, 4, 1, 4, 210, 183, 145, 4, 1, 4, 
+    210, 184, 2, 217, 78, 145, 4, 1, 210, 244, 145, 4, 1, 235, 191, 4, 210, 
+    183, 145, 4, 1, 252, 1, 210, 183, 145, 4, 1, 235, 191, 252, 1, 210, 183, 
+    145, 4, 1, 244, 90, 145, 4, 1, 235, 152, 145, 4, 1, 219, 229, 145, 4, 1, 
+    215, 203, 61, 145, 4, 1, 233, 81, 230, 34, 7, 6, 1, 233, 155, 2, 52, 130, 
+    7, 4, 1, 233, 155, 2, 52, 130, 7, 6, 1, 233, 155, 2, 230, 229, 184, 7, 6, 
+    1, 226, 110, 2, 91, 7, 6, 1, 223, 227, 2, 217, 78, 7, 4, 1, 116, 2, 91, 
+    7, 4, 1, 217, 154, 2, 248, 7, 91, 7, 6, 1, 242, 68, 2, 248, 47, 7, 4, 1, 
+    242, 68, 2, 248, 47, 7, 6, 1, 235, 30, 2, 248, 47, 7, 4, 1, 235, 30, 2, 
+    248, 47, 7, 6, 1, 210, 160, 2, 248, 47, 7, 4, 1, 210, 160, 2, 248, 47, 7, 
+    6, 1, 254, 151, 7, 6, 1, 232, 55, 2, 103, 7, 6, 1, 215, 94, 61, 7, 6, 1, 
+    215, 94, 254, 151, 7, 4, 1, 214, 106, 2, 44, 103, 7, 6, 1, 212, 99, 2, 
+    103, 7, 4, 1, 212, 99, 2, 103, 7, 4, 1, 214, 106, 2, 249, 108, 7, 6, 1, 
+    163, 242, 67, 7, 4, 1, 163, 242, 67, 7, 4, 1, 217, 76, 225, 136, 7, 4, 1, 
+    160, 2, 228, 55, 7, 4, 1, 215, 94, 223, 227, 2, 217, 78, 7, 4, 1, 144, 2, 
+    121, 222, 237, 235, 222, 7, 1, 4, 6, 215, 94, 76, 7, 218, 66, 4, 1, 235, 
+    150, 58, 1, 6, 214, 105, 7, 6, 1, 222, 94, 2, 217, 251, 217, 78, 7, 6, 1, 
+    210, 160, 2, 217, 251, 217, 78, 81, 6, 1, 254, 173, 81, 4, 1, 254, 173, 
+    81, 6, 1, 213, 173, 81, 4, 1, 213, 173, 81, 6, 1, 243, 114, 81, 4, 1, 
+    243, 114, 81, 6, 1, 248, 199, 81, 4, 1, 248, 199, 81, 6, 1, 245, 202, 81, 
+    4, 1, 245, 202, 81, 6, 1, 219, 35, 81, 4, 1, 219, 35, 81, 6, 1, 210, 101, 
+    81, 4, 1, 210, 101, 81, 6, 1, 241, 255, 81, 4, 1, 241, 255, 81, 6, 1, 
+    216, 178, 81, 4, 1, 216, 178, 81, 6, 1, 240, 123, 81, 4, 1, 240, 123, 81, 
+    6, 1, 234, 233, 81, 4, 1, 234, 233, 81, 6, 1, 233, 78, 81, 4, 1, 233, 78, 
+    81, 6, 1, 230, 235, 81, 4, 1, 230, 235, 81, 6, 1, 228, 238, 81, 4, 1, 
+    228, 238, 81, 6, 1, 233, 239, 81, 4, 1, 233, 239, 81, 6, 1, 78, 81, 4, 1, 
+    78, 81, 6, 1, 225, 111, 81, 4, 1, 225, 111, 81, 6, 1, 222, 213, 81, 4, 1, 
+    222, 213, 81, 6, 1, 219, 167, 81, 4, 1, 219, 167, 81, 6, 1, 217, 42, 81, 
+    4, 1, 217, 42, 81, 6, 1, 214, 229, 81, 4, 1, 214, 229, 81, 6, 1, 244, 
+    129, 81, 4, 1, 244, 129, 81, 6, 1, 234, 118, 81, 4, 1, 234, 118, 81, 6, 
+    1, 224, 164, 81, 4, 1, 224, 164, 81, 6, 1, 226, 182, 81, 4, 1, 226, 182, 
+    81, 6, 1, 248, 5, 254, 179, 81, 4, 1, 248, 5, 254, 179, 81, 6, 1, 55, 81, 
+    254, 205, 81, 4, 1, 55, 81, 254, 205, 81, 6, 1, 249, 123, 245, 202, 81, 
+    4, 1, 249, 123, 245, 202, 81, 6, 1, 248, 5, 234, 233, 81, 4, 1, 248, 5, 
+    234, 233, 81, 6, 1, 248, 5, 228, 238, 81, 4, 1, 248, 5, 228, 238, 81, 6, 
+    1, 249, 123, 228, 238, 81, 4, 1, 249, 123, 228, 238, 81, 6, 1, 55, 81, 
+    226, 182, 81, 4, 1, 55, 81, 226, 182, 81, 6, 1, 221, 248, 81, 4, 1, 221, 
+    248, 81, 6, 1, 249, 136, 220, 57, 81, 4, 1, 249, 136, 220, 57, 81, 6, 1, 
+    55, 81, 220, 57, 81, 4, 1, 55, 81, 220, 57, 81, 6, 1, 55, 81, 245, 83, 
+    81, 4, 1, 55, 81, 245, 83, 81, 6, 1, 254, 191, 234, 123, 81, 4, 1, 254, 
+    191, 234, 123, 81, 6, 1, 248, 5, 241, 52, 81, 4, 1, 248, 5, 241, 52, 81, 
+    6, 1, 55, 81, 241, 52, 81, 4, 1, 55, 81, 241, 52, 81, 6, 1, 55, 81, 162, 
+    81, 4, 1, 55, 81, 162, 81, 6, 1, 233, 154, 162, 81, 4, 1, 233, 154, 162, 
+    81, 6, 1, 55, 81, 241, 224, 81, 4, 1, 55, 81, 241, 224, 81, 6, 1, 55, 81, 
+    242, 2, 81, 4, 1, 55, 81, 242, 2, 81, 6, 1, 55, 81, 243, 109, 81, 4, 1, 
+    55, 81, 243, 109, 81, 6, 1, 55, 81, 247, 171, 81, 4, 1, 55, 81, 247, 171, 
+    81, 6, 1, 55, 81, 220, 24, 81, 4, 1, 55, 81, 220, 24, 81, 6, 1, 55, 227, 
+    212, 220, 24, 81, 4, 1, 55, 227, 212, 220, 24, 81, 6, 1, 55, 227, 212, 
+    229, 32, 81, 4, 1, 55, 227, 212, 229, 32, 81, 6, 1, 55, 227, 212, 227, 
+    152, 81, 4, 1, 55, 227, 212, 227, 152, 81, 6, 1, 55, 227, 212, 212, 37, 
+    81, 4, 1, 55, 227, 212, 212, 37, 81, 16, 234, 252, 81, 16, 230, 236, 222, 
+    213, 81, 16, 225, 112, 222, 213, 81, 16, 218, 149, 81, 16, 217, 43, 222, 
+    213, 81, 16, 234, 119, 222, 213, 81, 16, 220, 25, 219, 167, 81, 6, 1, 
+    249, 123, 220, 57, 81, 4, 1, 249, 123, 220, 57, 81, 6, 1, 249, 123, 243, 
+    109, 81, 4, 1, 249, 123, 243, 109, 81, 38, 228, 239, 48, 81, 38, 218, 
+    249, 253, 232, 81, 38, 218, 249, 233, 27, 81, 6, 1, 251, 207, 234, 123, 
+    81, 4, 1, 251, 207, 234, 123, 81, 55, 227, 212, 243, 236, 218, 131, 81, 
+    55, 227, 212, 247, 205, 224, 16, 79, 81, 55, 227, 212, 235, 244, 224, 16, 
+    79, 81, 55, 227, 212, 213, 241, 247, 180, 81, 244, 10, 123, 242, 34, 81, 
+    243, 236, 218, 131, 81, 230, 129, 247, 180, 98, 4, 1, 254, 131, 98, 4, 1, 
+    252, 160, 98, 4, 1, 243, 113, 98, 4, 1, 247, 136, 98, 4, 1, 245, 158, 98, 
+    4, 1, 213, 160, 98, 4, 1, 210, 89, 98, 4, 1, 217, 61, 98, 4, 1, 236, 6, 
+    98, 4, 1, 234, 240, 98, 4, 1, 233, 87, 98, 4, 1, 231, 190, 98, 4, 1, 229, 
+    200, 98, 4, 1, 226, 200, 98, 4, 1, 226, 21, 98, 4, 1, 210, 78, 98, 4, 1, 
+    223, 174, 98, 4, 1, 221, 245, 98, 4, 1, 217, 51, 98, 4, 1, 214, 190, 98, 
+    4, 1, 225, 143, 98, 4, 1, 234, 127, 98, 4, 1, 242, 248, 98, 4, 1, 224, 
+    76, 98, 4, 1, 220, 22, 98, 4, 1, 250, 105, 98, 4, 1, 251, 15, 98, 4, 1, 
+    235, 106, 98, 4, 1, 250, 48, 98, 4, 1, 250, 151, 98, 4, 1, 211, 163, 98, 
+    4, 1, 235, 117, 98, 4, 1, 242, 50, 98, 4, 1, 241, 245, 98, 4, 1, 241, 
+    182, 98, 4, 1, 212, 22, 98, 4, 1, 242, 11, 98, 4, 1, 241, 72, 98, 4, 1, 
+    210, 246, 98, 4, 1, 254, 241, 216, 109, 1, 192, 216, 109, 1, 211, 99, 
+    216, 109, 1, 211, 98, 216, 109, 1, 211, 88, 216, 109, 1, 211, 86, 216, 
+    109, 1, 252, 40, 255, 25, 211, 81, 216, 109, 1, 211, 81, 216, 109, 1, 
+    211, 96, 216, 109, 1, 211, 93, 216, 109, 1, 211, 95, 216, 109, 1, 211, 
+    94, 216, 109, 1, 211, 12, 216, 109, 1, 211, 90, 216, 109, 1, 211, 79, 
+    216, 109, 1, 215, 116, 211, 79, 216, 109, 1, 211, 76, 216, 109, 1, 211, 
+    84, 216, 109, 1, 252, 40, 255, 25, 211, 84, 216, 109, 1, 215, 116, 211, 
+    84, 216, 109, 1, 211, 83, 216, 109, 1, 211, 103, 216, 109, 1, 211, 77, 
+    216, 109, 1, 215, 116, 211, 77, 216, 109, 1, 211, 66, 216, 109, 1, 215, 
+    116, 211, 66, 216, 109, 1, 211, 8, 216, 109, 1, 211, 49, 216, 109, 1, 
+    254, 216, 211, 49, 216, 109, 1, 215, 116, 211, 49, 216, 109, 1, 211, 75, 
+    216, 109, 1, 211, 74, 216, 109, 1, 211, 71, 216, 109, 1, 215, 116, 211, 
+    85, 216, 109, 1, 215, 116, 211, 69, 216, 109, 1, 211, 67, 216, 109, 1, 
+    210, 212, 216, 109, 1, 211, 64, 216, 109, 1, 211, 63, 216, 109, 1, 211, 
+    87, 216, 109, 1, 215, 116, 211, 87, 216, 109, 1, 253, 171, 211, 87, 216, 
+    109, 1, 211, 62, 216, 109, 1, 211, 60, 216, 109, 1, 211, 61, 216, 109, 1, 
+    211, 59, 216, 109, 1, 211, 58, 216, 109, 1, 211, 97, 216, 109, 1, 211, 
+    56, 216, 109, 1, 211, 54, 216, 109, 1, 211, 53, 216, 109, 1, 211, 52, 
+    216, 109, 1, 211, 50, 216, 109, 1, 217, 35, 211, 50, 216, 109, 1, 211, 
+    48, 216, 109, 1, 211, 47, 216, 109, 1, 210, 244, 216, 109, 58, 1, 233, 
+    132, 79, 216, 109, 220, 140, 79, 216, 109, 117, 235, 69, 29, 3, 232, 161, 
+    29, 3, 230, 165, 29, 3, 222, 211, 29, 3, 219, 59, 29, 3, 220, 8, 29, 3, 
+    251, 212, 29, 3, 216, 42, 29, 3, 249, 245, 29, 3, 228, 77, 29, 3, 227, 
+    137, 29, 3, 242, 187, 227, 4, 29, 3, 210, 22, 29, 3, 247, 151, 29, 3, 
+    248, 112, 29, 3, 235, 73, 29, 3, 216, 156, 29, 3, 250, 93, 29, 3, 225, 
+    123, 29, 3, 225, 18, 29, 3, 243, 6, 29, 3, 243, 2, 29, 3, 243, 3, 29, 3, 
+    243, 4, 29, 3, 218, 225, 29, 3, 218, 181, 29, 3, 218, 194, 29, 3, 218, 
+    224, 29, 3, 218, 198, 29, 3, 218, 199, 29, 3, 218, 186, 29, 3, 250, 221, 
+    29, 3, 250, 200, 29, 3, 250, 202, 29, 3, 250, 220, 29, 3, 250, 218, 29, 
+    3, 250, 219, 29, 3, 250, 201, 29, 3, 209, 243, 29, 3, 209, 221, 29, 3, 
+    209, 234, 29, 3, 209, 242, 29, 3, 209, 237, 29, 3, 209, 238, 29, 3, 209, 
+    226, 29, 3, 250, 216, 29, 3, 250, 203, 29, 3, 250, 205, 29, 3, 250, 215, 
+    29, 3, 250, 213, 29, 3, 250, 214, 29, 3, 250, 204, 29, 3, 223, 239, 29, 
+    3, 223, 229, 29, 3, 223, 235, 29, 3, 223, 238, 29, 3, 223, 236, 29, 3, 
+    223, 237, 29, 3, 223, 234, 29, 3, 233, 165, 29, 3, 233, 157, 29, 3, 233, 
+    160, 29, 3, 233, 164, 29, 3, 233, 161, 29, 3, 233, 162, 29, 3, 233, 158, 
+    29, 3, 211, 130, 29, 3, 211, 120, 29, 3, 211, 126, 29, 3, 211, 129, 29, 
+    3, 211, 127, 29, 3, 211, 128, 29, 3, 211, 125, 29, 3, 242, 78, 29, 3, 
+    242, 69, 29, 3, 242, 72, 29, 3, 242, 77, 29, 3, 242, 74, 29, 3, 242, 75, 
+    29, 3, 242, 71, 38, 33, 1, 252, 83, 38, 33, 1, 213, 255, 38, 33, 1, 242, 
+    243, 38, 33, 1, 248, 98, 38, 33, 1, 210, 74, 38, 33, 1, 210, 94, 38, 33, 
+    1, 176, 38, 33, 1, 245, 182, 38, 33, 1, 245, 167, 38, 33, 1, 245, 158, 
+    38, 33, 1, 78, 38, 33, 1, 225, 224, 38, 33, 1, 245, 100, 38, 33, 1, 245, 
+    90, 38, 33, 1, 217, 23, 38, 33, 1, 162, 38, 33, 1, 215, 179, 38, 33, 1, 
+    250, 139, 38, 33, 1, 220, 104, 38, 33, 1, 220, 67, 38, 33, 1, 244, 90, 
+    38, 33, 1, 245, 89, 38, 33, 1, 61, 38, 33, 1, 236, 67, 38, 33, 1, 247, 
+    169, 38, 33, 1, 230, 145, 214, 205, 38, 33, 1, 211, 59, 38, 33, 1, 210, 
+    212, 38, 33, 1, 235, 190, 61, 38, 33, 1, 232, 198, 210, 183, 38, 33, 1, 
+    252, 1, 210, 183, 38, 33, 1, 235, 190, 252, 1, 210, 183, 44, 254, 118, 
+    218, 61, 231, 159, 44, 254, 118, 246, 126, 218, 61, 231, 159, 43, 218, 
+    61, 127, 44, 218, 61, 127, 43, 246, 126, 218, 61, 127, 44, 246, 126, 218, 
+    61, 127, 223, 160, 235, 209, 231, 159, 223, 160, 246, 126, 235, 209, 231, 
+    159, 246, 126, 215, 242, 231, 159, 43, 215, 242, 127, 44, 215, 242, 127, 
+    223, 160, 218, 236, 43, 223, 160, 226, 202, 127, 44, 223, 160, 226, 202, 
+    127, 245, 218, 249, 166, 226, 17, 244, 30, 226, 17, 223, 52, 244, 30, 
+    226, 17, 240, 172, 246, 126, 226, 255, 246, 112, 254, 127, 214, 153, 254, 
+    127, 246, 126, 222, 250, 254, 117, 52, 226, 252, 240, 175, 235, 200, 235, 
+    208, 226, 63, 251, 162, 240, 176, 2, 248, 9, 216, 90, 2, 222, 237, 48, 
+    43, 121, 226, 9, 127, 44, 121, 226, 9, 127, 216, 90, 2, 59, 48, 216, 90, 
+    2, 59, 51, 43, 67, 252, 149, 2, 224, 10, 44, 67, 252, 149, 2, 224, 10, 
+    216, 15, 43, 163, 127, 216, 15, 44, 163, 127, 251, 183, 43, 163, 127, 
+    251, 183, 44, 163, 127, 43, 219, 189, 104, 127, 44, 219, 189, 104, 127, 
+    43, 52, 226, 7, 44, 52, 226, 7, 113, 170, 115, 123, 59, 224, 143, 123, 
+    59, 115, 113, 170, 224, 143, 92, 244, 19, 59, 224, 143, 244, 89, 59, 79, 
+    223, 52, 224, 16, 79, 67, 184, 222, 237, 225, 13, 211, 209, 220, 140, 
+    230, 229, 247, 128, 215, 94, 249, 227, 223, 160, 247, 128, 223, 160, 249, 
+    227, 215, 94, 220, 152, 248, 214, 2, 43, 242, 115, 248, 214, 2, 44, 242, 
+    115, 215, 94, 248, 213, 216, 15, 163, 221, 175, 50, 215, 59, 248, 164, 
+    216, 144, 248, 164, 10, 34, 223, 79, 10, 34, 250, 18, 10, 34, 221, 178, 
+    111, 10, 34, 221, 178, 105, 10, 34, 221, 178, 158, 10, 34, 225, 170, 10, 
+    34, 251, 171, 10, 34, 217, 93, 10, 34, 234, 39, 111, 10, 34, 234, 39, 
+    105, 10, 34, 247, 178, 10, 34, 221, 181, 10, 34, 4, 111, 10, 34, 4, 105, 
+    10, 34, 233, 103, 111, 10, 34, 233, 103, 105, 10, 34, 233, 103, 158, 10, 
+    34, 233, 103, 161, 10, 34, 219, 70, 10, 34, 216, 146, 10, 34, 219, 68, 
+    111, 10, 34, 219, 68, 105, 10, 34, 241, 235, 111, 10, 34, 241, 235, 105, 
+    10, 34, 242, 22, 10, 34, 223, 150, 10, 34, 250, 90, 10, 34, 218, 38, 10, 
+    34, 230, 133, 10, 34, 248, 96, 10, 34, 230, 125, 10, 34, 250, 33, 10, 34, 
+    212, 41, 111, 10, 34, 212, 41, 105, 10, 34, 244, 104, 10, 34, 225, 236, 
+    111, 10, 34, 225, 236, 105, 10, 34, 219, 162, 163, 215, 237, 215, 189, 
+    10, 34, 249, 153, 10, 34, 247, 144, 10, 34, 235, 143, 10, 34, 251, 206, 
+    64, 250, 2, 10, 34, 245, 23, 10, 34, 218, 251, 111, 10, 34, 218, 251, 
+    105, 10, 34, 252, 162, 10, 34, 219, 169, 10, 34, 251, 71, 219, 169, 10, 
+    34, 229, 95, 111, 10, 34, 229, 95, 105, 10, 34, 229, 95, 158, 10, 34, 
+    229, 95, 161, 10, 34, 231, 51, 10, 34, 220, 59, 10, 34, 223, 156, 10, 34, 
+    245, 45, 10, 34, 226, 213, 10, 34, 251, 141, 111, 10, 34, 251, 141, 105, 
+    10, 34, 231, 91, 10, 34, 230, 128, 10, 34, 242, 147, 111, 10, 34, 242, 
+    147, 105, 10, 34, 242, 147, 158, 10, 34, 216, 107, 10, 34, 250, 1, 10, 
+    34, 212, 9, 111, 10, 34, 212, 9, 105, 10, 34, 251, 71, 221, 172, 10, 34, 
+    219, 162, 240, 255, 10, 34, 240, 255, 10, 34, 251, 71, 219, 4, 10, 34, 
+    251, 71, 220, 54, 10, 34, 244, 40, 10, 34, 251, 71, 250, 236, 10, 34, 
+    219, 162, 212, 57, 10, 34, 212, 58, 111, 10, 34, 212, 58, 105, 10, 34, 
+    250, 35, 10, 34, 251, 71, 242, 173, 10, 34, 200, 111, 10, 34, 200, 105, 
+    10, 34, 251, 71, 232, 143, 10, 34, 251, 71, 243, 95, 10, 34, 230, 124, 
+    111, 10, 34, 230, 124, 105, 10, 34, 223, 162, 10, 34, 251, 215, 10, 34, 
+    251, 71, 217, 57, 233, 58, 10, 34, 251, 71, 233, 59, 10, 34, 251, 71, 
+    211, 239, 10, 34, 251, 71, 244, 54, 10, 34, 245, 226, 111, 10, 34, 245, 
+    226, 105, 10, 34, 245, 226, 158, 10, 34, 251, 71, 245, 225, 10, 34, 241, 
+    242, 10, 34, 251, 71, 240, 252, 10, 34, 251, 202, 10, 34, 242, 229, 10, 
+    34, 251, 71, 244, 98, 10, 34, 251, 71, 251, 245, 10, 34, 251, 71, 222, 3, 
+    10, 34, 219, 162, 212, 2, 10, 34, 219, 162, 211, 41, 10, 34, 251, 71, 
+    243, 252, 10, 34, 235, 149, 245, 49, 10, 34, 251, 71, 245, 49, 10, 34, 
+    235, 149, 216, 16, 10, 34, 251, 71, 216, 16, 10, 34, 235, 149, 246, 104, 
+    10, 34, 251, 71, 246, 104, 10, 34, 215, 91, 10, 34, 235, 149, 215, 91, 
+    10, 34, 251, 71, 215, 91, 60, 34, 111, 60, 34, 232, 219, 60, 34, 247, 
+    128, 60, 34, 219, 97, 60, 34, 221, 177, 60, 34, 103, 60, 34, 105, 60, 34, 
+    232, 243, 60, 34, 231, 190, 60, 34, 233, 39, 60, 34, 245, 137, 60, 34, 
+    196, 60, 34, 124, 251, 171, 60, 34, 249, 155, 60, 34, 240, 118, 60, 34, 
+    217, 93, 60, 34, 204, 251, 171, 60, 34, 234, 38, 60, 34, 224, 227, 60, 
+    34, 211, 202, 60, 34, 218, 245, 60, 34, 44, 204, 251, 171, 60, 34, 241, 
+    183, 245, 153, 60, 34, 216, 248, 60, 34, 247, 178, 60, 34, 221, 181, 60, 
+    34, 250, 18, 60, 34, 224, 185, 60, 34, 254, 224, 60, 34, 230, 115, 60, 
+    34, 245, 153, 60, 34, 245, 231, 60, 34, 221, 202, 60, 34, 242, 181, 60, 
+    34, 242, 182, 219, 83, 60, 34, 245, 48, 60, 34, 252, 0, 60, 34, 211, 221, 
+    60, 34, 250, 109, 60, 34, 222, 198, 60, 34, 236, 2, 60, 34, 219, 81, 60, 
+    34, 233, 102, 60, 34, 249, 164, 60, 34, 218, 239, 60, 34, 230, 120, 60, 
+    34, 222, 227, 60, 34, 211, 206, 60, 34, 226, 194, 60, 34, 215, 98, 60, 
+    34, 246, 88, 60, 34, 219, 253, 216, 146, 60, 34, 246, 126, 250, 18, 60, 
+    34, 200, 218, 110, 60, 34, 113, 242, 17, 60, 34, 220, 2, 60, 34, 251, 
+    177, 60, 34, 219, 67, 60, 34, 251, 145, 60, 34, 218, 140, 60, 34, 241, 
+    234, 60, 34, 242, 35, 60, 34, 247, 131, 60, 34, 242, 22, 60, 34, 251, 
+    162, 60, 34, 223, 150, 60, 34, 221, 189, 60, 34, 247, 207, 60, 34, 253, 
+    176, 60, 34, 218, 236, 60, 34, 228, 56, 60, 34, 218, 38, 60, 34, 221, 
+    213, 60, 34, 230, 133, 60, 34, 215, 236, 60, 34, 233, 128, 60, 34, 218, 
+    131, 60, 34, 248, 96, 60, 34, 212, 21, 60, 34, 247, 154, 228, 56, 60, 34, 
+    249, 223, 60, 34, 243, 229, 60, 34, 250, 29, 60, 34, 218, 144, 60, 34, 
+    212, 40, 60, 34, 244, 104, 60, 34, 250, 26, 60, 34, 244, 169, 60, 34, 52, 
+    211, 178, 60, 34, 163, 215, 237, 215, 189, 60, 34, 219, 91, 60, 34, 244, 
+    179, 60, 34, 249, 153, 60, 34, 247, 144, 60, 34, 224, 182, 60, 34, 235, 
+    143, 60, 34, 231, 72, 60, 34, 216, 89, 60, 34, 217, 246, 60, 34, 232, 
+    237, 60, 34, 214, 131, 60, 34, 244, 128, 60, 34, 251, 206, 64, 250, 2, 
+    60, 34, 219, 190, 60, 34, 246, 126, 216, 243, 60, 34, 211, 253, 60, 34, 
+    219, 105, 60, 34, 247, 195, 60, 34, 245, 23, 60, 34, 219, 7, 60, 34, 75, 
+    60, 34, 218, 133, 60, 34, 218, 250, 60, 34, 216, 0, 60, 34, 242, 154, 60, 
+    34, 250, 226, 60, 34, 218, 162, 60, 34, 252, 162, 60, 34, 223, 34, 60, 
+    34, 219, 169, 60, 34, 235, 136, 60, 34, 229, 94, 60, 34, 220, 59, 60, 34, 
+    244, 157, 60, 34, 226, 213, 60, 34, 254, 126, 60, 34, 225, 32, 60, 34, 
+    245, 235, 60, 34, 251, 140, 60, 34, 231, 91, 60, 34, 230, 188, 60, 34, 
+    220, 158, 60, 34, 254, 4, 60, 34, 230, 128, 60, 34, 216, 20, 60, 34, 226, 
+    169, 60, 34, 251, 209, 60, 34, 218, 129, 60, 34, 249, 233, 60, 34, 242, 
+    146, 60, 34, 216, 107, 60, 34, 235, 224, 60, 34, 251, 219, 60, 34, 212, 
+    58, 245, 153, 60, 34, 250, 1, 60, 34, 212, 8, 60, 34, 221, 172, 60, 34, 
+    240, 255, 60, 34, 219, 4, 60, 34, 214, 22, 60, 34, 252, 80, 60, 34, 225, 
+    76, 60, 34, 252, 182, 60, 34, 220, 54, 60, 34, 223, 113, 60, 34, 222, 
+    128, 60, 34, 244, 40, 60, 34, 251, 208, 60, 34, 250, 236, 60, 34, 251, 
+    234, 60, 34, 230, 130, 60, 34, 212, 57, 60, 34, 250, 35, 60, 34, 211, 
+    236, 60, 34, 247, 188, 60, 34, 213, 161, 60, 34, 242, 173, 60, 34, 232, 
+    143, 60, 34, 243, 95, 60, 34, 230, 123, 60, 34, 219, 96, 60, 34, 219, 
+    253, 217, 77, 251, 245, 60, 34, 223, 162, 60, 34, 251, 215, 60, 34, 211, 
+    197, 60, 34, 244, 198, 60, 34, 233, 58, 60, 34, 217, 57, 233, 58, 60, 34, 
+    233, 54, 60, 34, 219, 32, 60, 34, 233, 59, 60, 34, 211, 239, 60, 34, 244, 
+    54, 60, 34, 245, 225, 60, 34, 241, 242, 60, 34, 244, 8, 60, 34, 240, 252, 
+    60, 34, 251, 202, 60, 34, 217, 64, 60, 34, 242, 41, 60, 34, 244, 121, 60, 
+    34, 222, 30, 211, 236, 60, 34, 250, 228, 60, 34, 242, 229, 60, 34, 244, 
+    98, 60, 34, 251, 245, 60, 34, 222, 3, 60, 34, 248, 82, 60, 34, 212, 2, 
+    60, 34, 241, 217, 60, 34, 211, 41, 60, 34, 230, 197, 60, 34, 251, 229, 
+    60, 34, 245, 163, 60, 34, 243, 252, 60, 34, 215, 210, 60, 34, 246, 90, 
+    60, 34, 223, 144, 60, 34, 228, 58, 60, 34, 245, 49, 60, 34, 216, 16, 60, 
+    34, 246, 104, 60, 34, 215, 91, 60, 34, 244, 56, 110, 248, 45, 135, 43, 
+    216, 43, 222, 254, 110, 248, 45, 135, 72, 216, 43, 51, 110, 248, 45, 135, 
+    43, 216, 43, 230, 229, 22, 222, 254, 110, 248, 45, 135, 72, 216, 43, 230, 
+    229, 22, 51, 110, 248, 45, 135, 243, 236, 218, 11, 110, 248, 45, 135, 
+    218, 12, 243, 251, 48, 110, 248, 45, 135, 218, 12, 243, 251, 51, 110, 
+    248, 45, 135, 218, 12, 243, 251, 233, 52, 110, 248, 45, 135, 218, 12, 
+    243, 251, 214, 160, 233, 52, 110, 248, 45, 135, 218, 12, 243, 251, 214, 
+    160, 222, 254, 110, 248, 45, 135, 218, 12, 243, 251, 232, 114, 233, 52, 
+    110, 248, 45, 135, 226, 126, 110, 219, 20, 110, 249, 227, 110, 243, 236, 
+    218, 131, 247, 185, 79, 235, 137, 235, 243, 218, 161, 87, 110, 235, 164, 
+    79, 110, 250, 4, 79, 110, 54, 210, 86, 43, 254, 118, 127, 44, 254, 118, 
+    127, 43, 52, 254, 118, 127, 44, 52, 254, 118, 127, 43, 249, 169, 127, 44, 
+    249, 169, 127, 43, 71, 249, 169, 127, 44, 71, 249, 169, 127, 43, 85, 233, 
+    26, 127, 44, 85, 233, 26, 127, 224, 240, 79, 243, 39, 79, 43, 216, 7, 
+    220, 55, 127, 44, 216, 7, 220, 55, 127, 43, 71, 233, 26, 127, 44, 71, 
+    233, 26, 127, 43, 71, 216, 7, 220, 55, 127, 44, 71, 216, 7, 220, 55, 127, 
+    43, 71, 42, 127, 44, 71, 42, 127, 212, 36, 248, 164, 223, 52, 52, 224, 
+    194, 224, 1, 79, 52, 224, 194, 224, 1, 79, 121, 52, 224, 194, 224, 1, 79, 
+    224, 240, 164, 244, 198, 242, 15, 227, 202, 111, 242, 15, 227, 202, 105, 
+    242, 15, 227, 202, 158, 242, 15, 227, 202, 161, 242, 15, 227, 202, 190, 
+    242, 15, 227, 202, 195, 242, 15, 227, 202, 199, 242, 15, 227, 202, 196, 
+    242, 15, 227, 202, 201, 110, 233, 9, 138, 79, 110, 222, 231, 138, 79, 
+    110, 248, 52, 138, 79, 110, 245, 136, 138, 79, 24, 219, 157, 59, 138, 79, 
+    24, 52, 59, 138, 79, 212, 32, 248, 164, 67, 234, 239, 223, 80, 79, 67, 
+    234, 239, 223, 80, 2, 213, 135, 219, 33, 79, 67, 234, 239, 223, 80, 164, 
+    214, 160, 242, 34, 67, 234, 239, 223, 80, 2, 213, 135, 219, 33, 164, 214, 
+    160, 242, 34, 67, 234, 239, 223, 80, 164, 232, 114, 242, 34, 37, 224, 
+    240, 79, 110, 217, 4, 232, 220, 244, 154, 220, 140, 87, 242, 15, 227, 
+    202, 216, 248, 242, 15, 227, 202, 215, 73, 242, 15, 227, 202, 216, 163, 
+    67, 110, 235, 164, 79, 231, 145, 79, 226, 3, 254, 148, 79, 110, 45, 235, 
+    245, 110, 163, 244, 114, 219, 20, 141, 1, 4, 61, 141, 1, 61, 141, 1, 4, 
+    74, 141, 1, 74, 141, 1, 4, 69, 141, 1, 69, 141, 1, 4, 76, 141, 1, 76, 
+    141, 1, 4, 78, 141, 1, 78, 141, 1, 176, 141, 1, 243, 142, 141, 1, 234, 
+    98, 141, 1, 242, 221, 141, 1, 233, 223, 141, 1, 242, 120, 141, 1, 234, 
+    188, 141, 1, 243, 69, 141, 1, 234, 34, 141, 1, 242, 181, 141, 1, 206, 
+    141, 1, 210, 116, 141, 1, 219, 193, 141, 1, 210, 44, 141, 1, 218, 84, 
+    141, 1, 210, 13, 141, 1, 221, 183, 141, 1, 210, 94, 141, 1, 219, 60, 141, 
+    1, 210, 23, 141, 1, 217, 106, 141, 1, 248, 229, 141, 1, 216, 118, 141, 1, 
+    248, 11, 141, 1, 4, 215, 119, 141, 1, 215, 119, 141, 1, 246, 86, 141, 1, 
+    217, 23, 141, 1, 248, 98, 141, 1, 112, 141, 1, 247, 153, 141, 1, 198, 
+    141, 1, 228, 238, 141, 1, 227, 242, 141, 1, 229, 112, 141, 1, 228, 79, 
+    141, 1, 162, 141, 1, 252, 199, 141, 1, 191, 141, 1, 241, 187, 141, 1, 
+    252, 14, 141, 1, 225, 111, 141, 1, 240, 229, 141, 1, 251, 133, 141, 1, 
+    224, 153, 141, 1, 241, 245, 141, 1, 252, 83, 141, 1, 225, 224, 141, 1, 
+    241, 75, 141, 1, 251, 213, 141, 1, 225, 19, 141, 1, 186, 141, 1, 230, 
+    235, 141, 1, 230, 107, 141, 1, 231, 96, 141, 1, 230, 166, 141, 1, 4, 192, 
+    141, 1, 192, 141, 1, 4, 210, 212, 141, 1, 210, 212, 141, 1, 4, 210, 244, 
+    141, 1, 210, 244, 141, 1, 205, 141, 1, 223, 38, 141, 1, 222, 142, 141, 1, 
+    223, 131, 141, 1, 222, 213, 141, 1, 4, 212, 65, 141, 1, 212, 65, 141, 1, 
+    211, 250, 141, 1, 212, 22, 141, 1, 211, 227, 141, 1, 230, 30, 141, 1, 
+    212, 116, 141, 1, 4, 176, 141, 1, 4, 234, 188, 38, 234, 207, 213, 135, 
+    219, 33, 79, 38, 234, 207, 220, 157, 219, 33, 79, 234, 207, 213, 135, 
+    219, 33, 79, 234, 207, 220, 157, 219, 33, 79, 141, 235, 164, 79, 141, 
+    213, 135, 235, 164, 79, 141, 247, 229, 210, 225, 234, 207, 52, 240, 175, 
+    56, 1, 4, 61, 56, 1, 61, 56, 1, 4, 74, 56, 1, 74, 56, 1, 4, 69, 56, 1, 
+    69, 56, 1, 4, 76, 56, 1, 76, 56, 1, 4, 78, 56, 1, 78, 56, 1, 176, 56, 1, 
+    243, 142, 56, 1, 234, 98, 56, 1, 242, 221, 56, 1, 233, 223, 56, 1, 242, 
+    120, 56, 1, 234, 188, 56, 1, 243, 69, 56, 1, 234, 34, 56, 1, 242, 181, 
+    56, 1, 206, 56, 1, 210, 116, 56, 1, 219, 193, 56, 1, 210, 44, 56, 1, 218, 
+    84, 56, 1, 210, 13, 56, 1, 221, 183, 56, 1, 210, 94, 56, 1, 219, 60, 56, 
+    1, 210, 23, 56, 1, 217, 106, 56, 1, 248, 229, 56, 1, 216, 118, 56, 1, 
+    248, 11, 56, 1, 4, 215, 119, 56, 1, 215, 119, 56, 1, 246, 86, 56, 1, 217, 
+    23, 56, 1, 248, 98, 56, 1, 112, 56, 1, 247, 153, 56, 1, 198, 56, 1, 228, 
+    238, 56, 1, 227, 242, 56, 1, 229, 112, 56, 1, 228, 79, 56, 1, 162, 56, 1, 
+    252, 199, 56, 1, 191, 56, 1, 241, 187, 56, 1, 252, 14, 56, 1, 225, 111, 
+    56, 1, 240, 229, 56, 1, 251, 133, 56, 1, 224, 153, 56, 1, 241, 245, 56, 
+    1, 252, 83, 56, 1, 225, 224, 56, 1, 241, 75, 56, 1, 251, 213, 56, 1, 225, 
+    19, 56, 1, 186, 56, 1, 230, 235, 56, 1, 230, 107, 56, 1, 231, 96, 56, 1, 
+    230, 166, 56, 1, 4, 192, 56, 1, 192, 56, 1, 4, 210, 212, 56, 1, 210, 212, 
+    56, 1, 4, 210, 244, 56, 1, 210, 244, 56, 1, 205, 56, 1, 223, 38, 56, 1, 
+    222, 142, 56, 1, 223, 131, 56, 1, 222, 213, 56, 1, 4, 212, 65, 56, 1, 
+    212, 65, 56, 1, 211, 250, 56, 1, 212, 22, 56, 1, 211, 227, 56, 1, 230, 
+    30, 56, 1, 212, 116, 56, 1, 4, 176, 56, 1, 4, 234, 188, 56, 1, 214, 27, 
+    56, 1, 213, 176, 56, 1, 213, 255, 56, 1, 213, 138, 56, 230, 229, 247, 
+    128, 234, 207, 224, 176, 219, 33, 79, 56, 235, 164, 79, 56, 213, 135, 
+    235, 164, 79, 56, 247, 229, 234, 5, 251, 192, 1, 253, 166, 251, 192, 1, 
+    226, 109, 251, 192, 1, 194, 251, 192, 1, 245, 14, 251, 192, 1, 249, 68, 
+    251, 192, 1, 217, 153, 251, 192, 1, 230, 30, 251, 192, 1, 156, 251, 192, 
+    1, 243, 209, 251, 192, 1, 235, 29, 251, 192, 1, 242, 67, 251, 192, 1, 
+    235, 150, 251, 192, 1, 224, 99, 251, 192, 1, 211, 178, 251, 192, 1, 210, 
+    83, 251, 192, 1, 250, 166, 251, 192, 1, 220, 106, 251, 192, 1, 153, 251, 
+    192, 1, 210, 159, 251, 192, 1, 251, 74, 251, 192, 1, 222, 93, 251, 192, 
+    1, 61, 251, 192, 1, 78, 251, 192, 1, 76, 251, 192, 1, 245, 205, 251, 192, 
+    1, 254, 210, 251, 192, 1, 245, 203, 251, 192, 1, 253, 200, 251, 192, 1, 
+    226, 138, 251, 192, 1, 254, 131, 251, 192, 1, 245, 158, 251, 192, 1, 254, 
+    123, 251, 192, 1, 245, 146, 251, 192, 1, 245, 100, 251, 192, 1, 74, 251, 
+    192, 1, 69, 251, 192, 1, 235, 162, 251, 192, 1, 214, 105, 251, 192, 1, 
+    229, 84, 251, 192, 1, 242, 185, 251, 192, 1, 236, 41, 24, 1, 234, 64, 24, 
+    1, 218, 217, 24, 1, 234, 57, 24, 1, 228, 231, 24, 1, 228, 229, 24, 1, 
+    228, 228, 24, 1, 216, 102, 24, 1, 218, 206, 24, 1, 223, 29, 24, 1, 223, 
+    24, 24, 1, 223, 21, 24, 1, 223, 14, 24, 1, 223, 9, 24, 1, 223, 4, 24, 1, 
+    223, 15, 24, 1, 223, 27, 24, 1, 230, 222, 24, 1, 225, 98, 24, 1, 218, 
+    214, 24, 1, 225, 87, 24, 1, 219, 150, 24, 1, 218, 211, 24, 1, 236, 63, 
+    24, 1, 250, 54, 24, 1, 218, 221, 24, 1, 250, 114, 24, 1, 234, 116, 24, 1, 
+    216, 174, 24, 1, 225, 134, 24, 1, 241, 179, 24, 1, 61, 24, 1, 254, 252, 
+    24, 1, 192, 24, 1, 211, 92, 24, 1, 245, 125, 24, 1, 76, 24, 1, 211, 36, 
+    24, 1, 211, 47, 24, 1, 78, 24, 1, 212, 65, 24, 1, 212, 62, 24, 1, 226, 
+    238, 24, 1, 210, 244, 24, 1, 69, 24, 1, 212, 11, 24, 1, 212, 22, 24, 1, 
+    211, 250, 24, 1, 210, 212, 24, 1, 245, 63, 24, 1, 211, 8, 24, 1, 74, 24, 
+    244, 111, 24, 1, 218, 215, 24, 1, 228, 221, 24, 1, 228, 223, 24, 1, 228, 
+    226, 24, 1, 223, 22, 24, 1, 223, 3, 24, 1, 223, 11, 24, 1, 223, 16, 24, 
+    1, 223, 1, 24, 1, 230, 215, 24, 1, 230, 212, 24, 1, 230, 216, 24, 1, 234, 
+    227, 24, 1, 225, 93, 24, 1, 225, 79, 24, 1, 225, 85, 24, 1, 225, 82, 24, 
+    1, 225, 96, 24, 1, 225, 80, 24, 1, 234, 225, 24, 1, 234, 223, 24, 1, 219, 
+    143, 24, 1, 219, 141, 24, 1, 219, 133, 24, 1, 219, 138, 24, 1, 219, 148, 
+    24, 1, 226, 36, 24, 1, 218, 218, 24, 1, 211, 26, 24, 1, 211, 22, 24, 1, 
+    211, 23, 24, 1, 234, 226, 24, 1, 218, 219, 24, 1, 211, 32, 24, 1, 210, 
+    238, 24, 1, 210, 237, 24, 1, 210, 240, 24, 1, 210, 203, 24, 1, 210, 204, 
+    24, 1, 210, 207, 24, 1, 254, 42, 24, 1, 254, 36, 110, 254, 107, 232, 209, 
+    79, 110, 254, 107, 223, 53, 79, 110, 254, 107, 123, 79, 110, 254, 107, 
+    113, 79, 110, 254, 107, 134, 79, 110, 254, 107, 244, 19, 79, 110, 254, 
+    107, 216, 15, 79, 110, 254, 107, 230, 229, 79, 110, 254, 107, 251, 183, 
+    79, 110, 254, 107, 244, 100, 79, 110, 254, 107, 221, 178, 79, 110, 254, 
+    107, 216, 170, 79, 110, 254, 107, 244, 12, 79, 110, 254, 107, 241, 231, 
+    79, 110, 254, 107, 245, 232, 79, 110, 254, 107, 231, 191, 79, 251, 192, 
+    1, 251, 133, 251, 192, 1, 210, 44, 251, 192, 1, 235, 114, 251, 192, 1, 
+    242, 120, 251, 192, 1, 245, 217, 251, 192, 1, 245, 143, 251, 192, 1, 226, 
+    187, 251, 192, 1, 226, 191, 251, 192, 1, 235, 186, 251, 192, 1, 254, 109, 
+    251, 192, 1, 235, 231, 251, 192, 1, 214, 168, 251, 192, 1, 236, 23, 251, 
+    192, 1, 229, 62, 251, 192, 1, 254, 204, 251, 192, 1, 253, 195, 251, 192, 
+    1, 254, 144, 251, 192, 1, 226, 208, 251, 192, 1, 226, 193, 251, 192, 1, 
+    235, 228, 251, 192, 40, 1, 226, 109, 251, 192, 40, 1, 217, 153, 251, 192, 
+    40, 1, 235, 29, 251, 192, 40, 1, 242, 67, 251, 192, 1, 243, 1, 251, 192, 
+    1, 233, 5, 251, 192, 1, 209, 250, 10, 218, 105, 217, 153, 10, 218, 105, 
+    212, 4, 10, 218, 105, 211, 158, 10, 218, 105, 251, 87, 10, 218, 105, 217, 
+    255, 10, 218, 105, 240, 165, 10, 218, 105, 240, 169, 10, 218, 105, 240, 
+    238, 10, 218, 105, 240, 166, 10, 218, 105, 217, 156, 10, 218, 105, 240, 
+    168, 10, 218, 105, 240, 164, 10, 218, 105, 240, 236, 10, 218, 105, 240, 
+    167, 10, 218, 105, 240, 163, 10, 218, 105, 230, 30, 10, 218, 105, 242, 
+    67, 10, 218, 105, 222, 93, 10, 218, 105, 226, 109, 10, 218, 105, 219, 23, 
+    10, 218, 105, 249, 68, 10, 218, 105, 240, 170, 10, 218, 105, 241, 197, 
+    10, 218, 105, 217, 165, 10, 218, 105, 217, 234, 10, 218, 105, 218, 170, 
+    10, 218, 105, 220, 112, 10, 218, 105, 225, 228, 10, 218, 105, 224, 101, 
+    10, 218, 105, 216, 44, 10, 218, 105, 217, 155, 10, 218, 105, 217, 245, 
+    10, 218, 105, 240, 177, 10, 218, 105, 240, 162, 10, 218, 105, 225, 152, 
+    10, 218, 105, 224, 99, 56, 1, 4, 233, 223, 56, 1, 4, 219, 193, 56, 1, 4, 
+    218, 84, 56, 1, 4, 112, 56, 1, 4, 227, 242, 56, 1, 4, 162, 56, 1, 4, 241, 
+    187, 56, 1, 4, 240, 229, 56, 1, 4, 241, 245, 56, 1, 4, 241, 75, 56, 1, 4, 
+    230, 107, 56, 1, 4, 205, 56, 1, 4, 223, 38, 56, 1, 4, 222, 142, 56, 1, 4, 
+    223, 131, 56, 1, 4, 222, 213, 88, 24, 234, 64, 88, 24, 228, 231, 88, 24, 
+    216, 102, 88, 24, 223, 29, 88, 24, 230, 222, 88, 24, 225, 98, 88, 24, 
+    219, 150, 88, 24, 236, 63, 88, 24, 250, 54, 88, 24, 250, 114, 88, 24, 
+    234, 116, 88, 24, 216, 174, 88, 24, 225, 134, 88, 24, 241, 179, 88, 24, 
+    234, 65, 61, 88, 24, 228, 232, 61, 88, 24, 216, 103, 61, 88, 24, 223, 30, 
+    61, 88, 24, 230, 223, 61, 88, 24, 225, 99, 61, 88, 24, 219, 151, 61, 88, 
+    24, 236, 64, 61, 88, 24, 250, 55, 61, 88, 24, 250, 115, 61, 88, 24, 234, 
+    117, 61, 88, 24, 216, 175, 61, 88, 24, 225, 135, 61, 88, 24, 241, 180, 
+    61, 88, 24, 250, 55, 69, 88, 234, 9, 135, 226, 221, 88, 234, 9, 135, 144, 
+    240, 229, 88, 154, 111, 88, 154, 105, 88, 154, 158, 88, 154, 161, 88, 
+    154, 190, 88, 154, 195, 88, 154, 199, 88, 154, 196, 88, 154, 201, 88, 
+    154, 216, 248, 88, 154, 230, 133, 88, 154, 244, 104, 88, 154, 212, 40, 
+    88, 154, 211, 214, 88, 154, 231, 44, 88, 154, 245, 231, 88, 154, 218, 38, 
+    88, 154, 218, 134, 88, 154, 241, 251, 88, 154, 219, 56, 88, 154, 229, 
+    209, 88, 154, 219, 6, 88, 154, 244, 110, 88, 154, 249, 208, 88, 154, 233, 
+    131, 88, 154, 223, 74, 88, 154, 251, 23, 88, 154, 218, 88, 88, 154, 218, 
+    21, 88, 154, 245, 135, 88, 154, 223, 66, 88, 154, 254, 159, 88, 154, 244, 
+    136, 88, 154, 223, 64, 88, 154, 220, 158, 88, 154, 223, 130, 37, 154, 
+    224, 15, 37, 154, 234, 86, 37, 154, 221, 200, 37, 154, 234, 5, 37, 54, 
+    216, 249, 226, 201, 85, 218, 236, 37, 54, 215, 74, 226, 201, 85, 218, 
+    236, 37, 54, 216, 164, 226, 201, 85, 218, 236, 37, 54, 244, 24, 226, 201, 
+    85, 218, 236, 37, 54, 244, 123, 226, 201, 85, 218, 236, 37, 54, 219, 114, 
+    226, 201, 85, 218, 236, 37, 54, 220, 119, 226, 201, 85, 218, 236, 37, 54, 
+    245, 193, 226, 201, 85, 218, 236, 225, 255, 50, 37, 54, 215, 74, 111, 37, 
+    54, 215, 74, 105, 37, 54, 215, 74, 158, 37, 54, 215, 74, 161, 37, 54, 
+    215, 74, 190, 37, 54, 215, 74, 195, 37, 54, 215, 74, 199, 37, 54, 215, 
+    74, 196, 37, 54, 215, 74, 201, 37, 54, 216, 163, 37, 54, 216, 164, 111, 
+    37, 54, 216, 164, 105, 37, 54, 216, 164, 158, 37, 54, 216, 164, 161, 37, 
+    54, 216, 164, 190, 37, 24, 234, 64, 37, 24, 228, 231, 37, 24, 216, 102, 
+    37, 24, 223, 29, 37, 24, 230, 222, 37, 24, 225, 98, 37, 24, 219, 150, 37, 
+    24, 236, 63, 37, 24, 250, 54, 37, 24, 250, 114, 37, 24, 234, 116, 37, 24, 
+    216, 174, 37, 24, 225, 134, 37, 24, 241, 179, 37, 24, 234, 65, 61, 37, 
+    24, 228, 232, 61, 37, 24, 216, 103, 61, 37, 24, 223, 30, 61, 37, 24, 230, 
+    223, 61, 37, 24, 225, 99, 61, 37, 24, 219, 151, 61, 37, 24, 236, 64, 61, 
+    37, 24, 250, 55, 61, 37, 24, 250, 115, 61, 37, 24, 234, 117, 61, 37, 24, 
+    216, 175, 61, 37, 24, 225, 135, 61, 37, 24, 241, 180, 61, 37, 234, 9, 
+    135, 250, 156, 37, 234, 9, 135, 235, 53, 37, 24, 236, 64, 69, 234, 9, 
+    218, 161, 87, 37, 154, 111, 37, 154, 105, 37, 154, 158, 37, 154, 161, 37, 
+    154, 190, 37, 154, 195, 37, 154, 199, 37, 154, 196, 37, 154, 201, 37, 
+    154, 216, 248, 37, 154, 230, 133, 37, 154, 244, 104, 37, 154, 212, 40, 
+    37, 154, 211, 214, 37, 154, 231, 44, 37, 154, 245, 231, 37, 154, 218, 38, 
+    37, 154, 218, 134, 37, 154, 241, 251, 37, 154, 219, 56, 37, 154, 229, 
+    209, 37, 154, 219, 6, 37, 154, 244, 110, 37, 154, 249, 208, 37, 154, 233, 
+    131, 37, 154, 221, 176, 37, 154, 231, 194, 37, 154, 244, 145, 37, 154, 
+    218, 50, 37, 154, 245, 42, 37, 154, 224, 190, 37, 154, 253, 204, 37, 154, 
+    235, 165, 37, 154, 223, 64, 37, 154, 249, 172, 37, 154, 249, 163, 37, 
+    154, 241, 172, 37, 154, 250, 182, 37, 154, 232, 116, 37, 154, 233, 52, 
+    37, 154, 222, 254, 37, 154, 231, 88, 37, 154, 223, 90, 37, 154, 218, 88, 
+    37, 154, 218, 21, 37, 154, 245, 135, 37, 154, 223, 66, 37, 154, 254, 159, 
+    37, 154, 228, 217, 37, 54, 216, 164, 195, 37, 54, 216, 164, 199, 37, 54, 
+    216, 164, 196, 37, 54, 216, 164, 201, 37, 54, 244, 23, 37, 54, 244, 24, 
+    111, 37, 54, 244, 24, 105, 37, 54, 244, 24, 158, 37, 54, 244, 24, 161, 
+    37, 54, 244, 24, 190, 37, 54, 244, 24, 195, 37, 54, 244, 24, 199, 37, 54, 
+    244, 24, 196, 37, 54, 244, 24, 201, 37, 54, 244, 122, 110, 217, 4, 16, 
+    31, 235, 139, 110, 217, 4, 16, 31, 244, 156, 110, 217, 4, 16, 31, 231, 
+    165, 110, 217, 4, 16, 31, 254, 55, 110, 217, 4, 16, 31, 231, 137, 110, 
+    217, 4, 16, 31, 235, 51, 110, 217, 4, 16, 31, 235, 52, 110, 217, 4, 16, 
+    31, 253, 196, 110, 217, 4, 16, 31, 220, 138, 110, 217, 4, 16, 31, 226, 
+    243, 110, 217, 4, 16, 31, 228, 45, 110, 217, 4, 16, 31, 248, 93, 42, 241, 
+    197, 42, 245, 96, 42, 245, 51, 232, 225, 232, 246, 50, 37, 56, 61, 37, 
+    56, 74, 37, 56, 69, 37, 56, 76, 37, 56, 78, 37, 56, 176, 37, 56, 234, 98, 
+    37, 56, 233, 223, 37, 56, 234, 188, 37, 56, 234, 34, 37, 56, 206, 37, 56, 
+    219, 193, 37, 56, 218, 84, 37, 56, 221, 183, 37, 56, 219, 60, 37, 56, 
+    217, 106, 37, 56, 216, 118, 37, 56, 215, 119, 37, 56, 217, 23, 37, 56, 
+    112, 37, 56, 198, 37, 56, 228, 238, 37, 56, 227, 242, 37, 56, 229, 112, 
+    37, 56, 228, 79, 37, 56, 162, 37, 56, 241, 187, 37, 56, 240, 229, 37, 56, 
+    241, 245, 37, 56, 241, 75, 37, 56, 186, 37, 56, 230, 235, 37, 56, 230, 
+    107, 37, 56, 231, 96, 37, 56, 230, 166, 37, 56, 192, 37, 56, 210, 212, 
+    37, 56, 210, 244, 37, 56, 205, 37, 56, 223, 38, 37, 56, 222, 142, 37, 56, 
+    223, 131, 37, 56, 222, 213, 37, 56, 212, 65, 37, 56, 211, 250, 37, 56, 
+    212, 22, 37, 56, 211, 227, 42, 254, 79, 42, 253, 247, 42, 254, 103, 42, 
+    255, 40, 42, 235, 233, 42, 235, 203, 42, 214, 166, 42, 245, 74, 42, 245, 
+    214, 42, 226, 190, 42, 226, 184, 42, 234, 251, 42, 234, 220, 42, 234, 
+    217, 42, 243, 99, 42, 243, 108, 42, 242, 211, 42, 242, 207, 42, 233, 156, 
+    42, 242, 200, 42, 234, 78, 42, 234, 77, 42, 234, 76, 42, 234, 75, 42, 
+    242, 93, 42, 242, 92, 42, 233, 199, 42, 233, 201, 42, 234, 184, 42, 234, 
+    7, 42, 234, 14, 42, 222, 18, 42, 221, 239, 42, 219, 131, 42, 220, 143, 
+    42, 220, 142, 42, 248, 226, 42, 248, 44, 42, 247, 129, 42, 216, 33, 42, 
+    229, 205, 42, 228, 46, 42, 242, 39, 42, 226, 88, 42, 226, 87, 42, 252, 
+    196, 42, 225, 108, 42, 225, 72, 42, 225, 73, 42, 251, 242, 42, 240, 228, 
+    42, 240, 224, 42, 251, 99, 42, 240, 211, 42, 241, 222, 42, 225, 162, 42, 
+    225, 197, 42, 241, 205, 42, 225, 194, 42, 225, 210, 42, 252, 69, 42, 225, 
+    9, 42, 251, 188, 42, 241, 63, 42, 224, 253, 42, 241, 55, 42, 241, 57, 42, 
+    231, 206, 42, 231, 202, 42, 231, 211, 42, 231, 155, 42, 231, 180, 42, 
+    230, 202, 42, 230, 181, 42, 230, 180, 42, 231, 79, 42, 231, 76, 42, 231, 
+    80, 42, 211, 102, 42, 211, 100, 42, 210, 201, 42, 222, 229, 42, 222, 233, 
+    42, 222, 119, 42, 222, 113, 42, 223, 88, 42, 223, 85, 42, 212, 38, 110, 
+    217, 4, 16, 31, 240, 246, 210, 86, 110, 217, 4, 16, 31, 240, 246, 111, 
+    110, 217, 4, 16, 31, 240, 246, 105, 110, 217, 4, 16, 31, 240, 246, 158, 
+    110, 217, 4, 16, 31, 240, 246, 161, 110, 217, 4, 16, 31, 240, 246, 190, 
+    110, 217, 4, 16, 31, 240, 246, 195, 110, 217, 4, 16, 31, 240, 246, 199, 
+    110, 217, 4, 16, 31, 240, 246, 196, 110, 217, 4, 16, 31, 240, 246, 201, 
+    110, 217, 4, 16, 31, 240, 246, 216, 248, 110, 217, 4, 16, 31, 240, 246, 
+    245, 175, 110, 217, 4, 16, 31, 240, 246, 215, 76, 110, 217, 4, 16, 31, 
+    240, 246, 216, 165, 110, 217, 4, 16, 31, 240, 246, 244, 13, 110, 217, 4, 
+    16, 31, 240, 246, 244, 126, 110, 217, 4, 16, 31, 240, 246, 219, 121, 110, 
+    217, 4, 16, 31, 240, 246, 220, 121, 110, 217, 4, 16, 31, 240, 246, 245, 
+    198, 110, 217, 4, 16, 31, 240, 246, 228, 202, 110, 217, 4, 16, 31, 240, 
+    246, 215, 73, 110, 217, 4, 16, 31, 240, 246, 215, 67, 110, 217, 4, 16, 
+    31, 240, 246, 215, 63, 110, 217, 4, 16, 31, 240, 246, 215, 64, 110, 217, 
+    4, 16, 31, 240, 246, 215, 69, 42, 240, 237, 42, 248, 229, 42, 253, 200, 
+    42, 130, 42, 226, 129, 42, 225, 229, 42, 247, 155, 42, 247, 156, 218, 
+    235, 42, 247, 156, 249, 116, 42, 235, 162, 42, 245, 99, 229, 210, 241, 
+    223, 42, 245, 99, 229, 210, 217, 175, 42, 245, 99, 229, 210, 217, 75, 42, 
+    245, 99, 229, 210, 231, 75, 42, 249, 165, 42, 226, 94, 254, 133, 42, 198, 
+    42, 230, 108, 61, 42, 186, 42, 176, 42, 234, 191, 42, 231, 134, 42, 243, 
+    87, 42, 251, 26, 42, 234, 190, 42, 225, 153, 42, 229, 86, 42, 230, 108, 
+    245, 14, 42, 230, 108, 243, 209, 42, 231, 20, 42, 234, 140, 42, 240, 170, 
+    42, 234, 100, 42, 230, 237, 42, 242, 223, 42, 216, 120, 42, 230, 108, 
+    156, 42, 230, 174, 42, 247, 165, 42, 234, 46, 42, 244, 53, 42, 228, 117, 
+    42, 230, 108, 194, 42, 230, 171, 42, 249, 247, 42, 234, 40, 42, 230, 172, 
+    218, 235, 42, 249, 248, 218, 235, 42, 232, 55, 218, 235, 42, 234, 41, 
+    218, 235, 42, 230, 172, 249, 116, 42, 249, 248, 249, 116, 42, 232, 55, 
+    249, 116, 42, 234, 41, 249, 116, 42, 232, 55, 115, 222, 93, 42, 232, 55, 
+    115, 222, 94, 218, 235, 42, 191, 42, 234, 1, 42, 230, 110, 42, 242, 158, 
+    42, 223, 179, 42, 223, 180, 115, 222, 93, 42, 223, 180, 115, 222, 94, 
+    218, 235, 42, 224, 165, 42, 228, 18, 42, 230, 108, 222, 93, 42, 230, 109, 
+    42, 224, 119, 42, 227, 180, 42, 230, 108, 214, 105, 42, 230, 54, 42, 233, 
+    191, 42, 230, 55, 231, 79, 42, 224, 118, 42, 227, 179, 42, 230, 108, 212, 
+    98, 42, 230, 48, 42, 233, 189, 42, 230, 49, 231, 79, 42, 235, 30, 226, 
+    224, 42, 232, 55, 226, 224, 42, 254, 144, 42, 251, 168, 42, 250, 222, 42, 
+    250, 199, 42, 251, 75, 115, 234, 140, 42, 249, 246, 42, 248, 150, 42, 
+    242, 79, 42, 162, 42, 240, 238, 42, 236, 6, 42, 234, 53, 42, 234, 41, 
+    251, 2, 42, 233, 225, 42, 232, 165, 42, 232, 164, 42, 232, 153, 42, 232, 
+    68, 42, 231, 135, 219, 81, 42, 230, 201, 42, 230, 157, 42, 225, 151, 42, 
+    225, 22, 42, 224, 222, 42, 224, 220, 42, 218, 229, 42, 218, 3, 42, 212, 
+    24, 42, 214, 106, 115, 194, 42, 116, 115, 194, 110, 217, 4, 16, 31, 248, 
+    154, 111, 110, 217, 4, 16, 31, 248, 154, 105, 110, 217, 4, 16, 31, 248, 
+    154, 158, 110, 217, 4, 16, 31, 248, 154, 161, 110, 217, 4, 16, 31, 248, 
+    154, 190, 110, 217, 4, 16, 31, 248, 154, 195, 110, 217, 4, 16, 31, 248, 
+    154, 199, 110, 217, 4, 16, 31, 248, 154, 196, 110, 217, 4, 16, 31, 248, 
+    154, 201, 110, 217, 4, 16, 31, 248, 154, 216, 248, 110, 217, 4, 16, 31, 
+    248, 154, 245, 175, 110, 217, 4, 16, 31, 248, 154, 215, 76, 110, 217, 4, 
+    16, 31, 248, 154, 216, 165, 110, 217, 4, 16, 31, 248, 154, 244, 13, 110, 
+    217, 4, 16, 31, 248, 154, 244, 126, 110, 217, 4, 16, 31, 248, 154, 219, 
+    121, 110, 217, 4, 16, 31, 248, 154, 220, 121, 110, 217, 4, 16, 31, 248, 
+    154, 245, 198, 110, 217, 4, 16, 31, 248, 154, 228, 202, 110, 217, 4, 16, 
+    31, 248, 154, 215, 73, 110, 217, 4, 16, 31, 248, 154, 215, 67, 110, 217, 
+    4, 16, 31, 248, 154, 215, 63, 110, 217, 4, 16, 31, 248, 154, 215, 64, 
+    110, 217, 4, 16, 31, 248, 154, 215, 69, 110, 217, 4, 16, 31, 248, 154, 
+    215, 70, 110, 217, 4, 16, 31, 248, 154, 215, 65, 110, 217, 4, 16, 31, 
+    248, 154, 215, 66, 110, 217, 4, 16, 31, 248, 154, 215, 72, 110, 217, 4, 
+    16, 31, 248, 154, 215, 68, 110, 217, 4, 16, 31, 248, 154, 216, 163, 110, 
+    217, 4, 16, 31, 248, 154, 216, 162, 42, 243, 125, 241, 199, 31, 216, 197, 
+    249, 148, 241, 230, 241, 199, 31, 216, 197, 223, 125, 245, 231, 241, 199, 
+    31, 247, 239, 253, 215, 216, 197, 252, 64, 241, 199, 31, 210, 223, 244, 
+    46, 241, 199, 31, 212, 59, 241, 199, 31, 249, 211, 241, 199, 31, 216, 
+    197, 254, 11, 241, 199, 31, 241, 67, 216, 39, 241, 199, 31, 4, 217, 62, 
+    241, 199, 31, 215, 238, 241, 199, 31, 225, 222, 241, 199, 31, 218, 160, 
+    241, 199, 31, 244, 147, 241, 199, 31, 242, 139, 224, 243, 241, 199, 31, 
+    230, 160, 241, 199, 31, 245, 134, 241, 199, 31, 244, 47, 241, 199, 31, 
+    211, 207, 226, 201, 216, 197, 248, 94, 241, 199, 31, 254, 59, 241, 199, 
+    31, 249, 193, 241, 199, 31, 251, 235, 216, 139, 241, 199, 31, 242, 156, 
+    241, 199, 31, 218, 247, 254, 78, 241, 199, 31, 223, 56, 241, 199, 31, 
+    235, 227, 241, 199, 31, 242, 139, 217, 62, 241, 199, 31, 230, 116, 249, 
+    167, 241, 199, 31, 242, 139, 224, 200, 241, 199, 31, 216, 197, 255, 27, 
+    212, 40, 241, 199, 31, 216, 197, 250, 16, 244, 104, 241, 199, 31, 235, 
+    240, 241, 199, 31, 246, 65, 241, 199, 31, 223, 59, 241, 199, 31, 242, 
+    139, 224, 227, 241, 199, 31, 224, 180, 241, 199, 31, 248, 169, 64, 216, 
+    197, 232, 236, 241, 199, 31, 216, 197, 244, 182, 241, 199, 31, 226, 167, 
+    241, 199, 31, 226, 248, 241, 199, 31, 248, 67, 241, 199, 31, 248, 87, 
+    241, 199, 31, 235, 254, 241, 199, 31, 251, 157, 241, 199, 31, 249, 229, 
+    216, 43, 231, 81, 241, 199, 31, 243, 94, 216, 39, 241, 199, 31, 224, 128, 
+    214, 154, 241, 199, 31, 226, 166, 241, 199, 31, 216, 197, 212, 13, 241, 
+    199, 31, 223, 48, 241, 199, 31, 216, 197, 250, 228, 241, 199, 31, 216, 
+    197, 254, 7, 216, 134, 241, 199, 31, 216, 197, 234, 185, 218, 136, 230, 
+    120, 241, 199, 31, 248, 40, 241, 199, 31, 216, 197, 231, 157, 231, 207, 
+    241, 199, 31, 255, 28, 241, 199, 31, 216, 197, 212, 54, 241, 199, 31, 
+    216, 197, 243, 54, 211, 239, 241, 199, 31, 216, 197, 235, 58, 233, 113, 
+    241, 199, 31, 247, 192, 241, 199, 31, 232, 226, 241, 199, 31, 235, 230, 
+    215, 188, 241, 199, 31, 4, 224, 200, 241, 199, 31, 254, 226, 249, 220, 
+    241, 199, 31, 252, 67, 249, 220, 8, 3, 235, 166, 8, 3, 235, 159, 8, 3, 
+    74, 8, 3, 235, 189, 8, 3, 236, 65, 8, 3, 236, 48, 8, 3, 236, 67, 8, 3, 
+    236, 66, 8, 3, 253, 214, 8, 3, 253, 177, 8, 3, 61, 8, 3, 254, 80, 8, 3, 
+    214, 164, 8, 3, 214, 167, 8, 3, 214, 165, 8, 3, 226, 144, 8, 3, 226, 118, 
+    8, 3, 78, 8, 3, 226, 179, 8, 3, 245, 43, 8, 3, 76, 8, 3, 211, 195, 8, 3, 
+    251, 236, 8, 3, 251, 233, 8, 3, 252, 14, 8, 3, 251, 246, 8, 3, 252, 3, 8, 
+    3, 252, 2, 8, 3, 252, 5, 8, 3, 252, 4, 8, 3, 252, 129, 8, 3, 252, 121, 8, 
+    3, 252, 199, 8, 3, 252, 150, 8, 3, 251, 109, 8, 3, 251, 113, 8, 3, 251, 
+    110, 8, 3, 251, 187, 8, 3, 251, 171, 8, 3, 251, 213, 8, 3, 251, 193, 8, 
+    3, 252, 29, 8, 3, 252, 83, 8, 3, 252, 41, 8, 3, 251, 95, 8, 3, 251, 92, 
+    8, 3, 251, 133, 8, 3, 251, 108, 8, 3, 251, 102, 8, 3, 251, 106, 8, 3, 
+    251, 80, 8, 3, 251, 78, 8, 3, 251, 85, 8, 3, 251, 83, 8, 3, 251, 81, 8, 
+    3, 251, 82, 8, 3, 225, 52, 8, 3, 225, 48, 8, 3, 225, 111, 8, 3, 225, 62, 
+    8, 3, 225, 78, 8, 3, 225, 105, 8, 3, 225, 101, 8, 3, 225, 244, 8, 3, 225, 
+    234, 8, 3, 191, 8, 3, 226, 25, 8, 3, 224, 138, 8, 3, 224, 140, 8, 3, 224, 
+    139, 8, 3, 224, 236, 8, 3, 224, 225, 8, 3, 225, 19, 8, 3, 224, 248, 8, 3, 
+    224, 124, 8, 3, 224, 120, 8, 3, 224, 153, 8, 3, 224, 137, 8, 3, 224, 129, 
+    8, 3, 224, 135, 8, 3, 224, 103, 8, 3, 224, 102, 8, 3, 224, 107, 8, 3, 
+    224, 106, 8, 3, 224, 104, 8, 3, 224, 105, 8, 3, 252, 104, 8, 3, 252, 103, 
+    8, 3, 252, 110, 8, 3, 252, 105, 8, 3, 252, 107, 8, 3, 252, 106, 8, 3, 
+    252, 109, 8, 3, 252, 108, 8, 3, 252, 116, 8, 3, 252, 115, 8, 3, 252, 119, 
+    8, 3, 252, 117, 8, 3, 252, 95, 8, 3, 252, 97, 8, 3, 252, 96, 8, 3, 252, 
+    100, 8, 3, 252, 99, 8, 3, 252, 102, 8, 3, 252, 101, 8, 3, 252, 111, 8, 3, 
+    252, 114, 8, 3, 252, 112, 8, 3, 252, 91, 8, 3, 252, 90, 8, 3, 252, 98, 8, 
+    3, 252, 94, 8, 3, 252, 92, 8, 3, 252, 93, 8, 3, 252, 87, 8, 3, 252, 86, 
+    8, 3, 252, 89, 8, 3, 252, 88, 8, 3, 229, 174, 8, 3, 229, 173, 8, 3, 229, 
+    179, 8, 3, 229, 175, 8, 3, 229, 176, 8, 3, 229, 178, 8, 3, 229, 177, 8, 
+    3, 229, 182, 8, 3, 229, 181, 8, 3, 229, 184, 8, 3, 229, 183, 8, 3, 229, 
+    170, 8, 3, 229, 169, 8, 3, 229, 172, 8, 3, 229, 171, 8, 3, 229, 163, 8, 
+    3, 229, 162, 8, 3, 229, 167, 8, 3, 229, 166, 8, 3, 229, 164, 8, 3, 229, 
+    165, 8, 3, 229, 157, 8, 3, 229, 156, 8, 3, 229, 161, 8, 3, 229, 160, 8, 
+    3, 229, 158, 8, 3, 229, 159, 8, 3, 241, 117, 8, 3, 241, 116, 8, 3, 241, 
+    122, 8, 3, 241, 118, 8, 3, 241, 119, 8, 3, 241, 121, 8, 3, 241, 120, 8, 
+    3, 241, 125, 8, 3, 241, 124, 8, 3, 241, 127, 8, 3, 241, 126, 8, 3, 241, 
+    108, 8, 3, 241, 110, 8, 3, 241, 109, 8, 3, 241, 113, 8, 3, 241, 112, 8, 
+    3, 241, 115, 8, 3, 241, 114, 8, 3, 241, 104, 8, 3, 241, 103, 8, 3, 241, 
+    111, 8, 3, 241, 107, 8, 3, 241, 105, 8, 3, 241, 106, 8, 3, 241, 98, 8, 3, 
+    241, 102, 8, 3, 241, 101, 8, 3, 241, 99, 8, 3, 241, 100, 8, 3, 230, 177, 
+    8, 3, 230, 176, 8, 3, 230, 235, 8, 3, 230, 183, 8, 3, 230, 208, 8, 3, 
+    230, 226, 8, 3, 230, 224, 8, 3, 231, 144, 8, 3, 231, 139, 8, 3, 186, 8, 
+    3, 231, 177, 8, 3, 230, 79, 8, 3, 230, 78, 8, 3, 230, 82, 8, 3, 230, 80, 
+    8, 3, 230, 126, 8, 3, 230, 112, 8, 3, 230, 166, 8, 3, 230, 131, 8, 3, 
+    231, 31, 8, 3, 231, 96, 8, 3, 230, 60, 8, 3, 230, 56, 8, 3, 230, 107, 8, 
+    3, 230, 75, 8, 3, 230, 68, 8, 3, 230, 73, 8, 3, 230, 33, 8, 3, 230, 32, 
+    8, 3, 230, 38, 8, 3, 230, 35, 8, 3, 244, 91, 8, 3, 244, 86, 8, 3, 244, 
+    129, 8, 3, 244, 106, 8, 3, 244, 175, 8, 3, 244, 166, 8, 3, 244, 204, 8, 
+    3, 244, 178, 8, 3, 244, 11, 8, 3, 244, 51, 8, 3, 244, 35, 8, 3, 243, 225, 
+    8, 3, 243, 224, 8, 3, 243, 241, 8, 3, 243, 230, 8, 3, 243, 228, 8, 3, 
+    243, 229, 8, 3, 243, 212, 8, 3, 243, 211, 8, 3, 243, 215, 8, 3, 243, 213, 
+    8, 3, 213, 144, 8, 3, 213, 139, 8, 3, 213, 176, 8, 3, 213, 153, 8, 3, 
+    213, 166, 8, 3, 213, 163, 8, 3, 213, 168, 8, 3, 213, 167, 8, 3, 214, 7, 
+    8, 3, 214, 2, 8, 3, 214, 27, 8, 3, 214, 18, 8, 3, 213, 125, 8, 3, 213, 
+    121, 8, 3, 213, 138, 8, 3, 213, 126, 8, 3, 213, 178, 8, 3, 213, 244, 8, 
+    3, 212, 110, 8, 3, 212, 108, 8, 3, 212, 116, 8, 3, 212, 113, 8, 3, 212, 
+    111, 8, 3, 212, 112, 8, 3, 212, 102, 8, 3, 212, 101, 8, 3, 212, 106, 8, 
+    3, 212, 105, 8, 3, 212, 103, 8, 3, 212, 104, 8, 3, 247, 186, 8, 3, 247, 
+    174, 8, 3, 248, 11, 8, 3, 247, 211, 8, 3, 247, 244, 8, 3, 247, 248, 8, 3, 
+    247, 247, 8, 3, 248, 160, 8, 3, 248, 155, 8, 3, 248, 229, 8, 3, 248, 180, 
+    8, 3, 246, 70, 8, 3, 246, 71, 8, 3, 247, 128, 8, 3, 246, 110, 8, 3, 247, 
+    153, 8, 3, 247, 130, 8, 3, 248, 38, 8, 3, 248, 98, 8, 3, 248, 53, 8, 3, 
+    246, 61, 8, 3, 246, 59, 8, 3, 246, 86, 8, 3, 246, 69, 8, 3, 246, 64, 8, 
+    3, 246, 67, 8, 3, 216, 68, 8, 3, 216, 62, 8, 3, 216, 118, 8, 3, 216, 77, 
+    8, 3, 216, 110, 8, 3, 216, 112, 8, 3, 216, 111, 8, 3, 217, 47, 8, 3, 217, 
     34, 8, 3, 217, 106, 8, 3, 217, 55, 8, 3, 215, 103, 8, 3, 215, 102, 8, 3, 
-    215, 105, 8, 3, 215, 104, 8, 3, 216, 6, 8, 3, 216, 2, 8, 3, 111, 8, 3, 
+    215, 105, 8, 3, 215, 104, 8, 3, 216, 6, 8, 3, 216, 2, 8, 3, 112, 8, 3, 
     216, 14, 8, 3, 216, 214, 8, 3, 217, 23, 8, 3, 216, 238, 8, 3, 215, 88, 8, 
     3, 215, 83, 8, 3, 215, 119, 8, 3, 215, 101, 8, 3, 215, 89, 8, 3, 215, 99, 
-    8, 3, 248, 108, 8, 3, 248, 107, 8, 3, 248, 113, 8, 3, 248, 109, 8, 3, 
-    248, 110, 8, 3, 248, 112, 8, 3, 248, 111, 8, 3, 248, 129, 8, 3, 248, 128, 
-    8, 3, 248, 136, 8, 3, 248, 130, 8, 3, 248, 98, 8, 3, 248, 100, 8, 3, 248, 
-    99, 8, 3, 248, 103, 8, 3, 248, 102, 8, 3, 248, 106, 8, 3, 248, 104, 8, 3, 
-    248, 121, 8, 3, 248, 124, 8, 3, 248, 122, 8, 3, 248, 94, 8, 3, 248, 93, 
-    8, 3, 248, 101, 8, 3, 248, 97, 8, 3, 248, 95, 8, 3, 248, 96, 8, 3, 229, 
-    127, 8, 3, 229, 126, 8, 3, 229, 134, 8, 3, 229, 129, 8, 3, 229, 130, 8, 
-    3, 229, 131, 8, 3, 229, 143, 8, 3, 229, 142, 8, 3, 229, 149, 8, 3, 229, 
-    144, 8, 3, 229, 119, 8, 3, 229, 118, 8, 3, 229, 125, 8, 3, 229, 120, 8, 
-    3, 229, 135, 8, 3, 229, 141, 8, 3, 229, 139, 8, 3, 229, 111, 8, 3, 229, 
-    110, 8, 3, 229, 116, 8, 3, 229, 114, 8, 3, 229, 112, 8, 3, 229, 113, 8, 
-    3, 241, 78, 8, 3, 241, 77, 8, 3, 241, 84, 8, 3, 241, 79, 8, 3, 241, 81, 
-    8, 3, 241, 80, 8, 3, 241, 83, 8, 3, 241, 82, 8, 3, 241, 89, 8, 3, 241, 
-    88, 8, 3, 241, 91, 8, 3, 241, 90, 8, 3, 241, 72, 8, 3, 241, 73, 8, 3, 
-    241, 75, 8, 3, 241, 74, 8, 3, 241, 76, 8, 3, 241, 85, 8, 3, 241, 87, 8, 
-    3, 241, 86, 8, 3, 241, 71, 8, 3, 228, 190, 8, 3, 228, 188, 8, 3, 228, 
-    234, 8, 3, 228, 193, 8, 3, 228, 216, 8, 3, 228, 230, 8, 3, 228, 229, 8, 
-    3, 229, 184, 8, 3, 197, 8, 3, 229, 198, 8, 3, 227, 187, 8, 3, 227, 189, 
-    8, 3, 227, 188, 8, 3, 228, 52, 8, 3, 228, 39, 8, 3, 228, 75, 8, 3, 228, 
-    61, 8, 3, 229, 84, 8, 3, 229, 108, 8, 3, 229, 95, 8, 3, 227, 182, 8, 3, 
-    227, 178, 8, 3, 227, 238, 8, 3, 227, 186, 8, 3, 227, 184, 8, 3, 227, 185, 
-    8, 3, 241, 142, 8, 3, 241, 141, 8, 3, 241, 147, 8, 3, 241, 143, 8, 3, 
-    241, 144, 8, 3, 241, 146, 8, 3, 241, 145, 8, 3, 241, 152, 8, 3, 241, 151, 
-    8, 3, 241, 154, 8, 3, 241, 153, 8, 3, 241, 134, 8, 3, 241, 136, 8, 3, 
-    241, 135, 8, 3, 241, 138, 8, 3, 241, 140, 8, 3, 241, 139, 8, 3, 241, 148, 
-    8, 3, 241, 150, 8, 3, 241, 149, 8, 3, 241, 130, 8, 3, 241, 129, 8, 3, 
-    241, 137, 8, 3, 241, 133, 8, 3, 241, 131, 8, 3, 241, 132, 8, 3, 241, 124, 
-    8, 3, 241, 123, 8, 3, 241, 128, 8, 3, 241, 127, 8, 3, 241, 125, 8, 3, 
-    241, 126, 8, 3, 232, 196, 8, 3, 232, 190, 8, 3, 232, 242, 8, 3, 232, 203, 
-    8, 3, 232, 234, 8, 3, 232, 233, 8, 3, 232, 237, 8, 3, 232, 235, 8, 3, 
-    233, 80, 8, 3, 233, 70, 8, 3, 233, 136, 8, 3, 233, 89, 8, 3, 232, 80, 8, 
-    3, 232, 79, 8, 3, 232, 82, 8, 3, 232, 81, 8, 3, 232, 117, 8, 3, 232, 107, 
-    8, 3, 232, 157, 8, 3, 232, 121, 8, 3, 233, 3, 8, 3, 233, 59, 8, 3, 233, 
-    18, 8, 3, 232, 75, 8, 3, 232, 73, 8, 3, 232, 99, 8, 3, 232, 78, 8, 3, 
-    232, 76, 8, 3, 232, 77, 8, 3, 232, 55, 8, 3, 232, 54, 8, 3, 232, 63, 8, 
-    3, 232, 58, 8, 3, 232, 56, 8, 3, 232, 57, 8, 3, 242, 190, 8, 3, 242, 189, 
-    8, 3, 242, 215, 8, 3, 242, 200, 8, 3, 242, 207, 8, 3, 242, 206, 8, 3, 
-    242, 209, 8, 3, 242, 208, 8, 3, 243, 90, 8, 3, 243, 85, 8, 3, 243, 136, 
-    8, 3, 243, 100, 8, 3, 242, 92, 8, 3, 242, 91, 8, 3, 242, 94, 8, 3, 242, 
-    93, 8, 3, 242, 155, 8, 3, 242, 153, 8, 3, 242, 175, 8, 3, 242, 163, 8, 3, 
-    243, 34, 8, 3, 243, 32, 8, 3, 243, 63, 8, 3, 243, 45, 8, 3, 242, 82, 8, 
-    3, 242, 81, 8, 3, 242, 114, 8, 3, 242, 90, 8, 3, 242, 83, 8, 3, 242, 89, 
-    8, 3, 234, 62, 8, 3, 234, 61, 8, 3, 234, 93, 8, 3, 234, 76, 8, 3, 234, 
-    86, 8, 3, 234, 89, 8, 3, 234, 87, 8, 3, 234, 203, 8, 3, 234, 191, 8, 3, 
-    176, 8, 3, 234, 229, 8, 3, 233, 201, 8, 3, 233, 206, 8, 3, 233, 203, 8, 
-    3, 234, 1, 8, 3, 233, 253, 8, 3, 234, 29, 8, 3, 234, 8, 8, 3, 234, 157, 
-    8, 3, 234, 141, 8, 3, 234, 183, 8, 3, 234, 160, 8, 3, 233, 190, 8, 3, 
-    233, 187, 8, 3, 233, 218, 8, 3, 233, 200, 8, 3, 233, 193, 8, 3, 233, 197, 
-    8, 3, 243, 16, 8, 3, 243, 15, 8, 3, 243, 20, 8, 3, 243, 17, 8, 3, 243, 
-    19, 8, 3, 243, 18, 8, 3, 243, 27, 8, 3, 243, 26, 8, 3, 243, 30, 8, 3, 
-    243, 28, 8, 3, 243, 7, 8, 3, 243, 6, 8, 3, 243, 9, 8, 3, 243, 8, 8, 3, 
-    243, 12, 8, 3, 243, 11, 8, 3, 243, 14, 8, 3, 243, 13, 8, 3, 243, 22, 8, 
-    3, 243, 21, 8, 3, 243, 25, 8, 3, 243, 23, 8, 3, 243, 2, 8, 3, 243, 1, 8, 
-    3, 243, 10, 8, 3, 243, 5, 8, 3, 243, 3, 8, 3, 243, 4, 8, 3, 230, 250, 8, 
-    3, 230, 251, 8, 3, 231, 13, 8, 3, 231, 12, 8, 3, 231, 15, 8, 3, 231, 14, 
-    8, 3, 230, 241, 8, 3, 230, 243, 8, 3, 230, 242, 8, 3, 230, 246, 8, 3, 
-    230, 245, 8, 3, 230, 248, 8, 3, 230, 247, 8, 3, 230, 252, 8, 3, 230, 254, 
-    8, 3, 230, 253, 8, 3, 230, 237, 8, 3, 230, 236, 8, 3, 230, 244, 8, 3, 
-    230, 240, 8, 3, 230, 238, 8, 3, 230, 239, 8, 3, 240, 181, 8, 3, 240, 180, 
-    8, 3, 240, 187, 8, 3, 240, 182, 8, 3, 240, 184, 8, 3, 240, 183, 8, 3, 
-    240, 186, 8, 3, 240, 185, 8, 3, 240, 192, 8, 3, 240, 191, 8, 3, 240, 194, 
-    8, 3, 240, 193, 8, 3, 240, 173, 8, 3, 240, 172, 8, 3, 240, 175, 8, 3, 
-    240, 174, 8, 3, 240, 177, 8, 3, 240, 176, 8, 3, 240, 179, 8, 3, 240, 178, 
-    8, 3, 240, 188, 8, 3, 240, 190, 8, 3, 240, 189, 8, 3, 229, 25, 8, 3, 229, 
-    27, 8, 3, 229, 26, 8, 3, 229, 68, 8, 3, 229, 66, 8, 3, 229, 78, 8, 3, 
-    229, 71, 8, 3, 228, 244, 8, 3, 228, 243, 8, 3, 228, 245, 8, 3, 228, 253, 
-    8, 3, 228, 250, 8, 3, 229, 5, 8, 3, 228, 255, 8, 3, 229, 59, 8, 3, 229, 
-    65, 8, 3, 229, 61, 8, 3, 241, 157, 8, 3, 241, 167, 8, 3, 241, 176, 8, 3, 
-    241, 252, 8, 3, 241, 244, 8, 3, 162, 8, 3, 242, 7, 8, 3, 240, 207, 8, 3, 
-    240, 206, 8, 3, 240, 209, 8, 3, 240, 208, 8, 3, 240, 243, 8, 3, 240, 234, 
-    8, 3, 241, 69, 8, 3, 241, 48, 8, 3, 241, 195, 8, 3, 241, 239, 8, 3, 241, 
-    207, 8, 3, 212, 43, 8, 3, 212, 28, 8, 3, 212, 65, 8, 3, 212, 51, 8, 3, 
-    211, 185, 8, 3, 211, 187, 8, 3, 211, 186, 8, 3, 211, 203, 8, 3, 211, 227, 
-    8, 3, 211, 210, 8, 3, 212, 5, 8, 3, 212, 22, 8, 3, 212, 10, 8, 3, 210, 
-    30, 8, 3, 210, 29, 8, 3, 210, 44, 8, 3, 210, 32, 8, 3, 210, 37, 8, 3, 
-    210, 39, 8, 3, 210, 38, 8, 3, 210, 102, 8, 3, 210, 99, 8, 3, 210, 116, 8, 
-    3, 210, 105, 8, 3, 210, 6, 8, 3, 210, 8, 8, 3, 210, 7, 8, 3, 210, 19, 8, 
-    3, 210, 18, 8, 3, 210, 23, 8, 3, 210, 20, 8, 3, 210, 84, 8, 3, 210, 94, 
-    8, 3, 210, 88, 8, 3, 210, 2, 8, 3, 210, 1, 8, 3, 210, 13, 8, 3, 210, 5, 
-    8, 3, 210, 3, 8, 3, 210, 4, 8, 3, 209, 245, 8, 3, 209, 244, 8, 3, 209, 
-    250, 8, 3, 209, 248, 8, 3, 209, 246, 8, 3, 209, 247, 8, 3, 250, 29, 8, 3, 
-    250, 25, 8, 3, 250, 52, 8, 3, 250, 38, 8, 3, 250, 49, 8, 3, 250, 43, 8, 
-    3, 250, 51, 8, 3, 250, 50, 8, 3, 250, 225, 8, 3, 250, 218, 8, 3, 251, 34, 
-    8, 3, 250, 252, 8, 3, 249, 105, 8, 3, 249, 107, 8, 3, 249, 106, 8, 3, 
-    249, 154, 8, 3, 249, 145, 8, 3, 249, 239, 8, 3, 249, 170, 8, 3, 250, 161, 
-    8, 3, 250, 191, 8, 3, 250, 166, 8, 3, 249, 85, 8, 3, 249, 83, 8, 3, 249, 
-    113, 8, 3, 249, 103, 8, 3, 249, 90, 8, 3, 249, 102, 8, 3, 249, 64, 8, 3, 
-    249, 63, 8, 3, 249, 74, 8, 3, 249, 70, 8, 3, 249, 65, 8, 3, 249, 67, 8, 
+    8, 3, 248, 115, 8, 3, 248, 114, 8, 3, 248, 120, 8, 3, 248, 116, 8, 3, 
+    248, 117, 8, 3, 248, 119, 8, 3, 248, 118, 8, 3, 248, 136, 8, 3, 248, 135, 
+    8, 3, 248, 143, 8, 3, 248, 137, 8, 3, 248, 105, 8, 3, 248, 107, 8, 3, 
+    248, 106, 8, 3, 248, 110, 8, 3, 248, 109, 8, 3, 248, 113, 8, 3, 248, 111, 
+    8, 3, 248, 128, 8, 3, 248, 131, 8, 3, 248, 129, 8, 3, 248, 101, 8, 3, 
+    248, 100, 8, 3, 248, 108, 8, 3, 248, 104, 8, 3, 248, 102, 8, 3, 248, 103, 
+    8, 3, 229, 131, 8, 3, 229, 130, 8, 3, 229, 138, 8, 3, 229, 133, 8, 3, 
+    229, 134, 8, 3, 229, 135, 8, 3, 229, 147, 8, 3, 229, 146, 8, 3, 229, 153, 
+    8, 3, 229, 148, 8, 3, 229, 123, 8, 3, 229, 122, 8, 3, 229, 129, 8, 3, 
+    229, 124, 8, 3, 229, 139, 8, 3, 229, 145, 8, 3, 229, 143, 8, 3, 229, 115, 
+    8, 3, 229, 114, 8, 3, 229, 120, 8, 3, 229, 118, 8, 3, 229, 116, 8, 3, 
+    229, 117, 8, 3, 241, 84, 8, 3, 241, 83, 8, 3, 241, 90, 8, 3, 241, 85, 8, 
+    3, 241, 87, 8, 3, 241, 86, 8, 3, 241, 89, 8, 3, 241, 88, 8, 3, 241, 95, 
+    8, 3, 241, 94, 8, 3, 241, 97, 8, 3, 241, 96, 8, 3, 241, 78, 8, 3, 241, 
+    79, 8, 3, 241, 81, 8, 3, 241, 80, 8, 3, 241, 82, 8, 3, 241, 91, 8, 3, 
+    241, 93, 8, 3, 241, 92, 8, 3, 241, 77, 8, 3, 228, 194, 8, 3, 228, 192, 8, 
+    3, 228, 238, 8, 3, 228, 197, 8, 3, 228, 220, 8, 3, 228, 234, 8, 3, 228, 
+    233, 8, 3, 229, 188, 8, 3, 198, 8, 3, 229, 202, 8, 3, 227, 190, 8, 3, 
+    227, 192, 8, 3, 227, 191, 8, 3, 228, 56, 8, 3, 228, 43, 8, 3, 228, 79, 8, 
+    3, 228, 65, 8, 3, 229, 88, 8, 3, 229, 112, 8, 3, 229, 99, 8, 3, 227, 185, 
+    8, 3, 227, 181, 8, 3, 227, 242, 8, 3, 227, 189, 8, 3, 227, 187, 8, 3, 
+    227, 188, 8, 3, 241, 148, 8, 3, 241, 147, 8, 3, 241, 153, 8, 3, 241, 149, 
+    8, 3, 241, 150, 8, 3, 241, 152, 8, 3, 241, 151, 8, 3, 241, 158, 8, 3, 
+    241, 157, 8, 3, 241, 160, 8, 3, 241, 159, 8, 3, 241, 140, 8, 3, 241, 142, 
+    8, 3, 241, 141, 8, 3, 241, 144, 8, 3, 241, 146, 8, 3, 241, 145, 8, 3, 
+    241, 154, 8, 3, 241, 156, 8, 3, 241, 155, 8, 3, 241, 136, 8, 3, 241, 135, 
+    8, 3, 241, 143, 8, 3, 241, 139, 8, 3, 241, 137, 8, 3, 241, 138, 8, 3, 
+    241, 130, 8, 3, 241, 129, 8, 3, 241, 134, 8, 3, 241, 133, 8, 3, 241, 131, 
+    8, 3, 241, 132, 8, 3, 232, 201, 8, 3, 232, 195, 8, 3, 232, 247, 8, 3, 
+    232, 208, 8, 3, 232, 239, 8, 3, 232, 238, 8, 3, 232, 242, 8, 3, 232, 240, 
+    8, 3, 233, 85, 8, 3, 233, 75, 8, 3, 233, 141, 8, 3, 233, 94, 8, 3, 232, 
+    84, 8, 3, 232, 83, 8, 3, 232, 86, 8, 3, 232, 85, 8, 3, 232, 122, 8, 3, 
+    232, 112, 8, 3, 232, 162, 8, 3, 232, 126, 8, 3, 233, 8, 8, 3, 233, 64, 8, 
+    3, 233, 23, 8, 3, 232, 79, 8, 3, 232, 77, 8, 3, 232, 103, 8, 3, 232, 82, 
+    8, 3, 232, 80, 8, 3, 232, 81, 8, 3, 232, 59, 8, 3, 232, 58, 8, 3, 232, 
+    67, 8, 3, 232, 62, 8, 3, 232, 60, 8, 3, 232, 61, 8, 3, 242, 196, 8, 3, 
+    242, 195, 8, 3, 242, 221, 8, 3, 242, 206, 8, 3, 242, 213, 8, 3, 242, 212, 
+    8, 3, 242, 215, 8, 3, 242, 214, 8, 3, 243, 96, 8, 3, 243, 91, 8, 3, 243, 
+    142, 8, 3, 243, 106, 8, 3, 242, 98, 8, 3, 242, 97, 8, 3, 242, 100, 8, 3, 
+    242, 99, 8, 3, 242, 161, 8, 3, 242, 159, 8, 3, 242, 181, 8, 3, 242, 169, 
+    8, 3, 243, 40, 8, 3, 243, 38, 8, 3, 243, 69, 8, 3, 243, 51, 8, 3, 242, 
+    88, 8, 3, 242, 87, 8, 3, 242, 120, 8, 3, 242, 96, 8, 3, 242, 89, 8, 3, 
+    242, 95, 8, 3, 234, 67, 8, 3, 234, 66, 8, 3, 234, 98, 8, 3, 234, 81, 8, 
+    3, 234, 91, 8, 3, 234, 94, 8, 3, 234, 92, 8, 3, 234, 208, 8, 3, 234, 196, 
+    8, 3, 176, 8, 3, 234, 234, 8, 3, 233, 206, 8, 3, 233, 211, 8, 3, 233, 
+    208, 8, 3, 234, 6, 8, 3, 234, 2, 8, 3, 234, 34, 8, 3, 234, 13, 8, 3, 234, 
+    162, 8, 3, 234, 146, 8, 3, 234, 188, 8, 3, 234, 165, 8, 3, 233, 195, 8, 
+    3, 233, 192, 8, 3, 233, 223, 8, 3, 233, 205, 8, 3, 233, 198, 8, 3, 233, 
+    202, 8, 3, 243, 22, 8, 3, 243, 21, 8, 3, 243, 26, 8, 3, 243, 23, 8, 3, 
+    243, 25, 8, 3, 243, 24, 8, 3, 243, 33, 8, 3, 243, 32, 8, 3, 243, 36, 8, 
+    3, 243, 34, 8, 3, 243, 13, 8, 3, 243, 12, 8, 3, 243, 15, 8, 3, 243, 14, 
+    8, 3, 243, 18, 8, 3, 243, 17, 8, 3, 243, 20, 8, 3, 243, 19, 8, 3, 243, 
+    28, 8, 3, 243, 27, 8, 3, 243, 31, 8, 3, 243, 29, 8, 3, 243, 8, 8, 3, 243, 
+    7, 8, 3, 243, 16, 8, 3, 243, 11, 8, 3, 243, 9, 8, 3, 243, 10, 8, 3, 230, 
+    254, 8, 3, 230, 255, 8, 3, 231, 17, 8, 3, 231, 16, 8, 3, 231, 19, 8, 3, 
+    231, 18, 8, 3, 230, 245, 8, 3, 230, 247, 8, 3, 230, 246, 8, 3, 230, 250, 
+    8, 3, 230, 249, 8, 3, 230, 252, 8, 3, 230, 251, 8, 3, 231, 0, 8, 3, 231, 
+    2, 8, 3, 231, 1, 8, 3, 230, 241, 8, 3, 230, 240, 8, 3, 230, 248, 8, 3, 
+    230, 244, 8, 3, 230, 242, 8, 3, 230, 243, 8, 3, 240, 187, 8, 3, 240, 186, 
+    8, 3, 240, 193, 8, 3, 240, 188, 8, 3, 240, 190, 8, 3, 240, 189, 8, 3, 
+    240, 192, 8, 3, 240, 191, 8, 3, 240, 198, 8, 3, 240, 197, 8, 3, 240, 200, 
+    8, 3, 240, 199, 8, 3, 240, 179, 8, 3, 240, 178, 8, 3, 240, 181, 8, 3, 
+    240, 180, 8, 3, 240, 183, 8, 3, 240, 182, 8, 3, 240, 185, 8, 3, 240, 184, 
+    8, 3, 240, 194, 8, 3, 240, 196, 8, 3, 240, 195, 8, 3, 229, 29, 8, 3, 229, 
+    31, 8, 3, 229, 30, 8, 3, 229, 72, 8, 3, 229, 70, 8, 3, 229, 82, 8, 3, 
+    229, 75, 8, 3, 228, 248, 8, 3, 228, 247, 8, 3, 228, 249, 8, 3, 229, 1, 8, 
+    3, 228, 254, 8, 3, 229, 9, 8, 3, 229, 3, 8, 3, 229, 63, 8, 3, 229, 69, 8, 
+    3, 229, 65, 8, 3, 241, 163, 8, 3, 241, 173, 8, 3, 241, 182, 8, 3, 242, 2, 
+    8, 3, 241, 250, 8, 3, 162, 8, 3, 242, 13, 8, 3, 240, 213, 8, 3, 240, 212, 
+    8, 3, 240, 215, 8, 3, 240, 214, 8, 3, 240, 249, 8, 3, 240, 240, 8, 3, 
+    241, 75, 8, 3, 241, 54, 8, 3, 241, 201, 8, 3, 241, 245, 8, 3, 241, 213, 
+    8, 3, 212, 43, 8, 3, 212, 28, 8, 3, 212, 65, 8, 3, 212, 51, 8, 3, 211, 
+    185, 8, 3, 211, 187, 8, 3, 211, 186, 8, 3, 211, 203, 8, 3, 211, 227, 8, 
+    3, 211, 210, 8, 3, 212, 5, 8, 3, 212, 22, 8, 3, 212, 10, 8, 3, 210, 30, 
+    8, 3, 210, 29, 8, 3, 210, 44, 8, 3, 210, 32, 8, 3, 210, 37, 8, 3, 210, 
+    39, 8, 3, 210, 38, 8, 3, 210, 102, 8, 3, 210, 99, 8, 3, 210, 116, 8, 3, 
+    210, 105, 8, 3, 210, 6, 8, 3, 210, 8, 8, 3, 210, 7, 8, 3, 210, 19, 8, 3, 
+    210, 18, 8, 3, 210, 23, 8, 3, 210, 20, 8, 3, 210, 84, 8, 3, 210, 94, 8, 
+    3, 210, 88, 8, 3, 210, 2, 8, 3, 210, 1, 8, 3, 210, 13, 8, 3, 210, 5, 8, 
+    3, 210, 3, 8, 3, 210, 4, 8, 3, 209, 245, 8, 3, 209, 244, 8, 3, 209, 250, 
+    8, 3, 209, 248, 8, 3, 209, 246, 8, 3, 209, 247, 8, 3, 250, 36, 8, 3, 250, 
+    32, 8, 3, 250, 59, 8, 3, 250, 45, 8, 3, 250, 56, 8, 3, 250, 50, 8, 3, 
+    250, 58, 8, 3, 250, 57, 8, 3, 250, 232, 8, 3, 250, 225, 8, 3, 251, 41, 8, 
+    3, 251, 3, 8, 3, 249, 112, 8, 3, 249, 114, 8, 3, 249, 113, 8, 3, 249, 
+    161, 8, 3, 249, 152, 8, 3, 249, 246, 8, 3, 249, 177, 8, 3, 250, 168, 8, 
+    3, 250, 198, 8, 3, 250, 173, 8, 3, 249, 92, 8, 3, 249, 90, 8, 3, 249, 
+    120, 8, 3, 249, 110, 8, 3, 249, 97, 8, 3, 249, 109, 8, 3, 249, 71, 8, 3, 
+    249, 70, 8, 3, 249, 81, 8, 3, 249, 77, 8, 3, 249, 72, 8, 3, 249, 74, 8, 
     3, 209, 228, 8, 3, 209, 227, 8, 3, 209, 234, 8, 3, 209, 229, 8, 3, 209, 
     231, 8, 3, 209, 230, 8, 3, 209, 233, 8, 3, 209, 232, 8, 3, 209, 240, 8, 
     3, 209, 239, 8, 3, 209, 243, 8, 3, 209, 241, 8, 3, 209, 224, 8, 3, 209, 
     226, 8, 3, 209, 225, 8, 3, 209, 235, 8, 3, 209, 238, 8, 3, 209, 236, 8, 
     3, 209, 217, 8, 3, 209, 221, 8, 3, 209, 220, 8, 3, 209, 218, 8, 3, 209, 
     219, 8, 3, 209, 211, 8, 3, 209, 210, 8, 3, 209, 216, 8, 3, 209, 214, 8, 
-    3, 209, 212, 8, 3, 209, 213, 8, 3, 227, 105, 8, 3, 227, 104, 8, 3, 227, 
-    110, 8, 3, 227, 106, 8, 3, 227, 107, 8, 3, 227, 109, 8, 3, 227, 108, 8, 
-    3, 227, 115, 8, 3, 227, 114, 8, 3, 227, 118, 8, 3, 227, 117, 8, 3, 227, 
-    98, 8, 3, 227, 99, 8, 3, 227, 102, 8, 3, 227, 103, 8, 3, 227, 111, 8, 3, 
-    227, 113, 8, 3, 227, 93, 8, 3, 227, 101, 8, 3, 227, 97, 8, 3, 227, 94, 8, 
-    3, 227, 95, 8, 3, 227, 88, 8, 3, 227, 87, 8, 3, 227, 92, 8, 3, 227, 91, 
-    8, 3, 227, 89, 8, 3, 227, 90, 8, 3, 219, 128, 8, 3, 194, 8, 3, 219, 192, 
-    8, 3, 219, 131, 8, 3, 219, 184, 8, 3, 219, 187, 8, 3, 219, 185, 8, 3, 
-    221, 227, 8, 3, 221, 215, 8, 3, 206, 8, 3, 221, 235, 8, 3, 218, 29, 8, 3, 
-    218, 31, 8, 3, 218, 30, 8, 3, 219, 35, 8, 3, 219, 24, 8, 3, 219, 59, 8, 
-    3, 219, 39, 8, 3, 220, 115, 8, 3, 221, 182, 8, 3, 220, 140, 8, 3, 218, 6, 
-    8, 3, 218, 4, 8, 3, 218, 84, 8, 3, 218, 28, 8, 3, 218, 10, 8, 3, 218, 18, 
-    8, 3, 217, 167, 8, 3, 217, 166, 8, 3, 217, 233, 8, 3, 217, 174, 8, 3, 
-    217, 169, 8, 3, 217, 173, 8, 3, 218, 187, 8, 3, 218, 186, 8, 3, 218, 193, 
-    8, 3, 218, 188, 8, 3, 218, 190, 8, 3, 218, 192, 8, 3, 218, 191, 8, 3, 
-    218, 201, 8, 3, 218, 199, 8, 3, 218, 224, 8, 3, 218, 202, 8, 3, 218, 182, 
-    8, 3, 218, 181, 8, 3, 218, 185, 8, 3, 218, 183, 8, 3, 218, 195, 8, 3, 
-    218, 198, 8, 3, 218, 196, 8, 3, 218, 178, 8, 3, 218, 176, 8, 3, 218, 180, 
-    8, 3, 218, 179, 8, 3, 218, 171, 8, 3, 218, 170, 8, 3, 218, 175, 8, 3, 
-    218, 174, 8, 3, 218, 172, 8, 3, 218, 173, 8, 3, 210, 77, 8, 3, 210, 76, 
-    8, 3, 210, 82, 8, 3, 210, 79, 8, 3, 210, 59, 8, 3, 210, 61, 8, 3, 210, 
-    60, 8, 3, 210, 64, 8, 3, 210, 63, 8, 3, 210, 67, 8, 3, 210, 65, 8, 3, 
-    210, 71, 8, 3, 210, 70, 8, 3, 210, 74, 8, 3, 210, 72, 8, 3, 210, 55, 8, 
-    3, 210, 54, 8, 3, 210, 62, 8, 3, 210, 58, 8, 3, 210, 56, 8, 3, 210, 57, 
-    8, 3, 210, 47, 8, 3, 210, 46, 8, 3, 210, 51, 8, 3, 210, 50, 8, 3, 210, 
-    48, 8, 3, 210, 49, 8, 3, 250, 137, 8, 3, 250, 134, 8, 3, 250, 158, 8, 3, 
-    250, 145, 8, 3, 250, 66, 8, 3, 250, 65, 8, 3, 250, 68, 8, 3, 250, 67, 8, 
-    3, 250, 80, 8, 3, 250, 79, 8, 3, 250, 87, 8, 3, 250, 82, 8, 3, 250, 116, 
-    8, 3, 250, 114, 8, 3, 250, 132, 8, 3, 250, 122, 8, 3, 250, 60, 8, 3, 250, 
-    70, 8, 3, 250, 64, 8, 3, 250, 61, 8, 3, 250, 63, 8, 3, 250, 54, 8, 3, 
-    250, 53, 8, 3, 250, 58, 8, 3, 250, 57, 8, 3, 250, 55, 8, 3, 250, 56, 8, 
-    3, 222, 176, 8, 3, 222, 180, 8, 3, 222, 159, 8, 3, 222, 160, 8, 3, 222, 
-    163, 8, 3, 222, 162, 8, 3, 222, 166, 8, 3, 222, 164, 8, 3, 222, 170, 8, 
-    3, 222, 169, 8, 3, 222, 175, 8, 3, 222, 171, 8, 3, 222, 155, 8, 3, 222, 
-    153, 8, 3, 222, 161, 8, 3, 222, 158, 8, 3, 222, 156, 8, 3, 222, 157, 8, 
-    3, 222, 148, 8, 3, 222, 147, 8, 3, 222, 152, 8, 3, 222, 151, 8, 3, 222, 
-    149, 8, 3, 222, 150, 8, 3, 228, 35, 8, 3, 228, 34, 8, 3, 228, 37, 8, 3, 
-    228, 36, 8, 3, 228, 27, 8, 3, 228, 29, 8, 3, 228, 28, 8, 3, 228, 31, 8, 
-    3, 228, 30, 8, 3, 228, 33, 8, 3, 228, 32, 8, 3, 228, 22, 8, 3, 228, 21, 
-    8, 3, 228, 26, 8, 3, 228, 25, 8, 3, 228, 23, 8, 3, 228, 24, 8, 3, 228, 
-    16, 8, 3, 228, 15, 8, 3, 228, 20, 8, 3, 228, 19, 8, 3, 228, 17, 8, 3, 
-    228, 18, 8, 3, 220, 73, 8, 3, 220, 68, 8, 3, 220, 103, 8, 3, 220, 84, 8, 
-    3, 219, 216, 8, 3, 219, 218, 8, 3, 219, 217, 8, 3, 219, 237, 8, 3, 219, 
-    234, 8, 3, 220, 8, 8, 3, 219, 255, 8, 3, 220, 43, 8, 3, 220, 36, 8, 3, 
-    220, 64, 8, 3, 220, 51, 8, 3, 219, 212, 8, 3, 219, 210, 8, 3, 219, 226, 
-    8, 3, 219, 215, 8, 3, 219, 213, 8, 3, 219, 214, 8, 3, 219, 195, 8, 3, 
-    219, 194, 8, 3, 219, 201, 8, 3, 219, 198, 8, 3, 219, 196, 8, 3, 219, 197, 
-    8, 3, 223, 142, 8, 3, 223, 136, 8, 3, 205, 8, 3, 223, 148, 8, 3, 222, 
-    121, 8, 3, 222, 123, 8, 3, 222, 122, 8, 3, 222, 189, 8, 3, 222, 182, 8, 
-    3, 222, 212, 8, 3, 222, 193, 8, 3, 223, 44, 8, 3, 223, 129, 8, 3, 223, 
-    82, 8, 3, 222, 114, 8, 3, 222, 111, 8, 3, 222, 141, 8, 3, 222, 120, 8, 3, 
-    222, 116, 8, 3, 222, 117, 8, 3, 222, 96, 8, 3, 222, 95, 8, 3, 222, 101, 
-    8, 3, 222, 99, 8, 3, 222, 97, 8, 3, 222, 98, 8, 3, 235, 99, 8, 3, 235, 
-    98, 8, 3, 235, 109, 8, 3, 235, 100, 8, 3, 235, 105, 8, 3, 235, 104, 8, 3, 
-    235, 107, 8, 3, 235, 106, 8, 3, 235, 42, 8, 3, 235, 41, 8, 3, 235, 44, 8, 
-    3, 235, 43, 8, 3, 235, 57, 8, 3, 235, 55, 8, 3, 235, 69, 8, 3, 235, 59, 
-    8, 3, 235, 35, 8, 3, 235, 33, 8, 3, 235, 52, 8, 3, 235, 40, 8, 3, 235, 
-    37, 8, 3, 235, 38, 8, 3, 235, 27, 8, 3, 235, 26, 8, 3, 235, 31, 8, 3, 
-    235, 30, 8, 3, 235, 28, 8, 3, 235, 29, 8, 3, 224, 47, 8, 3, 224, 45, 8, 
-    3, 224, 54, 8, 3, 224, 48, 8, 3, 224, 51, 8, 3, 224, 50, 8, 3, 224, 53, 
-    8, 3, 224, 52, 8, 3, 224, 0, 8, 3, 223, 253, 8, 3, 224, 2, 8, 3, 224, 1, 
-    8, 3, 224, 34, 8, 3, 224, 33, 8, 3, 224, 43, 8, 3, 224, 37, 8, 3, 223, 
-    248, 8, 3, 223, 244, 8, 3, 224, 31, 8, 3, 223, 252, 8, 3, 223, 250, 8, 3, 
-    223, 251, 8, 3, 223, 228, 8, 3, 223, 226, 8, 3, 223, 238, 8, 3, 223, 231, 
-    8, 3, 223, 229, 8, 3, 223, 230, 8, 3, 235, 88, 8, 3, 235, 87, 8, 3, 235, 
-    94, 8, 3, 235, 89, 8, 3, 235, 91, 8, 3, 235, 90, 8, 3, 235, 93, 8, 3, 
-    235, 92, 8, 3, 235, 79, 8, 3, 235, 81, 8, 3, 235, 80, 8, 3, 235, 84, 8, 
-    3, 235, 83, 8, 3, 235, 86, 8, 3, 235, 85, 8, 3, 235, 75, 8, 3, 235, 74, 
-    8, 3, 235, 82, 8, 3, 235, 78, 8, 3, 235, 76, 8, 3, 235, 77, 8, 3, 235, 
-    71, 8, 3, 235, 70, 8, 3, 235, 73, 8, 3, 235, 72, 8, 3, 228, 163, 8, 3, 
-    228, 162, 8, 3, 228, 170, 8, 3, 228, 164, 8, 3, 228, 166, 8, 3, 228, 165, 
-    8, 3, 228, 169, 8, 3, 228, 167, 8, 3, 228, 152, 8, 3, 228, 153, 8, 3, 
-    228, 158, 8, 3, 228, 157, 8, 3, 228, 161, 8, 3, 228, 159, 8, 3, 228, 147, 
-    8, 3, 228, 156, 8, 3, 228, 151, 8, 3, 228, 148, 8, 3, 228, 149, 8, 3, 
-    228, 142, 8, 3, 228, 141, 8, 3, 228, 146, 8, 3, 228, 145, 8, 3, 228, 143, 
-    8, 3, 228, 144, 8, 3, 227, 138, 8, 3, 227, 137, 8, 3, 227, 149, 8, 3, 
-    227, 142, 8, 3, 227, 146, 8, 3, 227, 145, 8, 3, 227, 148, 8, 3, 227, 147, 
-    8, 3, 227, 125, 8, 3, 227, 127, 8, 3, 227, 126, 8, 3, 227, 131, 8, 3, 
-    227, 130, 8, 3, 227, 135, 8, 3, 227, 132, 8, 3, 227, 123, 8, 3, 227, 121, 
-    8, 3, 227, 129, 8, 3, 227, 124, 8, 3, 211, 150, 8, 3, 211, 149, 8, 3, 
+    3, 209, 212, 8, 3, 209, 213, 8, 3, 227, 108, 8, 3, 227, 107, 8, 3, 227, 
+    113, 8, 3, 227, 109, 8, 3, 227, 110, 8, 3, 227, 112, 8, 3, 227, 111, 8, 
+    3, 227, 118, 8, 3, 227, 117, 8, 3, 227, 121, 8, 3, 227, 120, 8, 3, 227, 
+    101, 8, 3, 227, 102, 8, 3, 227, 105, 8, 3, 227, 106, 8, 3, 227, 114, 8, 
+    3, 227, 116, 8, 3, 227, 96, 8, 3, 227, 104, 8, 3, 227, 100, 8, 3, 227, 
+    97, 8, 3, 227, 98, 8, 3, 227, 91, 8, 3, 227, 90, 8, 3, 227, 95, 8, 3, 
+    227, 94, 8, 3, 227, 92, 8, 3, 227, 93, 8, 3, 219, 129, 8, 3, 195, 8, 3, 
+    219, 193, 8, 3, 219, 132, 8, 3, 219, 185, 8, 3, 219, 188, 8, 3, 219, 186, 
+    8, 3, 221, 228, 8, 3, 221, 216, 8, 3, 206, 8, 3, 221, 236, 8, 3, 218, 29, 
+    8, 3, 218, 31, 8, 3, 218, 30, 8, 3, 219, 36, 8, 3, 219, 25, 8, 3, 219, 
+    60, 8, 3, 219, 40, 8, 3, 220, 116, 8, 3, 221, 183, 8, 3, 220, 141, 8, 3, 
+    218, 6, 8, 3, 218, 4, 8, 3, 218, 84, 8, 3, 218, 28, 8, 3, 218, 10, 8, 3, 
+    218, 18, 8, 3, 217, 167, 8, 3, 217, 166, 8, 3, 217, 233, 8, 3, 217, 174, 
+    8, 3, 217, 169, 8, 3, 217, 173, 8, 3, 218, 188, 8, 3, 218, 187, 8, 3, 
+    218, 194, 8, 3, 218, 189, 8, 3, 218, 191, 8, 3, 218, 193, 8, 3, 218, 192, 
+    8, 3, 218, 202, 8, 3, 218, 200, 8, 3, 218, 225, 8, 3, 218, 203, 8, 3, 
+    218, 183, 8, 3, 218, 182, 8, 3, 218, 186, 8, 3, 218, 184, 8, 3, 218, 196, 
+    8, 3, 218, 199, 8, 3, 218, 197, 8, 3, 218, 179, 8, 3, 218, 177, 8, 3, 
+    218, 181, 8, 3, 218, 180, 8, 3, 218, 172, 8, 3, 218, 171, 8, 3, 218, 176, 
+    8, 3, 218, 175, 8, 3, 218, 173, 8, 3, 218, 174, 8, 3, 210, 77, 8, 3, 210, 
+    76, 8, 3, 210, 82, 8, 3, 210, 79, 8, 3, 210, 59, 8, 3, 210, 61, 8, 3, 
+    210, 60, 8, 3, 210, 64, 8, 3, 210, 63, 8, 3, 210, 67, 8, 3, 210, 65, 8, 
+    3, 210, 71, 8, 3, 210, 70, 8, 3, 210, 74, 8, 3, 210, 72, 8, 3, 210, 55, 
+    8, 3, 210, 54, 8, 3, 210, 62, 8, 3, 210, 58, 8, 3, 210, 56, 8, 3, 210, 
+    57, 8, 3, 210, 47, 8, 3, 210, 46, 8, 3, 210, 51, 8, 3, 210, 50, 8, 3, 
+    210, 48, 8, 3, 210, 49, 8, 3, 250, 144, 8, 3, 250, 141, 8, 3, 250, 165, 
+    8, 3, 250, 152, 8, 3, 250, 73, 8, 3, 250, 72, 8, 3, 250, 75, 8, 3, 250, 
+    74, 8, 3, 250, 87, 8, 3, 250, 86, 8, 3, 250, 94, 8, 3, 250, 89, 8, 3, 
+    250, 123, 8, 3, 250, 121, 8, 3, 250, 139, 8, 3, 250, 129, 8, 3, 250, 67, 
+    8, 3, 250, 77, 8, 3, 250, 71, 8, 3, 250, 68, 8, 3, 250, 70, 8, 3, 250, 
+    61, 8, 3, 250, 60, 8, 3, 250, 65, 8, 3, 250, 64, 8, 3, 250, 62, 8, 3, 
+    250, 63, 8, 3, 222, 177, 8, 3, 222, 181, 8, 3, 222, 160, 8, 3, 222, 161, 
+    8, 3, 222, 164, 8, 3, 222, 163, 8, 3, 222, 167, 8, 3, 222, 165, 8, 3, 
+    222, 171, 8, 3, 222, 170, 8, 3, 222, 176, 8, 3, 222, 172, 8, 3, 222, 156, 
+    8, 3, 222, 154, 8, 3, 222, 162, 8, 3, 222, 159, 8, 3, 222, 157, 8, 3, 
+    222, 158, 8, 3, 222, 149, 8, 3, 222, 148, 8, 3, 222, 153, 8, 3, 222, 152, 
+    8, 3, 222, 150, 8, 3, 222, 151, 8, 3, 228, 39, 8, 3, 228, 38, 8, 3, 228, 
+    41, 8, 3, 228, 40, 8, 3, 228, 31, 8, 3, 228, 33, 8, 3, 228, 32, 8, 3, 
+    228, 35, 8, 3, 228, 34, 8, 3, 228, 37, 8, 3, 228, 36, 8, 3, 228, 26, 8, 
+    3, 228, 25, 8, 3, 228, 30, 8, 3, 228, 29, 8, 3, 228, 27, 8, 3, 228, 28, 
+    8, 3, 228, 20, 8, 3, 228, 19, 8, 3, 228, 24, 8, 3, 228, 23, 8, 3, 228, 
+    21, 8, 3, 228, 22, 8, 3, 220, 74, 8, 3, 220, 69, 8, 3, 220, 104, 8, 3, 
+    220, 85, 8, 3, 219, 217, 8, 3, 219, 219, 8, 3, 219, 218, 8, 3, 219, 238, 
+    8, 3, 219, 235, 8, 3, 220, 9, 8, 3, 220, 0, 8, 3, 220, 44, 8, 3, 220, 37, 
+    8, 3, 220, 65, 8, 3, 220, 52, 8, 3, 219, 213, 8, 3, 219, 211, 8, 3, 219, 
+    227, 8, 3, 219, 216, 8, 3, 219, 214, 8, 3, 219, 215, 8, 3, 219, 196, 8, 
+    3, 219, 195, 8, 3, 219, 202, 8, 3, 219, 199, 8, 3, 219, 197, 8, 3, 219, 
+    198, 8, 3, 223, 144, 8, 3, 223, 138, 8, 3, 205, 8, 3, 223, 150, 8, 3, 
+    222, 122, 8, 3, 222, 124, 8, 3, 222, 123, 8, 3, 222, 190, 8, 3, 222, 183, 
+    8, 3, 222, 213, 8, 3, 222, 194, 8, 3, 223, 46, 8, 3, 223, 131, 8, 3, 223, 
+    84, 8, 3, 222, 115, 8, 3, 222, 112, 8, 3, 222, 142, 8, 3, 222, 121, 8, 3, 
+    222, 117, 8, 3, 222, 118, 8, 3, 222, 97, 8, 3, 222, 96, 8, 3, 222, 102, 
+    8, 3, 222, 100, 8, 3, 222, 98, 8, 3, 222, 99, 8, 3, 235, 104, 8, 3, 235, 
+    103, 8, 3, 235, 114, 8, 3, 235, 105, 8, 3, 235, 110, 8, 3, 235, 109, 8, 
+    3, 235, 112, 8, 3, 235, 111, 8, 3, 235, 47, 8, 3, 235, 46, 8, 3, 235, 49, 
+    8, 3, 235, 48, 8, 3, 235, 62, 8, 3, 235, 60, 8, 3, 235, 74, 8, 3, 235, 
+    64, 8, 3, 235, 40, 8, 3, 235, 38, 8, 3, 235, 57, 8, 3, 235, 45, 8, 3, 
+    235, 42, 8, 3, 235, 43, 8, 3, 235, 32, 8, 3, 235, 31, 8, 3, 235, 36, 8, 
+    3, 235, 35, 8, 3, 235, 33, 8, 3, 235, 34, 8, 3, 224, 49, 8, 3, 224, 47, 
+    8, 3, 224, 56, 8, 3, 224, 50, 8, 3, 224, 53, 8, 3, 224, 52, 8, 3, 224, 
+    55, 8, 3, 224, 54, 8, 3, 224, 2, 8, 3, 223, 255, 8, 3, 224, 4, 8, 3, 224, 
+    3, 8, 3, 224, 36, 8, 3, 224, 35, 8, 3, 224, 45, 8, 3, 224, 39, 8, 3, 223, 
+    250, 8, 3, 223, 246, 8, 3, 224, 33, 8, 3, 223, 254, 8, 3, 223, 252, 8, 3, 
+    223, 253, 8, 3, 223, 230, 8, 3, 223, 228, 8, 3, 223, 240, 8, 3, 223, 233, 
+    8, 3, 223, 231, 8, 3, 223, 232, 8, 3, 235, 93, 8, 3, 235, 92, 8, 3, 235, 
+    99, 8, 3, 235, 94, 8, 3, 235, 96, 8, 3, 235, 95, 8, 3, 235, 98, 8, 3, 
+    235, 97, 8, 3, 235, 84, 8, 3, 235, 86, 8, 3, 235, 85, 8, 3, 235, 89, 8, 
+    3, 235, 88, 8, 3, 235, 91, 8, 3, 235, 90, 8, 3, 235, 80, 8, 3, 235, 79, 
+    8, 3, 235, 87, 8, 3, 235, 83, 8, 3, 235, 81, 8, 3, 235, 82, 8, 3, 235, 
+    76, 8, 3, 235, 75, 8, 3, 235, 78, 8, 3, 235, 77, 8, 3, 228, 167, 8, 3, 
+    228, 166, 8, 3, 228, 174, 8, 3, 228, 168, 8, 3, 228, 170, 8, 3, 228, 169, 
+    8, 3, 228, 173, 8, 3, 228, 171, 8, 3, 228, 156, 8, 3, 228, 157, 8, 3, 
+    228, 162, 8, 3, 228, 161, 8, 3, 228, 165, 8, 3, 228, 163, 8, 3, 228, 151, 
+    8, 3, 228, 160, 8, 3, 228, 155, 8, 3, 228, 152, 8, 3, 228, 153, 8, 3, 
+    228, 146, 8, 3, 228, 145, 8, 3, 228, 150, 8, 3, 228, 149, 8, 3, 228, 147, 
+    8, 3, 228, 148, 8, 3, 227, 141, 8, 3, 227, 140, 8, 3, 227, 152, 8, 3, 
+    227, 145, 8, 3, 227, 149, 8, 3, 227, 148, 8, 3, 227, 151, 8, 3, 227, 150, 
+    8, 3, 227, 128, 8, 3, 227, 130, 8, 3, 227, 129, 8, 3, 227, 134, 8, 3, 
+    227, 133, 8, 3, 227, 138, 8, 3, 227, 135, 8, 3, 227, 126, 8, 3, 227, 124, 
+    8, 3, 227, 132, 8, 3, 227, 127, 8, 3, 211, 150, 8, 3, 211, 149, 8, 3, 
     211, 157, 8, 3, 211, 152, 8, 3, 211, 154, 8, 3, 211, 153, 8, 3, 211, 156, 
     8, 3, 211, 155, 8, 3, 211, 139, 8, 3, 211, 140, 8, 3, 211, 144, 8, 3, 
     211, 143, 8, 3, 211, 148, 8, 3, 211, 146, 8, 3, 211, 121, 8, 3, 211, 119, 
@@ -9890,2102 +9891,2101 @@
     244, 8, 3, 210, 228, 8, 3, 210, 182, 8, 3, 210, 178, 8, 3, 210, 212, 8, 
     3, 210, 189, 8, 3, 210, 185, 8, 3, 210, 186, 8, 3, 210, 162, 8, 3, 210, 
     161, 8, 3, 210, 169, 8, 3, 210, 165, 8, 3, 210, 163, 8, 3, 210, 164, 8, 
-    34, 224, 34, 8, 34, 232, 242, 8, 34, 234, 62, 8, 34, 227, 142, 8, 34, 
-    249, 70, 8, 34, 218, 193, 8, 34, 243, 13, 8, 34, 243, 45, 8, 34, 230, 
-    231, 8, 34, 240, 181, 8, 34, 232, 57, 8, 34, 252, 84, 8, 34, 230, 127, 8, 
-    34, 210, 244, 8, 34, 224, 122, 8, 34, 240, 175, 8, 34, 217, 47, 8, 34, 
-    243, 136, 8, 34, 210, 5, 8, 34, 249, 64, 8, 34, 248, 96, 8, 34, 251, 99, 
-    8, 34, 243, 9, 8, 34, 227, 132, 8, 34, 215, 119, 8, 34, 226, 176, 8, 34, 
-    235, 75, 8, 34, 210, 19, 8, 34, 224, 101, 8, 34, 241, 109, 8, 34, 210, 
-    250, 8, 34, 212, 112, 8, 34, 219, 201, 8, 34, 213, 244, 8, 34, 210, 116, 
-    8, 34, 235, 69, 8, 34, 227, 97, 8, 34, 235, 73, 8, 34, 242, 155, 8, 34, 
-    235, 93, 8, 34, 211, 227, 8, 34, 246, 79, 8, 34, 219, 214, 8, 34, 232, 
-    237, 8, 34, 249, 74, 8, 34, 249, 106, 8, 34, 250, 38, 8, 34, 240, 178, 8, 
-    34, 220, 73, 8, 34, 210, 4, 8, 34, 219, 255, 8, 34, 250, 132, 8, 34, 209, 
-    231, 8, 34, 229, 174, 8, 34, 234, 183, 232, 197, 1, 252, 192, 232, 197, 
-    1, 190, 232, 197, 1, 225, 148, 232, 197, 1, 248, 222, 232, 197, 1, 217, 
-    106, 232, 197, 1, 216, 209, 232, 197, 1, 243, 136, 232, 197, 1, 176, 232, 
-    197, 1, 234, 133, 232, 197, 1, 235, 142, 232, 197, 1, 251, 34, 232, 197, 
-    1, 250, 158, 232, 197, 1, 246, 39, 232, 197, 1, 215, 184, 232, 197, 1, 
-    215, 176, 232, 197, 1, 185, 232, 197, 1, 197, 232, 197, 1, 233, 136, 232, 
-    197, 1, 206, 232, 197, 1, 210, 82, 232, 197, 1, 210, 116, 232, 197, 1, 
-    229, 78, 232, 197, 1, 162, 232, 197, 1, 211, 165, 232, 197, 1, 241, 190, 
-    232, 197, 1, 244, 197, 232, 197, 1, 212, 65, 232, 197, 1, 220, 103, 232, 
-    197, 1, 191, 232, 197, 1, 242, 250, 232, 197, 1, 61, 232, 197, 1, 254, 
-    244, 232, 197, 1, 75, 232, 197, 1, 245, 56, 232, 197, 1, 73, 232, 197, 1, 
-    76, 232, 197, 1, 70, 232, 197, 1, 214, 214, 232, 197, 1, 214, 208, 232, 
-    197, 1, 226, 235, 232, 197, 1, 138, 230, 33, 216, 118, 232, 197, 1, 138, 
-    229, 230, 225, 17, 232, 197, 1, 138, 230, 33, 249, 73, 232, 197, 1, 138, 
-    230, 33, 251, 206, 232, 197, 1, 138, 230, 33, 197, 232, 197, 1, 138, 230, 
-    33, 235, 116, 232, 197, 224, 142, 249, 220, 232, 197, 224, 142, 243, 230, 
-    218, 130, 41, 3, 245, 210, 41, 3, 245, 206, 41, 3, 241, 221, 41, 3, 212, 
-    17, 41, 3, 212, 16, 41, 3, 225, 212, 41, 3, 252, 14, 41, 3, 252, 67, 41, 
-    3, 231, 117, 41, 3, 233, 248, 41, 3, 231, 7, 41, 3, 243, 76, 41, 3, 244, 
-    148, 41, 3, 213, 250, 41, 3, 217, 12, 41, 3, 216, 195, 41, 3, 248, 17, 
-    41, 3, 248, 14, 41, 3, 233, 51, 41, 3, 223, 109, 41, 3, 248, 78, 41, 3, 
-    229, 140, 41, 3, 221, 171, 41, 3, 220, 62, 41, 3, 210, 92, 41, 3, 210, 
-    73, 41, 3, 250, 183, 41, 3, 235, 125, 41, 3, 228, 177, 41, 3, 211, 44, 
-    41, 3, 234, 182, 41, 3, 229, 52, 41, 3, 243, 56, 41, 3, 231, 81, 41, 3, 
-    229, 104, 41, 3, 227, 156, 41, 3, 73, 41, 3, 236, 0, 41, 3, 241, 181, 41, 
-    3, 241, 161, 41, 3, 211, 250, 41, 3, 211, 241, 41, 3, 225, 109, 41, 3, 
-    252, 12, 41, 3, 252, 7, 41, 3, 231, 110, 41, 3, 233, 245, 41, 3, 231, 4, 
-    41, 3, 243, 72, 41, 3, 244, 122, 41, 3, 213, 176, 41, 3, 216, 118, 41, 3, 
-    216, 176, 41, 3, 248, 9, 41, 3, 248, 13, 41, 3, 232, 242, 41, 3, 223, 36, 
-    41, 3, 248, 4, 41, 3, 229, 134, 41, 3, 219, 192, 41, 3, 220, 33, 41, 3, 
-    210, 44, 41, 3, 210, 69, 41, 3, 250, 52, 41, 3, 235, 109, 41, 3, 228, 
-    170, 41, 3, 211, 8, 41, 3, 234, 93, 41, 3, 229, 44, 41, 3, 242, 215, 41, 
-    3, 230, 231, 41, 3, 228, 234, 41, 3, 227, 149, 41, 3, 61, 41, 3, 254, 
-    124, 41, 3, 229, 73, 41, 3, 162, 41, 3, 242, 19, 41, 3, 212, 65, 41, 3, 
-    212, 55, 41, 3, 190, 41, 3, 252, 19, 41, 3, 252, 192, 41, 3, 231, 125, 
-    41, 3, 233, 252, 41, 3, 233, 251, 41, 3, 231, 11, 41, 3, 243, 80, 41, 3, 
-    244, 197, 41, 3, 214, 27, 41, 3, 217, 106, 41, 3, 216, 209, 41, 3, 248, 
-    26, 41, 3, 248, 16, 41, 3, 233, 136, 41, 3, 205, 41, 3, 248, 222, 41, 3, 
-    229, 149, 41, 3, 206, 41, 3, 220, 103, 41, 3, 210, 116, 41, 3, 210, 82, 
-    41, 3, 251, 34, 41, 3, 235, 142, 41, 3, 228, 186, 41, 3, 191, 41, 3, 176, 
-    41, 3, 234, 235, 41, 3, 229, 57, 41, 3, 243, 136, 41, 3, 185, 41, 3, 197, 
-    41, 3, 227, 166, 41, 3, 226, 184, 41, 3, 226, 180, 41, 3, 241, 54, 41, 3, 
-    211, 215, 41, 3, 211, 211, 41, 3, 224, 250, 41, 3, 252, 10, 41, 3, 251, 
-    194, 41, 3, 231, 105, 41, 3, 233, 243, 41, 3, 231, 0, 41, 3, 243, 68, 41, 
-    3, 244, 35, 41, 3, 213, 127, 41, 3, 216, 18, 41, 3, 216, 154, 41, 3, 248, 
-    7, 41, 3, 248, 11, 41, 3, 232, 128, 41, 3, 222, 198, 41, 3, 247, 126, 41, 
-    3, 229, 121, 41, 3, 219, 41, 41, 3, 220, 2, 41, 3, 210, 21, 41, 3, 210, 
-    66, 41, 3, 249, 175, 41, 3, 235, 60, 41, 3, 228, 160, 41, 3, 210, 229, 
-    41, 3, 234, 11, 41, 3, 229, 42, 41, 3, 242, 165, 41, 3, 230, 133, 41, 3, 
-    228, 65, 41, 3, 227, 133, 41, 3, 70, 41, 3, 214, 190, 41, 3, 240, 223, 
-    41, 3, 240, 213, 41, 3, 211, 195, 41, 3, 211, 189, 41, 3, 224, 151, 41, 
-    3, 252, 9, 41, 3, 251, 126, 41, 3, 231, 104, 41, 3, 233, 241, 41, 3, 230, 
-    255, 41, 3, 243, 67, 41, 3, 243, 235, 41, 3, 212, 116, 41, 3, 215, 119, 
-    41, 3, 216, 137, 41, 3, 248, 5, 41, 3, 248, 10, 41, 3, 232, 99, 41, 3, 
-    222, 141, 41, 3, 246, 79, 41, 3, 229, 116, 41, 3, 218, 84, 41, 3, 219, 
-    226, 41, 3, 210, 13, 41, 3, 210, 62, 41, 3, 249, 113, 41, 3, 235, 52, 41, 
-    3, 228, 156, 41, 3, 210, 212, 41, 3, 233, 218, 41, 3, 229, 41, 41, 3, 
-    242, 114, 41, 3, 230, 103, 41, 3, 227, 238, 41, 3, 227, 129, 41, 3, 76, 
-    41, 3, 226, 197, 41, 3, 229, 1, 41, 3, 241, 69, 41, 3, 241, 57, 41, 3, 
-    211, 227, 41, 3, 211, 216, 41, 3, 225, 17, 41, 3, 252, 11, 41, 3, 251, 
-    206, 41, 3, 231, 106, 41, 3, 233, 244, 41, 3, 231, 2, 41, 3, 243, 70, 41, 
-    3, 243, 69, 41, 3, 244, 44, 41, 3, 213, 138, 41, 3, 111, 41, 3, 216, 157, 
-    41, 3, 248, 8, 41, 3, 248, 12, 41, 3, 232, 157, 41, 3, 222, 212, 41, 3, 
-    247, 146, 41, 3, 229, 125, 41, 3, 219, 59, 41, 3, 220, 8, 41, 3, 210, 23, 
-    41, 3, 210, 67, 41, 3, 249, 239, 41, 3, 235, 69, 41, 3, 228, 161, 41, 3, 
-    210, 244, 41, 3, 234, 29, 41, 3, 229, 43, 41, 3, 242, 175, 41, 3, 230, 
-    162, 41, 3, 228, 75, 41, 3, 227, 135, 41, 3, 75, 41, 3, 245, 151, 41, 3, 
-    229, 62, 41, 3, 241, 239, 41, 3, 241, 210, 41, 3, 212, 22, 41, 3, 212, 
-    12, 41, 3, 225, 222, 41, 3, 252, 15, 41, 3, 252, 76, 41, 3, 231, 118, 41, 
-    3, 233, 249, 41, 3, 233, 247, 41, 3, 231, 8, 41, 3, 243, 77, 41, 3, 243, 
-    75, 41, 3, 244, 155, 41, 3, 213, 255, 41, 3, 217, 23, 41, 3, 216, 196, 
-    41, 3, 248, 18, 41, 3, 248, 15, 41, 3, 233, 59, 41, 3, 223, 129, 41, 3, 
-    248, 91, 41, 3, 229, 141, 41, 3, 221, 182, 41, 3, 220, 64, 41, 3, 210, 
-    94, 41, 3, 210, 74, 41, 3, 250, 191, 41, 3, 235, 127, 41, 3, 228, 179, 
-    41, 3, 211, 47, 41, 3, 234, 183, 41, 3, 229, 53, 41, 3, 229, 49, 41, 3, 
-    243, 63, 41, 3, 243, 52, 41, 3, 231, 92, 41, 3, 229, 108, 41, 3, 227, 
-    157, 41, 3, 229, 80, 41, 3, 233, 23, 41, 249, 220, 41, 243, 230, 218, 
-    130, 41, 224, 14, 78, 41, 3, 229, 124, 244, 197, 41, 3, 229, 124, 176, 
-    41, 3, 229, 124, 219, 41, 41, 16, 244, 145, 41, 16, 234, 181, 41, 16, 
-    216, 82, 41, 16, 228, 209, 41, 16, 252, 148, 41, 16, 244, 196, 41, 16, 
-    217, 102, 41, 16, 248, 177, 41, 16, 247, 125, 41, 16, 233, 207, 41, 16, 
-    216, 22, 41, 16, 247, 145, 41, 16, 235, 61, 41, 21, 210, 86, 41, 21, 110, 
-    41, 21, 105, 41, 21, 158, 41, 21, 161, 41, 21, 189, 41, 21, 194, 41, 21, 
-    198, 41, 21, 195, 41, 21, 200, 41, 3, 229, 124, 185, 41, 3, 229, 124, 
-    247, 146, 33, 6, 1, 210, 90, 33, 4, 1, 210, 90, 33, 6, 1, 246, 35, 33, 4, 
-    1, 246, 35, 33, 6, 1, 223, 50, 246, 37, 33, 4, 1, 223, 50, 246, 37, 33, 
-    6, 1, 235, 186, 33, 4, 1, 235, 186, 33, 6, 1, 247, 162, 33, 4, 1, 247, 
-    162, 33, 6, 1, 230, 141, 214, 205, 33, 4, 1, 230, 141, 214, 205, 33, 6, 
-    1, 251, 137, 226, 202, 33, 4, 1, 251, 137, 226, 202, 33, 6, 1, 229, 88, 
-    211, 31, 33, 4, 1, 229, 88, 211, 31, 33, 6, 1, 211, 28, 2, 252, 186, 211, 
-    31, 33, 4, 1, 211, 28, 2, 252, 186, 211, 31, 33, 6, 1, 235, 184, 211, 59, 
-    33, 4, 1, 235, 184, 211, 59, 33, 6, 1, 223, 50, 210, 212, 33, 4, 1, 223, 
-    50, 210, 212, 33, 6, 1, 235, 184, 61, 33, 4, 1, 235, 184, 61, 33, 6, 1, 
-    250, 1, 232, 193, 210, 183, 33, 4, 1, 250, 1, 232, 193, 210, 183, 33, 6, 
-    1, 251, 215, 210, 183, 33, 4, 1, 251, 215, 210, 183, 33, 6, 1, 235, 184, 
-    250, 1, 232, 193, 210, 183, 33, 4, 1, 235, 184, 250, 1, 232, 193, 210, 
-    183, 33, 6, 1, 210, 246, 33, 4, 1, 210, 246, 33, 6, 1, 223, 50, 215, 179, 
-    33, 4, 1, 223, 50, 215, 179, 33, 6, 1, 219, 53, 248, 91, 33, 4, 1, 219, 
-    53, 248, 91, 33, 6, 1, 219, 53, 245, 175, 33, 4, 1, 219, 53, 245, 175, 
-    33, 6, 1, 219, 53, 245, 160, 33, 4, 1, 219, 53, 245, 160, 33, 6, 1, 230, 
-    145, 76, 33, 4, 1, 230, 145, 76, 33, 6, 1, 251, 241, 76, 33, 4, 1, 251, 
-    241, 76, 33, 6, 1, 52, 230, 145, 76, 33, 4, 1, 52, 230, 145, 76, 33, 1, 
-    230, 87, 76, 38, 33, 212, 100, 38, 33, 216, 249, 230, 192, 50, 38, 33, 
-    240, 212, 230, 192, 50, 38, 33, 216, 149, 230, 192, 50, 219, 94, 253, 
-    217, 38, 33, 1, 214, 202, 236, 61, 38, 33, 1, 73, 38, 33, 1, 211, 8, 38, 
-    33, 1, 70, 38, 33, 1, 242, 4, 50, 38, 33, 1, 211, 27, 38, 33, 1, 219, 53, 
-    50, 38, 33, 1, 226, 202, 38, 33, 234, 193, 38, 33, 225, 228, 33, 234, 
-    193, 33, 225, 228, 33, 6, 1, 246, 47, 33, 4, 1, 246, 47, 33, 6, 1, 246, 
-    28, 33, 4, 1, 246, 28, 33, 6, 1, 210, 52, 33, 4, 1, 210, 52, 33, 6, 1, 
-    250, 207, 33, 4, 1, 250, 207, 33, 6, 1, 246, 26, 33, 4, 1, 246, 26, 33, 
-    6, 1, 217, 24, 2, 230, 225, 103, 33, 4, 1, 217, 24, 2, 230, 225, 103, 33, 
-    6, 1, 215, 78, 33, 4, 1, 215, 78, 33, 6, 1, 215, 161, 33, 4, 1, 215, 161, 
-    33, 6, 1, 215, 165, 33, 4, 1, 215, 165, 33, 6, 1, 217, 29, 33, 4, 1, 217, 
-    29, 33, 6, 1, 240, 199, 33, 4, 1, 240, 199, 33, 6, 1, 219, 207, 33, 4, 1, 
-    219, 207, 38, 33, 1, 235, 184, 75, 20, 1, 61, 20, 1, 176, 20, 1, 70, 20, 
-    1, 233, 218, 20, 1, 245, 210, 20, 1, 223, 109, 20, 1, 217, 87, 20, 1, 76, 
-    20, 1, 227, 149, 20, 1, 73, 20, 1, 233, 136, 20, 1, 190, 20, 1, 222, 240, 
-    20, 1, 223, 30, 20, 1, 233, 50, 20, 1, 231, 80, 20, 1, 217, 102, 20, 1, 
-    229, 147, 20, 1, 228, 184, 20, 1, 193, 20, 1, 218, 5, 20, 1, 230, 103, 
-    20, 1, 220, 28, 20, 1, 219, 192, 20, 1, 220, 38, 20, 1, 220, 124, 20, 1, 
-    233, 156, 20, 1, 234, 157, 20, 1, 227, 210, 20, 1, 227, 238, 20, 1, 228, 
-    155, 20, 1, 210, 226, 20, 1, 219, 226, 20, 1, 210, 187, 20, 1, 191, 20, 
-    1, 228, 10, 20, 1, 234, 143, 20, 1, 225, 152, 20, 1, 228, 177, 20, 1, 
-    227, 247, 20, 1, 224, 145, 20, 1, 211, 192, 20, 1, 225, 212, 20, 1, 244, 
-    148, 20, 1, 222, 141, 20, 1, 232, 99, 20, 1, 230, 231, 20, 1, 228, 234, 
-    20, 1, 223, 52, 20, 1, 223, 172, 20, 1, 234, 166, 20, 1, 229, 8, 20, 1, 
-    229, 57, 20, 1, 229, 78, 20, 1, 220, 8, 20, 1, 224, 148, 20, 1, 243, 235, 
-    20, 1, 244, 38, 20, 1, 212, 65, 20, 1, 197, 20, 1, 232, 242, 20, 1, 225, 
-    109, 20, 1, 232, 120, 20, 1, 234, 29, 20, 1, 231, 115, 20, 1, 223, 84, 
-    20, 1, 231, 59, 20, 1, 185, 20, 1, 216, 118, 20, 1, 234, 93, 20, 1, 230, 
-    162, 20, 1, 231, 123, 20, 1, 216, 231, 20, 1, 233, 252, 20, 1, 216, 248, 
-    20, 1, 227, 239, 20, 1, 221, 252, 20, 1, 244, 193, 20, 1, 233, 254, 20, 
-    1, 234, 25, 20, 38, 164, 234, 6, 20, 38, 164, 215, 111, 20, 228, 183, 20, 
-    243, 230, 218, 130, 20, 249, 227, 20, 249, 220, 20, 220, 151, 20, 224, 
-    14, 78, 58, 1, 250, 97, 138, 210, 254, 225, 62, 58, 1, 250, 97, 138, 211, 
-    70, 225, 62, 58, 1, 250, 97, 138, 210, 254, 220, 85, 58, 1, 250, 97, 138, 
-    211, 70, 220, 85, 58, 1, 250, 97, 138, 210, 254, 224, 31, 58, 1, 250, 97, 
-    138, 211, 70, 224, 31, 58, 1, 250, 97, 138, 210, 254, 222, 141, 58, 1, 
-    250, 97, 138, 211, 70, 222, 141, 58, 1, 245, 21, 246, 119, 138, 130, 58, 
-    1, 125, 246, 119, 138, 130, 58, 1, 230, 226, 246, 119, 138, 130, 58, 1, 
-    121, 246, 119, 138, 130, 58, 1, 245, 20, 246, 119, 138, 130, 58, 1, 245, 
-    21, 246, 119, 233, 40, 138, 130, 58, 1, 125, 246, 119, 233, 40, 138, 130, 
-    58, 1, 230, 226, 246, 119, 233, 40, 138, 130, 58, 1, 121, 246, 119, 233, 
-    40, 138, 130, 58, 1, 245, 20, 246, 119, 233, 40, 138, 130, 58, 1, 245, 
-    21, 233, 40, 138, 130, 58, 1, 125, 233, 40, 138, 130, 58, 1, 230, 226, 
-    233, 40, 138, 130, 58, 1, 121, 233, 40, 138, 130, 58, 1, 245, 20, 233, 
-    40, 138, 130, 58, 1, 59, 67, 130, 58, 1, 59, 219, 96, 58, 1, 59, 203, 
-    130, 58, 1, 232, 109, 44, 249, 162, 254, 110, 58, 1, 223, 158, 120, 74, 
-    58, 1, 223, 158, 124, 74, 58, 1, 223, 158, 245, 32, 78, 58, 1, 223, 158, 
-    235, 194, 245, 32, 78, 58, 1, 121, 235, 194, 245, 32, 78, 58, 1, 218, 
-    112, 22, 125, 216, 31, 58, 1, 218, 112, 22, 121, 216, 31, 7, 6, 1, 245, 
-    200, 254, 171, 7, 4, 1, 245, 200, 254, 171, 7, 6, 1, 245, 200, 254, 197, 
-    7, 4, 1, 245, 200, 254, 197, 7, 6, 1, 241, 208, 7, 4, 1, 241, 208, 7, 6, 
-    1, 215, 40, 7, 4, 1, 215, 40, 7, 6, 1, 215, 230, 7, 4, 1, 215, 230, 7, 6, 
-    1, 249, 111, 7, 4, 1, 249, 111, 7, 6, 1, 249, 112, 2, 249, 220, 7, 4, 1, 
-    249, 112, 2, 249, 220, 7, 1, 4, 6, 245, 7, 7, 1, 4, 6, 222, 92, 7, 6, 1, 
-    255, 74, 7, 4, 1, 255, 74, 7, 6, 1, 254, 74, 7, 4, 1, 254, 74, 7, 6, 1, 
-    253, 193, 7, 4, 1, 253, 193, 7, 6, 1, 253, 177, 7, 4, 1, 253, 177, 7, 6, 
-    1, 253, 178, 2, 203, 130, 7, 4, 1, 253, 178, 2, 203, 130, 7, 6, 1, 253, 
-    168, 7, 4, 1, 253, 168, 7, 6, 1, 223, 50, 251, 68, 2, 247, 121, 7, 4, 1, 
-    223, 50, 251, 68, 2, 247, 121, 7, 6, 1, 235, 25, 2, 91, 7, 4, 1, 235, 25, 
-    2, 91, 7, 6, 1, 235, 25, 2, 248, 0, 91, 7, 4, 1, 235, 25, 2, 248, 0, 91, 
-    7, 6, 1, 235, 25, 2, 218, 104, 22, 248, 0, 91, 7, 4, 1, 235, 25, 2, 218, 
-    104, 22, 248, 0, 91, 7, 6, 1, 251, 136, 156, 7, 4, 1, 251, 136, 156, 7, 
-    6, 1, 233, 150, 2, 125, 91, 7, 4, 1, 233, 150, 2, 125, 91, 7, 6, 1, 144, 
-    2, 199, 218, 104, 226, 121, 7, 4, 1, 144, 2, 199, 218, 104, 226, 121, 7, 
-    6, 1, 144, 2, 232, 124, 7, 4, 1, 144, 2, 232, 124, 7, 6, 1, 226, 184, 7, 
-    4, 1, 226, 184, 7, 6, 1, 226, 107, 2, 218, 104, 216, 140, 248, 40, 7, 4, 
-    1, 226, 107, 2, 218, 104, 216, 140, 248, 40, 7, 6, 1, 226, 107, 2, 244, 
-    54, 7, 4, 1, 226, 107, 2, 244, 54, 7, 6, 1, 226, 107, 2, 218, 230, 217, 
-    78, 7, 4, 1, 226, 107, 2, 218, 230, 217, 78, 7, 6, 1, 224, 98, 2, 218, 
-    104, 216, 140, 248, 40, 7, 4, 1, 224, 98, 2, 218, 104, 216, 140, 248, 40, 
-    7, 6, 1, 224, 98, 2, 248, 0, 91, 7, 4, 1, 224, 98, 2, 248, 0, 91, 7, 6, 
-    1, 223, 225, 222, 187, 7, 4, 1, 223, 225, 222, 187, 7, 6, 1, 222, 131, 
-    222, 187, 7, 4, 1, 222, 131, 222, 187, 7, 6, 1, 214, 106, 2, 248, 0, 91, 
-    7, 4, 1, 214, 106, 2, 248, 0, 91, 7, 6, 1, 212, 106, 7, 4, 1, 212, 106, 
-    7, 6, 1, 213, 145, 210, 159, 7, 4, 1, 213, 145, 210, 159, 7, 6, 1, 216, 
-    153, 2, 91, 7, 4, 1, 216, 153, 2, 91, 7, 6, 1, 216, 153, 2, 218, 104, 
-    216, 140, 248, 40, 7, 4, 1, 216, 153, 2, 218, 104, 216, 140, 248, 40, 7, 
-    6, 1, 213, 245, 7, 4, 1, 213, 245, 7, 6, 1, 245, 66, 7, 4, 1, 245, 66, 7, 
-    6, 1, 235, 172, 7, 4, 1, 235, 172, 7, 6, 1, 249, 208, 7, 4, 1, 249, 208, 
-    58, 1, 214, 133, 7, 4, 1, 246, 70, 7, 4, 1, 232, 85, 7, 4, 1, 230, 81, 7, 
-    4, 1, 227, 202, 7, 4, 1, 222, 130, 7, 1, 4, 6, 222, 130, 7, 4, 1, 215, 
-    109, 7, 4, 1, 214, 197, 7, 6, 1, 235, 214, 249, 61, 7, 4, 1, 235, 214, 
-    249, 61, 7, 6, 1, 235, 214, 245, 7, 7, 4, 1, 235, 214, 245, 7, 7, 6, 1, 
-    235, 214, 243, 203, 7, 6, 1, 215, 94, 235, 214, 243, 203, 7, 4, 1, 215, 
-    94, 235, 214, 243, 203, 7, 6, 1, 215, 94, 156, 7, 4, 1, 215, 94, 156, 7, 
-    6, 1, 235, 214, 153, 7, 4, 1, 235, 214, 153, 7, 6, 1, 235, 214, 222, 92, 
-    7, 4, 1, 235, 214, 222, 92, 7, 6, 1, 235, 214, 217, 153, 7, 4, 1, 235, 
-    214, 217, 153, 58, 1, 121, 250, 32, 255, 15, 58, 1, 249, 227, 58, 1, 219, 
-    252, 245, 99, 50, 7, 6, 1, 222, 0, 7, 4, 1, 222, 0, 7, 6, 1, 215, 94, 
-    242, 61, 7, 4, 1, 233, 150, 2, 223, 56, 241, 53, 22, 252, 42, 7, 6, 1, 
-    230, 27, 2, 248, 40, 7, 4, 1, 230, 27, 2, 248, 40, 7, 6, 1, 251, 68, 2, 
-    130, 7, 4, 1, 251, 68, 2, 130, 7, 6, 1, 243, 204, 2, 226, 249, 91, 7, 4, 
-    1, 243, 204, 2, 226, 249, 91, 7, 6, 1, 235, 25, 2, 226, 249, 91, 7, 4, 1, 
-    235, 25, 2, 226, 249, 91, 7, 6, 1, 230, 27, 2, 226, 249, 91, 7, 4, 1, 
-    230, 27, 2, 226, 249, 91, 7, 6, 1, 223, 225, 2, 226, 249, 91, 7, 4, 1, 
-    223, 225, 2, 226, 249, 91, 7, 6, 1, 222, 93, 2, 226, 249, 91, 7, 4, 1, 
-    222, 93, 2, 226, 249, 91, 7, 6, 1, 242, 62, 2, 103, 58, 1, 6, 242, 62, 2, 
-    91, 58, 1, 4, 27, 226, 235, 7, 1, 4, 6, 215, 94, 193, 7, 245, 104, 1, 
-    223, 50, 245, 7, 7, 245, 104, 1, 223, 50, 226, 106, 7, 245, 104, 1, 235, 
-    194, 193, 7, 245, 104, 1, 240, 155, 232, 130, 7, 245, 104, 1, 254, 24, 
-    193, 217, 231, 229, 215, 1, 61, 217, 231, 229, 215, 1, 73, 217, 231, 229, 
-    215, 5, 246, 49, 217, 231, 229, 215, 1, 70, 217, 231, 229, 215, 1, 75, 
-    217, 231, 229, 215, 1, 76, 217, 231, 229, 215, 5, 241, 254, 217, 231, 
-    229, 215, 1, 234, 29, 217, 231, 229, 215, 1, 234, 106, 217, 231, 229, 
-    215, 1, 242, 175, 217, 231, 229, 215, 1, 242, 225, 217, 231, 229, 215, 5, 
-    254, 76, 217, 231, 229, 215, 1, 249, 239, 217, 231, 229, 215, 1, 250, 87, 
-    217, 231, 229, 215, 1, 235, 69, 217, 231, 229, 215, 1, 235, 110, 217, 
-    231, 229, 215, 1, 215, 134, 217, 231, 229, 215, 1, 215, 140, 217, 231, 
-    229, 215, 1, 248, 106, 217, 231, 229, 215, 1, 248, 115, 217, 231, 229, 
-    215, 1, 111, 217, 231, 229, 215, 1, 216, 157, 217, 231, 229, 215, 1, 247, 
-    146, 217, 231, 229, 215, 1, 248, 8, 217, 231, 229, 215, 1, 228, 75, 217, 
-    231, 229, 215, 1, 225, 17, 217, 231, 229, 215, 1, 225, 122, 217, 231, 
-    229, 215, 1, 251, 206, 217, 231, 229, 215, 1, 252, 11, 217, 231, 229, 
-    215, 1, 230, 162, 217, 231, 229, 215, 1, 222, 212, 217, 231, 229, 215, 1, 
-    232, 157, 217, 231, 229, 215, 1, 222, 166, 217, 231, 229, 215, 1, 219, 
-    59, 217, 231, 229, 215, 1, 241, 69, 217, 231, 229, 215, 25, 5, 61, 217, 
-    231, 229, 215, 25, 5, 73, 217, 231, 229, 215, 25, 5, 70, 217, 231, 229, 
-    215, 25, 5, 75, 217, 231, 229, 215, 25, 5, 226, 184, 217, 231, 229, 215, 
-    225, 13, 231, 159, 217, 231, 229, 215, 225, 13, 231, 158, 217, 231, 229, 
-    215, 225, 13, 231, 157, 217, 231, 229, 215, 225, 13, 231, 156, 228, 57, 
-    235, 241, 244, 3, 123, 224, 22, 228, 57, 235, 241, 244, 3, 123, 242, 28, 
-    228, 57, 235, 241, 244, 3, 134, 224, 20, 228, 57, 235, 241, 244, 3, 123, 
-    219, 118, 228, 57, 235, 241, 244, 3, 123, 245, 189, 228, 57, 235, 241, 
-    244, 3, 134, 219, 117, 228, 57, 235, 241, 224, 23, 78, 228, 57, 235, 241, 
-    225, 41, 78, 228, 57, 235, 241, 222, 119, 78, 228, 57, 235, 241, 224, 24, 
-    78, 225, 145, 1, 176, 225, 145, 1, 234, 133, 225, 145, 1, 243, 136, 225, 
-    145, 1, 229, 78, 225, 145, 1, 251, 34, 225, 145, 1, 250, 158, 225, 145, 
-    1, 235, 142, 225, 145, 1, 227, 166, 225, 145, 1, 217, 106, 225, 145, 1, 
-    216, 209, 225, 145, 1, 248, 222, 225, 145, 1, 197, 225, 145, 1, 190, 225, 
-    145, 1, 225, 148, 225, 145, 1, 252, 192, 225, 145, 1, 185, 225, 145, 1, 
-    215, 184, 225, 145, 1, 215, 176, 225, 145, 1, 246, 39, 225, 145, 1, 212, 
-    65, 225, 145, 1, 210, 82, 225, 145, 1, 210, 116, 225, 145, 1, 4, 61, 225, 
-    145, 1, 191, 225, 145, 1, 205, 225, 145, 1, 233, 136, 225, 145, 1, 220, 
-    103, 225, 145, 1, 206, 225, 145, 1, 162, 225, 145, 1, 61, 225, 145, 1, 
-    73, 225, 145, 1, 70, 225, 145, 1, 75, 225, 145, 1, 76, 225, 145, 1, 224, 
-    89, 225, 145, 1, 211, 165, 225, 145, 1, 244, 197, 225, 145, 1, 243, 30, 
-    225, 145, 1, 245, 210, 225, 145, 218, 74, 1, 212, 65, 225, 145, 218, 74, 
-    1, 191, 225, 145, 1, 215, 157, 225, 145, 1, 215, 145, 225, 145, 1, 248, 
-    136, 225, 145, 1, 228, 111, 225, 145, 1, 254, 142, 191, 225, 145, 1, 213, 
-    134, 220, 103, 225, 145, 1, 213, 135, 162, 225, 145, 1, 253, 224, 244, 
-    197, 225, 145, 218, 74, 1, 205, 225, 145, 218, 26, 1, 205, 225, 145, 1, 
-    251, 0, 225, 145, 219, 156, 241, 237, 78, 225, 145, 52, 241, 237, 78, 
-    225, 145, 164, 220, 96, 225, 145, 164, 52, 220, 96, 179, 5, 254, 76, 179, 
-    5, 213, 147, 179, 1, 61, 179, 1, 255, 74, 179, 1, 73, 179, 1, 236, 34, 
-    179, 1, 70, 179, 1, 214, 118, 179, 1, 149, 153, 179, 1, 149, 222, 181, 
-    179, 1, 149, 156, 179, 1, 149, 232, 186, 179, 1, 75, 179, 1, 245, 210, 
-    179, 1, 254, 202, 179, 1, 76, 179, 1, 226, 184, 179, 1, 253, 193, 179, 1, 
-    176, 179, 1, 234, 133, 179, 1, 243, 136, 179, 1, 242, 250, 179, 1, 229, 
-    78, 179, 1, 251, 34, 179, 1, 250, 158, 179, 1, 235, 142, 179, 1, 235, 
-    115, 179, 1, 227, 166, 179, 1, 215, 157, 179, 1, 215, 145, 179, 1, 248, 
-    136, 179, 1, 248, 120, 179, 1, 228, 111, 179, 1, 217, 106, 179, 1, 216, 
-    209, 179, 1, 248, 222, 179, 1, 248, 26, 179, 1, 197, 179, 1, 190, 179, 1, 
-    225, 148, 179, 1, 252, 192, 179, 1, 252, 19, 179, 1, 185, 179, 1, 191, 
-    179, 1, 205, 179, 1, 233, 136, 179, 1, 214, 27, 179, 1, 220, 103, 179, 1, 
-    218, 224, 179, 1, 206, 179, 1, 162, 179, 1, 232, 185, 179, 116, 5, 242, 
-    45, 179, 25, 5, 255, 74, 179, 25, 5, 73, 179, 25, 5, 236, 34, 179, 25, 5, 
-    70, 179, 25, 5, 214, 118, 179, 25, 5, 149, 153, 179, 25, 5, 149, 222, 
-    181, 179, 25, 5, 149, 156, 179, 25, 5, 149, 232, 186, 179, 25, 5, 75, 
-    179, 25, 5, 245, 210, 179, 25, 5, 254, 202, 179, 25, 5, 76, 179, 25, 5, 
-    226, 184, 179, 25, 5, 253, 193, 179, 5, 213, 152, 179, 248, 179, 179, 52, 
-    248, 179, 179, 21, 210, 86, 179, 21, 110, 179, 21, 105, 179, 21, 158, 
-    179, 21, 161, 179, 21, 189, 179, 21, 194, 179, 21, 198, 179, 21, 195, 
-    179, 21, 200, 38, 84, 21, 210, 86, 38, 84, 21, 110, 38, 84, 21, 105, 38, 
-    84, 21, 158, 38, 84, 21, 161, 38, 84, 21, 189, 38, 84, 21, 194, 38, 84, 
-    21, 198, 38, 84, 21, 195, 38, 84, 21, 200, 38, 84, 1, 61, 38, 84, 1, 70, 
-    38, 84, 1, 176, 38, 84, 1, 197, 38, 84, 1, 190, 38, 84, 1, 205, 38, 84, 
-    1, 213, 176, 38, 84, 5, 253, 176, 84, 5, 219, 18, 251, 0, 84, 5, 251, 1, 
-    213, 152, 84, 5, 52, 251, 1, 213, 152, 84, 5, 251, 1, 105, 84, 5, 251, 1, 
-    158, 84, 5, 251, 1, 253, 176, 84, 5, 224, 125, 84, 243, 101, 244, 104, 
-    84, 250, 239, 84, 241, 231, 234, 189, 232, 243, 21, 210, 86, 234, 189, 
-    232, 243, 21, 110, 234, 189, 232, 243, 21, 105, 234, 189, 232, 243, 21, 
-    158, 234, 189, 232, 243, 21, 161, 234, 189, 232, 243, 21, 189, 234, 189, 
-    232, 243, 21, 194, 234, 189, 232, 243, 21, 198, 234, 189, 232, 243, 21, 
-    195, 234, 189, 232, 243, 21, 200, 234, 189, 232, 243, 1, 176, 234, 189, 
-    232, 243, 1, 234, 133, 234, 189, 232, 243, 1, 243, 136, 234, 189, 232, 
-    243, 1, 229, 78, 234, 189, 232, 243, 1, 206, 234, 189, 232, 243, 1, 220, 
-    103, 234, 189, 232, 243, 1, 210, 116, 234, 189, 232, 243, 1, 227, 166, 
-    234, 189, 232, 243, 1, 217, 106, 234, 189, 232, 243, 1, 240, 227, 234, 
-    189, 232, 243, 1, 197, 234, 189, 232, 243, 1, 190, 234, 189, 232, 243, 1, 
-    225, 148, 234, 189, 232, 243, 1, 185, 234, 189, 232, 243, 1, 248, 222, 
-    234, 189, 232, 243, 1, 252, 192, 234, 189, 232, 243, 1, 205, 234, 189, 
-    232, 243, 1, 191, 234, 189, 232, 243, 1, 233, 136, 234, 189, 232, 243, 1, 
-    212, 65, 234, 189, 232, 243, 1, 216, 209, 234, 189, 232, 243, 1, 162, 
-    234, 189, 232, 243, 1, 214, 27, 234, 189, 232, 243, 1, 251, 34, 234, 189, 
-    232, 243, 1, 61, 234, 189, 232, 243, 1, 226, 235, 234, 189, 232, 243, 1, 
-    73, 234, 189, 232, 243, 1, 226, 184, 234, 189, 232, 243, 25, 214, 214, 
-    234, 189, 232, 243, 25, 75, 234, 189, 232, 243, 25, 70, 234, 189, 232, 
-    243, 25, 245, 210, 234, 189, 232, 243, 25, 76, 234, 189, 232, 243, 138, 
-    225, 31, 234, 189, 232, 243, 138, 251, 13, 234, 189, 232, 243, 138, 251, 
-    14, 225, 31, 234, 189, 232, 243, 5, 249, 78, 234, 189, 232, 243, 5, 219, 
-    200, 223, 94, 1, 176, 223, 94, 1, 243, 136, 223, 94, 1, 229, 78, 223, 94, 
-    1, 217, 106, 223, 94, 1, 248, 222, 223, 94, 1, 197, 223, 94, 1, 190, 223, 
-    94, 1, 252, 192, 223, 94, 1, 185, 223, 94, 1, 251, 34, 223, 94, 1, 235, 
-    142, 223, 94, 1, 227, 166, 223, 94, 1, 206, 223, 94, 1, 205, 223, 94, 1, 
-    233, 136, 223, 94, 1, 191, 223, 94, 1, 212, 65, 223, 94, 1, 162, 223, 94, 
-    1, 231, 125, 223, 94, 1, 229, 57, 223, 94, 1, 229, 149, 223, 94, 1, 227, 
-    136, 223, 94, 1, 61, 223, 94, 25, 5, 73, 223, 94, 25, 5, 70, 223, 94, 25, 
-    5, 75, 223, 94, 25, 5, 254, 202, 223, 94, 25, 5, 76, 223, 94, 25, 5, 253, 
-    193, 223, 94, 25, 5, 245, 56, 223, 94, 25, 5, 245, 234, 223, 94, 116, 5, 
-    229, 80, 223, 94, 116, 5, 230, 26, 223, 94, 116, 5, 153, 223, 94, 116, 5, 
-    242, 61, 223, 94, 213, 152, 223, 94, 221, 174, 78, 24, 100, 216, 98, 24, 
-    100, 216, 97, 24, 100, 216, 95, 24, 100, 216, 100, 24, 100, 223, 22, 24, 
-    100, 223, 6, 24, 100, 223, 1, 24, 100, 223, 3, 24, 100, 223, 19, 24, 100, 
-    223, 12, 24, 100, 223, 5, 24, 100, 223, 24, 24, 100, 223, 7, 24, 100, 
-    223, 26, 24, 100, 223, 23, 24, 100, 230, 214, 24, 100, 230, 205, 24, 100, 
-    230, 208, 24, 100, 225, 81, 24, 100, 225, 92, 24, 100, 225, 93, 24, 100, 
-    218, 208, 24, 100, 236, 47, 24, 100, 236, 54, 24, 100, 218, 219, 24, 100, 
-    218, 206, 24, 100, 225, 131, 24, 100, 241, 168, 24, 100, 218, 203, 155, 
-    5, 226, 28, 155, 5, 250, 188, 155, 5, 233, 67, 155, 5, 211, 243, 155, 1, 
-    61, 155, 1, 240, 155, 234, 192, 155, 1, 73, 155, 1, 236, 34, 155, 1, 70, 
-    155, 1, 226, 91, 250, 164, 155, 1, 229, 79, 233, 29, 155, 1, 229, 79, 
-    233, 30, 223, 143, 155, 1, 75, 155, 1, 254, 202, 155, 1, 76, 155, 1, 176, 
-    155, 1, 235, 14, 221, 229, 155, 1, 235, 14, 230, 67, 155, 1, 243, 136, 
-    155, 1, 243, 137, 230, 67, 155, 1, 229, 78, 155, 1, 251, 34, 155, 1, 251, 
-    35, 230, 67, 155, 1, 235, 142, 155, 1, 227, 167, 230, 67, 155, 1, 235, 
-    143, 231, 208, 155, 1, 227, 166, 155, 1, 215, 157, 155, 1, 215, 158, 231, 
-    208, 155, 1, 248, 136, 155, 1, 248, 137, 231, 208, 155, 1, 229, 230, 230, 
-    67, 155, 1, 217, 106, 155, 1, 217, 107, 230, 67, 155, 1, 248, 222, 155, 
-    1, 248, 223, 231, 208, 155, 1, 197, 155, 1, 190, 155, 1, 226, 91, 230, 
-    67, 155, 1, 252, 192, 155, 1, 252, 193, 230, 67, 155, 1, 185, 155, 1, 
-    191, 155, 1, 205, 155, 1, 223, 189, 254, 211, 155, 1, 233, 136, 155, 1, 
-    212, 65, 155, 1, 222, 35, 230, 67, 155, 1, 222, 35, 231, 208, 155, 1, 
-    206, 155, 1, 162, 155, 5, 250, 189, 216, 251, 155, 25, 5, 217, 48, 155, 
-    25, 5, 216, 36, 155, 25, 5, 211, 190, 155, 25, 5, 211, 191, 231, 70, 155, 
-    25, 5, 218, 48, 155, 25, 5, 218, 49, 231, 58, 155, 25, 5, 217, 66, 155, 
-    25, 5, 247, 195, 230, 66, 155, 25, 5, 225, 185, 155, 116, 5, 234, 159, 
-    155, 116, 5, 225, 197, 155, 116, 5, 251, 20, 155, 226, 41, 155, 43, 223, 
-    70, 155, 44, 223, 70, 155, 226, 80, 254, 118, 155, 226, 80, 231, 225, 
-    155, 226, 80, 232, 89, 155, 226, 80, 211, 238, 155, 226, 80, 226, 42, 
-    155, 226, 80, 232, 206, 155, 226, 80, 232, 83, 155, 226, 80, 254, 250, 
-    155, 226, 80, 254, 251, 254, 250, 155, 226, 80, 225, 52, 155, 215, 94, 
-    226, 80, 225, 52, 155, 226, 37, 155, 21, 210, 86, 155, 21, 110, 155, 21, 
-    105, 155, 21, 158, 155, 21, 161, 155, 21, 189, 155, 21, 194, 155, 21, 
-    198, 155, 21, 195, 155, 21, 200, 155, 226, 80, 216, 70, 215, 107, 155, 
-    226, 80, 235, 168, 172, 1, 61, 172, 1, 73, 172, 1, 70, 172, 1, 75, 172, 
-    1, 254, 202, 172, 1, 76, 172, 1, 176, 172, 1, 234, 133, 172, 1, 243, 136, 
-    172, 1, 242, 250, 172, 1, 228, 246, 172, 1, 229, 78, 172, 1, 250, 158, 
-    172, 1, 250, 113, 172, 1, 235, 142, 172, 1, 235, 115, 172, 1, 228, 236, 
-    172, 1, 228, 238, 172, 1, 228, 237, 172, 1, 217, 106, 172, 1, 216, 209, 
-    172, 1, 248, 222, 172, 1, 248, 26, 172, 1, 227, 208, 172, 1, 197, 172, 1, 
-    248, 136, 172, 1, 190, 172, 1, 224, 221, 172, 1, 225, 148, 172, 1, 252, 
-    192, 172, 1, 252, 19, 172, 1, 230, 96, 172, 1, 185, 172, 1, 252, 112, 
-    172, 1, 191, 172, 1, 205, 172, 1, 233, 136, 172, 1, 214, 27, 172, 1, 218, 
-    224, 172, 1, 206, 172, 1, 162, 172, 25, 5, 255, 74, 172, 25, 5, 73, 172, 
-    25, 5, 236, 34, 172, 25, 5, 245, 196, 172, 25, 5, 70, 172, 25, 5, 226, 
-    235, 172, 25, 5, 76, 172, 25, 5, 254, 202, 172, 25, 5, 253, 193, 172, 25, 
-    5, 214, 214, 172, 116, 5, 191, 172, 116, 5, 205, 172, 116, 5, 233, 136, 
-    172, 116, 5, 212, 65, 172, 1, 40, 235, 24, 172, 1, 40, 243, 203, 172, 1, 
-    40, 229, 80, 172, 116, 5, 40, 229, 80, 172, 1, 40, 250, 159, 172, 1, 40, 
-    217, 153, 172, 1, 40, 230, 26, 172, 1, 40, 226, 106, 172, 1, 40, 211, 
-    117, 172, 1, 40, 153, 172, 1, 40, 156, 172, 1, 40, 218, 227, 172, 116, 5, 
-    40, 193, 172, 116, 5, 40, 242, 61, 172, 21, 210, 86, 172, 21, 110, 172, 
-    21, 105, 172, 21, 158, 172, 21, 161, 172, 21, 189, 172, 21, 194, 172, 21, 
-    198, 172, 21, 195, 172, 21, 200, 172, 224, 142, 218, 252, 172, 224, 142, 
-    248, 179, 172, 224, 142, 52, 248, 179, 172, 224, 142, 215, 212, 248, 179, 
-    68, 1, 234, 127, 243, 136, 68, 1, 234, 127, 251, 34, 68, 1, 234, 127, 
-    250, 158, 68, 1, 234, 127, 235, 142, 68, 1, 234, 127, 235, 115, 68, 1, 
-    234, 127, 227, 166, 68, 1, 234, 127, 215, 157, 68, 1, 234, 127, 215, 145, 
-    68, 1, 234, 127, 248, 136, 68, 1, 234, 127, 248, 120, 68, 1, 234, 127, 
-    248, 26, 68, 1, 234, 127, 197, 68, 1, 234, 127, 206, 68, 1, 234, 127, 
-    162, 68, 1, 234, 127, 241, 190, 68, 1, 234, 127, 244, 197, 68, 58, 1, 
-    234, 127, 223, 110, 68, 1, 234, 127, 211, 165, 68, 1, 234, 127, 210, 116, 
-    68, 1, 234, 127, 205, 68, 232, 146, 234, 127, 226, 254, 68, 232, 146, 
-    234, 127, 224, 44, 68, 232, 146, 234, 127, 241, 122, 68, 16, 254, 191, 
-    245, 31, 68, 16, 254, 191, 110, 68, 16, 254, 191, 105, 68, 1, 254, 191, 
-    205, 68, 5, 226, 24, 234, 214, 216, 31, 39, 208, 1, 121, 234, 29, 39, 
-    208, 1, 125, 234, 29, 39, 208, 1, 121, 234, 106, 39, 208, 1, 125, 234, 
-    106, 39, 208, 1, 121, 234, 115, 39, 208, 1, 125, 234, 115, 39, 208, 1, 
-    121, 242, 175, 39, 208, 1, 125, 242, 175, 39, 208, 1, 121, 229, 5, 39, 
-    208, 1, 125, 229, 5, 39, 208, 1, 121, 249, 239, 39, 208, 1, 125, 249, 
-    239, 39, 208, 1, 121, 250, 87, 39, 208, 1, 125, 250, 87, 39, 208, 1, 121, 
-    219, 59, 39, 208, 1, 125, 219, 59, 39, 208, 1, 121, 227, 135, 39, 208, 1, 
-    125, 227, 135, 39, 208, 1, 121, 247, 146, 39, 208, 1, 125, 247, 146, 39, 
-    208, 1, 121, 111, 39, 208, 1, 125, 111, 39, 208, 1, 121, 216, 157, 39, 
-    208, 1, 125, 216, 157, 39, 208, 1, 121, 228, 75, 39, 208, 1, 125, 228, 
-    75, 39, 208, 1, 121, 251, 206, 39, 208, 1, 125, 251, 206, 39, 208, 1, 
-    121, 225, 17, 39, 208, 1, 125, 225, 17, 39, 208, 1, 121, 225, 122, 39, 
-    208, 1, 125, 225, 122, 39, 208, 1, 121, 244, 44, 39, 208, 1, 125, 244, 
-    44, 39, 208, 1, 121, 230, 162, 39, 208, 1, 125, 230, 162, 39, 208, 1, 
-    121, 210, 244, 39, 208, 1, 125, 210, 244, 39, 208, 1, 121, 222, 212, 39, 
-    208, 1, 125, 222, 212, 39, 208, 1, 121, 232, 157, 39, 208, 1, 125, 232, 
-    157, 39, 208, 1, 121, 213, 138, 39, 208, 1, 125, 213, 138, 39, 208, 1, 
-    121, 241, 69, 39, 208, 1, 125, 241, 69, 39, 208, 1, 121, 76, 39, 208, 1, 
-    125, 76, 39, 208, 231, 205, 234, 231, 39, 208, 25, 255, 74, 39, 208, 25, 
-    73, 39, 208, 25, 214, 214, 39, 208, 25, 70, 39, 208, 25, 75, 39, 208, 25, 
-    76, 39, 208, 231, 205, 234, 109, 39, 208, 25, 240, 120, 39, 208, 25, 214, 
-    213, 39, 208, 25, 214, 229, 39, 208, 25, 253, 191, 39, 208, 25, 253, 168, 
-    39, 208, 25, 254, 124, 39, 208, 25, 254, 137, 39, 208, 138, 231, 205, 
-    245, 181, 39, 208, 138, 231, 205, 227, 207, 39, 208, 138, 231, 205, 216, 
-    157, 39, 208, 138, 231, 205, 219, 43, 39, 208, 16, 234, 14, 39, 208, 16, 
-    227, 207, 39, 208, 16, 221, 254, 39, 208, 16, 241, 70, 241, 65, 39, 208, 
-    16, 234, 23, 234, 22, 187, 186, 1, 75, 187, 186, 1, 76, 187, 186, 1, 250, 
-    158, 187, 186, 1, 227, 166, 187, 186, 1, 215, 157, 187, 186, 1, 215, 145, 
-    187, 186, 1, 248, 136, 187, 186, 1, 248, 120, 187, 186, 1, 228, 111, 187, 
-    186, 1, 220, 103, 187, 186, 1, 218, 224, 187, 186, 25, 5, 236, 34, 187, 
-    186, 25, 5, 214, 118, 187, 186, 25, 5, 255, 38, 187, 186, 25, 5, 253, 
-    193, 187, 186, 25, 5, 255, 31, 187, 186, 250, 126, 187, 186, 254, 207, 
-    234, 99, 187, 186, 254, 104, 187, 186, 3, 223, 75, 78, 187, 186, 211, 
-    209, 223, 75, 78, 187, 186, 25, 5, 213, 147, 187, 186, 213, 152, 29, 3, 
-    215, 138, 29, 3, 215, 141, 29, 3, 215, 144, 29, 3, 215, 142, 29, 3, 215, 
-    143, 29, 3, 215, 140, 29, 3, 248, 114, 29, 3, 248, 116, 29, 3, 248, 119, 
-    29, 3, 248, 117, 29, 3, 248, 118, 29, 3, 248, 115, 29, 3, 246, 29, 29, 3, 
-    246, 32, 29, 3, 246, 38, 29, 3, 246, 36, 29, 3, 246, 37, 29, 3, 246, 30, 
-    29, 3, 250, 205, 29, 3, 250, 199, 29, 3, 250, 201, 29, 3, 250, 204, 29, 
-    3, 250, 202, 29, 3, 250, 203, 29, 3, 250, 200, 29, 3, 252, 112, 29, 3, 
-    252, 91, 29, 3, 252, 103, 29, 3, 252, 111, 29, 3, 252, 106, 29, 3, 252, 
-    107, 29, 3, 252, 95, 187, 186, 1, 234, 20, 187, 186, 1, 221, 254, 187, 
-    186, 1, 233, 110, 187, 186, 1, 230, 173, 187, 186, 1, 190, 187, 186, 1, 
-    197, 187, 186, 1, 250, 103, 187, 186, 1, 216, 91, 187, 186, 1, 234, 102, 
-    187, 186, 1, 228, 251, 187, 186, 1, 216, 151, 187, 186, 1, 212, 60, 187, 
-    186, 1, 211, 69, 187, 186, 1, 240, 217, 187, 186, 1, 214, 190, 187, 186, 
-    1, 73, 187, 186, 1, 225, 143, 187, 186, 1, 253, 203, 187, 186, 1, 242, 
-    168, 187, 186, 1, 235, 113, 187, 186, 1, 223, 167, 187, 186, 1, 252, 192, 
-    187, 186, 1, 235, 101, 187, 186, 1, 247, 220, 187, 186, 1, 242, 222, 187, 
-    186, 1, 248, 6, 187, 186, 1, 252, 17, 187, 186, 1, 234, 21, 232, 129, 
-    187, 186, 1, 233, 111, 232, 129, 187, 186, 1, 230, 174, 232, 129, 187, 
-    186, 1, 226, 91, 232, 129, 187, 186, 1, 229, 230, 232, 129, 187, 186, 1, 
-    216, 92, 232, 129, 187, 186, 1, 228, 252, 232, 129, 187, 186, 1, 240, 
-    155, 232, 129, 187, 186, 25, 5, 226, 196, 187, 186, 25, 5, 235, 254, 187, 
-    186, 25, 5, 254, 123, 187, 186, 25, 5, 211, 38, 187, 186, 25, 5, 219, 33, 
-    187, 186, 25, 5, 214, 187, 187, 186, 25, 5, 250, 124, 187, 186, 25, 5, 
-    227, 192, 187, 186, 250, 125, 187, 186, 232, 86, 235, 151, 187, 186, 254, 
-    47, 235, 151, 187, 186, 21, 210, 86, 187, 186, 21, 110, 187, 186, 21, 
-    105, 187, 186, 21, 158, 187, 186, 21, 161, 187, 186, 21, 189, 187, 186, 
-    21, 194, 187, 186, 21, 198, 187, 186, 21, 195, 187, 186, 21, 200, 24, 
-    143, 227, 78, 24, 143, 227, 83, 24, 143, 210, 243, 24, 143, 210, 242, 24, 
-    143, 210, 241, 24, 143, 215, 23, 24, 143, 215, 26, 24, 143, 210, 210, 24, 
-    143, 210, 206, 24, 143, 245, 55, 24, 143, 245, 53, 24, 143, 245, 54, 24, 
-    143, 245, 51, 24, 143, 240, 145, 24, 143, 240, 144, 24, 143, 240, 142, 
-    24, 143, 240, 143, 24, 143, 240, 148, 24, 143, 240, 141, 24, 143, 240, 
-    140, 24, 143, 240, 150, 24, 143, 254, 34, 24, 143, 254, 33, 24, 90, 228, 
-    220, 24, 90, 228, 226, 24, 90, 218, 205, 24, 90, 218, 204, 24, 90, 216, 
-    97, 24, 90, 216, 95, 24, 90, 216, 94, 24, 90, 216, 100, 24, 90, 216, 101, 
-    24, 90, 216, 93, 24, 90, 223, 6, 24, 90, 223, 21, 24, 90, 218, 211, 24, 
-    90, 223, 18, 24, 90, 223, 8, 24, 90, 223, 10, 24, 90, 222, 253, 24, 90, 
-    222, 254, 24, 90, 234, 219, 24, 90, 230, 213, 24, 90, 230, 207, 24, 90, 
-    218, 215, 24, 90, 230, 210, 24, 90, 230, 216, 24, 90, 225, 77, 24, 90, 
-    225, 86, 24, 90, 225, 90, 24, 90, 218, 213, 24, 90, 225, 80, 24, 90, 225, 
-    94, 24, 90, 225, 95, 24, 90, 219, 141, 24, 90, 219, 144, 24, 90, 218, 
-    209, 24, 90, 218, 207, 24, 90, 219, 139, 24, 90, 219, 147, 24, 90, 219, 
-    148, 24, 90, 219, 133, 24, 90, 219, 146, 24, 90, 226, 31, 24, 90, 226, 
-    32, 24, 90, 211, 24, 24, 90, 211, 25, 24, 90, 250, 45, 24, 90, 250, 44, 
-    24, 90, 218, 220, 24, 90, 225, 129, 24, 90, 225, 128, 9, 14, 238, 25, 9, 
-    14, 238, 24, 9, 14, 238, 23, 9, 14, 238, 22, 9, 14, 238, 21, 9, 14, 238, 
-    20, 9, 14, 238, 19, 9, 14, 238, 18, 9, 14, 238, 17, 9, 14, 238, 16, 9, 
-    14, 238, 15, 9, 14, 238, 14, 9, 14, 238, 13, 9, 14, 238, 12, 9, 14, 238, 
-    11, 9, 14, 238, 10, 9, 14, 238, 9, 9, 14, 238, 8, 9, 14, 238, 7, 9, 14, 
-    238, 6, 9, 14, 238, 5, 9, 14, 238, 4, 9, 14, 238, 3, 9, 14, 238, 2, 9, 
-    14, 238, 1, 9, 14, 238, 0, 9, 14, 237, 255, 9, 14, 237, 254, 9, 14, 237, 
-    253, 9, 14, 237, 252, 9, 14, 237, 251, 9, 14, 237, 250, 9, 14, 237, 249, 
-    9, 14, 237, 248, 9, 14, 237, 247, 9, 14, 237, 246, 9, 14, 237, 245, 9, 
-    14, 237, 244, 9, 14, 237, 243, 9, 14, 237, 242, 9, 14, 237, 241, 9, 14, 
-    237, 240, 9, 14, 237, 239, 9, 14, 237, 238, 9, 14, 237, 237, 9, 14, 237, 
-    236, 9, 14, 237, 235, 9, 14, 237, 234, 9, 14, 237, 233, 9, 14, 237, 232, 
-    9, 14, 237, 231, 9, 14, 237, 230, 9, 14, 237, 229, 9, 14, 237, 228, 9, 
-    14, 237, 227, 9, 14, 237, 226, 9, 14, 237, 225, 9, 14, 237, 224, 9, 14, 
-    237, 223, 9, 14, 237, 222, 9, 14, 237, 221, 9, 14, 237, 220, 9, 14, 237, 
-    219, 9, 14, 237, 218, 9, 14, 237, 217, 9, 14, 237, 216, 9, 14, 237, 215, 
-    9, 14, 237, 214, 9, 14, 237, 213, 9, 14, 237, 212, 9, 14, 237, 211, 9, 
-    14, 237, 210, 9, 14, 237, 209, 9, 14, 237, 208, 9, 14, 237, 207, 9, 14, 
-    237, 206, 9, 14, 237, 205, 9, 14, 237, 204, 9, 14, 237, 203, 9, 14, 237, 
-    202, 9, 14, 237, 201, 9, 14, 237, 200, 9, 14, 237, 199, 9, 14, 237, 198, 
-    9, 14, 237, 197, 9, 14, 237, 196, 9, 14, 237, 195, 9, 14, 237, 194, 9, 
-    14, 237, 193, 9, 14, 237, 192, 9, 14, 237, 191, 9, 14, 237, 190, 9, 14, 
-    237, 189, 9, 14, 237, 188, 9, 14, 237, 187, 9, 14, 237, 186, 9, 14, 237, 
-    185, 9, 14, 237, 184, 9, 14, 237, 183, 9, 14, 237, 182, 9, 14, 237, 181, 
-    9, 14, 237, 180, 9, 14, 237, 179, 9, 14, 237, 178, 9, 14, 237, 177, 9, 
-    14, 237, 176, 9, 14, 237, 175, 9, 14, 237, 174, 9, 14, 237, 173, 9, 14, 
-    237, 172, 9, 14, 237, 171, 9, 14, 237, 170, 9, 14, 237, 169, 9, 14, 237, 
-    168, 9, 14, 237, 167, 9, 14, 237, 166, 9, 14, 237, 165, 9, 14, 237, 164, 
-    9, 14, 237, 163, 9, 14, 237, 162, 9, 14, 237, 161, 9, 14, 237, 160, 9, 
-    14, 237, 159, 9, 14, 237, 158, 9, 14, 237, 157, 9, 14, 237, 156, 9, 14, 
-    237, 155, 9, 14, 237, 154, 9, 14, 237, 153, 9, 14, 237, 152, 9, 14, 237, 
-    151, 9, 14, 237, 150, 9, 14, 237, 149, 9, 14, 237, 148, 9, 14, 237, 147, 
-    9, 14, 237, 146, 9, 14, 237, 145, 9, 14, 237, 144, 9, 14, 237, 143, 9, 
-    14, 237, 142, 9, 14, 237, 141, 9, 14, 237, 140, 9, 14, 237, 139, 9, 14, 
-    237, 138, 9, 14, 237, 137, 9, 14, 237, 136, 9, 14, 237, 135, 9, 14, 237, 
-    134, 9, 14, 237, 133, 9, 14, 237, 132, 9, 14, 237, 131, 9, 14, 237, 130, 
-    9, 14, 237, 129, 9, 14, 237, 128, 9, 14, 237, 127, 9, 14, 237, 126, 9, 
-    14, 237, 125, 9, 14, 237, 124, 9, 14, 237, 123, 9, 14, 237, 122, 9, 14, 
-    237, 121, 9, 14, 237, 120, 9, 14, 237, 119, 9, 14, 237, 118, 9, 14, 237, 
-    117, 9, 14, 237, 116, 9, 14, 237, 115, 9, 14, 237, 114, 9, 14, 237, 113, 
-    9, 14, 237, 112, 9, 14, 237, 111, 9, 14, 237, 110, 9, 14, 237, 109, 9, 
-    14, 237, 108, 9, 14, 237, 107, 9, 14, 237, 106, 9, 14, 237, 105, 9, 14, 
-    237, 104, 9, 14, 237, 103, 9, 14, 237, 102, 9, 14, 237, 101, 9, 14, 237, 
-    100, 9, 14, 237, 99, 9, 14, 237, 98, 9, 14, 237, 97, 9, 14, 237, 96, 9, 
-    14, 237, 95, 9, 14, 237, 94, 9, 14, 237, 93, 9, 14, 237, 92, 9, 14, 237, 
-    91, 9, 14, 237, 90, 9, 14, 237, 89, 9, 14, 237, 88, 9, 14, 237, 87, 9, 
-    14, 237, 86, 9, 14, 237, 85, 9, 14, 237, 84, 9, 14, 237, 83, 9, 14, 237, 
-    82, 9, 14, 237, 81, 9, 14, 237, 80, 9, 14, 237, 79, 9, 14, 237, 78, 9, 
-    14, 237, 77, 9, 14, 237, 76, 9, 14, 237, 75, 9, 14, 237, 74, 9, 14, 237, 
-    73, 9, 14, 237, 72, 9, 14, 237, 71, 9, 14, 237, 70, 9, 14, 237, 69, 9, 
-    14, 237, 68, 9, 14, 237, 67, 9, 14, 237, 66, 9, 14, 237, 65, 9, 14, 237, 
-    64, 9, 14, 237, 63, 9, 14, 237, 62, 9, 14, 237, 61, 9, 14, 237, 60, 9, 
-    14, 237, 59, 9, 14, 237, 58, 9, 14, 237, 57, 9, 14, 237, 56, 9, 14, 237, 
-    55, 9, 14, 237, 54, 9, 14, 237, 53, 9, 14, 237, 52, 9, 14, 237, 51, 9, 
-    14, 237, 50, 9, 14, 237, 49, 9, 14, 237, 48, 9, 14, 237, 47, 9, 14, 237, 
-    46, 9, 14, 237, 45, 9, 14, 237, 44, 9, 14, 237, 43, 9, 14, 237, 42, 9, 
-    14, 237, 41, 9, 14, 237, 40, 9, 14, 237, 39, 9, 14, 237, 38, 9, 14, 237, 
-    37, 9, 14, 237, 36, 9, 14, 237, 35, 9, 14, 237, 34, 9, 14, 237, 33, 9, 
-    14, 237, 32, 9, 14, 237, 31, 9, 14, 237, 30, 9, 14, 237, 29, 9, 14, 237, 
-    28, 9, 14, 237, 27, 9, 14, 237, 26, 9, 14, 237, 25, 9, 14, 237, 24, 9, 
-    14, 237, 23, 9, 14, 237, 22, 9, 14, 237, 21, 9, 14, 237, 20, 9, 14, 237, 
-    19, 9, 14, 237, 18, 9, 14, 237, 17, 9, 14, 237, 16, 9, 14, 237, 15, 9, 
-    14, 237, 14, 9, 14, 237, 13, 9, 14, 237, 12, 9, 14, 237, 11, 9, 14, 237, 
-    10, 9, 14, 237, 9, 9, 14, 237, 8, 9, 14, 237, 7, 9, 14, 237, 6, 9, 14, 
-    237, 5, 9, 14, 237, 4, 9, 14, 237, 3, 9, 14, 237, 2, 9, 14, 237, 1, 9, 
-    14, 237, 0, 9, 14, 236, 255, 9, 14, 236, 254, 9, 14, 236, 253, 9, 14, 
-    236, 252, 9, 14, 236, 251, 9, 14, 236, 250, 9, 14, 236, 249, 9, 14, 236, 
-    248, 9, 14, 236, 247, 9, 14, 236, 246, 9, 14, 236, 245, 9, 14, 236, 244, 
-    9, 14, 236, 243, 9, 14, 236, 242, 9, 14, 236, 241, 9, 14, 236, 240, 9, 
-    14, 236, 239, 9, 14, 236, 238, 9, 14, 236, 237, 9, 14, 236, 236, 9, 14, 
-    236, 235, 9, 14, 236, 234, 9, 14, 236, 233, 9, 14, 236, 232, 9, 14, 236, 
-    231, 9, 14, 236, 230, 9, 14, 236, 229, 9, 14, 236, 228, 9, 14, 236, 227, 
-    9, 14, 236, 226, 9, 14, 236, 225, 9, 14, 236, 224, 9, 14, 236, 223, 9, 
-    14, 236, 222, 9, 14, 236, 221, 9, 14, 236, 220, 9, 14, 236, 219, 9, 14, 
-    236, 218, 9, 14, 236, 217, 9, 14, 236, 216, 9, 14, 236, 215, 9, 14, 236, 
-    214, 9, 14, 236, 213, 9, 14, 236, 212, 9, 14, 236, 211, 9, 14, 236, 210, 
-    9, 14, 236, 209, 9, 14, 236, 208, 9, 14, 236, 207, 9, 14, 236, 206, 9, 
-    14, 236, 205, 9, 14, 236, 204, 9, 14, 236, 203, 9, 14, 236, 202, 9, 14, 
-    236, 201, 9, 14, 236, 200, 9, 14, 236, 199, 9, 14, 236, 198, 9, 14, 236, 
-    197, 9, 14, 236, 196, 9, 14, 236, 195, 9, 14, 236, 194, 9, 14, 236, 193, 
-    9, 14, 236, 192, 9, 14, 236, 191, 9, 14, 236, 190, 9, 14, 236, 189, 9, 
-    14, 236, 188, 9, 14, 236, 187, 9, 14, 236, 186, 9, 14, 236, 185, 9, 14, 
-    236, 184, 9, 14, 236, 183, 9, 14, 236, 182, 9, 14, 236, 181, 9, 14, 236, 
-    180, 9, 14, 236, 179, 9, 14, 236, 178, 9, 14, 236, 177, 9, 14, 236, 176, 
-    9, 14, 236, 175, 9, 14, 236, 174, 9, 14, 236, 173, 9, 14, 236, 172, 9, 
-    14, 236, 171, 9, 14, 236, 170, 9, 14, 236, 169, 9, 14, 236, 168, 9, 14, 
-    236, 167, 9, 14, 236, 166, 9, 14, 236, 165, 9, 14, 236, 164, 9, 14, 236, 
-    163, 9, 14, 236, 162, 9, 14, 236, 161, 9, 14, 236, 160, 9, 14, 236, 159, 
-    9, 14, 236, 158, 9, 14, 236, 157, 9, 14, 236, 156, 9, 14, 236, 155, 9, 
-    14, 236, 154, 9, 14, 236, 153, 9, 14, 236, 152, 9, 14, 236, 151, 9, 14, 
-    236, 150, 9, 14, 236, 149, 9, 14, 236, 148, 9, 14, 236, 147, 9, 14, 236, 
-    146, 9, 14, 236, 145, 9, 14, 236, 144, 9, 14, 236, 143, 9, 14, 236, 142, 
-    9, 14, 236, 141, 9, 14, 236, 140, 9, 14, 236, 139, 9, 14, 236, 138, 9, 
-    14, 236, 137, 9, 14, 236, 136, 9, 14, 236, 135, 9, 14, 236, 134, 9, 14, 
-    236, 133, 9, 14, 236, 132, 9, 14, 236, 131, 9, 14, 236, 130, 9, 14, 236, 
-    129, 9, 14, 236, 128, 9, 14, 236, 127, 9, 14, 236, 126, 9, 14, 236, 125, 
-    9, 14, 236, 124, 9, 14, 236, 123, 9, 14, 236, 122, 9, 14, 236, 121, 9, 
-    14, 236, 120, 9, 14, 236, 119, 9, 14, 236, 118, 9, 14, 236, 117, 9, 14, 
-    236, 116, 9, 14, 236, 115, 9, 14, 236, 114, 9, 14, 236, 113, 9, 14, 236, 
-    112, 9, 14, 236, 111, 9, 14, 236, 110, 9, 14, 236, 109, 9, 14, 236, 108, 
-    9, 14, 236, 107, 9, 14, 236, 106, 9, 14, 236, 105, 9, 14, 236, 104, 9, 
-    14, 236, 103, 9, 14, 236, 102, 9, 14, 236, 101, 9, 14, 236, 100, 9, 14, 
-    236, 99, 9, 14, 236, 98, 9, 14, 236, 97, 9, 14, 236, 96, 9, 14, 236, 95, 
-    9, 14, 236, 94, 9, 14, 236, 93, 9, 14, 236, 92, 9, 14, 236, 91, 9, 14, 
-    236, 90, 9, 14, 236, 89, 9, 14, 236, 88, 9, 14, 236, 87, 9, 14, 236, 86, 
-    9, 14, 236, 85, 9, 14, 236, 84, 9, 14, 236, 83, 9, 14, 236, 82, 9, 14, 
-    236, 81, 9, 14, 236, 80, 9, 14, 236, 79, 9, 14, 236, 78, 9, 14, 236, 77, 
-    9, 14, 236, 76, 9, 14, 236, 75, 9, 14, 236, 74, 9, 14, 236, 73, 9, 14, 
-    236, 72, 9, 14, 236, 71, 9, 14, 236, 70, 9, 14, 236, 69, 9, 14, 236, 68, 
-    9, 14, 236, 67, 9, 14, 236, 66, 7, 4, 27, 244, 126, 7, 4, 27, 244, 122, 
-    7, 4, 27, 244, 77, 7, 4, 27, 244, 125, 7, 4, 27, 244, 124, 7, 4, 27, 199, 
-    222, 93, 217, 153, 7, 4, 27, 218, 169, 150, 4, 27, 231, 60, 228, 40, 150, 
-    4, 27, 231, 60, 245, 214, 150, 4, 27, 231, 60, 235, 228, 150, 4, 27, 213, 
-    180, 228, 40, 150, 4, 27, 231, 60, 211, 160, 94, 1, 210, 234, 2, 241, 
-    159, 94, 225, 12, 235, 51, 214, 11, 94, 27, 211, 6, 210, 234, 210, 234, 
-    225, 240, 94, 1, 254, 140, 253, 163, 94, 1, 211, 247, 254, 171, 94, 1, 
-    211, 247, 248, 190, 94, 1, 211, 247, 241, 239, 94, 1, 211, 247, 234, 251, 
-    94, 1, 211, 247, 233, 95, 94, 1, 211, 247, 40, 231, 66, 94, 1, 211, 247, 
-    223, 68, 94, 1, 211, 247, 217, 39, 94, 1, 254, 140, 96, 50, 94, 1, 220, 
-    22, 2, 220, 22, 247, 121, 94, 1, 220, 22, 2, 219, 160, 247, 121, 94, 1, 
-    220, 22, 2, 248, 209, 22, 220, 22, 247, 121, 94, 1, 220, 22, 2, 248, 209, 
-    22, 219, 160, 247, 121, 94, 1, 112, 2, 225, 240, 94, 1, 112, 2, 224, 77, 
-    94, 1, 112, 2, 231, 172, 94, 1, 252, 30, 2, 248, 208, 94, 1, 242, 203, 2, 
-    248, 208, 94, 1, 248, 191, 2, 248, 208, 94, 1, 241, 240, 2, 231, 172, 94, 
-    1, 214, 4, 2, 248, 208, 94, 1, 210, 98, 2, 248, 208, 94, 1, 216, 232, 2, 
-    248, 208, 94, 1, 210, 234, 2, 248, 208, 94, 1, 40, 234, 252, 2, 248, 208, 
-    94, 1, 234, 252, 2, 248, 208, 94, 1, 233, 96, 2, 248, 208, 94, 1, 231, 
-    67, 2, 248, 208, 94, 1, 227, 196, 2, 248, 208, 94, 1, 221, 251, 2, 248, 
-    208, 94, 1, 40, 225, 223, 2, 248, 208, 94, 1, 225, 223, 2, 248, 208, 94, 
-    1, 215, 181, 2, 248, 208, 94, 1, 224, 41, 2, 248, 208, 94, 1, 223, 69, 2, 
-    248, 208, 94, 1, 220, 22, 2, 248, 208, 94, 1, 217, 40, 2, 248, 208, 94, 
-    1, 214, 4, 2, 241, 62, 94, 1, 252, 30, 2, 223, 170, 94, 1, 234, 252, 2, 
-    223, 170, 94, 1, 225, 223, 2, 223, 170, 94, 27, 112, 233, 95, 10, 1, 112, 
-    212, 47, 53, 17, 10, 1, 112, 212, 47, 40, 17, 10, 1, 252, 66, 53, 17, 10, 
-    1, 252, 66, 40, 17, 10, 1, 252, 66, 65, 17, 10, 1, 252, 66, 147, 17, 10, 
-    1, 225, 207, 53, 17, 10, 1, 225, 207, 40, 17, 10, 1, 225, 207, 65, 17, 
-    10, 1, 225, 207, 147, 17, 10, 1, 252, 54, 53, 17, 10, 1, 252, 54, 40, 17, 
-    10, 1, 252, 54, 65, 17, 10, 1, 252, 54, 147, 17, 10, 1, 215, 148, 53, 17, 
-    10, 1, 215, 148, 40, 17, 10, 1, 215, 148, 65, 17, 10, 1, 215, 148, 147, 
-    17, 10, 1, 217, 7, 53, 17, 10, 1, 217, 7, 40, 17, 10, 1, 217, 7, 65, 17, 
-    10, 1, 217, 7, 147, 17, 10, 1, 215, 150, 53, 17, 10, 1, 215, 150, 40, 17, 
-    10, 1, 215, 150, 65, 17, 10, 1, 215, 150, 147, 17, 10, 1, 213, 249, 53, 
-    17, 10, 1, 213, 249, 40, 17, 10, 1, 213, 249, 65, 17, 10, 1, 213, 249, 
-    147, 17, 10, 1, 225, 205, 53, 17, 10, 1, 225, 205, 40, 17, 10, 1, 225, 
-    205, 65, 17, 10, 1, 225, 205, 147, 17, 10, 1, 246, 45, 53, 17, 10, 1, 
-    246, 45, 40, 17, 10, 1, 246, 45, 65, 17, 10, 1, 246, 45, 147, 17, 10, 1, 
-    227, 155, 53, 17, 10, 1, 227, 155, 40, 17, 10, 1, 227, 155, 65, 17, 10, 
-    1, 227, 155, 147, 17, 10, 1, 217, 28, 53, 17, 10, 1, 217, 28, 40, 17, 10, 
-    1, 217, 28, 65, 17, 10, 1, 217, 28, 147, 17, 10, 1, 217, 26, 53, 17, 10, 
-    1, 217, 26, 40, 17, 10, 1, 217, 26, 65, 17, 10, 1, 217, 26, 147, 17, 10, 
-    1, 248, 134, 53, 17, 10, 1, 248, 134, 40, 17, 10, 1, 248, 203, 53, 17, 
-    10, 1, 248, 203, 40, 17, 10, 1, 246, 72, 53, 17, 10, 1, 246, 72, 40, 17, 
-    10, 1, 248, 132, 53, 17, 10, 1, 248, 132, 40, 17, 10, 1, 235, 122, 53, 
-    17, 10, 1, 235, 122, 40, 17, 10, 1, 222, 173, 53, 17, 10, 1, 222, 173, 
-    40, 17, 10, 1, 234, 176, 53, 17, 10, 1, 234, 176, 40, 17, 10, 1, 234, 
-    176, 65, 17, 10, 1, 234, 176, 147, 17, 10, 1, 243, 124, 53, 17, 10, 1, 
-    243, 124, 40, 17, 10, 1, 243, 124, 65, 17, 10, 1, 243, 124, 147, 17, 10, 
-    1, 242, 103, 53, 17, 10, 1, 242, 103, 40, 17, 10, 1, 242, 103, 65, 17, 
-    10, 1, 242, 103, 147, 17, 10, 1, 229, 4, 53, 17, 10, 1, 229, 4, 40, 17, 
-    10, 1, 229, 4, 65, 17, 10, 1, 229, 4, 147, 17, 10, 1, 228, 64, 242, 220, 
-    53, 17, 10, 1, 228, 64, 242, 220, 40, 17, 10, 1, 222, 216, 53, 17, 10, 1, 
-    222, 216, 40, 17, 10, 1, 222, 216, 65, 17, 10, 1, 222, 216, 147, 17, 10, 
-    1, 241, 220, 2, 79, 77, 53, 17, 10, 1, 241, 220, 2, 79, 77, 40, 17, 10, 
-    1, 241, 220, 242, 173, 53, 17, 10, 1, 241, 220, 242, 173, 40, 17, 10, 1, 
-    241, 220, 242, 173, 65, 17, 10, 1, 241, 220, 242, 173, 147, 17, 10, 1, 
-    241, 220, 247, 143, 53, 17, 10, 1, 241, 220, 247, 143, 40, 17, 10, 1, 
-    241, 220, 247, 143, 65, 17, 10, 1, 241, 220, 247, 143, 147, 17, 10, 1, 
-    79, 252, 134, 53, 17, 10, 1, 79, 252, 134, 40, 17, 10, 1, 79, 252, 134, 
-    2, 202, 77, 53, 17, 10, 1, 79, 252, 134, 2, 202, 77, 40, 17, 10, 16, 59, 
-    48, 10, 16, 59, 51, 10, 16, 113, 170, 48, 10, 16, 113, 170, 51, 10, 16, 
-    134, 170, 48, 10, 16, 134, 170, 51, 10, 16, 134, 170, 225, 8, 246, 105, 
-    48, 10, 16, 134, 170, 225, 8, 246, 105, 51, 10, 16, 244, 12, 170, 48, 10, 
-    16, 244, 12, 170, 51, 10, 16, 52, 67, 252, 142, 51, 10, 16, 113, 170, 
-    213, 189, 48, 10, 16, 113, 170, 213, 189, 51, 10, 16, 222, 234, 10, 16, 
-    4, 217, 82, 48, 10, 16, 4, 217, 82, 51, 10, 1, 229, 81, 53, 17, 10, 1, 
-    229, 81, 40, 17, 10, 1, 229, 81, 65, 17, 10, 1, 229, 81, 147, 17, 10, 1, 
-    104, 53, 17, 10, 1, 104, 40, 17, 10, 1, 226, 236, 53, 17, 10, 1, 226, 
-    236, 40, 17, 10, 1, 210, 213, 53, 17, 10, 1, 210, 213, 40, 17, 10, 1, 
-    104, 2, 202, 77, 53, 17, 10, 1, 214, 0, 53, 17, 10, 1, 214, 0, 40, 17, 
-    10, 1, 234, 74, 226, 236, 53, 17, 10, 1, 234, 74, 226, 236, 40, 17, 10, 
-    1, 234, 74, 210, 213, 53, 17, 10, 1, 234, 74, 210, 213, 40, 17, 10, 1, 
-    160, 53, 17, 10, 1, 160, 40, 17, 10, 1, 160, 65, 17, 10, 1, 160, 147, 17, 
-    10, 1, 214, 207, 234, 187, 234, 74, 112, 231, 194, 65, 17, 10, 1, 214, 
-    207, 234, 187, 234, 74, 112, 231, 194, 147, 17, 10, 27, 79, 2, 202, 77, 
-    2, 112, 53, 17, 10, 27, 79, 2, 202, 77, 2, 112, 40, 17, 10, 27, 79, 2, 
-    202, 77, 2, 254, 245, 53, 17, 10, 27, 79, 2, 202, 77, 2, 254, 245, 40, 
-    17, 10, 27, 79, 2, 202, 77, 2, 212, 31, 53, 17, 10, 27, 79, 2, 202, 77, 
-    2, 212, 31, 40, 17, 10, 27, 79, 2, 202, 77, 2, 104, 53, 17, 10, 27, 79, 
-    2, 202, 77, 2, 104, 40, 17, 10, 27, 79, 2, 202, 77, 2, 226, 236, 53, 17, 
-    10, 27, 79, 2, 202, 77, 2, 226, 236, 40, 17, 10, 27, 79, 2, 202, 77, 2, 
-    210, 213, 53, 17, 10, 27, 79, 2, 202, 77, 2, 210, 213, 40, 17, 10, 27, 
-    79, 2, 202, 77, 2, 160, 53, 17, 10, 27, 79, 2, 202, 77, 2, 160, 40, 17, 
-    10, 27, 79, 2, 202, 77, 2, 160, 65, 17, 10, 27, 214, 207, 234, 74, 79, 2, 
-    202, 77, 2, 112, 231, 194, 53, 17, 10, 27, 214, 207, 234, 74, 79, 2, 202, 
-    77, 2, 112, 231, 194, 40, 17, 10, 27, 214, 207, 234, 74, 79, 2, 202, 77, 
-    2, 112, 231, 194, 65, 17, 10, 1, 244, 169, 79, 53, 17, 10, 1, 244, 169, 
-    79, 40, 17, 10, 1, 244, 169, 79, 65, 17, 10, 1, 244, 169, 79, 147, 17, 
-    10, 27, 79, 2, 202, 77, 2, 151, 53, 17, 10, 27, 79, 2, 202, 77, 2, 122, 
-    53, 17, 10, 27, 79, 2, 202, 77, 2, 66, 53, 17, 10, 27, 79, 2, 202, 77, 2, 
-    112, 231, 194, 53, 17, 10, 27, 79, 2, 202, 77, 2, 79, 53, 17, 10, 27, 
-    252, 56, 2, 151, 53, 17, 10, 27, 252, 56, 2, 122, 53, 17, 10, 27, 252, 
-    56, 2, 234, 131, 53, 17, 10, 27, 252, 56, 2, 66, 53, 17, 10, 27, 252, 56, 
-    2, 112, 231, 194, 53, 17, 10, 27, 252, 56, 2, 79, 53, 17, 10, 27, 217, 9, 
-    2, 151, 53, 17, 10, 27, 217, 9, 2, 122, 53, 17, 10, 27, 217, 9, 2, 234, 
-    131, 53, 17, 10, 27, 217, 9, 2, 66, 53, 17, 10, 27, 217, 9, 2, 112, 231, 
-    194, 53, 17, 10, 27, 217, 9, 2, 79, 53, 17, 10, 27, 216, 194, 2, 151, 53, 
-    17, 10, 27, 216, 194, 2, 66, 53, 17, 10, 27, 216, 194, 2, 112, 231, 194, 
-    53, 17, 10, 27, 216, 194, 2, 79, 53, 17, 10, 27, 151, 2, 122, 53, 17, 10, 
-    27, 151, 2, 66, 53, 17, 10, 27, 122, 2, 151, 53, 17, 10, 27, 122, 2, 66, 
-    53, 17, 10, 27, 234, 131, 2, 151, 53, 17, 10, 27, 234, 131, 2, 122, 53, 
-    17, 10, 27, 234, 131, 2, 66, 53, 17, 10, 27, 221, 168, 2, 151, 53, 17, 
-    10, 27, 221, 168, 2, 122, 53, 17, 10, 27, 221, 168, 2, 234, 131, 53, 17, 
-    10, 27, 221, 168, 2, 66, 53, 17, 10, 27, 222, 28, 2, 122, 53, 17, 10, 27, 
-    222, 28, 2, 66, 53, 17, 10, 27, 248, 218, 2, 151, 53, 17, 10, 27, 248, 
-    218, 2, 122, 53, 17, 10, 27, 248, 218, 2, 234, 131, 53, 17, 10, 27, 248, 
-    218, 2, 66, 53, 17, 10, 27, 217, 82, 2, 122, 53, 17, 10, 27, 217, 82, 2, 
-    66, 53, 17, 10, 27, 210, 112, 2, 66, 53, 17, 10, 27, 254, 198, 2, 151, 
-    53, 17, 10, 27, 254, 198, 2, 66, 53, 17, 10, 27, 242, 246, 2, 151, 53, 
-    17, 10, 27, 242, 246, 2, 66, 53, 17, 10, 27, 244, 144, 2, 151, 53, 17, 
-    10, 27, 244, 144, 2, 122, 53, 17, 10, 27, 244, 144, 2, 234, 131, 53, 17, 
-    10, 27, 244, 144, 2, 66, 53, 17, 10, 27, 244, 144, 2, 112, 231, 194, 53, 
-    17, 10, 27, 244, 144, 2, 79, 53, 17, 10, 27, 224, 83, 2, 122, 53, 17, 10, 
-    27, 224, 83, 2, 66, 53, 17, 10, 27, 224, 83, 2, 112, 231, 194, 53, 17, 
-    10, 27, 224, 83, 2, 79, 53, 17, 10, 27, 234, 252, 2, 112, 53, 17, 10, 27, 
-    234, 252, 2, 151, 53, 17, 10, 27, 234, 252, 2, 122, 53, 17, 10, 27, 234, 
-    252, 2, 234, 131, 53, 17, 10, 27, 234, 252, 2, 233, 104, 53, 17, 10, 27, 
-    234, 252, 2, 66, 53, 17, 10, 27, 234, 252, 2, 112, 231, 194, 53, 17, 10, 
-    27, 234, 252, 2, 79, 53, 17, 10, 27, 233, 104, 2, 151, 53, 17, 10, 27, 
-    233, 104, 2, 122, 53, 17, 10, 27, 233, 104, 2, 234, 131, 53, 17, 10, 27, 
-    233, 104, 2, 66, 53, 17, 10, 27, 233, 104, 2, 112, 231, 194, 53, 17, 10, 
-    27, 233, 104, 2, 79, 53, 17, 10, 27, 66, 2, 151, 53, 17, 10, 27, 66, 2, 
-    122, 53, 17, 10, 27, 66, 2, 234, 131, 53, 17, 10, 27, 66, 2, 66, 53, 17, 
-    10, 27, 66, 2, 112, 231, 194, 53, 17, 10, 27, 66, 2, 79, 53, 17, 10, 27, 
-    228, 64, 2, 151, 53, 17, 10, 27, 228, 64, 2, 122, 53, 17, 10, 27, 228, 
-    64, 2, 234, 131, 53, 17, 10, 27, 228, 64, 2, 66, 53, 17, 10, 27, 228, 64, 
-    2, 112, 231, 194, 53, 17, 10, 27, 228, 64, 2, 79, 53, 17, 10, 27, 241, 
-    220, 2, 151, 53, 17, 10, 27, 241, 220, 2, 66, 53, 17, 10, 27, 241, 220, 
-    2, 112, 231, 194, 53, 17, 10, 27, 241, 220, 2, 79, 53, 17, 10, 27, 79, 2, 
-    151, 53, 17, 10, 27, 79, 2, 122, 53, 17, 10, 27, 79, 2, 234, 131, 53, 17, 
-    10, 27, 79, 2, 66, 53, 17, 10, 27, 79, 2, 112, 231, 194, 53, 17, 10, 27, 
-    79, 2, 79, 53, 17, 10, 27, 216, 204, 2, 218, 24, 112, 53, 17, 10, 27, 
-    223, 97, 2, 218, 24, 112, 53, 17, 10, 27, 112, 231, 194, 2, 218, 24, 112, 
-    53, 17, 10, 27, 220, 95, 2, 248, 184, 53, 17, 10, 27, 220, 95, 2, 234, 
-    205, 53, 17, 10, 27, 220, 95, 2, 244, 167, 53, 17, 10, 27, 220, 95, 2, 
-    248, 186, 53, 17, 10, 27, 220, 95, 2, 234, 207, 53, 17, 10, 27, 220, 95, 
-    2, 218, 24, 112, 53, 17, 10, 27, 79, 2, 202, 77, 2, 223, 97, 40, 17, 10, 
-    27, 79, 2, 202, 77, 2, 210, 109, 40, 17, 10, 27, 79, 2, 202, 77, 2, 66, 
-    40, 17, 10, 27, 79, 2, 202, 77, 2, 228, 64, 40, 17, 10, 27, 79, 2, 202, 
-    77, 2, 112, 231, 194, 40, 17, 10, 27, 79, 2, 202, 77, 2, 79, 40, 17, 10, 
-    27, 252, 56, 2, 223, 97, 40, 17, 10, 27, 252, 56, 2, 210, 109, 40, 17, 
-    10, 27, 252, 56, 2, 66, 40, 17, 10, 27, 252, 56, 2, 228, 64, 40, 17, 10, 
-    27, 252, 56, 2, 112, 231, 194, 40, 17, 10, 27, 252, 56, 2, 79, 40, 17, 
-    10, 27, 217, 9, 2, 223, 97, 40, 17, 10, 27, 217, 9, 2, 210, 109, 40, 17, 
-    10, 27, 217, 9, 2, 66, 40, 17, 10, 27, 217, 9, 2, 228, 64, 40, 17, 10, 
-    27, 217, 9, 2, 112, 231, 194, 40, 17, 10, 27, 217, 9, 2, 79, 40, 17, 10, 
-    27, 216, 194, 2, 223, 97, 40, 17, 10, 27, 216, 194, 2, 210, 109, 40, 17, 
-    10, 27, 216, 194, 2, 66, 40, 17, 10, 27, 216, 194, 2, 228, 64, 40, 17, 
-    10, 27, 216, 194, 2, 112, 231, 194, 40, 17, 10, 27, 216, 194, 2, 79, 40, 
-    17, 10, 27, 244, 144, 2, 112, 231, 194, 40, 17, 10, 27, 244, 144, 2, 79, 
-    40, 17, 10, 27, 224, 83, 2, 112, 231, 194, 40, 17, 10, 27, 224, 83, 2, 
-    79, 40, 17, 10, 27, 234, 252, 2, 112, 40, 17, 10, 27, 234, 252, 2, 233, 
-    104, 40, 17, 10, 27, 234, 252, 2, 66, 40, 17, 10, 27, 234, 252, 2, 112, 
-    231, 194, 40, 17, 10, 27, 234, 252, 2, 79, 40, 17, 10, 27, 233, 104, 2, 
-    66, 40, 17, 10, 27, 233, 104, 2, 112, 231, 194, 40, 17, 10, 27, 233, 104, 
-    2, 79, 40, 17, 10, 27, 66, 2, 112, 40, 17, 10, 27, 66, 2, 66, 40, 17, 10, 
-    27, 228, 64, 2, 223, 97, 40, 17, 10, 27, 228, 64, 2, 210, 109, 40, 17, 
-    10, 27, 228, 64, 2, 66, 40, 17, 10, 27, 228, 64, 2, 228, 64, 40, 17, 10, 
-    27, 228, 64, 2, 112, 231, 194, 40, 17, 10, 27, 228, 64, 2, 79, 40, 17, 
-    10, 27, 112, 231, 194, 2, 218, 24, 112, 40, 17, 10, 27, 79, 2, 223, 97, 
-    40, 17, 10, 27, 79, 2, 210, 109, 40, 17, 10, 27, 79, 2, 66, 40, 17, 10, 
-    27, 79, 2, 228, 64, 40, 17, 10, 27, 79, 2, 112, 231, 194, 40, 17, 10, 27, 
-    79, 2, 79, 40, 17, 10, 27, 79, 2, 202, 77, 2, 151, 65, 17, 10, 27, 79, 2, 
-    202, 77, 2, 122, 65, 17, 10, 27, 79, 2, 202, 77, 2, 234, 131, 65, 17, 10, 
-    27, 79, 2, 202, 77, 2, 66, 65, 17, 10, 27, 79, 2, 202, 77, 2, 241, 220, 
-    65, 17, 10, 27, 252, 56, 2, 151, 65, 17, 10, 27, 252, 56, 2, 122, 65, 17, 
-    10, 27, 252, 56, 2, 234, 131, 65, 17, 10, 27, 252, 56, 2, 66, 65, 17, 10, 
-    27, 252, 56, 2, 241, 220, 65, 17, 10, 27, 217, 9, 2, 151, 65, 17, 10, 27, 
-    217, 9, 2, 122, 65, 17, 10, 27, 217, 9, 2, 234, 131, 65, 17, 10, 27, 217, 
-    9, 2, 66, 65, 17, 10, 27, 217, 9, 2, 241, 220, 65, 17, 10, 27, 216, 194, 
-    2, 66, 65, 17, 10, 27, 151, 2, 122, 65, 17, 10, 27, 151, 2, 66, 65, 17, 
-    10, 27, 122, 2, 151, 65, 17, 10, 27, 122, 2, 66, 65, 17, 10, 27, 234, 
-    131, 2, 151, 65, 17, 10, 27, 234, 131, 2, 66, 65, 17, 10, 27, 221, 168, 
-    2, 151, 65, 17, 10, 27, 221, 168, 2, 122, 65, 17, 10, 27, 221, 168, 2, 
-    234, 131, 65, 17, 10, 27, 221, 168, 2, 66, 65, 17, 10, 27, 222, 28, 2, 
-    122, 65, 17, 10, 27, 222, 28, 2, 234, 131, 65, 17, 10, 27, 222, 28, 2, 
-    66, 65, 17, 10, 27, 248, 218, 2, 151, 65, 17, 10, 27, 248, 218, 2, 122, 
-    65, 17, 10, 27, 248, 218, 2, 234, 131, 65, 17, 10, 27, 248, 218, 2, 66, 
-    65, 17, 10, 27, 217, 82, 2, 122, 65, 17, 10, 27, 210, 112, 2, 66, 65, 17, 
-    10, 27, 254, 198, 2, 151, 65, 17, 10, 27, 254, 198, 2, 66, 65, 17, 10, 
-    27, 242, 246, 2, 151, 65, 17, 10, 27, 242, 246, 2, 66, 65, 17, 10, 27, 
-    244, 144, 2, 151, 65, 17, 10, 27, 244, 144, 2, 122, 65, 17, 10, 27, 244, 
-    144, 2, 234, 131, 65, 17, 10, 27, 244, 144, 2, 66, 65, 17, 10, 27, 224, 
-    83, 2, 122, 65, 17, 10, 27, 224, 83, 2, 66, 65, 17, 10, 27, 234, 252, 2, 
-    151, 65, 17, 10, 27, 234, 252, 2, 122, 65, 17, 10, 27, 234, 252, 2, 234, 
-    131, 65, 17, 10, 27, 234, 252, 2, 233, 104, 65, 17, 10, 27, 234, 252, 2, 
-    66, 65, 17, 10, 27, 233, 104, 2, 151, 65, 17, 10, 27, 233, 104, 2, 122, 
-    65, 17, 10, 27, 233, 104, 2, 234, 131, 65, 17, 10, 27, 233, 104, 2, 66, 
-    65, 17, 10, 27, 233, 104, 2, 241, 220, 65, 17, 10, 27, 66, 2, 151, 65, 
-    17, 10, 27, 66, 2, 122, 65, 17, 10, 27, 66, 2, 234, 131, 65, 17, 10, 27, 
-    66, 2, 66, 65, 17, 10, 27, 228, 64, 2, 151, 65, 17, 10, 27, 228, 64, 2, 
-    122, 65, 17, 10, 27, 228, 64, 2, 234, 131, 65, 17, 10, 27, 228, 64, 2, 
-    66, 65, 17, 10, 27, 228, 64, 2, 241, 220, 65, 17, 10, 27, 241, 220, 2, 
-    151, 65, 17, 10, 27, 241, 220, 2, 66, 65, 17, 10, 27, 241, 220, 2, 218, 
-    24, 112, 65, 17, 10, 27, 79, 2, 151, 65, 17, 10, 27, 79, 2, 122, 65, 17, 
-    10, 27, 79, 2, 234, 131, 65, 17, 10, 27, 79, 2, 66, 65, 17, 10, 27, 79, 
-    2, 241, 220, 65, 17, 10, 27, 79, 2, 202, 77, 2, 66, 147, 17, 10, 27, 79, 
-    2, 202, 77, 2, 241, 220, 147, 17, 10, 27, 252, 56, 2, 66, 147, 17, 10, 
-    27, 252, 56, 2, 241, 220, 147, 17, 10, 27, 217, 9, 2, 66, 147, 17, 10, 
-    27, 217, 9, 2, 241, 220, 147, 17, 10, 27, 216, 194, 2, 66, 147, 17, 10, 
-    27, 216, 194, 2, 241, 220, 147, 17, 10, 27, 221, 168, 2, 66, 147, 17, 10, 
-    27, 221, 168, 2, 241, 220, 147, 17, 10, 27, 220, 61, 2, 66, 147, 17, 10, 
-    27, 220, 61, 2, 241, 220, 147, 17, 10, 27, 234, 252, 2, 233, 104, 147, 
-    17, 10, 27, 234, 252, 2, 66, 147, 17, 10, 27, 233, 104, 2, 66, 147, 17, 
-    10, 27, 228, 64, 2, 66, 147, 17, 10, 27, 228, 64, 2, 241, 220, 147, 17, 
-    10, 27, 79, 2, 66, 147, 17, 10, 27, 79, 2, 241, 220, 147, 17, 10, 27, 
-    220, 95, 2, 244, 167, 147, 17, 10, 27, 220, 95, 2, 248, 186, 147, 17, 10, 
-    27, 220, 95, 2, 234, 207, 147, 17, 10, 27, 217, 82, 2, 112, 231, 194, 53, 
-    17, 10, 27, 217, 82, 2, 79, 53, 17, 10, 27, 254, 198, 2, 112, 231, 194, 
-    53, 17, 10, 27, 254, 198, 2, 79, 53, 17, 10, 27, 242, 246, 2, 112, 231, 
-    194, 53, 17, 10, 27, 242, 246, 2, 79, 53, 17, 10, 27, 221, 168, 2, 112, 
-    231, 194, 53, 17, 10, 27, 221, 168, 2, 79, 53, 17, 10, 27, 220, 61, 2, 
-    112, 231, 194, 53, 17, 10, 27, 220, 61, 2, 79, 53, 17, 10, 27, 122, 2, 
-    112, 231, 194, 53, 17, 10, 27, 122, 2, 79, 53, 17, 10, 27, 151, 2, 112, 
-    231, 194, 53, 17, 10, 27, 151, 2, 79, 53, 17, 10, 27, 234, 131, 2, 112, 
-    231, 194, 53, 17, 10, 27, 234, 131, 2, 79, 53, 17, 10, 27, 222, 28, 2, 
-    112, 231, 194, 53, 17, 10, 27, 222, 28, 2, 79, 53, 17, 10, 27, 248, 218, 
-    2, 112, 231, 194, 53, 17, 10, 27, 248, 218, 2, 79, 53, 17, 10, 27, 220, 
-    61, 2, 151, 53, 17, 10, 27, 220, 61, 2, 122, 53, 17, 10, 27, 220, 61, 2, 
-    234, 131, 53, 17, 10, 27, 220, 61, 2, 66, 53, 17, 10, 27, 220, 61, 2, 
-    223, 97, 53, 17, 10, 27, 221, 168, 2, 223, 97, 53, 17, 10, 27, 222, 28, 
-    2, 223, 97, 53, 17, 10, 27, 248, 218, 2, 223, 97, 53, 17, 10, 27, 217, 
-    82, 2, 112, 231, 194, 40, 17, 10, 27, 217, 82, 2, 79, 40, 17, 10, 27, 
-    254, 198, 2, 112, 231, 194, 40, 17, 10, 27, 254, 198, 2, 79, 40, 17, 10, 
-    27, 242, 246, 2, 112, 231, 194, 40, 17, 10, 27, 242, 246, 2, 79, 40, 17, 
-    10, 27, 221, 168, 2, 112, 231, 194, 40, 17, 10, 27, 221, 168, 2, 79, 40, 
-    17, 10, 27, 220, 61, 2, 112, 231, 194, 40, 17, 10, 27, 220, 61, 2, 79, 
-    40, 17, 10, 27, 122, 2, 112, 231, 194, 40, 17, 10, 27, 122, 2, 79, 40, 
-    17, 10, 27, 151, 2, 112, 231, 194, 40, 17, 10, 27, 151, 2, 79, 40, 17, 
-    10, 27, 234, 131, 2, 112, 231, 194, 40, 17, 10, 27, 234, 131, 2, 79, 40, 
-    17, 10, 27, 222, 28, 2, 112, 231, 194, 40, 17, 10, 27, 222, 28, 2, 79, 
-    40, 17, 10, 27, 248, 218, 2, 112, 231, 194, 40, 17, 10, 27, 248, 218, 2, 
-    79, 40, 17, 10, 27, 220, 61, 2, 151, 40, 17, 10, 27, 220, 61, 2, 122, 40, 
-    17, 10, 27, 220, 61, 2, 234, 131, 40, 17, 10, 27, 220, 61, 2, 66, 40, 17, 
-    10, 27, 220, 61, 2, 223, 97, 40, 17, 10, 27, 221, 168, 2, 223, 97, 40, 
-    17, 10, 27, 222, 28, 2, 223, 97, 40, 17, 10, 27, 248, 218, 2, 223, 97, 
-    40, 17, 10, 27, 220, 61, 2, 151, 65, 17, 10, 27, 220, 61, 2, 122, 65, 17, 
-    10, 27, 220, 61, 2, 234, 131, 65, 17, 10, 27, 220, 61, 2, 66, 65, 17, 10, 
-    27, 221, 168, 2, 241, 220, 65, 17, 10, 27, 220, 61, 2, 241, 220, 65, 17, 
-    10, 27, 217, 82, 2, 66, 65, 17, 10, 27, 221, 168, 2, 151, 147, 17, 10, 
-    27, 221, 168, 2, 122, 147, 17, 10, 27, 221, 168, 2, 234, 131, 147, 17, 
-    10, 27, 220, 61, 2, 151, 147, 17, 10, 27, 220, 61, 2, 122, 147, 17, 10, 
-    27, 220, 61, 2, 234, 131, 147, 17, 10, 27, 217, 82, 2, 66, 147, 17, 10, 
-    27, 210, 112, 2, 66, 147, 17, 10, 27, 112, 2, 244, 165, 40, 17, 10, 27, 
-    112, 2, 244, 165, 53, 17, 226, 147, 43, 226, 4, 226, 147, 44, 226, 4, 10, 
-    27, 217, 9, 2, 151, 2, 66, 65, 17, 10, 27, 217, 9, 2, 122, 2, 151, 40, 
-    17, 10, 27, 217, 9, 2, 122, 2, 151, 65, 17, 10, 27, 217, 9, 2, 122, 2, 
-    66, 65, 17, 10, 27, 217, 9, 2, 234, 131, 2, 66, 65, 17, 10, 27, 217, 9, 
-    2, 66, 2, 151, 65, 17, 10, 27, 217, 9, 2, 66, 2, 122, 65, 17, 10, 27, 
-    217, 9, 2, 66, 2, 234, 131, 65, 17, 10, 27, 151, 2, 66, 2, 122, 40, 17, 
-    10, 27, 151, 2, 66, 2, 122, 65, 17, 10, 27, 122, 2, 66, 2, 79, 40, 17, 
-    10, 27, 122, 2, 66, 2, 112, 231, 194, 40, 17, 10, 27, 221, 168, 2, 122, 
-    2, 151, 65, 17, 10, 27, 221, 168, 2, 151, 2, 122, 65, 17, 10, 27, 221, 
-    168, 2, 151, 2, 112, 231, 194, 40, 17, 10, 27, 221, 168, 2, 66, 2, 122, 
-    40, 17, 10, 27, 221, 168, 2, 66, 2, 122, 65, 17, 10, 27, 221, 168, 2, 66, 
-    2, 151, 65, 17, 10, 27, 221, 168, 2, 66, 2, 66, 40, 17, 10, 27, 221, 168, 
-    2, 66, 2, 66, 65, 17, 10, 27, 222, 28, 2, 122, 2, 122, 40, 17, 10, 27, 
-    222, 28, 2, 122, 2, 122, 65, 17, 10, 27, 222, 28, 2, 66, 2, 66, 40, 17, 
-    10, 27, 220, 61, 2, 122, 2, 66, 40, 17, 10, 27, 220, 61, 2, 122, 2, 66, 
-    65, 17, 10, 27, 220, 61, 2, 151, 2, 79, 40, 17, 10, 27, 220, 61, 2, 66, 
-    2, 234, 131, 40, 17, 10, 27, 220, 61, 2, 66, 2, 234, 131, 65, 17, 10, 27, 
-    220, 61, 2, 66, 2, 66, 40, 17, 10, 27, 220, 61, 2, 66, 2, 66, 65, 17, 10, 
-    27, 248, 218, 2, 122, 2, 112, 231, 194, 40, 17, 10, 27, 248, 218, 2, 234, 
-    131, 2, 66, 40, 17, 10, 27, 248, 218, 2, 234, 131, 2, 66, 65, 17, 10, 27, 
-    217, 82, 2, 66, 2, 122, 40, 17, 10, 27, 217, 82, 2, 66, 2, 122, 65, 17, 
-    10, 27, 217, 82, 2, 66, 2, 66, 65, 17, 10, 27, 217, 82, 2, 66, 2, 79, 40, 
-    17, 10, 27, 254, 198, 2, 151, 2, 66, 40, 17, 10, 27, 254, 198, 2, 66, 2, 
-    66, 40, 17, 10, 27, 254, 198, 2, 66, 2, 66, 65, 17, 10, 27, 254, 198, 2, 
-    66, 2, 112, 231, 194, 40, 17, 10, 27, 242, 246, 2, 66, 2, 66, 40, 17, 10, 
-    27, 242, 246, 2, 66, 2, 79, 40, 17, 10, 27, 242, 246, 2, 66, 2, 112, 231, 
-    194, 40, 17, 10, 27, 244, 144, 2, 234, 131, 2, 66, 40, 17, 10, 27, 244, 
-    144, 2, 234, 131, 2, 66, 65, 17, 10, 27, 224, 83, 2, 66, 2, 122, 40, 17, 
-    10, 27, 224, 83, 2, 66, 2, 66, 40, 17, 10, 27, 233, 104, 2, 122, 2, 66, 
-    40, 17, 10, 27, 233, 104, 2, 122, 2, 79, 40, 17, 10, 27, 233, 104, 2, 
-    122, 2, 112, 231, 194, 40, 17, 10, 27, 233, 104, 2, 151, 2, 151, 65, 17, 
-    10, 27, 233, 104, 2, 151, 2, 151, 40, 17, 10, 27, 233, 104, 2, 234, 131, 
-    2, 66, 40, 17, 10, 27, 233, 104, 2, 234, 131, 2, 66, 65, 17, 10, 27, 233, 
-    104, 2, 66, 2, 122, 40, 17, 10, 27, 233, 104, 2, 66, 2, 122, 65, 17, 10, 
-    27, 66, 2, 122, 2, 151, 65, 17, 10, 27, 66, 2, 122, 2, 66, 65, 17, 10, 
-    27, 66, 2, 122, 2, 79, 40, 17, 10, 27, 66, 2, 151, 2, 122, 65, 17, 10, 
-    27, 66, 2, 151, 2, 66, 65, 17, 10, 27, 66, 2, 234, 131, 2, 151, 65, 17, 
-    10, 27, 66, 2, 234, 131, 2, 66, 65, 17, 10, 27, 66, 2, 151, 2, 234, 131, 
-    65, 17, 10, 27, 241, 220, 2, 66, 2, 151, 65, 17, 10, 27, 241, 220, 2, 66, 
-    2, 66, 65, 17, 10, 27, 228, 64, 2, 122, 2, 66, 65, 17, 10, 27, 228, 64, 
-    2, 122, 2, 112, 231, 194, 40, 17, 10, 27, 228, 64, 2, 151, 2, 66, 40, 17, 
-    10, 27, 228, 64, 2, 151, 2, 66, 65, 17, 10, 27, 228, 64, 2, 151, 2, 112, 
-    231, 194, 40, 17, 10, 27, 228, 64, 2, 66, 2, 79, 40, 17, 10, 27, 228, 64, 
-    2, 66, 2, 112, 231, 194, 40, 17, 10, 27, 79, 2, 66, 2, 66, 40, 17, 10, 
-    27, 79, 2, 66, 2, 66, 65, 17, 10, 27, 252, 56, 2, 234, 131, 2, 79, 40, 
-    17, 10, 27, 217, 9, 2, 151, 2, 79, 40, 17, 10, 27, 217, 9, 2, 151, 2, 
-    112, 231, 194, 40, 17, 10, 27, 217, 9, 2, 234, 131, 2, 79, 40, 17, 10, 
-    27, 217, 9, 2, 234, 131, 2, 112, 231, 194, 40, 17, 10, 27, 217, 9, 2, 66, 
-    2, 79, 40, 17, 10, 27, 217, 9, 2, 66, 2, 112, 231, 194, 40, 17, 10, 27, 
-    151, 2, 66, 2, 79, 40, 17, 10, 27, 151, 2, 122, 2, 112, 231, 194, 40, 17, 
-    10, 27, 151, 2, 66, 2, 112, 231, 194, 40, 17, 10, 27, 221, 168, 2, 234, 
-    131, 2, 112, 231, 194, 40, 17, 10, 27, 222, 28, 2, 122, 2, 79, 40, 17, 
-    10, 27, 220, 61, 2, 122, 2, 79, 40, 17, 10, 27, 248, 218, 2, 122, 2, 79, 
-    40, 17, 10, 27, 233, 104, 2, 151, 2, 79, 40, 17, 10, 27, 233, 104, 2, 66, 
-    2, 79, 40, 17, 10, 27, 79, 2, 122, 2, 79, 40, 17, 10, 27, 79, 2, 151, 2, 
-    79, 40, 17, 10, 27, 79, 2, 66, 2, 79, 40, 17, 10, 27, 66, 2, 66, 2, 79, 
-    40, 17, 10, 27, 224, 83, 2, 66, 2, 79, 40, 17, 10, 27, 228, 64, 2, 122, 
-    2, 79, 40, 17, 10, 27, 224, 83, 2, 66, 2, 122, 65, 17, 10, 27, 233, 104, 
-    2, 122, 2, 66, 65, 17, 10, 27, 254, 198, 2, 66, 2, 79, 40, 17, 10, 27, 
-    234, 252, 2, 66, 2, 79, 40, 17, 10, 27, 228, 64, 2, 151, 2, 122, 65, 17, 
-    10, 27, 66, 2, 234, 131, 2, 79, 40, 17, 10, 27, 233, 104, 2, 151, 2, 66, 
-    65, 17, 10, 27, 234, 252, 2, 66, 2, 66, 40, 17, 10, 27, 233, 104, 2, 151, 
-    2, 66, 40, 17, 10, 27, 228, 64, 2, 151, 2, 122, 40, 17, 10, 27, 151, 2, 
-    122, 2, 79, 40, 17, 10, 27, 122, 2, 151, 2, 79, 40, 17, 10, 27, 66, 2, 
-    151, 2, 79, 40, 17, 10, 27, 244, 144, 2, 66, 2, 79, 40, 17, 10, 27, 252, 
-    56, 2, 122, 2, 79, 40, 17, 10, 27, 234, 252, 2, 66, 2, 66, 65, 17, 10, 
-    27, 254, 198, 2, 151, 2, 66, 65, 17, 10, 27, 222, 28, 2, 66, 2, 66, 65, 
-    17, 10, 27, 221, 168, 2, 234, 131, 2, 79, 40, 17, 10, 27, 228, 64, 2, 
-    151, 2, 79, 40, 17, 10, 27, 222, 5, 214, 128, 253, 239, 234, 5, 218, 131, 
-    5, 53, 17, 10, 27, 224, 79, 214, 128, 253, 239, 234, 5, 218, 131, 5, 53, 
-    17, 10, 27, 254, 154, 53, 17, 10, 27, 254, 184, 53, 17, 10, 27, 230, 154, 
-    53, 17, 10, 27, 222, 6, 53, 17, 10, 27, 223, 144, 53, 17, 10, 27, 254, 
-    173, 53, 17, 10, 27, 212, 49, 53, 17, 10, 27, 222, 5, 53, 17, 10, 27, 
-    222, 4, 254, 173, 212, 48, 10, 27, 235, 135, 223, 35, 50, 10, 27, 251, 
-    231, 254, 40, 254, 41, 45, 221, 157, 45, 221, 46, 45, 220, 234, 45, 220, 
-    223, 45, 220, 212, 45, 220, 201, 45, 220, 190, 45, 220, 179, 45, 220, 
-    168, 45, 221, 156, 45, 221, 145, 45, 221, 134, 45, 221, 123, 45, 221, 
-    112, 45, 221, 101, 45, 221, 90, 224, 195, 244, 21, 31, 67, 249, 220, 224, 
-    195, 244, 21, 31, 67, 109, 249, 220, 224, 195, 244, 21, 31, 67, 109, 243, 
-    230, 218, 130, 224, 195, 244, 21, 31, 67, 249, 227, 224, 195, 244, 21, 
-    31, 67, 220, 151, 224, 195, 244, 21, 31, 67, 245, 32, 78, 224, 195, 244, 
-    21, 31, 67, 224, 14, 78, 224, 195, 244, 21, 31, 67, 43, 71, 233, 21, 127, 
-    224, 195, 244, 21, 31, 67, 44, 71, 233, 21, 251, 157, 224, 195, 244, 21, 
-    31, 67, 203, 245, 164, 38, 27, 43, 242, 28, 38, 27, 44, 242, 28, 38, 52, 
-    216, 90, 43, 242, 28, 38, 52, 216, 90, 44, 242, 28, 38, 231, 234, 43, 
-    242, 28, 38, 231, 234, 44, 242, 28, 38, 249, 198, 231, 233, 224, 195, 
-    244, 21, 31, 67, 113, 59, 233, 57, 224, 195, 244, 21, 31, 67, 245, 161, 
-    248, 157, 224, 195, 244, 21, 31, 67, 245, 152, 248, 157, 224, 195, 244, 
-    21, 31, 67, 121, 232, 214, 224, 195, 244, 21, 31, 67, 212, 32, 121, 232, 
-    214, 224, 195, 244, 21, 31, 67, 43, 226, 4, 224, 195, 244, 21, 31, 67, 
-    44, 226, 4, 224, 195, 244, 21, 31, 67, 43, 249, 100, 127, 224, 195, 244, 
-    21, 31, 67, 44, 249, 100, 127, 224, 195, 244, 21, 31, 67, 43, 216, 7, 
-    220, 54, 127, 224, 195, 244, 21, 31, 67, 44, 216, 7, 220, 54, 127, 224, 
-    195, 244, 21, 31, 67, 43, 85, 233, 21, 127, 224, 195, 244, 21, 31, 67, 
-    44, 85, 233, 21, 127, 224, 195, 244, 21, 31, 67, 43, 52, 254, 111, 127, 
-    224, 195, 244, 21, 31, 67, 44, 52, 254, 111, 127, 224, 195, 244, 21, 31, 
-    67, 43, 254, 111, 127, 224, 195, 244, 21, 31, 67, 44, 254, 111, 127, 224, 
-    195, 244, 21, 31, 67, 43, 249, 162, 127, 224, 195, 244, 21, 31, 67, 44, 
-    249, 162, 127, 224, 195, 244, 21, 31, 67, 43, 71, 249, 162, 127, 224, 
-    195, 244, 21, 31, 67, 44, 71, 249, 162, 127, 220, 132, 247, 121, 71, 220, 
-    132, 247, 121, 224, 195, 244, 21, 31, 67, 43, 42, 127, 224, 195, 244, 21, 
-    31, 67, 44, 42, 127, 248, 156, 226, 120, 250, 173, 226, 120, 212, 32, 
-    226, 120, 52, 212, 32, 226, 120, 248, 156, 121, 232, 214, 250, 173, 121, 
-    232, 214, 212, 32, 121, 232, 214, 4, 249, 220, 4, 109, 249, 220, 4, 243, 
-    230, 218, 130, 4, 220, 151, 4, 249, 227, 4, 224, 14, 78, 4, 245, 32, 78, 
-    4, 245, 161, 248, 157, 4, 43, 226, 4, 4, 44, 226, 4, 4, 43, 249, 100, 
-    127, 4, 44, 249, 100, 127, 4, 43, 216, 7, 220, 54, 127, 4, 44, 216, 7, 
-    220, 54, 127, 4, 54, 50, 4, 254, 127, 4, 253, 217, 4, 96, 50, 4, 240, 
-    168, 4, 233, 16, 50, 4, 242, 131, 50, 4, 245, 99, 50, 4, 223, 51, 219, 
-    47, 4, 247, 133, 50, 4, 225, 183, 50, 4, 249, 218, 253, 207, 10, 244, 
-    165, 53, 17, 10, 217, 45, 2, 244, 165, 48, 10, 248, 184, 53, 17, 10, 217, 
-    79, 244, 2, 10, 234, 205, 53, 17, 10, 244, 167, 53, 17, 10, 244, 167, 
-    147, 17, 10, 248, 186, 53, 17, 10, 248, 186, 147, 17, 10, 234, 207, 53, 
-    17, 10, 234, 207, 147, 17, 10, 220, 95, 53, 17, 10, 220, 95, 147, 17, 10, 
-    218, 47, 53, 17, 10, 218, 47, 147, 17, 10, 1, 202, 53, 17, 10, 1, 112, 2, 
-    231, 229, 77, 53, 17, 10, 1, 112, 2, 231, 229, 77, 40, 17, 10, 1, 112, 2, 
-    202, 77, 53, 17, 10, 1, 112, 2, 202, 77, 40, 17, 10, 1, 212, 31, 2, 202, 
-    77, 53, 17, 10, 1, 212, 31, 2, 202, 77, 40, 17, 10, 1, 112, 2, 202, 252, 
-    44, 53, 17, 10, 1, 112, 2, 202, 252, 44, 40, 17, 10, 1, 79, 2, 202, 77, 
-    53, 17, 10, 1, 79, 2, 202, 77, 40, 17, 10, 1, 79, 2, 202, 77, 65, 17, 10, 
-    1, 79, 2, 202, 77, 147, 17, 10, 1, 112, 53, 17, 10, 1, 112, 40, 17, 10, 
-    1, 252, 56, 53, 17, 10, 1, 252, 56, 40, 17, 10, 1, 252, 56, 65, 17, 10, 
-    1, 252, 56, 147, 17, 10, 1, 217, 9, 231, 166, 53, 17, 10, 1, 217, 9, 231, 
-    166, 40, 17, 10, 1, 217, 9, 53, 17, 10, 1, 217, 9, 40, 17, 10, 1, 217, 9, 
-    65, 17, 10, 1, 217, 9, 147, 17, 10, 1, 216, 194, 53, 17, 10, 1, 216, 194, 
-    40, 17, 10, 1, 216, 194, 65, 17, 10, 1, 216, 194, 147, 17, 10, 1, 151, 
-    53, 17, 10, 1, 151, 40, 17, 10, 1, 151, 65, 17, 10, 1, 151, 147, 17, 10, 
-    1, 122, 53, 17, 10, 1, 122, 40, 17, 10, 1, 122, 65, 17, 10, 1, 122, 147, 
-    17, 10, 1, 234, 131, 53, 17, 10, 1, 234, 131, 40, 17, 10, 1, 234, 131, 
-    65, 17, 10, 1, 234, 131, 147, 17, 10, 1, 248, 197, 53, 17, 10, 1, 248, 
-    197, 40, 17, 10, 1, 216, 204, 53, 17, 10, 1, 216, 204, 40, 17, 10, 1, 
-    223, 97, 53, 17, 10, 1, 223, 97, 40, 17, 10, 1, 210, 109, 53, 17, 10, 1, 
-    210, 109, 40, 17, 10, 1, 221, 168, 53, 17, 10, 1, 221, 168, 40, 17, 10, 
-    1, 221, 168, 65, 17, 10, 1, 221, 168, 147, 17, 10, 1, 220, 61, 53, 17, 
-    10, 1, 220, 61, 40, 17, 10, 1, 220, 61, 65, 17, 10, 1, 220, 61, 147, 17, 
-    10, 1, 222, 28, 53, 17, 10, 1, 222, 28, 40, 17, 10, 1, 222, 28, 65, 17, 
-    10, 1, 222, 28, 147, 17, 10, 1, 248, 218, 53, 17, 10, 1, 248, 218, 40, 
-    17, 10, 1, 248, 218, 65, 17, 10, 1, 248, 218, 147, 17, 10, 1, 217, 82, 
-    53, 17, 10, 1, 217, 82, 40, 17, 10, 1, 217, 82, 65, 17, 10, 1, 217, 82, 
-    147, 17, 10, 1, 210, 112, 53, 17, 10, 1, 210, 112, 40, 17, 10, 1, 210, 
-    112, 65, 17, 10, 1, 210, 112, 147, 17, 10, 1, 254, 198, 53, 17, 10, 1, 
-    254, 198, 40, 17, 10, 1, 254, 198, 65, 17, 10, 1, 254, 198, 147, 17, 10, 
-    1, 242, 246, 53, 17, 10, 1, 242, 246, 40, 17, 10, 1, 242, 246, 65, 17, 
-    10, 1, 242, 246, 147, 17, 10, 1, 244, 144, 53, 17, 10, 1, 244, 144, 40, 
-    17, 10, 1, 244, 144, 65, 17, 10, 1, 244, 144, 147, 17, 10, 1, 224, 83, 
-    53, 17, 10, 1, 224, 83, 40, 17, 10, 1, 224, 83, 65, 17, 10, 1, 224, 83, 
-    147, 17, 10, 1, 234, 252, 53, 17, 10, 1, 234, 252, 40, 17, 10, 1, 234, 
-    252, 65, 17, 10, 1, 234, 252, 147, 17, 10, 1, 233, 104, 53, 17, 10, 1, 
-    233, 104, 40, 17, 10, 1, 233, 104, 65, 17, 10, 1, 233, 104, 147, 17, 10, 
-    1, 66, 53, 17, 10, 1, 66, 40, 17, 10, 1, 66, 65, 17, 10, 1, 66, 147, 17, 
-    10, 1, 228, 64, 53, 17, 10, 1, 228, 64, 40, 17, 10, 1, 228, 64, 65, 17, 
-    10, 1, 228, 64, 147, 17, 10, 1, 241, 220, 53, 17, 10, 1, 241, 220, 40, 
-    17, 10, 1, 241, 220, 65, 17, 10, 1, 241, 220, 147, 17, 10, 1, 212, 31, 
-    53, 17, 10, 1, 212, 31, 40, 17, 10, 1, 112, 231, 194, 53, 17, 10, 1, 112, 
-    231, 194, 40, 17, 10, 1, 79, 53, 17, 10, 1, 79, 40, 17, 10, 1, 79, 65, 
-    17, 10, 1, 79, 147, 17, 10, 27, 233, 104, 2, 112, 2, 231, 229, 77, 53, 
-    17, 10, 27, 233, 104, 2, 112, 2, 231, 229, 77, 40, 17, 10, 27, 233, 104, 
-    2, 112, 2, 202, 77, 53, 17, 10, 27, 233, 104, 2, 112, 2, 202, 77, 40, 17, 
-    10, 27, 233, 104, 2, 112, 2, 202, 252, 44, 53, 17, 10, 27, 233, 104, 2, 
-    112, 2, 202, 252, 44, 40, 17, 10, 27, 233, 104, 2, 112, 53, 17, 10, 27, 
-    233, 104, 2, 112, 40, 17, 210, 87, 211, 245, 228, 74, 219, 19, 126, 245, 
-    32, 78, 126, 223, 255, 78, 126, 54, 50, 126, 247, 133, 50, 126, 225, 183, 
-    50, 126, 254, 127, 126, 254, 58, 126, 43, 226, 4, 126, 44, 226, 4, 126, 
-    253, 217, 126, 96, 50, 126, 249, 220, 126, 240, 168, 126, 243, 230, 218, 
-    130, 126, 219, 47, 126, 21, 210, 86, 126, 21, 110, 126, 21, 105, 126, 21, 
-    158, 126, 21, 161, 126, 21, 189, 126, 21, 194, 126, 21, 198, 126, 21, 
-    195, 126, 21, 200, 126, 249, 227, 126, 220, 151, 126, 233, 16, 50, 126, 
-    245, 99, 50, 126, 242, 131, 50, 126, 224, 14, 78, 126, 249, 218, 253, 
-    207, 126, 7, 6, 1, 61, 126, 7, 6, 1, 253, 159, 126, 7, 6, 1, 251, 67, 
-    126, 7, 6, 1, 249, 61, 126, 7, 6, 1, 75, 126, 7, 6, 1, 245, 7, 126, 7, 6, 
-    1, 243, 203, 126, 7, 6, 1, 242, 61, 126, 7, 6, 1, 73, 126, 7, 6, 1, 235, 
-    145, 126, 7, 6, 1, 235, 24, 126, 7, 6, 1, 156, 126, 7, 6, 1, 193, 126, 7, 
-    6, 1, 230, 26, 126, 7, 6, 1, 76, 126, 7, 6, 1, 226, 106, 126, 7, 6, 1, 
-    224, 97, 126, 7, 6, 1, 153, 126, 7, 6, 1, 222, 92, 126, 7, 6, 1, 217, 
-    153, 126, 7, 6, 1, 70, 126, 7, 6, 1, 214, 105, 126, 7, 6, 1, 212, 98, 
-    126, 7, 6, 1, 211, 178, 126, 7, 6, 1, 211, 117, 126, 7, 6, 1, 210, 159, 
-    126, 43, 42, 127, 126, 223, 51, 219, 47, 126, 44, 42, 127, 126, 250, 32, 
-    255, 15, 126, 121, 232, 214, 126, 242, 138, 255, 15, 126, 7, 4, 1, 61, 
-    126, 7, 4, 1, 253, 159, 126, 7, 4, 1, 251, 67, 126, 7, 4, 1, 249, 61, 
-    126, 7, 4, 1, 75, 126, 7, 4, 1, 245, 7, 126, 7, 4, 1, 243, 203, 126, 7, 
-    4, 1, 242, 61, 126, 7, 4, 1, 73, 126, 7, 4, 1, 235, 145, 126, 7, 4, 1, 
-    235, 24, 126, 7, 4, 1, 156, 126, 7, 4, 1, 193, 126, 7, 4, 1, 230, 26, 
-    126, 7, 4, 1, 76, 126, 7, 4, 1, 226, 106, 126, 7, 4, 1, 224, 97, 126, 7, 
-    4, 1, 153, 126, 7, 4, 1, 222, 92, 126, 7, 4, 1, 217, 153, 126, 7, 4, 1, 
-    70, 126, 7, 4, 1, 214, 105, 126, 7, 4, 1, 212, 98, 126, 7, 4, 1, 211, 
-    178, 126, 7, 4, 1, 211, 117, 126, 7, 4, 1, 210, 159, 126, 43, 249, 100, 
-    127, 126, 67, 232, 214, 126, 44, 249, 100, 127, 126, 183, 126, 43, 71, 
-    226, 4, 126, 44, 71, 226, 4, 101, 109, 243, 230, 218, 130, 101, 43, 249, 
-    162, 127, 101, 44, 249, 162, 127, 101, 109, 249, 220, 101, 56, 230, 225, 
-    247, 121, 101, 56, 1, 211, 227, 101, 56, 1, 4, 61, 101, 56, 1, 4, 73, 
-    101, 56, 1, 4, 70, 101, 56, 1, 4, 75, 101, 56, 1, 4, 76, 101, 56, 1, 4, 
-    191, 101, 56, 1, 4, 210, 212, 101, 56, 1, 4, 210, 244, 101, 56, 1, 4, 
-    215, 119, 101, 234, 202, 224, 174, 219, 32, 78, 101, 56, 1, 61, 101, 56, 
-    1, 73, 101, 56, 1, 70, 101, 56, 1, 75, 101, 56, 1, 76, 101, 56, 1, 176, 
-    101, 56, 1, 234, 93, 101, 56, 1, 233, 218, 101, 56, 1, 234, 183, 101, 56, 
-    1, 234, 29, 101, 56, 1, 206, 101, 56, 1, 219, 192, 101, 56, 1, 218, 84, 
-    101, 56, 1, 221, 182, 101, 56, 1, 219, 59, 101, 56, 1, 217, 106, 101, 56, 
-    1, 216, 118, 101, 56, 1, 215, 119, 101, 56, 1, 217, 23, 101, 56, 1, 111, 
-    101, 56, 1, 197, 101, 56, 1, 228, 234, 101, 56, 1, 227, 238, 101, 56, 1, 
-    229, 108, 101, 56, 1, 228, 75, 101, 56, 1, 162, 101, 56, 1, 241, 181, 
-    101, 56, 1, 240, 223, 101, 56, 1, 241, 239, 101, 56, 1, 241, 69, 101, 56, 
-    1, 185, 101, 56, 1, 230, 231, 101, 56, 1, 230, 103, 101, 56, 1, 231, 92, 
-    101, 56, 1, 230, 162, 101, 56, 1, 191, 101, 56, 1, 210, 212, 101, 56, 1, 
-    210, 244, 101, 56, 1, 205, 101, 56, 1, 223, 36, 101, 56, 1, 222, 141, 
-    101, 56, 1, 223, 129, 101, 56, 1, 222, 212, 101, 56, 1, 212, 65, 101, 56, 
-    1, 230, 26, 101, 56, 213, 135, 219, 32, 78, 101, 56, 220, 156, 219, 32, 
-    78, 101, 24, 244, 104, 101, 24, 1, 234, 59, 101, 24, 1, 218, 216, 101, 
-    24, 1, 234, 52, 101, 24, 1, 228, 227, 101, 24, 1, 228, 225, 101, 24, 1, 
-    228, 224, 101, 24, 1, 216, 102, 101, 24, 1, 218, 205, 101, 24, 1, 223, 
-    27, 101, 24, 1, 223, 22, 101, 24, 1, 223, 19, 101, 24, 1, 223, 12, 101, 
-    24, 1, 223, 7, 101, 24, 1, 223, 2, 101, 24, 1, 223, 13, 101, 24, 1, 223, 
-    25, 101, 24, 1, 230, 218, 101, 24, 1, 225, 96, 101, 24, 1, 218, 213, 101, 
-    24, 1, 225, 85, 101, 24, 1, 219, 149, 101, 24, 1, 218, 210, 101, 24, 1, 
-    236, 57, 101, 24, 1, 250, 47, 101, 24, 1, 218, 220, 101, 24, 1, 250, 107, 
-    101, 24, 1, 234, 111, 101, 24, 1, 216, 174, 101, 24, 1, 225, 132, 101, 
-    24, 1, 241, 173, 101, 24, 1, 61, 101, 24, 1, 254, 244, 101, 24, 1, 191, 
-    101, 24, 1, 211, 92, 101, 24, 1, 245, 118, 101, 24, 1, 75, 101, 24, 1, 
-    211, 36, 101, 24, 1, 211, 47, 101, 24, 1, 76, 101, 24, 1, 212, 65, 101, 
-    24, 1, 212, 62, 101, 24, 1, 226, 235, 101, 24, 1, 210, 244, 101, 24, 1, 
-    70, 101, 24, 1, 212, 11, 101, 24, 1, 212, 22, 101, 24, 1, 211, 250, 101, 
-    24, 1, 210, 212, 101, 24, 1, 245, 56, 101, 24, 1, 211, 8, 101, 24, 1, 73, 
-    126, 250, 177, 50, 126, 224, 229, 50, 126, 228, 53, 50, 126, 231, 233, 
-    126, 251, 136, 130, 126, 211, 40, 50, 126, 211, 217, 50, 101, 244, 19, 
-    192, 213, 239, 101, 140, 74, 101, 214, 153, 74, 101, 97, 74, 101, 246, 
-    105, 74, 101, 85, 218, 235, 101, 71, 250, 36, 235, 205, 254, 100, 254, 
-    121, 235, 205, 254, 100, 220, 138, 235, 205, 254, 100, 216, 237, 226, 
-    250, 223, 73, 250, 143, 223, 73, 250, 143, 62, 57, 3, 253, 143, 61, 62, 
-    57, 3, 253, 112, 75, 62, 57, 3, 253, 121, 73, 62, 57, 3, 253, 89, 76, 62, 
-    57, 3, 253, 139, 70, 62, 57, 3, 253, 158, 248, 222, 62, 57, 3, 253, 105, 
-    248, 91, 62, 57, 3, 253, 145, 248, 4, 62, 57, 3, 253, 135, 247, 146, 62, 
-    57, 3, 253, 99, 246, 79, 62, 57, 3, 253, 93, 235, 142, 62, 57, 3, 253, 
-    104, 235, 127, 62, 57, 3, 253, 114, 235, 69, 62, 57, 3, 253, 85, 235, 52, 
-    62, 57, 3, 253, 73, 176, 62, 57, 3, 253, 106, 234, 183, 62, 57, 3, 253, 
-    83, 234, 93, 62, 57, 3, 253, 80, 234, 29, 62, 57, 3, 253, 69, 233, 218, 
-    62, 57, 3, 253, 70, 185, 62, 57, 3, 253, 136, 231, 92, 62, 57, 3, 253, 
-    77, 230, 231, 62, 57, 3, 253, 134, 230, 162, 62, 57, 3, 253, 126, 230, 
-    103, 62, 57, 3, 253, 147, 197, 62, 57, 3, 253, 125, 229, 108, 62, 57, 3, 
-    253, 119, 228, 234, 62, 57, 3, 253, 98, 228, 75, 62, 57, 3, 253, 95, 227, 
-    238, 62, 57, 3, 253, 154, 190, 62, 57, 3, 253, 78, 225, 222, 62, 57, 3, 
-    253, 111, 225, 109, 62, 57, 3, 253, 138, 225, 17, 62, 57, 3, 253, 100, 
-    224, 151, 62, 57, 3, 253, 133, 224, 89, 62, 57, 3, 253, 72, 224, 70, 62, 
-    57, 3, 253, 128, 224, 54, 62, 57, 3, 253, 117, 224, 43, 62, 57, 3, 253, 
-    90, 205, 62, 57, 3, 253, 122, 223, 129, 62, 57, 3, 253, 97, 223, 36, 62, 
-    57, 3, 253, 156, 222, 212, 62, 57, 3, 253, 123, 222, 141, 62, 57, 3, 253, 
-    118, 206, 62, 57, 3, 253, 141, 221, 182, 62, 57, 3, 253, 109, 219, 192, 
-    62, 57, 3, 253, 137, 219, 59, 62, 57, 3, 253, 92, 218, 84, 62, 57, 3, 
-    253, 91, 217, 106, 62, 57, 3, 253, 152, 217, 23, 62, 57, 3, 253, 113, 
-    216, 118, 62, 57, 3, 253, 150, 111, 62, 57, 3, 253, 81, 215, 119, 62, 57, 
-    3, 253, 96, 212, 65, 62, 57, 3, 253, 75, 212, 22, 62, 57, 3, 253, 110, 
-    211, 250, 62, 57, 3, 253, 108, 211, 227, 62, 57, 3, 253, 132, 210, 116, 
-    62, 57, 3, 253, 76, 210, 94, 62, 57, 3, 253, 129, 210, 23, 62, 57, 3, 
-    253, 124, 255, 76, 62, 57, 3, 253, 107, 255, 75, 62, 57, 3, 253, 66, 253, 
-    193, 62, 57, 3, 253, 79, 246, 47, 62, 57, 3, 253, 62, 246, 46, 62, 57, 3, 
-    253, 102, 227, 175, 62, 57, 3, 253, 120, 224, 149, 62, 57, 3, 253, 88, 
-    224, 153, 62, 57, 3, 253, 74, 223, 187, 62, 57, 3, 253, 116, 223, 186, 
-    62, 57, 3, 253, 82, 222, 211, 62, 57, 3, 253, 84, 217, 103, 62, 57, 3, 
-    253, 64, 215, 78, 62, 57, 3, 253, 61, 105, 62, 57, 16, 253, 131, 62, 57, 
-    16, 253, 130, 62, 57, 16, 253, 127, 62, 57, 16, 253, 115, 62, 57, 16, 
-    253, 103, 62, 57, 16, 253, 101, 62, 57, 16, 253, 94, 62, 57, 16, 253, 87, 
-    62, 57, 16, 253, 86, 62, 57, 16, 253, 71, 62, 57, 16, 253, 68, 62, 57, 
-    16, 253, 67, 62, 57, 16, 253, 65, 62, 57, 16, 253, 63, 62, 57, 106, 253, 
-    60, 231, 186, 62, 57, 106, 253, 59, 211, 221, 62, 57, 106, 253, 58, 248, 
-    75, 62, 57, 106, 253, 57, 245, 96, 62, 57, 106, 253, 56, 231, 160, 62, 
-    57, 106, 253, 55, 218, 163, 62, 57, 106, 253, 54, 245, 38, 62, 57, 106, 
-    253, 53, 223, 154, 62, 57, 106, 253, 52, 220, 63, 62, 57, 106, 253, 51, 
-    241, 238, 62, 57, 106, 253, 50, 219, 26, 62, 57, 106, 253, 49, 251, 204, 
-    62, 57, 106, 253, 48, 249, 146, 62, 57, 106, 253, 47, 251, 116, 62, 57, 
-    106, 253, 46, 212, 2, 62, 57, 106, 253, 45, 252, 137, 62, 57, 106, 253, 
-    44, 226, 206, 62, 57, 106, 253, 43, 218, 255, 62, 57, 106, 253, 42, 249, 
-    69, 62, 57, 230, 143, 253, 41, 234, 225, 62, 57, 230, 143, 253, 40, 234, 
-    233, 62, 57, 106, 253, 39, 226, 219, 62, 57, 106, 253, 38, 211, 236, 62, 
-    57, 106, 253, 37, 62, 57, 230, 143, 253, 36, 254, 18, 62, 57, 230, 143, 
-    253, 35, 231, 53, 62, 57, 106, 253, 34, 251, 135, 62, 57, 106, 253, 33, 
-    242, 167, 62, 57, 106, 253, 32, 62, 57, 106, 253, 31, 211, 212, 62, 57, 
-    106, 253, 30, 62, 57, 106, 253, 29, 62, 57, 106, 253, 28, 240, 249, 62, 
-    57, 106, 253, 27, 62, 57, 106, 253, 26, 62, 57, 106, 253, 25, 62, 57, 
-    230, 143, 253, 23, 215, 92, 62, 57, 106, 253, 22, 62, 57, 106, 253, 21, 
-    62, 57, 106, 253, 20, 249, 251, 62, 57, 106, 253, 19, 62, 57, 106, 253, 
-    18, 62, 57, 106, 253, 17, 243, 94, 62, 57, 106, 253, 16, 254, 5, 62, 57, 
-    106, 253, 15, 62, 57, 106, 253, 14, 62, 57, 106, 253, 13, 62, 57, 106, 
-    253, 12, 62, 57, 106, 253, 11, 62, 57, 106, 253, 10, 62, 57, 106, 253, 9, 
-    62, 57, 106, 253, 8, 62, 57, 106, 253, 7, 62, 57, 106, 253, 6, 230, 135, 
-    62, 57, 106, 253, 5, 62, 57, 106, 253, 4, 215, 236, 62, 57, 106, 253, 3, 
-    62, 57, 106, 253, 2, 62, 57, 106, 253, 1, 62, 57, 106, 253, 0, 62, 57, 
-    106, 252, 255, 62, 57, 106, 252, 254, 62, 57, 106, 252, 253, 62, 57, 106, 
-    252, 252, 62, 57, 106, 252, 251, 62, 57, 106, 252, 250, 62, 57, 106, 252, 
-    249, 62, 57, 106, 252, 248, 241, 212, 62, 57, 106, 252, 227, 244, 29, 62, 
-    57, 106, 252, 224, 252, 117, 62, 57, 106, 252, 219, 219, 6, 62, 57, 106, 
-    252, 218, 74, 62, 57, 106, 252, 217, 62, 57, 106, 252, 216, 217, 237, 62, 
-    57, 106, 252, 215, 62, 57, 106, 252, 214, 62, 57, 106, 252, 213, 211, 
-    254, 250, 140, 62, 57, 106, 252, 212, 250, 140, 62, 57, 106, 252, 211, 
-    250, 141, 244, 0, 62, 57, 106, 252, 210, 212, 0, 62, 57, 106, 252, 209, 
-    62, 57, 106, 252, 208, 62, 57, 230, 143, 252, 207, 247, 199, 62, 57, 106, 
-    252, 206, 62, 57, 106, 252, 205, 62, 57, 106, 252, 203, 62, 57, 106, 252, 
-    202, 62, 57, 106, 252, 201, 62, 57, 106, 252, 200, 248, 160, 62, 57, 106, 
-    252, 199, 62, 57, 106, 252, 198, 62, 57, 106, 252, 197, 62, 57, 106, 252, 
-    196, 62, 57, 106, 252, 195, 62, 57, 106, 213, 186, 253, 24, 62, 57, 106, 
-    213, 186, 252, 247, 62, 57, 106, 213, 186, 252, 246, 62, 57, 106, 213, 
-    186, 252, 245, 62, 57, 106, 213, 186, 252, 244, 62, 57, 106, 213, 186, 
-    252, 243, 62, 57, 106, 213, 186, 252, 242, 62, 57, 106, 213, 186, 252, 
-    241, 62, 57, 106, 213, 186, 252, 240, 62, 57, 106, 213, 186, 252, 239, 
-    62, 57, 106, 213, 186, 252, 238, 62, 57, 106, 213, 186, 252, 237, 62, 57, 
-    106, 213, 186, 252, 236, 62, 57, 106, 213, 186, 252, 235, 62, 57, 106, 
-    213, 186, 252, 234, 62, 57, 106, 213, 186, 252, 233, 62, 57, 106, 213, 
-    186, 252, 232, 62, 57, 106, 213, 186, 252, 231, 62, 57, 106, 213, 186, 
-    252, 230, 62, 57, 106, 213, 186, 252, 229, 62, 57, 106, 213, 186, 252, 
-    228, 62, 57, 106, 213, 186, 252, 226, 62, 57, 106, 213, 186, 252, 225, 
-    62, 57, 106, 213, 186, 252, 223, 62, 57, 106, 213, 186, 252, 222, 62, 57, 
-    106, 213, 186, 252, 221, 62, 57, 106, 213, 186, 252, 220, 62, 57, 106, 
-    213, 186, 252, 204, 62, 57, 106, 213, 186, 252, 194, 254, 237, 211, 209, 
-    220, 139, 232, 214, 254, 237, 211, 209, 220, 139, 247, 121, 254, 237, 
-    250, 131, 78, 254, 237, 54, 110, 254, 237, 54, 105, 254, 237, 54, 158, 
-    254, 237, 54, 161, 254, 237, 54, 189, 254, 237, 54, 194, 254, 237, 54, 
-    198, 254, 237, 54, 195, 254, 237, 54, 200, 254, 237, 54, 216, 248, 254, 
-    237, 54, 215, 73, 254, 237, 54, 216, 163, 254, 237, 54, 244, 16, 254, 
-    237, 54, 244, 115, 254, 237, 54, 219, 112, 254, 237, 54, 220, 117, 254, 
-    237, 54, 245, 185, 254, 237, 54, 228, 196, 254, 237, 54, 123, 240, 211, 
-    254, 237, 54, 113, 240, 211, 254, 237, 54, 134, 240, 211, 254, 237, 54, 
-    244, 12, 240, 211, 254, 237, 54, 244, 82, 240, 211, 254, 237, 54, 219, 
-    126, 240, 211, 254, 237, 54, 220, 123, 240, 211, 254, 237, 54, 245, 194, 
-    240, 211, 254, 237, 54, 228, 201, 240, 211, 254, 237, 54, 123, 216, 148, 
-    254, 237, 54, 113, 216, 148, 254, 237, 54, 134, 216, 148, 254, 237, 54, 
-    244, 12, 216, 148, 254, 237, 54, 244, 82, 216, 148, 254, 237, 54, 219, 
-    126, 216, 148, 254, 237, 54, 220, 123, 216, 148, 254, 237, 54, 245, 194, 
-    216, 148, 254, 237, 54, 228, 201, 216, 148, 254, 237, 54, 216, 249, 216, 
-    148, 254, 237, 54, 215, 74, 216, 148, 254, 237, 54, 216, 164, 216, 148, 
-    254, 237, 54, 244, 17, 216, 148, 254, 237, 54, 244, 116, 216, 148, 254, 
-    237, 54, 219, 113, 216, 148, 254, 237, 54, 220, 118, 216, 148, 254, 237, 
-    54, 245, 186, 216, 148, 254, 237, 54, 228, 197, 216, 148, 254, 237, 212, 
-    14, 252, 129, 214, 173, 254, 237, 212, 14, 244, 93, 218, 60, 254, 237, 
-    212, 14, 221, 177, 218, 60, 254, 237, 212, 14, 216, 170, 218, 60, 254, 
-    237, 212, 14, 244, 5, 218, 60, 254, 237, 246, 82, 231, 91, 244, 93, 218, 
-    60, 254, 237, 232, 200, 231, 91, 244, 93, 218, 60, 254, 237, 231, 91, 
-    221, 177, 218, 60, 254, 237, 231, 91, 216, 170, 218, 60, 26, 255, 7, 253, 
-    195, 123, 224, 22, 26, 255, 7, 253, 195, 123, 242, 28, 26, 255, 7, 253, 
-    195, 123, 246, 101, 26, 255, 7, 253, 195, 189, 26, 255, 7, 253, 195, 244, 
-    115, 26, 255, 7, 253, 195, 244, 82, 240, 211, 26, 255, 7, 253, 195, 244, 
-    82, 216, 148, 26, 255, 7, 253, 195, 244, 116, 216, 148, 26, 255, 7, 253, 
-    195, 244, 82, 217, 68, 26, 255, 7, 253, 195, 216, 249, 217, 68, 26, 255, 
-    7, 253, 195, 244, 116, 217, 68, 26, 255, 7, 253, 195, 123, 240, 212, 217, 
-    68, 26, 255, 7, 253, 195, 244, 82, 240, 212, 217, 68, 26, 255, 7, 253, 
-    195, 123, 216, 149, 217, 68, 26, 255, 7, 253, 195, 244, 82, 216, 149, 
-    217, 68, 26, 255, 7, 253, 195, 244, 82, 218, 151, 26, 255, 7, 253, 195, 
-    216, 249, 218, 151, 26, 255, 7, 253, 195, 244, 116, 218, 151, 26, 255, 7, 
-    253, 195, 123, 240, 212, 218, 151, 26, 255, 7, 253, 195, 244, 82, 240, 
-    212, 218, 151, 26, 255, 7, 253, 195, 123, 216, 149, 218, 151, 26, 255, 7, 
-    253, 195, 216, 249, 216, 149, 218, 151, 26, 255, 7, 253, 195, 244, 116, 
-    216, 149, 218, 151, 26, 255, 7, 253, 195, 216, 249, 230, 165, 26, 255, 7, 
-    241, 206, 123, 225, 32, 26, 255, 7, 216, 182, 110, 26, 255, 7, 241, 202, 
-    110, 26, 255, 7, 245, 105, 105, 26, 255, 7, 216, 182, 105, 26, 255, 7, 
-    249, 66, 113, 246, 100, 26, 255, 7, 245, 105, 113, 246, 100, 26, 255, 7, 
-    215, 204, 189, 26, 255, 7, 215, 204, 216, 248, 26, 255, 7, 215, 204, 216, 
-    249, 254, 142, 17, 26, 255, 7, 241, 202, 216, 248, 26, 255, 7, 231, 42, 
-    216, 248, 26, 255, 7, 216, 182, 216, 248, 26, 255, 7, 216, 182, 216, 163, 
-    26, 255, 7, 215, 204, 244, 115, 26, 255, 7, 215, 204, 244, 116, 254, 142, 
-    17, 26, 255, 7, 241, 202, 244, 115, 26, 255, 7, 216, 182, 244, 115, 26, 
-    255, 7, 216, 182, 123, 240, 211, 26, 255, 7, 216, 182, 134, 240, 211, 26, 
-    255, 7, 245, 105, 244, 82, 240, 211, 26, 255, 7, 215, 204, 244, 82, 240, 
-    211, 26, 255, 7, 216, 182, 244, 82, 240, 211, 26, 255, 7, 250, 228, 244, 
-    82, 240, 211, 26, 255, 7, 229, 183, 244, 82, 240, 211, 26, 255, 7, 216, 
-    182, 123, 216, 148, 26, 255, 7, 216, 182, 244, 82, 216, 148, 26, 255, 7, 
-    248, 58, 244, 82, 230, 165, 26, 255, 7, 218, 119, 244, 116, 230, 165, 26, 
-    123, 163, 50, 26, 123, 163, 5, 254, 142, 17, 26, 113, 216, 168, 50, 26, 
-    134, 224, 21, 50, 26, 211, 45, 50, 26, 217, 69, 50, 26, 246, 102, 50, 26, 
-    226, 247, 50, 26, 113, 226, 246, 50, 26, 134, 226, 246, 50, 26, 244, 12, 
-    226, 246, 50, 26, 244, 82, 226, 246, 50, 26, 231, 36, 50, 26, 233, 158, 
-    252, 129, 50, 26, 232, 195, 50, 26, 226, 132, 50, 26, 211, 159, 50, 26, 
-    253, 244, 50, 26, 254, 1, 50, 26, 242, 145, 50, 26, 215, 187, 252, 129, 
-    50, 26, 210, 87, 50, 222, 199, 220, 114, 50, 222, 199, 214, 185, 50, 222, 
-    199, 220, 143, 50, 222, 199, 220, 112, 50, 222, 199, 247, 214, 220, 112, 
-    50, 222, 199, 219, 169, 50, 222, 199, 248, 54, 50, 222, 199, 224, 7, 50, 
-    222, 199, 220, 130, 50, 222, 199, 246, 61, 50, 222, 199, 253, 239, 50, 
-    222, 199, 250, 172, 50, 225, 144, 247, 192, 5, 225, 214, 225, 144, 247, 
-    192, 5, 225, 25, 241, 236, 225, 144, 247, 192, 5, 217, 46, 241, 236, 225, 
-    144, 247, 192, 5, 250, 248, 225, 144, 247, 192, 5, 250, 102, 225, 144, 
-    247, 192, 5, 211, 221, 225, 144, 247, 192, 5, 241, 212, 225, 144, 247, 
-    192, 5, 243, 86, 225, 144, 247, 192, 5, 216, 117, 225, 144, 247, 192, 5, 
-    74, 225, 144, 247, 192, 5, 251, 170, 225, 144, 247, 192, 5, 220, 30, 225, 
-    144, 247, 192, 5, 249, 245, 225, 144, 247, 192, 5, 231, 185, 225, 144, 
-    247, 192, 5, 231, 137, 225, 144, 247, 192, 5, 221, 217, 225, 144, 247, 
-    192, 5, 232, 238, 225, 144, 247, 192, 5, 251, 189, 225, 144, 247, 192, 5, 
-    250, 232, 225, 36, 225, 144, 247, 192, 5, 247, 134, 225, 144, 247, 192, 
-    5, 249, 224, 225, 144, 247, 192, 5, 219, 88, 225, 144, 247, 192, 5, 249, 
-    225, 225, 144, 247, 192, 5, 252, 64, 225, 144, 247, 192, 5, 220, 17, 225, 
-    144, 247, 192, 5, 240, 249, 225, 144, 247, 192, 5, 241, 179, 225, 144, 
-    247, 192, 5, 251, 113, 233, 37, 225, 144, 247, 192, 5, 250, 225, 225, 
-    144, 247, 192, 5, 223, 154, 225, 144, 247, 192, 5, 245, 231, 225, 144, 
-    247, 192, 5, 246, 108, 225, 144, 247, 192, 5, 215, 106, 225, 144, 247, 
-    192, 5, 252, 67, 225, 144, 247, 192, 5, 225, 37, 215, 236, 225, 144, 247, 
-    192, 5, 213, 159, 225, 144, 247, 192, 5, 226, 19, 225, 144, 247, 192, 5, 
-    222, 191, 225, 144, 247, 192, 5, 232, 225, 225, 144, 247, 192, 5, 226, 
-    116, 252, 185, 225, 144, 247, 192, 5, 244, 49, 225, 144, 247, 192, 5, 
-    242, 139, 225, 144, 247, 192, 5, 218, 120, 225, 144, 247, 192, 5, 4, 253, 
-    169, 225, 144, 247, 192, 5, 212, 32, 252, 149, 225, 144, 247, 192, 5, 38, 
-    226, 249, 91, 232, 61, 1, 61, 232, 61, 1, 75, 232, 61, 1, 253, 159, 232, 
-    61, 1, 252, 20, 232, 61, 1, 243, 203, 232, 61, 1, 249, 61, 232, 61, 1, 
-    73, 232, 61, 1, 212, 98, 232, 61, 1, 210, 159, 232, 61, 1, 216, 211, 232, 
-    61, 1, 235, 145, 232, 61, 1, 235, 24, 232, 61, 1, 224, 97, 232, 61, 1, 
-    156, 232, 61, 1, 193, 232, 61, 1, 230, 26, 232, 61, 1, 230, 167, 232, 61, 
-    1, 228, 112, 232, 61, 1, 70, 232, 61, 1, 226, 106, 232, 61, 1, 234, 48, 
-    232, 61, 1, 153, 232, 61, 1, 222, 92, 232, 61, 1, 217, 153, 232, 61, 1, 
-    215, 160, 232, 61, 1, 254, 124, 232, 61, 1, 245, 151, 232, 61, 1, 242, 
-    61, 232, 61, 1, 211, 178, 250, 238, 1, 61, 250, 238, 1, 226, 92, 250, 
-    238, 1, 249, 61, 250, 238, 1, 156, 250, 238, 1, 214, 116, 250, 238, 1, 
-    153, 250, 238, 1, 233, 63, 250, 238, 1, 255, 76, 250, 238, 1, 224, 97, 
-    250, 238, 1, 253, 159, 250, 238, 1, 193, 250, 238, 1, 76, 250, 238, 1, 
-    248, 224, 250, 238, 1, 217, 153, 250, 238, 1, 220, 105, 250, 238, 1, 220, 
-    104, 250, 238, 1, 222, 92, 250, 238, 1, 251, 66, 250, 238, 1, 70, 250, 
-    238, 1, 228, 112, 250, 238, 1, 211, 178, 250, 238, 1, 230, 26, 250, 238, 
-    1, 215, 159, 250, 238, 1, 226, 106, 250, 238, 1, 218, 227, 250, 238, 1, 
-    73, 250, 238, 1, 75, 250, 238, 1, 214, 113, 250, 238, 1, 235, 24, 250, 
-    238, 1, 235, 15, 250, 238, 1, 229, 151, 250, 238, 1, 214, 118, 250, 238, 
-    1, 243, 203, 250, 238, 1, 243, 138, 250, 238, 1, 218, 169, 250, 238, 1, 
-    218, 168, 250, 238, 1, 229, 80, 250, 238, 1, 236, 34, 250, 238, 1, 251, 
-    65, 250, 238, 1, 215, 160, 250, 238, 1, 214, 115, 250, 238, 1, 222, 181, 
-    250, 238, 1, 231, 130, 250, 238, 1, 231, 129, 250, 238, 1, 231, 128, 250, 
-    238, 1, 231, 127, 250, 238, 1, 233, 62, 250, 238, 1, 245, 235, 250, 238, 
-    1, 214, 114, 55, 32, 1, 61, 55, 32, 1, 252, 76, 55, 32, 1, 234, 183, 55, 
-    32, 1, 248, 91, 55, 32, 1, 75, 55, 32, 1, 213, 255, 55, 32, 1, 210, 94, 
-    55, 32, 1, 241, 239, 55, 32, 1, 216, 196, 55, 32, 1, 73, 55, 32, 1, 176, 
-    55, 32, 1, 245, 175, 55, 32, 1, 245, 160, 55, 32, 1, 245, 151, 55, 32, 1, 
-    245, 76, 55, 32, 1, 76, 55, 32, 1, 225, 222, 55, 32, 1, 220, 64, 55, 32, 
-    1, 233, 218, 55, 32, 1, 245, 93, 55, 32, 1, 245, 83, 55, 32, 1, 217, 23, 
-    55, 32, 1, 70, 55, 32, 1, 245, 178, 55, 32, 1, 225, 137, 55, 32, 1, 234, 
-    120, 55, 32, 1, 245, 203, 55, 32, 1, 245, 85, 55, 32, 1, 250, 132, 55, 
-    32, 1, 236, 34, 55, 32, 1, 214, 118, 55, 32, 227, 199, 110, 55, 32, 227, 
-    199, 189, 55, 32, 227, 199, 216, 248, 55, 32, 227, 199, 244, 115, 242, 
-    154, 1, 254, 205, 242, 154, 1, 252, 164, 242, 154, 1, 242, 212, 242, 154, 
-    1, 248, 205, 242, 154, 1, 254, 201, 242, 154, 1, 224, 80, 242, 154, 1, 
-    235, 156, 242, 154, 1, 242, 40, 242, 154, 1, 216, 159, 242, 154, 1, 245, 
-    184, 242, 154, 1, 233, 191, 242, 154, 1, 233, 114, 242, 154, 1, 231, 180, 
-    242, 154, 1, 229, 185, 242, 154, 1, 235, 120, 242, 154, 1, 214, 136, 242, 
-    154, 1, 226, 70, 242, 154, 1, 228, 196, 242, 154, 1, 223, 166, 242, 154, 
-    1, 221, 219, 242, 154, 1, 217, 5, 242, 154, 1, 211, 234, 242, 154, 1, 
-    244, 179, 242, 154, 1, 236, 38, 242, 154, 1, 240, 200, 242, 154, 1, 226, 
-    140, 242, 154, 1, 228, 201, 240, 211, 214, 209, 1, 254, 148, 214, 209, 1, 
-    252, 27, 214, 209, 1, 243, 109, 214, 209, 1, 234, 133, 214, 209, 1, 248, 
-    55, 214, 209, 1, 241, 69, 214, 209, 1, 211, 227, 214, 209, 1, 210, 85, 
-    214, 209, 1, 240, 242, 214, 209, 1, 216, 231, 214, 209, 1, 210, 233, 214, 
-    209, 1, 234, 251, 214, 209, 1, 220, 21, 214, 209, 1, 233, 99, 214, 209, 
-    1, 231, 66, 214, 209, 1, 248, 22, 214, 209, 1, 227, 195, 214, 209, 1, 
-    210, 13, 214, 209, 1, 221, 249, 214, 209, 1, 254, 197, 214, 209, 1, 224, 
-    151, 214, 209, 1, 222, 26, 214, 209, 1, 224, 36, 214, 209, 1, 223, 145, 
-    214, 209, 1, 216, 200, 214, 209, 1, 242, 245, 214, 209, 1, 111, 214, 209, 
-    1, 73, 214, 209, 1, 70, 214, 209, 1, 218, 180, 214, 209, 211, 209, 247, 
-    173, 55, 225, 170, 5, 61, 55, 225, 170, 5, 73, 55, 225, 170, 5, 70, 55, 
-    225, 170, 5, 176, 55, 225, 170, 5, 233, 218, 55, 225, 170, 5, 243, 136, 
-    55, 225, 170, 5, 242, 114, 55, 225, 170, 5, 211, 165, 55, 225, 170, 5, 
-    251, 34, 55, 225, 170, 5, 235, 142, 55, 225, 170, 5, 235, 109, 55, 225, 
-    170, 5, 217, 106, 55, 225, 170, 5, 215, 119, 55, 225, 170, 5, 248, 222, 
-    55, 225, 170, 5, 248, 4, 55, 225, 170, 5, 246, 79, 55, 225, 170, 5, 216, 
-    209, 55, 225, 170, 5, 190, 55, 225, 170, 5, 252, 192, 55, 225, 170, 5, 
-    244, 197, 55, 225, 170, 5, 197, 55, 225, 170, 5, 227, 238, 55, 225, 170, 
-    5, 185, 55, 225, 170, 5, 230, 231, 55, 225, 170, 5, 230, 103, 55, 225, 
-    170, 5, 191, 55, 225, 170, 5, 214, 27, 55, 225, 170, 5, 213, 176, 55, 
-    225, 170, 5, 205, 55, 225, 170, 5, 222, 141, 55, 225, 170, 5, 233, 136, 
-    55, 225, 170, 5, 206, 55, 225, 170, 5, 210, 116, 55, 225, 170, 5, 220, 
-    103, 55, 225, 170, 5, 218, 224, 55, 225, 170, 5, 162, 55, 225, 170, 5, 
-    253, 187, 55, 225, 170, 5, 253, 186, 55, 225, 170, 5, 253, 185, 55, 225, 
-    170, 5, 211, 142, 55, 225, 170, 5, 248, 201, 55, 225, 170, 5, 248, 200, 
-    55, 225, 170, 5, 252, 171, 55, 225, 170, 5, 251, 86, 55, 225, 170, 211, 
-    209, 247, 173, 55, 225, 170, 54, 110, 55, 225, 170, 54, 105, 55, 225, 
-    170, 54, 216, 248, 55, 225, 170, 54, 215, 73, 55, 225, 170, 54, 240, 211, 
-    181, 6, 1, 199, 73, 181, 6, 1, 199, 75, 181, 6, 1, 199, 61, 181, 6, 1, 
-    199, 254, 210, 181, 6, 1, 199, 76, 181, 6, 1, 199, 226, 184, 181, 6, 1, 
-    219, 252, 73, 181, 6, 1, 219, 252, 75, 181, 6, 1, 219, 252, 61, 181, 6, 
-    1, 219, 252, 254, 210, 181, 6, 1, 219, 252, 76, 181, 6, 1, 219, 252, 226, 
-    184, 181, 6, 1, 253, 168, 181, 6, 1, 226, 117, 181, 6, 1, 211, 195, 181, 
-    6, 1, 211, 44, 181, 6, 1, 242, 61, 181, 6, 1, 225, 212, 181, 6, 1, 252, 
-    67, 181, 6, 1, 217, 12, 181, 6, 1, 248, 78, 181, 6, 1, 250, 129, 181, 6, 
-    1, 235, 125, 181, 6, 1, 234, 190, 181, 6, 1, 243, 84, 181, 6, 1, 245, 
-    203, 181, 6, 1, 213, 250, 181, 6, 1, 245, 60, 181, 6, 1, 216, 195, 181, 
-    6, 1, 245, 83, 181, 6, 1, 210, 92, 181, 6, 1, 245, 76, 181, 6, 1, 210, 
-    73, 181, 6, 1, 245, 93, 181, 6, 1, 245, 175, 181, 6, 1, 245, 160, 181, 6, 
-    1, 245, 151, 181, 6, 1, 245, 139, 181, 6, 1, 226, 220, 181, 6, 1, 245, 
-    39, 181, 4, 1, 199, 73, 181, 4, 1, 199, 75, 181, 4, 1, 199, 61, 181, 4, 
-    1, 199, 254, 210, 181, 4, 1, 199, 76, 181, 4, 1, 199, 226, 184, 181, 4, 
-    1, 219, 252, 73, 181, 4, 1, 219, 252, 75, 181, 4, 1, 219, 252, 61, 181, 
-    4, 1, 219, 252, 254, 210, 181, 4, 1, 219, 252, 76, 181, 4, 1, 219, 252, 
-    226, 184, 181, 4, 1, 253, 168, 181, 4, 1, 226, 117, 181, 4, 1, 211, 195, 
-    181, 4, 1, 211, 44, 181, 4, 1, 242, 61, 181, 4, 1, 225, 212, 181, 4, 1, 
-    252, 67, 181, 4, 1, 217, 12, 181, 4, 1, 248, 78, 181, 4, 1, 250, 129, 
-    181, 4, 1, 235, 125, 181, 4, 1, 234, 190, 181, 4, 1, 243, 84, 181, 4, 1, 
-    245, 203, 181, 4, 1, 213, 250, 181, 4, 1, 245, 60, 181, 4, 1, 216, 195, 
-    181, 4, 1, 245, 83, 181, 4, 1, 210, 92, 181, 4, 1, 245, 76, 181, 4, 1, 
-    210, 73, 181, 4, 1, 245, 93, 181, 4, 1, 245, 175, 181, 4, 1, 245, 160, 
-    181, 4, 1, 245, 151, 181, 4, 1, 245, 139, 181, 4, 1, 226, 220, 181, 4, 1, 
-    245, 39, 220, 70, 1, 225, 210, 220, 70, 1, 216, 6, 220, 70, 1, 234, 92, 
-    220, 70, 1, 244, 148, 220, 70, 1, 216, 173, 220, 70, 1, 219, 59, 220, 70, 
-    1, 218, 15, 220, 70, 1, 250, 62, 220, 70, 1, 211, 46, 220, 70, 1, 240, 
-    210, 220, 70, 1, 252, 6, 220, 70, 1, 248, 90, 220, 70, 1, 243, 122, 220, 
-    70, 1, 213, 123, 220, 70, 1, 216, 177, 220, 70, 1, 210, 21, 220, 70, 1, 
-    231, 90, 220, 70, 1, 235, 50, 220, 70, 1, 211, 225, 220, 70, 1, 242, 49, 
-    220, 70, 1, 232, 143, 220, 70, 1, 230, 190, 220, 70, 1, 236, 41, 220, 70, 
-    1, 245, 202, 220, 70, 1, 253, 232, 220, 70, 1, 254, 248, 220, 70, 1, 226, 
-    197, 220, 70, 1, 211, 212, 220, 70, 1, 226, 131, 220, 70, 1, 254, 210, 
-    220, 70, 1, 222, 209, 220, 70, 1, 227, 195, 220, 70, 1, 245, 218, 220, 
-    70, 1, 254, 215, 220, 70, 1, 240, 112, 220, 70, 1, 214, 163, 220, 70, 1, 
-    226, 255, 220, 70, 1, 226, 177, 220, 70, 1, 226, 219, 220, 70, 1, 253, 
-    171, 220, 70, 1, 254, 20, 220, 70, 1, 226, 159, 220, 70, 1, 254, 193, 
-    220, 70, 1, 245, 87, 220, 70, 1, 253, 254, 220, 70, 1, 245, 228, 220, 70, 
-    1, 240, 119, 220, 70, 1, 211, 13, 226, 142, 1, 254, 171, 226, 142, 1, 
-    252, 192, 226, 142, 1, 217, 106, 226, 142, 1, 235, 142, 226, 142, 1, 211, 
-    165, 226, 142, 1, 234, 133, 226, 142, 1, 248, 77, 226, 142, 1, 205, 226, 
-    142, 1, 206, 226, 142, 1, 220, 27, 226, 142, 1, 248, 26, 226, 142, 1, 
-    250, 216, 226, 142, 1, 243, 136, 226, 142, 1, 244, 197, 226, 142, 1, 224, 
-    87, 226, 142, 1, 235, 10, 226, 142, 1, 233, 131, 226, 142, 1, 230, 201, 
-    226, 142, 1, 227, 179, 226, 142, 1, 212, 30, 226, 142, 1, 162, 226, 142, 
-    1, 191, 226, 142, 1, 61, 226, 142, 1, 75, 226, 142, 1, 73, 226, 142, 1, 
-    76, 226, 142, 1, 70, 226, 142, 1, 255, 74, 226, 142, 1, 245, 210, 226, 
-    142, 1, 226, 184, 226, 142, 21, 210, 86, 226, 142, 21, 110, 226, 142, 21, 
-    105, 226, 142, 21, 158, 226, 142, 21, 161, 226, 142, 21, 189, 226, 142, 
-    21, 194, 226, 142, 21, 198, 226, 142, 21, 195, 226, 142, 21, 200, 249, 
-    68, 3, 61, 249, 68, 3, 75, 249, 68, 3, 73, 249, 68, 3, 76, 249, 68, 3, 
-    70, 249, 68, 3, 235, 142, 249, 68, 3, 235, 69, 249, 68, 3, 176, 249, 68, 
-    3, 234, 183, 249, 68, 3, 234, 93, 249, 68, 3, 234, 29, 249, 68, 3, 233, 
-    218, 249, 68, 3, 233, 136, 249, 68, 3, 233, 59, 249, 68, 3, 232, 242, 
-    249, 68, 3, 232, 157, 249, 68, 3, 232, 99, 249, 68, 3, 185, 249, 68, 3, 
-    231, 92, 249, 68, 3, 230, 231, 249, 68, 3, 230, 162, 249, 68, 3, 230, 
-    103, 249, 68, 3, 197, 249, 68, 3, 229, 108, 249, 68, 3, 228, 234, 249, 
-    68, 3, 228, 75, 249, 68, 3, 227, 238, 249, 68, 3, 190, 249, 68, 3, 225, 
-    222, 249, 68, 3, 225, 109, 249, 68, 3, 225, 17, 249, 68, 3, 224, 151, 
-    249, 68, 3, 205, 249, 68, 3, 223, 129, 249, 68, 3, 223, 36, 249, 68, 3, 
-    222, 212, 249, 68, 3, 222, 141, 249, 68, 3, 206, 249, 68, 3, 221, 182, 
-    249, 68, 3, 219, 192, 249, 68, 3, 219, 59, 249, 68, 3, 218, 84, 249, 68, 
-    3, 217, 106, 249, 68, 3, 217, 23, 249, 68, 3, 216, 118, 249, 68, 3, 111, 
-    249, 68, 3, 215, 119, 249, 68, 3, 212, 65, 249, 68, 3, 212, 22, 249, 68, 
-    3, 211, 250, 249, 68, 3, 211, 227, 249, 68, 3, 211, 165, 249, 68, 3, 211, 
-    162, 249, 68, 3, 210, 116, 249, 68, 3, 210, 23, 236, 2, 254, 28, 1, 254, 
-    169, 236, 2, 254, 28, 1, 252, 26, 236, 2, 254, 28, 1, 242, 202, 236, 2, 
-    254, 28, 1, 248, 189, 236, 2, 254, 28, 1, 241, 239, 236, 2, 254, 28, 1, 
-    212, 30, 236, 2, 254, 28, 1, 210, 97, 236, 2, 254, 28, 1, 241, 196, 236, 
-    2, 254, 28, 1, 216, 227, 236, 2, 254, 28, 1, 210, 232, 236, 2, 254, 28, 
-    1, 234, 226, 236, 2, 254, 28, 1, 233, 94, 236, 2, 254, 28, 1, 231, 66, 
-    236, 2, 254, 28, 1, 227, 195, 236, 2, 254, 28, 1, 221, 250, 236, 2, 254, 
-    28, 1, 253, 163, 236, 2, 254, 28, 1, 225, 222, 236, 2, 254, 28, 1, 222, 
-    25, 236, 2, 254, 28, 1, 224, 35, 236, 2, 254, 28, 1, 223, 68, 236, 2, 
-    254, 28, 1, 220, 21, 236, 2, 254, 28, 1, 217, 37, 236, 2, 254, 28, 221, 
-    174, 50, 236, 2, 254, 28, 54, 110, 236, 2, 254, 28, 54, 105, 236, 2, 254, 
-    28, 54, 158, 236, 2, 254, 28, 54, 216, 248, 236, 2, 254, 28, 54, 215, 73, 
-    236, 2, 254, 28, 54, 123, 240, 211, 236, 2, 254, 28, 54, 123, 216, 148, 
-    236, 2, 254, 28, 54, 216, 249, 216, 148, 225, 120, 1, 254, 166, 225, 120, 
-    1, 252, 29, 225, 120, 1, 243, 110, 225, 120, 1, 248, 57, 225, 120, 1, 
-    241, 239, 225, 120, 1, 212, 37, 225, 120, 1, 210, 110, 225, 120, 1, 241, 
-    198, 225, 120, 1, 216, 231, 225, 120, 1, 210, 233, 225, 120, 1, 234, 251, 
-    225, 120, 1, 233, 100, 225, 120, 1, 231, 66, 225, 120, 1, 227, 195, 225, 
-    120, 1, 220, 145, 225, 120, 1, 254, 197, 225, 120, 1, 225, 222, 225, 120, 
-    1, 222, 26, 225, 120, 1, 224, 40, 225, 120, 1, 222, 190, 225, 120, 1, 
-    220, 21, 225, 120, 1, 217, 42, 225, 120, 54, 110, 225, 120, 54, 216, 248, 
-    225, 120, 54, 215, 73, 225, 120, 54, 123, 240, 211, 225, 120, 54, 105, 
-    225, 120, 54, 158, 225, 120, 211, 209, 220, 138, 232, 60, 1, 61, 232, 60, 
-    1, 253, 159, 232, 60, 1, 243, 203, 232, 60, 1, 249, 61, 232, 60, 1, 75, 
-    232, 60, 1, 214, 105, 232, 60, 1, 73, 232, 60, 1, 211, 117, 232, 60, 1, 
-    235, 24, 232, 60, 1, 156, 232, 60, 1, 193, 232, 60, 1, 230, 26, 232, 60, 
-    1, 76, 232, 60, 1, 153, 232, 60, 1, 218, 227, 232, 60, 1, 217, 153, 232, 
-    60, 1, 70, 232, 60, 1, 245, 7, 232, 60, 1, 224, 97, 232, 60, 1, 222, 92, 
-    232, 60, 1, 215, 160, 232, 60, 1, 254, 124, 232, 60, 1, 245, 151, 232, 
-    60, 1, 232, 63, 232, 60, 1, 228, 112, 232, 60, 1, 251, 67, 232, 60, 215, 
-    223, 78, 231, 49, 241, 175, 1, 61, 231, 49, 241, 175, 1, 75, 231, 49, 
-    241, 175, 1, 73, 231, 49, 241, 175, 1, 76, 231, 49, 241, 175, 1, 191, 
-    231, 49, 241, 175, 1, 212, 65, 231, 49, 241, 175, 1, 252, 192, 231, 49, 
-    241, 175, 1, 252, 191, 231, 49, 241, 175, 1, 190, 231, 49, 241, 175, 1, 
-    185, 231, 49, 241, 175, 1, 197, 231, 49, 241, 175, 1, 229, 229, 231, 49, 
-    241, 175, 1, 229, 108, 231, 49, 241, 175, 1, 229, 107, 231, 49, 241, 175, 
-    1, 205, 231, 49, 241, 175, 1, 223, 188, 231, 49, 241, 175, 1, 233, 136, 
-    231, 49, 241, 175, 1, 234, 133, 231, 49, 241, 175, 1, 241, 190, 231, 49, 
-    241, 175, 1, 206, 231, 49, 241, 175, 1, 222, 34, 231, 49, 241, 175, 1, 
-    221, 182, 231, 49, 241, 175, 1, 176, 231, 49, 241, 175, 1, 224, 89, 231, 
-    49, 241, 175, 1, 217, 106, 231, 49, 241, 175, 1, 217, 105, 231, 49, 241, 
-    175, 1, 217, 23, 231, 49, 241, 175, 1, 217, 22, 231, 49, 241, 175, 1, 
-    111, 231, 49, 241, 175, 1, 248, 222, 231, 49, 241, 175, 16, 213, 170, 
-    231, 49, 241, 175, 16, 213, 169, 231, 49, 249, 95, 1, 61, 231, 49, 249, 
-    95, 1, 75, 231, 49, 249, 95, 1, 73, 231, 49, 249, 95, 1, 76, 231, 49, 
-    249, 95, 1, 191, 231, 49, 249, 95, 1, 212, 65, 231, 49, 249, 95, 1, 252, 
-    192, 231, 49, 249, 95, 1, 190, 231, 49, 249, 95, 1, 185, 231, 49, 249, 
-    95, 1, 197, 231, 49, 249, 95, 1, 229, 108, 231, 49, 249, 95, 1, 205, 231, 
-    49, 249, 95, 1, 233, 136, 231, 49, 249, 95, 1, 234, 133, 231, 49, 249, 
-    95, 1, 241, 190, 231, 49, 249, 95, 1, 206, 231, 49, 249, 95, 1, 254, 24, 
-    206, 231, 49, 249, 95, 1, 221, 182, 231, 49, 249, 95, 1, 176, 231, 49, 
-    249, 95, 1, 224, 89, 231, 49, 249, 95, 1, 217, 106, 231, 49, 249, 95, 1, 
-    217, 23, 231, 49, 249, 95, 1, 111, 231, 49, 249, 95, 1, 248, 222, 231, 
-    49, 249, 95, 232, 146, 222, 218, 231, 49, 249, 95, 232, 146, 236, 7, 234, 
-    121, 1, 61, 234, 121, 25, 5, 73, 234, 121, 25, 5, 70, 234, 121, 25, 5, 
-    149, 153, 234, 121, 25, 5, 75, 234, 121, 25, 5, 76, 234, 121, 25, 233, 
-    24, 78, 234, 121, 5, 52, 222, 235, 51, 234, 121, 5, 254, 76, 234, 121, 5, 
-    213, 147, 234, 121, 1, 176, 234, 121, 1, 234, 133, 234, 121, 1, 243, 136, 
-    234, 121, 1, 242, 250, 234, 121, 1, 251, 34, 234, 121, 1, 250, 158, 234, 
-    121, 1, 235, 142, 234, 121, 1, 227, 166, 234, 121, 1, 215, 157, 234, 121, 
-    1, 215, 145, 234, 121, 1, 248, 136, 234, 121, 1, 248, 120, 234, 121, 1, 
-    228, 111, 234, 121, 1, 217, 106, 234, 121, 1, 216, 209, 234, 121, 1, 248, 
-    222, 234, 121, 1, 248, 26, 234, 121, 1, 197, 234, 121, 1, 190, 234, 121, 
-    1, 225, 148, 234, 121, 1, 252, 192, 234, 121, 1, 252, 19, 234, 121, 1, 
-    185, 234, 121, 1, 191, 234, 121, 1, 205, 234, 121, 1, 233, 136, 234, 121, 
-    1, 214, 27, 234, 121, 1, 220, 103, 234, 121, 1, 218, 224, 234, 121, 1, 
-    206, 234, 121, 1, 210, 116, 234, 121, 1, 162, 234, 121, 1, 234, 47, 234, 
-    121, 1, 215, 125, 234, 121, 5, 252, 142, 48, 234, 121, 5, 250, 222, 234, 
-    121, 5, 59, 51, 234, 121, 213, 152, 234, 121, 21, 110, 234, 121, 21, 105, 
-    234, 121, 21, 158, 234, 121, 21, 161, 234, 121, 54, 216, 248, 234, 121, 
-    54, 215, 73, 234, 121, 54, 123, 240, 211, 234, 121, 54, 123, 216, 148, 
-    234, 121, 224, 142, 247, 121, 234, 121, 224, 142, 4, 250, 36, 234, 121, 
-    224, 142, 250, 36, 234, 121, 224, 142, 249, 138, 130, 234, 121, 224, 142, 
-    231, 181, 234, 121, 224, 142, 232, 116, 234, 121, 224, 142, 248, 179, 
-    234, 121, 224, 142, 52, 248, 179, 234, 121, 224, 142, 232, 208, 55, 219, 
-    29, 254, 39, 1, 241, 239, 55, 219, 29, 254, 39, 1, 233, 94, 55, 219, 29, 
-    254, 39, 1, 241, 196, 55, 219, 29, 254, 39, 1, 231, 66, 55, 219, 29, 254, 
-    39, 1, 224, 35, 55, 219, 29, 254, 39, 1, 212, 30, 55, 219, 29, 254, 39, 
-    1, 220, 21, 55, 219, 29, 254, 39, 1, 223, 68, 55, 219, 29, 254, 39, 1, 
-    252, 26, 55, 219, 29, 254, 39, 1, 217, 37, 55, 219, 29, 254, 39, 1, 221, 
-    227, 55, 219, 29, 254, 39, 1, 234, 226, 55, 219, 29, 254, 39, 1, 227, 
-    195, 55, 219, 29, 254, 39, 1, 234, 117, 55, 219, 29, 254, 39, 1, 222, 25, 
-    55, 219, 29, 254, 39, 1, 221, 250, 55, 219, 29, 254, 39, 1, 244, 155, 55, 
-    219, 29, 254, 39, 1, 254, 171, 55, 219, 29, 254, 39, 1, 253, 162, 55, 
-    219, 29, 254, 39, 1, 248, 23, 55, 219, 29, 254, 39, 1, 242, 202, 55, 219, 
-    29, 254, 39, 1, 248, 189, 55, 219, 29, 254, 39, 1, 242, 239, 55, 219, 29, 
-    254, 39, 1, 216, 227, 55, 219, 29, 254, 39, 1, 210, 96, 55, 219, 29, 254, 
-    39, 1, 248, 20, 55, 219, 29, 254, 39, 1, 210, 232, 55, 219, 29, 254, 39, 
-    1, 216, 198, 55, 219, 29, 254, 39, 1, 216, 179, 55, 219, 29, 254, 39, 54, 
-    110, 55, 219, 29, 254, 39, 54, 244, 115, 55, 219, 29, 254, 39, 132, 235, 
-    239, 253, 173, 1, 61, 253, 173, 1, 255, 74, 253, 173, 1, 254, 74, 253, 
-    173, 1, 255, 33, 253, 173, 1, 254, 124, 253, 173, 1, 255, 34, 253, 173, 
-    1, 254, 244, 253, 173, 1, 254, 240, 253, 173, 1, 75, 253, 173, 1, 245, 
-    210, 253, 173, 1, 76, 253, 173, 1, 226, 184, 253, 173, 1, 73, 253, 173, 
-    1, 236, 34, 253, 173, 1, 70, 253, 173, 1, 214, 118, 253, 173, 1, 234, 
-    183, 253, 173, 1, 211, 162, 253, 173, 1, 211, 128, 253, 173, 1, 211, 137, 
-    253, 173, 1, 243, 63, 253, 173, 1, 243, 25, 253, 173, 1, 242, 237, 253, 
-    173, 1, 250, 191, 253, 173, 1, 235, 127, 253, 173, 1, 217, 23, 253, 173, 
-    1, 216, 196, 253, 173, 1, 248, 91, 253, 173, 1, 248, 18, 253, 173, 1, 
-    215, 152, 253, 173, 1, 225, 222, 253, 173, 1, 244, 155, 253, 173, 1, 252, 
-    76, 253, 173, 1, 252, 15, 253, 173, 1, 229, 65, 253, 173, 1, 228, 240, 
-    253, 173, 1, 228, 241, 253, 173, 1, 229, 108, 253, 173, 1, 227, 157, 253, 
-    173, 1, 228, 106, 253, 173, 1, 231, 92, 253, 173, 1, 241, 117, 253, 173, 
-    1, 210, 166, 253, 173, 1, 211, 47, 253, 173, 1, 213, 255, 253, 173, 1, 
-    223, 129, 253, 173, 1, 233, 59, 253, 173, 1, 221, 182, 253, 173, 1, 210, 
-    94, 253, 173, 1, 220, 64, 253, 173, 1, 210, 74, 253, 173, 1, 219, 199, 
-    253, 173, 1, 218, 194, 253, 173, 1, 241, 239, 253, 173, 255, 22, 78, 216, 
-    80, 113, 170, 117, 123, 59, 224, 141, 4, 113, 170, 117, 123, 59, 224, 
-    141, 233, 86, 113, 170, 117, 123, 59, 224, 141, 233, 86, 123, 59, 117, 
-    113, 170, 224, 141, 233, 86, 113, 222, 233, 117, 123, 222, 235, 224, 141, 
-    233, 86, 123, 222, 235, 117, 113, 222, 233, 224, 141, 235, 219, 225, 255, 
-    1, 254, 169, 235, 219, 225, 255, 1, 252, 26, 235, 219, 225, 255, 1, 242, 
-    202, 235, 219, 225, 255, 1, 248, 189, 235, 219, 225, 255, 1, 241, 239, 
-    235, 219, 225, 255, 1, 212, 30, 235, 219, 225, 255, 1, 210, 97, 235, 219, 
-    225, 255, 1, 241, 196, 235, 219, 225, 255, 1, 216, 227, 235, 219, 225, 
-    255, 1, 210, 232, 235, 219, 225, 255, 1, 234, 226, 235, 219, 225, 255, 1, 
-    233, 94, 235, 219, 225, 255, 1, 231, 66, 235, 219, 225, 255, 1, 227, 195, 
-    235, 219, 225, 255, 1, 221, 250, 235, 219, 225, 255, 1, 253, 163, 235, 
-    219, 225, 255, 1, 225, 222, 235, 219, 225, 255, 1, 222, 25, 235, 219, 
-    225, 255, 1, 224, 35, 235, 219, 225, 255, 1, 223, 68, 235, 219, 225, 255, 
-    1, 220, 21, 235, 219, 225, 255, 1, 217, 37, 235, 219, 225, 255, 54, 110, 
-    235, 219, 225, 255, 54, 105, 235, 219, 225, 255, 54, 158, 235, 219, 225, 
-    255, 54, 161, 235, 219, 225, 255, 54, 216, 248, 235, 219, 225, 255, 54, 
-    215, 73, 235, 219, 225, 255, 54, 123, 240, 211, 235, 219, 225, 255, 54, 
-    123, 216, 148, 235, 219, 226, 73, 1, 254, 169, 235, 219, 226, 73, 1, 252, 
-    26, 235, 219, 226, 73, 1, 242, 202, 235, 219, 226, 73, 1, 248, 189, 235, 
-    219, 226, 73, 1, 241, 239, 235, 219, 226, 73, 1, 212, 29, 235, 219, 226, 
-    73, 1, 210, 97, 235, 219, 226, 73, 1, 241, 196, 235, 219, 226, 73, 1, 
-    216, 227, 235, 219, 226, 73, 1, 210, 232, 235, 219, 226, 73, 1, 234, 226, 
-    235, 219, 226, 73, 1, 233, 94, 235, 219, 226, 73, 1, 231, 65, 235, 219, 
-    226, 73, 1, 227, 195, 235, 219, 226, 73, 1, 221, 250, 235, 219, 226, 73, 
-    1, 225, 222, 235, 219, 226, 73, 1, 222, 25, 235, 219, 226, 73, 1, 220, 
-    21, 235, 219, 226, 73, 1, 217, 37, 235, 219, 226, 73, 54, 110, 235, 219, 
-    226, 73, 54, 105, 235, 219, 226, 73, 54, 158, 235, 219, 226, 73, 54, 161, 
-    235, 219, 226, 73, 54, 216, 248, 235, 219, 226, 73, 54, 215, 73, 235, 
-    219, 226, 73, 54, 123, 240, 211, 235, 219, 226, 73, 54, 123, 216, 148, 
-    55, 201, 1, 226, 150, 61, 55, 201, 1, 211, 37, 61, 55, 201, 1, 211, 37, 
-    254, 244, 55, 201, 1, 226, 150, 73, 55, 201, 1, 211, 37, 73, 55, 201, 1, 
-    211, 37, 75, 55, 201, 1, 226, 150, 76, 55, 201, 1, 226, 150, 226, 235, 
-    55, 201, 1, 211, 37, 226, 235, 55, 201, 1, 226, 150, 255, 26, 55, 201, 1, 
-    211, 37, 255, 26, 55, 201, 1, 226, 150, 254, 243, 55, 201, 1, 211, 37, 
-    254, 243, 55, 201, 1, 226, 150, 254, 217, 55, 201, 1, 211, 37, 254, 217, 
-    55, 201, 1, 226, 150, 254, 238, 55, 201, 1, 211, 37, 254, 238, 55, 201, 
-    1, 226, 150, 255, 0, 55, 201, 1, 211, 37, 255, 0, 55, 201, 1, 226, 150, 
-    254, 242, 55, 201, 1, 226, 150, 245, 13, 55, 201, 1, 211, 37, 245, 13, 
-    55, 201, 1, 226, 150, 253, 168, 55, 201, 1, 211, 37, 253, 168, 55, 201, 
-    1, 226, 150, 254, 225, 55, 201, 1, 211, 37, 254, 225, 55, 201, 1, 226, 
-    150, 254, 236, 55, 201, 1, 211, 37, 254, 236, 55, 201, 1, 226, 150, 226, 
-    234, 55, 201, 1, 211, 37, 226, 234, 55, 201, 1, 226, 150, 254, 179, 55, 
-    201, 1, 211, 37, 254, 179, 55, 201, 1, 226, 150, 254, 235, 55, 201, 1, 
-    226, 150, 245, 162, 55, 201, 1, 226, 150, 245, 160, 55, 201, 1, 226, 150, 
-    254, 124, 55, 201, 1, 226, 150, 254, 233, 55, 201, 1, 211, 37, 254, 233, 
-    55, 201, 1, 226, 150, 245, 132, 55, 201, 1, 211, 37, 245, 132, 55, 201, 
-    1, 226, 150, 245, 148, 55, 201, 1, 211, 37, 245, 148, 55, 201, 1, 226, 
-    150, 245, 119, 55, 201, 1, 211, 37, 245, 119, 55, 201, 1, 211, 37, 254, 
-    116, 55, 201, 1, 226, 150, 245, 139, 55, 201, 1, 211, 37, 254, 232, 55, 
-    201, 1, 226, 150, 245, 109, 55, 201, 1, 226, 150, 226, 176, 55, 201, 1, 
-    226, 150, 240, 114, 55, 201, 1, 226, 150, 245, 216, 55, 201, 1, 211, 37, 
-    245, 216, 55, 201, 1, 226, 150, 254, 46, 55, 201, 1, 211, 37, 254, 46, 
-    55, 201, 1, 226, 150, 235, 182, 55, 201, 1, 211, 37, 235, 182, 55, 201, 
-    1, 226, 150, 226, 160, 55, 201, 1, 211, 37, 226, 160, 55, 201, 1, 226, 
-    150, 254, 42, 55, 201, 1, 211, 37, 254, 42, 55, 201, 1, 226, 150, 254, 
-    231, 55, 201, 1, 226, 150, 253, 238, 55, 201, 1, 226, 150, 254, 229, 55, 
-    201, 1, 226, 150, 253, 232, 55, 201, 1, 211, 37, 253, 232, 55, 201, 1, 
-    226, 150, 245, 76, 55, 201, 1, 211, 37, 245, 76, 55, 201, 1, 226, 150, 
-    253, 207, 55, 201, 1, 211, 37, 253, 207, 55, 201, 1, 226, 150, 254, 226, 
-    55, 201, 1, 211, 37, 254, 226, 55, 201, 1, 226, 150, 226, 141, 55, 201, 
-    1, 226, 150, 252, 126, 222, 128, 21, 110, 222, 128, 21, 105, 222, 128, 
-    21, 158, 222, 128, 21, 161, 222, 128, 21, 189, 222, 128, 21, 194, 222, 
-    128, 21, 198, 222, 128, 21, 195, 222, 128, 21, 200, 222, 128, 54, 216, 
-    248, 222, 128, 54, 215, 73, 222, 128, 54, 216, 163, 222, 128, 54, 244, 
-    16, 222, 128, 54, 244, 115, 222, 128, 54, 219, 112, 222, 128, 54, 220, 
-    117, 222, 128, 54, 245, 185, 222, 128, 54, 228, 196, 222, 128, 54, 123, 
-    240, 211, 222, 128, 54, 113, 240, 211, 222, 128, 54, 134, 240, 211, 222, 
-    128, 54, 244, 12, 240, 211, 222, 128, 54, 244, 82, 240, 211, 222, 128, 
-    54, 219, 126, 240, 211, 222, 128, 54, 220, 123, 240, 211, 222, 128, 54, 
-    245, 194, 240, 211, 222, 128, 54, 228, 201, 240, 211, 222, 128, 244, 3, 
-    123, 242, 28, 222, 128, 244, 3, 123, 224, 22, 222, 128, 244, 3, 123, 216, 
-    169, 222, 128, 244, 3, 113, 216, 167, 118, 5, 251, 0, 118, 5, 254, 76, 
-    118, 5, 213, 147, 118, 5, 235, 103, 118, 5, 214, 161, 118, 1, 61, 118, 1, 
-    255, 74, 118, 1, 73, 118, 1, 236, 34, 118, 1, 70, 118, 1, 214, 118, 118, 
-    1, 149, 153, 118, 1, 149, 222, 181, 118, 1, 149, 156, 118, 1, 149, 232, 
-    186, 118, 1, 75, 118, 1, 254, 202, 118, 1, 76, 118, 1, 253, 193, 118, 1, 
-    176, 118, 1, 234, 133, 118, 1, 243, 136, 118, 1, 242, 250, 118, 1, 229, 
-    78, 118, 1, 251, 34, 118, 1, 250, 158, 118, 1, 235, 142, 118, 1, 235, 
-    115, 118, 1, 227, 166, 118, 1, 215, 157, 118, 1, 215, 145, 118, 1, 248, 
-    136, 118, 1, 248, 120, 118, 1, 228, 111, 118, 1, 217, 106, 118, 1, 216, 
-    209, 118, 1, 248, 222, 118, 1, 248, 26, 118, 1, 197, 118, 1, 190, 118, 1, 
-    225, 148, 118, 1, 252, 192, 118, 1, 252, 19, 118, 1, 185, 118, 1, 191, 
-    118, 1, 205, 118, 1, 233, 136, 118, 1, 214, 27, 118, 1, 220, 103, 118, 1, 
-    218, 224, 118, 1, 206, 118, 1, 162, 118, 1, 232, 185, 118, 1, 55, 36, 
-    232, 176, 118, 1, 55, 36, 222, 180, 118, 1, 55, 36, 228, 93, 118, 25, 5, 
-    255, 74, 118, 25, 5, 252, 16, 255, 74, 118, 25, 5, 73, 118, 25, 5, 236, 
-    34, 118, 25, 5, 70, 118, 25, 5, 214, 118, 118, 25, 5, 149, 153, 118, 25, 
-    5, 149, 222, 181, 118, 25, 5, 149, 156, 118, 25, 5, 149, 232, 186, 118, 
-    25, 5, 75, 118, 25, 5, 254, 202, 118, 25, 5, 76, 118, 25, 5, 253, 193, 
-    118, 213, 152, 118, 248, 179, 118, 52, 248, 179, 118, 224, 142, 247, 121, 
-    118, 224, 142, 52, 247, 121, 118, 224, 142, 232, 214, 118, 224, 142, 249, 
-    138, 130, 118, 224, 142, 232, 116, 118, 54, 110, 118, 54, 105, 118, 54, 
-    158, 118, 54, 161, 118, 54, 189, 118, 54, 194, 118, 54, 198, 118, 54, 
-    195, 118, 54, 200, 118, 54, 216, 248, 118, 54, 215, 73, 118, 54, 216, 
-    163, 118, 54, 244, 16, 118, 54, 244, 115, 118, 54, 219, 112, 118, 54, 
-    220, 117, 118, 54, 245, 185, 118, 54, 228, 196, 118, 54, 123, 240, 211, 
-    118, 54, 123, 216, 148, 118, 21, 210, 86, 118, 21, 110, 118, 21, 105, 
-    118, 21, 158, 118, 21, 161, 118, 21, 189, 118, 21, 194, 118, 21, 198, 
-    118, 21, 195, 118, 21, 200, 234, 245, 5, 251, 0, 234, 245, 5, 254, 76, 
-    234, 245, 5, 213, 147, 234, 245, 1, 61, 234, 245, 1, 255, 74, 234, 245, 
-    1, 73, 234, 245, 1, 236, 34, 234, 245, 1, 70, 234, 245, 1, 214, 118, 234, 
-    245, 1, 75, 234, 245, 1, 254, 202, 234, 245, 1, 76, 234, 245, 1, 253, 
-    193, 234, 245, 1, 176, 234, 245, 1, 234, 133, 234, 245, 1, 243, 136, 234, 
-    245, 1, 242, 250, 234, 245, 1, 229, 78, 234, 245, 1, 251, 34, 234, 245, 
-    1, 250, 158, 234, 245, 1, 235, 142, 234, 245, 1, 235, 115, 234, 245, 1, 
-    227, 166, 234, 245, 1, 215, 157, 234, 245, 1, 215, 145, 234, 245, 1, 248, 
-    136, 234, 245, 1, 248, 125, 234, 245, 1, 248, 120, 234, 245, 1, 223, 40, 
-    234, 245, 1, 228, 111, 234, 245, 1, 217, 106, 234, 245, 1, 216, 209, 234, 
-    245, 1, 248, 222, 234, 245, 1, 248, 26, 234, 245, 1, 197, 234, 245, 1, 
-    190, 234, 245, 1, 225, 148, 234, 245, 1, 252, 192, 234, 245, 1, 252, 19, 
-    234, 245, 1, 185, 234, 245, 1, 191, 234, 245, 1, 205, 234, 245, 1, 233, 
-    136, 234, 245, 1, 214, 27, 234, 245, 1, 220, 103, 234, 245, 1, 218, 224, 
-    234, 245, 1, 206, 234, 245, 1, 162, 234, 245, 25, 5, 255, 74, 234, 245, 
-    25, 5, 73, 234, 245, 25, 5, 236, 34, 234, 245, 25, 5, 70, 234, 245, 25, 
-    5, 214, 118, 234, 245, 25, 5, 75, 234, 245, 25, 5, 254, 202, 234, 245, 
-    25, 5, 76, 234, 245, 25, 5, 253, 193, 234, 245, 5, 213, 152, 234, 245, 5, 
-    227, 206, 234, 245, 255, 22, 50, 234, 245, 245, 122, 50, 234, 245, 54, 
-    50, 234, 245, 221, 174, 78, 234, 245, 52, 221, 174, 78, 234, 245, 248, 
-    179, 234, 245, 52, 248, 179, 219, 37, 219, 45, 1, 222, 19, 219, 37, 219, 
-    45, 1, 217, 81, 219, 37, 219, 45, 1, 252, 169, 219, 37, 219, 45, 1, 251, 
-    24, 219, 37, 219, 45, 1, 248, 204, 219, 37, 219, 45, 1, 243, 121, 219, 
-    37, 219, 45, 1, 231, 211, 219, 37, 219, 45, 1, 229, 75, 219, 37, 219, 45, 
-    1, 233, 113, 219, 37, 219, 45, 1, 229, 214, 219, 37, 219, 45, 1, 214, 24, 
-    219, 37, 219, 45, 1, 226, 74, 219, 37, 219, 45, 1, 211, 84, 219, 37, 219, 
-    45, 1, 223, 169, 219, 37, 219, 45, 1, 242, 38, 219, 37, 219, 45, 1, 234, 
-    249, 219, 37, 219, 45, 1, 235, 137, 219, 37, 219, 45, 1, 227, 163, 219, 
-    37, 219, 45, 1, 254, 210, 219, 37, 219, 45, 1, 245, 208, 219, 37, 219, 
-    45, 1, 236, 35, 219, 37, 219, 45, 1, 214, 208, 219, 37, 219, 45, 1, 226, 
-    223, 219, 37, 219, 45, 1, 245, 198, 219, 37, 219, 45, 1, 231, 224, 219, 
-    37, 219, 45, 21, 210, 86, 219, 37, 219, 45, 21, 110, 219, 37, 219, 45, 
-    21, 105, 219, 37, 219, 45, 21, 158, 219, 37, 219, 45, 21, 161, 219, 37, 
-    219, 45, 21, 189, 219, 37, 219, 45, 21, 194, 219, 37, 219, 45, 21, 198, 
-    219, 37, 219, 45, 21, 195, 219, 37, 219, 45, 21, 200, 250, 152, 5, 251, 
-    0, 250, 152, 5, 254, 76, 250, 152, 5, 213, 147, 250, 152, 1, 255, 74, 
-    250, 152, 1, 73, 250, 152, 1, 70, 250, 152, 1, 75, 250, 152, 1, 235, 11, 
-    250, 152, 1, 234, 132, 250, 152, 1, 243, 133, 250, 152, 1, 242, 249, 250, 
-    152, 1, 229, 77, 250, 152, 1, 251, 33, 250, 152, 1, 250, 157, 250, 152, 
-    1, 235, 141, 250, 152, 1, 235, 114, 250, 152, 1, 227, 165, 250, 152, 1, 
-    215, 156, 250, 152, 1, 215, 144, 250, 152, 1, 248, 135, 250, 152, 1, 248, 
-    119, 250, 152, 1, 228, 110, 250, 152, 1, 217, 102, 250, 152, 1, 216, 208, 
-    250, 152, 1, 248, 221, 250, 152, 1, 248, 25, 250, 152, 1, 229, 226, 250, 
-    152, 1, 226, 90, 250, 152, 1, 225, 147, 250, 152, 1, 252, 190, 250, 152, 
-    1, 252, 18, 250, 152, 1, 231, 238, 250, 152, 1, 210, 167, 250, 152, 1, 
-    211, 103, 250, 152, 1, 223, 185, 250, 152, 1, 233, 135, 250, 152, 1, 212, 
-    64, 250, 152, 1, 222, 32, 250, 152, 1, 242, 47, 250, 152, 25, 5, 61, 250, 
-    152, 25, 5, 73, 250, 152, 25, 5, 236, 34, 250, 152, 25, 5, 70, 250, 152, 
-    25, 5, 214, 118, 250, 152, 25, 5, 75, 250, 152, 25, 5, 254, 202, 250, 
-    152, 25, 5, 76, 250, 152, 25, 5, 253, 193, 250, 152, 25, 5, 226, 220, 
-    250, 152, 144, 78, 250, 152, 253, 194, 78, 250, 152, 213, 152, 250, 152, 
-    231, 236, 250, 152, 21, 210, 86, 250, 152, 21, 110, 250, 152, 21, 105, 
-    250, 152, 21, 158, 250, 152, 21, 161, 250, 152, 21, 189, 250, 152, 21, 
-    194, 250, 152, 21, 198, 250, 152, 21, 195, 250, 152, 21, 200, 250, 152, 
-    221, 174, 78, 250, 152, 248, 179, 250, 152, 52, 248, 179, 250, 152, 224, 
-    14, 78, 174, 5, 251, 0, 174, 5, 254, 76, 174, 5, 213, 147, 174, 1, 61, 
-    174, 1, 255, 74, 174, 1, 73, 174, 1, 236, 34, 174, 1, 70, 174, 1, 214, 
-    118, 174, 1, 149, 153, 174, 1, 149, 222, 181, 174, 1, 149, 156, 174, 1, 
-    149, 232, 186, 174, 1, 75, 174, 1, 254, 202, 174, 1, 76, 174, 1, 253, 
-    193, 174, 1, 176, 174, 1, 234, 133, 174, 1, 243, 136, 174, 1, 242, 250, 
-    174, 1, 229, 78, 174, 1, 251, 34, 174, 1, 250, 158, 174, 1, 235, 142, 
-    174, 1, 235, 115, 174, 1, 227, 166, 174, 1, 215, 157, 174, 1, 215, 145, 
-    174, 1, 248, 136, 174, 1, 248, 120, 174, 1, 228, 111, 174, 1, 217, 106, 
-    174, 1, 216, 209, 174, 1, 248, 222, 174, 1, 248, 26, 174, 1, 197, 174, 1, 
-    190, 174, 1, 225, 148, 174, 1, 252, 192, 174, 1, 252, 19, 174, 1, 185, 
-    174, 1, 191, 174, 1, 205, 174, 1, 233, 136, 174, 1, 232, 185, 174, 1, 
-    214, 27, 174, 1, 220, 103, 174, 1, 218, 224, 174, 1, 206, 174, 1, 162, 
-    174, 25, 5, 255, 74, 174, 25, 5, 73, 174, 25, 5, 236, 34, 174, 25, 5, 70, 
-    174, 25, 5, 214, 118, 174, 25, 5, 149, 153, 174, 25, 5, 149, 222, 181, 
-    174, 25, 5, 149, 156, 174, 25, 5, 149, 232, 186, 174, 25, 5, 75, 174, 25, 
-    5, 254, 202, 174, 25, 5, 76, 174, 25, 5, 253, 193, 174, 5, 213, 152, 174, 
-    5, 253, 176, 174, 5, 235, 103, 174, 5, 214, 161, 174, 226, 205, 174, 248, 
-    179, 174, 52, 248, 179, 174, 255, 22, 50, 174, 220, 138, 174, 21, 210, 
-    86, 174, 21, 110, 174, 21, 105, 174, 21, 158, 174, 21, 161, 174, 21, 189, 
-    174, 21, 194, 174, 21, 198, 174, 21, 195, 174, 21, 200, 217, 70, 1, 61, 
-    217, 70, 1, 255, 74, 217, 70, 1, 73, 217, 70, 1, 236, 34, 217, 70, 1, 70, 
-    217, 70, 1, 214, 118, 217, 70, 1, 75, 217, 70, 1, 254, 202, 217, 70, 1, 
-    76, 217, 70, 1, 253, 193, 217, 70, 1, 176, 217, 70, 1, 234, 133, 217, 70, 
-    1, 243, 136, 217, 70, 1, 242, 250, 217, 70, 1, 229, 78, 217, 70, 1, 251, 
-    34, 217, 70, 1, 250, 158, 217, 70, 1, 235, 142, 217, 70, 1, 235, 115, 
-    217, 70, 1, 227, 166, 217, 70, 1, 215, 157, 217, 70, 1, 215, 145, 217, 
-    70, 1, 248, 136, 217, 70, 1, 248, 120, 217, 70, 1, 228, 111, 217, 70, 1, 
-    217, 106, 217, 70, 1, 216, 209, 217, 70, 1, 248, 222, 217, 70, 1, 248, 
-    26, 217, 70, 1, 197, 217, 70, 1, 190, 217, 70, 1, 225, 148, 217, 70, 1, 
-    252, 192, 217, 70, 1, 252, 19, 217, 70, 1, 185, 217, 70, 1, 191, 217, 70, 
-    1, 205, 217, 70, 1, 233, 136, 217, 70, 1, 214, 27, 217, 70, 1, 220, 103, 
-    217, 70, 1, 206, 217, 70, 1, 162, 217, 70, 1, 222, 180, 217, 70, 5, 254, 
-    76, 217, 70, 5, 213, 147, 217, 70, 25, 5, 255, 74, 217, 70, 25, 5, 73, 
-    217, 70, 25, 5, 236, 34, 217, 70, 25, 5, 70, 217, 70, 25, 5, 214, 118, 
-    217, 70, 25, 5, 75, 217, 70, 25, 5, 254, 202, 217, 70, 25, 5, 76, 217, 
-    70, 25, 5, 253, 193, 217, 70, 5, 213, 152, 217, 70, 5, 227, 206, 217, 70, 
-    21, 210, 86, 217, 70, 21, 110, 217, 70, 21, 105, 217, 70, 21, 158, 217, 
-    70, 21, 161, 217, 70, 21, 189, 217, 70, 21, 194, 217, 70, 21, 198, 217, 
-    70, 21, 195, 217, 70, 21, 200, 15, 5, 61, 15, 5, 115, 30, 61, 15, 5, 115, 
-    30, 252, 177, 15, 5, 115, 30, 243, 106, 216, 240, 15, 5, 115, 30, 162, 
-    15, 5, 115, 30, 236, 36, 15, 5, 115, 30, 233, 117, 242, 95, 15, 5, 115, 
-    30, 230, 62, 15, 5, 115, 30, 222, 22, 15, 5, 255, 76, 15, 5, 255, 26, 15, 
-    5, 255, 27, 30, 253, 230, 15, 5, 255, 27, 30, 246, 68, 242, 95, 15, 5, 
-    255, 27, 30, 243, 119, 15, 5, 255, 27, 30, 243, 106, 216, 240, 15, 5, 
-    255, 27, 30, 162, 15, 5, 255, 27, 30, 236, 37, 242, 95, 15, 5, 255, 27, 
-    30, 236, 10, 15, 5, 255, 27, 30, 233, 118, 15, 5, 255, 27, 30, 220, 49, 
-    15, 5, 255, 27, 30, 104, 96, 104, 96, 70, 15, 5, 255, 27, 242, 95, 15, 5, 
-    255, 24, 15, 5, 255, 25, 30, 252, 161, 15, 5, 255, 25, 30, 243, 106, 216, 
-    240, 15, 5, 255, 25, 30, 231, 93, 96, 245, 151, 15, 5, 255, 25, 30, 220, 
-    101, 15, 5, 255, 25, 30, 217, 73, 15, 5, 255, 0, 15, 5, 254, 187, 15, 5, 
-    254, 188, 30, 245, 88, 15, 5, 254, 188, 30, 220, 11, 96, 242, 191, 15, 5, 
-    254, 179, 15, 5, 254, 180, 30, 254, 179, 15, 5, 254, 180, 30, 247, 217, 
-    15, 5, 254, 180, 30, 242, 191, 15, 5, 254, 180, 30, 162, 15, 5, 254, 180, 
-    30, 235, 0, 15, 5, 254, 180, 30, 234, 93, 15, 5, 254, 180, 30, 220, 64, 
-    15, 5, 254, 180, 30, 214, 126, 15, 5, 254, 176, 15, 5, 254, 169, 15, 5, 
-    254, 133, 15, 5, 254, 134, 30, 220, 64, 15, 5, 254, 124, 15, 5, 254, 125, 
-    117, 254, 124, 15, 5, 254, 125, 134, 216, 86, 15, 5, 254, 125, 96, 229, 
-    218, 226, 165, 254, 125, 96, 229, 217, 15, 5, 254, 125, 96, 229, 218, 
-    218, 234, 15, 5, 254, 95, 15, 5, 254, 68, 15, 5, 254, 36, 15, 5, 254, 37, 
-    30, 233, 197, 15, 5, 254, 9, 15, 5, 253, 237, 15, 5, 253, 232, 15, 5, 
-    253, 233, 210, 40, 216, 240, 15, 5, 253, 233, 235, 4, 216, 240, 15, 5, 
-    253, 233, 117, 253, 233, 215, 115, 117, 215, 115, 215, 115, 117, 215, 
-    115, 226, 22, 15, 5, 253, 233, 117, 253, 233, 117, 253, 232, 15, 5, 253, 
-    233, 117, 253, 233, 117, 253, 233, 249, 126, 253, 233, 117, 253, 233, 
-    117, 253, 232, 15, 5, 253, 230, 15, 5, 253, 227, 15, 5, 252, 192, 15, 5, 
-    252, 177, 15, 5, 252, 172, 15, 5, 252, 168, 15, 5, 252, 162, 15, 5, 252, 
-    163, 117, 252, 162, 15, 5, 252, 161, 15, 5, 130, 15, 5, 252, 141, 15, 5, 
-    252, 7, 15, 5, 252, 8, 30, 61, 15, 5, 252, 8, 30, 243, 97, 15, 5, 252, 8, 
-    30, 236, 37, 242, 95, 15, 5, 251, 126, 15, 5, 251, 127, 117, 251, 127, 
-    255, 26, 15, 5, 251, 127, 117, 251, 127, 214, 190, 15, 5, 251, 127, 249, 
-    126, 251, 126, 15, 5, 251, 110, 15, 5, 251, 111, 117, 251, 110, 15, 5, 
-    251, 99, 15, 5, 251, 98, 15, 5, 248, 222, 15, 5, 248, 213, 15, 5, 248, 
-    214, 234, 67, 30, 115, 96, 231, 148, 15, 5, 248, 214, 234, 67, 30, 254, 
-    133, 15, 5, 248, 214, 234, 67, 30, 252, 161, 15, 5, 248, 214, 234, 67, 
-    30, 252, 7, 15, 5, 248, 214, 234, 67, 30, 243, 136, 15, 5, 248, 214, 234, 
-    67, 30, 243, 137, 96, 231, 148, 15, 5, 248, 214, 234, 67, 30, 242, 215, 
-    15, 5, 248, 214, 234, 67, 30, 242, 198, 15, 5, 248, 214, 234, 67, 30, 
-    242, 104, 15, 5, 248, 214, 234, 67, 30, 162, 15, 5, 248, 214, 234, 67, 
-    30, 235, 180, 15, 5, 248, 214, 234, 67, 30, 235, 181, 96, 232, 99, 15, 5, 
-    248, 214, 234, 67, 30, 234, 243, 15, 5, 248, 214, 234, 67, 30, 233, 136, 
-    15, 5, 248, 214, 234, 67, 30, 232, 99, 15, 5, 248, 214, 234, 67, 30, 232, 
-    100, 96, 231, 147, 15, 5, 248, 214, 234, 67, 30, 232, 85, 15, 5, 248, 
-    214, 234, 67, 30, 229, 108, 15, 5, 248, 214, 234, 67, 30, 226, 23, 96, 
-    226, 22, 15, 5, 248, 214, 234, 67, 30, 219, 192, 15, 5, 248, 214, 234, 
-    67, 30, 217, 73, 15, 5, 248, 214, 234, 67, 30, 214, 231, 96, 242, 198, 
-    15, 5, 248, 214, 234, 67, 30, 214, 126, 15, 5, 248, 188, 15, 5, 248, 167, 
-    15, 5, 248, 166, 15, 5, 248, 165, 15, 5, 248, 4, 15, 5, 247, 243, 15, 5, 
-    247, 218, 15, 5, 247, 219, 30, 220, 64, 15, 5, 247, 217, 15, 5, 247, 207, 
-    15, 5, 247, 208, 234, 209, 104, 242, 96, 247, 188, 15, 5, 247, 188, 15, 
-    5, 246, 79, 15, 5, 246, 80, 117, 246, 79, 15, 5, 246, 80, 242, 95, 15, 5, 
-    246, 80, 220, 46, 15, 5, 246, 77, 15, 5, 246, 78, 30, 245, 73, 15, 5, 
-    246, 76, 15, 5, 246, 75, 15, 5, 246, 74, 15, 5, 246, 73, 15, 5, 246, 69, 
-    15, 5, 246, 67, 15, 5, 246, 68, 242, 95, 15, 5, 246, 68, 242, 96, 242, 
-    95, 15, 5, 246, 66, 15, 5, 246, 59, 15, 5, 75, 15, 5, 160, 30, 226, 22, 
-    15, 5, 160, 117, 160, 227, 196, 117, 227, 195, 15, 5, 245, 235, 15, 5, 
-    245, 236, 30, 115, 96, 242, 50, 96, 248, 222, 15, 5, 245, 236, 30, 243, 
-    97, 15, 5, 245, 236, 30, 230, 231, 15, 5, 245, 236, 30, 222, 9, 15, 5, 
-    245, 236, 30, 220, 64, 15, 5, 245, 236, 30, 70, 15, 5, 245, 212, 15, 5, 
-    245, 201, 15, 5, 245, 175, 15, 5, 245, 151, 15, 5, 245, 152, 30, 243, 
-    105, 15, 5, 245, 152, 30, 243, 106, 216, 240, 15, 5, 245, 152, 30, 231, 
-    92, 15, 5, 245, 152, 249, 126, 245, 151, 15, 5, 245, 152, 226, 165, 245, 
-    151, 15, 5, 245, 152, 218, 234, 15, 5, 245, 90, 15, 5, 245, 88, 15, 5, 
-    245, 73, 15, 5, 245, 11, 15, 5, 245, 12, 30, 61, 15, 5, 245, 12, 30, 115, 
-    96, 233, 105, 15, 5, 245, 12, 30, 115, 96, 233, 106, 30, 233, 105, 15, 5, 
-    245, 12, 30, 254, 124, 15, 5, 245, 12, 30, 252, 177, 15, 5, 245, 12, 30, 
-    246, 68, 242, 95, 15, 5, 245, 12, 30, 246, 68, 242, 96, 242, 95, 15, 5, 
-    245, 12, 30, 162, 15, 5, 245, 12, 30, 242, 50, 242, 95, 15, 5, 245, 12, 
-    30, 236, 37, 242, 95, 15, 5, 245, 12, 30, 234, 208, 15, 5, 245, 12, 30, 
-    234, 209, 218, 234, 15, 5, 245, 12, 30, 233, 216, 15, 5, 245, 12, 30, 
-    233, 136, 15, 5, 245, 12, 30, 233, 106, 30, 233, 105, 15, 5, 245, 12, 30, 
-    232, 242, 15, 5, 245, 12, 30, 232, 99, 15, 5, 245, 12, 30, 214, 230, 15, 
-    5, 245, 12, 30, 214, 219, 15, 5, 243, 136, 15, 5, 243, 137, 242, 95, 15, 
-    5, 243, 134, 15, 5, 243, 135, 30, 115, 96, 248, 223, 96, 162, 15, 5, 243, 
-    135, 30, 115, 96, 162, 15, 5, 243, 135, 30, 115, 96, 236, 36, 15, 5, 243, 
-    135, 30, 255, 25, 216, 241, 96, 217, 94, 15, 5, 243, 135, 30, 254, 124, 
-    15, 5, 243, 135, 30, 253, 232, 15, 5, 243, 135, 30, 253, 231, 96, 243, 
-    119, 15, 5, 243, 135, 30, 252, 177, 15, 5, 243, 135, 30, 252, 142, 96, 
-    205, 15, 5, 243, 135, 30, 251, 99, 15, 5, 243, 135, 30, 251, 100, 96, 
-    205, 15, 5, 243, 135, 30, 248, 222, 15, 5, 243, 135, 30, 248, 4, 15, 5, 
-    243, 135, 30, 247, 219, 30, 220, 64, 15, 5, 243, 135, 30, 246, 77, 15, 5, 
-    243, 135, 30, 245, 175, 15, 5, 243, 135, 30, 245, 176, 96, 233, 136, 15, 
-    5, 243, 135, 30, 245, 151, 15, 5, 243, 135, 30, 245, 152, 30, 243, 106, 
-    216, 240, 15, 5, 243, 135, 30, 243, 106, 216, 240, 15, 5, 243, 135, 30, 
-    243, 97, 15, 5, 243, 135, 30, 242, 215, 15, 5, 243, 135, 30, 242, 213, 
-    15, 5, 243, 135, 30, 242, 214, 96, 61, 15, 5, 243, 135, 30, 242, 199, 96, 
-    218, 84, 15, 5, 243, 135, 30, 242, 50, 96, 232, 100, 96, 245, 73, 15, 5, 
-    243, 135, 30, 242, 31, 15, 5, 243, 135, 30, 242, 32, 96, 233, 136, 15, 5, 
-    243, 135, 30, 241, 182, 96, 232, 242, 15, 5, 243, 135, 30, 240, 219, 15, 
-    5, 243, 135, 30, 236, 37, 242, 95, 15, 5, 243, 135, 30, 235, 167, 96, 
-    240, 224, 96, 253, 232, 15, 5, 243, 135, 30, 234, 243, 15, 5, 243, 135, 
-    30, 234, 208, 15, 5, 243, 135, 30, 234, 90, 15, 5, 243, 135, 30, 234, 91, 
-    96, 233, 105, 15, 5, 243, 135, 30, 233, 217, 96, 254, 124, 15, 5, 243, 
-    135, 30, 233, 136, 15, 5, 243, 135, 30, 231, 93, 96, 245, 151, 15, 5, 
-    243, 135, 30, 230, 231, 15, 5, 243, 135, 30, 227, 195, 15, 5, 243, 135, 
-    30, 227, 196, 117, 227, 195, 15, 5, 243, 135, 30, 190, 15, 5, 243, 135, 
-    30, 222, 9, 15, 5, 243, 135, 30, 221, 232, 15, 5, 243, 135, 30, 220, 64, 
-    15, 5, 243, 135, 30, 220, 65, 96, 215, 99, 15, 5, 243, 135, 30, 220, 31, 
-    15, 5, 243, 135, 30, 218, 44, 15, 5, 243, 135, 30, 217, 73, 15, 5, 243, 
-    135, 30, 70, 15, 5, 243, 135, 30, 214, 219, 15, 5, 243, 135, 30, 214, 
-    220, 96, 246, 79, 15, 5, 243, 135, 117, 243, 134, 15, 5, 243, 129, 15, 5, 
-    243, 130, 249, 126, 243, 129, 15, 5, 243, 127, 15, 5, 243, 128, 117, 243, 
-    128, 243, 98, 117, 243, 97, 15, 5, 243, 119, 15, 5, 243, 120, 243, 128, 
-    117, 243, 128, 243, 98, 117, 243, 97, 15, 5, 243, 118, 15, 5, 243, 116, 
-    15, 5, 243, 107, 15, 5, 243, 105, 15, 5, 243, 106, 216, 240, 15, 5, 243, 
-    106, 117, 243, 105, 15, 5, 243, 106, 249, 126, 243, 105, 15, 5, 243, 97, 
-    15, 5, 243, 96, 15, 5, 243, 91, 15, 5, 243, 37, 15, 5, 243, 38, 30, 233, 
-    197, 15, 5, 242, 215, 15, 5, 242, 216, 30, 75, 15, 5, 242, 216, 30, 70, 
-    15, 5, 242, 216, 249, 126, 242, 215, 15, 5, 242, 213, 15, 5, 242, 214, 
-    117, 242, 213, 15, 5, 242, 214, 249, 126, 242, 213, 15, 5, 242, 210, 15, 
-    5, 242, 198, 15, 5, 242, 199, 242, 95, 15, 5, 242, 196, 15, 5, 242, 197, 
-    30, 115, 96, 236, 36, 15, 5, 242, 197, 30, 243, 106, 216, 240, 15, 5, 
-    242, 197, 30, 236, 36, 15, 5, 242, 197, 30, 232, 100, 96, 236, 36, 15, 5, 
-    242, 197, 30, 190, 15, 5, 242, 193, 15, 5, 242, 191, 15, 5, 242, 192, 
-    249, 126, 242, 191, 15, 5, 242, 192, 30, 252, 177, 15, 5, 242, 192, 30, 
-    217, 73, 15, 5, 242, 192, 216, 240, 15, 5, 242, 114, 15, 5, 242, 115, 
-    249, 126, 242, 114, 15, 5, 242, 112, 15, 5, 242, 113, 30, 234, 243, 15, 
-    5, 242, 113, 30, 234, 244, 30, 236, 37, 242, 95, 15, 5, 242, 113, 30, 
-    227, 195, 15, 5, 242, 113, 30, 222, 10, 96, 215, 114, 15, 5, 242, 113, 
-    242, 95, 15, 5, 242, 104, 15, 5, 242, 105, 30, 115, 96, 233, 197, 15, 5, 
-    242, 105, 30, 233, 197, 15, 5, 242, 105, 117, 242, 105, 232, 92, 15, 5, 
-    242, 99, 15, 5, 242, 97, 15, 5, 242, 98, 30, 220, 64, 15, 5, 242, 89, 15, 
-    5, 242, 88, 15, 5, 242, 85, 15, 5, 242, 84, 15, 5, 162, 15, 5, 242, 50, 
-    216, 240, 15, 5, 242, 50, 242, 95, 15, 5, 242, 31, 15, 5, 241, 181, 15, 
-    5, 241, 182, 30, 253, 232, 15, 5, 241, 182, 30, 253, 230, 15, 5, 241, 
-    182, 30, 252, 177, 15, 5, 241, 182, 30, 247, 188, 15, 5, 241, 182, 30, 
-    243, 127, 15, 5, 241, 182, 30, 234, 82, 15, 5, 241, 182, 30, 227, 195, 
-    15, 5, 241, 182, 30, 220, 64, 15, 5, 241, 182, 30, 70, 15, 5, 240, 223, 
-    15, 5, 240, 219, 15, 5, 240, 220, 30, 254, 124, 15, 5, 240, 220, 30, 242, 
-    31, 15, 5, 240, 220, 30, 234, 208, 15, 5, 240, 220, 30, 232, 198, 15, 5, 
-    240, 220, 30, 214, 219, 15, 5, 240, 216, 15, 5, 73, 15, 5, 240, 155, 61, 
-    15, 5, 240, 116, 15, 5, 236, 64, 15, 5, 236, 65, 117, 236, 65, 251, 99, 
-    15, 5, 236, 65, 117, 236, 65, 218, 234, 15, 5, 236, 39, 15, 5, 236, 36, 
-    15, 5, 236, 37, 247, 243, 15, 5, 236, 37, 223, 36, 15, 5, 236, 37, 117, 
-    236, 37, 220, 15, 117, 220, 15, 214, 220, 117, 214, 219, 15, 5, 236, 37, 
-    242, 95, 15, 5, 236, 28, 15, 5, 236, 29, 30, 243, 106, 216, 240, 15, 5, 
-    236, 27, 15, 5, 236, 17, 15, 5, 236, 18, 30, 217, 73, 15, 5, 236, 18, 
-    249, 126, 236, 17, 15, 5, 236, 18, 226, 165, 236, 17, 15, 5, 236, 18, 
-    218, 234, 15, 5, 236, 10, 15, 5, 236, 0, 15, 5, 235, 180, 15, 5, 235, 
-    166, 15, 5, 176, 15, 5, 235, 14, 30, 61, 15, 5, 235, 14, 30, 255, 0, 15, 
-    5, 235, 14, 30, 255, 1, 96, 233, 216, 15, 5, 235, 14, 30, 253, 230, 15, 
-    5, 235, 14, 30, 252, 177, 15, 5, 235, 14, 30, 252, 161, 15, 5, 235, 14, 
-    30, 130, 15, 5, 235, 14, 30, 252, 7, 15, 5, 235, 14, 30, 245, 88, 15, 5, 
-    235, 14, 30, 245, 73, 15, 5, 235, 14, 30, 243, 136, 15, 5, 235, 14, 30, 
-    243, 119, 15, 5, 235, 14, 30, 243, 106, 216, 240, 15, 5, 235, 14, 30, 
-    243, 97, 15, 5, 235, 14, 30, 243, 98, 96, 220, 102, 96, 61, 15, 5, 235, 
-    14, 30, 242, 215, 15, 5, 235, 14, 30, 242, 198, 15, 5, 235, 14, 30, 242, 
-    192, 96, 221, 232, 15, 5, 235, 14, 30, 242, 192, 249, 126, 242, 191, 15, 
-    5, 235, 14, 30, 242, 114, 15, 5, 235, 14, 30, 242, 88, 15, 5, 235, 14, 
-    30, 236, 36, 15, 5, 235, 14, 30, 236, 17, 15, 5, 235, 14, 30, 234, 243, 
-    15, 5, 235, 14, 30, 234, 93, 15, 5, 235, 14, 30, 234, 90, 15, 5, 235, 14, 
-    30, 232, 242, 15, 5, 235, 14, 30, 232, 99, 15, 5, 235, 14, 30, 231, 92, 
-    15, 5, 235, 14, 30, 231, 93, 96, 246, 79, 15, 5, 235, 14, 30, 231, 93, 
-    96, 242, 215, 15, 5, 235, 14, 30, 231, 93, 96, 217, 23, 15, 5, 235, 14, 
-    30, 230, 231, 15, 5, 235, 14, 30, 230, 232, 96, 227, 190, 15, 5, 235, 14, 
-    30, 229, 108, 15, 5, 235, 14, 30, 227, 195, 15, 5, 235, 14, 30, 225, 109, 
-    15, 5, 235, 14, 30, 222, 141, 15, 5, 235, 14, 30, 206, 15, 5, 235, 14, 
-    30, 221, 232, 15, 5, 235, 14, 30, 220, 103, 15, 5, 235, 14, 30, 220, 64, 
-    15, 5, 235, 14, 30, 220, 31, 15, 5, 235, 14, 30, 219, 226, 15, 5, 235, 
-    14, 30, 219, 183, 15, 5, 235, 14, 30, 218, 52, 15, 5, 235, 14, 30, 217, 
-    51, 15, 5, 235, 14, 30, 70, 15, 5, 235, 14, 30, 214, 230, 15, 5, 235, 14, 
-    30, 214, 219, 15, 5, 235, 14, 30, 214, 193, 30, 190, 15, 5, 235, 14, 30, 
-    214, 126, 15, 5, 235, 14, 30, 210, 44, 15, 5, 235, 12, 15, 5, 235, 13, 
-    249, 126, 235, 12, 15, 5, 235, 5, 15, 5, 235, 2, 15, 5, 235, 0, 15, 5, 
-    234, 255, 15, 5, 234, 253, 15, 5, 234, 254, 117, 234, 253, 15, 5, 234, 
-    243, 15, 5, 234, 244, 30, 236, 37, 242, 95, 15, 5, 234, 239, 15, 5, 234, 
-    240, 30, 252, 177, 15, 5, 234, 240, 249, 126, 234, 239, 15, 5, 234, 237, 
-    15, 5, 234, 236, 15, 5, 234, 208, 15, 5, 234, 209, 233, 119, 30, 104, 
-    117, 233, 119, 30, 70, 15, 5, 234, 209, 117, 234, 209, 233, 119, 30, 104, 
-    117, 233, 119, 30, 70, 15, 5, 234, 158, 15, 5, 234, 93, 15, 5, 234, 94, 
-    30, 252, 177, 15, 5, 234, 94, 30, 70, 15, 5, 234, 94, 30, 214, 219, 15, 
-    5, 234, 90, 15, 5, 234, 82, 15, 5, 234, 69, 15, 5, 234, 68, 15, 5, 234, 
-    66, 15, 5, 234, 67, 117, 234, 66, 15, 5, 233, 218, 15, 5, 233, 219, 117, 
-    241, 182, 30, 253, 231, 233, 219, 117, 241, 182, 30, 253, 230, 15, 5, 
-    233, 216, 15, 5, 233, 214, 15, 5, 233, 215, 214, 12, 17, 15, 5, 233, 213, 
-    15, 5, 233, 210, 15, 5, 233, 211, 242, 95, 15, 5, 233, 209, 15, 5, 233, 
-    197, 15, 5, 233, 198, 226, 165, 233, 197, 15, 5, 233, 192, 15, 5, 233, 
-    173, 15, 5, 233, 136, 15, 5, 233, 118, 15, 5, 233, 119, 30, 61, 15, 5, 
-    233, 119, 30, 115, 96, 248, 223, 96, 162, 15, 5, 233, 119, 30, 115, 96, 
-    243, 97, 15, 5, 233, 119, 30, 115, 96, 233, 105, 15, 5, 233, 119, 30, 
-    254, 179, 15, 5, 233, 119, 30, 254, 124, 15, 5, 233, 119, 30, 253, 233, 
-    210, 40, 216, 240, 15, 5, 233, 119, 30, 252, 177, 15, 5, 233, 119, 30, 
-    252, 7, 15, 5, 233, 119, 30, 248, 167, 15, 5, 233, 119, 30, 245, 151, 15, 
-    5, 233, 119, 30, 243, 136, 15, 5, 233, 119, 30, 243, 97, 15, 5, 233, 119, 
-    30, 242, 104, 15, 5, 233, 119, 30, 242, 105, 96, 242, 104, 15, 5, 233, 
-    119, 30, 162, 15, 5, 233, 119, 30, 242, 31, 15, 5, 233, 119, 30, 241, 
-    182, 30, 227, 195, 15, 5, 233, 119, 30, 236, 37, 242, 95, 15, 5, 233, 
-    119, 30, 236, 17, 15, 5, 233, 119, 30, 236, 18, 96, 162, 15, 5, 233, 119, 
-    30, 236, 18, 96, 232, 99, 15, 5, 233, 119, 30, 234, 93, 15, 5, 233, 119, 
-    30, 234, 82, 15, 5, 233, 119, 30, 233, 216, 15, 5, 233, 119, 30, 233, 
-    210, 15, 5, 233, 119, 30, 233, 211, 96, 241, 182, 96, 61, 15, 5, 233, 
-    119, 30, 233, 118, 15, 5, 233, 119, 30, 232, 198, 15, 5, 233, 119, 30, 
-    232, 99, 15, 5, 233, 119, 30, 232, 87, 15, 5, 233, 119, 30, 231, 92, 15, 
-    5, 233, 119, 30, 231, 93, 96, 245, 151, 15, 5, 233, 119, 30, 230, 62, 15, 
-    5, 233, 119, 30, 229, 108, 15, 5, 233, 119, 30, 220, 65, 96, 218, 44, 15, 
-    5, 233, 119, 30, 220, 11, 96, 242, 192, 96, 245, 88, 15, 5, 233, 119, 30, 
-    220, 11, 96, 242, 192, 216, 240, 15, 5, 233, 119, 30, 219, 224, 15, 5, 
-    233, 119, 30, 219, 225, 96, 219, 224, 15, 5, 233, 119, 30, 218, 44, 15, 
-    5, 233, 119, 30, 217, 85, 15, 5, 233, 119, 30, 217, 73, 15, 5, 233, 119, 
-    30, 217, 24, 96, 115, 96, 218, 85, 96, 197, 15, 5, 233, 119, 30, 70, 15, 
-    5, 233, 119, 30, 104, 96, 61, 15, 5, 233, 119, 30, 104, 96, 104, 96, 70, 
-    15, 5, 233, 119, 30, 214, 231, 96, 253, 232, 15, 5, 233, 119, 30, 214, 
-    219, 15, 5, 233, 119, 30, 214, 126, 15, 5, 233, 119, 218, 234, 15, 5, 
-    233, 116, 15, 5, 233, 117, 30, 220, 64, 15, 5, 233, 117, 30, 220, 65, 96, 
-    218, 44, 15, 5, 233, 117, 242, 95, 15, 5, 233, 117, 242, 96, 117, 233, 
-    117, 242, 96, 220, 64, 15, 5, 233, 112, 15, 5, 233, 105, 15, 5, 233, 106, 
-    30, 233, 105, 15, 5, 233, 103, 15, 5, 233, 104, 30, 233, 197, 15, 5, 233, 
-    104, 30, 233, 198, 96, 222, 141, 15, 5, 232, 242, 15, 5, 232, 227, 15, 5, 
-    232, 217, 15, 5, 232, 198, 15, 5, 232, 99, 15, 5, 232, 100, 30, 252, 177, 
-    15, 5, 232, 97, 15, 5, 232, 98, 30, 254, 179, 15, 5, 232, 98, 30, 252, 
-    177, 15, 5, 232, 98, 30, 245, 73, 15, 5, 232, 98, 30, 245, 74, 216, 240, 
-    15, 5, 232, 98, 30, 243, 106, 216, 240, 15, 5, 232, 98, 30, 241, 182, 30, 
-    252, 177, 15, 5, 232, 98, 30, 236, 17, 15, 5, 232, 98, 30, 235, 2, 15, 5, 
-    232, 98, 30, 235, 0, 15, 5, 232, 98, 30, 235, 1, 96, 253, 232, 15, 5, 
-    232, 98, 30, 234, 93, 15, 5, 232, 98, 30, 233, 137, 96, 253, 232, 15, 5, 
-    232, 98, 30, 233, 118, 15, 5, 232, 98, 30, 231, 93, 96, 245, 151, 15, 5, 
-    232, 98, 30, 229, 108, 15, 5, 232, 98, 30, 227, 238, 15, 5, 232, 98, 30, 
-    219, 193, 96, 253, 232, 15, 5, 232, 98, 30, 219, 175, 96, 251, 126, 15, 
-    5, 232, 98, 30, 215, 114, 15, 5, 232, 98, 216, 240, 15, 5, 232, 98, 249, 
-    126, 232, 97, 15, 5, 232, 98, 226, 165, 232, 97, 15, 5, 232, 98, 218, 
-    234, 15, 5, 232, 98, 220, 46, 15, 5, 232, 96, 15, 5, 232, 92, 15, 5, 232, 
-    93, 117, 232, 92, 15, 5, 232, 93, 226, 165, 232, 92, 15, 5, 232, 93, 220, 
-    46, 15, 5, 232, 90, 15, 5, 232, 87, 15, 5, 232, 85, 15, 5, 232, 86, 117, 
-    232, 85, 15, 5, 232, 86, 117, 232, 86, 243, 98, 117, 243, 97, 15, 5, 185, 
-    15, 5, 231, 240, 30, 217, 73, 15, 5, 231, 240, 242, 95, 15, 5, 231, 239, 
-    15, 5, 231, 211, 15, 5, 231, 167, 15, 5, 231, 148, 15, 5, 231, 147, 15, 
-    5, 231, 92, 15, 5, 231, 48, 15, 5, 230, 231, 15, 5, 230, 189, 15, 5, 230, 
-    103, 15, 5, 230, 104, 117, 230, 103, 15, 5, 230, 94, 15, 5, 230, 95, 242, 
-    95, 15, 5, 230, 79, 15, 5, 230, 65, 15, 5, 230, 62, 15, 5, 230, 63, 30, 
-    61, 15, 5, 230, 63, 30, 233, 197, 15, 5, 230, 63, 30, 210, 116, 15, 5, 
-    230, 63, 117, 230, 62, 15, 5, 230, 63, 117, 230, 63, 30, 115, 96, 197, 
-    15, 5, 230, 63, 249, 126, 230, 62, 15, 5, 230, 60, 15, 5, 230, 61, 30, 
-    61, 15, 5, 230, 61, 30, 115, 96, 248, 4, 15, 5, 230, 61, 30, 248, 4, 15, 
-    5, 230, 61, 242, 95, 15, 5, 197, 15, 5, 229, 228, 15, 5, 229, 217, 15, 5, 
-    229, 218, 235, 193, 15, 5, 229, 218, 30, 219, 227, 216, 240, 15, 5, 229, 
-    218, 226, 165, 229, 217, 15, 5, 229, 216, 15, 5, 229, 209, 227, 181, 15, 
-    5, 229, 208, 15, 5, 229, 207, 15, 5, 229, 108, 15, 5, 229, 109, 30, 61, 
-    15, 5, 229, 109, 30, 214, 219, 15, 5, 229, 109, 220, 46, 15, 5, 228, 234, 
-    15, 5, 228, 235, 30, 75, 15, 5, 228, 233, 15, 5, 228, 204, 15, 5, 228, 
-    205, 30, 243, 106, 216, 240, 15, 5, 228, 205, 30, 243, 98, 96, 243, 106, 
-    216, 240, 15, 5, 228, 202, 15, 5, 228, 203, 30, 254, 124, 15, 5, 228, 
-    203, 30, 253, 232, 15, 5, 228, 203, 30, 253, 233, 96, 253, 232, 15, 5, 
-    228, 203, 30, 242, 104, 15, 5, 228, 203, 30, 231, 93, 96, 243, 106, 216, 
-    240, 15, 5, 228, 203, 30, 229, 108, 15, 5, 228, 203, 30, 227, 195, 15, 5, 
-    228, 203, 30, 220, 64, 15, 5, 228, 203, 30, 220, 65, 96, 115, 254, 124, 
-    15, 5, 228, 203, 30, 220, 65, 96, 253, 232, 15, 5, 228, 203, 30, 220, 65, 
-    96, 253, 233, 96, 253, 232, 15, 5, 228, 203, 30, 214, 231, 96, 253, 232, 
-    15, 5, 228, 203, 30, 214, 126, 15, 5, 228, 191, 15, 5, 227, 238, 15, 5, 
-    227, 211, 15, 5, 227, 195, 15, 5, 227, 196, 233, 117, 30, 243, 97, 15, 5, 
-    227, 196, 233, 117, 30, 231, 148, 15, 5, 227, 196, 233, 117, 30, 222, 9, 
-    15, 5, 227, 196, 233, 117, 30, 222, 10, 117, 227, 196, 233, 117, 30, 222, 
-    9, 15, 5, 227, 196, 233, 117, 30, 214, 126, 15, 5, 227, 196, 216, 240, 
-    15, 5, 227, 196, 117, 227, 195, 15, 5, 227, 196, 249, 126, 227, 195, 15, 
-    5, 227, 196, 249, 126, 227, 196, 233, 117, 117, 233, 116, 15, 5, 227, 
-    190, 15, 5, 227, 191, 255, 25, 30, 253, 227, 15, 5, 227, 191, 255, 25, 
-    30, 252, 7, 15, 5, 227, 191, 255, 25, 30, 246, 75, 15, 5, 227, 191, 255, 
-    25, 30, 242, 104, 15, 5, 227, 191, 255, 25, 30, 236, 37, 242, 95, 15, 5, 
-    227, 191, 255, 25, 30, 235, 0, 15, 5, 227, 191, 255, 25, 30, 233, 136, 
-    15, 5, 227, 191, 255, 25, 30, 229, 108, 15, 5, 227, 191, 255, 25, 30, 
-    219, 172, 15, 5, 227, 191, 255, 25, 30, 214, 230, 15, 5, 227, 191, 234, 
-    67, 30, 252, 7, 15, 5, 227, 191, 234, 67, 30, 252, 8, 70, 15, 5, 190, 15, 
-    5, 226, 81, 15, 5, 226, 48, 15, 5, 226, 22, 15, 5, 225, 162, 15, 5, 225, 
-    109, 15, 5, 225, 110, 30, 61, 15, 5, 225, 110, 30, 255, 26, 15, 5, 225, 
-    110, 30, 252, 7, 15, 5, 225, 110, 30, 251, 126, 15, 5, 225, 110, 30, 75, 
-    15, 5, 225, 110, 30, 73, 15, 5, 225, 110, 30, 240, 116, 15, 5, 225, 110, 
-    30, 70, 15, 5, 225, 110, 30, 214, 230, 15, 5, 225, 110, 249, 126, 225, 
-    109, 15, 5, 225, 54, 15, 5, 225, 55, 30, 234, 239, 15, 5, 225, 55, 30, 
-    214, 219, 15, 5, 225, 55, 30, 210, 116, 15, 5, 225, 55, 226, 165, 225, 
-    54, 15, 5, 205, 15, 5, 223, 183, 15, 5, 223, 36, 15, 5, 222, 141, 15, 5, 
-    206, 15, 5, 222, 23, 227, 181, 15, 5, 222, 22, 15, 5, 222, 23, 30, 61, 
-    15, 5, 222, 23, 30, 246, 79, 15, 5, 222, 23, 30, 246, 77, 15, 5, 222, 23, 
-    30, 162, 15, 5, 222, 23, 30, 234, 243, 15, 5, 222, 23, 30, 233, 197, 15, 
-    5, 222, 23, 30, 232, 85, 15, 5, 222, 23, 30, 230, 231, 15, 5, 222, 23, 
-    30, 227, 195, 15, 5, 222, 23, 30, 222, 9, 15, 5, 222, 23, 30, 220, 31, 
-    15, 5, 222, 23, 30, 217, 94, 15, 5, 222, 23, 30, 214, 230, 15, 5, 222, 
-    23, 30, 214, 225, 15, 5, 222, 23, 30, 214, 197, 15, 5, 222, 23, 30, 214, 
-    150, 15, 5, 222, 23, 30, 214, 126, 15, 5, 222, 23, 117, 222, 22, 15, 5, 
-    222, 23, 242, 95, 15, 5, 222, 9, 15, 5, 222, 10, 233, 119, 30, 253, 230, 
-    15, 5, 221, 240, 15, 5, 221, 232, 15, 5, 220, 103, 15, 5, 220, 101, 15, 
-    5, 220, 102, 30, 61, 15, 5, 220, 102, 30, 252, 177, 15, 5, 220, 102, 30, 
-    242, 191, 15, 5, 220, 102, 30, 229, 108, 15, 5, 220, 102, 30, 219, 224, 
-    15, 5, 220, 102, 30, 215, 99, 15, 5, 220, 102, 30, 70, 15, 5, 220, 102, 
-    30, 104, 96, 61, 15, 5, 220, 100, 15, 5, 220, 98, 15, 5, 220, 79, 15, 5, 
-    220, 64, 15, 5, 220, 65, 240, 223, 15, 5, 220, 65, 117, 220, 65, 243, 
-    128, 117, 243, 128, 243, 98, 117, 243, 97, 15, 5, 220, 65, 117, 220, 65, 
-    217, 95, 117, 217, 95, 243, 98, 117, 243, 97, 15, 5, 220, 57, 15, 5, 220, 
-    52, 15, 5, 220, 49, 15, 5, 220, 48, 15, 5, 220, 45, 15, 5, 220, 31, 15, 
-    5, 220, 32, 30, 61, 15, 5, 220, 32, 30, 236, 17, 15, 5, 220, 25, 15, 5, 
-    220, 26, 30, 61, 15, 5, 220, 26, 30, 252, 162, 15, 5, 220, 26, 30, 251, 
-    110, 15, 5, 220, 26, 30, 247, 207, 15, 5, 220, 26, 30, 243, 97, 15, 5, 
-    220, 26, 30, 236, 36, 15, 5, 220, 26, 30, 236, 37, 242, 95, 15, 5, 220, 
-    26, 30, 233, 192, 15, 5, 220, 26, 30, 232, 87, 15, 5, 220, 26, 30, 230, 
-    94, 15, 5, 220, 26, 30, 222, 9, 15, 5, 220, 19, 15, 5, 220, 14, 15, 5, 
-    220, 15, 216, 240, 15, 5, 220, 15, 117, 220, 15, 251, 100, 117, 251, 99, 
-    15, 5, 220, 10, 15, 5, 219, 226, 15, 5, 219, 227, 117, 235, 194, 219, 
-    226, 15, 5, 219, 224, 15, 5, 219, 223, 15, 5, 219, 192, 15, 5, 219, 193, 
-    242, 95, 15, 5, 219, 183, 15, 5, 219, 181, 15, 5, 219, 182, 117, 219, 
-    182, 219, 224, 15, 5, 219, 174, 15, 5, 219, 172, 15, 5, 218, 84, 15, 5, 
-    218, 85, 117, 218, 84, 15, 5, 218, 55, 15, 5, 218, 54, 15, 5, 218, 52, 
-    15, 5, 218, 44, 15, 5, 218, 43, 15, 5, 218, 18, 15, 5, 218, 17, 15, 5, 
-    217, 106, 15, 5, 217, 107, 253, 217, 15, 5, 217, 107, 30, 241, 181, 15, 
-    5, 217, 107, 30, 230, 231, 15, 5, 217, 107, 242, 95, 15, 5, 217, 94, 15, 
-    5, 217, 95, 117, 217, 95, 228, 235, 117, 228, 235, 247, 189, 117, 247, 
-    188, 15, 5, 217, 95, 218, 234, 15, 5, 217, 85, 15, 5, 129, 30, 252, 7, 
-    15, 5, 129, 30, 242, 104, 15, 5, 129, 30, 220, 64, 15, 5, 129, 30, 219, 
-    226, 15, 5, 129, 30, 215, 114, 15, 5, 129, 30, 214, 219, 15, 5, 217, 73, 
-    15, 5, 217, 51, 15, 5, 217, 23, 15, 5, 217, 24, 242, 95, 15, 5, 216, 118, 
-    15, 5, 216, 119, 216, 240, 15, 5, 216, 91, 15, 5, 216, 73, 15, 5, 216, 
-    74, 30, 217, 73, 15, 5, 216, 74, 117, 216, 73, 15, 5, 216, 74, 117, 216, 
-    74, 243, 128, 117, 243, 128, 243, 98, 117, 243, 97, 15, 5, 215, 119, 15, 
-    5, 215, 114, 15, 5, 215, 112, 15, 5, 215, 109, 15, 5, 215, 99, 15, 5, 
-    215, 100, 117, 215, 100, 210, 117, 117, 210, 116, 15, 5, 70, 15, 5, 104, 
-    242, 104, 15, 5, 104, 104, 70, 15, 5, 104, 117, 104, 226, 91, 117, 226, 
-    91, 243, 98, 117, 243, 97, 15, 5, 104, 117, 104, 218, 19, 117, 218, 18, 
-    15, 5, 104, 117, 104, 104, 223, 50, 117, 104, 223, 49, 15, 5, 214, 230, 
-    15, 5, 214, 225, 15, 5, 214, 219, 15, 5, 214, 220, 233, 192, 15, 5, 214, 
-    220, 30, 252, 177, 15, 5, 214, 220, 30, 230, 231, 15, 5, 214, 220, 30, 
-    104, 96, 104, 96, 70, 15, 5, 214, 220, 30, 104, 96, 104, 96, 104, 242, 
-    95, 15, 5, 214, 220, 242, 95, 15, 5, 214, 220, 220, 46, 15, 5, 214, 220, 
-    220, 47, 30, 252, 177, 15, 5, 214, 215, 15, 5, 214, 197, 15, 5, 214, 198, 
-    30, 233, 118, 15, 5, 214, 198, 30, 231, 93, 96, 248, 222, 15, 5, 214, 
-    198, 30, 220, 101, 15, 5, 214, 198, 30, 70, 15, 5, 214, 196, 15, 5, 214, 
-    192, 15, 5, 214, 193, 30, 234, 208, 15, 5, 214, 193, 30, 190, 15, 5, 214, 
-    190, 15, 5, 214, 191, 242, 95, 15, 5, 214, 150, 15, 5, 214, 151, 249, 
-    126, 214, 150, 15, 5, 214, 151, 220, 46, 15, 5, 214, 148, 15, 5, 214, 
-    149, 30, 115, 96, 162, 15, 5, 214, 149, 30, 115, 96, 197, 15, 5, 214, 
-    149, 30, 254, 179, 15, 5, 214, 149, 30, 162, 15, 5, 214, 149, 30, 227, 
-    195, 15, 5, 214, 149, 30, 214, 230, 15, 5, 214, 149, 30, 214, 231, 96, 
-    253, 232, 15, 5, 214, 149, 30, 214, 231, 96, 252, 7, 15, 5, 214, 147, 15, 
-    5, 214, 144, 15, 5, 214, 143, 15, 5, 214, 139, 15, 5, 214, 140, 30, 61, 
-    15, 5, 214, 140, 30, 253, 227, 15, 5, 214, 140, 30, 130, 15, 5, 214, 140, 
-    30, 246, 69, 15, 5, 214, 140, 30, 243, 136, 15, 5, 214, 140, 30, 243, 
-    119, 15, 5, 214, 140, 30, 243, 106, 216, 240, 15, 5, 214, 140, 30, 243, 
-    97, 15, 5, 214, 140, 30, 242, 114, 15, 5, 214, 140, 30, 162, 15, 5, 214, 
-    140, 30, 236, 36, 15, 5, 214, 140, 30, 236, 17, 15, 5, 214, 140, 30, 235, 
-    166, 15, 5, 214, 140, 30, 234, 93, 15, 5, 214, 140, 30, 232, 85, 15, 5, 
-    214, 140, 30, 230, 189, 15, 5, 214, 140, 30, 190, 15, 5, 214, 140, 30, 
-    220, 64, 15, 5, 214, 140, 30, 219, 181, 15, 5, 214, 140, 30, 215, 119, 
-    15, 5, 214, 140, 30, 104, 96, 242, 104, 15, 5, 214, 140, 30, 214, 219, 
-    15, 5, 214, 140, 30, 214, 137, 15, 5, 214, 137, 15, 5, 214, 138, 30, 70, 
-    15, 5, 214, 126, 15, 5, 214, 127, 30, 61, 15, 5, 214, 127, 30, 233, 218, 
-    15, 5, 214, 127, 30, 233, 197, 15, 5, 214, 127, 30, 217, 73, 15, 5, 214, 
-    122, 15, 5, 214, 125, 15, 5, 214, 123, 15, 5, 214, 119, 15, 5, 214, 108, 
-    15, 5, 214, 109, 30, 234, 208, 15, 5, 214, 107, 15, 5, 210, 116, 15, 5, 
-    210, 117, 216, 240, 15, 5, 210, 117, 92, 30, 233, 197, 15, 5, 210, 113, 
-    15, 5, 210, 106, 15, 5, 210, 93, 15, 5, 210, 44, 15, 5, 210, 45, 117, 
-    210, 44, 15, 5, 210, 43, 15, 5, 210, 41, 15, 5, 210, 42, 235, 4, 216, 
-    240, 15, 5, 210, 36, 15, 5, 210, 28, 15, 5, 210, 13, 15, 5, 210, 11, 15, 
-    5, 210, 12, 30, 61, 15, 5, 210, 10, 15, 5, 210, 9, 15, 132, 5, 113, 253, 
-    232, 15, 132, 5, 134, 253, 232, 15, 132, 5, 244, 12, 253, 232, 15, 132, 
-    5, 244, 82, 253, 232, 15, 132, 5, 219, 126, 253, 232, 15, 132, 5, 220, 
-    123, 253, 232, 15, 132, 5, 245, 194, 253, 232, 15, 132, 5, 228, 201, 253, 
-    232, 15, 132, 5, 134, 247, 188, 15, 132, 5, 244, 12, 247, 188, 15, 132, 
-    5, 244, 82, 247, 188, 15, 132, 5, 219, 126, 247, 188, 15, 132, 5, 220, 
-    123, 247, 188, 15, 132, 5, 245, 194, 247, 188, 15, 132, 5, 228, 201, 247, 
-    188, 15, 132, 5, 244, 12, 70, 15, 132, 5, 244, 82, 70, 15, 132, 5, 219, 
-    126, 70, 15, 132, 5, 220, 123, 70, 15, 132, 5, 245, 194, 70, 15, 132, 5, 
-    228, 201, 70, 15, 132, 5, 123, 243, 39, 15, 132, 5, 113, 243, 39, 15, 
-    132, 5, 134, 243, 39, 15, 132, 5, 244, 12, 243, 39, 15, 132, 5, 244, 82, 
-    243, 39, 15, 132, 5, 219, 126, 243, 39, 15, 132, 5, 220, 123, 243, 39, 
-    15, 132, 5, 245, 194, 243, 39, 15, 132, 5, 228, 201, 243, 39, 15, 132, 5, 
-    123, 243, 36, 15, 132, 5, 113, 243, 36, 15, 132, 5, 134, 243, 36, 15, 
-    132, 5, 244, 12, 243, 36, 15, 132, 5, 244, 82, 243, 36, 15, 132, 5, 113, 
-    220, 79, 15, 132, 5, 134, 220, 79, 15, 132, 5, 134, 220, 80, 214, 12, 17, 
-    15, 132, 5, 244, 12, 220, 79, 15, 132, 5, 244, 82, 220, 79, 15, 132, 5, 
-    219, 126, 220, 79, 15, 132, 5, 220, 123, 220, 79, 15, 132, 5, 245, 194, 
-    220, 79, 15, 132, 5, 228, 201, 220, 79, 15, 132, 5, 123, 220, 74, 15, 
-    132, 5, 113, 220, 74, 15, 132, 5, 134, 220, 74, 15, 132, 5, 134, 220, 75, 
-    214, 12, 17, 15, 132, 5, 244, 12, 220, 74, 15, 132, 5, 244, 82, 220, 74, 
-    15, 132, 5, 220, 80, 30, 243, 120, 96, 247, 188, 15, 132, 5, 220, 80, 30, 
-    243, 120, 96, 230, 189, 15, 132, 5, 123, 251, 96, 15, 132, 5, 113, 251, 
-    96, 15, 132, 5, 134, 251, 96, 15, 132, 5, 134, 251, 97, 214, 12, 17, 15, 
-    132, 5, 244, 12, 251, 96, 15, 132, 5, 244, 82, 251, 96, 15, 132, 5, 134, 
-    214, 12, 244, 21, 245, 75, 15, 132, 5, 134, 214, 12, 244, 21, 245, 72, 
-    15, 132, 5, 244, 12, 214, 12, 244, 21, 232, 218, 15, 132, 5, 244, 12, 
-    214, 12, 244, 21, 232, 216, 15, 132, 5, 244, 12, 214, 12, 244, 21, 232, 
-    219, 61, 15, 132, 5, 244, 12, 214, 12, 244, 21, 232, 219, 253, 159, 15, 
-    132, 5, 219, 126, 214, 12, 244, 21, 253, 229, 15, 132, 5, 220, 123, 214, 
-    12, 244, 21, 236, 9, 15, 132, 5, 220, 123, 214, 12, 244, 21, 236, 11, 61, 
-    15, 132, 5, 220, 123, 214, 12, 244, 21, 236, 11, 253, 159, 15, 132, 5, 
-    245, 194, 214, 12, 244, 21, 214, 121, 15, 132, 5, 245, 194, 214, 12, 244, 
-    21, 214, 120, 15, 132, 5, 228, 201, 214, 12, 244, 21, 236, 25, 15, 132, 
-    5, 228, 201, 214, 12, 244, 21, 236, 24, 15, 132, 5, 228, 201, 214, 12, 
-    244, 21, 236, 23, 15, 132, 5, 228, 201, 214, 12, 244, 21, 236, 26, 61, 
-    15, 132, 5, 113, 253, 233, 216, 240, 15, 132, 5, 134, 253, 233, 216, 240, 
-    15, 132, 5, 244, 12, 253, 233, 216, 240, 15, 132, 5, 244, 82, 253, 233, 
-    216, 240, 15, 132, 5, 219, 126, 253, 233, 216, 240, 15, 132, 5, 123, 252, 
-    151, 15, 132, 5, 113, 252, 151, 15, 132, 5, 134, 252, 151, 15, 132, 5, 
-    244, 12, 252, 151, 15, 132, 5, 244, 12, 252, 152, 214, 12, 17, 15, 132, 
-    5, 244, 82, 252, 151, 15, 132, 5, 244, 82, 252, 152, 214, 12, 17, 15, 
-    132, 5, 228, 211, 15, 132, 5, 228, 212, 15, 132, 5, 123, 245, 71, 15, 
-    132, 5, 113, 245, 71, 15, 132, 5, 123, 216, 170, 247, 188, 15, 132, 5, 
-    113, 216, 168, 247, 188, 15, 132, 5, 244, 82, 219, 115, 247, 188, 15, 
-    132, 5, 123, 216, 170, 214, 12, 244, 21, 61, 15, 132, 5, 113, 216, 168, 
-    214, 12, 244, 21, 61, 15, 132, 5, 123, 245, 190, 253, 232, 15, 132, 5, 
-    123, 224, 23, 253, 232, 15, 132, 5, 55, 253, 220, 123, 219, 116, 15, 132, 
-    5, 55, 253, 220, 123, 224, 22, 15, 224, 142, 5, 55, 253, 220, 211, 209, 
-    247, 173, 15, 224, 142, 5, 67, 249, 227, 15, 224, 142, 5, 248, 0, 249, 
-    227, 15, 224, 142, 5, 248, 0, 215, 222, 12, 13, 255, 156, 12, 13, 255, 
-    155, 12, 13, 255, 154, 12, 13, 255, 153, 12, 13, 255, 152, 12, 13, 255, 
-    151, 12, 13, 255, 150, 12, 13, 255, 149, 12, 13, 255, 148, 12, 13, 255, 
-    147, 12, 13, 255, 146, 12, 13, 255, 145, 12, 13, 255, 144, 12, 13, 255, 
-    143, 12, 13, 255, 142, 12, 13, 255, 141, 12, 13, 255, 140, 12, 13, 255, 
-    139, 12, 13, 255, 138, 12, 13, 255, 137, 12, 13, 255, 136, 12, 13, 255, 
-    135, 12, 13, 255, 134, 12, 13, 255, 133, 12, 13, 255, 132, 12, 13, 255, 
-    131, 12, 13, 255, 130, 12, 13, 255, 129, 12, 13, 255, 128, 12, 13, 255, 
-    127, 12, 13, 255, 126, 12, 13, 255, 125, 12, 13, 255, 124, 12, 13, 255, 
-    123, 12, 13, 255, 122, 12, 13, 255, 121, 12, 13, 255, 120, 12, 13, 255, 
-    119, 12, 13, 255, 118, 12, 13, 255, 117, 12, 13, 255, 116, 12, 13, 255, 
-    115, 12, 13, 255, 114, 12, 13, 255, 113, 12, 13, 255, 112, 12, 13, 255, 
-    111, 12, 13, 255, 110, 12, 13, 255, 109, 12, 13, 255, 108, 12, 13, 255, 
-    107, 12, 13, 255, 106, 12, 13, 255, 105, 12, 13, 255, 104, 12, 13, 255, 
-    103, 12, 13, 255, 102, 12, 13, 255, 101, 12, 13, 255, 100, 12, 13, 255, 
-    99, 12, 13, 255, 98, 12, 13, 255, 97, 12, 13, 255, 96, 12, 13, 255, 95, 
-    12, 13, 255, 94, 12, 13, 255, 93, 12, 13, 255, 92, 12, 13, 255, 91, 12, 
-    13, 255, 90, 12, 13, 255, 89, 12, 13, 255, 88, 12, 13, 255, 87, 12, 13, 
-    255, 86, 12, 13, 255, 85, 12, 13, 255, 84, 12, 13, 255, 83, 12, 13, 255, 
-    82, 12, 13, 255, 81, 12, 13, 255, 80, 12, 13, 255, 79, 12, 13, 255, 78, 
-    12, 13, 255, 77, 12, 13, 253, 157, 12, 13, 253, 155, 12, 13, 253, 153, 
-    12, 13, 253, 151, 12, 13, 253, 149, 12, 13, 253, 148, 12, 13, 253, 146, 
-    12, 13, 253, 144, 12, 13, 253, 142, 12, 13, 253, 140, 12, 13, 251, 63, 
-    12, 13, 251, 62, 12, 13, 251, 61, 12, 13, 251, 60, 12, 13, 251, 59, 12, 
-    13, 251, 58, 12, 13, 251, 57, 12, 13, 251, 56, 12, 13, 251, 55, 12, 13, 
-    251, 54, 12, 13, 251, 53, 12, 13, 251, 52, 12, 13, 251, 51, 12, 13, 251, 
-    50, 12, 13, 251, 49, 12, 13, 251, 48, 12, 13, 251, 47, 12, 13, 251, 46, 
-    12, 13, 251, 45, 12, 13, 251, 44, 12, 13, 251, 43, 12, 13, 251, 42, 12, 
-    13, 251, 41, 12, 13, 251, 40, 12, 13, 251, 39, 12, 13, 251, 38, 12, 13, 
-    251, 37, 12, 13, 251, 36, 12, 13, 249, 60, 12, 13, 249, 59, 12, 13, 249, 
-    58, 12, 13, 249, 57, 12, 13, 249, 56, 12, 13, 249, 55, 12, 13, 249, 54, 
-    12, 13, 249, 53, 12, 13, 249, 52, 12, 13, 249, 51, 12, 13, 249, 50, 12, 
-    13, 249, 49, 12, 13, 249, 48, 12, 13, 249, 47, 12, 13, 249, 46, 12, 13, 
-    249, 45, 12, 13, 249, 44, 12, 13, 249, 43, 12, 13, 249, 42, 12, 13, 249, 
-    41, 12, 13, 249, 40, 12, 13, 249, 39, 12, 13, 249, 38, 12, 13, 249, 37, 
-    12, 13, 249, 36, 12, 13, 249, 35, 12, 13, 249, 34, 12, 13, 249, 33, 12, 
-    13, 249, 32, 12, 13, 249, 31, 12, 13, 249, 30, 12, 13, 249, 29, 12, 13, 
-    249, 28, 12, 13, 249, 27, 12, 13, 249, 26, 12, 13, 249, 25, 12, 13, 249, 
-    24, 12, 13, 249, 23, 12, 13, 249, 22, 12, 13, 249, 21, 12, 13, 249, 20, 
-    12, 13, 249, 19, 12, 13, 249, 18, 12, 13, 249, 17, 12, 13, 249, 16, 12, 
-    13, 249, 15, 12, 13, 249, 14, 12, 13, 249, 13, 12, 13, 249, 12, 12, 13, 
-    249, 11, 12, 13, 249, 10, 12, 13, 249, 9, 12, 13, 249, 8, 12, 13, 249, 7, 
-    12, 13, 249, 6, 12, 13, 249, 5, 12, 13, 249, 4, 12, 13, 249, 3, 12, 13, 
-    249, 2, 12, 13, 249, 1, 12, 13, 249, 0, 12, 13, 248, 255, 12, 13, 248, 
-    254, 12, 13, 248, 253, 12, 13, 248, 252, 12, 13, 248, 251, 12, 13, 248, 
-    250, 12, 13, 248, 249, 12, 13, 248, 248, 12, 13, 248, 247, 12, 13, 248, 
-    246, 12, 13, 248, 245, 12, 13, 248, 244, 12, 13, 248, 243, 12, 13, 248, 
-    242, 12, 13, 248, 241, 12, 13, 248, 240, 12, 13, 248, 239, 12, 13, 248, 
-    238, 12, 13, 248, 237, 12, 13, 248, 236, 12, 13, 248, 235, 12, 13, 248, 
-    234, 12, 13, 248, 233, 12, 13, 248, 232, 12, 13, 248, 231, 12, 13, 248, 
-    230, 12, 13, 248, 229, 12, 13, 248, 228, 12, 13, 248, 227, 12, 13, 248, 
-    226, 12, 13, 248, 225, 12, 13, 246, 24, 12, 13, 246, 23, 12, 13, 246, 22, 
-    12, 13, 246, 21, 12, 13, 246, 20, 12, 13, 246, 19, 12, 13, 246, 18, 12, 
-    13, 246, 17, 12, 13, 246, 16, 12, 13, 246, 15, 12, 13, 246, 14, 12, 13, 
-    246, 13, 12, 13, 246, 12, 12, 13, 246, 11, 12, 13, 246, 10, 12, 13, 246, 
-    9, 12, 13, 246, 8, 12, 13, 246, 7, 12, 13, 246, 6, 12, 13, 246, 5, 12, 
-    13, 246, 4, 12, 13, 246, 3, 12, 13, 246, 2, 12, 13, 246, 1, 12, 13, 246, 
-    0, 12, 13, 245, 255, 12, 13, 245, 254, 12, 13, 245, 253, 12, 13, 245, 
-    252, 12, 13, 245, 251, 12, 13, 245, 250, 12, 13, 245, 249, 12, 13, 245, 
-    248, 12, 13, 245, 247, 12, 13, 245, 246, 12, 13, 245, 245, 12, 13, 245, 
-    244, 12, 13, 245, 243, 12, 13, 245, 242, 12, 13, 245, 241, 12, 13, 245, 
-    240, 12, 13, 245, 239, 12, 13, 245, 238, 12, 13, 245, 237, 12, 13, 245, 
+    34, 224, 36, 8, 34, 232, 247, 8, 34, 234, 67, 8, 34, 227, 145, 8, 34, 
+    249, 77, 8, 34, 218, 194, 8, 34, 243, 19, 8, 34, 243, 51, 8, 34, 230, 
+    235, 8, 34, 240, 187, 8, 34, 232, 61, 8, 34, 252, 91, 8, 34, 230, 131, 8, 
+    34, 210, 244, 8, 34, 224, 124, 8, 34, 240, 181, 8, 34, 217, 47, 8, 34, 
+    243, 142, 8, 34, 210, 5, 8, 34, 249, 71, 8, 34, 248, 103, 8, 34, 251, 
+    106, 8, 34, 243, 15, 8, 34, 227, 135, 8, 34, 215, 119, 8, 34, 226, 179, 
+    8, 34, 235, 80, 8, 34, 210, 19, 8, 34, 224, 103, 8, 34, 241, 115, 8, 34, 
+    210, 250, 8, 34, 212, 112, 8, 34, 219, 202, 8, 34, 213, 244, 8, 34, 210, 
+    116, 8, 34, 235, 74, 8, 34, 227, 100, 8, 34, 235, 78, 8, 34, 242, 161, 8, 
+    34, 235, 98, 8, 34, 211, 227, 8, 34, 246, 86, 8, 34, 219, 215, 8, 34, 
+    232, 242, 8, 34, 249, 81, 8, 34, 249, 113, 8, 34, 250, 45, 8, 34, 240, 
+    184, 8, 34, 220, 74, 8, 34, 210, 4, 8, 34, 220, 0, 8, 34, 250, 139, 8, 
+    34, 209, 231, 8, 34, 229, 178, 8, 34, 234, 188, 232, 202, 1, 252, 199, 
+    232, 202, 1, 191, 232, 202, 1, 225, 150, 232, 202, 1, 248, 229, 232, 202, 
+    1, 217, 106, 232, 202, 1, 216, 209, 232, 202, 1, 243, 142, 232, 202, 1, 
+    176, 232, 202, 1, 234, 138, 232, 202, 1, 235, 147, 232, 202, 1, 251, 41, 
+    232, 202, 1, 250, 165, 232, 202, 1, 246, 46, 232, 202, 1, 215, 184, 232, 
+    202, 1, 215, 176, 232, 202, 1, 186, 232, 202, 1, 198, 232, 202, 1, 233, 
+    141, 232, 202, 1, 206, 232, 202, 1, 210, 82, 232, 202, 1, 210, 116, 232, 
+    202, 1, 229, 82, 232, 202, 1, 162, 232, 202, 1, 211, 165, 232, 202, 1, 
+    241, 196, 232, 202, 1, 244, 204, 232, 202, 1, 212, 65, 232, 202, 1, 220, 
+    104, 232, 202, 1, 192, 232, 202, 1, 243, 0, 232, 202, 1, 61, 232, 202, 1, 
+    254, 252, 232, 202, 1, 76, 232, 202, 1, 245, 63, 232, 202, 1, 74, 232, 
+    202, 1, 78, 232, 202, 1, 69, 232, 202, 1, 214, 214, 232, 202, 1, 214, 
+    208, 232, 202, 1, 226, 238, 232, 202, 1, 138, 230, 37, 216, 118, 232, 
+    202, 1, 138, 229, 234, 225, 19, 232, 202, 1, 138, 230, 37, 249, 80, 232, 
+    202, 1, 138, 230, 37, 251, 213, 232, 202, 1, 138, 230, 37, 198, 232, 202, 
+    1, 138, 230, 37, 235, 121, 232, 202, 224, 144, 249, 227, 232, 202, 224, 
+    144, 243, 236, 218, 131, 41, 3, 245, 217, 41, 3, 245, 213, 41, 3, 241, 
+    227, 41, 3, 212, 17, 41, 3, 212, 16, 41, 3, 225, 214, 41, 3, 252, 21, 41, 
+    3, 252, 74, 41, 3, 231, 121, 41, 3, 233, 253, 41, 3, 231, 11, 41, 3, 243, 
+    82, 41, 3, 244, 155, 41, 3, 213, 250, 41, 3, 217, 12, 41, 3, 216, 195, 
+    41, 3, 248, 24, 41, 3, 248, 21, 41, 3, 233, 56, 41, 3, 223, 111, 41, 3, 
+    248, 85, 41, 3, 229, 144, 41, 3, 221, 172, 41, 3, 220, 63, 41, 3, 210, 
+    92, 41, 3, 210, 73, 41, 3, 250, 190, 41, 3, 235, 130, 41, 3, 228, 181, 
+    41, 3, 211, 44, 41, 3, 234, 187, 41, 3, 229, 56, 41, 3, 243, 62, 41, 3, 
+    231, 85, 41, 3, 229, 108, 41, 3, 227, 159, 41, 3, 74, 41, 3, 236, 6, 41, 
+    3, 241, 187, 41, 3, 241, 167, 41, 3, 211, 250, 41, 3, 211, 241, 41, 3, 
+    225, 111, 41, 3, 252, 19, 41, 3, 252, 14, 41, 3, 231, 114, 41, 3, 233, 
+    250, 41, 3, 231, 8, 41, 3, 243, 78, 41, 3, 244, 129, 41, 3, 213, 176, 41, 
+    3, 216, 118, 41, 3, 216, 176, 41, 3, 248, 16, 41, 3, 248, 20, 41, 3, 232, 
+    247, 41, 3, 223, 38, 41, 3, 248, 11, 41, 3, 229, 138, 41, 3, 219, 193, 
+    41, 3, 220, 34, 41, 3, 210, 44, 41, 3, 210, 69, 41, 3, 250, 59, 41, 3, 
+    235, 114, 41, 3, 228, 174, 41, 3, 211, 8, 41, 3, 234, 98, 41, 3, 229, 48, 
+    41, 3, 242, 221, 41, 3, 230, 235, 41, 3, 228, 238, 41, 3, 227, 152, 41, 
+    3, 61, 41, 3, 254, 131, 41, 3, 229, 77, 41, 3, 162, 41, 3, 242, 25, 41, 
+    3, 212, 65, 41, 3, 212, 55, 41, 3, 191, 41, 3, 252, 26, 41, 3, 252, 199, 
+    41, 3, 231, 129, 41, 3, 234, 1, 41, 3, 234, 0, 41, 3, 231, 15, 41, 3, 
+    243, 86, 41, 3, 244, 204, 41, 3, 214, 27, 41, 3, 217, 106, 41, 3, 216, 
+    209, 41, 3, 248, 33, 41, 3, 248, 23, 41, 3, 233, 141, 41, 3, 205, 41, 3, 
+    248, 229, 41, 3, 229, 153, 41, 3, 206, 41, 3, 220, 104, 41, 3, 210, 116, 
+    41, 3, 210, 82, 41, 3, 251, 41, 41, 3, 235, 147, 41, 3, 228, 190, 41, 3, 
+    192, 41, 3, 176, 41, 3, 234, 240, 41, 3, 229, 61, 41, 3, 243, 142, 41, 3, 
+    186, 41, 3, 198, 41, 3, 227, 169, 41, 3, 226, 187, 41, 3, 226, 183, 41, 
+    3, 241, 60, 41, 3, 211, 215, 41, 3, 211, 211, 41, 3, 224, 252, 41, 3, 
+    252, 17, 41, 3, 251, 201, 41, 3, 231, 109, 41, 3, 233, 248, 41, 3, 231, 
+    4, 41, 3, 243, 74, 41, 3, 244, 42, 41, 3, 213, 127, 41, 3, 216, 18, 41, 
+    3, 216, 154, 41, 3, 248, 14, 41, 3, 248, 18, 41, 3, 232, 133, 41, 3, 222, 
+    199, 41, 3, 247, 133, 41, 3, 229, 125, 41, 3, 219, 42, 41, 3, 220, 3, 41, 
+    3, 210, 21, 41, 3, 210, 66, 41, 3, 249, 182, 41, 3, 235, 65, 41, 3, 228, 
+    164, 41, 3, 210, 229, 41, 3, 234, 16, 41, 3, 229, 46, 41, 3, 242, 171, 
+    41, 3, 230, 137, 41, 3, 228, 69, 41, 3, 227, 136, 41, 3, 69, 41, 3, 214, 
+    190, 41, 3, 240, 229, 41, 3, 240, 219, 41, 3, 211, 195, 41, 3, 211, 189, 
+    41, 3, 224, 153, 41, 3, 252, 16, 41, 3, 251, 133, 41, 3, 231, 108, 41, 3, 
+    233, 246, 41, 3, 231, 3, 41, 3, 243, 73, 41, 3, 243, 241, 41, 3, 212, 
+    116, 41, 3, 215, 119, 41, 3, 216, 137, 41, 3, 248, 12, 41, 3, 248, 17, 
+    41, 3, 232, 103, 41, 3, 222, 142, 41, 3, 246, 86, 41, 3, 229, 120, 41, 3, 
+    218, 84, 41, 3, 219, 227, 41, 3, 210, 13, 41, 3, 210, 62, 41, 3, 249, 
+    120, 41, 3, 235, 57, 41, 3, 228, 160, 41, 3, 210, 212, 41, 3, 233, 223, 
+    41, 3, 229, 45, 41, 3, 242, 120, 41, 3, 230, 107, 41, 3, 227, 242, 41, 3, 
+    227, 132, 41, 3, 78, 41, 3, 226, 200, 41, 3, 229, 5, 41, 3, 241, 75, 41, 
+    3, 241, 63, 41, 3, 211, 227, 41, 3, 211, 216, 41, 3, 225, 19, 41, 3, 252, 
+    18, 41, 3, 251, 213, 41, 3, 231, 110, 41, 3, 233, 249, 41, 3, 231, 6, 41, 
+    3, 243, 76, 41, 3, 243, 75, 41, 3, 244, 51, 41, 3, 213, 138, 41, 3, 112, 
+    41, 3, 216, 157, 41, 3, 248, 15, 41, 3, 248, 19, 41, 3, 232, 162, 41, 3, 
+    222, 213, 41, 3, 247, 153, 41, 3, 229, 129, 41, 3, 219, 60, 41, 3, 220, 
+    9, 41, 3, 210, 23, 41, 3, 210, 67, 41, 3, 249, 246, 41, 3, 235, 74, 41, 
+    3, 228, 165, 41, 3, 210, 244, 41, 3, 234, 34, 41, 3, 229, 47, 41, 3, 242, 
+    181, 41, 3, 230, 166, 41, 3, 228, 79, 41, 3, 227, 138, 41, 3, 76, 41, 3, 
+    245, 158, 41, 3, 229, 66, 41, 3, 241, 245, 41, 3, 241, 216, 41, 3, 212, 
+    22, 41, 3, 212, 12, 41, 3, 225, 224, 41, 3, 252, 22, 41, 3, 252, 83, 41, 
+    3, 231, 122, 41, 3, 233, 254, 41, 3, 233, 252, 41, 3, 231, 12, 41, 3, 
+    243, 83, 41, 3, 243, 81, 41, 3, 244, 162, 41, 3, 213, 255, 41, 3, 217, 
+    23, 41, 3, 216, 196, 41, 3, 248, 25, 41, 3, 248, 22, 41, 3, 233, 64, 41, 
+    3, 223, 131, 41, 3, 248, 98, 41, 3, 229, 145, 41, 3, 221, 183, 41, 3, 
+    220, 65, 41, 3, 210, 94, 41, 3, 210, 74, 41, 3, 250, 198, 41, 3, 235, 
+    132, 41, 3, 228, 183, 41, 3, 211, 47, 41, 3, 234, 188, 41, 3, 229, 57, 
+    41, 3, 229, 53, 41, 3, 243, 69, 41, 3, 243, 58, 41, 3, 231, 96, 41, 3, 
+    229, 112, 41, 3, 227, 160, 41, 3, 229, 84, 41, 3, 233, 28, 41, 249, 227, 
+    41, 243, 236, 218, 131, 41, 224, 16, 79, 41, 3, 229, 128, 244, 204, 41, 
+    3, 229, 128, 176, 41, 3, 229, 128, 219, 42, 41, 16, 244, 152, 41, 16, 
+    234, 186, 41, 16, 216, 82, 41, 16, 228, 213, 41, 16, 252, 155, 41, 16, 
+    244, 203, 41, 16, 217, 102, 41, 16, 248, 184, 41, 16, 247, 132, 41, 16, 
+    233, 212, 41, 16, 216, 22, 41, 16, 247, 152, 41, 16, 235, 66, 41, 21, 
+    210, 86, 41, 21, 111, 41, 21, 105, 41, 21, 158, 41, 21, 161, 41, 21, 190, 
+    41, 21, 195, 41, 21, 199, 41, 21, 196, 41, 21, 201, 41, 3, 229, 128, 186, 
+    41, 3, 229, 128, 247, 153, 33, 6, 1, 210, 90, 33, 4, 1, 210, 90, 33, 6, 
+    1, 246, 42, 33, 4, 1, 246, 42, 33, 6, 1, 223, 52, 246, 44, 33, 4, 1, 223, 
+    52, 246, 44, 33, 6, 1, 235, 192, 33, 4, 1, 235, 192, 33, 6, 1, 247, 169, 
+    33, 4, 1, 247, 169, 33, 6, 1, 230, 145, 214, 205, 33, 4, 1, 230, 145, 
+    214, 205, 33, 6, 1, 251, 144, 226, 205, 33, 4, 1, 251, 144, 226, 205, 33, 
+    6, 1, 229, 92, 211, 31, 33, 4, 1, 229, 92, 211, 31, 33, 6, 1, 211, 28, 2, 
+    252, 193, 211, 31, 33, 4, 1, 211, 28, 2, 252, 193, 211, 31, 33, 6, 1, 
+    235, 190, 211, 59, 33, 4, 1, 235, 190, 211, 59, 33, 6, 1, 223, 52, 210, 
+    212, 33, 4, 1, 223, 52, 210, 212, 33, 6, 1, 235, 190, 61, 33, 4, 1, 235, 
+    190, 61, 33, 6, 1, 250, 8, 232, 198, 210, 183, 33, 4, 1, 250, 8, 232, 
+    198, 210, 183, 33, 6, 1, 251, 222, 210, 183, 33, 4, 1, 251, 222, 210, 
+    183, 33, 6, 1, 235, 190, 250, 8, 232, 198, 210, 183, 33, 4, 1, 235, 190, 
+    250, 8, 232, 198, 210, 183, 33, 6, 1, 210, 246, 33, 4, 1, 210, 246, 33, 
+    6, 1, 223, 52, 215, 179, 33, 4, 1, 223, 52, 215, 179, 33, 6, 1, 219, 54, 
+    248, 98, 33, 4, 1, 219, 54, 248, 98, 33, 6, 1, 219, 54, 245, 182, 33, 4, 
+    1, 219, 54, 245, 182, 33, 6, 1, 219, 54, 245, 167, 33, 4, 1, 219, 54, 
+    245, 167, 33, 6, 1, 230, 149, 78, 33, 4, 1, 230, 149, 78, 33, 6, 1, 251, 
+    248, 78, 33, 4, 1, 251, 248, 78, 33, 6, 1, 52, 230, 149, 78, 33, 4, 1, 
+    52, 230, 149, 78, 33, 1, 230, 91, 78, 38, 33, 212, 100, 38, 33, 216, 249, 
+    230, 196, 50, 38, 33, 240, 218, 230, 196, 50, 38, 33, 216, 149, 230, 196, 
+    50, 219, 95, 253, 224, 38, 33, 1, 214, 202, 236, 67, 38, 33, 1, 74, 38, 
+    33, 1, 211, 8, 38, 33, 1, 69, 38, 33, 1, 242, 10, 50, 38, 33, 1, 211, 27, 
+    38, 33, 1, 219, 54, 50, 38, 33, 1, 226, 205, 38, 33, 234, 198, 38, 33, 
+    225, 231, 33, 234, 198, 33, 225, 231, 33, 6, 1, 246, 54, 33, 4, 1, 246, 
+    54, 33, 6, 1, 246, 35, 33, 4, 1, 246, 35, 33, 6, 1, 210, 52, 33, 4, 1, 
+    210, 52, 33, 6, 1, 250, 214, 33, 4, 1, 250, 214, 33, 6, 1, 246, 33, 33, 
+    4, 1, 246, 33, 33, 6, 1, 217, 24, 2, 230, 229, 103, 33, 4, 1, 217, 24, 2, 
+    230, 229, 103, 33, 6, 1, 215, 78, 33, 4, 1, 215, 78, 33, 6, 1, 215, 161, 
+    33, 4, 1, 215, 161, 33, 6, 1, 215, 165, 33, 4, 1, 215, 165, 33, 6, 1, 
+    217, 29, 33, 4, 1, 217, 29, 33, 6, 1, 240, 205, 33, 4, 1, 240, 205, 33, 
+    6, 1, 219, 208, 33, 4, 1, 219, 208, 38, 33, 1, 235, 190, 76, 20, 1, 61, 
+    20, 1, 176, 20, 1, 69, 20, 1, 233, 223, 20, 1, 245, 217, 20, 1, 223, 111, 
+    20, 1, 217, 87, 20, 1, 78, 20, 1, 227, 152, 20, 1, 74, 20, 1, 233, 141, 
+    20, 1, 191, 20, 1, 222, 242, 20, 1, 223, 32, 20, 1, 233, 55, 20, 1, 231, 
+    84, 20, 1, 217, 102, 20, 1, 229, 151, 20, 1, 228, 188, 20, 1, 194, 20, 1, 
+    218, 5, 20, 1, 230, 107, 20, 1, 220, 29, 20, 1, 219, 193, 20, 1, 220, 39, 
+    20, 1, 220, 125, 20, 1, 233, 161, 20, 1, 234, 162, 20, 1, 227, 213, 20, 
+    1, 227, 242, 20, 1, 228, 159, 20, 1, 210, 226, 20, 1, 219, 227, 20, 1, 
+    210, 187, 20, 1, 192, 20, 1, 228, 14, 20, 1, 234, 148, 20, 1, 225, 154, 
+    20, 1, 228, 181, 20, 1, 227, 251, 20, 1, 224, 147, 20, 1, 211, 192, 20, 
+    1, 225, 214, 20, 1, 244, 155, 20, 1, 222, 142, 20, 1, 232, 103, 20, 1, 
+    230, 235, 20, 1, 228, 238, 20, 1, 223, 54, 20, 1, 223, 174, 20, 1, 234, 
+    171, 20, 1, 229, 12, 20, 1, 229, 61, 20, 1, 229, 82, 20, 1, 220, 9, 20, 
+    1, 224, 150, 20, 1, 243, 241, 20, 1, 244, 45, 20, 1, 212, 65, 20, 1, 198, 
+    20, 1, 232, 247, 20, 1, 225, 111, 20, 1, 232, 125, 20, 1, 234, 34, 20, 1, 
+    231, 119, 20, 1, 223, 86, 20, 1, 231, 63, 20, 1, 186, 20, 1, 216, 118, 
+    20, 1, 234, 98, 20, 1, 230, 166, 20, 1, 231, 127, 20, 1, 216, 231, 20, 1, 
+    234, 1, 20, 1, 216, 248, 20, 1, 227, 243, 20, 1, 221, 253, 20, 1, 244, 
+    200, 20, 1, 234, 3, 20, 1, 234, 30, 20, 38, 164, 234, 11, 20, 38, 164, 
+    215, 111, 20, 228, 187, 20, 243, 236, 218, 131, 20, 249, 234, 20, 249, 
+    227, 20, 220, 152, 20, 224, 16, 79, 58, 1, 250, 104, 138, 210, 254, 225, 
+    64, 58, 1, 250, 104, 138, 211, 70, 225, 64, 58, 1, 250, 104, 138, 210, 
+    254, 220, 86, 58, 1, 250, 104, 138, 211, 70, 220, 86, 58, 1, 250, 104, 
+    138, 210, 254, 224, 33, 58, 1, 250, 104, 138, 211, 70, 224, 33, 58, 1, 
+    250, 104, 138, 210, 254, 222, 142, 58, 1, 250, 104, 138, 211, 70, 222, 
+    142, 58, 1, 245, 28, 246, 126, 138, 130, 58, 1, 125, 246, 126, 138, 130, 
+    58, 1, 230, 230, 246, 126, 138, 130, 58, 1, 121, 246, 126, 138, 130, 58, 
+    1, 245, 27, 246, 126, 138, 130, 58, 1, 245, 28, 246, 126, 233, 45, 138, 
+    130, 58, 1, 125, 246, 126, 233, 45, 138, 130, 58, 1, 230, 230, 246, 126, 
+    233, 45, 138, 130, 58, 1, 121, 246, 126, 233, 45, 138, 130, 58, 1, 245, 
+    27, 246, 126, 233, 45, 138, 130, 58, 1, 245, 28, 233, 45, 138, 130, 58, 
+    1, 125, 233, 45, 138, 130, 58, 1, 230, 230, 233, 45, 138, 130, 58, 1, 
+    121, 233, 45, 138, 130, 58, 1, 245, 27, 233, 45, 138, 130, 58, 1, 59, 67, 
+    130, 58, 1, 59, 219, 97, 58, 1, 59, 203, 130, 58, 1, 232, 114, 44, 249, 
+    169, 254, 117, 58, 1, 223, 160, 120, 75, 58, 1, 223, 160, 124, 75, 58, 1, 
+    223, 160, 245, 39, 79, 58, 1, 223, 160, 235, 200, 245, 39, 79, 58, 1, 
+    121, 235, 200, 245, 39, 79, 58, 1, 218, 113, 22, 125, 216, 31, 58, 1, 
+    218, 113, 22, 121, 216, 31, 7, 6, 1, 245, 207, 254, 179, 7, 4, 1, 245, 
+    207, 254, 179, 7, 6, 1, 245, 207, 254, 205, 7, 4, 1, 245, 207, 254, 205, 
+    7, 6, 1, 241, 214, 7, 4, 1, 241, 214, 7, 6, 1, 215, 40, 7, 4, 1, 215, 40, 
+    7, 6, 1, 215, 230, 7, 4, 1, 215, 230, 7, 6, 1, 249, 118, 7, 4, 1, 249, 
+    118, 7, 6, 1, 249, 119, 2, 249, 227, 7, 4, 1, 249, 119, 2, 249, 227, 7, 
+    1, 4, 6, 245, 14, 7, 1, 4, 6, 222, 93, 7, 6, 1, 255, 82, 7, 4, 1, 255, 
+    82, 7, 6, 1, 254, 81, 7, 4, 1, 254, 81, 7, 6, 1, 253, 200, 7, 4, 1, 253, 
+    200, 7, 6, 1, 253, 184, 7, 4, 1, 253, 184, 7, 6, 1, 253, 185, 2, 203, 
+    130, 7, 4, 1, 253, 185, 2, 203, 130, 7, 6, 1, 253, 175, 7, 4, 1, 253, 
+    175, 7, 6, 1, 223, 52, 251, 75, 2, 247, 128, 7, 4, 1, 223, 52, 251, 75, 
+    2, 247, 128, 7, 6, 1, 235, 30, 2, 91, 7, 4, 1, 235, 30, 2, 91, 7, 6, 1, 
+    235, 30, 2, 248, 7, 91, 7, 4, 1, 235, 30, 2, 248, 7, 91, 7, 6, 1, 235, 
+    30, 2, 218, 105, 22, 248, 7, 91, 7, 4, 1, 235, 30, 2, 218, 105, 22, 248, 
+    7, 91, 7, 6, 1, 251, 143, 156, 7, 4, 1, 251, 143, 156, 7, 6, 1, 233, 155, 
+    2, 125, 91, 7, 4, 1, 233, 155, 2, 125, 91, 7, 6, 1, 144, 2, 200, 218, 
+    105, 226, 124, 7, 4, 1, 144, 2, 200, 218, 105, 226, 124, 7, 6, 1, 144, 2, 
+    232, 129, 7, 4, 1, 144, 2, 232, 129, 7, 6, 1, 226, 187, 7, 4, 1, 226, 
+    187, 7, 6, 1, 226, 110, 2, 218, 105, 216, 140, 248, 47, 7, 4, 1, 226, 
+    110, 2, 218, 105, 216, 140, 248, 47, 7, 6, 1, 226, 110, 2, 244, 61, 7, 4, 
+    1, 226, 110, 2, 244, 61, 7, 6, 1, 226, 110, 2, 218, 231, 217, 78, 7, 4, 
+    1, 226, 110, 2, 218, 231, 217, 78, 7, 6, 1, 224, 100, 2, 218, 105, 216, 
+    140, 248, 47, 7, 4, 1, 224, 100, 2, 218, 105, 216, 140, 248, 47, 7, 6, 1, 
+    224, 100, 2, 248, 7, 91, 7, 4, 1, 224, 100, 2, 248, 7, 91, 7, 6, 1, 223, 
+    227, 222, 188, 7, 4, 1, 223, 227, 222, 188, 7, 6, 1, 222, 132, 222, 188, 
+    7, 4, 1, 222, 132, 222, 188, 7, 6, 1, 214, 106, 2, 248, 7, 91, 7, 4, 1, 
+    214, 106, 2, 248, 7, 91, 7, 6, 1, 212, 106, 7, 4, 1, 212, 106, 7, 6, 1, 
+    213, 145, 210, 159, 7, 4, 1, 213, 145, 210, 159, 7, 6, 1, 216, 153, 2, 
+    91, 7, 4, 1, 216, 153, 2, 91, 7, 6, 1, 216, 153, 2, 218, 105, 216, 140, 
+    248, 47, 7, 4, 1, 216, 153, 2, 218, 105, 216, 140, 248, 47, 7, 6, 1, 213, 
+    245, 7, 4, 1, 213, 245, 7, 6, 1, 245, 73, 7, 4, 1, 245, 73, 7, 6, 1, 235, 
+    178, 7, 4, 1, 235, 178, 7, 6, 1, 249, 215, 7, 4, 1, 249, 215, 58, 1, 214, 
+    133, 7, 4, 1, 246, 77, 7, 4, 1, 232, 89, 7, 4, 1, 230, 85, 7, 4, 1, 227, 
+    205, 7, 4, 1, 222, 131, 7, 1, 4, 6, 222, 131, 7, 4, 1, 215, 109, 7, 4, 1, 
+    214, 197, 7, 6, 1, 235, 220, 249, 68, 7, 4, 1, 235, 220, 249, 68, 7, 6, 
+    1, 235, 220, 245, 14, 7, 4, 1, 235, 220, 245, 14, 7, 6, 1, 235, 220, 243, 
+    209, 7, 6, 1, 215, 94, 235, 220, 243, 209, 7, 4, 1, 215, 94, 235, 220, 
+    243, 209, 7, 6, 1, 215, 94, 156, 7, 4, 1, 215, 94, 156, 7, 6, 1, 235, 
+    220, 153, 7, 4, 1, 235, 220, 153, 7, 6, 1, 235, 220, 222, 93, 7, 4, 1, 
+    235, 220, 222, 93, 7, 6, 1, 235, 220, 217, 153, 7, 4, 1, 235, 220, 217, 
+    153, 58, 1, 121, 250, 39, 255, 23, 58, 1, 249, 234, 58, 1, 219, 253, 245, 
+    106, 50, 7, 6, 1, 222, 1, 7, 4, 1, 222, 1, 7, 6, 1, 215, 94, 242, 67, 7, 
+    4, 1, 233, 155, 2, 223, 58, 241, 59, 22, 252, 49, 7, 6, 1, 230, 31, 2, 
+    248, 47, 7, 4, 1, 230, 31, 2, 248, 47, 7, 6, 1, 251, 75, 2, 130, 7, 4, 1, 
+    251, 75, 2, 130, 7, 6, 1, 243, 210, 2, 226, 252, 91, 7, 4, 1, 243, 210, 
+    2, 226, 252, 91, 7, 6, 1, 235, 30, 2, 226, 252, 91, 7, 4, 1, 235, 30, 2, 
+    226, 252, 91, 7, 6, 1, 230, 31, 2, 226, 252, 91, 7, 4, 1, 230, 31, 2, 
+    226, 252, 91, 7, 6, 1, 223, 227, 2, 226, 252, 91, 7, 4, 1, 223, 227, 2, 
+    226, 252, 91, 7, 6, 1, 222, 94, 2, 226, 252, 91, 7, 4, 1, 222, 94, 2, 
+    226, 252, 91, 7, 6, 1, 242, 68, 2, 103, 58, 1, 6, 242, 68, 2, 91, 58, 1, 
+    4, 27, 226, 238, 7, 1, 4, 6, 215, 94, 194, 7, 245, 111, 1, 223, 52, 245, 
+    14, 7, 245, 111, 1, 223, 52, 226, 109, 7, 245, 111, 1, 235, 200, 194, 7, 
+    245, 111, 1, 240, 161, 232, 135, 7, 245, 111, 1, 254, 31, 194, 217, 231, 
+    229, 219, 1, 61, 217, 231, 229, 219, 1, 74, 217, 231, 229, 219, 5, 246, 
+    56, 217, 231, 229, 219, 1, 69, 217, 231, 229, 219, 1, 76, 217, 231, 229, 
+    219, 1, 78, 217, 231, 229, 219, 5, 242, 4, 217, 231, 229, 219, 1, 234, 
+    34, 217, 231, 229, 219, 1, 234, 111, 217, 231, 229, 219, 1, 242, 181, 
+    217, 231, 229, 219, 1, 242, 231, 217, 231, 229, 219, 5, 254, 83, 217, 
+    231, 229, 219, 1, 249, 246, 217, 231, 229, 219, 1, 250, 94, 217, 231, 
+    229, 219, 1, 235, 74, 217, 231, 229, 219, 1, 235, 115, 217, 231, 229, 
+    219, 1, 215, 134, 217, 231, 229, 219, 1, 215, 140, 217, 231, 229, 219, 1, 
+    248, 113, 217, 231, 229, 219, 1, 248, 122, 217, 231, 229, 219, 1, 112, 
+    217, 231, 229, 219, 1, 216, 157, 217, 231, 229, 219, 1, 247, 153, 217, 
+    231, 229, 219, 1, 248, 15, 217, 231, 229, 219, 1, 228, 79, 217, 231, 229, 
+    219, 1, 225, 19, 217, 231, 229, 219, 1, 225, 124, 217, 231, 229, 219, 1, 
+    251, 213, 217, 231, 229, 219, 1, 252, 18, 217, 231, 229, 219, 1, 230, 
+    166, 217, 231, 229, 219, 1, 222, 213, 217, 231, 229, 219, 1, 232, 162, 
+    217, 231, 229, 219, 1, 222, 167, 217, 231, 229, 219, 1, 219, 60, 217, 
+    231, 229, 219, 1, 241, 75, 217, 231, 229, 219, 25, 5, 61, 217, 231, 229, 
+    219, 25, 5, 74, 217, 231, 229, 219, 25, 5, 69, 217, 231, 229, 219, 25, 5, 
+    76, 217, 231, 229, 219, 25, 5, 226, 187, 217, 231, 229, 219, 225, 15, 
+    231, 163, 217, 231, 229, 219, 225, 15, 231, 162, 217, 231, 229, 219, 225, 
+    15, 231, 161, 217, 231, 229, 219, 225, 15, 231, 160, 228, 61, 235, 247, 
+    244, 10, 123, 224, 24, 228, 61, 235, 247, 244, 10, 123, 242, 34, 228, 61, 
+    235, 247, 244, 10, 134, 224, 22, 228, 61, 235, 247, 244, 10, 123, 219, 
+    119, 228, 61, 235, 247, 244, 10, 123, 245, 196, 228, 61, 235, 247, 244, 
+    10, 134, 219, 118, 228, 61, 235, 247, 224, 25, 79, 228, 61, 235, 247, 
+    225, 43, 79, 228, 61, 235, 247, 222, 120, 79, 228, 61, 235, 247, 224, 26, 
+    79, 225, 147, 1, 176, 225, 147, 1, 234, 138, 225, 147, 1, 243, 142, 225, 
+    147, 1, 229, 82, 225, 147, 1, 251, 41, 225, 147, 1, 250, 165, 225, 147, 
+    1, 235, 147, 225, 147, 1, 227, 169, 225, 147, 1, 217, 106, 225, 147, 1, 
+    216, 209, 225, 147, 1, 248, 229, 225, 147, 1, 198, 225, 147, 1, 191, 225, 
+    147, 1, 225, 150, 225, 147, 1, 252, 199, 225, 147, 1, 186, 225, 147, 1, 
+    215, 184, 225, 147, 1, 215, 176, 225, 147, 1, 246, 46, 225, 147, 1, 212, 
+    65, 225, 147, 1, 210, 82, 225, 147, 1, 210, 116, 225, 147, 1, 4, 61, 225, 
+    147, 1, 192, 225, 147, 1, 205, 225, 147, 1, 233, 141, 225, 147, 1, 220, 
+    104, 225, 147, 1, 206, 225, 147, 1, 162, 225, 147, 1, 61, 225, 147, 1, 
+    74, 225, 147, 1, 69, 225, 147, 1, 76, 225, 147, 1, 78, 225, 147, 1, 224, 
+    91, 225, 147, 1, 211, 165, 225, 147, 1, 244, 204, 225, 147, 1, 243, 36, 
+    225, 147, 1, 245, 217, 225, 147, 218, 74, 1, 212, 65, 225, 147, 218, 74, 
+    1, 192, 225, 147, 1, 215, 157, 225, 147, 1, 215, 145, 225, 147, 1, 248, 
+    143, 225, 147, 1, 228, 115, 225, 147, 1, 254, 149, 192, 225, 147, 1, 213, 
+    134, 220, 104, 225, 147, 1, 213, 135, 162, 225, 147, 1, 253, 231, 244, 
+    204, 225, 147, 218, 74, 1, 205, 225, 147, 218, 26, 1, 205, 225, 147, 1, 
+    251, 7, 225, 147, 219, 157, 241, 243, 79, 225, 147, 52, 241, 243, 79, 
+    225, 147, 164, 220, 97, 225, 147, 164, 52, 220, 97, 179, 5, 254, 83, 179, 
+    5, 213, 147, 179, 1, 61, 179, 1, 255, 82, 179, 1, 74, 179, 1, 236, 40, 
+    179, 1, 69, 179, 1, 214, 118, 179, 1, 149, 153, 179, 1, 149, 222, 182, 
+    179, 1, 149, 156, 179, 1, 149, 232, 191, 179, 1, 76, 179, 1, 245, 217, 
+    179, 1, 254, 210, 179, 1, 78, 179, 1, 226, 187, 179, 1, 253, 200, 179, 1, 
+    176, 179, 1, 234, 138, 179, 1, 243, 142, 179, 1, 243, 0, 179, 1, 229, 82, 
+    179, 1, 251, 41, 179, 1, 250, 165, 179, 1, 235, 147, 179, 1, 235, 120, 
+    179, 1, 227, 169, 179, 1, 215, 157, 179, 1, 215, 145, 179, 1, 248, 143, 
+    179, 1, 248, 127, 179, 1, 228, 115, 179, 1, 217, 106, 179, 1, 216, 209, 
+    179, 1, 248, 229, 179, 1, 248, 33, 179, 1, 198, 179, 1, 191, 179, 1, 225, 
+    150, 179, 1, 252, 199, 179, 1, 252, 26, 179, 1, 186, 179, 1, 192, 179, 1, 
+    205, 179, 1, 233, 141, 179, 1, 214, 27, 179, 1, 220, 104, 179, 1, 218, 
+    225, 179, 1, 206, 179, 1, 162, 179, 1, 232, 190, 179, 117, 5, 242, 51, 
+    179, 25, 5, 255, 82, 179, 25, 5, 74, 179, 25, 5, 236, 40, 179, 25, 5, 69, 
+    179, 25, 5, 214, 118, 179, 25, 5, 149, 153, 179, 25, 5, 149, 222, 182, 
+    179, 25, 5, 149, 156, 179, 25, 5, 149, 232, 191, 179, 25, 5, 76, 179, 25, 
+    5, 245, 217, 179, 25, 5, 254, 210, 179, 25, 5, 78, 179, 25, 5, 226, 187, 
+    179, 25, 5, 253, 200, 179, 5, 213, 152, 179, 248, 186, 179, 52, 248, 186, 
+    179, 21, 210, 86, 179, 21, 111, 179, 21, 105, 179, 21, 158, 179, 21, 161, 
+    179, 21, 190, 179, 21, 195, 179, 21, 199, 179, 21, 196, 179, 21, 201, 38, 
+    84, 21, 210, 86, 38, 84, 21, 111, 38, 84, 21, 105, 38, 84, 21, 158, 38, 
+    84, 21, 161, 38, 84, 21, 190, 38, 84, 21, 195, 38, 84, 21, 199, 38, 84, 
+    21, 196, 38, 84, 21, 201, 38, 84, 1, 61, 38, 84, 1, 69, 38, 84, 1, 176, 
+    38, 84, 1, 198, 38, 84, 1, 191, 38, 84, 1, 205, 38, 84, 1, 213, 176, 38, 
+    84, 5, 253, 183, 84, 5, 219, 19, 251, 7, 84, 5, 251, 8, 213, 152, 84, 5, 
+    52, 251, 8, 213, 152, 84, 5, 251, 8, 105, 84, 5, 251, 8, 158, 84, 5, 251, 
+    8, 253, 183, 84, 5, 224, 127, 84, 243, 107, 244, 111, 84, 250, 246, 84, 
+    241, 237, 234, 194, 232, 248, 21, 210, 86, 234, 194, 232, 248, 21, 111, 
+    234, 194, 232, 248, 21, 105, 234, 194, 232, 248, 21, 158, 234, 194, 232, 
+    248, 21, 161, 234, 194, 232, 248, 21, 190, 234, 194, 232, 248, 21, 195, 
+    234, 194, 232, 248, 21, 199, 234, 194, 232, 248, 21, 196, 234, 194, 232, 
+    248, 21, 201, 234, 194, 232, 248, 1, 176, 234, 194, 232, 248, 1, 234, 
+    138, 234, 194, 232, 248, 1, 243, 142, 234, 194, 232, 248, 1, 229, 82, 
+    234, 194, 232, 248, 1, 206, 234, 194, 232, 248, 1, 220, 104, 234, 194, 
+    232, 248, 1, 210, 116, 234, 194, 232, 248, 1, 227, 169, 234, 194, 232, 
+    248, 1, 217, 106, 234, 194, 232, 248, 1, 240, 233, 234, 194, 232, 248, 1, 
+    198, 234, 194, 232, 248, 1, 191, 234, 194, 232, 248, 1, 225, 150, 234, 
+    194, 232, 248, 1, 186, 234, 194, 232, 248, 1, 248, 229, 234, 194, 232, 
+    248, 1, 252, 199, 234, 194, 232, 248, 1, 205, 234, 194, 232, 248, 1, 192, 
+    234, 194, 232, 248, 1, 233, 141, 234, 194, 232, 248, 1, 212, 65, 234, 
+    194, 232, 248, 1, 216, 209, 234, 194, 232, 248, 1, 162, 234, 194, 232, 
+    248, 1, 214, 27, 234, 194, 232, 248, 1, 251, 41, 234, 194, 232, 248, 1, 
+    61, 234, 194, 232, 248, 1, 226, 238, 234, 194, 232, 248, 1, 74, 234, 194, 
+    232, 248, 1, 226, 187, 234, 194, 232, 248, 25, 214, 214, 234, 194, 232, 
+    248, 25, 76, 234, 194, 232, 248, 25, 69, 234, 194, 232, 248, 25, 245, 
+    217, 234, 194, 232, 248, 25, 78, 234, 194, 232, 248, 138, 225, 33, 234, 
+    194, 232, 248, 138, 251, 20, 234, 194, 232, 248, 138, 251, 21, 225, 33, 
+    234, 194, 232, 248, 5, 249, 85, 234, 194, 232, 248, 5, 219, 201, 223, 96, 
+    1, 176, 223, 96, 1, 243, 142, 223, 96, 1, 229, 82, 223, 96, 1, 217, 106, 
+    223, 96, 1, 248, 229, 223, 96, 1, 198, 223, 96, 1, 191, 223, 96, 1, 252, 
+    199, 223, 96, 1, 186, 223, 96, 1, 251, 41, 223, 96, 1, 235, 147, 223, 96, 
+    1, 227, 169, 223, 96, 1, 206, 223, 96, 1, 205, 223, 96, 1, 233, 141, 223, 
+    96, 1, 192, 223, 96, 1, 212, 65, 223, 96, 1, 162, 223, 96, 1, 231, 129, 
+    223, 96, 1, 229, 61, 223, 96, 1, 229, 153, 223, 96, 1, 227, 139, 223, 96, 
+    1, 61, 223, 96, 25, 5, 74, 223, 96, 25, 5, 69, 223, 96, 25, 5, 76, 223, 
+    96, 25, 5, 254, 210, 223, 96, 25, 5, 78, 223, 96, 25, 5, 253, 200, 223, 
+    96, 25, 5, 245, 63, 223, 96, 25, 5, 245, 241, 223, 96, 117, 5, 229, 84, 
+    223, 96, 117, 5, 230, 30, 223, 96, 117, 5, 153, 223, 96, 117, 5, 242, 67, 
+    223, 96, 213, 152, 223, 96, 221, 175, 79, 24, 100, 216, 98, 24, 100, 216, 
+    97, 24, 100, 216, 95, 24, 100, 216, 100, 24, 100, 223, 24, 24, 100, 223, 
+    8, 24, 100, 223, 3, 24, 100, 223, 5, 24, 100, 223, 21, 24, 100, 223, 14, 
+    24, 100, 223, 7, 24, 100, 223, 26, 24, 100, 223, 9, 24, 100, 223, 28, 24, 
+    100, 223, 25, 24, 100, 230, 218, 24, 100, 230, 209, 24, 100, 230, 212, 
+    24, 100, 225, 83, 24, 100, 225, 94, 24, 100, 225, 95, 24, 100, 218, 209, 
+    24, 100, 236, 53, 24, 100, 236, 60, 24, 100, 218, 220, 24, 100, 218, 207, 
+    24, 100, 225, 133, 24, 100, 241, 174, 24, 100, 218, 204, 155, 5, 226, 31, 
+    155, 5, 250, 195, 155, 5, 233, 72, 155, 5, 211, 243, 155, 1, 61, 155, 1, 
+    240, 161, 234, 197, 155, 1, 74, 155, 1, 236, 40, 155, 1, 69, 155, 1, 226, 
+    94, 250, 171, 155, 1, 229, 83, 233, 34, 155, 1, 229, 83, 233, 35, 223, 
+    145, 155, 1, 76, 155, 1, 254, 210, 155, 1, 78, 155, 1, 176, 155, 1, 235, 
+    19, 221, 230, 155, 1, 235, 19, 230, 71, 155, 1, 243, 142, 155, 1, 243, 
+    143, 230, 71, 155, 1, 229, 82, 155, 1, 251, 41, 155, 1, 251, 42, 230, 71, 
+    155, 1, 235, 147, 155, 1, 227, 170, 230, 71, 155, 1, 235, 148, 231, 212, 
+    155, 1, 227, 169, 155, 1, 215, 157, 155, 1, 215, 158, 231, 212, 155, 1, 
+    248, 143, 155, 1, 248, 144, 231, 212, 155, 1, 229, 234, 230, 71, 155, 1, 
+    217, 106, 155, 1, 217, 107, 230, 71, 155, 1, 248, 229, 155, 1, 248, 230, 
+    231, 212, 155, 1, 198, 155, 1, 191, 155, 1, 226, 94, 230, 71, 155, 1, 
+    252, 199, 155, 1, 252, 200, 230, 71, 155, 1, 186, 155, 1, 192, 155, 1, 
+    205, 155, 1, 223, 191, 254, 219, 155, 1, 233, 141, 155, 1, 212, 65, 155, 
+    1, 222, 36, 230, 71, 155, 1, 222, 36, 231, 212, 155, 1, 206, 155, 1, 162, 
+    155, 5, 250, 196, 216, 251, 155, 25, 5, 217, 48, 155, 25, 5, 216, 36, 
+    155, 25, 5, 211, 190, 155, 25, 5, 211, 191, 231, 74, 155, 25, 5, 218, 48, 
+    155, 25, 5, 218, 49, 231, 62, 155, 25, 5, 217, 66, 155, 25, 5, 247, 202, 
+    230, 70, 155, 25, 5, 225, 187, 155, 117, 5, 234, 164, 155, 117, 5, 225, 
+    199, 155, 117, 5, 251, 27, 155, 226, 44, 155, 43, 223, 72, 155, 44, 223, 
+    72, 155, 226, 83, 254, 125, 155, 226, 83, 231, 229, 155, 226, 83, 232, 
+    93, 155, 226, 83, 211, 238, 155, 226, 83, 226, 45, 155, 226, 83, 232, 
+    211, 155, 226, 83, 232, 87, 155, 226, 83, 255, 2, 155, 226, 83, 255, 3, 
+    255, 2, 155, 226, 83, 225, 54, 155, 215, 94, 226, 83, 225, 54, 155, 226, 
+    40, 155, 21, 210, 86, 155, 21, 111, 155, 21, 105, 155, 21, 158, 155, 21, 
+    161, 155, 21, 190, 155, 21, 195, 155, 21, 199, 155, 21, 196, 155, 21, 
+    201, 155, 226, 83, 216, 70, 215, 107, 155, 226, 83, 235, 174, 172, 1, 61, 
+    172, 1, 74, 172, 1, 69, 172, 1, 76, 172, 1, 254, 210, 172, 1, 78, 172, 1, 
+    176, 172, 1, 234, 138, 172, 1, 243, 142, 172, 1, 243, 0, 172, 1, 228, 
+    250, 172, 1, 229, 82, 172, 1, 250, 165, 172, 1, 250, 120, 172, 1, 235, 
+    147, 172, 1, 235, 120, 172, 1, 228, 240, 172, 1, 228, 242, 172, 1, 228, 
+    241, 172, 1, 217, 106, 172, 1, 216, 209, 172, 1, 248, 229, 172, 1, 248, 
+    33, 172, 1, 227, 211, 172, 1, 198, 172, 1, 248, 143, 172, 1, 191, 172, 1, 
+    224, 223, 172, 1, 225, 150, 172, 1, 252, 199, 172, 1, 252, 26, 172, 1, 
+    230, 100, 172, 1, 186, 172, 1, 252, 119, 172, 1, 192, 172, 1, 205, 172, 
+    1, 233, 141, 172, 1, 214, 27, 172, 1, 218, 225, 172, 1, 206, 172, 1, 162, 
+    172, 25, 5, 255, 82, 172, 25, 5, 74, 172, 25, 5, 236, 40, 172, 25, 5, 
+    245, 203, 172, 25, 5, 69, 172, 25, 5, 226, 238, 172, 25, 5, 78, 172, 25, 
+    5, 254, 210, 172, 25, 5, 253, 200, 172, 25, 5, 214, 214, 172, 117, 5, 
+    192, 172, 117, 5, 205, 172, 117, 5, 233, 141, 172, 117, 5, 212, 65, 172, 
+    1, 40, 235, 29, 172, 1, 40, 243, 209, 172, 1, 40, 229, 84, 172, 117, 5, 
+    40, 229, 84, 172, 1, 40, 250, 166, 172, 1, 40, 217, 153, 172, 1, 40, 230, 
+    30, 172, 1, 40, 226, 109, 172, 1, 40, 211, 117, 172, 1, 40, 153, 172, 1, 
+    40, 156, 172, 1, 40, 218, 228, 172, 117, 5, 40, 194, 172, 117, 5, 40, 
+    242, 67, 172, 21, 210, 86, 172, 21, 111, 172, 21, 105, 172, 21, 158, 172, 
+    21, 161, 172, 21, 190, 172, 21, 195, 172, 21, 199, 172, 21, 196, 172, 21, 
+    201, 172, 224, 144, 218, 253, 172, 224, 144, 248, 186, 172, 224, 144, 52, 
+    248, 186, 172, 224, 144, 215, 212, 248, 186, 68, 1, 234, 132, 243, 142, 
+    68, 1, 234, 132, 251, 41, 68, 1, 234, 132, 250, 165, 68, 1, 234, 132, 
+    235, 147, 68, 1, 234, 132, 235, 120, 68, 1, 234, 132, 227, 169, 68, 1, 
+    234, 132, 215, 157, 68, 1, 234, 132, 215, 145, 68, 1, 234, 132, 248, 143, 
+    68, 1, 234, 132, 248, 127, 68, 1, 234, 132, 248, 33, 68, 1, 234, 132, 
+    198, 68, 1, 234, 132, 206, 68, 1, 234, 132, 162, 68, 1, 234, 132, 241, 
+    196, 68, 1, 234, 132, 244, 204, 68, 58, 1, 234, 132, 223, 112, 68, 1, 
+    234, 132, 211, 165, 68, 1, 234, 132, 210, 116, 68, 1, 234, 132, 205, 68, 
+    232, 151, 234, 132, 227, 1, 68, 232, 151, 234, 132, 224, 46, 68, 232, 
+    151, 234, 132, 241, 128, 68, 16, 254, 199, 245, 38, 68, 16, 254, 199, 
+    111, 68, 16, 254, 199, 105, 68, 1, 254, 199, 205, 68, 5, 226, 27, 234, 
+    219, 216, 31, 39, 208, 1, 121, 234, 34, 39, 208, 1, 125, 234, 34, 39, 
+    208, 1, 121, 234, 111, 39, 208, 1, 125, 234, 111, 39, 208, 1, 121, 234, 
+    120, 39, 208, 1, 125, 234, 120, 39, 208, 1, 121, 242, 181, 39, 208, 1, 
+    125, 242, 181, 39, 208, 1, 121, 229, 9, 39, 208, 1, 125, 229, 9, 39, 208, 
+    1, 121, 249, 246, 39, 208, 1, 125, 249, 246, 39, 208, 1, 121, 250, 94, 
+    39, 208, 1, 125, 250, 94, 39, 208, 1, 121, 219, 60, 39, 208, 1, 125, 219, 
+    60, 39, 208, 1, 121, 227, 138, 39, 208, 1, 125, 227, 138, 39, 208, 1, 
+    121, 247, 153, 39, 208, 1, 125, 247, 153, 39, 208, 1, 121, 112, 39, 208, 
+    1, 125, 112, 39, 208, 1, 121, 216, 157, 39, 208, 1, 125, 216, 157, 39, 
+    208, 1, 121, 228, 79, 39, 208, 1, 125, 228, 79, 39, 208, 1, 121, 251, 
+    213, 39, 208, 1, 125, 251, 213, 39, 208, 1, 121, 225, 19, 39, 208, 1, 
+    125, 225, 19, 39, 208, 1, 121, 225, 124, 39, 208, 1, 125, 225, 124, 39, 
+    208, 1, 121, 244, 51, 39, 208, 1, 125, 244, 51, 39, 208, 1, 121, 230, 
+    166, 39, 208, 1, 125, 230, 166, 39, 208, 1, 121, 210, 244, 39, 208, 1, 
+    125, 210, 244, 39, 208, 1, 121, 222, 213, 39, 208, 1, 125, 222, 213, 39, 
+    208, 1, 121, 232, 162, 39, 208, 1, 125, 232, 162, 39, 208, 1, 121, 213, 
+    138, 39, 208, 1, 125, 213, 138, 39, 208, 1, 121, 241, 75, 39, 208, 1, 
+    125, 241, 75, 39, 208, 1, 121, 78, 39, 208, 1, 125, 78, 39, 208, 231, 
+    209, 234, 236, 39, 208, 25, 255, 82, 39, 208, 25, 74, 39, 208, 25, 214, 
+    214, 39, 208, 25, 69, 39, 208, 25, 76, 39, 208, 25, 78, 39, 208, 231, 
+    209, 234, 114, 39, 208, 25, 240, 126, 39, 208, 25, 214, 213, 39, 208, 25, 
+    214, 229, 39, 208, 25, 253, 198, 39, 208, 25, 253, 175, 39, 208, 25, 254, 
+    131, 39, 208, 25, 254, 144, 39, 208, 138, 231, 209, 245, 188, 39, 208, 
+    138, 231, 209, 227, 210, 39, 208, 138, 231, 209, 216, 157, 39, 208, 138, 
+    231, 209, 219, 44, 39, 208, 16, 234, 19, 39, 208, 16, 227, 210, 39, 208, 
+    16, 221, 255, 39, 208, 16, 241, 76, 241, 71, 39, 208, 16, 234, 28, 234, 
+    27, 188, 187, 1, 76, 188, 187, 1, 78, 188, 187, 1, 250, 165, 188, 187, 1, 
+    227, 169, 188, 187, 1, 215, 157, 188, 187, 1, 215, 145, 188, 187, 1, 248, 
+    143, 188, 187, 1, 248, 127, 188, 187, 1, 228, 115, 188, 187, 1, 220, 104, 
+    188, 187, 1, 218, 225, 188, 187, 25, 5, 236, 40, 188, 187, 25, 5, 214, 
+    118, 188, 187, 25, 5, 255, 46, 188, 187, 25, 5, 253, 200, 188, 187, 25, 
+    5, 255, 39, 188, 187, 250, 133, 188, 187, 254, 215, 234, 104, 188, 187, 
+    254, 111, 188, 187, 3, 223, 77, 79, 188, 187, 211, 209, 223, 77, 79, 188, 
+    187, 25, 5, 213, 147, 188, 187, 213, 152, 29, 3, 215, 138, 29, 3, 215, 
+    141, 29, 3, 215, 144, 29, 3, 215, 142, 29, 3, 215, 143, 29, 3, 215, 140, 
+    29, 3, 248, 121, 29, 3, 248, 123, 29, 3, 248, 126, 29, 3, 248, 124, 29, 
+    3, 248, 125, 29, 3, 248, 122, 29, 3, 246, 36, 29, 3, 246, 39, 29, 3, 246, 
+    45, 29, 3, 246, 43, 29, 3, 246, 44, 29, 3, 246, 37, 29, 3, 250, 212, 29, 
+    3, 250, 206, 29, 3, 250, 208, 29, 3, 250, 211, 29, 3, 250, 209, 29, 3, 
+    250, 210, 29, 3, 250, 207, 29, 3, 252, 119, 29, 3, 252, 98, 29, 3, 252, 
+    110, 29, 3, 252, 118, 29, 3, 252, 113, 29, 3, 252, 114, 29, 3, 252, 102, 
+    188, 187, 1, 234, 25, 188, 187, 1, 221, 255, 188, 187, 1, 233, 115, 188, 
+    187, 1, 230, 177, 188, 187, 1, 191, 188, 187, 1, 198, 188, 187, 1, 250, 
+    110, 188, 187, 1, 216, 91, 188, 187, 1, 234, 107, 188, 187, 1, 228, 255, 
+    188, 187, 1, 216, 151, 188, 187, 1, 212, 60, 188, 187, 1, 211, 69, 188, 
+    187, 1, 240, 223, 188, 187, 1, 214, 190, 188, 187, 1, 74, 188, 187, 1, 
+    225, 145, 188, 187, 1, 253, 210, 188, 187, 1, 242, 174, 188, 187, 1, 235, 
+    118, 188, 187, 1, 223, 169, 188, 187, 1, 252, 199, 188, 187, 1, 235, 106, 
+    188, 187, 1, 247, 227, 188, 187, 1, 242, 228, 188, 187, 1, 248, 13, 188, 
+    187, 1, 252, 24, 188, 187, 1, 234, 26, 232, 134, 188, 187, 1, 233, 116, 
+    232, 134, 188, 187, 1, 230, 178, 232, 134, 188, 187, 1, 226, 94, 232, 
+    134, 188, 187, 1, 229, 234, 232, 134, 188, 187, 1, 216, 92, 232, 134, 
+    188, 187, 1, 229, 0, 232, 134, 188, 187, 1, 240, 161, 232, 134, 188, 187, 
+    25, 5, 226, 199, 188, 187, 25, 5, 236, 4, 188, 187, 25, 5, 254, 130, 188, 
+    187, 25, 5, 211, 38, 188, 187, 25, 5, 219, 34, 188, 187, 25, 5, 214, 187, 
+    188, 187, 25, 5, 250, 131, 188, 187, 25, 5, 227, 195, 188, 187, 250, 132, 
+    188, 187, 232, 90, 235, 156, 188, 187, 254, 54, 235, 156, 188, 187, 21, 
+    210, 86, 188, 187, 21, 111, 188, 187, 21, 105, 188, 187, 21, 158, 188, 
+    187, 21, 161, 188, 187, 21, 190, 188, 187, 21, 195, 188, 187, 21, 199, 
+    188, 187, 21, 196, 188, 187, 21, 201, 24, 143, 227, 81, 24, 143, 227, 86, 
+    24, 143, 210, 243, 24, 143, 210, 242, 24, 143, 210, 241, 24, 143, 215, 
+    23, 24, 143, 215, 26, 24, 143, 210, 210, 24, 143, 210, 206, 24, 143, 245, 
+    62, 24, 143, 245, 60, 24, 143, 245, 61, 24, 143, 245, 58, 24, 143, 240, 
+    151, 24, 143, 240, 150, 24, 143, 240, 148, 24, 143, 240, 149, 24, 143, 
+    240, 154, 24, 143, 240, 147, 24, 143, 240, 146, 24, 143, 240, 156, 24, 
+    143, 254, 41, 24, 143, 254, 40, 24, 90, 228, 224, 24, 90, 228, 230, 24, 
+    90, 218, 206, 24, 90, 218, 205, 24, 90, 216, 97, 24, 90, 216, 95, 24, 90, 
+    216, 94, 24, 90, 216, 100, 24, 90, 216, 101, 24, 90, 216, 93, 24, 90, 
+    223, 8, 24, 90, 223, 23, 24, 90, 218, 212, 24, 90, 223, 20, 24, 90, 223, 
+    10, 24, 90, 223, 12, 24, 90, 222, 255, 24, 90, 223, 0, 24, 90, 234, 224, 
+    24, 90, 230, 217, 24, 90, 230, 211, 24, 90, 218, 216, 24, 90, 230, 214, 
+    24, 90, 230, 220, 24, 90, 225, 79, 24, 90, 225, 88, 24, 90, 225, 92, 24, 
+    90, 218, 214, 24, 90, 225, 82, 24, 90, 225, 96, 24, 90, 225, 97, 24, 90, 
+    219, 142, 24, 90, 219, 145, 24, 90, 218, 210, 24, 90, 218, 208, 24, 90, 
+    219, 140, 24, 90, 219, 148, 24, 90, 219, 149, 24, 90, 219, 134, 24, 90, 
+    219, 147, 24, 90, 226, 34, 24, 90, 226, 35, 24, 90, 211, 24, 24, 90, 211, 
+    25, 24, 90, 250, 52, 24, 90, 250, 51, 24, 90, 218, 221, 24, 90, 225, 131, 
+    24, 90, 225, 130, 10, 14, 238, 31, 10, 14, 238, 30, 10, 14, 238, 29, 10, 
+    14, 238, 28, 10, 14, 238, 27, 10, 14, 238, 26, 10, 14, 238, 25, 10, 14, 
+    238, 24, 10, 14, 238, 23, 10, 14, 238, 22, 10, 14, 238, 21, 10, 14, 238, 
+    20, 10, 14, 238, 19, 10, 14, 238, 18, 10, 14, 238, 17, 10, 14, 238, 16, 
+    10, 14, 238, 15, 10, 14, 238, 14, 10, 14, 238, 13, 10, 14, 238, 12, 10, 
+    14, 238, 11, 10, 14, 238, 10, 10, 14, 238, 9, 10, 14, 238, 8, 10, 14, 
+    238, 7, 10, 14, 238, 6, 10, 14, 238, 5, 10, 14, 238, 4, 10, 14, 238, 3, 
+    10, 14, 238, 2, 10, 14, 238, 1, 10, 14, 238, 0, 10, 14, 237, 255, 10, 14, 
+    237, 254, 10, 14, 237, 253, 10, 14, 237, 252, 10, 14, 237, 251, 10, 14, 
+    237, 250, 10, 14, 237, 249, 10, 14, 237, 248, 10, 14, 237, 247, 10, 14, 
+    237, 246, 10, 14, 237, 245, 10, 14, 237, 244, 10, 14, 237, 243, 10, 14, 
+    237, 242, 10, 14, 237, 241, 10, 14, 237, 240, 10, 14, 237, 239, 10, 14, 
+    237, 238, 10, 14, 237, 237, 10, 14, 237, 236, 10, 14, 237, 235, 10, 14, 
+    237, 234, 10, 14, 237, 233, 10, 14, 237, 232, 10, 14, 237, 231, 10, 14, 
+    237, 230, 10, 14, 237, 229, 10, 14, 237, 228, 10, 14, 237, 227, 10, 14, 
+    237, 226, 10, 14, 237, 225, 10, 14, 237, 224, 10, 14, 237, 223, 10, 14, 
+    237, 222, 10, 14, 237, 221, 10, 14, 237, 220, 10, 14, 237, 219, 10, 14, 
+    237, 218, 10, 14, 237, 217, 10, 14, 237, 216, 10, 14, 237, 215, 10, 14, 
+    237, 214, 10, 14, 237, 213, 10, 14, 237, 212, 10, 14, 237, 211, 10, 14, 
+    237, 210, 10, 14, 237, 209, 10, 14, 237, 208, 10, 14, 237, 207, 10, 14, 
+    237, 206, 10, 14, 237, 205, 10, 14, 237, 204, 10, 14, 237, 203, 10, 14, 
+    237, 202, 10, 14, 237, 201, 10, 14, 237, 200, 10, 14, 237, 199, 10, 14, 
+    237, 198, 10, 14, 237, 197, 10, 14, 237, 196, 10, 14, 237, 195, 10, 14, 
+    237, 194, 10, 14, 237, 193, 10, 14, 237, 192, 10, 14, 237, 191, 10, 14, 
+    237, 190, 10, 14, 237, 189, 10, 14, 237, 188, 10, 14, 237, 187, 10, 14, 
+    237, 186, 10, 14, 237, 185, 10, 14, 237, 184, 10, 14, 237, 183, 10, 14, 
+    237, 182, 10, 14, 237, 181, 10, 14, 237, 180, 10, 14, 237, 179, 10, 14, 
+    237, 178, 10, 14, 237, 177, 10, 14, 237, 176, 10, 14, 237, 175, 10, 14, 
+    237, 174, 10, 14, 237, 173, 10, 14, 237, 172, 10, 14, 237, 171, 10, 14, 
+    237, 170, 10, 14, 237, 169, 10, 14, 237, 168, 10, 14, 237, 167, 10, 14, 
+    237, 166, 10, 14, 237, 165, 10, 14, 237, 164, 10, 14, 237, 163, 10, 14, 
+    237, 162, 10, 14, 237, 161, 10, 14, 237, 160, 10, 14, 237, 159, 10, 14, 
+    237, 158, 10, 14, 237, 157, 10, 14, 237, 156, 10, 14, 237, 155, 10, 14, 
+    237, 154, 10, 14, 237, 153, 10, 14, 237, 152, 10, 14, 237, 151, 10, 14, 
+    237, 150, 10, 14, 237, 149, 10, 14, 237, 148, 10, 14, 237, 147, 10, 14, 
+    237, 146, 10, 14, 237, 145, 10, 14, 237, 144, 10, 14, 237, 143, 10, 14, 
+    237, 142, 10, 14, 237, 141, 10, 14, 237, 140, 10, 14, 237, 139, 10, 14, 
+    237, 138, 10, 14, 237, 137, 10, 14, 237, 136, 10, 14, 237, 135, 10, 14, 
+    237, 134, 10, 14, 237, 133, 10, 14, 237, 132, 10, 14, 237, 131, 10, 14, 
+    237, 130, 10, 14, 237, 129, 10, 14, 237, 128, 10, 14, 237, 127, 10, 14, 
+    237, 126, 10, 14, 237, 125, 10, 14, 237, 124, 10, 14, 237, 123, 10, 14, 
+    237, 122, 10, 14, 237, 121, 10, 14, 237, 120, 10, 14, 237, 119, 10, 14, 
+    237, 118, 10, 14, 237, 117, 10, 14, 237, 116, 10, 14, 237, 115, 10, 14, 
+    237, 114, 10, 14, 237, 113, 10, 14, 237, 112, 10, 14, 237, 111, 10, 14, 
+    237, 110, 10, 14, 237, 109, 10, 14, 237, 108, 10, 14, 237, 107, 10, 14, 
+    237, 106, 10, 14, 237, 105, 10, 14, 237, 104, 10, 14, 237, 103, 10, 14, 
+    237, 102, 10, 14, 237, 101, 10, 14, 237, 100, 10, 14, 237, 99, 10, 14, 
+    237, 98, 10, 14, 237, 97, 10, 14, 237, 96, 10, 14, 237, 95, 10, 14, 237, 
+    94, 10, 14, 237, 93, 10, 14, 237, 92, 10, 14, 237, 91, 10, 14, 237, 90, 
+    10, 14, 237, 89, 10, 14, 237, 88, 10, 14, 237, 87, 10, 14, 237, 86, 10, 
+    14, 237, 85, 10, 14, 237, 84, 10, 14, 237, 83, 10, 14, 237, 82, 10, 14, 
+    237, 81, 10, 14, 237, 80, 10, 14, 237, 79, 10, 14, 237, 78, 10, 14, 237, 
+    77, 10, 14, 237, 76, 10, 14, 237, 75, 10, 14, 237, 74, 10, 14, 237, 73, 
+    10, 14, 237, 72, 10, 14, 237, 71, 10, 14, 237, 70, 10, 14, 237, 69, 10, 
+    14, 237, 68, 10, 14, 237, 67, 10, 14, 237, 66, 10, 14, 237, 65, 10, 14, 
+    237, 64, 10, 14, 237, 63, 10, 14, 237, 62, 10, 14, 237, 61, 10, 14, 237, 
+    60, 10, 14, 237, 59, 10, 14, 237, 58, 10, 14, 237, 57, 10, 14, 237, 56, 
+    10, 14, 237, 55, 10, 14, 237, 54, 10, 14, 237, 53, 10, 14, 237, 52, 10, 
+    14, 237, 51, 10, 14, 237, 50, 10, 14, 237, 49, 10, 14, 237, 48, 10, 14, 
+    237, 47, 10, 14, 237, 46, 10, 14, 237, 45, 10, 14, 237, 44, 10, 14, 237, 
+    43, 10, 14, 237, 42, 10, 14, 237, 41, 10, 14, 237, 40, 10, 14, 237, 39, 
+    10, 14, 237, 38, 10, 14, 237, 37, 10, 14, 237, 36, 10, 14, 237, 35, 10, 
+    14, 237, 34, 10, 14, 237, 33, 10, 14, 237, 32, 10, 14, 237, 31, 10, 14, 
+    237, 30, 10, 14, 237, 29, 10, 14, 237, 28, 10, 14, 237, 27, 10, 14, 237, 
+    26, 10, 14, 237, 25, 10, 14, 237, 24, 10, 14, 237, 23, 10, 14, 237, 22, 
+    10, 14, 237, 21, 10, 14, 237, 20, 10, 14, 237, 19, 10, 14, 237, 18, 10, 
+    14, 237, 17, 10, 14, 237, 16, 10, 14, 237, 15, 10, 14, 237, 14, 10, 14, 
+    237, 13, 10, 14, 237, 12, 10, 14, 237, 11, 10, 14, 237, 10, 10, 14, 237, 
+    9, 10, 14, 237, 8, 10, 14, 237, 7, 10, 14, 237, 6, 10, 14, 237, 5, 10, 
+    14, 237, 4, 10, 14, 237, 3, 10, 14, 237, 2, 10, 14, 237, 1, 10, 14, 237, 
+    0, 10, 14, 236, 255, 10, 14, 236, 254, 10, 14, 236, 253, 10, 14, 236, 
+    252, 10, 14, 236, 251, 10, 14, 236, 250, 10, 14, 236, 249, 10, 14, 236, 
+    248, 10, 14, 236, 247, 10, 14, 236, 246, 10, 14, 236, 245, 10, 14, 236, 
+    244, 10, 14, 236, 243, 10, 14, 236, 242, 10, 14, 236, 241, 10, 14, 236, 
+    240, 10, 14, 236, 239, 10, 14, 236, 238, 10, 14, 236, 237, 10, 14, 236, 
+    236, 10, 14, 236, 235, 10, 14, 236, 234, 10, 14, 236, 233, 10, 14, 236, 
+    232, 10, 14, 236, 231, 10, 14, 236, 230, 10, 14, 236, 229, 10, 14, 236, 
+    228, 10, 14, 236, 227, 10, 14, 236, 226, 10, 14, 236, 225, 10, 14, 236, 
+    224, 10, 14, 236, 223, 10, 14, 236, 222, 10, 14, 236, 221, 10, 14, 236, 
+    220, 10, 14, 236, 219, 10, 14, 236, 218, 10, 14, 236, 217, 10, 14, 236, 
+    216, 10, 14, 236, 215, 10, 14, 236, 214, 10, 14, 236, 213, 10, 14, 236, 
+    212, 10, 14, 236, 211, 10, 14, 236, 210, 10, 14, 236, 209, 10, 14, 236, 
+    208, 10, 14, 236, 207, 10, 14, 236, 206, 10, 14, 236, 205, 10, 14, 236, 
+    204, 10, 14, 236, 203, 10, 14, 236, 202, 10, 14, 236, 201, 10, 14, 236, 
+    200, 10, 14, 236, 199, 10, 14, 236, 198, 10, 14, 236, 197, 10, 14, 236, 
+    196, 10, 14, 236, 195, 10, 14, 236, 194, 10, 14, 236, 193, 10, 14, 236, 
+    192, 10, 14, 236, 191, 10, 14, 236, 190, 10, 14, 236, 189, 10, 14, 236, 
+    188, 10, 14, 236, 187, 10, 14, 236, 186, 10, 14, 236, 185, 10, 14, 236, 
+    184, 10, 14, 236, 183, 10, 14, 236, 182, 10, 14, 236, 181, 10, 14, 236, 
+    180, 10, 14, 236, 179, 10, 14, 236, 178, 10, 14, 236, 177, 10, 14, 236, 
+    176, 10, 14, 236, 175, 10, 14, 236, 174, 10, 14, 236, 173, 10, 14, 236, 
+    172, 10, 14, 236, 171, 10, 14, 236, 170, 10, 14, 236, 169, 10, 14, 236, 
+    168, 10, 14, 236, 167, 10, 14, 236, 166, 10, 14, 236, 165, 10, 14, 236, 
+    164, 10, 14, 236, 163, 10, 14, 236, 162, 10, 14, 236, 161, 10, 14, 236, 
+    160, 10, 14, 236, 159, 10, 14, 236, 158, 10, 14, 236, 157, 10, 14, 236, 
+    156, 10, 14, 236, 155, 10, 14, 236, 154, 10, 14, 236, 153, 10, 14, 236, 
+    152, 10, 14, 236, 151, 10, 14, 236, 150, 10, 14, 236, 149, 10, 14, 236, 
+    148, 10, 14, 236, 147, 10, 14, 236, 146, 10, 14, 236, 145, 10, 14, 236, 
+    144, 10, 14, 236, 143, 10, 14, 236, 142, 10, 14, 236, 141, 10, 14, 236, 
+    140, 10, 14, 236, 139, 10, 14, 236, 138, 10, 14, 236, 137, 10, 14, 236, 
+    136, 10, 14, 236, 135, 10, 14, 236, 134, 10, 14, 236, 133, 10, 14, 236, 
+    132, 10, 14, 236, 131, 10, 14, 236, 130, 10, 14, 236, 129, 10, 14, 236, 
+    128, 10, 14, 236, 127, 10, 14, 236, 126, 10, 14, 236, 125, 10, 14, 236, 
+    124, 10, 14, 236, 123, 10, 14, 236, 122, 10, 14, 236, 121, 10, 14, 236, 
+    120, 10, 14, 236, 119, 10, 14, 236, 118, 10, 14, 236, 117, 10, 14, 236, 
+    116, 10, 14, 236, 115, 10, 14, 236, 114, 10, 14, 236, 113, 10, 14, 236, 
+    112, 10, 14, 236, 111, 10, 14, 236, 110, 10, 14, 236, 109, 10, 14, 236, 
+    108, 10, 14, 236, 107, 10, 14, 236, 106, 10, 14, 236, 105, 10, 14, 236, 
+    104, 10, 14, 236, 103, 10, 14, 236, 102, 10, 14, 236, 101, 10, 14, 236, 
+    100, 10, 14, 236, 99, 10, 14, 236, 98, 10, 14, 236, 97, 10, 14, 236, 96, 
+    10, 14, 236, 95, 10, 14, 236, 94, 10, 14, 236, 93, 10, 14, 236, 92, 10, 
+    14, 236, 91, 10, 14, 236, 90, 10, 14, 236, 89, 10, 14, 236, 88, 10, 14, 
+    236, 87, 10, 14, 236, 86, 10, 14, 236, 85, 10, 14, 236, 84, 10, 14, 236, 
+    83, 10, 14, 236, 82, 10, 14, 236, 81, 10, 14, 236, 80, 10, 14, 236, 79, 
+    10, 14, 236, 78, 10, 14, 236, 77, 10, 14, 236, 76, 10, 14, 236, 75, 10, 
+    14, 236, 74, 10, 14, 236, 73, 10, 14, 236, 72, 7, 4, 27, 244, 133, 7, 4, 
+    27, 244, 129, 7, 4, 27, 244, 84, 7, 4, 27, 244, 132, 7, 4, 27, 244, 131, 
+    7, 4, 27, 200, 222, 94, 217, 153, 7, 4, 27, 218, 170, 150, 4, 27, 231, 
+    64, 228, 44, 150, 4, 27, 231, 64, 245, 221, 150, 4, 27, 231, 64, 235, 
+    234, 150, 4, 27, 213, 180, 228, 44, 150, 4, 27, 231, 64, 211, 160, 94, 1, 
+    210, 234, 2, 241, 165, 94, 225, 14, 235, 56, 214, 11, 94, 27, 211, 6, 
+    210, 234, 210, 234, 225, 243, 94, 1, 254, 147, 253, 170, 94, 1, 211, 247, 
+    254, 179, 94, 1, 211, 247, 248, 197, 94, 1, 211, 247, 241, 245, 94, 1, 
+    211, 247, 235, 0, 94, 1, 211, 247, 233, 100, 94, 1, 211, 247, 40, 231, 
+    70, 94, 1, 211, 247, 223, 70, 94, 1, 211, 247, 217, 39, 94, 1, 254, 147, 
+    96, 50, 94, 1, 220, 23, 2, 220, 23, 247, 128, 94, 1, 220, 23, 2, 219, 
+    161, 247, 128, 94, 1, 220, 23, 2, 248, 216, 22, 220, 23, 247, 128, 94, 1, 
+    220, 23, 2, 248, 216, 22, 219, 161, 247, 128, 94, 1, 109, 2, 225, 243, 
+    94, 1, 109, 2, 224, 79, 94, 1, 109, 2, 231, 176, 94, 1, 252, 37, 2, 248, 
+    215, 94, 1, 242, 209, 2, 248, 215, 94, 1, 248, 198, 2, 248, 215, 94, 1, 
+    241, 246, 2, 231, 176, 94, 1, 214, 4, 2, 248, 215, 94, 1, 210, 98, 2, 
+    248, 215, 94, 1, 216, 232, 2, 248, 215, 94, 1, 210, 234, 2, 248, 215, 94, 
+    1, 40, 235, 1, 2, 248, 215, 94, 1, 235, 1, 2, 248, 215, 94, 1, 233, 101, 
+    2, 248, 215, 94, 1, 231, 71, 2, 248, 215, 94, 1, 227, 199, 2, 248, 215, 
+    94, 1, 221, 252, 2, 248, 215, 94, 1, 40, 225, 225, 2, 248, 215, 94, 1, 
+    225, 225, 2, 248, 215, 94, 1, 215, 181, 2, 248, 215, 94, 1, 224, 43, 2, 
+    248, 215, 94, 1, 223, 71, 2, 248, 215, 94, 1, 220, 23, 2, 248, 215, 94, 
+    1, 217, 40, 2, 248, 215, 94, 1, 214, 4, 2, 241, 68, 94, 1, 252, 37, 2, 
+    223, 172, 94, 1, 235, 1, 2, 223, 172, 94, 1, 225, 225, 2, 223, 172, 94, 
+    27, 109, 233, 100, 9, 1, 109, 212, 47, 53, 17, 9, 1, 109, 212, 47, 40, 
+    17, 9, 1, 252, 73, 53, 17, 9, 1, 252, 73, 40, 17, 9, 1, 252, 73, 65, 17, 
+    9, 1, 252, 73, 147, 17, 9, 1, 225, 209, 53, 17, 9, 1, 225, 209, 40, 17, 
+    9, 1, 225, 209, 65, 17, 9, 1, 225, 209, 147, 17, 9, 1, 252, 61, 53, 17, 
+    9, 1, 252, 61, 40, 17, 9, 1, 252, 61, 65, 17, 9, 1, 252, 61, 147, 17, 9, 
+    1, 215, 148, 53, 17, 9, 1, 215, 148, 40, 17, 9, 1, 215, 148, 65, 17, 9, 
+    1, 215, 148, 147, 17, 9, 1, 217, 7, 53, 17, 9, 1, 217, 7, 40, 17, 9, 1, 
+    217, 7, 65, 17, 9, 1, 217, 7, 147, 17, 9, 1, 215, 150, 53, 17, 9, 1, 215, 
+    150, 40, 17, 9, 1, 215, 150, 65, 17, 9, 1, 215, 150, 147, 17, 9, 1, 213, 
+    249, 53, 17, 9, 1, 213, 249, 40, 17, 9, 1, 213, 249, 65, 17, 9, 1, 213, 
+    249, 147, 17, 9, 1, 225, 207, 53, 17, 9, 1, 225, 207, 40, 17, 9, 1, 225, 
+    207, 65, 17, 9, 1, 225, 207, 147, 17, 9, 1, 246, 52, 53, 17, 9, 1, 246, 
+    52, 40, 17, 9, 1, 246, 52, 65, 17, 9, 1, 246, 52, 147, 17, 9, 1, 227, 
+    158, 53, 17, 9, 1, 227, 158, 40, 17, 9, 1, 227, 158, 65, 17, 9, 1, 227, 
+    158, 147, 17, 9, 1, 217, 28, 53, 17, 9, 1, 217, 28, 40, 17, 9, 1, 217, 
+    28, 65, 17, 9, 1, 217, 28, 147, 17, 9, 1, 217, 26, 53, 17, 9, 1, 217, 26, 
+    40, 17, 9, 1, 217, 26, 65, 17, 9, 1, 217, 26, 147, 17, 9, 1, 248, 141, 
+    53, 17, 9, 1, 248, 141, 40, 17, 9, 1, 248, 210, 53, 17, 9, 1, 248, 210, 
+    40, 17, 9, 1, 246, 79, 53, 17, 9, 1, 246, 79, 40, 17, 9, 1, 248, 139, 53, 
+    17, 9, 1, 248, 139, 40, 17, 9, 1, 235, 127, 53, 17, 9, 1, 235, 127, 40, 
+    17, 9, 1, 222, 174, 53, 17, 9, 1, 222, 174, 40, 17, 9, 1, 234, 181, 53, 
+    17, 9, 1, 234, 181, 40, 17, 9, 1, 234, 181, 65, 17, 9, 1, 234, 181, 147, 
+    17, 9, 1, 243, 130, 53, 17, 9, 1, 243, 130, 40, 17, 9, 1, 243, 130, 65, 
+    17, 9, 1, 243, 130, 147, 17, 9, 1, 242, 109, 53, 17, 9, 1, 242, 109, 40, 
+    17, 9, 1, 242, 109, 65, 17, 9, 1, 242, 109, 147, 17, 9, 1, 229, 8, 53, 
+    17, 9, 1, 229, 8, 40, 17, 9, 1, 229, 8, 65, 17, 9, 1, 229, 8, 147, 17, 9, 
+    1, 228, 68, 242, 226, 53, 17, 9, 1, 228, 68, 242, 226, 40, 17, 9, 1, 222, 
+    217, 53, 17, 9, 1, 222, 217, 40, 17, 9, 1, 222, 217, 65, 17, 9, 1, 222, 
+    217, 147, 17, 9, 1, 241, 226, 2, 77, 72, 53, 17, 9, 1, 241, 226, 2, 77, 
+    72, 40, 17, 9, 1, 241, 226, 242, 179, 53, 17, 9, 1, 241, 226, 242, 179, 
+    40, 17, 9, 1, 241, 226, 242, 179, 65, 17, 9, 1, 241, 226, 242, 179, 147, 
+    17, 9, 1, 241, 226, 247, 150, 53, 17, 9, 1, 241, 226, 247, 150, 40, 17, 
+    9, 1, 241, 226, 247, 150, 65, 17, 9, 1, 241, 226, 247, 150, 147, 17, 9, 
+    1, 77, 252, 141, 53, 17, 9, 1, 77, 252, 141, 40, 17, 9, 1, 77, 252, 141, 
+    2, 182, 72, 53, 17, 9, 1, 77, 252, 141, 2, 182, 72, 40, 17, 9, 16, 59, 
+    48, 9, 16, 59, 51, 9, 16, 113, 170, 48, 9, 16, 113, 170, 51, 9, 16, 134, 
+    170, 48, 9, 16, 134, 170, 51, 9, 16, 134, 170, 225, 10, 246, 112, 48, 9, 
+    16, 134, 170, 225, 10, 246, 112, 51, 9, 16, 244, 19, 170, 48, 9, 16, 244, 
+    19, 170, 51, 9, 16, 52, 67, 252, 149, 51, 9, 16, 113, 170, 213, 189, 48, 
+    9, 16, 113, 170, 213, 189, 51, 9, 16, 222, 236, 9, 16, 4, 217, 82, 48, 9, 
+    16, 4, 217, 82, 51, 9, 1, 229, 85, 53, 17, 9, 1, 229, 85, 40, 17, 9, 1, 
+    229, 85, 65, 17, 9, 1, 229, 85, 147, 17, 9, 1, 104, 53, 17, 9, 1, 104, 
+    40, 17, 9, 1, 226, 239, 53, 17, 9, 1, 226, 239, 40, 17, 9, 1, 210, 213, 
+    53, 17, 9, 1, 210, 213, 40, 17, 9, 1, 104, 2, 182, 72, 53, 17, 9, 1, 214, 
+    0, 53, 17, 9, 1, 214, 0, 40, 17, 9, 1, 234, 79, 226, 239, 53, 17, 9, 1, 
+    234, 79, 226, 239, 40, 17, 9, 1, 234, 79, 210, 213, 53, 17, 9, 1, 234, 
+    79, 210, 213, 40, 17, 9, 1, 160, 53, 17, 9, 1, 160, 40, 17, 9, 1, 160, 
+    65, 17, 9, 1, 160, 147, 17, 9, 1, 214, 207, 234, 192, 234, 79, 109, 231, 
+    198, 65, 17, 9, 1, 214, 207, 234, 192, 234, 79, 109, 231, 198, 147, 17, 
+    9, 27, 77, 2, 182, 72, 2, 109, 53, 17, 9, 27, 77, 2, 182, 72, 2, 109, 40, 
+    17, 9, 27, 77, 2, 182, 72, 2, 254, 253, 53, 17, 9, 27, 77, 2, 182, 72, 2, 
+    254, 253, 40, 17, 9, 27, 77, 2, 182, 72, 2, 212, 31, 53, 17, 9, 27, 77, 
+    2, 182, 72, 2, 212, 31, 40, 17, 9, 27, 77, 2, 182, 72, 2, 104, 53, 17, 9, 
+    27, 77, 2, 182, 72, 2, 104, 40, 17, 9, 27, 77, 2, 182, 72, 2, 226, 239, 
+    53, 17, 9, 27, 77, 2, 182, 72, 2, 226, 239, 40, 17, 9, 27, 77, 2, 182, 
+    72, 2, 210, 213, 53, 17, 9, 27, 77, 2, 182, 72, 2, 210, 213, 40, 17, 9, 
+    27, 77, 2, 182, 72, 2, 160, 53, 17, 9, 27, 77, 2, 182, 72, 2, 160, 40, 
+    17, 9, 27, 77, 2, 182, 72, 2, 160, 65, 17, 9, 27, 214, 207, 234, 79, 77, 
+    2, 182, 72, 2, 109, 231, 198, 53, 17, 9, 27, 214, 207, 234, 79, 77, 2, 
+    182, 72, 2, 109, 231, 198, 40, 17, 9, 27, 214, 207, 234, 79, 77, 2, 182, 
+    72, 2, 109, 231, 198, 65, 17, 9, 1, 244, 176, 77, 53, 17, 9, 1, 244, 176, 
+    77, 40, 17, 9, 1, 244, 176, 77, 65, 17, 9, 1, 244, 176, 77, 147, 17, 9, 
+    27, 77, 2, 182, 72, 2, 151, 53, 17, 9, 27, 77, 2, 182, 72, 2, 122, 53, 
+    17, 9, 27, 77, 2, 182, 72, 2, 66, 53, 17, 9, 27, 77, 2, 182, 72, 2, 109, 
+    231, 198, 53, 17, 9, 27, 77, 2, 182, 72, 2, 77, 53, 17, 9, 27, 252, 63, 
+    2, 151, 53, 17, 9, 27, 252, 63, 2, 122, 53, 17, 9, 27, 252, 63, 2, 234, 
+    136, 53, 17, 9, 27, 252, 63, 2, 66, 53, 17, 9, 27, 252, 63, 2, 109, 231, 
+    198, 53, 17, 9, 27, 252, 63, 2, 77, 53, 17, 9, 27, 217, 9, 2, 151, 53, 
+    17, 9, 27, 217, 9, 2, 122, 53, 17, 9, 27, 217, 9, 2, 234, 136, 53, 17, 9, 
+    27, 217, 9, 2, 66, 53, 17, 9, 27, 217, 9, 2, 109, 231, 198, 53, 17, 9, 
+    27, 217, 9, 2, 77, 53, 17, 9, 27, 216, 194, 2, 151, 53, 17, 9, 27, 216, 
+    194, 2, 66, 53, 17, 9, 27, 216, 194, 2, 109, 231, 198, 53, 17, 9, 27, 
+    216, 194, 2, 77, 53, 17, 9, 27, 151, 2, 122, 53, 17, 9, 27, 151, 2, 66, 
+    53, 17, 9, 27, 122, 2, 151, 53, 17, 9, 27, 122, 2, 66, 53, 17, 9, 27, 
+    234, 136, 2, 151, 53, 17, 9, 27, 234, 136, 2, 122, 53, 17, 9, 27, 234, 
+    136, 2, 66, 53, 17, 9, 27, 221, 169, 2, 151, 53, 17, 9, 27, 221, 169, 2, 
+    122, 53, 17, 9, 27, 221, 169, 2, 234, 136, 53, 17, 9, 27, 221, 169, 2, 
+    66, 53, 17, 9, 27, 222, 29, 2, 122, 53, 17, 9, 27, 222, 29, 2, 66, 53, 
+    17, 9, 27, 248, 225, 2, 151, 53, 17, 9, 27, 248, 225, 2, 122, 53, 17, 9, 
+    27, 248, 225, 2, 234, 136, 53, 17, 9, 27, 248, 225, 2, 66, 53, 17, 9, 27, 
+    217, 82, 2, 122, 53, 17, 9, 27, 217, 82, 2, 66, 53, 17, 9, 27, 210, 112, 
+    2, 66, 53, 17, 9, 27, 254, 206, 2, 151, 53, 17, 9, 27, 254, 206, 2, 66, 
+    53, 17, 9, 27, 242, 252, 2, 151, 53, 17, 9, 27, 242, 252, 2, 66, 53, 17, 
+    9, 27, 244, 151, 2, 151, 53, 17, 9, 27, 244, 151, 2, 122, 53, 17, 9, 27, 
+    244, 151, 2, 234, 136, 53, 17, 9, 27, 244, 151, 2, 66, 53, 17, 9, 27, 
+    244, 151, 2, 109, 231, 198, 53, 17, 9, 27, 244, 151, 2, 77, 53, 17, 9, 
+    27, 224, 85, 2, 122, 53, 17, 9, 27, 224, 85, 2, 66, 53, 17, 9, 27, 224, 
+    85, 2, 109, 231, 198, 53, 17, 9, 27, 224, 85, 2, 77, 53, 17, 9, 27, 235, 
+    1, 2, 109, 53, 17, 9, 27, 235, 1, 2, 151, 53, 17, 9, 27, 235, 1, 2, 122, 
+    53, 17, 9, 27, 235, 1, 2, 234, 136, 53, 17, 9, 27, 235, 1, 2, 233, 109, 
+    53, 17, 9, 27, 235, 1, 2, 66, 53, 17, 9, 27, 235, 1, 2, 109, 231, 198, 
+    53, 17, 9, 27, 235, 1, 2, 77, 53, 17, 9, 27, 233, 109, 2, 151, 53, 17, 9, 
+    27, 233, 109, 2, 122, 53, 17, 9, 27, 233, 109, 2, 234, 136, 53, 17, 9, 
+    27, 233, 109, 2, 66, 53, 17, 9, 27, 233, 109, 2, 109, 231, 198, 53, 17, 
+    9, 27, 233, 109, 2, 77, 53, 17, 9, 27, 66, 2, 151, 53, 17, 9, 27, 66, 2, 
+    122, 53, 17, 9, 27, 66, 2, 234, 136, 53, 17, 9, 27, 66, 2, 66, 53, 17, 9, 
+    27, 66, 2, 109, 231, 198, 53, 17, 9, 27, 66, 2, 77, 53, 17, 9, 27, 228, 
+    68, 2, 151, 53, 17, 9, 27, 228, 68, 2, 122, 53, 17, 9, 27, 228, 68, 2, 
+    234, 136, 53, 17, 9, 27, 228, 68, 2, 66, 53, 17, 9, 27, 228, 68, 2, 109, 
+    231, 198, 53, 17, 9, 27, 228, 68, 2, 77, 53, 17, 9, 27, 241, 226, 2, 151, 
+    53, 17, 9, 27, 241, 226, 2, 66, 53, 17, 9, 27, 241, 226, 2, 109, 231, 
+    198, 53, 17, 9, 27, 241, 226, 2, 77, 53, 17, 9, 27, 77, 2, 151, 53, 17, 
+    9, 27, 77, 2, 122, 53, 17, 9, 27, 77, 2, 234, 136, 53, 17, 9, 27, 77, 2, 
+    66, 53, 17, 9, 27, 77, 2, 109, 231, 198, 53, 17, 9, 27, 77, 2, 77, 53, 
+    17, 9, 27, 216, 204, 2, 218, 24, 109, 53, 17, 9, 27, 223, 99, 2, 218, 24, 
+    109, 53, 17, 9, 27, 109, 231, 198, 2, 218, 24, 109, 53, 17, 9, 27, 220, 
+    96, 2, 248, 191, 53, 17, 9, 27, 220, 96, 2, 234, 210, 53, 17, 9, 27, 220, 
+    96, 2, 244, 174, 53, 17, 9, 27, 220, 96, 2, 248, 193, 53, 17, 9, 27, 220, 
+    96, 2, 234, 212, 53, 17, 9, 27, 220, 96, 2, 218, 24, 109, 53, 17, 9, 27, 
+    77, 2, 182, 72, 2, 223, 99, 40, 17, 9, 27, 77, 2, 182, 72, 2, 210, 109, 
+    40, 17, 9, 27, 77, 2, 182, 72, 2, 66, 40, 17, 9, 27, 77, 2, 182, 72, 2, 
+    228, 68, 40, 17, 9, 27, 77, 2, 182, 72, 2, 109, 231, 198, 40, 17, 9, 27, 
+    77, 2, 182, 72, 2, 77, 40, 17, 9, 27, 252, 63, 2, 223, 99, 40, 17, 9, 27, 
+    252, 63, 2, 210, 109, 40, 17, 9, 27, 252, 63, 2, 66, 40, 17, 9, 27, 252, 
+    63, 2, 228, 68, 40, 17, 9, 27, 252, 63, 2, 109, 231, 198, 40, 17, 9, 27, 
+    252, 63, 2, 77, 40, 17, 9, 27, 217, 9, 2, 223, 99, 40, 17, 9, 27, 217, 9, 
+    2, 210, 109, 40, 17, 9, 27, 217, 9, 2, 66, 40, 17, 9, 27, 217, 9, 2, 228, 
+    68, 40, 17, 9, 27, 217, 9, 2, 109, 231, 198, 40, 17, 9, 27, 217, 9, 2, 
+    77, 40, 17, 9, 27, 216, 194, 2, 223, 99, 40, 17, 9, 27, 216, 194, 2, 210, 
+    109, 40, 17, 9, 27, 216, 194, 2, 66, 40, 17, 9, 27, 216, 194, 2, 228, 68, 
+    40, 17, 9, 27, 216, 194, 2, 109, 231, 198, 40, 17, 9, 27, 216, 194, 2, 
+    77, 40, 17, 9, 27, 244, 151, 2, 109, 231, 198, 40, 17, 9, 27, 244, 151, 
+    2, 77, 40, 17, 9, 27, 224, 85, 2, 109, 231, 198, 40, 17, 9, 27, 224, 85, 
+    2, 77, 40, 17, 9, 27, 235, 1, 2, 109, 40, 17, 9, 27, 235, 1, 2, 233, 109, 
+    40, 17, 9, 27, 235, 1, 2, 66, 40, 17, 9, 27, 235, 1, 2, 109, 231, 198, 
+    40, 17, 9, 27, 235, 1, 2, 77, 40, 17, 9, 27, 233, 109, 2, 66, 40, 17, 9, 
+    27, 233, 109, 2, 109, 231, 198, 40, 17, 9, 27, 233, 109, 2, 77, 40, 17, 
+    9, 27, 66, 2, 109, 40, 17, 9, 27, 66, 2, 66, 40, 17, 9, 27, 228, 68, 2, 
+    223, 99, 40, 17, 9, 27, 228, 68, 2, 210, 109, 40, 17, 9, 27, 228, 68, 2, 
+    66, 40, 17, 9, 27, 228, 68, 2, 228, 68, 40, 17, 9, 27, 228, 68, 2, 109, 
+    231, 198, 40, 17, 9, 27, 228, 68, 2, 77, 40, 17, 9, 27, 109, 231, 198, 2, 
+    218, 24, 109, 40, 17, 9, 27, 77, 2, 223, 99, 40, 17, 9, 27, 77, 2, 210, 
+    109, 40, 17, 9, 27, 77, 2, 66, 40, 17, 9, 27, 77, 2, 228, 68, 40, 17, 9, 
+    27, 77, 2, 109, 231, 198, 40, 17, 9, 27, 77, 2, 77, 40, 17, 9, 27, 77, 2, 
+    182, 72, 2, 151, 65, 17, 9, 27, 77, 2, 182, 72, 2, 122, 65, 17, 9, 27, 
+    77, 2, 182, 72, 2, 234, 136, 65, 17, 9, 27, 77, 2, 182, 72, 2, 66, 65, 
+    17, 9, 27, 77, 2, 182, 72, 2, 241, 226, 65, 17, 9, 27, 252, 63, 2, 151, 
+    65, 17, 9, 27, 252, 63, 2, 122, 65, 17, 9, 27, 252, 63, 2, 234, 136, 65, 
+    17, 9, 27, 252, 63, 2, 66, 65, 17, 9, 27, 252, 63, 2, 241, 226, 65, 17, 
+    9, 27, 217, 9, 2, 151, 65, 17, 9, 27, 217, 9, 2, 122, 65, 17, 9, 27, 217, 
+    9, 2, 234, 136, 65, 17, 9, 27, 217, 9, 2, 66, 65, 17, 9, 27, 217, 9, 2, 
+    241, 226, 65, 17, 9, 27, 216, 194, 2, 66, 65, 17, 9, 27, 151, 2, 122, 65, 
+    17, 9, 27, 151, 2, 66, 65, 17, 9, 27, 122, 2, 151, 65, 17, 9, 27, 122, 2, 
+    66, 65, 17, 9, 27, 234, 136, 2, 151, 65, 17, 9, 27, 234, 136, 2, 66, 65, 
+    17, 9, 27, 221, 169, 2, 151, 65, 17, 9, 27, 221, 169, 2, 122, 65, 17, 9, 
+    27, 221, 169, 2, 234, 136, 65, 17, 9, 27, 221, 169, 2, 66, 65, 17, 9, 27, 
+    222, 29, 2, 122, 65, 17, 9, 27, 222, 29, 2, 234, 136, 65, 17, 9, 27, 222, 
+    29, 2, 66, 65, 17, 9, 27, 248, 225, 2, 151, 65, 17, 9, 27, 248, 225, 2, 
+    122, 65, 17, 9, 27, 248, 225, 2, 234, 136, 65, 17, 9, 27, 248, 225, 2, 
+    66, 65, 17, 9, 27, 217, 82, 2, 122, 65, 17, 9, 27, 210, 112, 2, 66, 65, 
+    17, 9, 27, 254, 206, 2, 151, 65, 17, 9, 27, 254, 206, 2, 66, 65, 17, 9, 
+    27, 242, 252, 2, 151, 65, 17, 9, 27, 242, 252, 2, 66, 65, 17, 9, 27, 244, 
+    151, 2, 151, 65, 17, 9, 27, 244, 151, 2, 122, 65, 17, 9, 27, 244, 151, 2, 
+    234, 136, 65, 17, 9, 27, 244, 151, 2, 66, 65, 17, 9, 27, 224, 85, 2, 122, 
+    65, 17, 9, 27, 224, 85, 2, 66, 65, 17, 9, 27, 235, 1, 2, 151, 65, 17, 9, 
+    27, 235, 1, 2, 122, 65, 17, 9, 27, 235, 1, 2, 234, 136, 65, 17, 9, 27, 
+    235, 1, 2, 233, 109, 65, 17, 9, 27, 235, 1, 2, 66, 65, 17, 9, 27, 233, 
+    109, 2, 151, 65, 17, 9, 27, 233, 109, 2, 122, 65, 17, 9, 27, 233, 109, 2, 
+    234, 136, 65, 17, 9, 27, 233, 109, 2, 66, 65, 17, 9, 27, 233, 109, 2, 
+    241, 226, 65, 17, 9, 27, 66, 2, 151, 65, 17, 9, 27, 66, 2, 122, 65, 17, 
+    9, 27, 66, 2, 234, 136, 65, 17, 9, 27, 66, 2, 66, 65, 17, 9, 27, 228, 68, 
+    2, 151, 65, 17, 9, 27, 228, 68, 2, 122, 65, 17, 9, 27, 228, 68, 2, 234, 
+    136, 65, 17, 9, 27, 228, 68, 2, 66, 65, 17, 9, 27, 228, 68, 2, 241, 226, 
+    65, 17, 9, 27, 241, 226, 2, 151, 65, 17, 9, 27, 241, 226, 2, 66, 65, 17, 
+    9, 27, 241, 226, 2, 218, 24, 109, 65, 17, 9, 27, 77, 2, 151, 65, 17, 9, 
+    27, 77, 2, 122, 65, 17, 9, 27, 77, 2, 234, 136, 65, 17, 9, 27, 77, 2, 66, 
+    65, 17, 9, 27, 77, 2, 241, 226, 65, 17, 9, 27, 77, 2, 182, 72, 2, 66, 
+    147, 17, 9, 27, 77, 2, 182, 72, 2, 241, 226, 147, 17, 9, 27, 252, 63, 2, 
+    66, 147, 17, 9, 27, 252, 63, 2, 241, 226, 147, 17, 9, 27, 217, 9, 2, 66, 
+    147, 17, 9, 27, 217, 9, 2, 241, 226, 147, 17, 9, 27, 216, 194, 2, 66, 
+    147, 17, 9, 27, 216, 194, 2, 241, 226, 147, 17, 9, 27, 221, 169, 2, 66, 
+    147, 17, 9, 27, 221, 169, 2, 241, 226, 147, 17, 9, 27, 220, 62, 2, 66, 
+    147, 17, 9, 27, 220, 62, 2, 241, 226, 147, 17, 9, 27, 235, 1, 2, 233, 
+    109, 147, 17, 9, 27, 235, 1, 2, 66, 147, 17, 9, 27, 233, 109, 2, 66, 147, 
+    17, 9, 27, 228, 68, 2, 66, 147, 17, 9, 27, 228, 68, 2, 241, 226, 147, 17, 
+    9, 27, 77, 2, 66, 147, 17, 9, 27, 77, 2, 241, 226, 147, 17, 9, 27, 220, 
+    96, 2, 244, 174, 147, 17, 9, 27, 220, 96, 2, 248, 193, 147, 17, 9, 27, 
+    220, 96, 2, 234, 212, 147, 17, 9, 27, 217, 82, 2, 109, 231, 198, 53, 17, 
+    9, 27, 217, 82, 2, 77, 53, 17, 9, 27, 254, 206, 2, 109, 231, 198, 53, 17, 
+    9, 27, 254, 206, 2, 77, 53, 17, 9, 27, 242, 252, 2, 109, 231, 198, 53, 
+    17, 9, 27, 242, 252, 2, 77, 53, 17, 9, 27, 221, 169, 2, 109, 231, 198, 
+    53, 17, 9, 27, 221, 169, 2, 77, 53, 17, 9, 27, 220, 62, 2, 109, 231, 198, 
+    53, 17, 9, 27, 220, 62, 2, 77, 53, 17, 9, 27, 122, 2, 109, 231, 198, 53, 
+    17, 9, 27, 122, 2, 77, 53, 17, 9, 27, 151, 2, 109, 231, 198, 53, 17, 9, 
+    27, 151, 2, 77, 53, 17, 9, 27, 234, 136, 2, 109, 231, 198, 53, 17, 9, 27, 
+    234, 136, 2, 77, 53, 17, 9, 27, 222, 29, 2, 109, 231, 198, 53, 17, 9, 27, 
+    222, 29, 2, 77, 53, 17, 9, 27, 248, 225, 2, 109, 231, 198, 53, 17, 9, 27, 
+    248, 225, 2, 77, 53, 17, 9, 27, 220, 62, 2, 151, 53, 17, 9, 27, 220, 62, 
+    2, 122, 53, 17, 9, 27, 220, 62, 2, 234, 136, 53, 17, 9, 27, 220, 62, 2, 
+    66, 53, 17, 9, 27, 220, 62, 2, 223, 99, 53, 17, 9, 27, 221, 169, 2, 223, 
+    99, 53, 17, 9, 27, 222, 29, 2, 223, 99, 53, 17, 9, 27, 248, 225, 2, 223, 
+    99, 53, 17, 9, 27, 217, 82, 2, 109, 231, 198, 40, 17, 9, 27, 217, 82, 2, 
+    77, 40, 17, 9, 27, 254, 206, 2, 109, 231, 198, 40, 17, 9, 27, 254, 206, 
+    2, 77, 40, 17, 9, 27, 242, 252, 2, 109, 231, 198, 40, 17, 9, 27, 242, 
+    252, 2, 77, 40, 17, 9, 27, 221, 169, 2, 109, 231, 198, 40, 17, 9, 27, 
+    221, 169, 2, 77, 40, 17, 9, 27, 220, 62, 2, 109, 231, 198, 40, 17, 9, 27, 
+    220, 62, 2, 77, 40, 17, 9, 27, 122, 2, 109, 231, 198, 40, 17, 9, 27, 122, 
+    2, 77, 40, 17, 9, 27, 151, 2, 109, 231, 198, 40, 17, 9, 27, 151, 2, 77, 
+    40, 17, 9, 27, 234, 136, 2, 109, 231, 198, 40, 17, 9, 27, 234, 136, 2, 
+    77, 40, 17, 9, 27, 222, 29, 2, 109, 231, 198, 40, 17, 9, 27, 222, 29, 2, 
+    77, 40, 17, 9, 27, 248, 225, 2, 109, 231, 198, 40, 17, 9, 27, 248, 225, 
+    2, 77, 40, 17, 9, 27, 220, 62, 2, 151, 40, 17, 9, 27, 220, 62, 2, 122, 
+    40, 17, 9, 27, 220, 62, 2, 234, 136, 40, 17, 9, 27, 220, 62, 2, 66, 40, 
+    17, 9, 27, 220, 62, 2, 223, 99, 40, 17, 9, 27, 221, 169, 2, 223, 99, 40, 
+    17, 9, 27, 222, 29, 2, 223, 99, 40, 17, 9, 27, 248, 225, 2, 223, 99, 40, 
+    17, 9, 27, 220, 62, 2, 151, 65, 17, 9, 27, 220, 62, 2, 122, 65, 17, 9, 
+    27, 220, 62, 2, 234, 136, 65, 17, 9, 27, 220, 62, 2, 66, 65, 17, 9, 27, 
+    221, 169, 2, 241, 226, 65, 17, 9, 27, 220, 62, 2, 241, 226, 65, 17, 9, 
+    27, 217, 82, 2, 66, 65, 17, 9, 27, 221, 169, 2, 151, 147, 17, 9, 27, 221, 
+    169, 2, 122, 147, 17, 9, 27, 221, 169, 2, 234, 136, 147, 17, 9, 27, 220, 
+    62, 2, 151, 147, 17, 9, 27, 220, 62, 2, 122, 147, 17, 9, 27, 220, 62, 2, 
+    234, 136, 147, 17, 9, 27, 217, 82, 2, 66, 147, 17, 9, 27, 210, 112, 2, 
+    66, 147, 17, 9, 27, 109, 2, 244, 172, 40, 17, 9, 27, 109, 2, 244, 172, 
+    53, 17, 226, 150, 43, 226, 7, 226, 150, 44, 226, 7, 9, 27, 217, 9, 2, 
+    151, 2, 66, 65, 17, 9, 27, 217, 9, 2, 122, 2, 151, 40, 17, 9, 27, 217, 9, 
+    2, 122, 2, 151, 65, 17, 9, 27, 217, 9, 2, 122, 2, 66, 65, 17, 9, 27, 217, 
+    9, 2, 234, 136, 2, 66, 65, 17, 9, 27, 217, 9, 2, 66, 2, 151, 65, 17, 9, 
+    27, 217, 9, 2, 66, 2, 122, 65, 17, 9, 27, 217, 9, 2, 66, 2, 234, 136, 65, 
+    17, 9, 27, 151, 2, 66, 2, 122, 40, 17, 9, 27, 151, 2, 66, 2, 122, 65, 17, 
+    9, 27, 122, 2, 66, 2, 77, 40, 17, 9, 27, 122, 2, 66, 2, 109, 231, 198, 
+    40, 17, 9, 27, 221, 169, 2, 122, 2, 151, 65, 17, 9, 27, 221, 169, 2, 151, 
+    2, 122, 65, 17, 9, 27, 221, 169, 2, 151, 2, 109, 231, 198, 40, 17, 9, 27, 
+    221, 169, 2, 66, 2, 122, 40, 17, 9, 27, 221, 169, 2, 66, 2, 122, 65, 17, 
+    9, 27, 221, 169, 2, 66, 2, 151, 65, 17, 9, 27, 221, 169, 2, 66, 2, 66, 
+    40, 17, 9, 27, 221, 169, 2, 66, 2, 66, 65, 17, 9, 27, 222, 29, 2, 122, 2, 
+    122, 40, 17, 9, 27, 222, 29, 2, 122, 2, 122, 65, 17, 9, 27, 222, 29, 2, 
+    66, 2, 66, 40, 17, 9, 27, 220, 62, 2, 122, 2, 66, 40, 17, 9, 27, 220, 62, 
+    2, 122, 2, 66, 65, 17, 9, 27, 220, 62, 2, 151, 2, 77, 40, 17, 9, 27, 220, 
+    62, 2, 66, 2, 234, 136, 40, 17, 9, 27, 220, 62, 2, 66, 2, 234, 136, 65, 
+    17, 9, 27, 220, 62, 2, 66, 2, 66, 40, 17, 9, 27, 220, 62, 2, 66, 2, 66, 
+    65, 17, 9, 27, 248, 225, 2, 122, 2, 109, 231, 198, 40, 17, 9, 27, 248, 
+    225, 2, 234, 136, 2, 66, 40, 17, 9, 27, 248, 225, 2, 234, 136, 2, 66, 65, 
+    17, 9, 27, 217, 82, 2, 66, 2, 122, 40, 17, 9, 27, 217, 82, 2, 66, 2, 122, 
+    65, 17, 9, 27, 217, 82, 2, 66, 2, 66, 65, 17, 9, 27, 217, 82, 2, 66, 2, 
+    77, 40, 17, 9, 27, 254, 206, 2, 151, 2, 66, 40, 17, 9, 27, 254, 206, 2, 
+    66, 2, 66, 40, 17, 9, 27, 254, 206, 2, 66, 2, 66, 65, 17, 9, 27, 254, 
+    206, 2, 66, 2, 109, 231, 198, 40, 17, 9, 27, 242, 252, 2, 66, 2, 66, 40, 
+    17, 9, 27, 242, 252, 2, 66, 2, 77, 40, 17, 9, 27, 242, 252, 2, 66, 2, 
+    109, 231, 198, 40, 17, 9, 27, 244, 151, 2, 234, 136, 2, 66, 40, 17, 9, 
+    27, 244, 151, 2, 234, 136, 2, 66, 65, 17, 9, 27, 224, 85, 2, 66, 2, 122, 
+    40, 17, 9, 27, 224, 85, 2, 66, 2, 66, 40, 17, 9, 27, 233, 109, 2, 122, 2, 
+    66, 40, 17, 9, 27, 233, 109, 2, 122, 2, 77, 40, 17, 9, 27, 233, 109, 2, 
+    122, 2, 109, 231, 198, 40, 17, 9, 27, 233, 109, 2, 151, 2, 151, 65, 17, 
+    9, 27, 233, 109, 2, 151, 2, 151, 40, 17, 9, 27, 233, 109, 2, 234, 136, 2, 
+    66, 40, 17, 9, 27, 233, 109, 2, 234, 136, 2, 66, 65, 17, 9, 27, 233, 109, 
+    2, 66, 2, 122, 40, 17, 9, 27, 233, 109, 2, 66, 2, 122, 65, 17, 9, 27, 66, 
+    2, 122, 2, 151, 65, 17, 9, 27, 66, 2, 122, 2, 66, 65, 17, 9, 27, 66, 2, 
+    122, 2, 77, 40, 17, 9, 27, 66, 2, 151, 2, 122, 65, 17, 9, 27, 66, 2, 151, 
+    2, 66, 65, 17, 9, 27, 66, 2, 234, 136, 2, 151, 65, 17, 9, 27, 66, 2, 234, 
+    136, 2, 66, 65, 17, 9, 27, 66, 2, 151, 2, 234, 136, 65, 17, 9, 27, 241, 
+    226, 2, 66, 2, 151, 65, 17, 9, 27, 241, 226, 2, 66, 2, 66, 65, 17, 9, 27, 
+    228, 68, 2, 122, 2, 66, 65, 17, 9, 27, 228, 68, 2, 122, 2, 109, 231, 198, 
+    40, 17, 9, 27, 228, 68, 2, 151, 2, 66, 40, 17, 9, 27, 228, 68, 2, 151, 2, 
+    66, 65, 17, 9, 27, 228, 68, 2, 151, 2, 109, 231, 198, 40, 17, 9, 27, 228, 
+    68, 2, 66, 2, 77, 40, 17, 9, 27, 228, 68, 2, 66, 2, 109, 231, 198, 40, 
+    17, 9, 27, 77, 2, 66, 2, 66, 40, 17, 9, 27, 77, 2, 66, 2, 66, 65, 17, 9, 
+    27, 252, 63, 2, 234, 136, 2, 77, 40, 17, 9, 27, 217, 9, 2, 151, 2, 77, 
+    40, 17, 9, 27, 217, 9, 2, 151, 2, 109, 231, 198, 40, 17, 9, 27, 217, 9, 
+    2, 234, 136, 2, 77, 40, 17, 9, 27, 217, 9, 2, 234, 136, 2, 109, 231, 198, 
+    40, 17, 9, 27, 217, 9, 2, 66, 2, 77, 40, 17, 9, 27, 217, 9, 2, 66, 2, 
+    109, 231, 198, 40, 17, 9, 27, 151, 2, 66, 2, 77, 40, 17, 9, 27, 151, 2, 
+    122, 2, 109, 231, 198, 40, 17, 9, 27, 151, 2, 66, 2, 109, 231, 198, 40, 
+    17, 9, 27, 221, 169, 2, 234, 136, 2, 109, 231, 198, 40, 17, 9, 27, 222, 
+    29, 2, 122, 2, 77, 40, 17, 9, 27, 220, 62, 2, 122, 2, 77, 40, 17, 9, 27, 
+    248, 225, 2, 122, 2, 77, 40, 17, 9, 27, 233, 109, 2, 151, 2, 77, 40, 17, 
+    9, 27, 233, 109, 2, 66, 2, 77, 40, 17, 9, 27, 77, 2, 122, 2, 77, 40, 17, 
+    9, 27, 77, 2, 151, 2, 77, 40, 17, 9, 27, 77, 2, 66, 2, 77, 40, 17, 9, 27, 
+    66, 2, 66, 2, 77, 40, 17, 9, 27, 224, 85, 2, 66, 2, 77, 40, 17, 9, 27, 
+    228, 68, 2, 122, 2, 77, 40, 17, 9, 27, 224, 85, 2, 66, 2, 122, 65, 17, 9, 
+    27, 233, 109, 2, 122, 2, 66, 65, 17, 9, 27, 254, 206, 2, 66, 2, 77, 40, 
+    17, 9, 27, 235, 1, 2, 66, 2, 77, 40, 17, 9, 27, 228, 68, 2, 151, 2, 122, 
+    65, 17, 9, 27, 66, 2, 234, 136, 2, 77, 40, 17, 9, 27, 233, 109, 2, 151, 
+    2, 66, 65, 17, 9, 27, 235, 1, 2, 66, 2, 66, 40, 17, 9, 27, 233, 109, 2, 
+    151, 2, 66, 40, 17, 9, 27, 228, 68, 2, 151, 2, 122, 40, 17, 9, 27, 151, 
+    2, 122, 2, 77, 40, 17, 9, 27, 122, 2, 151, 2, 77, 40, 17, 9, 27, 66, 2, 
+    151, 2, 77, 40, 17, 9, 27, 244, 151, 2, 66, 2, 77, 40, 17, 9, 27, 252, 
+    63, 2, 122, 2, 77, 40, 17, 9, 27, 235, 1, 2, 66, 2, 66, 65, 17, 9, 27, 
+    254, 206, 2, 151, 2, 66, 65, 17, 9, 27, 222, 29, 2, 66, 2, 66, 65, 17, 9, 
+    27, 221, 169, 2, 234, 136, 2, 77, 40, 17, 9, 27, 228, 68, 2, 151, 2, 77, 
+    40, 17, 9, 27, 222, 6, 214, 128, 253, 246, 234, 10, 218, 132, 5, 53, 17, 
+    9, 27, 224, 81, 214, 128, 253, 246, 234, 10, 218, 132, 5, 53, 17, 9, 27, 
+    254, 162, 53, 17, 9, 27, 254, 192, 53, 17, 9, 27, 230, 158, 53, 17, 9, 
+    27, 222, 7, 53, 17, 9, 27, 223, 146, 53, 17, 9, 27, 254, 181, 53, 17, 9, 
+    27, 212, 49, 53, 17, 9, 27, 222, 6, 53, 17, 9, 27, 222, 5, 254, 181, 212, 
+    48, 9, 27, 235, 140, 223, 37, 50, 9, 27, 251, 238, 254, 47, 254, 48, 45, 
+    221, 158, 45, 221, 47, 45, 220, 235, 45, 220, 224, 45, 220, 213, 45, 220, 
+    202, 45, 220, 191, 45, 220, 180, 45, 220, 169, 45, 221, 157, 45, 221, 
+    146, 45, 221, 135, 45, 221, 124, 45, 221, 113, 45, 221, 102, 45, 221, 91, 
+    224, 197, 244, 28, 31, 67, 249, 227, 224, 197, 244, 28, 31, 67, 110, 249, 
+    227, 224, 197, 244, 28, 31, 67, 110, 243, 236, 218, 131, 224, 197, 244, 
+    28, 31, 67, 249, 234, 224, 197, 244, 28, 31, 67, 220, 152, 224, 197, 244, 
+    28, 31, 67, 245, 39, 79, 224, 197, 244, 28, 31, 67, 224, 16, 79, 224, 
+    197, 244, 28, 31, 67, 43, 71, 233, 26, 127, 224, 197, 244, 28, 31, 67, 
+    44, 71, 233, 26, 251, 164, 224, 197, 244, 28, 31, 67, 203, 245, 171, 38, 
+    27, 43, 242, 34, 38, 27, 44, 242, 34, 38, 52, 216, 90, 43, 242, 34, 38, 
+    52, 216, 90, 44, 242, 34, 38, 231, 238, 43, 242, 34, 38, 231, 238, 44, 
+    242, 34, 38, 249, 205, 231, 237, 224, 197, 244, 28, 31, 67, 113, 59, 233, 
+    62, 224, 197, 244, 28, 31, 67, 245, 168, 248, 164, 224, 197, 244, 28, 31, 
+    67, 245, 159, 248, 164, 224, 197, 244, 28, 31, 67, 121, 232, 219, 224, 
+    197, 244, 28, 31, 67, 212, 32, 121, 232, 219, 224, 197, 244, 28, 31, 67, 
+    43, 226, 7, 224, 197, 244, 28, 31, 67, 44, 226, 7, 224, 197, 244, 28, 31, 
+    67, 43, 249, 107, 127, 224, 197, 244, 28, 31, 67, 44, 249, 107, 127, 224, 
+    197, 244, 28, 31, 67, 43, 216, 7, 220, 55, 127, 224, 197, 244, 28, 31, 
+    67, 44, 216, 7, 220, 55, 127, 224, 197, 244, 28, 31, 67, 43, 85, 233, 26, 
+    127, 224, 197, 244, 28, 31, 67, 44, 85, 233, 26, 127, 224, 197, 244, 28, 
+    31, 67, 43, 52, 254, 118, 127, 224, 197, 244, 28, 31, 67, 44, 52, 254, 
+    118, 127, 224, 197, 244, 28, 31, 67, 43, 254, 118, 127, 224, 197, 244, 
+    28, 31, 67, 44, 254, 118, 127, 224, 197, 244, 28, 31, 67, 43, 249, 169, 
+    127, 224, 197, 244, 28, 31, 67, 44, 249, 169, 127, 224, 197, 244, 28, 31, 
+    67, 43, 71, 249, 169, 127, 224, 197, 244, 28, 31, 67, 44, 71, 249, 169, 
+    127, 220, 133, 247, 128, 71, 220, 133, 247, 128, 224, 197, 244, 28, 31, 
+    67, 43, 42, 127, 224, 197, 244, 28, 31, 67, 44, 42, 127, 248, 163, 226, 
+    123, 250, 180, 226, 123, 212, 32, 226, 123, 52, 212, 32, 226, 123, 248, 
+    163, 121, 232, 219, 250, 180, 121, 232, 219, 212, 32, 121, 232, 219, 4, 
+    249, 227, 4, 110, 249, 227, 4, 243, 236, 218, 131, 4, 220, 152, 4, 249, 
+    234, 4, 224, 16, 79, 4, 245, 39, 79, 4, 245, 168, 248, 164, 4, 43, 226, 
+    7, 4, 44, 226, 7, 4, 43, 249, 107, 127, 4, 44, 249, 107, 127, 4, 43, 216, 
+    7, 220, 55, 127, 4, 44, 216, 7, 220, 55, 127, 4, 54, 50, 4, 254, 134, 4, 
+    253, 224, 4, 96, 50, 4, 240, 174, 4, 233, 21, 50, 4, 242, 137, 50, 4, 
+    245, 106, 50, 4, 223, 53, 219, 48, 4, 247, 140, 50, 4, 225, 185, 50, 4, 
+    249, 225, 253, 214, 9, 244, 172, 53, 17, 9, 217, 45, 2, 244, 172, 48, 9, 
+    248, 191, 53, 17, 9, 217, 79, 244, 9, 9, 234, 210, 53, 17, 9, 244, 174, 
+    53, 17, 9, 244, 174, 147, 17, 9, 248, 193, 53, 17, 9, 248, 193, 147, 17, 
+    9, 234, 212, 53, 17, 9, 234, 212, 147, 17, 9, 220, 96, 53, 17, 9, 220, 
+    96, 147, 17, 9, 218, 47, 53, 17, 9, 218, 47, 147, 17, 9, 1, 182, 53, 17, 
+    9, 1, 109, 2, 231, 233, 72, 53, 17, 9, 1, 109, 2, 231, 233, 72, 40, 17, 
+    9, 1, 109, 2, 182, 72, 53, 17, 9, 1, 109, 2, 182, 72, 40, 17, 9, 1, 212, 
+    31, 2, 182, 72, 53, 17, 9, 1, 212, 31, 2, 182, 72, 40, 17, 9, 1, 109, 2, 
+    182, 252, 51, 53, 17, 9, 1, 109, 2, 182, 252, 51, 40, 17, 9, 1, 77, 2, 
+    182, 72, 53, 17, 9, 1, 77, 2, 182, 72, 40, 17, 9, 1, 77, 2, 182, 72, 65, 
+    17, 9, 1, 77, 2, 182, 72, 147, 17, 9, 1, 109, 53, 17, 9, 1, 109, 40, 17, 
+    9, 1, 252, 63, 53, 17, 9, 1, 252, 63, 40, 17, 9, 1, 252, 63, 65, 17, 9, 
+    1, 252, 63, 147, 17, 9, 1, 217, 9, 231, 170, 53, 17, 9, 1, 217, 9, 231, 
+    170, 40, 17, 9, 1, 217, 9, 53, 17, 9, 1, 217, 9, 40, 17, 9, 1, 217, 9, 
+    65, 17, 9, 1, 217, 9, 147, 17, 9, 1, 216, 194, 53, 17, 9, 1, 216, 194, 
+    40, 17, 9, 1, 216, 194, 65, 17, 9, 1, 216, 194, 147, 17, 9, 1, 151, 53, 
+    17, 9, 1, 151, 40, 17, 9, 1, 151, 65, 17, 9, 1, 151, 147, 17, 9, 1, 122, 
+    53, 17, 9, 1, 122, 40, 17, 9, 1, 122, 65, 17, 9, 1, 122, 147, 17, 9, 1, 
+    234, 136, 53, 17, 9, 1, 234, 136, 40, 17, 9, 1, 234, 136, 65, 17, 9, 1, 
+    234, 136, 147, 17, 9, 1, 248, 204, 53, 17, 9, 1, 248, 204, 40, 17, 9, 1, 
+    216, 204, 53, 17, 9, 1, 216, 204, 40, 17, 9, 1, 223, 99, 53, 17, 9, 1, 
+    223, 99, 40, 17, 9, 1, 210, 109, 53, 17, 9, 1, 210, 109, 40, 17, 9, 1, 
+    221, 169, 53, 17, 9, 1, 221, 169, 40, 17, 9, 1, 221, 169, 65, 17, 9, 1, 
+    221, 169, 147, 17, 9, 1, 220, 62, 53, 17, 9, 1, 220, 62, 40, 17, 9, 1, 
+    220, 62, 65, 17, 9, 1, 220, 62, 147, 17, 9, 1, 222, 29, 53, 17, 9, 1, 
+    222, 29, 40, 17, 9, 1, 222, 29, 65, 17, 9, 1, 222, 29, 147, 17, 9, 1, 
+    248, 225, 53, 17, 9, 1, 248, 225, 40, 17, 9, 1, 248, 225, 65, 17, 9, 1, 
+    248, 225, 147, 17, 9, 1, 217, 82, 53, 17, 9, 1, 217, 82, 40, 17, 9, 1, 
+    217, 82, 65, 17, 9, 1, 217, 82, 147, 17, 9, 1, 210, 112, 53, 17, 9, 1, 
+    210, 112, 40, 17, 9, 1, 210, 112, 65, 17, 9, 1, 210, 112, 147, 17, 9, 1, 
+    254, 206, 53, 17, 9, 1, 254, 206, 40, 17, 9, 1, 254, 206, 65, 17, 9, 1, 
+    254, 206, 147, 17, 9, 1, 242, 252, 53, 17, 9, 1, 242, 252, 40, 17, 9, 1, 
+    242, 252, 65, 17, 9, 1, 242, 252, 147, 17, 9, 1, 244, 151, 53, 17, 9, 1, 
+    244, 151, 40, 17, 9, 1, 244, 151, 65, 17, 9, 1, 244, 151, 147, 17, 9, 1, 
+    224, 85, 53, 17, 9, 1, 224, 85, 40, 17, 9, 1, 224, 85, 65, 17, 9, 1, 224, 
+    85, 147, 17, 9, 1, 235, 1, 53, 17, 9, 1, 235, 1, 40, 17, 9, 1, 235, 1, 
+    65, 17, 9, 1, 235, 1, 147, 17, 9, 1, 233, 109, 53, 17, 9, 1, 233, 109, 
+    40, 17, 9, 1, 233, 109, 65, 17, 9, 1, 233, 109, 147, 17, 9, 1, 66, 53, 
+    17, 9, 1, 66, 40, 17, 9, 1, 66, 65, 17, 9, 1, 66, 147, 17, 9, 1, 228, 68, 
+    53, 17, 9, 1, 228, 68, 40, 17, 9, 1, 228, 68, 65, 17, 9, 1, 228, 68, 147, 
+    17, 9, 1, 241, 226, 53, 17, 9, 1, 241, 226, 40, 17, 9, 1, 241, 226, 65, 
+    17, 9, 1, 241, 226, 147, 17, 9, 1, 212, 31, 53, 17, 9, 1, 212, 31, 40, 
+    17, 9, 1, 109, 231, 198, 53, 17, 9, 1, 109, 231, 198, 40, 17, 9, 1, 77, 
+    53, 17, 9, 1, 77, 40, 17, 9, 1, 77, 65, 17, 9, 1, 77, 147, 17, 9, 27, 
+    233, 109, 2, 109, 2, 231, 233, 72, 53, 17, 9, 27, 233, 109, 2, 109, 2, 
+    231, 233, 72, 40, 17, 9, 27, 233, 109, 2, 109, 2, 182, 72, 53, 17, 9, 27, 
+    233, 109, 2, 109, 2, 182, 72, 40, 17, 9, 27, 233, 109, 2, 109, 2, 182, 
+    252, 51, 53, 17, 9, 27, 233, 109, 2, 109, 2, 182, 252, 51, 40, 17, 9, 27, 
+    233, 109, 2, 109, 53, 17, 9, 27, 233, 109, 2, 109, 40, 17, 210, 87, 211, 
+    245, 228, 78, 219, 20, 126, 245, 39, 79, 126, 224, 1, 79, 126, 54, 50, 
+    126, 247, 140, 50, 126, 225, 185, 50, 126, 254, 134, 126, 254, 65, 126, 
+    43, 226, 7, 126, 44, 226, 7, 126, 253, 224, 126, 96, 50, 126, 249, 227, 
+    126, 240, 174, 126, 243, 236, 218, 131, 126, 219, 48, 126, 21, 210, 86, 
+    126, 21, 111, 126, 21, 105, 126, 21, 158, 126, 21, 161, 126, 21, 190, 
+    126, 21, 195, 126, 21, 199, 126, 21, 196, 126, 21, 201, 126, 249, 234, 
+    126, 220, 152, 126, 233, 21, 50, 126, 245, 106, 50, 126, 242, 137, 50, 
+    126, 224, 16, 79, 126, 249, 225, 253, 214, 126, 7, 6, 1, 61, 126, 7, 6, 
+    1, 253, 166, 126, 7, 6, 1, 251, 74, 126, 7, 6, 1, 249, 68, 126, 7, 6, 1, 
+    76, 126, 7, 6, 1, 245, 14, 126, 7, 6, 1, 243, 209, 126, 7, 6, 1, 242, 67, 
+    126, 7, 6, 1, 74, 126, 7, 6, 1, 235, 150, 126, 7, 6, 1, 235, 29, 126, 7, 
+    6, 1, 156, 126, 7, 6, 1, 194, 126, 7, 6, 1, 230, 30, 126, 7, 6, 1, 78, 
+    126, 7, 6, 1, 226, 109, 126, 7, 6, 1, 224, 99, 126, 7, 6, 1, 153, 126, 7, 
+    6, 1, 222, 93, 126, 7, 6, 1, 217, 153, 126, 7, 6, 1, 69, 126, 7, 6, 1, 
+    214, 105, 126, 7, 6, 1, 212, 98, 126, 7, 6, 1, 211, 178, 126, 7, 6, 1, 
+    211, 117, 126, 7, 6, 1, 210, 159, 126, 43, 42, 127, 126, 223, 53, 219, 
+    48, 126, 44, 42, 127, 126, 250, 39, 255, 23, 126, 121, 232, 219, 126, 
+    242, 144, 255, 23, 126, 7, 4, 1, 61, 126, 7, 4, 1, 253, 166, 126, 7, 4, 
+    1, 251, 74, 126, 7, 4, 1, 249, 68, 126, 7, 4, 1, 76, 126, 7, 4, 1, 245, 
+    14, 126, 7, 4, 1, 243, 209, 126, 7, 4, 1, 242, 67, 126, 7, 4, 1, 74, 126, 
+    7, 4, 1, 235, 150, 126, 7, 4, 1, 235, 29, 126, 7, 4, 1, 156, 126, 7, 4, 
+    1, 194, 126, 7, 4, 1, 230, 30, 126, 7, 4, 1, 78, 126, 7, 4, 1, 226, 109, 
+    126, 7, 4, 1, 224, 99, 126, 7, 4, 1, 153, 126, 7, 4, 1, 222, 93, 126, 7, 
+    4, 1, 217, 153, 126, 7, 4, 1, 69, 126, 7, 4, 1, 214, 105, 126, 7, 4, 1, 
+    212, 98, 126, 7, 4, 1, 211, 178, 126, 7, 4, 1, 211, 117, 126, 7, 4, 1, 
+    210, 159, 126, 43, 249, 107, 127, 126, 67, 232, 219, 126, 44, 249, 107, 
+    127, 126, 184, 126, 43, 71, 226, 7, 126, 44, 71, 226, 7, 101, 110, 243, 
+    236, 218, 131, 101, 43, 249, 169, 127, 101, 44, 249, 169, 127, 101, 110, 
+    249, 227, 101, 56, 230, 229, 247, 128, 101, 56, 1, 211, 227, 101, 56, 1, 
+    4, 61, 101, 56, 1, 4, 74, 101, 56, 1, 4, 69, 101, 56, 1, 4, 76, 101, 56, 
+    1, 4, 78, 101, 56, 1, 4, 192, 101, 56, 1, 4, 210, 212, 101, 56, 1, 4, 
+    210, 244, 101, 56, 1, 4, 215, 119, 101, 234, 207, 224, 176, 219, 33, 79, 
+    101, 56, 1, 61, 101, 56, 1, 74, 101, 56, 1, 69, 101, 56, 1, 76, 101, 56, 
+    1, 78, 101, 56, 1, 176, 101, 56, 1, 234, 98, 101, 56, 1, 233, 223, 101, 
+    56, 1, 234, 188, 101, 56, 1, 234, 34, 101, 56, 1, 206, 101, 56, 1, 219, 
+    193, 101, 56, 1, 218, 84, 101, 56, 1, 221, 183, 101, 56, 1, 219, 60, 101, 
+    56, 1, 217, 106, 101, 56, 1, 216, 118, 101, 56, 1, 215, 119, 101, 56, 1, 
+    217, 23, 101, 56, 1, 112, 101, 56, 1, 198, 101, 56, 1, 228, 238, 101, 56, 
+    1, 227, 242, 101, 56, 1, 229, 112, 101, 56, 1, 228, 79, 101, 56, 1, 162, 
+    101, 56, 1, 241, 187, 101, 56, 1, 240, 229, 101, 56, 1, 241, 245, 101, 
+    56, 1, 241, 75, 101, 56, 1, 186, 101, 56, 1, 230, 235, 101, 56, 1, 230, 
+    107, 101, 56, 1, 231, 96, 101, 56, 1, 230, 166, 101, 56, 1, 192, 101, 56, 
+    1, 210, 212, 101, 56, 1, 210, 244, 101, 56, 1, 205, 101, 56, 1, 223, 38, 
+    101, 56, 1, 222, 142, 101, 56, 1, 223, 131, 101, 56, 1, 222, 213, 101, 
+    56, 1, 212, 65, 101, 56, 1, 230, 30, 101, 56, 213, 135, 219, 33, 79, 101, 
+    56, 220, 157, 219, 33, 79, 101, 24, 244, 111, 101, 24, 1, 234, 64, 101, 
+    24, 1, 218, 217, 101, 24, 1, 234, 57, 101, 24, 1, 228, 231, 101, 24, 1, 
+    228, 229, 101, 24, 1, 228, 228, 101, 24, 1, 216, 102, 101, 24, 1, 218, 
+    206, 101, 24, 1, 223, 29, 101, 24, 1, 223, 24, 101, 24, 1, 223, 21, 101, 
+    24, 1, 223, 14, 101, 24, 1, 223, 9, 101, 24, 1, 223, 4, 101, 24, 1, 223, 
+    15, 101, 24, 1, 223, 27, 101, 24, 1, 230, 222, 101, 24, 1, 225, 98, 101, 
+    24, 1, 218, 214, 101, 24, 1, 225, 87, 101, 24, 1, 219, 150, 101, 24, 1, 
+    218, 211, 101, 24, 1, 236, 63, 101, 24, 1, 250, 54, 101, 24, 1, 218, 221, 
+    101, 24, 1, 250, 114, 101, 24, 1, 234, 116, 101, 24, 1, 216, 174, 101, 
+    24, 1, 225, 134, 101, 24, 1, 241, 179, 101, 24, 1, 61, 101, 24, 1, 254, 
+    252, 101, 24, 1, 192, 101, 24, 1, 211, 92, 101, 24, 1, 245, 125, 101, 24, 
+    1, 76, 101, 24, 1, 211, 36, 101, 24, 1, 211, 47, 101, 24, 1, 78, 101, 24, 
+    1, 212, 65, 101, 24, 1, 212, 62, 101, 24, 1, 226, 238, 101, 24, 1, 210, 
+    244, 101, 24, 1, 69, 101, 24, 1, 212, 11, 101, 24, 1, 212, 22, 101, 24, 
+    1, 211, 250, 101, 24, 1, 210, 212, 101, 24, 1, 245, 63, 101, 24, 1, 211, 
+    8, 101, 24, 1, 74, 126, 250, 184, 50, 126, 224, 231, 50, 126, 228, 57, 
+    50, 126, 231, 237, 126, 251, 143, 130, 126, 211, 40, 50, 126, 211, 217, 
+    50, 101, 244, 26, 193, 213, 239, 101, 140, 75, 101, 214, 153, 75, 101, 
+    97, 75, 101, 246, 112, 75, 101, 85, 218, 236, 101, 71, 250, 43, 235, 211, 
+    254, 107, 254, 128, 235, 211, 254, 107, 220, 139, 235, 211, 254, 107, 
+    216, 237, 226, 253, 223, 75, 250, 150, 223, 75, 250, 150, 62, 57, 3, 253, 
+    150, 61, 62, 57, 3, 253, 119, 76, 62, 57, 3, 253, 128, 74, 62, 57, 3, 
+    253, 96, 78, 62, 57, 3, 253, 146, 69, 62, 57, 3, 253, 165, 248, 229, 62, 
+    57, 3, 253, 112, 248, 98, 62, 57, 3, 253, 152, 248, 11, 62, 57, 3, 253, 
+    142, 247, 153, 62, 57, 3, 253, 106, 246, 86, 62, 57, 3, 253, 100, 235, 
+    147, 62, 57, 3, 253, 111, 235, 132, 62, 57, 3, 253, 121, 235, 74, 62, 57, 
+    3, 253, 92, 235, 57, 62, 57, 3, 253, 80, 176, 62, 57, 3, 253, 113, 234, 
+    188, 62, 57, 3, 253, 90, 234, 98, 62, 57, 3, 253, 87, 234, 34, 62, 57, 3, 
+    253, 76, 233, 223, 62, 57, 3, 253, 77, 186, 62, 57, 3, 253, 143, 231, 96, 
+    62, 57, 3, 253, 84, 230, 235, 62, 57, 3, 253, 141, 230, 166, 62, 57, 3, 
+    253, 133, 230, 107, 62, 57, 3, 253, 154, 198, 62, 57, 3, 253, 132, 229, 
+    112, 62, 57, 3, 253, 126, 228, 238, 62, 57, 3, 253, 105, 228, 79, 62, 57, 
+    3, 253, 102, 227, 242, 62, 57, 3, 253, 161, 191, 62, 57, 3, 253, 85, 225, 
+    224, 62, 57, 3, 253, 118, 225, 111, 62, 57, 3, 253, 145, 225, 19, 62, 57, 
+    3, 253, 107, 224, 153, 62, 57, 3, 253, 140, 224, 91, 62, 57, 3, 253, 79, 
+    224, 72, 62, 57, 3, 253, 135, 224, 56, 62, 57, 3, 253, 124, 224, 45, 62, 
+    57, 3, 253, 97, 205, 62, 57, 3, 253, 129, 223, 131, 62, 57, 3, 253, 104, 
+    223, 38, 62, 57, 3, 253, 163, 222, 213, 62, 57, 3, 253, 130, 222, 142, 
+    62, 57, 3, 253, 125, 206, 62, 57, 3, 253, 148, 221, 183, 62, 57, 3, 253, 
+    116, 219, 193, 62, 57, 3, 253, 144, 219, 60, 62, 57, 3, 253, 99, 218, 84, 
+    62, 57, 3, 253, 98, 217, 106, 62, 57, 3, 253, 159, 217, 23, 62, 57, 3, 
+    253, 120, 216, 118, 62, 57, 3, 253, 157, 112, 62, 57, 3, 253, 88, 215, 
+    119, 62, 57, 3, 253, 103, 212, 65, 62, 57, 3, 253, 82, 212, 22, 62, 57, 
+    3, 253, 117, 211, 250, 62, 57, 3, 253, 115, 211, 227, 62, 57, 3, 253, 
+    139, 210, 116, 62, 57, 3, 253, 83, 210, 94, 62, 57, 3, 253, 136, 210, 23, 
+    62, 57, 3, 253, 131, 255, 84, 62, 57, 3, 253, 114, 255, 83, 62, 57, 3, 
+    253, 73, 253, 200, 62, 57, 3, 253, 86, 246, 54, 62, 57, 3, 253, 69, 246, 
+    53, 62, 57, 3, 253, 109, 227, 178, 62, 57, 3, 253, 127, 224, 151, 62, 57, 
+    3, 253, 95, 224, 155, 62, 57, 3, 253, 81, 223, 189, 62, 57, 3, 253, 123, 
+    223, 188, 62, 57, 3, 253, 89, 222, 212, 62, 57, 3, 253, 91, 217, 103, 62, 
+    57, 3, 253, 71, 215, 78, 62, 57, 3, 253, 68, 105, 62, 57, 16, 253, 138, 
+    62, 57, 16, 253, 137, 62, 57, 16, 253, 134, 62, 57, 16, 253, 122, 62, 57, 
+    16, 253, 110, 62, 57, 16, 253, 108, 62, 57, 16, 253, 101, 62, 57, 16, 
+    253, 94, 62, 57, 16, 253, 93, 62, 57, 16, 253, 78, 62, 57, 16, 253, 75, 
+    62, 57, 16, 253, 74, 62, 57, 16, 253, 72, 62, 57, 16, 253, 70, 62, 57, 
+    106, 253, 67, 231, 190, 62, 57, 106, 253, 66, 211, 221, 62, 57, 106, 253, 
+    65, 248, 82, 62, 57, 106, 253, 64, 245, 103, 62, 57, 106, 253, 63, 231, 
+    164, 62, 57, 106, 253, 62, 218, 164, 62, 57, 106, 253, 61, 245, 45, 62, 
+    57, 106, 253, 60, 223, 156, 62, 57, 106, 253, 59, 220, 64, 62, 57, 106, 
+    253, 58, 241, 244, 62, 57, 106, 253, 57, 219, 27, 62, 57, 106, 253, 56, 
+    251, 211, 62, 57, 106, 253, 55, 249, 153, 62, 57, 106, 253, 54, 251, 123, 
+    62, 57, 106, 253, 53, 212, 2, 62, 57, 106, 253, 52, 252, 144, 62, 57, 
+    106, 253, 51, 226, 209, 62, 57, 106, 253, 50, 219, 0, 62, 57, 106, 253, 
+    49, 249, 76, 62, 57, 230, 147, 253, 48, 234, 230, 62, 57, 230, 147, 253, 
+    47, 234, 238, 62, 57, 106, 253, 46, 226, 222, 62, 57, 106, 253, 45, 211, 
+    236, 62, 57, 106, 253, 44, 62, 57, 230, 147, 253, 43, 254, 25, 62, 57, 
+    230, 147, 253, 42, 231, 57, 62, 57, 106, 253, 41, 251, 142, 62, 57, 106, 
+    253, 40, 242, 173, 62, 57, 106, 253, 39, 62, 57, 106, 253, 38, 211, 212, 
+    62, 57, 106, 253, 37, 62, 57, 106, 253, 36, 62, 57, 106, 253, 35, 240, 
+    255, 62, 57, 106, 253, 34, 62, 57, 106, 253, 33, 62, 57, 106, 253, 32, 
+    62, 57, 230, 147, 253, 30, 215, 92, 62, 57, 106, 253, 29, 62, 57, 106, 
+    253, 28, 62, 57, 106, 253, 27, 250, 2, 62, 57, 106, 253, 26, 62, 57, 106, 
+    253, 25, 62, 57, 106, 253, 24, 243, 100, 62, 57, 106, 253, 23, 254, 12, 
+    62, 57, 106, 253, 22, 62, 57, 106, 253, 21, 62, 57, 106, 253, 20, 62, 57, 
+    106, 253, 19, 62, 57, 106, 253, 18, 62, 57, 106, 253, 17, 62, 57, 106, 
+    253, 16, 62, 57, 106, 253, 15, 62, 57, 106, 253, 14, 62, 57, 106, 253, 
+    13, 230, 139, 62, 57, 106, 253, 12, 62, 57, 106, 253, 11, 215, 236, 62, 
+    57, 106, 253, 10, 62, 57, 106, 253, 9, 62, 57, 106, 253, 8, 62, 57, 106, 
+    253, 7, 62, 57, 106, 253, 6, 62, 57, 106, 253, 5, 62, 57, 106, 253, 4, 
+    62, 57, 106, 253, 3, 62, 57, 106, 253, 2, 62, 57, 106, 253, 1, 62, 57, 
+    106, 253, 0, 62, 57, 106, 252, 255, 241, 218, 62, 57, 106, 252, 234, 244, 
+    36, 62, 57, 106, 252, 231, 252, 124, 62, 57, 106, 252, 226, 219, 7, 62, 
+    57, 106, 252, 225, 75, 62, 57, 106, 252, 224, 62, 57, 106, 252, 223, 217, 
+    237, 62, 57, 106, 252, 222, 62, 57, 106, 252, 221, 62, 57, 106, 252, 220, 
+    211, 254, 250, 147, 62, 57, 106, 252, 219, 250, 147, 62, 57, 106, 252, 
+    218, 250, 148, 244, 7, 62, 57, 106, 252, 217, 212, 0, 62, 57, 106, 252, 
+    216, 62, 57, 106, 252, 215, 62, 57, 230, 147, 252, 214, 247, 206, 62, 57, 
+    106, 252, 213, 62, 57, 106, 252, 212, 62, 57, 106, 252, 210, 62, 57, 106, 
+    252, 209, 62, 57, 106, 252, 208, 62, 57, 106, 252, 207, 248, 167, 62, 57, 
+    106, 252, 206, 62, 57, 106, 252, 205, 62, 57, 106, 252, 204, 62, 57, 106, 
+    252, 203, 62, 57, 106, 252, 202, 62, 57, 106, 213, 186, 253, 31, 62, 57, 
+    106, 213, 186, 252, 254, 62, 57, 106, 213, 186, 252, 253, 62, 57, 106, 
+    213, 186, 252, 252, 62, 57, 106, 213, 186, 252, 251, 62, 57, 106, 213, 
+    186, 252, 250, 62, 57, 106, 213, 186, 252, 249, 62, 57, 106, 213, 186, 
+    252, 248, 62, 57, 106, 213, 186, 252, 247, 62, 57, 106, 213, 186, 252, 
+    246, 62, 57, 106, 213, 186, 252, 245, 62, 57, 106, 213, 186, 252, 244, 
+    62, 57, 106, 213, 186, 252, 243, 62, 57, 106, 213, 186, 252, 242, 62, 57, 
+    106, 213, 186, 252, 241, 62, 57, 106, 213, 186, 252, 240, 62, 57, 106, 
+    213, 186, 252, 239, 62, 57, 106, 213, 186, 252, 238, 62, 57, 106, 213, 
+    186, 252, 237, 62, 57, 106, 213, 186, 252, 236, 62, 57, 106, 213, 186, 
+    252, 235, 62, 57, 106, 213, 186, 252, 233, 62, 57, 106, 213, 186, 252, 
+    232, 62, 57, 106, 213, 186, 252, 230, 62, 57, 106, 213, 186, 252, 229, 
+    62, 57, 106, 213, 186, 252, 228, 62, 57, 106, 213, 186, 252, 227, 62, 57, 
+    106, 213, 186, 252, 211, 62, 57, 106, 213, 186, 252, 201, 254, 245, 211, 
+    209, 220, 140, 232, 219, 254, 245, 211, 209, 220, 140, 247, 128, 254, 
+    245, 250, 138, 79, 254, 245, 54, 111, 254, 245, 54, 105, 254, 245, 54, 
+    158, 254, 245, 54, 161, 254, 245, 54, 190, 254, 245, 54, 195, 254, 245, 
+    54, 199, 254, 245, 54, 196, 254, 245, 54, 201, 254, 245, 54, 216, 248, 
+    254, 245, 54, 215, 73, 254, 245, 54, 216, 163, 254, 245, 54, 244, 23, 
+    254, 245, 54, 244, 122, 254, 245, 54, 219, 113, 254, 245, 54, 220, 118, 
+    254, 245, 54, 245, 192, 254, 245, 54, 228, 200, 254, 245, 54, 123, 240, 
+    217, 254, 245, 54, 113, 240, 217, 254, 245, 54, 134, 240, 217, 254, 245, 
+    54, 244, 19, 240, 217, 254, 245, 54, 244, 89, 240, 217, 254, 245, 54, 
+    219, 127, 240, 217, 254, 245, 54, 220, 124, 240, 217, 254, 245, 54, 245, 
+    201, 240, 217, 254, 245, 54, 228, 205, 240, 217, 254, 245, 54, 123, 216, 
+    148, 254, 245, 54, 113, 216, 148, 254, 245, 54, 134, 216, 148, 254, 245, 
+    54, 244, 19, 216, 148, 254, 245, 54, 244, 89, 216, 148, 254, 245, 54, 
+    219, 127, 216, 148, 254, 245, 54, 220, 124, 216, 148, 254, 245, 54, 245, 
+    201, 216, 148, 254, 245, 54, 228, 205, 216, 148, 254, 245, 54, 216, 249, 
+    216, 148, 254, 245, 54, 215, 74, 216, 148, 254, 245, 54, 216, 164, 216, 
+    148, 254, 245, 54, 244, 24, 216, 148, 254, 245, 54, 244, 123, 216, 148, 
+    254, 245, 54, 219, 114, 216, 148, 254, 245, 54, 220, 119, 216, 148, 254, 
+    245, 54, 245, 193, 216, 148, 254, 245, 54, 228, 201, 216, 148, 254, 245, 
+    212, 14, 252, 136, 214, 173, 254, 245, 212, 14, 244, 100, 218, 60, 254, 
+    245, 212, 14, 221, 178, 218, 60, 254, 245, 212, 14, 216, 170, 218, 60, 
+    254, 245, 212, 14, 244, 12, 218, 60, 254, 245, 246, 89, 231, 95, 244, 
+    100, 218, 60, 254, 245, 232, 205, 231, 95, 244, 100, 218, 60, 254, 245, 
+    231, 95, 221, 178, 218, 60, 254, 245, 231, 95, 216, 170, 218, 60, 26, 
+    255, 15, 253, 202, 123, 224, 24, 26, 255, 15, 253, 202, 123, 242, 34, 26, 
+    255, 15, 253, 202, 123, 246, 108, 26, 255, 15, 253, 202, 190, 26, 255, 
+    15, 253, 202, 244, 122, 26, 255, 15, 253, 202, 244, 89, 240, 217, 26, 
+    255, 15, 253, 202, 244, 89, 216, 148, 26, 255, 15, 253, 202, 244, 123, 
+    216, 148, 26, 255, 15, 253, 202, 244, 89, 217, 68, 26, 255, 15, 253, 202, 
+    216, 249, 217, 68, 26, 255, 15, 253, 202, 244, 123, 217, 68, 26, 255, 15, 
+    253, 202, 123, 240, 218, 217, 68, 26, 255, 15, 253, 202, 244, 89, 240, 
+    218, 217, 68, 26, 255, 15, 253, 202, 123, 216, 149, 217, 68, 26, 255, 15, 
+    253, 202, 244, 89, 216, 149, 217, 68, 26, 255, 15, 253, 202, 244, 89, 
+    218, 152, 26, 255, 15, 253, 202, 216, 249, 218, 152, 26, 255, 15, 253, 
+    202, 244, 123, 218, 152, 26, 255, 15, 253, 202, 123, 240, 218, 218, 152, 
+    26, 255, 15, 253, 202, 244, 89, 240, 218, 218, 152, 26, 255, 15, 253, 
+    202, 123, 216, 149, 218, 152, 26, 255, 15, 253, 202, 216, 249, 216, 149, 
+    218, 152, 26, 255, 15, 253, 202, 244, 123, 216, 149, 218, 152, 26, 255, 
+    15, 253, 202, 216, 249, 230, 169, 26, 255, 15, 241, 212, 123, 225, 34, 
+    26, 255, 15, 216, 182, 111, 26, 255, 15, 241, 208, 111, 26, 255, 15, 245, 
+    112, 105, 26, 255, 15, 216, 182, 105, 26, 255, 15, 249, 73, 113, 246, 
+    107, 26, 255, 15, 245, 112, 113, 246, 107, 26, 255, 15, 215, 204, 190, 
+    26, 255, 15, 215, 204, 216, 248, 26, 255, 15, 215, 204, 216, 249, 254, 
+    149, 17, 26, 255, 15, 241, 208, 216, 248, 26, 255, 15, 231, 46, 216, 248, 
+    26, 255, 15, 216, 182, 216, 248, 26, 255, 15, 216, 182, 216, 163, 26, 
+    255, 15, 215, 204, 244, 122, 26, 255, 15, 215, 204, 244, 123, 254, 149, 
+    17, 26, 255, 15, 241, 208, 244, 122, 26, 255, 15, 216, 182, 244, 122, 26, 
+    255, 15, 216, 182, 123, 240, 217, 26, 255, 15, 216, 182, 134, 240, 217, 
+    26, 255, 15, 245, 112, 244, 89, 240, 217, 26, 255, 15, 215, 204, 244, 89, 
+    240, 217, 26, 255, 15, 216, 182, 244, 89, 240, 217, 26, 255, 15, 250, 
+    235, 244, 89, 240, 217, 26, 255, 15, 229, 187, 244, 89, 240, 217, 26, 
+    255, 15, 216, 182, 123, 216, 148, 26, 255, 15, 216, 182, 244, 89, 216, 
+    148, 26, 255, 15, 248, 65, 244, 89, 230, 169, 26, 255, 15, 218, 120, 244, 
+    123, 230, 169, 26, 123, 163, 50, 26, 123, 163, 5, 254, 149, 17, 26, 113, 
+    216, 168, 50, 26, 134, 224, 23, 50, 26, 211, 45, 50, 26, 217, 69, 50, 26, 
+    246, 109, 50, 26, 226, 250, 50, 26, 113, 226, 249, 50, 26, 134, 226, 249, 
+    50, 26, 244, 19, 226, 249, 50, 26, 244, 89, 226, 249, 50, 26, 231, 40, 
+    50, 26, 233, 163, 252, 136, 50, 26, 232, 200, 50, 26, 226, 135, 50, 26, 
+    211, 159, 50, 26, 253, 251, 50, 26, 254, 8, 50, 26, 242, 151, 50, 26, 
+    215, 187, 252, 136, 50, 26, 210, 87, 50, 222, 200, 220, 115, 50, 222, 
+    200, 214, 185, 50, 222, 200, 220, 144, 50, 222, 200, 220, 113, 50, 222, 
+    200, 247, 221, 220, 113, 50, 222, 200, 219, 170, 50, 222, 200, 248, 61, 
+    50, 222, 200, 224, 9, 50, 222, 200, 220, 131, 50, 222, 200, 246, 68, 50, 
+    222, 200, 253, 246, 50, 222, 200, 250, 179, 50, 225, 146, 247, 199, 5, 
+    225, 216, 225, 146, 247, 199, 5, 225, 27, 241, 242, 225, 146, 247, 199, 
+    5, 217, 46, 241, 242, 225, 146, 247, 199, 5, 250, 255, 225, 146, 247, 
+    199, 5, 250, 109, 225, 146, 247, 199, 5, 211, 221, 225, 146, 247, 199, 5, 
+    241, 218, 225, 146, 247, 199, 5, 243, 92, 225, 146, 247, 199, 5, 216, 
+    117, 225, 146, 247, 199, 5, 75, 225, 146, 247, 199, 5, 251, 177, 225, 
+    146, 247, 199, 5, 220, 31, 225, 146, 247, 199, 5, 249, 252, 225, 146, 
+    247, 199, 5, 231, 189, 225, 146, 247, 199, 5, 231, 141, 225, 146, 247, 
+    199, 5, 221, 218, 225, 146, 247, 199, 5, 232, 243, 225, 146, 247, 199, 5, 
+    251, 196, 225, 146, 247, 199, 5, 250, 239, 225, 38, 225, 146, 247, 199, 
+    5, 247, 141, 225, 146, 247, 199, 5, 249, 231, 225, 146, 247, 199, 5, 219, 
+    89, 225, 146, 247, 199, 5, 249, 232, 225, 146, 247, 199, 5, 252, 71, 225, 
+    146, 247, 199, 5, 220, 18, 225, 146, 247, 199, 5, 240, 255, 225, 146, 
+    247, 199, 5, 241, 185, 225, 146, 247, 199, 5, 251, 120, 233, 42, 225, 
+    146, 247, 199, 5, 250, 232, 225, 146, 247, 199, 5, 223, 156, 225, 146, 
+    247, 199, 5, 245, 238, 225, 146, 247, 199, 5, 246, 115, 225, 146, 247, 
+    199, 5, 215, 106, 225, 146, 247, 199, 5, 252, 74, 225, 146, 247, 199, 5, 
+    225, 39, 215, 236, 225, 146, 247, 199, 5, 213, 159, 225, 146, 247, 199, 
+    5, 226, 22, 225, 146, 247, 199, 5, 222, 192, 225, 146, 247, 199, 5, 232, 
+    230, 225, 146, 247, 199, 5, 226, 119, 252, 192, 225, 146, 247, 199, 5, 
+    244, 56, 225, 146, 247, 199, 5, 242, 145, 225, 146, 247, 199, 5, 218, 
+    121, 225, 146, 247, 199, 5, 4, 253, 176, 225, 146, 247, 199, 5, 212, 32, 
+    252, 156, 225, 146, 247, 199, 5, 38, 226, 252, 91, 232, 65, 1, 61, 232, 
+    65, 1, 76, 232, 65, 1, 253, 166, 232, 65, 1, 252, 27, 232, 65, 1, 243, 
+    209, 232, 65, 1, 249, 68, 232, 65, 1, 74, 232, 65, 1, 212, 98, 232, 65, 
+    1, 210, 159, 232, 65, 1, 216, 211, 232, 65, 1, 235, 150, 232, 65, 1, 235, 
+    29, 232, 65, 1, 224, 99, 232, 65, 1, 156, 232, 65, 1, 194, 232, 65, 1, 
+    230, 30, 232, 65, 1, 230, 171, 232, 65, 1, 228, 116, 232, 65, 1, 69, 232, 
+    65, 1, 226, 109, 232, 65, 1, 234, 53, 232, 65, 1, 153, 232, 65, 1, 222, 
+    93, 232, 65, 1, 217, 153, 232, 65, 1, 215, 160, 232, 65, 1, 254, 131, 
+    232, 65, 1, 245, 158, 232, 65, 1, 242, 67, 232, 65, 1, 211, 178, 250, 
+    245, 1, 61, 250, 245, 1, 226, 95, 250, 245, 1, 249, 68, 250, 245, 1, 156, 
+    250, 245, 1, 214, 116, 250, 245, 1, 153, 250, 245, 1, 233, 68, 250, 245, 
+    1, 255, 84, 250, 245, 1, 224, 99, 250, 245, 1, 253, 166, 250, 245, 1, 
+    194, 250, 245, 1, 78, 250, 245, 1, 248, 231, 250, 245, 1, 217, 153, 250, 
+    245, 1, 220, 106, 250, 245, 1, 220, 105, 250, 245, 1, 222, 93, 250, 245, 
+    1, 251, 73, 250, 245, 1, 69, 250, 245, 1, 228, 116, 250, 245, 1, 211, 
+    178, 250, 245, 1, 230, 30, 250, 245, 1, 215, 159, 250, 245, 1, 226, 109, 
+    250, 245, 1, 218, 228, 250, 245, 1, 74, 250, 245, 1, 76, 250, 245, 1, 
+    214, 113, 250, 245, 1, 235, 29, 250, 245, 1, 235, 20, 250, 245, 1, 229, 
+    155, 250, 245, 1, 214, 118, 250, 245, 1, 243, 209, 250, 245, 1, 243, 144, 
+    250, 245, 1, 218, 170, 250, 245, 1, 218, 169, 250, 245, 1, 229, 84, 250, 
+    245, 1, 236, 40, 250, 245, 1, 251, 72, 250, 245, 1, 215, 160, 250, 245, 
+    1, 214, 115, 250, 245, 1, 222, 182, 250, 245, 1, 231, 134, 250, 245, 1, 
+    231, 133, 250, 245, 1, 231, 132, 250, 245, 1, 231, 131, 250, 245, 1, 233, 
+    67, 250, 245, 1, 245, 242, 250, 245, 1, 214, 114, 55, 32, 1, 61, 55, 32, 
+    1, 252, 83, 55, 32, 1, 234, 188, 55, 32, 1, 248, 98, 55, 32, 1, 76, 55, 
+    32, 1, 213, 255, 55, 32, 1, 210, 94, 55, 32, 1, 241, 245, 55, 32, 1, 216, 
+    196, 55, 32, 1, 74, 55, 32, 1, 176, 55, 32, 1, 245, 182, 55, 32, 1, 245, 
+    167, 55, 32, 1, 245, 158, 55, 32, 1, 245, 83, 55, 32, 1, 78, 55, 32, 1, 
+    225, 224, 55, 32, 1, 220, 65, 55, 32, 1, 233, 223, 55, 32, 1, 245, 100, 
+    55, 32, 1, 245, 90, 55, 32, 1, 217, 23, 55, 32, 1, 69, 55, 32, 1, 245, 
+    185, 55, 32, 1, 225, 139, 55, 32, 1, 234, 125, 55, 32, 1, 245, 210, 55, 
+    32, 1, 245, 92, 55, 32, 1, 250, 139, 55, 32, 1, 236, 40, 55, 32, 1, 214, 
+    118, 55, 32, 227, 202, 111, 55, 32, 227, 202, 190, 55, 32, 227, 202, 216, 
+    248, 55, 32, 227, 202, 244, 122, 242, 160, 1, 254, 213, 242, 160, 1, 252, 
+    171, 242, 160, 1, 242, 218, 242, 160, 1, 248, 212, 242, 160, 1, 254, 209, 
+    242, 160, 1, 224, 82, 242, 160, 1, 235, 161, 242, 160, 1, 242, 46, 242, 
+    160, 1, 216, 159, 242, 160, 1, 245, 191, 242, 160, 1, 233, 196, 242, 160, 
+    1, 233, 119, 242, 160, 1, 231, 184, 242, 160, 1, 229, 189, 242, 160, 1, 
+    235, 125, 242, 160, 1, 214, 136, 242, 160, 1, 226, 73, 242, 160, 1, 228, 
+    200, 242, 160, 1, 223, 168, 242, 160, 1, 221, 220, 242, 160, 1, 217, 5, 
+    242, 160, 1, 211, 234, 242, 160, 1, 244, 186, 242, 160, 1, 236, 44, 242, 
+    160, 1, 240, 206, 242, 160, 1, 226, 143, 242, 160, 1, 228, 205, 240, 217, 
+    214, 209, 1, 254, 155, 214, 209, 1, 252, 34, 214, 209, 1, 243, 115, 214, 
+    209, 1, 234, 138, 214, 209, 1, 248, 62, 214, 209, 1, 241, 75, 214, 209, 
+    1, 211, 227, 214, 209, 1, 210, 85, 214, 209, 1, 240, 248, 214, 209, 1, 
+    216, 231, 214, 209, 1, 210, 233, 214, 209, 1, 235, 0, 214, 209, 1, 220, 
+    22, 214, 209, 1, 233, 104, 214, 209, 1, 231, 70, 214, 209, 1, 248, 29, 
+    214, 209, 1, 227, 198, 214, 209, 1, 210, 13, 214, 209, 1, 221, 250, 214, 
+    209, 1, 254, 205, 214, 209, 1, 224, 153, 214, 209, 1, 222, 27, 214, 209, 
+    1, 224, 38, 214, 209, 1, 223, 147, 214, 209, 1, 216, 200, 214, 209, 1, 
+    242, 251, 214, 209, 1, 112, 214, 209, 1, 74, 214, 209, 1, 69, 214, 209, 
+    1, 218, 181, 214, 209, 211, 209, 247, 180, 55, 225, 172, 5, 61, 55, 225, 
+    172, 5, 74, 55, 225, 172, 5, 69, 55, 225, 172, 5, 176, 55, 225, 172, 5, 
+    233, 223, 55, 225, 172, 5, 243, 142, 55, 225, 172, 5, 242, 120, 55, 225, 
+    172, 5, 211, 165, 55, 225, 172, 5, 251, 41, 55, 225, 172, 5, 235, 147, 
+    55, 225, 172, 5, 235, 114, 55, 225, 172, 5, 217, 106, 55, 225, 172, 5, 
+    215, 119, 55, 225, 172, 5, 248, 229, 55, 225, 172, 5, 248, 11, 55, 225, 
+    172, 5, 246, 86, 55, 225, 172, 5, 216, 209, 55, 225, 172, 5, 191, 55, 
+    225, 172, 5, 252, 199, 55, 225, 172, 5, 244, 204, 55, 225, 172, 5, 198, 
+    55, 225, 172, 5, 227, 242, 55, 225, 172, 5, 186, 55, 225, 172, 5, 230, 
+    235, 55, 225, 172, 5, 230, 107, 55, 225, 172, 5, 192, 55, 225, 172, 5, 
+    214, 27, 55, 225, 172, 5, 213, 176, 55, 225, 172, 5, 205, 55, 225, 172, 
+    5, 222, 142, 55, 225, 172, 5, 233, 141, 55, 225, 172, 5, 206, 55, 225, 
+    172, 5, 210, 116, 55, 225, 172, 5, 220, 104, 55, 225, 172, 5, 218, 225, 
+    55, 225, 172, 5, 162, 55, 225, 172, 5, 253, 194, 55, 225, 172, 5, 253, 
+    193, 55, 225, 172, 5, 253, 192, 55, 225, 172, 5, 211, 142, 55, 225, 172, 
+    5, 248, 208, 55, 225, 172, 5, 248, 207, 55, 225, 172, 5, 252, 178, 55, 
+    225, 172, 5, 251, 93, 55, 225, 172, 211, 209, 247, 180, 55, 225, 172, 54, 
+    111, 55, 225, 172, 54, 105, 55, 225, 172, 54, 216, 248, 55, 225, 172, 54, 
+    215, 73, 55, 225, 172, 54, 240, 217, 181, 6, 1, 200, 74, 181, 6, 1, 200, 
+    76, 181, 6, 1, 200, 61, 181, 6, 1, 200, 254, 218, 181, 6, 1, 200, 78, 
+    181, 6, 1, 200, 226, 187, 181, 6, 1, 219, 253, 74, 181, 6, 1, 219, 253, 
+    76, 181, 6, 1, 219, 253, 61, 181, 6, 1, 219, 253, 254, 218, 181, 6, 1, 
+    219, 253, 78, 181, 6, 1, 219, 253, 226, 187, 181, 6, 1, 253, 175, 181, 6, 
+    1, 226, 120, 181, 6, 1, 211, 195, 181, 6, 1, 211, 44, 181, 6, 1, 242, 67, 
+    181, 6, 1, 225, 214, 181, 6, 1, 252, 74, 181, 6, 1, 217, 12, 181, 6, 1, 
+    248, 85, 181, 6, 1, 250, 136, 181, 6, 1, 235, 130, 181, 6, 1, 234, 195, 
+    181, 6, 1, 243, 90, 181, 6, 1, 245, 210, 181, 6, 1, 213, 250, 181, 6, 1, 
+    245, 67, 181, 6, 1, 216, 195, 181, 6, 1, 245, 90, 181, 6, 1, 210, 92, 
+    181, 6, 1, 245, 83, 181, 6, 1, 210, 73, 181, 6, 1, 245, 100, 181, 6, 1, 
+    245, 182, 181, 6, 1, 245, 167, 181, 6, 1, 245, 158, 181, 6, 1, 245, 146, 
+    181, 6, 1, 226, 223, 181, 6, 1, 245, 46, 181, 4, 1, 200, 74, 181, 4, 1, 
+    200, 76, 181, 4, 1, 200, 61, 181, 4, 1, 200, 254, 218, 181, 4, 1, 200, 
+    78, 181, 4, 1, 200, 226, 187, 181, 4, 1, 219, 253, 74, 181, 4, 1, 219, 
+    253, 76, 181, 4, 1, 219, 253, 61, 181, 4, 1, 219, 253, 254, 218, 181, 4, 
+    1, 219, 253, 78, 181, 4, 1, 219, 253, 226, 187, 181, 4, 1, 253, 175, 181, 
+    4, 1, 226, 120, 181, 4, 1, 211, 195, 181, 4, 1, 211, 44, 181, 4, 1, 242, 
+    67, 181, 4, 1, 225, 214, 181, 4, 1, 252, 74, 181, 4, 1, 217, 12, 181, 4, 
+    1, 248, 85, 181, 4, 1, 250, 136, 181, 4, 1, 235, 130, 181, 4, 1, 234, 
+    195, 181, 4, 1, 243, 90, 181, 4, 1, 245, 210, 181, 4, 1, 213, 250, 181, 
+    4, 1, 245, 67, 181, 4, 1, 216, 195, 181, 4, 1, 245, 90, 181, 4, 1, 210, 
+    92, 181, 4, 1, 245, 83, 181, 4, 1, 210, 73, 181, 4, 1, 245, 100, 181, 4, 
+    1, 245, 182, 181, 4, 1, 245, 167, 181, 4, 1, 245, 158, 181, 4, 1, 245, 
+    146, 181, 4, 1, 226, 223, 181, 4, 1, 245, 46, 220, 71, 1, 225, 212, 220, 
+    71, 1, 216, 6, 220, 71, 1, 234, 97, 220, 71, 1, 244, 155, 220, 71, 1, 
+    216, 173, 220, 71, 1, 219, 60, 220, 71, 1, 218, 15, 220, 71, 1, 250, 69, 
+    220, 71, 1, 211, 46, 220, 71, 1, 240, 216, 220, 71, 1, 252, 13, 220, 71, 
+    1, 248, 97, 220, 71, 1, 243, 128, 220, 71, 1, 213, 123, 220, 71, 1, 216, 
+    177, 220, 71, 1, 210, 21, 220, 71, 1, 231, 94, 220, 71, 1, 235, 55, 220, 
+    71, 1, 211, 225, 220, 71, 1, 242, 55, 220, 71, 1, 232, 148, 220, 71, 1, 
+    230, 194, 220, 71, 1, 236, 47, 220, 71, 1, 245, 209, 220, 71, 1, 253, 
+    239, 220, 71, 1, 255, 0, 220, 71, 1, 226, 200, 220, 71, 1, 211, 212, 220, 
+    71, 1, 226, 134, 220, 71, 1, 254, 218, 220, 71, 1, 222, 210, 220, 71, 1, 
+    227, 198, 220, 71, 1, 245, 225, 220, 71, 1, 254, 223, 220, 71, 1, 240, 
+    118, 220, 71, 1, 214, 163, 220, 71, 1, 227, 2, 220, 71, 1, 226, 180, 220, 
+    71, 1, 226, 222, 220, 71, 1, 253, 178, 220, 71, 1, 254, 27, 220, 71, 1, 
+    226, 162, 220, 71, 1, 254, 201, 220, 71, 1, 245, 94, 220, 71, 1, 254, 5, 
+    220, 71, 1, 245, 235, 220, 71, 1, 240, 125, 220, 71, 1, 211, 13, 226, 
+    145, 1, 254, 179, 226, 145, 1, 252, 199, 226, 145, 1, 217, 106, 226, 145, 
+    1, 235, 147, 226, 145, 1, 211, 165, 226, 145, 1, 234, 138, 226, 145, 1, 
+    248, 84, 226, 145, 1, 205, 226, 145, 1, 206, 226, 145, 1, 220, 28, 226, 
+    145, 1, 248, 33, 226, 145, 1, 250, 223, 226, 145, 1, 243, 142, 226, 145, 
+    1, 244, 204, 226, 145, 1, 224, 89, 226, 145, 1, 235, 15, 226, 145, 1, 
+    233, 136, 226, 145, 1, 230, 205, 226, 145, 1, 227, 182, 226, 145, 1, 212, 
+    30, 226, 145, 1, 162, 226, 145, 1, 192, 226, 145, 1, 61, 226, 145, 1, 76, 
+    226, 145, 1, 74, 226, 145, 1, 78, 226, 145, 1, 69, 226, 145, 1, 255, 82, 
+    226, 145, 1, 245, 217, 226, 145, 1, 226, 187, 226, 145, 21, 210, 86, 226, 
+    145, 21, 111, 226, 145, 21, 105, 226, 145, 21, 158, 226, 145, 21, 161, 
+    226, 145, 21, 190, 226, 145, 21, 195, 226, 145, 21, 199, 226, 145, 21, 
+    196, 226, 145, 21, 201, 249, 75, 3, 61, 249, 75, 3, 76, 249, 75, 3, 74, 
+    249, 75, 3, 78, 249, 75, 3, 69, 249, 75, 3, 235, 147, 249, 75, 3, 235, 
+    74, 249, 75, 3, 176, 249, 75, 3, 234, 188, 249, 75, 3, 234, 98, 249, 75, 
+    3, 234, 34, 249, 75, 3, 233, 223, 249, 75, 3, 233, 141, 249, 75, 3, 233, 
+    64, 249, 75, 3, 232, 247, 249, 75, 3, 232, 162, 249, 75, 3, 232, 103, 
+    249, 75, 3, 186, 249, 75, 3, 231, 96, 249, 75, 3, 230, 235, 249, 75, 3, 
+    230, 166, 249, 75, 3, 230, 107, 249, 75, 3, 198, 249, 75, 3, 229, 112, 
+    249, 75, 3, 228, 238, 249, 75, 3, 228, 79, 249, 75, 3, 227, 242, 249, 75, 
+    3, 191, 249, 75, 3, 225, 224, 249, 75, 3, 225, 111, 249, 75, 3, 225, 19, 
+    249, 75, 3, 224, 153, 249, 75, 3, 205, 249, 75, 3, 223, 131, 249, 75, 3, 
+    223, 38, 249, 75, 3, 222, 213, 249, 75, 3, 222, 142, 249, 75, 3, 206, 
+    249, 75, 3, 221, 183, 249, 75, 3, 219, 193, 249, 75, 3, 219, 60, 249, 75, 
+    3, 218, 84, 249, 75, 3, 217, 106, 249, 75, 3, 217, 23, 249, 75, 3, 216, 
+    118, 249, 75, 3, 112, 249, 75, 3, 215, 119, 249, 75, 3, 212, 65, 249, 75, 
+    3, 212, 22, 249, 75, 3, 211, 250, 249, 75, 3, 211, 227, 249, 75, 3, 211, 
+    165, 249, 75, 3, 211, 162, 249, 75, 3, 210, 116, 249, 75, 3, 210, 23, 
+    236, 8, 254, 35, 1, 254, 177, 236, 8, 254, 35, 1, 252, 33, 236, 8, 254, 
+    35, 1, 242, 208, 236, 8, 254, 35, 1, 248, 196, 236, 8, 254, 35, 1, 241, 
+    245, 236, 8, 254, 35, 1, 212, 30, 236, 8, 254, 35, 1, 210, 97, 236, 8, 
+    254, 35, 1, 241, 202, 236, 8, 254, 35, 1, 216, 227, 236, 8, 254, 35, 1, 
+    210, 232, 236, 8, 254, 35, 1, 234, 231, 236, 8, 254, 35, 1, 233, 99, 236, 
+    8, 254, 35, 1, 231, 70, 236, 8, 254, 35, 1, 227, 198, 236, 8, 254, 35, 1, 
+    221, 251, 236, 8, 254, 35, 1, 253, 170, 236, 8, 254, 35, 1, 225, 224, 
+    236, 8, 254, 35, 1, 222, 26, 236, 8, 254, 35, 1, 224, 37, 236, 8, 254, 
+    35, 1, 223, 70, 236, 8, 254, 35, 1, 220, 22, 236, 8, 254, 35, 1, 217, 37, 
+    236, 8, 254, 35, 221, 175, 50, 236, 8, 254, 35, 54, 111, 236, 8, 254, 35, 
+    54, 105, 236, 8, 254, 35, 54, 158, 236, 8, 254, 35, 54, 216, 248, 236, 8, 
+    254, 35, 54, 215, 73, 236, 8, 254, 35, 54, 123, 240, 217, 236, 8, 254, 
+    35, 54, 123, 216, 148, 236, 8, 254, 35, 54, 216, 249, 216, 148, 225, 122, 
+    1, 254, 174, 225, 122, 1, 252, 36, 225, 122, 1, 243, 116, 225, 122, 1, 
+    248, 64, 225, 122, 1, 241, 245, 225, 122, 1, 212, 37, 225, 122, 1, 210, 
+    110, 225, 122, 1, 241, 204, 225, 122, 1, 216, 231, 225, 122, 1, 210, 233, 
+    225, 122, 1, 235, 0, 225, 122, 1, 233, 105, 225, 122, 1, 231, 70, 225, 
+    122, 1, 227, 198, 225, 122, 1, 220, 146, 225, 122, 1, 254, 205, 225, 122, 
+    1, 225, 224, 225, 122, 1, 222, 27, 225, 122, 1, 224, 42, 225, 122, 1, 
+    222, 191, 225, 122, 1, 220, 22, 225, 122, 1, 217, 42, 225, 122, 54, 111, 
+    225, 122, 54, 216, 248, 225, 122, 54, 215, 73, 225, 122, 54, 123, 240, 
+    217, 225, 122, 54, 105, 225, 122, 54, 158, 225, 122, 211, 209, 220, 139, 
+    232, 64, 1, 61, 232, 64, 1, 253, 166, 232, 64, 1, 243, 209, 232, 64, 1, 
+    249, 68, 232, 64, 1, 76, 232, 64, 1, 214, 105, 232, 64, 1, 74, 232, 64, 
+    1, 211, 117, 232, 64, 1, 235, 29, 232, 64, 1, 156, 232, 64, 1, 194, 232, 
+    64, 1, 230, 30, 232, 64, 1, 78, 232, 64, 1, 153, 232, 64, 1, 218, 228, 
+    232, 64, 1, 217, 153, 232, 64, 1, 69, 232, 64, 1, 245, 14, 232, 64, 1, 
+    224, 99, 232, 64, 1, 222, 93, 232, 64, 1, 215, 160, 232, 64, 1, 254, 131, 
+    232, 64, 1, 245, 158, 232, 64, 1, 232, 67, 232, 64, 1, 228, 116, 232, 64, 
+    1, 251, 74, 232, 64, 215, 223, 79, 231, 53, 241, 181, 1, 61, 231, 53, 
+    241, 181, 1, 76, 231, 53, 241, 181, 1, 74, 231, 53, 241, 181, 1, 78, 231, 
+    53, 241, 181, 1, 192, 231, 53, 241, 181, 1, 212, 65, 231, 53, 241, 181, 
+    1, 252, 199, 231, 53, 241, 181, 1, 252, 198, 231, 53, 241, 181, 1, 191, 
+    231, 53, 241, 181, 1, 186, 231, 53, 241, 181, 1, 198, 231, 53, 241, 181, 
+    1, 229, 233, 231, 53, 241, 181, 1, 229, 112, 231, 53, 241, 181, 1, 229, 
+    111, 231, 53, 241, 181, 1, 205, 231, 53, 241, 181, 1, 223, 190, 231, 53, 
+    241, 181, 1, 233, 141, 231, 53, 241, 181, 1, 234, 138, 231, 53, 241, 181, 
+    1, 241, 196, 231, 53, 241, 181, 1, 206, 231, 53, 241, 181, 1, 222, 35, 
+    231, 53, 241, 181, 1, 221, 183, 231, 53, 241, 181, 1, 176, 231, 53, 241, 
+    181, 1, 224, 91, 231, 53, 241, 181, 1, 217, 106, 231, 53, 241, 181, 1, 
+    217, 105, 231, 53, 241, 181, 1, 217, 23, 231, 53, 241, 181, 1, 217, 22, 
+    231, 53, 241, 181, 1, 112, 231, 53, 241, 181, 1, 248, 229, 231, 53, 241, 
+    181, 16, 213, 170, 231, 53, 241, 181, 16, 213, 169, 231, 53, 249, 102, 1, 
+    61, 231, 53, 249, 102, 1, 76, 231, 53, 249, 102, 1, 74, 231, 53, 249, 
+    102, 1, 78, 231, 53, 249, 102, 1, 192, 231, 53, 249, 102, 1, 212, 65, 
+    231, 53, 249, 102, 1, 252, 199, 231, 53, 249, 102, 1, 191, 231, 53, 249, 
+    102, 1, 186, 231, 53, 249, 102, 1, 198, 231, 53, 249, 102, 1, 229, 112, 
+    231, 53, 249, 102, 1, 205, 231, 53, 249, 102, 1, 233, 141, 231, 53, 249, 
+    102, 1, 234, 138, 231, 53, 249, 102, 1, 241, 196, 231, 53, 249, 102, 1, 
+    206, 231, 53, 249, 102, 1, 254, 31, 206, 231, 53, 249, 102, 1, 221, 183, 
+    231, 53, 249, 102, 1, 176, 231, 53, 249, 102, 1, 224, 91, 231, 53, 249, 
+    102, 1, 217, 106, 231, 53, 249, 102, 1, 217, 23, 231, 53, 249, 102, 1, 
+    112, 231, 53, 249, 102, 1, 248, 229, 231, 53, 249, 102, 232, 151, 222, 
+    219, 231, 53, 249, 102, 232, 151, 236, 13, 234, 126, 1, 61, 234, 126, 25, 
+    5, 74, 234, 126, 25, 5, 69, 234, 126, 25, 5, 149, 153, 234, 126, 25, 5, 
+    76, 234, 126, 25, 5, 78, 234, 126, 25, 233, 29, 79, 234, 126, 5, 52, 222, 
+    237, 51, 234, 126, 5, 254, 83, 234, 126, 5, 213, 147, 234, 126, 1, 176, 
+    234, 126, 1, 234, 138, 234, 126, 1, 243, 142, 234, 126, 1, 243, 0, 234, 
+    126, 1, 251, 41, 234, 126, 1, 250, 165, 234, 126, 1, 235, 147, 234, 126, 
+    1, 227, 169, 234, 126, 1, 215, 157, 234, 126, 1, 215, 145, 234, 126, 1, 
+    248, 143, 234, 126, 1, 248, 127, 234, 126, 1, 228, 115, 234, 126, 1, 217, 
+    106, 234, 126, 1, 216, 209, 234, 126, 1, 248, 229, 234, 126, 1, 248, 33, 
+    234, 126, 1, 198, 234, 126, 1, 191, 234, 126, 1, 225, 150, 234, 126, 1, 
+    252, 199, 234, 126, 1, 252, 26, 234, 126, 1, 186, 234, 126, 1, 192, 234, 
+    126, 1, 205, 234, 126, 1, 233, 141, 234, 126, 1, 214, 27, 234, 126, 1, 
+    220, 104, 234, 126, 1, 218, 225, 234, 126, 1, 206, 234, 126, 1, 210, 116, 
+    234, 126, 1, 162, 234, 126, 1, 234, 52, 234, 126, 1, 215, 125, 234, 126, 
+    5, 252, 149, 48, 234, 126, 5, 250, 229, 234, 126, 5, 59, 51, 234, 126, 
+    213, 152, 234, 126, 21, 111, 234, 126, 21, 105, 234, 126, 21, 158, 234, 
+    126, 21, 161, 234, 126, 54, 216, 248, 234, 126, 54, 215, 73, 234, 126, 
+    54, 123, 240, 217, 234, 126, 54, 123, 216, 148, 234, 126, 224, 144, 247, 
+    128, 234, 126, 224, 144, 4, 250, 43, 234, 126, 224, 144, 250, 43, 234, 
+    126, 224, 144, 249, 145, 130, 234, 126, 224, 144, 231, 185, 234, 126, 
+    224, 144, 232, 121, 234, 126, 224, 144, 248, 186, 234, 126, 224, 144, 52, 
+    248, 186, 234, 126, 224, 144, 232, 213, 55, 219, 30, 254, 46, 1, 241, 
+    245, 55, 219, 30, 254, 46, 1, 233, 99, 55, 219, 30, 254, 46, 1, 241, 202, 
+    55, 219, 30, 254, 46, 1, 231, 70, 55, 219, 30, 254, 46, 1, 224, 37, 55, 
+    219, 30, 254, 46, 1, 212, 30, 55, 219, 30, 254, 46, 1, 220, 22, 55, 219, 
+    30, 254, 46, 1, 223, 70, 55, 219, 30, 254, 46, 1, 252, 33, 55, 219, 30, 
+    254, 46, 1, 217, 37, 55, 219, 30, 254, 46, 1, 221, 228, 55, 219, 30, 254, 
+    46, 1, 234, 231, 55, 219, 30, 254, 46, 1, 227, 198, 55, 219, 30, 254, 46, 
+    1, 234, 122, 55, 219, 30, 254, 46, 1, 222, 26, 55, 219, 30, 254, 46, 1, 
+    221, 251, 55, 219, 30, 254, 46, 1, 244, 162, 55, 219, 30, 254, 46, 1, 
+    254, 179, 55, 219, 30, 254, 46, 1, 253, 169, 55, 219, 30, 254, 46, 1, 
+    248, 30, 55, 219, 30, 254, 46, 1, 242, 208, 55, 219, 30, 254, 46, 1, 248, 
+    196, 55, 219, 30, 254, 46, 1, 242, 245, 55, 219, 30, 254, 46, 1, 216, 
+    227, 55, 219, 30, 254, 46, 1, 210, 96, 55, 219, 30, 254, 46, 1, 248, 27, 
+    55, 219, 30, 254, 46, 1, 210, 232, 55, 219, 30, 254, 46, 1, 216, 198, 55, 
+    219, 30, 254, 46, 1, 216, 179, 55, 219, 30, 254, 46, 54, 111, 55, 219, 
+    30, 254, 46, 54, 244, 122, 55, 219, 30, 254, 46, 132, 235, 245, 253, 180, 
+    1, 61, 253, 180, 1, 255, 82, 253, 180, 1, 254, 81, 253, 180, 1, 255, 41, 
+    253, 180, 1, 254, 131, 253, 180, 1, 255, 42, 253, 180, 1, 254, 252, 253, 
+    180, 1, 254, 248, 253, 180, 1, 76, 253, 180, 1, 245, 217, 253, 180, 1, 
+    78, 253, 180, 1, 226, 187, 253, 180, 1, 74, 253, 180, 1, 236, 40, 253, 
+    180, 1, 69, 253, 180, 1, 214, 118, 253, 180, 1, 234, 188, 253, 180, 1, 
+    211, 162, 253, 180, 1, 211, 128, 253, 180, 1, 211, 137, 253, 180, 1, 243, 
+    69, 253, 180, 1, 243, 31, 253, 180, 1, 242, 243, 253, 180, 1, 250, 198, 
+    253, 180, 1, 235, 132, 253, 180, 1, 217, 23, 253, 180, 1, 216, 196, 253, 
+    180, 1, 248, 98, 253, 180, 1, 248, 25, 253, 180, 1, 215, 152, 253, 180, 
+    1, 225, 224, 253, 180, 1, 244, 162, 253, 180, 1, 252, 83, 253, 180, 1, 
+    252, 22, 253, 180, 1, 229, 69, 253, 180, 1, 228, 244, 253, 180, 1, 228, 
+    245, 253, 180, 1, 229, 112, 253, 180, 1, 227, 160, 253, 180, 1, 228, 110, 
+    253, 180, 1, 231, 96, 253, 180, 1, 241, 123, 253, 180, 1, 210, 166, 253, 
+    180, 1, 211, 47, 253, 180, 1, 213, 255, 253, 180, 1, 223, 131, 253, 180, 
+    1, 233, 64, 253, 180, 1, 221, 183, 253, 180, 1, 210, 94, 253, 180, 1, 
+    220, 65, 253, 180, 1, 210, 74, 253, 180, 1, 219, 200, 253, 180, 1, 218, 
+    195, 253, 180, 1, 241, 245, 253, 180, 255, 30, 79, 216, 80, 113, 170, 
+    115, 123, 59, 224, 143, 4, 113, 170, 115, 123, 59, 224, 143, 233, 91, 
+    113, 170, 115, 123, 59, 224, 143, 233, 91, 123, 59, 115, 113, 170, 224, 
+    143, 233, 91, 113, 222, 235, 115, 123, 222, 237, 224, 143, 233, 91, 123, 
+    222, 237, 115, 113, 222, 235, 224, 143, 235, 225, 226, 2, 1, 254, 177, 
+    235, 225, 226, 2, 1, 252, 33, 235, 225, 226, 2, 1, 242, 208, 235, 225, 
+    226, 2, 1, 248, 196, 235, 225, 226, 2, 1, 241, 245, 235, 225, 226, 2, 1, 
+    212, 30, 235, 225, 226, 2, 1, 210, 97, 235, 225, 226, 2, 1, 241, 202, 
+    235, 225, 226, 2, 1, 216, 227, 235, 225, 226, 2, 1, 210, 232, 235, 225, 
+    226, 2, 1, 234, 231, 235, 225, 226, 2, 1, 233, 99, 235, 225, 226, 2, 1, 
+    231, 70, 235, 225, 226, 2, 1, 227, 198, 235, 225, 226, 2, 1, 221, 251, 
+    235, 225, 226, 2, 1, 253, 170, 235, 225, 226, 2, 1, 225, 224, 235, 225, 
+    226, 2, 1, 222, 26, 235, 225, 226, 2, 1, 224, 37, 235, 225, 226, 2, 1, 
+    223, 70, 235, 225, 226, 2, 1, 220, 22, 235, 225, 226, 2, 1, 217, 37, 235, 
+    225, 226, 2, 54, 111, 235, 225, 226, 2, 54, 105, 235, 225, 226, 2, 54, 
+    158, 235, 225, 226, 2, 54, 161, 235, 225, 226, 2, 54, 216, 248, 235, 225, 
+    226, 2, 54, 215, 73, 235, 225, 226, 2, 54, 123, 240, 217, 235, 225, 226, 
+    2, 54, 123, 216, 148, 235, 225, 226, 76, 1, 254, 177, 235, 225, 226, 76, 
+    1, 252, 33, 235, 225, 226, 76, 1, 242, 208, 235, 225, 226, 76, 1, 248, 
+    196, 235, 225, 226, 76, 1, 241, 245, 235, 225, 226, 76, 1, 212, 29, 235, 
+    225, 226, 76, 1, 210, 97, 235, 225, 226, 76, 1, 241, 202, 235, 225, 226, 
+    76, 1, 216, 227, 235, 225, 226, 76, 1, 210, 232, 235, 225, 226, 76, 1, 
+    234, 231, 235, 225, 226, 76, 1, 233, 99, 235, 225, 226, 76, 1, 231, 69, 
+    235, 225, 226, 76, 1, 227, 198, 235, 225, 226, 76, 1, 221, 251, 235, 225, 
+    226, 76, 1, 225, 224, 235, 225, 226, 76, 1, 222, 26, 235, 225, 226, 76, 
+    1, 220, 22, 235, 225, 226, 76, 1, 217, 37, 235, 225, 226, 76, 54, 111, 
+    235, 225, 226, 76, 54, 105, 235, 225, 226, 76, 54, 158, 235, 225, 226, 
+    76, 54, 161, 235, 225, 226, 76, 54, 216, 248, 235, 225, 226, 76, 54, 215, 
+    73, 235, 225, 226, 76, 54, 123, 240, 217, 235, 225, 226, 76, 54, 123, 
+    216, 148, 55, 202, 1, 226, 153, 61, 55, 202, 1, 211, 37, 61, 55, 202, 1, 
+    211, 37, 254, 252, 55, 202, 1, 226, 153, 74, 55, 202, 1, 211, 37, 74, 55, 
+    202, 1, 211, 37, 76, 55, 202, 1, 226, 153, 78, 55, 202, 1, 226, 153, 226, 
+    238, 55, 202, 1, 211, 37, 226, 238, 55, 202, 1, 226, 153, 255, 34, 55, 
+    202, 1, 211, 37, 255, 34, 55, 202, 1, 226, 153, 254, 251, 55, 202, 1, 
+    211, 37, 254, 251, 55, 202, 1, 226, 153, 254, 225, 55, 202, 1, 211, 37, 
+    254, 225, 55, 202, 1, 226, 153, 254, 246, 55, 202, 1, 211, 37, 254, 246, 
+    55, 202, 1, 226, 153, 255, 8, 55, 202, 1, 211, 37, 255, 8, 55, 202, 1, 
+    226, 153, 254, 250, 55, 202, 1, 226, 153, 245, 20, 55, 202, 1, 211, 37, 
+    245, 20, 55, 202, 1, 226, 153, 253, 175, 55, 202, 1, 211, 37, 253, 175, 
+    55, 202, 1, 226, 153, 254, 233, 55, 202, 1, 211, 37, 254, 233, 55, 202, 
+    1, 226, 153, 254, 244, 55, 202, 1, 211, 37, 254, 244, 55, 202, 1, 226, 
+    153, 226, 237, 55, 202, 1, 211, 37, 226, 237, 55, 202, 1, 226, 153, 254, 
+    187, 55, 202, 1, 211, 37, 254, 187, 55, 202, 1, 226, 153, 254, 243, 55, 
+    202, 1, 226, 153, 245, 169, 55, 202, 1, 226, 153, 245, 167, 55, 202, 1, 
+    226, 153, 254, 131, 55, 202, 1, 226, 153, 254, 241, 55, 202, 1, 211, 37, 
+    254, 241, 55, 202, 1, 226, 153, 245, 139, 55, 202, 1, 211, 37, 245, 139, 
+    55, 202, 1, 226, 153, 245, 155, 55, 202, 1, 211, 37, 245, 155, 55, 202, 
+    1, 226, 153, 245, 126, 55, 202, 1, 211, 37, 245, 126, 55, 202, 1, 211, 
+    37, 254, 123, 55, 202, 1, 226, 153, 245, 146, 55, 202, 1, 211, 37, 254, 
+    240, 55, 202, 1, 226, 153, 245, 116, 55, 202, 1, 226, 153, 226, 179, 55, 
+    202, 1, 226, 153, 240, 120, 55, 202, 1, 226, 153, 245, 223, 55, 202, 1, 
+    211, 37, 245, 223, 55, 202, 1, 226, 153, 254, 53, 55, 202, 1, 211, 37, 
+    254, 53, 55, 202, 1, 226, 153, 235, 188, 55, 202, 1, 211, 37, 235, 188, 
+    55, 202, 1, 226, 153, 226, 163, 55, 202, 1, 211, 37, 226, 163, 55, 202, 
+    1, 226, 153, 254, 49, 55, 202, 1, 211, 37, 254, 49, 55, 202, 1, 226, 153, 
+    254, 239, 55, 202, 1, 226, 153, 253, 245, 55, 202, 1, 226, 153, 254, 237, 
+    55, 202, 1, 226, 153, 253, 239, 55, 202, 1, 211, 37, 253, 239, 55, 202, 
+    1, 226, 153, 245, 83, 55, 202, 1, 211, 37, 245, 83, 55, 202, 1, 226, 153, 
+    253, 214, 55, 202, 1, 211, 37, 253, 214, 55, 202, 1, 226, 153, 254, 234, 
+    55, 202, 1, 211, 37, 254, 234, 55, 202, 1, 226, 153, 226, 144, 55, 202, 
+    1, 226, 153, 252, 133, 222, 129, 21, 111, 222, 129, 21, 105, 222, 129, 
+    21, 158, 222, 129, 21, 161, 222, 129, 21, 190, 222, 129, 21, 195, 222, 
+    129, 21, 199, 222, 129, 21, 196, 222, 129, 21, 201, 222, 129, 54, 216, 
+    248, 222, 129, 54, 215, 73, 222, 129, 54, 216, 163, 222, 129, 54, 244, 
+    23, 222, 129, 54, 244, 122, 222, 129, 54, 219, 113, 222, 129, 54, 220, 
+    118, 222, 129, 54, 245, 192, 222, 129, 54, 228, 200, 222, 129, 54, 123, 
+    240, 217, 222, 129, 54, 113, 240, 217, 222, 129, 54, 134, 240, 217, 222, 
+    129, 54, 244, 19, 240, 217, 222, 129, 54, 244, 89, 240, 217, 222, 129, 
+    54, 219, 127, 240, 217, 222, 129, 54, 220, 124, 240, 217, 222, 129, 54, 
+    245, 201, 240, 217, 222, 129, 54, 228, 205, 240, 217, 222, 129, 244, 10, 
+    123, 242, 34, 222, 129, 244, 10, 123, 224, 24, 222, 129, 244, 10, 123, 
+    216, 169, 222, 129, 244, 10, 113, 216, 167, 118, 5, 251, 7, 118, 5, 254, 
+    83, 118, 5, 213, 147, 118, 5, 235, 108, 118, 5, 214, 161, 118, 1, 61, 
+    118, 1, 255, 82, 118, 1, 74, 118, 1, 236, 40, 118, 1, 69, 118, 1, 214, 
+    118, 118, 1, 149, 153, 118, 1, 149, 222, 182, 118, 1, 149, 156, 118, 1, 
+    149, 232, 191, 118, 1, 76, 118, 1, 254, 210, 118, 1, 78, 118, 1, 253, 
+    200, 118, 1, 176, 118, 1, 234, 138, 118, 1, 243, 142, 118, 1, 243, 0, 
+    118, 1, 229, 82, 118, 1, 251, 41, 118, 1, 250, 165, 118, 1, 235, 147, 
+    118, 1, 235, 120, 118, 1, 227, 169, 118, 1, 215, 157, 118, 1, 215, 145, 
+    118, 1, 248, 143, 118, 1, 248, 127, 118, 1, 228, 115, 118, 1, 217, 106, 
+    118, 1, 216, 209, 118, 1, 248, 229, 118, 1, 248, 33, 118, 1, 198, 118, 1, 
+    191, 118, 1, 225, 150, 118, 1, 252, 199, 118, 1, 252, 26, 118, 1, 186, 
+    118, 1, 192, 118, 1, 205, 118, 1, 233, 141, 118, 1, 214, 27, 118, 1, 220, 
+    104, 118, 1, 218, 225, 118, 1, 206, 118, 1, 162, 118, 1, 232, 190, 118, 
+    1, 55, 36, 232, 181, 118, 1, 55, 36, 222, 181, 118, 1, 55, 36, 228, 97, 
+    118, 25, 5, 255, 82, 118, 25, 5, 252, 23, 255, 82, 118, 25, 5, 74, 118, 
+    25, 5, 236, 40, 118, 25, 5, 69, 118, 25, 5, 214, 118, 118, 25, 5, 149, 
+    153, 118, 25, 5, 149, 222, 182, 118, 25, 5, 149, 156, 118, 25, 5, 149, 
+    232, 191, 118, 25, 5, 76, 118, 25, 5, 254, 210, 118, 25, 5, 78, 118, 25, 
+    5, 253, 200, 118, 213, 152, 118, 248, 186, 118, 52, 248, 186, 118, 224, 
+    144, 247, 128, 118, 224, 144, 52, 247, 128, 118, 224, 144, 232, 219, 118, 
+    224, 144, 249, 145, 130, 118, 224, 144, 232, 121, 118, 54, 111, 118, 54, 
+    105, 118, 54, 158, 118, 54, 161, 118, 54, 190, 118, 54, 195, 118, 54, 
+    199, 118, 54, 196, 118, 54, 201, 118, 54, 216, 248, 118, 54, 215, 73, 
+    118, 54, 216, 163, 118, 54, 244, 23, 118, 54, 244, 122, 118, 54, 219, 
+    113, 118, 54, 220, 118, 118, 54, 245, 192, 118, 54, 228, 200, 118, 54, 
+    123, 240, 217, 118, 54, 123, 216, 148, 118, 21, 210, 86, 118, 21, 111, 
+    118, 21, 105, 118, 21, 158, 118, 21, 161, 118, 21, 190, 118, 21, 195, 
+    118, 21, 199, 118, 21, 196, 118, 21, 201, 234, 250, 5, 251, 7, 234, 250, 
+    5, 254, 83, 234, 250, 5, 213, 147, 234, 250, 1, 61, 234, 250, 1, 255, 82, 
+    234, 250, 1, 74, 234, 250, 1, 236, 40, 234, 250, 1, 69, 234, 250, 1, 214, 
+    118, 234, 250, 1, 76, 234, 250, 1, 254, 210, 234, 250, 1, 78, 234, 250, 
+    1, 253, 200, 234, 250, 1, 176, 234, 250, 1, 234, 138, 234, 250, 1, 243, 
+    142, 234, 250, 1, 243, 0, 234, 250, 1, 229, 82, 234, 250, 1, 251, 41, 
+    234, 250, 1, 250, 165, 234, 250, 1, 235, 147, 234, 250, 1, 235, 120, 234, 
+    250, 1, 227, 169, 234, 250, 1, 215, 157, 234, 250, 1, 215, 145, 234, 250, 
+    1, 248, 143, 234, 250, 1, 248, 132, 234, 250, 1, 248, 127, 234, 250, 1, 
+    223, 42, 234, 250, 1, 228, 115, 234, 250, 1, 217, 106, 234, 250, 1, 216, 
+    209, 234, 250, 1, 248, 229, 234, 250, 1, 248, 33, 234, 250, 1, 198, 234, 
+    250, 1, 191, 234, 250, 1, 225, 150, 234, 250, 1, 252, 199, 234, 250, 1, 
+    252, 26, 234, 250, 1, 186, 234, 250, 1, 192, 234, 250, 1, 205, 234, 250, 
+    1, 233, 141, 234, 250, 1, 214, 27, 234, 250, 1, 220, 104, 234, 250, 1, 
+    218, 225, 234, 250, 1, 206, 234, 250, 1, 162, 234, 250, 25, 5, 255, 82, 
+    234, 250, 25, 5, 74, 234, 250, 25, 5, 236, 40, 234, 250, 25, 5, 69, 234, 
+    250, 25, 5, 214, 118, 234, 250, 25, 5, 76, 234, 250, 25, 5, 254, 210, 
+    234, 250, 25, 5, 78, 234, 250, 25, 5, 253, 200, 234, 250, 5, 213, 152, 
+    234, 250, 5, 227, 209, 234, 250, 255, 30, 50, 234, 250, 245, 129, 50, 
+    234, 250, 54, 50, 234, 250, 221, 175, 79, 234, 250, 52, 221, 175, 79, 
+    234, 250, 248, 186, 234, 250, 52, 248, 186, 219, 38, 219, 46, 1, 222, 20, 
+    219, 38, 219, 46, 1, 217, 81, 219, 38, 219, 46, 1, 252, 176, 219, 38, 
+    219, 46, 1, 251, 31, 219, 38, 219, 46, 1, 248, 211, 219, 38, 219, 46, 1, 
+    243, 127, 219, 38, 219, 46, 1, 231, 215, 219, 38, 219, 46, 1, 229, 79, 
+    219, 38, 219, 46, 1, 233, 118, 219, 38, 219, 46, 1, 229, 218, 219, 38, 
+    219, 46, 1, 214, 24, 219, 38, 219, 46, 1, 226, 77, 219, 38, 219, 46, 1, 
+    211, 84, 219, 38, 219, 46, 1, 223, 171, 219, 38, 219, 46, 1, 242, 44, 
+    219, 38, 219, 46, 1, 234, 254, 219, 38, 219, 46, 1, 235, 142, 219, 38, 
+    219, 46, 1, 227, 166, 219, 38, 219, 46, 1, 254, 218, 219, 38, 219, 46, 1, 
+    245, 215, 219, 38, 219, 46, 1, 236, 41, 219, 38, 219, 46, 1, 214, 208, 
+    219, 38, 219, 46, 1, 226, 226, 219, 38, 219, 46, 1, 245, 205, 219, 38, 
+    219, 46, 1, 231, 228, 219, 38, 219, 46, 21, 210, 86, 219, 38, 219, 46, 
+    21, 111, 219, 38, 219, 46, 21, 105, 219, 38, 219, 46, 21, 158, 219, 38, 
+    219, 46, 21, 161, 219, 38, 219, 46, 21, 190, 219, 38, 219, 46, 21, 195, 
+    219, 38, 219, 46, 21, 199, 219, 38, 219, 46, 21, 196, 219, 38, 219, 46, 
+    21, 201, 250, 159, 5, 251, 7, 250, 159, 5, 254, 83, 250, 159, 5, 213, 
+    147, 250, 159, 1, 255, 82, 250, 159, 1, 74, 250, 159, 1, 69, 250, 159, 1, 
+    76, 250, 159, 1, 235, 16, 250, 159, 1, 234, 137, 250, 159, 1, 243, 139, 
+    250, 159, 1, 242, 255, 250, 159, 1, 229, 81, 250, 159, 1, 251, 40, 250, 
+    159, 1, 250, 164, 250, 159, 1, 235, 146, 250, 159, 1, 235, 119, 250, 159, 
+    1, 227, 168, 250, 159, 1, 215, 156, 250, 159, 1, 215, 144, 250, 159, 1, 
+    248, 142, 250, 159, 1, 248, 126, 250, 159, 1, 228, 114, 250, 159, 1, 217, 
+    102, 250, 159, 1, 216, 208, 250, 159, 1, 248, 228, 250, 159, 1, 248, 32, 
+    250, 159, 1, 229, 230, 250, 159, 1, 226, 93, 250, 159, 1, 225, 149, 250, 
+    159, 1, 252, 197, 250, 159, 1, 252, 25, 250, 159, 1, 231, 242, 250, 159, 
+    1, 210, 167, 250, 159, 1, 211, 103, 250, 159, 1, 223, 187, 250, 159, 1, 
+    233, 140, 250, 159, 1, 212, 64, 250, 159, 1, 222, 33, 250, 159, 1, 242, 
+    53, 250, 159, 25, 5, 61, 250, 159, 25, 5, 74, 250, 159, 25, 5, 236, 40, 
+    250, 159, 25, 5, 69, 250, 159, 25, 5, 214, 118, 250, 159, 25, 5, 76, 250, 
+    159, 25, 5, 254, 210, 250, 159, 25, 5, 78, 250, 159, 25, 5, 253, 200, 
+    250, 159, 25, 5, 226, 223, 250, 159, 144, 79, 250, 159, 253, 201, 79, 
+    250, 159, 213, 152, 250, 159, 231, 240, 250, 159, 21, 210, 86, 250, 159, 
+    21, 111, 250, 159, 21, 105, 250, 159, 21, 158, 250, 159, 21, 161, 250, 
+    159, 21, 190, 250, 159, 21, 195, 250, 159, 21, 199, 250, 159, 21, 196, 
+    250, 159, 21, 201, 250, 159, 221, 175, 79, 250, 159, 248, 186, 250, 159, 
+    52, 248, 186, 250, 159, 224, 16, 79, 174, 5, 251, 7, 174, 5, 254, 83, 
+    174, 5, 213, 147, 174, 1, 61, 174, 1, 255, 82, 174, 1, 74, 174, 1, 236, 
+    40, 174, 1, 69, 174, 1, 214, 118, 174, 1, 149, 153, 174, 1, 149, 222, 
+    182, 174, 1, 149, 156, 174, 1, 149, 232, 191, 174, 1, 76, 174, 1, 254, 
+    210, 174, 1, 78, 174, 1, 253, 200, 174, 1, 176, 174, 1, 234, 138, 174, 1, 
+    243, 142, 174, 1, 243, 0, 174, 1, 229, 82, 174, 1, 251, 41, 174, 1, 250, 
+    165, 174, 1, 235, 147, 174, 1, 235, 120, 174, 1, 227, 169, 174, 1, 215, 
+    157, 174, 1, 215, 145, 174, 1, 248, 143, 174, 1, 248, 127, 174, 1, 228, 
+    115, 174, 1, 217, 106, 174, 1, 216, 209, 174, 1, 248, 229, 174, 1, 248, 
+    33, 174, 1, 198, 174, 1, 191, 174, 1, 225, 150, 174, 1, 252, 199, 174, 1, 
+    252, 26, 174, 1, 186, 174, 1, 192, 174, 1, 205, 174, 1, 233, 141, 174, 1, 
+    232, 190, 174, 1, 214, 27, 174, 1, 220, 104, 174, 1, 218, 225, 174, 1, 
+    206, 174, 1, 162, 174, 25, 5, 255, 82, 174, 25, 5, 74, 174, 25, 5, 236, 
+    40, 174, 25, 5, 69, 174, 25, 5, 214, 118, 174, 25, 5, 149, 153, 174, 25, 
+    5, 149, 222, 182, 174, 25, 5, 149, 156, 174, 25, 5, 149, 232, 191, 174, 
+    25, 5, 76, 174, 25, 5, 254, 210, 174, 25, 5, 78, 174, 25, 5, 253, 200, 
+    174, 5, 213, 152, 174, 5, 253, 183, 174, 5, 235, 108, 174, 5, 214, 161, 
+    174, 226, 208, 174, 248, 186, 174, 52, 248, 186, 174, 255, 30, 50, 174, 
+    220, 139, 174, 21, 210, 86, 174, 21, 111, 174, 21, 105, 174, 21, 158, 
+    174, 21, 161, 174, 21, 190, 174, 21, 195, 174, 21, 199, 174, 21, 196, 
+    174, 21, 201, 217, 70, 1, 61, 217, 70, 1, 255, 82, 217, 70, 1, 74, 217, 
+    70, 1, 236, 40, 217, 70, 1, 69, 217, 70, 1, 214, 118, 217, 70, 1, 76, 
+    217, 70, 1, 254, 210, 217, 70, 1, 78, 217, 70, 1, 253, 200, 217, 70, 1, 
+    176, 217, 70, 1, 234, 138, 217, 70, 1, 243, 142, 217, 70, 1, 243, 0, 217, 
+    70, 1, 229, 82, 217, 70, 1, 251, 41, 217, 70, 1, 250, 165, 217, 70, 1, 
+    235, 147, 217, 70, 1, 235, 120, 217, 70, 1, 227, 169, 217, 70, 1, 215, 
+    157, 217, 70, 1, 215, 145, 217, 70, 1, 248, 143, 217, 70, 1, 248, 127, 
+    217, 70, 1, 228, 115, 217, 70, 1, 217, 106, 217, 70, 1, 216, 209, 217, 
+    70, 1, 248, 229, 217, 70, 1, 248, 33, 217, 70, 1, 198, 217, 70, 1, 191, 
+    217, 70, 1, 225, 150, 217, 70, 1, 252, 199, 217, 70, 1, 252, 26, 217, 70, 
+    1, 186, 217, 70, 1, 192, 217, 70, 1, 205, 217, 70, 1, 233, 141, 217, 70, 
+    1, 214, 27, 217, 70, 1, 220, 104, 217, 70, 1, 206, 217, 70, 1, 162, 217, 
+    70, 1, 222, 181, 217, 70, 5, 254, 83, 217, 70, 5, 213, 147, 217, 70, 25, 
+    5, 255, 82, 217, 70, 25, 5, 74, 217, 70, 25, 5, 236, 40, 217, 70, 25, 5, 
+    69, 217, 70, 25, 5, 214, 118, 217, 70, 25, 5, 76, 217, 70, 25, 5, 254, 
+    210, 217, 70, 25, 5, 78, 217, 70, 25, 5, 253, 200, 217, 70, 5, 213, 152, 
+    217, 70, 5, 227, 209, 217, 70, 21, 210, 86, 217, 70, 21, 111, 217, 70, 
+    21, 105, 217, 70, 21, 158, 217, 70, 21, 161, 217, 70, 21, 190, 217, 70, 
+    21, 195, 217, 70, 21, 199, 217, 70, 21, 196, 217, 70, 21, 201, 15, 5, 61, 
+    15, 5, 116, 30, 61, 15, 5, 116, 30, 252, 184, 15, 5, 116, 30, 243, 112, 
+    216, 240, 15, 5, 116, 30, 162, 15, 5, 116, 30, 236, 42, 15, 5, 116, 30, 
+    233, 122, 242, 101, 15, 5, 116, 30, 230, 66, 15, 5, 116, 30, 222, 23, 15, 
+    5, 255, 84, 15, 5, 255, 34, 15, 5, 255, 35, 30, 253, 237, 15, 5, 255, 35, 
+    30, 246, 75, 242, 101, 15, 5, 255, 35, 30, 243, 125, 15, 5, 255, 35, 30, 
+    243, 112, 216, 240, 15, 5, 255, 35, 30, 162, 15, 5, 255, 35, 30, 236, 43, 
+    242, 101, 15, 5, 255, 35, 30, 236, 16, 15, 5, 255, 35, 30, 233, 123, 15, 
+    5, 255, 35, 30, 220, 50, 15, 5, 255, 35, 30, 104, 96, 104, 96, 69, 15, 5, 
+    255, 35, 242, 101, 15, 5, 255, 32, 15, 5, 255, 33, 30, 252, 168, 15, 5, 
+    255, 33, 30, 243, 112, 216, 240, 15, 5, 255, 33, 30, 231, 97, 96, 245, 
+    158, 15, 5, 255, 33, 30, 220, 102, 15, 5, 255, 33, 30, 217, 73, 15, 5, 
+    255, 8, 15, 5, 254, 195, 15, 5, 254, 196, 30, 245, 95, 15, 5, 254, 196, 
+    30, 220, 12, 96, 242, 197, 15, 5, 254, 187, 15, 5, 254, 188, 30, 254, 
+    187, 15, 5, 254, 188, 30, 247, 224, 15, 5, 254, 188, 30, 242, 197, 15, 5, 
+    254, 188, 30, 162, 15, 5, 254, 188, 30, 235, 5, 15, 5, 254, 188, 30, 234, 
+    98, 15, 5, 254, 188, 30, 220, 65, 15, 5, 254, 188, 30, 214, 126, 15, 5, 
+    254, 184, 15, 5, 254, 177, 15, 5, 254, 140, 15, 5, 254, 141, 30, 220, 65, 
+    15, 5, 254, 131, 15, 5, 254, 132, 115, 254, 131, 15, 5, 254, 132, 134, 
+    216, 86, 15, 5, 254, 132, 96, 229, 222, 226, 168, 254, 132, 96, 229, 221, 
+    15, 5, 254, 132, 96, 229, 222, 218, 235, 15, 5, 254, 102, 15, 5, 254, 75, 
+    15, 5, 254, 43, 15, 5, 254, 44, 30, 233, 202, 15, 5, 254, 16, 15, 5, 253, 
+    244, 15, 5, 253, 239, 15, 5, 253, 240, 210, 40, 216, 240, 15, 5, 253, 
+    240, 235, 9, 216, 240, 15, 5, 253, 240, 115, 253, 240, 215, 115, 115, 
+    215, 115, 215, 115, 115, 215, 115, 226, 25, 15, 5, 253, 240, 115, 253, 
+    240, 115, 253, 239, 15, 5, 253, 240, 115, 253, 240, 115, 253, 240, 249, 
+    133, 253, 240, 115, 253, 240, 115, 253, 239, 15, 5, 253, 237, 15, 5, 253, 
+    234, 15, 5, 252, 199, 15, 5, 252, 184, 15, 5, 252, 179, 15, 5, 252, 175, 
+    15, 5, 252, 169, 15, 5, 252, 170, 115, 252, 169, 15, 5, 252, 168, 15, 5, 
+    130, 15, 5, 252, 148, 15, 5, 252, 14, 15, 5, 252, 15, 30, 61, 15, 5, 252, 
+    15, 30, 243, 103, 15, 5, 252, 15, 30, 236, 43, 242, 101, 15, 5, 251, 133, 
+    15, 5, 251, 134, 115, 251, 134, 255, 34, 15, 5, 251, 134, 115, 251, 134, 
+    214, 190, 15, 5, 251, 134, 249, 133, 251, 133, 15, 5, 251, 117, 15, 5, 
+    251, 118, 115, 251, 117, 15, 5, 251, 106, 15, 5, 251, 105, 15, 5, 248, 
+    229, 15, 5, 248, 220, 15, 5, 248, 221, 234, 72, 30, 116, 96, 231, 152, 
+    15, 5, 248, 221, 234, 72, 30, 254, 140, 15, 5, 248, 221, 234, 72, 30, 
+    252, 168, 15, 5, 248, 221, 234, 72, 30, 252, 14, 15, 5, 248, 221, 234, 
+    72, 30, 243, 142, 15, 5, 248, 221, 234, 72, 30, 243, 143, 96, 231, 152, 
+    15, 5, 248, 221, 234, 72, 30, 242, 221, 15, 5, 248, 221, 234, 72, 30, 
+    242, 204, 15, 5, 248, 221, 234, 72, 30, 242, 110, 15, 5, 248, 221, 234, 
+    72, 30, 162, 15, 5, 248, 221, 234, 72, 30, 235, 186, 15, 5, 248, 221, 
+    234, 72, 30, 235, 187, 96, 232, 103, 15, 5, 248, 221, 234, 72, 30, 234, 
+    248, 15, 5, 248, 221, 234, 72, 30, 233, 141, 15, 5, 248, 221, 234, 72, 
+    30, 232, 103, 15, 5, 248, 221, 234, 72, 30, 232, 104, 96, 231, 151, 15, 
+    5, 248, 221, 234, 72, 30, 232, 89, 15, 5, 248, 221, 234, 72, 30, 229, 
+    112, 15, 5, 248, 221, 234, 72, 30, 226, 26, 96, 226, 25, 15, 5, 248, 221, 
+    234, 72, 30, 219, 193, 15, 5, 248, 221, 234, 72, 30, 217, 73, 15, 5, 248, 
+    221, 234, 72, 30, 214, 231, 96, 242, 204, 15, 5, 248, 221, 234, 72, 30, 
+    214, 126, 15, 5, 248, 195, 15, 5, 248, 174, 15, 5, 248, 173, 15, 5, 248, 
+    172, 15, 5, 248, 11, 15, 5, 247, 250, 15, 5, 247, 225, 15, 5, 247, 226, 
+    30, 220, 65, 15, 5, 247, 224, 15, 5, 247, 214, 15, 5, 247, 215, 234, 214, 
+    104, 242, 102, 247, 195, 15, 5, 247, 195, 15, 5, 246, 86, 15, 5, 246, 87, 
+    115, 246, 86, 15, 5, 246, 87, 242, 101, 15, 5, 246, 87, 220, 47, 15, 5, 
+    246, 84, 15, 5, 246, 85, 30, 245, 80, 15, 5, 246, 83, 15, 5, 246, 82, 15, 
+    5, 246, 81, 15, 5, 246, 80, 15, 5, 246, 76, 15, 5, 246, 74, 15, 5, 246, 
+    75, 242, 101, 15, 5, 246, 75, 242, 102, 242, 101, 15, 5, 246, 73, 15, 5, 
+    246, 66, 15, 5, 76, 15, 5, 160, 30, 226, 25, 15, 5, 160, 115, 160, 227, 
+    199, 115, 227, 198, 15, 5, 245, 242, 15, 5, 245, 243, 30, 116, 96, 242, 
+    56, 96, 248, 229, 15, 5, 245, 243, 30, 243, 103, 15, 5, 245, 243, 30, 
+    230, 235, 15, 5, 245, 243, 30, 222, 10, 15, 5, 245, 243, 30, 220, 65, 15, 
+    5, 245, 243, 30, 69, 15, 5, 245, 219, 15, 5, 245, 208, 15, 5, 245, 182, 
+    15, 5, 245, 158, 15, 5, 245, 159, 30, 243, 111, 15, 5, 245, 159, 30, 243, 
+    112, 216, 240, 15, 5, 245, 159, 30, 231, 96, 15, 5, 245, 159, 249, 133, 
+    245, 158, 15, 5, 245, 159, 226, 168, 245, 158, 15, 5, 245, 159, 218, 235, 
+    15, 5, 245, 97, 15, 5, 245, 95, 15, 5, 245, 80, 15, 5, 245, 18, 15, 5, 
+    245, 19, 30, 61, 15, 5, 245, 19, 30, 116, 96, 233, 110, 15, 5, 245, 19, 
+    30, 116, 96, 233, 111, 30, 233, 110, 15, 5, 245, 19, 30, 254, 131, 15, 5, 
+    245, 19, 30, 252, 184, 15, 5, 245, 19, 30, 246, 75, 242, 101, 15, 5, 245, 
+    19, 30, 246, 75, 242, 102, 242, 101, 15, 5, 245, 19, 30, 162, 15, 5, 245, 
+    19, 30, 242, 56, 242, 101, 15, 5, 245, 19, 30, 236, 43, 242, 101, 15, 5, 
+    245, 19, 30, 234, 213, 15, 5, 245, 19, 30, 234, 214, 218, 235, 15, 5, 
+    245, 19, 30, 233, 221, 15, 5, 245, 19, 30, 233, 141, 15, 5, 245, 19, 30, 
+    233, 111, 30, 233, 110, 15, 5, 245, 19, 30, 232, 247, 15, 5, 245, 19, 30, 
+    232, 103, 15, 5, 245, 19, 30, 214, 230, 15, 5, 245, 19, 30, 214, 219, 15, 
+    5, 243, 142, 15, 5, 243, 143, 242, 101, 15, 5, 243, 140, 15, 5, 243, 141, 
+    30, 116, 96, 248, 230, 96, 162, 15, 5, 243, 141, 30, 116, 96, 162, 15, 5, 
+    243, 141, 30, 116, 96, 236, 42, 15, 5, 243, 141, 30, 255, 33, 216, 241, 
+    96, 217, 94, 15, 5, 243, 141, 30, 254, 131, 15, 5, 243, 141, 30, 253, 
+    239, 15, 5, 243, 141, 30, 253, 238, 96, 243, 125, 15, 5, 243, 141, 30, 
+    252, 184, 15, 5, 243, 141, 30, 252, 149, 96, 205, 15, 5, 243, 141, 30, 
+    251, 106, 15, 5, 243, 141, 30, 251, 107, 96, 205, 15, 5, 243, 141, 30, 
+    248, 229, 15, 5, 243, 141, 30, 248, 11, 15, 5, 243, 141, 30, 247, 226, 
+    30, 220, 65, 15, 5, 243, 141, 30, 246, 84, 15, 5, 243, 141, 30, 245, 182, 
+    15, 5, 243, 141, 30, 245, 183, 96, 233, 141, 15, 5, 243, 141, 30, 245, 
+    158, 15, 5, 243, 141, 30, 245, 159, 30, 243, 112, 216, 240, 15, 5, 243, 
+    141, 30, 243, 112, 216, 240, 15, 5, 243, 141, 30, 243, 103, 15, 5, 243, 
+    141, 30, 242, 221, 15, 5, 243, 141, 30, 242, 219, 15, 5, 243, 141, 30, 
+    242, 220, 96, 61, 15, 5, 243, 141, 30, 242, 205, 96, 218, 84, 15, 5, 243, 
+    141, 30, 242, 56, 96, 232, 104, 96, 245, 80, 15, 5, 243, 141, 30, 242, 
+    37, 15, 5, 243, 141, 30, 242, 38, 96, 233, 141, 15, 5, 243, 141, 30, 241, 
+    188, 96, 232, 247, 15, 5, 243, 141, 30, 240, 225, 15, 5, 243, 141, 30, 
+    236, 43, 242, 101, 15, 5, 243, 141, 30, 235, 173, 96, 240, 230, 96, 253, 
+    239, 15, 5, 243, 141, 30, 234, 248, 15, 5, 243, 141, 30, 234, 213, 15, 5, 
+    243, 141, 30, 234, 95, 15, 5, 243, 141, 30, 234, 96, 96, 233, 110, 15, 5, 
+    243, 141, 30, 233, 222, 96, 254, 131, 15, 5, 243, 141, 30, 233, 141, 15, 
+    5, 243, 141, 30, 231, 97, 96, 245, 158, 15, 5, 243, 141, 30, 230, 235, 
+    15, 5, 243, 141, 30, 227, 198, 15, 5, 243, 141, 30, 227, 199, 115, 227, 
+    198, 15, 5, 243, 141, 30, 191, 15, 5, 243, 141, 30, 222, 10, 15, 5, 243, 
+    141, 30, 221, 233, 15, 5, 243, 141, 30, 220, 65, 15, 5, 243, 141, 30, 
+    220, 66, 96, 215, 99, 15, 5, 243, 141, 30, 220, 32, 15, 5, 243, 141, 30, 
+    218, 44, 15, 5, 243, 141, 30, 217, 73, 15, 5, 243, 141, 30, 69, 15, 5, 
+    243, 141, 30, 214, 219, 15, 5, 243, 141, 30, 214, 220, 96, 246, 86, 15, 
+    5, 243, 141, 115, 243, 140, 15, 5, 243, 135, 15, 5, 243, 136, 249, 133, 
+    243, 135, 15, 5, 243, 133, 15, 5, 243, 134, 115, 243, 134, 243, 104, 115, 
+    243, 103, 15, 5, 243, 125, 15, 5, 243, 126, 243, 134, 115, 243, 134, 243, 
+    104, 115, 243, 103, 15, 5, 243, 124, 15, 5, 243, 122, 15, 5, 243, 113, 
+    15, 5, 243, 111, 15, 5, 243, 112, 216, 240, 15, 5, 243, 112, 115, 243, 
+    111, 15, 5, 243, 112, 249, 133, 243, 111, 15, 5, 243, 103, 15, 5, 243, 
+    102, 15, 5, 243, 97, 15, 5, 243, 43, 15, 5, 243, 44, 30, 233, 202, 15, 5, 
+    242, 221, 15, 5, 242, 222, 30, 76, 15, 5, 242, 222, 30, 69, 15, 5, 242, 
+    222, 249, 133, 242, 221, 15, 5, 242, 219, 15, 5, 242, 220, 115, 242, 219, 
+    15, 5, 242, 220, 249, 133, 242, 219, 15, 5, 242, 216, 15, 5, 242, 204, 
+    15, 5, 242, 205, 242, 101, 15, 5, 242, 202, 15, 5, 242, 203, 30, 116, 96, 
+    236, 42, 15, 5, 242, 203, 30, 243, 112, 216, 240, 15, 5, 242, 203, 30, 
+    236, 42, 15, 5, 242, 203, 30, 232, 104, 96, 236, 42, 15, 5, 242, 203, 30, 
+    191, 15, 5, 242, 199, 15, 5, 242, 197, 15, 5, 242, 198, 249, 133, 242, 
+    197, 15, 5, 242, 198, 30, 252, 184, 15, 5, 242, 198, 30, 217, 73, 15, 5, 
+    242, 198, 216, 240, 15, 5, 242, 120, 15, 5, 242, 121, 249, 133, 242, 120, 
+    15, 5, 242, 118, 15, 5, 242, 119, 30, 234, 248, 15, 5, 242, 119, 30, 234, 
+    249, 30, 236, 43, 242, 101, 15, 5, 242, 119, 30, 227, 198, 15, 5, 242, 
+    119, 30, 222, 11, 96, 215, 114, 15, 5, 242, 119, 242, 101, 15, 5, 242, 
+    110, 15, 5, 242, 111, 30, 116, 96, 233, 202, 15, 5, 242, 111, 30, 233, 
+    202, 15, 5, 242, 111, 115, 242, 111, 232, 96, 15, 5, 242, 105, 15, 5, 
+    242, 103, 15, 5, 242, 104, 30, 220, 65, 15, 5, 242, 95, 15, 5, 242, 94, 
+    15, 5, 242, 91, 15, 5, 242, 90, 15, 5, 162, 15, 5, 242, 56, 216, 240, 15, 
+    5, 242, 56, 242, 101, 15, 5, 242, 37, 15, 5, 241, 187, 15, 5, 241, 188, 
+    30, 253, 239, 15, 5, 241, 188, 30, 253, 237, 15, 5, 241, 188, 30, 252, 
+    184, 15, 5, 241, 188, 30, 247, 195, 15, 5, 241, 188, 30, 243, 133, 15, 5, 
+    241, 188, 30, 234, 87, 15, 5, 241, 188, 30, 227, 198, 15, 5, 241, 188, 
+    30, 220, 65, 15, 5, 241, 188, 30, 69, 15, 5, 240, 229, 15, 5, 240, 225, 
+    15, 5, 240, 226, 30, 254, 131, 15, 5, 240, 226, 30, 242, 37, 15, 5, 240, 
+    226, 30, 234, 213, 15, 5, 240, 226, 30, 232, 203, 15, 5, 240, 226, 30, 
+    214, 219, 15, 5, 240, 222, 15, 5, 74, 15, 5, 240, 161, 61, 15, 5, 240, 
+    122, 15, 5, 236, 70, 15, 5, 236, 71, 115, 236, 71, 251, 106, 15, 5, 236, 
+    71, 115, 236, 71, 218, 235, 15, 5, 236, 45, 15, 5, 236, 42, 15, 5, 236, 
+    43, 247, 250, 15, 5, 236, 43, 223, 38, 15, 5, 236, 43, 115, 236, 43, 220, 
+    16, 115, 220, 16, 214, 220, 115, 214, 219, 15, 5, 236, 43, 242, 101, 15, 
+    5, 236, 34, 15, 5, 236, 35, 30, 243, 112, 216, 240, 15, 5, 236, 33, 15, 
+    5, 236, 23, 15, 5, 236, 24, 30, 217, 73, 15, 5, 236, 24, 249, 133, 236, 
+    23, 15, 5, 236, 24, 226, 168, 236, 23, 15, 5, 236, 24, 218, 235, 15, 5, 
+    236, 16, 15, 5, 236, 6, 15, 5, 235, 186, 15, 5, 235, 172, 15, 5, 176, 15, 
+    5, 235, 19, 30, 61, 15, 5, 235, 19, 30, 255, 8, 15, 5, 235, 19, 30, 255, 
+    9, 96, 233, 221, 15, 5, 235, 19, 30, 253, 237, 15, 5, 235, 19, 30, 252, 
+    184, 15, 5, 235, 19, 30, 252, 168, 15, 5, 235, 19, 30, 130, 15, 5, 235, 
+    19, 30, 252, 14, 15, 5, 235, 19, 30, 245, 95, 15, 5, 235, 19, 30, 245, 
+    80, 15, 5, 235, 19, 30, 243, 142, 15, 5, 235, 19, 30, 243, 125, 15, 5, 
+    235, 19, 30, 243, 112, 216, 240, 15, 5, 235, 19, 30, 243, 103, 15, 5, 
+    235, 19, 30, 243, 104, 96, 220, 103, 96, 61, 15, 5, 235, 19, 30, 242, 
+    221, 15, 5, 235, 19, 30, 242, 204, 15, 5, 235, 19, 30, 242, 198, 96, 221, 
+    233, 15, 5, 235, 19, 30, 242, 198, 249, 133, 242, 197, 15, 5, 235, 19, 
+    30, 242, 120, 15, 5, 235, 19, 30, 242, 94, 15, 5, 235, 19, 30, 236, 42, 
+    15, 5, 235, 19, 30, 236, 23, 15, 5, 235, 19, 30, 234, 248, 15, 5, 235, 
+    19, 30, 234, 98, 15, 5, 235, 19, 30, 234, 95, 15, 5, 235, 19, 30, 232, 
+    247, 15, 5, 235, 19, 30, 232, 103, 15, 5, 235, 19, 30, 231, 96, 15, 5, 
+    235, 19, 30, 231, 97, 96, 246, 86, 15, 5, 235, 19, 30, 231, 97, 96, 242, 
+    221, 15, 5, 235, 19, 30, 231, 97, 96, 217, 23, 15, 5, 235, 19, 30, 230, 
+    235, 15, 5, 235, 19, 30, 230, 236, 96, 227, 193, 15, 5, 235, 19, 30, 229, 
+    112, 15, 5, 235, 19, 30, 227, 198, 15, 5, 235, 19, 30, 225, 111, 15, 5, 
+    235, 19, 30, 222, 142, 15, 5, 235, 19, 30, 206, 15, 5, 235, 19, 30, 221, 
+    233, 15, 5, 235, 19, 30, 220, 104, 15, 5, 235, 19, 30, 220, 65, 15, 5, 
+    235, 19, 30, 220, 32, 15, 5, 235, 19, 30, 219, 227, 15, 5, 235, 19, 30, 
+    219, 184, 15, 5, 235, 19, 30, 218, 52, 15, 5, 235, 19, 30, 217, 51, 15, 
+    5, 235, 19, 30, 69, 15, 5, 235, 19, 30, 214, 230, 15, 5, 235, 19, 30, 
+    214, 219, 15, 5, 235, 19, 30, 214, 193, 30, 191, 15, 5, 235, 19, 30, 214, 
+    126, 15, 5, 235, 19, 30, 210, 44, 15, 5, 235, 17, 15, 5, 235, 18, 249, 
+    133, 235, 17, 15, 5, 235, 10, 15, 5, 235, 7, 15, 5, 235, 5, 15, 5, 235, 
+    4, 15, 5, 235, 2, 15, 5, 235, 3, 115, 235, 2, 15, 5, 234, 248, 15, 5, 
+    234, 249, 30, 236, 43, 242, 101, 15, 5, 234, 244, 15, 5, 234, 245, 30, 
+    252, 184, 15, 5, 234, 245, 249, 133, 234, 244, 15, 5, 234, 242, 15, 5, 
+    234, 241, 15, 5, 234, 213, 15, 5, 234, 214, 233, 124, 30, 104, 115, 233, 
+    124, 30, 69, 15, 5, 234, 214, 115, 234, 214, 233, 124, 30, 104, 115, 233, 
+    124, 30, 69, 15, 5, 234, 163, 15, 5, 234, 98, 15, 5, 234, 99, 30, 252, 
+    184, 15, 5, 234, 99, 30, 69, 15, 5, 234, 99, 30, 214, 219, 15, 5, 234, 
+    95, 15, 5, 234, 87, 15, 5, 234, 74, 15, 5, 234, 73, 15, 5, 234, 71, 15, 
+    5, 234, 72, 115, 234, 71, 15, 5, 233, 223, 15, 5, 233, 224, 115, 241, 
+    188, 30, 253, 238, 233, 224, 115, 241, 188, 30, 253, 237, 15, 5, 233, 
+    221, 15, 5, 233, 219, 15, 5, 233, 220, 214, 12, 17, 15, 5, 233, 218, 15, 
+    5, 233, 215, 15, 5, 233, 216, 242, 101, 15, 5, 233, 214, 15, 5, 233, 202, 
+    15, 5, 233, 203, 226, 168, 233, 202, 15, 5, 233, 197, 15, 5, 233, 178, 
+    15, 5, 233, 141, 15, 5, 233, 123, 15, 5, 233, 124, 30, 61, 15, 5, 233, 
+    124, 30, 116, 96, 248, 230, 96, 162, 15, 5, 233, 124, 30, 116, 96, 243, 
+    103, 15, 5, 233, 124, 30, 116, 96, 233, 110, 15, 5, 233, 124, 30, 254, 
+    187, 15, 5, 233, 124, 30, 254, 131, 15, 5, 233, 124, 30, 253, 240, 210, 
+    40, 216, 240, 15, 5, 233, 124, 30, 252, 184, 15, 5, 233, 124, 30, 252, 
+    14, 15, 5, 233, 124, 30, 248, 174, 15, 5, 233, 124, 30, 245, 158, 15, 5, 
+    233, 124, 30, 243, 142, 15, 5, 233, 124, 30, 243, 103, 15, 5, 233, 124, 
+    30, 242, 110, 15, 5, 233, 124, 30, 242, 111, 96, 242, 110, 15, 5, 233, 
+    124, 30, 162, 15, 5, 233, 124, 30, 242, 37, 15, 5, 233, 124, 30, 241, 
+    188, 30, 227, 198, 15, 5, 233, 124, 30, 236, 43, 242, 101, 15, 5, 233, 
+    124, 30, 236, 23, 15, 5, 233, 124, 30, 236, 24, 96, 162, 15, 5, 233, 124, 
+    30, 236, 24, 96, 232, 103, 15, 5, 233, 124, 30, 234, 98, 15, 5, 233, 124, 
+    30, 234, 87, 15, 5, 233, 124, 30, 233, 221, 15, 5, 233, 124, 30, 233, 
+    215, 15, 5, 233, 124, 30, 233, 216, 96, 241, 188, 96, 61, 15, 5, 233, 
+    124, 30, 233, 123, 15, 5, 233, 124, 30, 232, 203, 15, 5, 233, 124, 30, 
+    232, 103, 15, 5, 233, 124, 30, 232, 91, 15, 5, 233, 124, 30, 231, 96, 15, 
+    5, 233, 124, 30, 231, 97, 96, 245, 158, 15, 5, 233, 124, 30, 230, 66, 15, 
+    5, 233, 124, 30, 229, 112, 15, 5, 233, 124, 30, 220, 66, 96, 218, 44, 15, 
+    5, 233, 124, 30, 220, 12, 96, 242, 198, 96, 245, 95, 15, 5, 233, 124, 30, 
+    220, 12, 96, 242, 198, 216, 240, 15, 5, 233, 124, 30, 219, 225, 15, 5, 
+    233, 124, 30, 219, 226, 96, 219, 225, 15, 5, 233, 124, 30, 218, 44, 15, 
+    5, 233, 124, 30, 217, 85, 15, 5, 233, 124, 30, 217, 73, 15, 5, 233, 124, 
+    30, 217, 24, 96, 116, 96, 218, 85, 96, 198, 15, 5, 233, 124, 30, 69, 15, 
+    5, 233, 124, 30, 104, 96, 61, 15, 5, 233, 124, 30, 104, 96, 104, 96, 69, 
+    15, 5, 233, 124, 30, 214, 231, 96, 253, 239, 15, 5, 233, 124, 30, 214, 
+    219, 15, 5, 233, 124, 30, 214, 126, 15, 5, 233, 124, 218, 235, 15, 5, 
+    233, 121, 15, 5, 233, 122, 30, 220, 65, 15, 5, 233, 122, 30, 220, 66, 96, 
+    218, 44, 15, 5, 233, 122, 242, 101, 15, 5, 233, 122, 242, 102, 115, 233, 
+    122, 242, 102, 220, 65, 15, 5, 233, 117, 15, 5, 233, 110, 15, 5, 233, 
+    111, 30, 233, 110, 15, 5, 233, 108, 15, 5, 233, 109, 30, 233, 202, 15, 5, 
+    233, 109, 30, 233, 203, 96, 222, 142, 15, 5, 232, 247, 15, 5, 232, 232, 
+    15, 5, 232, 222, 15, 5, 232, 203, 15, 5, 232, 103, 15, 5, 232, 104, 30, 
+    252, 184, 15, 5, 232, 101, 15, 5, 232, 102, 30, 254, 187, 15, 5, 232, 
+    102, 30, 252, 184, 15, 5, 232, 102, 30, 245, 80, 15, 5, 232, 102, 30, 
+    245, 81, 216, 240, 15, 5, 232, 102, 30, 243, 112, 216, 240, 15, 5, 232, 
+    102, 30, 241, 188, 30, 252, 184, 15, 5, 232, 102, 30, 236, 23, 15, 5, 
+    232, 102, 30, 235, 7, 15, 5, 232, 102, 30, 235, 5, 15, 5, 232, 102, 30, 
+    235, 6, 96, 253, 239, 15, 5, 232, 102, 30, 234, 98, 15, 5, 232, 102, 30, 
+    233, 142, 96, 253, 239, 15, 5, 232, 102, 30, 233, 123, 15, 5, 232, 102, 
+    30, 231, 97, 96, 245, 158, 15, 5, 232, 102, 30, 229, 112, 15, 5, 232, 
+    102, 30, 227, 242, 15, 5, 232, 102, 30, 219, 194, 96, 253, 239, 15, 5, 
+    232, 102, 30, 219, 176, 96, 251, 133, 15, 5, 232, 102, 30, 215, 114, 15, 
+    5, 232, 102, 216, 240, 15, 5, 232, 102, 249, 133, 232, 101, 15, 5, 232, 
+    102, 226, 168, 232, 101, 15, 5, 232, 102, 218, 235, 15, 5, 232, 102, 220, 
+    47, 15, 5, 232, 100, 15, 5, 232, 96, 15, 5, 232, 97, 115, 232, 96, 15, 5, 
+    232, 97, 226, 168, 232, 96, 15, 5, 232, 97, 220, 47, 15, 5, 232, 94, 15, 
+    5, 232, 91, 15, 5, 232, 89, 15, 5, 232, 90, 115, 232, 89, 15, 5, 232, 90, 
+    115, 232, 90, 243, 104, 115, 243, 103, 15, 5, 186, 15, 5, 231, 244, 30, 
+    217, 73, 15, 5, 231, 244, 242, 101, 15, 5, 231, 243, 15, 5, 231, 215, 15, 
+    5, 231, 171, 15, 5, 231, 152, 15, 5, 231, 151, 15, 5, 231, 96, 15, 5, 
+    231, 52, 15, 5, 230, 235, 15, 5, 230, 193, 15, 5, 230, 107, 15, 5, 230, 
+    108, 115, 230, 107, 15, 5, 230, 98, 15, 5, 230, 99, 242, 101, 15, 5, 230, 
+    83, 15, 5, 230, 69, 15, 5, 230, 66, 15, 5, 230, 67, 30, 61, 15, 5, 230, 
+    67, 30, 233, 202, 15, 5, 230, 67, 30, 210, 116, 15, 5, 230, 67, 115, 230, 
+    66, 15, 5, 230, 67, 115, 230, 67, 30, 116, 96, 198, 15, 5, 230, 67, 249, 
+    133, 230, 66, 15, 5, 230, 64, 15, 5, 230, 65, 30, 61, 15, 5, 230, 65, 30, 
+    116, 96, 248, 11, 15, 5, 230, 65, 30, 248, 11, 15, 5, 230, 65, 242, 101, 
+    15, 5, 198, 15, 5, 229, 232, 15, 5, 229, 221, 15, 5, 229, 222, 235, 199, 
+    15, 5, 229, 222, 30, 219, 228, 216, 240, 15, 5, 229, 222, 226, 168, 229, 
+    221, 15, 5, 229, 220, 15, 5, 229, 213, 227, 184, 15, 5, 229, 212, 15, 5, 
+    229, 211, 15, 5, 229, 112, 15, 5, 229, 113, 30, 61, 15, 5, 229, 113, 30, 
+    214, 219, 15, 5, 229, 113, 220, 47, 15, 5, 228, 238, 15, 5, 228, 239, 30, 
+    76, 15, 5, 228, 237, 15, 5, 228, 208, 15, 5, 228, 209, 30, 243, 112, 216, 
+    240, 15, 5, 228, 209, 30, 243, 104, 96, 243, 112, 216, 240, 15, 5, 228, 
+    206, 15, 5, 228, 207, 30, 254, 131, 15, 5, 228, 207, 30, 253, 239, 15, 5, 
+    228, 207, 30, 253, 240, 96, 253, 239, 15, 5, 228, 207, 30, 242, 110, 15, 
+    5, 228, 207, 30, 231, 97, 96, 243, 112, 216, 240, 15, 5, 228, 207, 30, 
+    229, 112, 15, 5, 228, 207, 30, 227, 198, 15, 5, 228, 207, 30, 220, 65, 
+    15, 5, 228, 207, 30, 220, 66, 96, 116, 254, 131, 15, 5, 228, 207, 30, 
+    220, 66, 96, 253, 239, 15, 5, 228, 207, 30, 220, 66, 96, 253, 240, 96, 
+    253, 239, 15, 5, 228, 207, 30, 214, 231, 96, 253, 239, 15, 5, 228, 207, 
+    30, 214, 126, 15, 5, 228, 195, 15, 5, 227, 242, 15, 5, 227, 214, 15, 5, 
+    227, 198, 15, 5, 227, 199, 233, 122, 30, 243, 103, 15, 5, 227, 199, 233, 
+    122, 30, 231, 152, 15, 5, 227, 199, 233, 122, 30, 222, 10, 15, 5, 227, 
+    199, 233, 122, 30, 222, 11, 115, 227, 199, 233, 122, 30, 222, 10, 15, 5, 
+    227, 199, 233, 122, 30, 214, 126, 15, 5, 227, 199, 216, 240, 15, 5, 227, 
+    199, 115, 227, 198, 15, 5, 227, 199, 249, 133, 227, 198, 15, 5, 227, 199, 
+    249, 133, 227, 199, 233, 122, 115, 233, 121, 15, 5, 227, 193, 15, 5, 227, 
+    194, 255, 33, 30, 253, 234, 15, 5, 227, 194, 255, 33, 30, 252, 14, 15, 5, 
+    227, 194, 255, 33, 30, 246, 82, 15, 5, 227, 194, 255, 33, 30, 242, 110, 
+    15, 5, 227, 194, 255, 33, 30, 236, 43, 242, 101, 15, 5, 227, 194, 255, 
+    33, 30, 235, 5, 15, 5, 227, 194, 255, 33, 30, 233, 141, 15, 5, 227, 194, 
+    255, 33, 30, 229, 112, 15, 5, 227, 194, 255, 33, 30, 219, 173, 15, 5, 
+    227, 194, 255, 33, 30, 214, 230, 15, 5, 227, 194, 234, 72, 30, 252, 14, 
+    15, 5, 227, 194, 234, 72, 30, 252, 15, 69, 15, 5, 191, 15, 5, 226, 84, 
+    15, 5, 226, 51, 15, 5, 226, 25, 15, 5, 225, 164, 15, 5, 225, 111, 15, 5, 
+    225, 112, 30, 61, 15, 5, 225, 112, 30, 255, 34, 15, 5, 225, 112, 30, 252, 
+    14, 15, 5, 225, 112, 30, 251, 133, 15, 5, 225, 112, 30, 76, 15, 5, 225, 
+    112, 30, 74, 15, 5, 225, 112, 30, 240, 122, 15, 5, 225, 112, 30, 69, 15, 
+    5, 225, 112, 30, 214, 230, 15, 5, 225, 112, 249, 133, 225, 111, 15, 5, 
+    225, 56, 15, 5, 225, 57, 30, 234, 244, 15, 5, 225, 57, 30, 214, 219, 15, 
+    5, 225, 57, 30, 210, 116, 15, 5, 225, 57, 226, 168, 225, 56, 15, 5, 205, 
+    15, 5, 223, 185, 15, 5, 223, 38, 15, 5, 222, 142, 15, 5, 206, 15, 5, 222, 
+    24, 227, 184, 15, 5, 222, 23, 15, 5, 222, 24, 30, 61, 15, 5, 222, 24, 30, 
+    246, 86, 15, 5, 222, 24, 30, 246, 84, 15, 5, 222, 24, 30, 162, 15, 5, 
+    222, 24, 30, 234, 248, 15, 5, 222, 24, 30, 233, 202, 15, 5, 222, 24, 30, 
+    232, 89, 15, 5, 222, 24, 30, 230, 235, 15, 5, 222, 24, 30, 227, 198, 15, 
+    5, 222, 24, 30, 222, 10, 15, 5, 222, 24, 30, 220, 32, 15, 5, 222, 24, 30, 
+    217, 94, 15, 5, 222, 24, 30, 214, 230, 15, 5, 222, 24, 30, 214, 225, 15, 
+    5, 222, 24, 30, 214, 197, 15, 5, 222, 24, 30, 214, 150, 15, 5, 222, 24, 
+    30, 214, 126, 15, 5, 222, 24, 115, 222, 23, 15, 5, 222, 24, 242, 101, 15, 
+    5, 222, 10, 15, 5, 222, 11, 233, 124, 30, 253, 237, 15, 5, 221, 241, 15, 
+    5, 221, 233, 15, 5, 220, 104, 15, 5, 220, 102, 15, 5, 220, 103, 30, 61, 
+    15, 5, 220, 103, 30, 252, 184, 15, 5, 220, 103, 30, 242, 197, 15, 5, 220, 
+    103, 30, 229, 112, 15, 5, 220, 103, 30, 219, 225, 15, 5, 220, 103, 30, 
+    215, 99, 15, 5, 220, 103, 30, 69, 15, 5, 220, 103, 30, 104, 96, 61, 15, 
+    5, 220, 101, 15, 5, 220, 99, 15, 5, 220, 80, 15, 5, 220, 65, 15, 5, 220, 
+    66, 240, 229, 15, 5, 220, 66, 115, 220, 66, 243, 134, 115, 243, 134, 243, 
+    104, 115, 243, 103, 15, 5, 220, 66, 115, 220, 66, 217, 95, 115, 217, 95, 
+    243, 104, 115, 243, 103, 15, 5, 220, 58, 15, 5, 220, 53, 15, 5, 220, 50, 
+    15, 5, 220, 49, 15, 5, 220, 46, 15, 5, 220, 32, 15, 5, 220, 33, 30, 61, 
+    15, 5, 220, 33, 30, 236, 23, 15, 5, 220, 26, 15, 5, 220, 27, 30, 61, 15, 
+    5, 220, 27, 30, 252, 169, 15, 5, 220, 27, 30, 251, 117, 15, 5, 220, 27, 
+    30, 247, 214, 15, 5, 220, 27, 30, 243, 103, 15, 5, 220, 27, 30, 236, 42, 
+    15, 5, 220, 27, 30, 236, 43, 242, 101, 15, 5, 220, 27, 30, 233, 197, 15, 
+    5, 220, 27, 30, 232, 91, 15, 5, 220, 27, 30, 230, 98, 15, 5, 220, 27, 30, 
+    222, 10, 15, 5, 220, 20, 15, 5, 220, 15, 15, 5, 220, 16, 216, 240, 15, 5, 
+    220, 16, 115, 220, 16, 251, 107, 115, 251, 106, 15, 5, 220, 11, 15, 5, 
+    219, 227, 15, 5, 219, 228, 115, 235, 200, 219, 227, 15, 5, 219, 225, 15, 
+    5, 219, 224, 15, 5, 219, 193, 15, 5, 219, 194, 242, 101, 15, 5, 219, 184, 
+    15, 5, 219, 182, 15, 5, 219, 183, 115, 219, 183, 219, 225, 15, 5, 219, 
+    175, 15, 5, 219, 173, 15, 5, 218, 84, 15, 5, 218, 85, 115, 218, 84, 15, 
+    5, 218, 55, 15, 5, 218, 54, 15, 5, 218, 52, 15, 5, 218, 44, 15, 5, 218, 
+    43, 15, 5, 218, 18, 15, 5, 218, 17, 15, 5, 217, 106, 15, 5, 217, 107, 
+    253, 224, 15, 5, 217, 107, 30, 241, 187, 15, 5, 217, 107, 30, 230, 235, 
+    15, 5, 217, 107, 242, 101, 15, 5, 217, 94, 15, 5, 217, 95, 115, 217, 95, 
+    228, 239, 115, 228, 239, 247, 196, 115, 247, 195, 15, 5, 217, 95, 218, 
+    235, 15, 5, 217, 85, 15, 5, 129, 30, 252, 14, 15, 5, 129, 30, 242, 110, 
+    15, 5, 129, 30, 220, 65, 15, 5, 129, 30, 219, 227, 15, 5, 129, 30, 215, 
+    114, 15, 5, 129, 30, 214, 219, 15, 5, 217, 73, 15, 5, 217, 51, 15, 5, 
+    217, 23, 15, 5, 217, 24, 242, 101, 15, 5, 216, 118, 15, 5, 216, 119, 216, 
+    240, 15, 5, 216, 91, 15, 5, 216, 73, 15, 5, 216, 74, 30, 217, 73, 15, 5, 
+    216, 74, 115, 216, 73, 15, 5, 216, 74, 115, 216, 74, 243, 134, 115, 243, 
+    134, 243, 104, 115, 243, 103, 15, 5, 215, 119, 15, 5, 215, 114, 15, 5, 
+    215, 112, 15, 5, 215, 109, 15, 5, 215, 99, 15, 5, 215, 100, 115, 215, 
+    100, 210, 117, 115, 210, 116, 15, 5, 69, 15, 5, 104, 242, 110, 15, 5, 
+    104, 104, 69, 15, 5, 104, 115, 104, 226, 94, 115, 226, 94, 243, 104, 115, 
+    243, 103, 15, 5, 104, 115, 104, 218, 19, 115, 218, 18, 15, 5, 104, 115, 
+    104, 104, 223, 52, 115, 104, 223, 51, 15, 5, 214, 230, 15, 5, 214, 225, 
+    15, 5, 214, 219, 15, 5, 214, 220, 233, 197, 15, 5, 214, 220, 30, 252, 
+    184, 15, 5, 214, 220, 30, 230, 235, 15, 5, 214, 220, 30, 104, 96, 104, 
+    96, 69, 15, 5, 214, 220, 30, 104, 96, 104, 96, 104, 242, 101, 15, 5, 214, 
+    220, 242, 101, 15, 5, 214, 220, 220, 47, 15, 5, 214, 220, 220, 48, 30, 
+    252, 184, 15, 5, 214, 215, 15, 5, 214, 197, 15, 5, 214, 198, 30, 233, 
+    123, 15, 5, 214, 198, 30, 231, 97, 96, 248, 229, 15, 5, 214, 198, 30, 
+    220, 102, 15, 5, 214, 198, 30, 69, 15, 5, 214, 196, 15, 5, 214, 192, 15, 
+    5, 214, 193, 30, 234, 213, 15, 5, 214, 193, 30, 191, 15, 5, 214, 190, 15, 
+    5, 214, 191, 242, 101, 15, 5, 214, 150, 15, 5, 214, 151, 249, 133, 214, 
+    150, 15, 5, 214, 151, 220, 47, 15, 5, 214, 148, 15, 5, 214, 149, 30, 116, 
+    96, 162, 15, 5, 214, 149, 30, 116, 96, 198, 15, 5, 214, 149, 30, 254, 
+    187, 15, 5, 214, 149, 30, 162, 15, 5, 214, 149, 30, 227, 198, 15, 5, 214, 
+    149, 30, 214, 230, 15, 5, 214, 149, 30, 214, 231, 96, 253, 239, 15, 5, 
+    214, 149, 30, 214, 231, 96, 252, 14, 15, 5, 214, 147, 15, 5, 214, 144, 
+    15, 5, 214, 143, 15, 5, 214, 139, 15, 5, 214, 140, 30, 61, 15, 5, 214, 
+    140, 30, 253, 234, 15, 5, 214, 140, 30, 130, 15, 5, 214, 140, 30, 246, 
+    76, 15, 5, 214, 140, 30, 243, 142, 15, 5, 214, 140, 30, 243, 125, 15, 5, 
+    214, 140, 30, 243, 112, 216, 240, 15, 5, 214, 140, 30, 243, 103, 15, 5, 
+    214, 140, 30, 242, 120, 15, 5, 214, 140, 30, 162, 15, 5, 214, 140, 30, 
+    236, 42, 15, 5, 214, 140, 30, 236, 23, 15, 5, 214, 140, 30, 235, 172, 15, 
+    5, 214, 140, 30, 234, 98, 15, 5, 214, 140, 30, 232, 89, 15, 5, 214, 140, 
+    30, 230, 193, 15, 5, 214, 140, 30, 191, 15, 5, 214, 140, 30, 220, 65, 15, 
+    5, 214, 140, 30, 219, 182, 15, 5, 214, 140, 30, 215, 119, 15, 5, 214, 
+    140, 30, 104, 96, 242, 110, 15, 5, 214, 140, 30, 214, 219, 15, 5, 214, 
+    140, 30, 214, 137, 15, 5, 214, 137, 15, 5, 214, 138, 30, 69, 15, 5, 214, 
+    126, 15, 5, 214, 127, 30, 61, 15, 5, 214, 127, 30, 233, 223, 15, 5, 214, 
+    127, 30, 233, 202, 15, 5, 214, 127, 30, 217, 73, 15, 5, 214, 122, 15, 5, 
+    214, 125, 15, 5, 214, 123, 15, 5, 214, 119, 15, 5, 214, 108, 15, 5, 214, 
+    109, 30, 234, 213, 15, 5, 214, 107, 15, 5, 210, 116, 15, 5, 210, 117, 
+    216, 240, 15, 5, 210, 117, 92, 30, 233, 202, 15, 5, 210, 113, 15, 5, 210, 
+    106, 15, 5, 210, 93, 15, 5, 210, 44, 15, 5, 210, 45, 115, 210, 44, 15, 5, 
+    210, 43, 15, 5, 210, 41, 15, 5, 210, 42, 235, 9, 216, 240, 15, 5, 210, 
+    36, 15, 5, 210, 28, 15, 5, 210, 13, 15, 5, 210, 11, 15, 5, 210, 12, 30, 
+    61, 15, 5, 210, 10, 15, 5, 210, 9, 15, 132, 5, 113, 253, 239, 15, 132, 5, 
+    134, 253, 239, 15, 132, 5, 244, 19, 253, 239, 15, 132, 5, 244, 89, 253, 
+    239, 15, 132, 5, 219, 127, 253, 239, 15, 132, 5, 220, 124, 253, 239, 15, 
+    132, 5, 245, 201, 253, 239, 15, 132, 5, 228, 205, 253, 239, 15, 132, 5, 
+    134, 247, 195, 15, 132, 5, 244, 19, 247, 195, 15, 132, 5, 244, 89, 247, 
+    195, 15, 132, 5, 219, 127, 247, 195, 15, 132, 5, 220, 124, 247, 195, 15, 
+    132, 5, 245, 201, 247, 195, 15, 132, 5, 228, 205, 247, 195, 15, 132, 5, 
+    244, 19, 69, 15, 132, 5, 244, 89, 69, 15, 132, 5, 219, 127, 69, 15, 132, 
+    5, 220, 124, 69, 15, 132, 5, 245, 201, 69, 15, 132, 5, 228, 205, 69, 15, 
+    132, 5, 123, 243, 45, 15, 132, 5, 113, 243, 45, 15, 132, 5, 134, 243, 45, 
+    15, 132, 5, 244, 19, 243, 45, 15, 132, 5, 244, 89, 243, 45, 15, 132, 5, 
+    219, 127, 243, 45, 15, 132, 5, 220, 124, 243, 45, 15, 132, 5, 245, 201, 
+    243, 45, 15, 132, 5, 228, 205, 243, 45, 15, 132, 5, 123, 243, 42, 15, 
+    132, 5, 113, 243, 42, 15, 132, 5, 134, 243, 42, 15, 132, 5, 244, 19, 243, 
+    42, 15, 132, 5, 244, 89, 243, 42, 15, 132, 5, 113, 220, 80, 15, 132, 5, 
+    134, 220, 80, 15, 132, 5, 134, 220, 81, 214, 12, 17, 15, 132, 5, 244, 19, 
+    220, 80, 15, 132, 5, 244, 89, 220, 80, 15, 132, 5, 219, 127, 220, 80, 15, 
+    132, 5, 220, 124, 220, 80, 15, 132, 5, 245, 201, 220, 80, 15, 132, 5, 
+    228, 205, 220, 80, 15, 132, 5, 123, 220, 75, 15, 132, 5, 113, 220, 75, 
+    15, 132, 5, 134, 220, 75, 15, 132, 5, 134, 220, 76, 214, 12, 17, 15, 132, 
+    5, 244, 19, 220, 75, 15, 132, 5, 244, 89, 220, 75, 15, 132, 5, 220, 81, 
+    30, 243, 126, 96, 247, 195, 15, 132, 5, 220, 81, 30, 243, 126, 96, 230, 
+    193, 15, 132, 5, 123, 251, 103, 15, 132, 5, 113, 251, 103, 15, 132, 5, 
+    134, 251, 103, 15, 132, 5, 134, 251, 104, 214, 12, 17, 15, 132, 5, 244, 
+    19, 251, 103, 15, 132, 5, 244, 89, 251, 103, 15, 132, 5, 134, 214, 12, 
+    244, 28, 245, 82, 15, 132, 5, 134, 214, 12, 244, 28, 245, 79, 15, 132, 5, 
+    244, 19, 214, 12, 244, 28, 232, 223, 15, 132, 5, 244, 19, 214, 12, 244, 
+    28, 232, 221, 15, 132, 5, 244, 19, 214, 12, 244, 28, 232, 224, 61, 15, 
+    132, 5, 244, 19, 214, 12, 244, 28, 232, 224, 253, 166, 15, 132, 5, 219, 
+    127, 214, 12, 244, 28, 253, 236, 15, 132, 5, 220, 124, 214, 12, 244, 28, 
+    236, 15, 15, 132, 5, 220, 124, 214, 12, 244, 28, 236, 17, 61, 15, 132, 5, 
+    220, 124, 214, 12, 244, 28, 236, 17, 253, 166, 15, 132, 5, 245, 201, 214, 
+    12, 244, 28, 214, 121, 15, 132, 5, 245, 201, 214, 12, 244, 28, 214, 120, 
+    15, 132, 5, 228, 205, 214, 12, 244, 28, 236, 31, 15, 132, 5, 228, 205, 
+    214, 12, 244, 28, 236, 30, 15, 132, 5, 228, 205, 214, 12, 244, 28, 236, 
+    29, 15, 132, 5, 228, 205, 214, 12, 244, 28, 236, 32, 61, 15, 132, 5, 113, 
+    253, 240, 216, 240, 15, 132, 5, 134, 253, 240, 216, 240, 15, 132, 5, 244, 
+    19, 253, 240, 216, 240, 15, 132, 5, 244, 89, 253, 240, 216, 240, 15, 132, 
+    5, 219, 127, 253, 240, 216, 240, 15, 132, 5, 123, 252, 158, 15, 132, 5, 
+    113, 252, 158, 15, 132, 5, 134, 252, 158, 15, 132, 5, 244, 19, 252, 158, 
+    15, 132, 5, 244, 19, 252, 159, 214, 12, 17, 15, 132, 5, 244, 89, 252, 
+    158, 15, 132, 5, 244, 89, 252, 159, 214, 12, 17, 15, 132, 5, 228, 215, 
+    15, 132, 5, 228, 216, 15, 132, 5, 123, 245, 78, 15, 132, 5, 113, 245, 78, 
+    15, 132, 5, 123, 216, 170, 247, 195, 15, 132, 5, 113, 216, 168, 247, 195, 
+    15, 132, 5, 244, 89, 219, 116, 247, 195, 15, 132, 5, 123, 216, 170, 214, 
+    12, 244, 28, 61, 15, 132, 5, 113, 216, 168, 214, 12, 244, 28, 61, 15, 
+    132, 5, 123, 245, 197, 253, 239, 15, 132, 5, 123, 224, 25, 253, 239, 15, 
+    132, 5, 55, 253, 227, 123, 219, 117, 15, 132, 5, 55, 253, 227, 123, 224, 
+    24, 15, 224, 144, 5, 55, 253, 227, 211, 209, 247, 180, 15, 224, 144, 5, 
+    67, 249, 234, 15, 224, 144, 5, 248, 7, 249, 234, 15, 224, 144, 5, 248, 7, 
+    215, 222, 12, 13, 255, 164, 12, 13, 255, 163, 12, 13, 255, 162, 12, 13, 
+    255, 161, 12, 13, 255, 160, 12, 13, 255, 159, 12, 13, 255, 158, 12, 13, 
+    255, 157, 12, 13, 255, 156, 12, 13, 255, 155, 12, 13, 255, 154, 12, 13, 
+    255, 153, 12, 13, 255, 152, 12, 13, 255, 151, 12, 13, 255, 150, 12, 13, 
+    255, 149, 12, 13, 255, 148, 12, 13, 255, 147, 12, 13, 255, 146, 12, 13, 
+    255, 145, 12, 13, 255, 144, 12, 13, 255, 143, 12, 13, 255, 142, 12, 13, 
+    255, 141, 12, 13, 255, 140, 12, 13, 255, 139, 12, 13, 255, 138, 12, 13, 
+    255, 137, 12, 13, 255, 136, 12, 13, 255, 135, 12, 13, 255, 134, 12, 13, 
+    255, 133, 12, 13, 255, 132, 12, 13, 255, 131, 12, 13, 255, 130, 12, 13, 
+    255, 129, 12, 13, 255, 128, 12, 13, 255, 127, 12, 13, 255, 126, 12, 13, 
+    255, 125, 12, 13, 255, 124, 12, 13, 255, 123, 12, 13, 255, 122, 12, 13, 
+    255, 121, 12, 13, 255, 120, 12, 13, 255, 119, 12, 13, 255, 118, 12, 13, 
+    255, 117, 12, 13, 255, 116, 12, 13, 255, 115, 12, 13, 255, 114, 12, 13, 
+    255, 113, 12, 13, 255, 112, 12, 13, 255, 111, 12, 13, 255, 110, 12, 13, 
+    255, 109, 12, 13, 255, 108, 12, 13, 255, 107, 12, 13, 255, 106, 12, 13, 
+    255, 105, 12, 13, 255, 104, 12, 13, 255, 103, 12, 13, 255, 102, 12, 13, 
+    255, 101, 12, 13, 255, 100, 12, 13, 255, 99, 12, 13, 255, 98, 12, 13, 
+    255, 97, 12, 13, 255, 96, 12, 13, 255, 95, 12, 13, 255, 94, 12, 13, 255, 
+    93, 12, 13, 255, 92, 12, 13, 255, 91, 12, 13, 255, 90, 12, 13, 255, 89, 
+    12, 13, 255, 88, 12, 13, 255, 87, 12, 13, 255, 86, 12, 13, 255, 85, 12, 
+    13, 253, 164, 12, 13, 253, 162, 12, 13, 253, 160, 12, 13, 253, 158, 12, 
+    13, 253, 156, 12, 13, 253, 155, 12, 13, 253, 153, 12, 13, 253, 151, 12, 
+    13, 253, 149, 12, 13, 253, 147, 12, 13, 251, 70, 12, 13, 251, 69, 12, 13, 
+    251, 68, 12, 13, 251, 67, 12, 13, 251, 66, 12, 13, 251, 65, 12, 13, 251, 
+    64, 12, 13, 251, 63, 12, 13, 251, 62, 12, 13, 251, 61, 12, 13, 251, 60, 
+    12, 13, 251, 59, 12, 13, 251, 58, 12, 13, 251, 57, 12, 13, 251, 56, 12, 
+    13, 251, 55, 12, 13, 251, 54, 12, 13, 251, 53, 12, 13, 251, 52, 12, 13, 
+    251, 51, 12, 13, 251, 50, 12, 13, 251, 49, 12, 13, 251, 48, 12, 13, 251, 
+    47, 12, 13, 251, 46, 12, 13, 251, 45, 12, 13, 251, 44, 12, 13, 251, 43, 
+    12, 13, 249, 67, 12, 13, 249, 66, 12, 13, 249, 65, 12, 13, 249, 64, 12, 
+    13, 249, 63, 12, 13, 249, 62, 12, 13, 249, 61, 12, 13, 249, 60, 12, 13, 
+    249, 59, 12, 13, 249, 58, 12, 13, 249, 57, 12, 13, 249, 56, 12, 13, 249, 
+    55, 12, 13, 249, 54, 12, 13, 249, 53, 12, 13, 249, 52, 12, 13, 249, 51, 
+    12, 13, 249, 50, 12, 13, 249, 49, 12, 13, 249, 48, 12, 13, 249, 47, 12, 
+    13, 249, 46, 12, 13, 249, 45, 12, 13, 249, 44, 12, 13, 249, 43, 12, 13, 
+    249, 42, 12, 13, 249, 41, 12, 13, 249, 40, 12, 13, 249, 39, 12, 13, 249, 
+    38, 12, 13, 249, 37, 12, 13, 249, 36, 12, 13, 249, 35, 12, 13, 249, 34, 
+    12, 13, 249, 33, 12, 13, 249, 32, 12, 13, 249, 31, 12, 13, 249, 30, 12, 
+    13, 249, 29, 12, 13, 249, 28, 12, 13, 249, 27, 12, 13, 249, 26, 12, 13, 
+    249, 25, 12, 13, 249, 24, 12, 13, 249, 23, 12, 13, 249, 22, 12, 13, 249, 
+    21, 12, 13, 249, 20, 12, 13, 249, 19, 12, 13, 249, 18, 12, 13, 249, 17, 
+    12, 13, 249, 16, 12, 13, 249, 15, 12, 13, 249, 14, 12, 13, 249, 13, 12, 
+    13, 249, 12, 12, 13, 249, 11, 12, 13, 249, 10, 12, 13, 249, 9, 12, 13, 
+    249, 8, 12, 13, 249, 7, 12, 13, 249, 6, 12, 13, 249, 5, 12, 13, 249, 4, 
+    12, 13, 249, 3, 12, 13, 249, 2, 12, 13, 249, 1, 12, 13, 249, 0, 12, 13, 
+    248, 255, 12, 13, 248, 254, 12, 13, 248, 253, 12, 13, 248, 252, 12, 13, 
+    248, 251, 12, 13, 248, 250, 12, 13, 248, 249, 12, 13, 248, 248, 12, 13, 
+    248, 247, 12, 13, 248, 246, 12, 13, 248, 245, 12, 13, 248, 244, 12, 13, 
+    248, 243, 12, 13, 248, 242, 12, 13, 248, 241, 12, 13, 248, 240, 12, 13, 
+    248, 239, 12, 13, 248, 238, 12, 13, 248, 237, 12, 13, 248, 236, 12, 13, 
+    248, 235, 12, 13, 248, 234, 12, 13, 248, 233, 12, 13, 248, 232, 12, 13, 
+    246, 31, 12, 13, 246, 30, 12, 13, 246, 29, 12, 13, 246, 28, 12, 13, 246, 
+    27, 12, 13, 246, 26, 12, 13, 246, 25, 12, 13, 246, 24, 12, 13, 246, 23, 
+    12, 13, 246, 22, 12, 13, 246, 21, 12, 13, 246, 20, 12, 13, 246, 19, 12, 
+    13, 246, 18, 12, 13, 246, 17, 12, 13, 246, 16, 12, 13, 246, 15, 12, 13, 
+    246, 14, 12, 13, 246, 13, 12, 13, 246, 12, 12, 13, 246, 11, 12, 13, 246, 
+    10, 12, 13, 246, 9, 12, 13, 246, 8, 12, 13, 246, 7, 12, 13, 246, 6, 12, 
+    13, 246, 5, 12, 13, 246, 4, 12, 13, 246, 3, 12, 13, 246, 2, 12, 13, 246, 
+    1, 12, 13, 246, 0, 12, 13, 245, 255, 12, 13, 245, 254, 12, 13, 245, 253, 
+    12, 13, 245, 252, 12, 13, 245, 251, 12, 13, 245, 250, 12, 13, 245, 249, 
+    12, 13, 245, 248, 12, 13, 245, 247, 12, 13, 245, 246, 12, 13, 245, 245, 
+    12, 13, 245, 244, 12, 13, 245, 13, 12, 13, 245, 12, 12, 13, 245, 11, 12, 
+    13, 245, 10, 12, 13, 245, 9, 12, 13, 245, 8, 12, 13, 245, 7, 12, 13, 245, 
     6, 12, 13, 245, 5, 12, 13, 245, 4, 12, 13, 245, 3, 12, 13, 245, 2, 12, 
     13, 245, 1, 12, 13, 245, 0, 12, 13, 244, 255, 12, 13, 244, 254, 12, 13, 
     244, 253, 12, 13, 244, 252, 12, 13, 244, 251, 12, 13, 244, 250, 12, 13, 
@@ -12000,1825 +12000,1840 @@
     244, 217, 12, 13, 244, 216, 12, 13, 244, 215, 12, 13, 244, 214, 12, 13, 
     244, 213, 12, 13, 244, 212, 12, 13, 244, 211, 12, 13, 244, 210, 12, 13, 
     244, 209, 12, 13, 244, 208, 12, 13, 244, 207, 12, 13, 244, 206, 12, 13, 
-    244, 205, 12, 13, 244, 204, 12, 13, 244, 203, 12, 13, 244, 202, 12, 13, 
-    244, 201, 12, 13, 244, 200, 12, 13, 244, 199, 12, 13, 244, 198, 12, 13, 
-    243, 202, 12, 13, 243, 201, 12, 13, 243, 200, 12, 13, 243, 199, 12, 13, 
-    243, 198, 12, 13, 243, 197, 12, 13, 243, 196, 12, 13, 243, 195, 12, 13, 
-    243, 194, 12, 13, 243, 193, 12, 13, 243, 192, 12, 13, 243, 191, 12, 13, 
-    243, 190, 12, 13, 243, 189, 12, 13, 243, 188, 12, 13, 243, 187, 12, 13, 
-    243, 186, 12, 13, 243, 185, 12, 13, 243, 184, 12, 13, 243, 183, 12, 13, 
-    243, 182, 12, 13, 243, 181, 12, 13, 243, 180, 12, 13, 243, 179, 12, 13, 
-    243, 178, 12, 13, 243, 177, 12, 13, 243, 176, 12, 13, 243, 175, 12, 13, 
-    243, 174, 12, 13, 243, 173, 12, 13, 243, 172, 12, 13, 243, 171, 12, 13, 
-    243, 170, 12, 13, 243, 169, 12, 13, 243, 168, 12, 13, 243, 167, 12, 13, 
-    243, 166, 12, 13, 243, 165, 12, 13, 243, 164, 12, 13, 243, 163, 12, 13, 
-    243, 162, 12, 13, 243, 161, 12, 13, 243, 160, 12, 13, 243, 159, 12, 13, 
-    243, 158, 12, 13, 243, 157, 12, 13, 243, 156, 12, 13, 243, 155, 12, 13, 
-    243, 154, 12, 13, 243, 153, 12, 13, 243, 152, 12, 13, 243, 151, 12, 13, 
-    243, 150, 12, 13, 243, 149, 12, 13, 243, 148, 12, 13, 243, 147, 12, 13, 
-    243, 146, 12, 13, 243, 145, 12, 13, 243, 144, 12, 13, 243, 143, 12, 13, 
-    243, 142, 12, 13, 243, 141, 12, 13, 243, 140, 12, 13, 243, 139, 12, 13, 
-    242, 59, 12, 13, 242, 58, 12, 13, 242, 57, 12, 13, 242, 56, 12, 13, 242, 
-    55, 12, 13, 242, 54, 12, 13, 242, 53, 12, 13, 242, 52, 12, 13, 242, 51, 
-    12, 13, 240, 139, 12, 13, 240, 138, 12, 13, 240, 137, 12, 13, 240, 136, 
-    12, 13, 240, 135, 12, 13, 240, 134, 12, 13, 240, 133, 12, 13, 240, 132, 
-    12, 13, 240, 131, 12, 13, 240, 130, 12, 13, 240, 129, 12, 13, 240, 128, 
-    12, 13, 240, 127, 12, 13, 240, 126, 12, 13, 240, 125, 12, 13, 240, 124, 
-    12, 13, 240, 123, 12, 13, 240, 122, 12, 13, 240, 121, 12, 13, 235, 23, 
-    12, 13, 235, 22, 12, 13, 235, 21, 12, 13, 235, 20, 12, 13, 235, 19, 12, 
-    13, 235, 18, 12, 13, 235, 17, 12, 13, 235, 16, 12, 13, 233, 147, 12, 13, 
-    233, 146, 12, 13, 233, 145, 12, 13, 233, 144, 12, 13, 233, 143, 12, 13, 
-    233, 142, 12, 13, 233, 141, 12, 13, 233, 140, 12, 13, 233, 139, 12, 13, 
-    233, 138, 12, 13, 232, 50, 12, 13, 232, 49, 12, 13, 232, 48, 12, 13, 232, 
-    47, 12, 13, 232, 46, 12, 13, 232, 45, 12, 13, 232, 44, 12, 13, 232, 43, 
-    12, 13, 232, 42, 12, 13, 232, 41, 12, 13, 232, 40, 12, 13, 232, 39, 12, 
-    13, 232, 38, 12, 13, 232, 37, 12, 13, 232, 36, 12, 13, 232, 35, 12, 13, 
-    232, 34, 12, 13, 232, 33, 12, 13, 232, 32, 12, 13, 232, 31, 12, 13, 232, 
-    30, 12, 13, 232, 29, 12, 13, 232, 28, 12, 13, 232, 27, 12, 13, 232, 26, 
-    12, 13, 232, 25, 12, 13, 232, 24, 12, 13, 232, 23, 12, 13, 232, 22, 12, 
-    13, 232, 21, 12, 13, 232, 20, 12, 13, 232, 19, 12, 13, 232, 18, 12, 13, 
-    232, 17, 12, 13, 232, 16, 12, 13, 232, 15, 12, 13, 232, 14, 12, 13, 232, 
-    13, 12, 13, 232, 12, 12, 13, 232, 11, 12, 13, 232, 10, 12, 13, 232, 9, 
-    12, 13, 232, 8, 12, 13, 232, 7, 12, 13, 232, 6, 12, 13, 232, 5, 12, 13, 
-    232, 4, 12, 13, 232, 3, 12, 13, 232, 2, 12, 13, 232, 1, 12, 13, 232, 0, 
-    12, 13, 231, 255, 12, 13, 231, 254, 12, 13, 231, 253, 12, 13, 231, 252, 
-    12, 13, 231, 251, 12, 13, 231, 250, 12, 13, 231, 249, 12, 13, 231, 248, 
-    12, 13, 231, 247, 12, 13, 231, 246, 12, 13, 231, 245, 12, 13, 231, 244, 
-    12, 13, 231, 243, 12, 13, 231, 242, 12, 13, 231, 241, 12, 13, 230, 23, 
-    12, 13, 230, 22, 12, 13, 230, 21, 12, 13, 230, 20, 12, 13, 230, 19, 12, 
-    13, 230, 18, 12, 13, 230, 17, 12, 13, 230, 16, 12, 13, 230, 15, 12, 13, 
-    230, 14, 12, 13, 230, 13, 12, 13, 230, 12, 12, 13, 230, 11, 12, 13, 230, 
-    10, 12, 13, 230, 9, 12, 13, 230, 8, 12, 13, 230, 7, 12, 13, 230, 6, 12, 
-    13, 230, 5, 12, 13, 230, 4, 12, 13, 230, 3, 12, 13, 230, 2, 12, 13, 230, 
-    1, 12, 13, 230, 0, 12, 13, 229, 255, 12, 13, 229, 254, 12, 13, 229, 253, 
-    12, 13, 229, 252, 12, 13, 229, 251, 12, 13, 229, 250, 12, 13, 229, 249, 
-    12, 13, 229, 248, 12, 13, 229, 247, 12, 13, 229, 246, 12, 13, 229, 245, 
-    12, 13, 229, 244, 12, 13, 229, 243, 12, 13, 229, 242, 12, 13, 229, 241, 
-    12, 13, 229, 240, 12, 13, 229, 239, 12, 13, 229, 238, 12, 13, 229, 237, 
-    12, 13, 229, 236, 12, 13, 229, 235, 12, 13, 229, 234, 12, 13, 229, 233, 
-    12, 13, 229, 232, 12, 13, 229, 231, 12, 13, 228, 135, 12, 13, 228, 134, 
-    12, 13, 228, 133, 12, 13, 228, 132, 12, 13, 228, 131, 12, 13, 228, 130, 
-    12, 13, 228, 129, 12, 13, 228, 128, 12, 13, 228, 127, 12, 13, 228, 126, 
-    12, 13, 228, 125, 12, 13, 228, 124, 12, 13, 228, 123, 12, 13, 228, 122, 
-    12, 13, 228, 121, 12, 13, 228, 120, 12, 13, 228, 119, 12, 13, 228, 118, 
-    12, 13, 228, 117, 12, 13, 228, 116, 12, 13, 228, 115, 12, 13, 228, 114, 
-    12, 13, 227, 237, 12, 13, 227, 236, 12, 13, 227, 235, 12, 13, 227, 234, 
-    12, 13, 227, 233, 12, 13, 227, 232, 12, 13, 227, 231, 12, 13, 227, 230, 
-    12, 13, 227, 229, 12, 13, 227, 228, 12, 13, 227, 227, 12, 13, 227, 226, 
-    12, 13, 227, 225, 12, 13, 227, 224, 12, 13, 227, 223, 12, 13, 227, 222, 
-    12, 13, 227, 221, 12, 13, 227, 220, 12, 13, 227, 219, 12, 13, 227, 218, 
-    12, 13, 227, 217, 12, 13, 227, 216, 12, 13, 227, 215, 12, 13, 227, 214, 
-    12, 13, 227, 213, 12, 13, 227, 212, 12, 13, 227, 77, 12, 13, 227, 76, 12, 
-    13, 227, 75, 12, 13, 227, 74, 12, 13, 227, 73, 12, 13, 227, 72, 12, 13, 
-    227, 71, 12, 13, 227, 70, 12, 13, 227, 69, 12, 13, 227, 68, 12, 13, 227, 
-    67, 12, 13, 227, 66, 12, 13, 227, 65, 12, 13, 227, 64, 12, 13, 227, 63, 
-    12, 13, 227, 62, 12, 13, 227, 61, 12, 13, 227, 60, 12, 13, 227, 59, 12, 
-    13, 227, 58, 12, 13, 227, 57, 12, 13, 227, 56, 12, 13, 227, 55, 12, 13, 
-    227, 54, 12, 13, 227, 53, 12, 13, 227, 52, 12, 13, 227, 51, 12, 13, 227, 
-    50, 12, 13, 227, 49, 12, 13, 227, 48, 12, 13, 227, 47, 12, 13, 227, 46, 
-    12, 13, 227, 45, 12, 13, 227, 44, 12, 13, 227, 43, 12, 13, 227, 42, 12, 
-    13, 227, 41, 12, 13, 227, 40, 12, 13, 227, 39, 12, 13, 227, 38, 12, 13, 
-    227, 37, 12, 13, 227, 36, 12, 13, 227, 35, 12, 13, 227, 34, 12, 13, 227, 
-    33, 12, 13, 227, 32, 12, 13, 227, 31, 12, 13, 227, 30, 12, 13, 227, 29, 
-    12, 13, 227, 28, 12, 13, 227, 27, 12, 13, 227, 26, 12, 13, 227, 25, 12, 
-    13, 227, 24, 12, 13, 227, 23, 12, 13, 227, 22, 12, 13, 227, 21, 12, 13, 
-    227, 20, 12, 13, 227, 19, 12, 13, 227, 18, 12, 13, 227, 17, 12, 13, 227, 
-    16, 12, 13, 227, 15, 12, 13, 227, 14, 12, 13, 227, 13, 12, 13, 227, 12, 
-    12, 13, 227, 11, 12, 13, 227, 10, 12, 13, 227, 9, 12, 13, 227, 8, 12, 13, 
-    227, 7, 12, 13, 227, 6, 12, 13, 227, 5, 12, 13, 227, 4, 12, 13, 227, 3, 
-    12, 13, 226, 105, 12, 13, 226, 104, 12, 13, 226, 103, 12, 13, 226, 102, 
-    12, 13, 226, 101, 12, 13, 226, 100, 12, 13, 226, 99, 12, 13, 226, 98, 12, 
-    13, 226, 97, 12, 13, 226, 96, 12, 13, 226, 95, 12, 13, 226, 94, 12, 13, 
-    226, 93, 12, 13, 224, 96, 12, 13, 224, 95, 12, 13, 224, 94, 12, 13, 224, 
-    93, 12, 13, 224, 92, 12, 13, 224, 91, 12, 13, 224, 90, 12, 13, 223, 223, 
-    12, 13, 223, 222, 12, 13, 223, 221, 12, 13, 223, 220, 12, 13, 223, 219, 
-    12, 13, 223, 218, 12, 13, 223, 217, 12, 13, 223, 216, 12, 13, 223, 215, 
-    12, 13, 223, 214, 12, 13, 223, 213, 12, 13, 223, 212, 12, 13, 223, 211, 
-    12, 13, 223, 210, 12, 13, 223, 209, 12, 13, 223, 208, 12, 13, 223, 207, 
-    12, 13, 223, 206, 12, 13, 223, 205, 12, 13, 223, 204, 12, 13, 223, 203, 
-    12, 13, 223, 202, 12, 13, 223, 201, 12, 13, 223, 200, 12, 13, 223, 199, 
-    12, 13, 223, 198, 12, 13, 223, 197, 12, 13, 223, 196, 12, 13, 223, 195, 
-    12, 13, 223, 194, 12, 13, 223, 193, 12, 13, 223, 192, 12, 13, 223, 191, 
-    12, 13, 223, 190, 12, 13, 222, 89, 12, 13, 222, 88, 12, 13, 222, 87, 12, 
-    13, 222, 86, 12, 13, 222, 85, 12, 13, 222, 84, 12, 13, 222, 83, 12, 13, 
-    222, 82, 12, 13, 222, 81, 12, 13, 222, 80, 12, 13, 222, 79, 12, 13, 222, 
-    78, 12, 13, 222, 77, 12, 13, 222, 76, 12, 13, 222, 75, 12, 13, 222, 74, 
-    12, 13, 222, 73, 12, 13, 222, 72, 12, 13, 222, 71, 12, 13, 222, 70, 12, 
-    13, 222, 69, 12, 13, 222, 68, 12, 13, 222, 67, 12, 13, 222, 66, 12, 13, 
-    222, 65, 12, 13, 222, 64, 12, 13, 222, 63, 12, 13, 222, 62, 12, 13, 222, 
-    61, 12, 13, 222, 60, 12, 13, 222, 59, 12, 13, 222, 58, 12, 13, 222, 57, 
-    12, 13, 222, 56, 12, 13, 222, 55, 12, 13, 222, 54, 12, 13, 222, 53, 12, 
-    13, 222, 52, 12, 13, 222, 51, 12, 13, 222, 50, 12, 13, 222, 49, 12, 13, 
-    222, 48, 12, 13, 222, 47, 12, 13, 222, 46, 12, 13, 222, 45, 12, 13, 222, 
-    44, 12, 13, 222, 43, 12, 13, 222, 42, 12, 13, 222, 41, 12, 13, 222, 40, 
-    12, 13, 222, 39, 12, 13, 222, 38, 12, 13, 222, 37, 12, 13, 222, 36, 12, 
-    13, 217, 151, 12, 13, 217, 150, 12, 13, 217, 149, 12, 13, 217, 148, 12, 
-    13, 217, 147, 12, 13, 217, 146, 12, 13, 217, 145, 12, 13, 217, 144, 12, 
-    13, 217, 143, 12, 13, 217, 142, 12, 13, 217, 141, 12, 13, 217, 140, 12, 
-    13, 217, 139, 12, 13, 217, 138, 12, 13, 217, 137, 12, 13, 217, 136, 12, 
-    13, 217, 135, 12, 13, 217, 134, 12, 13, 217, 133, 12, 13, 217, 132, 12, 
-    13, 217, 131, 12, 13, 217, 130, 12, 13, 217, 129, 12, 13, 217, 128, 12, 
-    13, 217, 127, 12, 13, 217, 126, 12, 13, 217, 125, 12, 13, 217, 124, 12, 
-    13, 217, 123, 12, 13, 217, 122, 12, 13, 217, 121, 12, 13, 217, 120, 12, 
-    13, 217, 119, 12, 13, 217, 118, 12, 13, 217, 117, 12, 13, 217, 116, 12, 
-    13, 217, 115, 12, 13, 217, 114, 12, 13, 217, 113, 12, 13, 217, 112, 12, 
-    13, 217, 111, 12, 13, 217, 110, 12, 13, 217, 109, 12, 13, 217, 108, 12, 
-    13, 215, 22, 12, 13, 215, 21, 12, 13, 215, 20, 12, 13, 215, 19, 12, 13, 
-    215, 18, 12, 13, 215, 17, 12, 13, 215, 16, 12, 13, 215, 15, 12, 13, 215, 
-    14, 12, 13, 215, 13, 12, 13, 215, 12, 12, 13, 215, 11, 12, 13, 215, 10, 
-    12, 13, 215, 9, 12, 13, 215, 8, 12, 13, 215, 7, 12, 13, 215, 6, 12, 13, 
-    215, 5, 12, 13, 215, 4, 12, 13, 215, 3, 12, 13, 215, 2, 12, 13, 215, 1, 
-    12, 13, 215, 0, 12, 13, 214, 255, 12, 13, 214, 254, 12, 13, 214, 253, 12, 
-    13, 214, 252, 12, 13, 214, 251, 12, 13, 214, 250, 12, 13, 214, 249, 12, 
-    13, 214, 248, 12, 13, 214, 247, 12, 13, 214, 246, 12, 13, 214, 245, 12, 
-    13, 214, 244, 12, 13, 214, 243, 12, 13, 214, 242, 12, 13, 214, 241, 12, 
-    13, 214, 240, 12, 13, 214, 239, 12, 13, 214, 238, 12, 13, 214, 237, 12, 
-    13, 214, 236, 12, 13, 214, 235, 12, 13, 214, 234, 12, 13, 214, 233, 12, 
-    13, 214, 232, 12, 13, 214, 104, 12, 13, 214, 103, 12, 13, 214, 102, 12, 
-    13, 214, 101, 12, 13, 214, 100, 12, 13, 214, 99, 12, 13, 214, 98, 12, 13, 
-    214, 97, 12, 13, 214, 96, 12, 13, 214, 95, 12, 13, 214, 94, 12, 13, 214, 
-    93, 12, 13, 214, 92, 12, 13, 214, 91, 12, 13, 214, 90, 12, 13, 214, 89, 
-    12, 13, 214, 88, 12, 13, 214, 87, 12, 13, 214, 86, 12, 13, 214, 85, 12, 
-    13, 214, 84, 12, 13, 214, 83, 12, 13, 214, 82, 12, 13, 214, 81, 12, 13, 
-    214, 80, 12, 13, 214, 79, 12, 13, 214, 78, 12, 13, 214, 77, 12, 13, 214, 
-    76, 12, 13, 214, 75, 12, 13, 214, 74, 12, 13, 214, 73, 12, 13, 214, 72, 
-    12, 13, 214, 71, 12, 13, 214, 70, 12, 13, 214, 69, 12, 13, 214, 68, 12, 
-    13, 214, 67, 12, 13, 214, 66, 12, 13, 214, 65, 12, 13, 214, 64, 12, 13, 
-    214, 63, 12, 13, 214, 62, 12, 13, 214, 61, 12, 13, 214, 60, 12, 13, 214, 
-    59, 12, 13, 214, 58, 12, 13, 214, 57, 12, 13, 214, 56, 12, 13, 214, 55, 
-    12, 13, 214, 54, 12, 13, 214, 53, 12, 13, 214, 52, 12, 13, 214, 51, 12, 
-    13, 214, 50, 12, 13, 214, 49, 12, 13, 214, 48, 12, 13, 214, 47, 12, 13, 
-    214, 46, 12, 13, 214, 45, 12, 13, 214, 44, 12, 13, 214, 43, 12, 13, 214, 
-    42, 12, 13, 214, 41, 12, 13, 214, 40, 12, 13, 214, 39, 12, 13, 214, 38, 
-    12, 13, 214, 37, 12, 13, 214, 36, 12, 13, 214, 35, 12, 13, 214, 34, 12, 
-    13, 214, 33, 12, 13, 214, 32, 12, 13, 214, 31, 12, 13, 214, 30, 12, 13, 
-    214, 29, 12, 13, 214, 28, 12, 13, 212, 97, 12, 13, 212, 96, 12, 13, 212, 
-    95, 12, 13, 212, 94, 12, 13, 212, 93, 12, 13, 212, 92, 12, 13, 212, 91, 
-    12, 13, 212, 90, 12, 13, 212, 89, 12, 13, 212, 88, 12, 13, 212, 87, 12, 
-    13, 212, 86, 12, 13, 212, 85, 12, 13, 212, 84, 12, 13, 212, 83, 12, 13, 
-    212, 82, 12, 13, 212, 81, 12, 13, 212, 80, 12, 13, 212, 79, 12, 13, 212, 
-    78, 12, 13, 212, 77, 12, 13, 212, 76, 12, 13, 212, 75, 12, 13, 212, 74, 
-    12, 13, 212, 73, 12, 13, 212, 72, 12, 13, 212, 71, 12, 13, 212, 70, 12, 
-    13, 212, 69, 12, 13, 212, 68, 12, 13, 212, 67, 12, 13, 212, 66, 12, 13, 
-    211, 177, 12, 13, 211, 176, 12, 13, 211, 175, 12, 13, 211, 174, 12, 13, 
-    211, 173, 12, 13, 211, 172, 12, 13, 211, 171, 12, 13, 211, 170, 12, 13, 
-    211, 169, 12, 13, 211, 168, 12, 13, 211, 167, 12, 13, 211, 166, 12, 13, 
-    211, 115, 12, 13, 211, 114, 12, 13, 211, 113, 12, 13, 211, 112, 12, 13, 
-    211, 111, 12, 13, 211, 110, 12, 13, 211, 109, 12, 13, 211, 108, 12, 13, 
-    211, 107, 12, 13, 210, 158, 12, 13, 210, 157, 12, 13, 210, 156, 12, 13, 
-    210, 155, 12, 13, 210, 154, 12, 13, 210, 153, 12, 13, 210, 152, 12, 13, 
-    210, 151, 12, 13, 210, 150, 12, 13, 210, 149, 12, 13, 210, 148, 12, 13, 
-    210, 147, 12, 13, 210, 146, 12, 13, 210, 145, 12, 13, 210, 144, 12, 13, 
-    210, 143, 12, 13, 210, 142, 12, 13, 210, 141, 12, 13, 210, 140, 12, 13, 
-    210, 139, 12, 13, 210, 138, 12, 13, 210, 137, 12, 13, 210, 136, 12, 13, 
-    210, 135, 12, 13, 210, 134, 12, 13, 210, 133, 12, 13, 210, 132, 12, 13, 
-    210, 131, 12, 13, 210, 130, 12, 13, 210, 129, 12, 13, 210, 128, 12, 13, 
-    210, 127, 12, 13, 210, 126, 12, 13, 210, 125, 12, 13, 210, 124, 12, 13, 
-    210, 123, 12, 13, 210, 122, 12, 13, 210, 121, 12, 13, 210, 120, 12, 13, 
-    210, 119, 12, 13, 210, 118, 12, 13, 255, 73, 12, 13, 255, 72, 12, 13, 
-    255, 71, 12, 13, 255, 70, 12, 13, 255, 69, 12, 13, 255, 68, 12, 13, 255, 
-    67, 12, 13, 255, 66, 12, 13, 255, 65, 12, 13, 255, 64, 12, 13, 255, 63, 
-    12, 13, 255, 62, 12, 13, 255, 61, 12, 13, 255, 60, 12, 13, 255, 59, 12, 
-    13, 255, 58, 12, 13, 255, 57, 12, 13, 255, 56, 12, 13, 255, 55, 12, 13, 
-    255, 54, 12, 13, 255, 53, 12, 13, 255, 52, 12, 13, 255, 51, 12, 13, 255, 
-    50, 12, 13, 255, 49, 12, 13, 255, 48, 12, 13, 255, 47, 12, 13, 255, 46, 
-    12, 13, 255, 45, 12, 13, 255, 44, 12, 13, 255, 43, 12, 13, 255, 42, 12, 
-    13, 255, 41, 12, 13, 255, 40, 20, 1, 167, 229, 13, 231, 17, 20, 1, 167, 
-    243, 71, 244, 37, 20, 1, 167, 224, 252, 231, 18, 225, 58, 20, 1, 167, 
-    224, 252, 231, 18, 225, 59, 20, 1, 167, 229, 227, 231, 17, 20, 1, 167, 
-    219, 222, 20, 1, 167, 216, 67, 231, 17, 20, 1, 167, 227, 119, 231, 17, 
-    20, 1, 167, 220, 20, 226, 91, 228, 170, 20, 1, 167, 224, 252, 226, 91, 
-    228, 171, 225, 58, 20, 1, 167, 224, 252, 226, 91, 228, 171, 225, 59, 20, 
-    1, 167, 231, 219, 20, 1, 167, 215, 120, 231, 220, 20, 1, 167, 229, 72, 
-    20, 1, 167, 231, 216, 20, 1, 167, 231, 177, 20, 1, 167, 230, 49, 20, 1, 
-    167, 220, 125, 20, 1, 167, 227, 242, 20, 1, 167, 234, 150, 20, 1, 167, 
-    228, 139, 20, 1, 167, 218, 5, 20, 1, 167, 229, 12, 20, 1, 167, 233, 88, 
-    20, 1, 167, 233, 13, 233, 190, 20, 1, 167, 227, 249, 231, 25, 20, 1, 167, 
-    231, 223, 20, 1, 167, 225, 247, 20, 1, 167, 242, 232, 20, 1, 167, 226, 
-    51, 20, 1, 167, 230, 152, 229, 46, 20, 1, 167, 227, 100, 231, 28, 20, 1, 
-    167, 104, 210, 188, 229, 221, 20, 1, 167, 242, 233, 20, 1, 167, 227, 249, 
-    227, 250, 20, 1, 167, 219, 129, 20, 1, 167, 231, 10, 20, 1, 167, 231, 31, 
-    20, 1, 167, 230, 131, 20, 1, 167, 234, 250, 20, 1, 167, 226, 91, 233, 48, 
-    20, 1, 167, 229, 150, 233, 48, 20, 1, 167, 225, 159, 20, 1, 167, 231, 
-    217, 20, 1, 167, 228, 208, 20, 1, 167, 224, 135, 20, 1, 167, 215, 117, 
-    20, 1, 167, 232, 95, 20, 1, 167, 219, 42, 20, 1, 167, 216, 217, 20, 1, 
-    167, 231, 214, 20, 1, 167, 234, 157, 20, 1, 167, 229, 146, 20, 1, 167, 
-    233, 202, 20, 1, 167, 230, 132, 20, 1, 167, 219, 219, 20, 1, 167, 232, 
-    139, 20, 1, 167, 244, 94, 20, 1, 167, 222, 200, 20, 1, 167, 233, 242, 20, 
-    1, 167, 219, 38, 20, 1, 167, 231, 174, 225, 100, 20, 1, 167, 220, 13, 20, 
-    1, 167, 227, 248, 20, 1, 167, 219, 254, 228, 3, 210, 196, 20, 1, 167, 
-    227, 139, 230, 149, 20, 1, 167, 226, 86, 20, 1, 167, 228, 140, 20, 1, 
-    167, 214, 170, 20, 1, 167, 229, 49, 20, 1, 167, 231, 213, 20, 1, 167, 
-    228, 182, 20, 1, 167, 231, 120, 20, 1, 167, 227, 152, 20, 1, 167, 216, 
-    221, 20, 1, 167, 219, 35, 20, 1, 167, 226, 87, 20, 1, 167, 228, 7, 20, 1, 
-    167, 231, 221, 20, 1, 167, 227, 149, 20, 1, 167, 234, 217, 20, 1, 167, 
-    228, 10, 20, 1, 167, 213, 250, 20, 1, 167, 232, 99, 20, 1, 167, 229, 99, 
-    20, 1, 167, 229, 197, 20, 1, 167, 231, 119, 20, 1, 225, 139, 228, 5, 20, 
-    1, 225, 139, 215, 120, 231, 218, 20, 1, 225, 139, 219, 186, 20, 1, 225, 
-    139, 220, 129, 215, 119, 20, 1, 225, 139, 232, 141, 227, 245, 20, 1, 225, 
-    139, 231, 126, 231, 222, 20, 1, 225, 139, 234, 88, 20, 1, 225, 139, 211, 
-    15, 20, 1, 225, 139, 231, 121, 20, 1, 225, 139, 234, 238, 20, 1, 225, 
-    139, 225, 209, 20, 1, 225, 139, 211, 89, 233, 48, 20, 1, 225, 139, 233, 
-    104, 228, 3, 227, 161, 20, 1, 225, 139, 227, 243, 220, 39, 20, 1, 225, 
-    139, 229, 117, 228, 185, 20, 1, 225, 139, 242, 230, 20, 1, 225, 139, 225, 
-    50, 20, 1, 225, 139, 215, 120, 228, 1, 20, 1, 225, 139, 220, 44, 228, 
-    180, 20, 1, 225, 139, 220, 40, 20, 1, 225, 139, 231, 18, 216, 220, 20, 1, 
-    225, 139, 231, 108, 231, 122, 20, 1, 225, 139, 227, 150, 227, 245, 20, 1, 
-    225, 139, 234, 146, 20, 1, 225, 139, 242, 231, 20, 1, 225, 139, 234, 142, 
-    20, 1, 225, 139, 233, 130, 20, 1, 225, 139, 225, 250, 20, 1, 225, 139, 
-    213, 182, 20, 1, 225, 139, 229, 14, 230, 47, 20, 1, 225, 139, 229, 48, 
-    231, 104, 20, 1, 225, 139, 211, 193, 20, 1, 225, 139, 222, 12, 20, 1, 
-    225, 139, 217, 98, 20, 1, 225, 139, 231, 30, 20, 1, 225, 139, 229, 33, 
-    20, 1, 225, 139, 229, 34, 233, 85, 20, 1, 225, 139, 231, 20, 20, 1, 225, 
-    139, 218, 53, 20, 1, 225, 139, 231, 112, 20, 1, 225, 139, 230, 134, 20, 
-    1, 225, 139, 227, 164, 20, 1, 225, 139, 224, 139, 20, 1, 225, 139, 231, 
-    29, 229, 50, 20, 1, 225, 139, 244, 127, 20, 1, 225, 139, 231, 99, 20, 1, 
-    225, 139, 244, 148, 20, 1, 225, 139, 234, 154, 20, 1, 225, 139, 231, 240, 
-    228, 174, 20, 1, 225, 139, 231, 240, 228, 150, 20, 1, 225, 139, 233, 12, 
-    20, 1, 225, 139, 229, 56, 20, 1, 225, 139, 228, 12, 20, 1, 225, 139, 185, 
-    20, 1, 225, 139, 234, 75, 20, 1, 225, 139, 229, 2, 20, 1, 137, 229, 13, 
-    231, 220, 20, 1, 137, 227, 118, 20, 1, 137, 210, 196, 20, 1, 137, 212, 
-    53, 20, 1, 137, 229, 49, 20, 1, 137, 229, 138, 20, 1, 137, 229, 20, 20, 
-    1, 137, 242, 240, 20, 1, 137, 231, 116, 20, 1, 137, 243, 78, 20, 1, 137, 
-    227, 141, 230, 171, 231, 32, 20, 1, 137, 227, 241, 231, 107, 20, 1, 137, 
-    231, 113, 20, 1, 137, 225, 56, 20, 1, 137, 229, 123, 20, 1, 137, 231, 
-    124, 251, 30, 20, 1, 137, 234, 144, 20, 1, 137, 242, 241, 20, 1, 137, 
-    234, 151, 20, 1, 137, 210, 213, 230, 77, 20, 1, 137, 227, 112, 20, 1, 
-    137, 231, 101, 20, 1, 137, 228, 11, 20, 1, 137, 231, 107, 20, 1, 137, 
-    211, 16, 20, 1, 137, 233, 250, 20, 1, 137, 235, 11, 20, 1, 137, 220, 124, 
-    20, 1, 137, 229, 132, 20, 1, 137, 217, 96, 20, 1, 137, 228, 154, 20, 1, 
-    137, 216, 67, 210, 198, 20, 1, 137, 218, 80, 20, 1, 137, 229, 40, 227, 
-    161, 20, 1, 137, 213, 181, 20, 1, 137, 229, 200, 20, 1, 137, 231, 240, 
-    234, 153, 20, 1, 137, 227, 250, 20, 1, 137, 229, 35, 20, 1, 137, 233, 89, 
-    20, 1, 137, 231, 109, 20, 1, 137, 231, 9, 20, 1, 137, 227, 244, 20, 1, 
-    137, 216, 216, 20, 1, 137, 229, 37, 20, 1, 137, 243, 234, 20, 1, 137, 
-    229, 137, 20, 1, 137, 228, 13, 20, 1, 137, 228, 9, 20, 1, 137, 251, 108, 
-    20, 1, 137, 213, 183, 20, 1, 137, 231, 114, 20, 1, 137, 222, 141, 20, 1, 
-    137, 228, 184, 20, 1, 137, 233, 103, 20, 1, 137, 216, 65, 20, 1, 137, 
-    227, 251, 229, 2, 20, 1, 137, 228, 176, 20, 1, 137, 234, 157, 20, 1, 137, 
-    229, 41, 20, 1, 137, 231, 213, 20, 1, 137, 231, 102, 20, 1, 137, 232, 99, 
-    20, 1, 137, 233, 190, 20, 1, 137, 228, 182, 20, 1, 137, 229, 2, 20, 1, 
-    137, 211, 184, 20, 1, 137, 229, 38, 20, 1, 137, 227, 254, 20, 1, 137, 
-    227, 246, 20, 1, 137, 233, 204, 228, 140, 20, 1, 137, 227, 252, 20, 1, 
-    137, 229, 145, 20, 1, 137, 231, 240, 228, 1, 20, 1, 137, 211, 103, 20, 1, 
-    137, 229, 144, 20, 1, 137, 219, 221, 20, 1, 137, 220, 127, 20, 1, 137, 
-    231, 110, 20, 1, 137, 231, 220, 20, 1, 137, 231, 120, 20, 1, 137, 234, 
-    145, 20, 1, 137, 231, 111, 20, 1, 137, 234, 149, 20, 1, 137, 231, 124, 
-    225, 104, 20, 1, 137, 210, 179, 20, 1, 137, 228, 172, 20, 1, 137, 230, 
-    221, 20, 1, 137, 230, 101, 20, 1, 137, 220, 16, 20, 1, 137, 234, 167, 
-    233, 71, 20, 1, 137, 234, 167, 244, 161, 20, 1, 137, 229, 70, 20, 1, 137, 
-    229, 197, 20, 1, 137, 232, 201, 20, 1, 137, 225, 66, 20, 1, 137, 225, 
-    200, 20, 1, 137, 216, 231, 20, 1, 107, 231, 100, 20, 1, 107, 212, 51, 20, 
-    1, 107, 228, 170, 20, 1, 107, 231, 17, 20, 1, 107, 228, 168, 20, 1, 107, 
-    232, 236, 20, 1, 107, 228, 173, 20, 1, 107, 228, 8, 20, 1, 107, 229, 55, 
-    20, 1, 107, 227, 161, 20, 1, 107, 211, 194, 20, 1, 107, 229, 10, 20, 1, 
-    107, 220, 62, 20, 1, 107, 229, 21, 20, 1, 107, 234, 152, 20, 1, 107, 216, 
-    218, 20, 1, 107, 220, 42, 20, 1, 107, 228, 181, 20, 1, 107, 218, 53, 20, 
-    1, 107, 234, 157, 20, 1, 107, 211, 91, 20, 1, 107, 233, 205, 20, 1, 107, 
-    221, 235, 20, 1, 107, 231, 22, 20, 1, 107, 229, 136, 20, 1, 107, 231, 
-    189, 20, 1, 107, 231, 28, 20, 1, 107, 220, 126, 20, 1, 107, 211, 39, 20, 
-    1, 107, 228, 175, 20, 1, 107, 234, 148, 231, 103, 20, 1, 107, 229, 17, 
-    20, 1, 107, 215, 119, 20, 1, 107, 242, 249, 20, 1, 107, 229, 7, 20, 1, 
-    107, 244, 128, 20, 1, 107, 229, 140, 20, 1, 107, 231, 1, 20, 1, 107, 233, 
-    6, 20, 1, 107, 229, 122, 20, 1, 107, 230, 148, 20, 1, 107, 231, 5, 20, 1, 
-    107, 224, 119, 20, 1, 107, 231, 3, 20, 1, 107, 231, 19, 20, 1, 107, 232, 
-    85, 20, 1, 107, 228, 0, 20, 1, 107, 231, 123, 20, 1, 107, 233, 181, 20, 
-    1, 107, 227, 152, 20, 1, 107, 216, 221, 20, 1, 107, 219, 35, 20, 1, 107, 
-    210, 179, 20, 1, 107, 234, 149, 20, 1, 107, 223, 171, 20, 1, 107, 217, 
-    11, 20, 1, 107, 229, 18, 20, 1, 107, 231, 24, 20, 1, 107, 227, 255, 20, 
-    1, 107, 234, 147, 20, 1, 107, 225, 60, 20, 1, 107, 225, 153, 20, 1, 107, 
-    227, 128, 20, 1, 107, 233, 12, 20, 1, 107, 229, 56, 20, 1, 107, 231, 21, 
-    20, 1, 107, 229, 30, 20, 1, 107, 210, 193, 20, 1, 107, 226, 22, 20, 1, 
-    107, 210, 192, 20, 1, 107, 229, 145, 20, 1, 107, 227, 245, 20, 1, 107, 
-    218, 82, 20, 1, 107, 233, 209, 20, 1, 107, 229, 45, 20, 1, 107, 229, 15, 
-    20, 1, 107, 215, 103, 20, 1, 107, 231, 32, 20, 1, 107, 233, 199, 20, 1, 
-    107, 227, 253, 20, 1, 107, 216, 219, 20, 1, 107, 231, 215, 20, 1, 107, 
-    229, 54, 20, 1, 107, 233, 5, 20, 1, 107, 229, 36, 20, 1, 107, 228, 2, 20, 
-    1, 107, 228, 154, 20, 1, 107, 242, 234, 20, 1, 107, 233, 218, 20, 1, 107, 
-    223, 85, 226, 210, 20, 1, 107, 217, 87, 20, 1, 107, 216, 11, 20, 1, 107, 
-    227, 149, 20, 1, 107, 222, 240, 20, 1, 107, 233, 50, 20, 1, 107, 231, 80, 
-    20, 1, 107, 193, 20, 1, 107, 218, 5, 20, 1, 107, 230, 103, 20, 1, 107, 
-    220, 28, 20, 1, 107, 220, 38, 20, 1, 107, 233, 156, 20, 1, 107, 227, 238, 
-    20, 1, 107, 219, 226, 20, 1, 107, 227, 247, 20, 1, 107, 225, 212, 20, 1, 
-    107, 228, 234, 20, 1, 107, 219, 253, 20, 1, 107, 224, 134, 20, 1, 107, 
-    230, 47, 20, 1, 107, 232, 120, 20, 1, 107, 223, 85, 230, 97, 20, 1, 107, 
-    216, 118, 20, 1, 107, 227, 239, 20, 1, 107, 231, 124, 198, 20, 1, 107, 
-    221, 233, 20, 1, 107, 244, 196, 20, 1, 82, 229, 144, 20, 1, 82, 216, 17, 
-    20, 1, 82, 231, 113, 20, 1, 82, 233, 89, 20, 1, 82, 213, 128, 20, 1, 82, 
-    232, 126, 20, 1, 82, 226, 90, 20, 1, 82, 219, 46, 20, 1, 82, 223, 146, 
-    20, 1, 82, 228, 4, 20, 1, 82, 229, 115, 20, 1, 82, 224, 148, 20, 1, 82, 
-    217, 63, 20, 1, 82, 229, 23, 20, 1, 82, 233, 246, 20, 1, 82, 211, 187, 
-    20, 1, 82, 221, 171, 20, 1, 82, 229, 46, 20, 1, 82, 226, 87, 20, 1, 82, 
-    216, 18, 20, 1, 82, 233, 203, 20, 1, 82, 232, 140, 20, 1, 82, 228, 7, 20, 
-    1, 82, 228, 255, 20, 1, 82, 231, 221, 20, 1, 82, 229, 16, 20, 1, 82, 228, 
-    254, 20, 1, 82, 228, 6, 20, 1, 82, 222, 238, 20, 1, 82, 228, 172, 20, 1, 
-    82, 225, 211, 20, 1, 82, 222, 32, 20, 1, 82, 229, 31, 20, 1, 82, 231, 11, 
-    20, 1, 82, 242, 228, 20, 1, 82, 229, 19, 20, 1, 82, 228, 183, 20, 1, 82, 
-    231, 173, 20, 1, 82, 232, 122, 20, 1, 82, 229, 51, 20, 1, 82, 229, 128, 
-    20, 1, 82, 217, 86, 227, 245, 20, 1, 82, 220, 128, 20, 1, 82, 224, 144, 
-    20, 1, 82, 229, 148, 219, 52, 20, 1, 82, 229, 39, 227, 161, 20, 1, 82, 
-    211, 4, 20, 1, 82, 242, 229, 20, 1, 82, 215, 118, 20, 1, 82, 211, 19, 20, 
-    1, 82, 225, 17, 20, 1, 82, 215, 108, 20, 1, 82, 234, 155, 20, 1, 82, 218, 
-    81, 20, 1, 82, 216, 220, 20, 1, 82, 213, 184, 20, 1, 82, 212, 6, 20, 1, 
-    82, 233, 133, 20, 1, 82, 224, 151, 20, 1, 82, 217, 97, 20, 1, 82, 242, 
-    248, 20, 1, 82, 229, 60, 20, 1, 82, 220, 41, 20, 1, 82, 231, 6, 20, 1, 
-    82, 231, 117, 20, 1, 82, 227, 116, 20, 1, 82, 228, 137, 20, 1, 82, 243, 
-    74, 20, 1, 82, 215, 109, 20, 1, 82, 233, 212, 20, 1, 82, 211, 67, 20, 1, 
-    82, 227, 150, 250, 17, 20, 1, 82, 210, 250, 20, 1, 82, 231, 23, 20, 1, 
-    82, 229, 133, 20, 1, 82, 225, 101, 20, 1, 82, 210, 197, 20, 1, 82, 233, 
-    7, 20, 1, 82, 243, 234, 20, 1, 82, 243, 73, 20, 1, 82, 229, 9, 20, 1, 82, 
-    234, 157, 20, 1, 82, 231, 224, 20, 1, 82, 229, 22, 20, 1, 82, 242, 235, 
-    20, 1, 82, 244, 197, 20, 1, 82, 227, 240, 20, 1, 82, 225, 154, 20, 1, 82, 
-    211, 17, 20, 1, 82, 229, 47, 20, 1, 82, 227, 150, 252, 24, 20, 1, 82, 
-    227, 96, 20, 1, 82, 224, 248, 20, 1, 82, 230, 221, 20, 1, 82, 243, 232, 
-    20, 1, 82, 229, 221, 20, 1, 82, 230, 101, 20, 1, 82, 242, 234, 20, 1, 82, 
-    243, 236, 73, 20, 1, 82, 230, 48, 20, 1, 82, 224, 147, 20, 1, 82, 229, 
-    11, 20, 1, 82, 233, 190, 20, 1, 82, 225, 98, 20, 1, 82, 227, 248, 20, 1, 
-    82, 211, 18, 20, 1, 82, 229, 32, 20, 1, 82, 226, 91, 225, 188, 20, 1, 82, 
-    243, 236, 251, 16, 20, 1, 82, 244, 38, 20, 1, 82, 228, 177, 20, 1, 82, 
-    61, 20, 1, 82, 216, 11, 20, 1, 82, 76, 20, 1, 82, 73, 20, 1, 82, 233, 87, 
-    20, 1, 82, 226, 91, 225, 24, 20, 1, 82, 217, 102, 20, 1, 82, 217, 52, 20, 
-    1, 82, 229, 148, 230, 35, 240, 235, 20, 1, 82, 220, 16, 20, 1, 82, 211, 
-    14, 20, 1, 82, 228, 248, 20, 1, 82, 210, 202, 20, 1, 82, 210, 227, 217, 
-    241, 20, 1, 82, 210, 227, 249, 148, 20, 1, 82, 210, 187, 20, 1, 82, 210, 
-    195, 20, 1, 82, 234, 143, 20, 1, 82, 225, 152, 20, 1, 82, 228, 178, 245, 
-    103, 20, 1, 82, 224, 145, 20, 1, 82, 211, 192, 20, 1, 82, 244, 148, 20, 
-    1, 82, 213, 250, 20, 1, 82, 232, 99, 20, 1, 82, 230, 231, 20, 1, 82, 223, 
-    52, 20, 1, 82, 223, 172, 20, 1, 82, 228, 247, 20, 1, 82, 229, 78, 20, 1, 
-    82, 220, 8, 20, 1, 82, 219, 253, 20, 1, 82, 243, 236, 223, 87, 20, 1, 82, 
-    197, 20, 1, 82, 225, 109, 20, 1, 82, 232, 120, 20, 1, 82, 234, 29, 20, 1, 
-    82, 231, 59, 20, 1, 82, 185, 20, 1, 82, 231, 170, 20, 1, 82, 216, 222, 
-    20, 1, 82, 234, 93, 20, 1, 82, 230, 151, 20, 1, 82, 216, 248, 20, 1, 82, 
-    244, 170, 20, 1, 82, 242, 224, 20, 1, 225, 138, 176, 20, 1, 225, 138, 70, 
-    20, 1, 225, 138, 233, 218, 20, 1, 225, 138, 245, 210, 20, 1, 225, 138, 
-    223, 109, 20, 1, 225, 138, 217, 87, 20, 1, 225, 138, 227, 149, 20, 1, 
-    225, 138, 233, 136, 20, 1, 225, 138, 222, 240, 20, 1, 225, 138, 223, 30, 
-    20, 1, 225, 138, 231, 80, 20, 1, 225, 138, 217, 102, 20, 1, 225, 138, 
-    229, 147, 20, 1, 225, 138, 228, 184, 20, 1, 225, 138, 193, 20, 1, 225, 
-    138, 218, 5, 20, 1, 225, 138, 220, 28, 20, 1, 225, 138, 219, 192, 20, 1, 
-    225, 138, 220, 124, 20, 1, 225, 138, 233, 156, 20, 1, 225, 138, 234, 157, 
-    20, 1, 225, 138, 227, 210, 20, 1, 225, 138, 227, 238, 20, 1, 225, 138, 
-    228, 155, 20, 1, 225, 138, 210, 226, 20, 1, 225, 138, 219, 226, 20, 1, 
-    225, 138, 191, 20, 1, 225, 138, 228, 10, 20, 1, 225, 138, 225, 152, 20, 
-    1, 225, 138, 227, 247, 20, 1, 225, 138, 211, 192, 20, 1, 225, 138, 225, 
-    212, 20, 1, 225, 138, 222, 141, 20, 1, 225, 138, 228, 234, 20, 1, 225, 
-    138, 223, 52, 20, 1, 225, 138, 234, 166, 20, 1, 225, 138, 229, 8, 20, 1, 
-    225, 138, 229, 57, 20, 1, 225, 138, 220, 8, 20, 1, 225, 138, 224, 148, 
-    20, 1, 225, 138, 244, 38, 20, 1, 225, 138, 212, 65, 20, 1, 225, 138, 232, 
-    242, 20, 1, 225, 138, 232, 120, 20, 1, 225, 138, 234, 29, 20, 1, 225, 
-    138, 231, 115, 20, 1, 225, 138, 223, 84, 20, 1, 225, 138, 185, 20, 1, 
-    225, 138, 230, 162, 20, 1, 225, 138, 231, 123, 20, 1, 225, 138, 216, 231, 
-    20, 1, 225, 138, 233, 252, 20, 1, 225, 138, 221, 252, 20, 1, 225, 138, 
-    212, 115, 95, 1, 190, 95, 1, 252, 192, 95, 1, 8, 190, 95, 1, 225, 43, 95, 
-    1, 185, 95, 1, 230, 234, 95, 1, 254, 24, 185, 95, 1, 244, 197, 95, 1, 
-    214, 27, 95, 1, 213, 177, 95, 1, 217, 106, 95, 1, 248, 222, 95, 1, 8, 
-    215, 157, 95, 1, 8, 217, 106, 95, 1, 215, 157, 95, 1, 248, 136, 95, 1, 
-    197, 95, 1, 228, 238, 95, 1, 8, 228, 111, 95, 1, 254, 24, 197, 95, 1, 
-    228, 111, 95, 1, 228, 97, 95, 1, 233, 136, 95, 1, 232, 62, 95, 1, 232, 
-    255, 95, 1, 232, 244, 95, 1, 216, 57, 95, 1, 247, 154, 95, 1, 216, 49, 
-    95, 1, 247, 153, 95, 1, 176, 95, 1, 243, 136, 95, 1, 8, 176, 95, 1, 224, 
-    89, 95, 1, 224, 67, 95, 1, 229, 78, 95, 1, 229, 29, 95, 1, 254, 24, 229, 
-    78, 95, 1, 162, 95, 1, 211, 165, 95, 1, 242, 250, 95, 1, 242, 227, 95, 1, 
-    215, 166, 95, 1, 246, 27, 95, 1, 227, 166, 95, 1, 227, 151, 95, 1, 215, 
-    176, 95, 1, 246, 34, 95, 1, 8, 215, 176, 95, 1, 8, 246, 34, 95, 1, 223, 
-    107, 215, 176, 95, 1, 220, 103, 95, 1, 218, 224, 95, 1, 210, 82, 95, 1, 
-    210, 14, 95, 1, 215, 184, 95, 1, 246, 39, 95, 1, 8, 215, 184, 95, 1, 206, 
-    95, 1, 210, 116, 95, 1, 210, 15, 95, 1, 209, 243, 95, 1, 209, 223, 95, 1, 
-    254, 24, 209, 243, 95, 1, 209, 215, 95, 1, 209, 222, 95, 1, 212, 65, 95, 
-    1, 254, 210, 95, 1, 241, 190, 95, 1, 229, 193, 95, 5, 253, 223, 95, 5, 
-    223, 107, 213, 133, 95, 5, 223, 107, 253, 223, 95, 25, 5, 61, 95, 25, 5, 
-    255, 74, 95, 25, 5, 254, 206, 95, 25, 5, 254, 124, 95, 25, 5, 254, 116, 
-    95, 25, 5, 76, 95, 25, 5, 226, 184, 95, 25, 5, 211, 227, 95, 25, 5, 212, 
-    98, 95, 25, 5, 75, 95, 25, 5, 245, 151, 95, 25, 5, 245, 139, 95, 25, 5, 
-    226, 233, 95, 25, 5, 73, 95, 25, 5, 240, 120, 95, 25, 5, 240, 119, 95, 
-    25, 5, 240, 118, 95, 25, 5, 235, 190, 95, 25, 5, 236, 61, 95, 25, 5, 236, 
-    34, 95, 25, 5, 235, 157, 95, 25, 5, 235, 232, 95, 25, 5, 70, 95, 25, 5, 
-    214, 229, 95, 25, 5, 214, 228, 95, 25, 5, 214, 227, 95, 25, 5, 214, 118, 
-    95, 25, 5, 214, 211, 95, 25, 5, 214, 178, 95, 25, 5, 211, 117, 95, 25, 5, 
-    211, 8, 95, 25, 5, 254, 244, 95, 25, 5, 254, 240, 95, 25, 5, 245, 87, 95, 
-    25, 5, 222, 184, 245, 87, 95, 25, 5, 245, 93, 95, 25, 5, 222, 184, 245, 
-    93, 95, 25, 5, 254, 202, 95, 25, 5, 245, 196, 95, 25, 5, 253, 193, 95, 
-    25, 5, 226, 135, 95, 25, 5, 230, 26, 95, 25, 5, 229, 80, 95, 138, 222, 
-    252, 95, 138, 216, 15, 222, 252, 95, 138, 48, 95, 138, 51, 95, 1, 216, 
-    29, 95, 1, 216, 28, 95, 1, 216, 27, 95, 1, 216, 26, 95, 1, 216, 25, 95, 
-    1, 216, 24, 95, 1, 216, 23, 95, 1, 223, 107, 216, 30, 95, 1, 223, 107, 
-    216, 29, 95, 1, 223, 107, 216, 27, 95, 1, 223, 107, 216, 26, 95, 1, 223, 
-    107, 216, 25, 95, 1, 223, 107, 216, 23, 56, 1, 254, 24, 75, 141, 1, 254, 
-    24, 211, 47, 49, 28, 16, 224, 155, 49, 28, 16, 248, 159, 49, 28, 16, 225, 
-    176, 49, 28, 16, 226, 114, 245, 179, 49, 28, 16, 226, 114, 247, 202, 49, 
-    28, 16, 214, 16, 245, 179, 49, 28, 16, 214, 16, 247, 202, 49, 28, 16, 
-    234, 198, 49, 28, 16, 217, 170, 49, 28, 16, 226, 10, 49, 28, 16, 210, 
-    217, 49, 28, 16, 210, 218, 247, 202, 49, 28, 16, 233, 235, 49, 28, 16, 
-    254, 69, 245, 179, 49, 28, 16, 245, 27, 245, 179, 49, 28, 16, 217, 3, 49, 
-    28, 16, 234, 162, 49, 28, 16, 254, 59, 49, 28, 16, 254, 60, 247, 202, 49, 
-    28, 16, 217, 176, 49, 28, 16, 216, 160, 49, 28, 16, 226, 207, 254, 22, 
-    49, 28, 16, 242, 160, 254, 22, 49, 28, 16, 224, 154, 49, 28, 16, 250, 
-    150, 49, 28, 16, 214, 6, 49, 28, 16, 235, 165, 254, 22, 49, 28, 16, 234, 
-    164, 254, 22, 49, 28, 16, 234, 163, 254, 22, 49, 28, 16, 221, 214, 49, 
-    28, 16, 226, 1, 49, 28, 16, 218, 147, 254, 62, 49, 28, 16, 226, 113, 254, 
-    22, 49, 28, 16, 214, 15, 254, 22, 49, 28, 16, 254, 63, 254, 22, 49, 28, 
-    16, 254, 57, 49, 28, 16, 234, 38, 49, 28, 16, 223, 47, 49, 28, 16, 225, 
-    107, 254, 22, 49, 28, 16, 216, 84, 49, 28, 16, 254, 122, 49, 28, 16, 221, 
-    160, 49, 28, 16, 217, 179, 254, 22, 49, 28, 16, 217, 179, 231, 41, 218, 
-    145, 49, 28, 16, 226, 108, 254, 22, 49, 28, 16, 216, 191, 49, 28, 16, 
-    233, 28, 49, 28, 16, 246, 42, 49, 28, 16, 215, 228, 49, 28, 16, 216, 233, 
-    49, 28, 16, 233, 238, 49, 28, 16, 254, 69, 245, 27, 229, 96, 49, 28, 16, 
-    243, 237, 254, 22, 49, 28, 16, 236, 13, 49, 28, 16, 215, 200, 254, 22, 
-    49, 28, 16, 234, 201, 215, 199, 49, 28, 16, 225, 201, 49, 28, 16, 224, 
-    159, 49, 28, 16, 234, 12, 49, 28, 16, 250, 81, 254, 22, 49, 28, 16, 223, 
-    147, 49, 28, 16, 226, 13, 254, 22, 49, 28, 16, 226, 11, 254, 22, 49, 28, 
-    16, 240, 110, 49, 28, 16, 229, 204, 49, 28, 16, 225, 157, 49, 28, 16, 
-    234, 13, 254, 150, 49, 28, 16, 215, 200, 254, 150, 49, 28, 16, 218, 124, 
-    49, 28, 16, 242, 124, 49, 28, 16, 235, 165, 229, 96, 49, 28, 16, 226, 
-    207, 229, 96, 49, 28, 16, 226, 114, 229, 96, 49, 28, 16, 225, 156, 49, 
-    28, 16, 233, 255, 49, 28, 16, 225, 155, 49, 28, 16, 233, 237, 49, 28, 16, 
-    225, 202, 229, 96, 49, 28, 16, 234, 163, 229, 97, 254, 97, 49, 28, 16, 
-    234, 164, 229, 97, 254, 97, 49, 28, 16, 210, 215, 49, 28, 16, 254, 60, 
-    229, 96, 49, 28, 16, 254, 61, 217, 177, 229, 96, 49, 28, 16, 210, 216, 
-    49, 28, 16, 233, 236, 49, 28, 16, 245, 174, 49, 28, 16, 250, 151, 49, 28, 
-    16, 230, 199, 235, 164, 49, 28, 16, 214, 16, 229, 96, 49, 28, 16, 225, 
-    107, 229, 96, 49, 28, 16, 224, 160, 229, 96, 49, 28, 16, 226, 204, 49, 
-    28, 16, 254, 85, 49, 28, 16, 232, 59, 49, 28, 16, 226, 11, 229, 96, 49, 
-    28, 16, 226, 13, 229, 96, 49, 28, 16, 245, 61, 226, 12, 49, 28, 16, 233, 
-    154, 49, 28, 16, 254, 86, 49, 28, 16, 215, 200, 229, 96, 49, 28, 16, 245, 
-    177, 49, 28, 16, 217, 179, 229, 96, 49, 28, 16, 217, 171, 49, 28, 16, 
-    250, 81, 229, 96, 49, 28, 16, 245, 107, 49, 28, 16, 221, 161, 229, 96, 
-    49, 28, 16, 211, 151, 234, 38, 49, 28, 16, 215, 197, 49, 28, 16, 224, 
-    161, 49, 28, 16, 215, 201, 49, 28, 16, 215, 198, 49, 28, 16, 224, 158, 
-    49, 28, 16, 215, 196, 49, 28, 16, 224, 157, 49, 28, 16, 242, 159, 49, 28, 
-    16, 254, 15, 49, 28, 16, 245, 61, 254, 15, 49, 28, 16, 226, 108, 229, 96, 
-    49, 28, 16, 216, 190, 245, 70, 49, 28, 16, 216, 190, 245, 26, 49, 28, 16, 
-    216, 192, 254, 64, 49, 28, 16, 216, 185, 234, 248, 254, 56, 49, 28, 16, 
-    234, 200, 49, 28, 16, 245, 140, 49, 28, 16, 211, 11, 234, 197, 49, 28, 
-    16, 211, 11, 254, 97, 49, 28, 16, 218, 146, 49, 28, 16, 234, 39, 254, 97, 
-    49, 28, 16, 247, 203, 254, 22, 49, 28, 16, 233, 239, 254, 22, 49, 28, 16, 
-    233, 239, 254, 150, 49, 28, 16, 233, 239, 229, 96, 49, 28, 16, 254, 63, 
-    229, 96, 49, 28, 16, 254, 65, 49, 28, 16, 247, 202, 49, 28, 16, 215, 211, 
-    49, 28, 16, 216, 225, 49, 28, 16, 234, 3, 49, 28, 16, 233, 33, 245, 135, 
-    250, 72, 49, 28, 16, 233, 33, 246, 43, 250, 73, 49, 28, 16, 233, 33, 215, 
-    213, 250, 73, 49, 28, 16, 233, 33, 216, 235, 250, 73, 49, 28, 16, 233, 
-    33, 236, 8, 250, 72, 49, 28, 16, 242, 160, 229, 97, 254, 97, 49, 28, 16, 
-    242, 160, 226, 2, 254, 11, 49, 28, 16, 242, 160, 226, 2, 248, 30, 49, 28, 
-    16, 247, 226, 49, 28, 16, 247, 227, 226, 2, 254, 12, 234, 197, 49, 28, 
-    16, 247, 227, 226, 2, 254, 12, 254, 97, 49, 28, 16, 247, 227, 226, 2, 
-    248, 30, 49, 28, 16, 215, 217, 49, 28, 16, 254, 16, 49, 28, 16, 236, 15, 
-    49, 28, 16, 247, 247, 49, 28, 16, 254, 212, 225, 1, 254, 17, 49, 28, 16, 
-    254, 212, 254, 14, 49, 28, 16, 254, 212, 254, 17, 49, 28, 16, 254, 212, 
-    231, 35, 49, 28, 16, 254, 212, 231, 46, 49, 28, 16, 254, 212, 242, 161, 
-    49, 28, 16, 254, 212, 242, 158, 49, 28, 16, 254, 212, 225, 1, 242, 161, 
-    49, 28, 16, 231, 152, 224, 166, 240, 108, 49, 28, 16, 231, 152, 254, 152, 
-    224, 166, 240, 108, 49, 28, 16, 231, 152, 248, 29, 240, 108, 49, 28, 16, 
-    231, 152, 254, 152, 248, 29, 240, 108, 49, 28, 16, 231, 152, 215, 206, 
-    240, 108, 49, 28, 16, 231, 152, 215, 218, 49, 28, 16, 231, 152, 216, 229, 
-    240, 108, 49, 28, 16, 231, 152, 216, 229, 233, 36, 240, 108, 49, 28, 16, 
-    231, 152, 233, 36, 240, 108, 49, 28, 16, 231, 152, 225, 40, 240, 108, 49, 
-    28, 16, 235, 170, 216, 252, 240, 109, 49, 28, 16, 254, 61, 216, 252, 240, 
-    109, 49, 28, 16, 244, 173, 216, 226, 49, 28, 16, 244, 173, 230, 144, 49, 
-    28, 16, 244, 173, 247, 231, 49, 28, 16, 231, 152, 214, 10, 240, 108, 49, 
-    28, 16, 231, 152, 224, 165, 240, 108, 49, 28, 16, 231, 152, 225, 40, 216, 
-    229, 240, 108, 49, 28, 16, 242, 156, 230, 27, 254, 64, 49, 28, 16, 242, 
-    156, 230, 27, 247, 201, 49, 28, 16, 245, 149, 234, 248, 243, 237, 213, 
-    124, 49, 28, 16, 236, 14, 49, 28, 16, 236, 12, 49, 28, 16, 243, 237, 254, 
-    23, 248, 28, 240, 107, 49, 28, 16, 243, 237, 247, 245, 190, 49, 28, 16, 
-    243, 237, 247, 245, 229, 204, 49, 28, 16, 243, 237, 229, 199, 240, 108, 
-    49, 28, 16, 243, 237, 247, 245, 248, 4, 49, 28, 16, 243, 237, 219, 103, 
-    247, 244, 248, 4, 49, 28, 16, 243, 237, 247, 245, 234, 183, 49, 28, 16, 
-    243, 237, 247, 245, 210, 23, 49, 28, 16, 243, 237, 247, 245, 228, 235, 
-    234, 197, 49, 28, 16, 243, 237, 247, 245, 228, 235, 254, 97, 49, 28, 16, 
-    243, 237, 231, 192, 250, 74, 247, 231, 49, 28, 16, 243, 237, 231, 192, 
-    250, 74, 230, 144, 49, 28, 16, 244, 123, 219, 103, 250, 74, 214, 9, 49, 
-    28, 16, 243, 237, 219, 103, 250, 74, 217, 180, 49, 28, 16, 243, 237, 229, 
-    98, 49, 28, 16, 250, 75, 209, 249, 49, 28, 16, 250, 75, 234, 37, 49, 28, 
-    16, 250, 75, 219, 10, 49, 28, 16, 243, 237, 240, 155, 211, 10, 216, 230, 
-    49, 28, 16, 243, 237, 245, 150, 254, 87, 49, 28, 16, 211, 10, 215, 207, 
-    49, 28, 16, 247, 239, 215, 207, 49, 28, 16, 247, 239, 216, 230, 49, 28, 
-    16, 247, 239, 254, 66, 246, 43, 247, 140, 49, 28, 16, 247, 239, 230, 142, 
-    216, 234, 247, 140, 49, 28, 16, 247, 239, 247, 223, 245, 37, 247, 140, 
-    49, 28, 16, 247, 239, 215, 215, 226, 212, 247, 140, 49, 28, 16, 211, 10, 
-    254, 66, 246, 43, 247, 140, 49, 28, 16, 211, 10, 230, 142, 216, 234, 247, 
-    140, 49, 28, 16, 211, 10, 247, 223, 245, 37, 247, 140, 49, 28, 16, 211, 
-    10, 215, 215, 226, 212, 247, 140, 49, 28, 16, 243, 50, 247, 238, 49, 28, 
-    16, 243, 50, 211, 9, 49, 28, 16, 247, 246, 254, 66, 230, 200, 49, 28, 16, 
-    247, 246, 254, 66, 231, 74, 49, 28, 16, 247, 246, 247, 202, 49, 28, 16, 
-    247, 246, 216, 183, 49, 28, 16, 219, 164, 216, 183, 49, 28, 16, 219, 164, 
-    216, 184, 247, 187, 49, 28, 16, 219, 164, 216, 184, 215, 208, 49, 28, 16, 
-    219, 164, 216, 184, 216, 223, 49, 28, 16, 219, 164, 253, 245, 49, 28, 16, 
-    219, 164, 253, 246, 247, 187, 49, 28, 16, 219, 164, 253, 246, 215, 208, 
-    49, 28, 16, 219, 164, 253, 246, 216, 223, 49, 28, 16, 247, 224, 243, 31, 
-    49, 28, 16, 247, 230, 226, 135, 49, 28, 16, 218, 138, 49, 28, 16, 254, 8, 
-    190, 49, 28, 16, 254, 8, 213, 124, 49, 28, 16, 254, 8, 243, 136, 49, 28, 
-    16, 254, 8, 248, 4, 49, 28, 16, 254, 8, 234, 183, 49, 28, 16, 254, 8, 
-    210, 23, 49, 28, 16, 254, 8, 228, 234, 49, 28, 16, 234, 163, 229, 97, 
-    231, 45, 49, 28, 16, 234, 164, 229, 97, 231, 45, 49, 28, 16, 234, 163, 
-    229, 97, 234, 197, 49, 28, 16, 234, 164, 229, 97, 234, 197, 49, 28, 16, 
-    234, 39, 234, 197, 49, 28, 16, 242, 160, 229, 97, 234, 197, 28, 16, 219, 
-    156, 252, 136, 28, 16, 52, 252, 136, 28, 16, 40, 252, 136, 28, 16, 223, 
-    51, 40, 252, 136, 28, 16, 248, 156, 252, 136, 28, 16, 219, 252, 252, 136, 
-    28, 16, 43, 223, 78, 50, 28, 16, 44, 223, 78, 50, 28, 16, 223, 78, 247, 
-    119, 28, 16, 248, 197, 221, 164, 28, 16, 248, 223, 250, 250, 28, 16, 221, 
-    164, 28, 16, 249, 235, 28, 16, 223, 76, 244, 112, 28, 16, 223, 76, 244, 
-    111, 28, 16, 223, 76, 244, 110, 28, 16, 244, 132, 28, 16, 244, 133, 51, 
-    28, 16, 251, 149, 78, 28, 16, 251, 25, 28, 16, 251, 160, 28, 16, 127, 28, 
-    16, 226, 194, 218, 164, 28, 16, 215, 57, 218, 164, 28, 16, 216, 143, 218, 
-    164, 28, 16, 244, 11, 218, 164, 28, 16, 244, 81, 218, 164, 28, 16, 219, 
-    125, 218, 164, 28, 16, 219, 123, 243, 251, 28, 16, 244, 9, 243, 251, 28, 
-    16, 243, 204, 250, 15, 28, 16, 243, 204, 250, 16, 226, 137, 254, 143, 28, 
-    16, 243, 204, 250, 16, 226, 137, 252, 123, 28, 16, 251, 68, 250, 15, 28, 
-    16, 245, 8, 250, 15, 28, 16, 245, 8, 250, 16, 226, 137, 254, 143, 28, 16, 
-    245, 8, 250, 16, 226, 137, 252, 123, 28, 16, 246, 84, 250, 14, 28, 16, 
-    246, 84, 250, 13, 28, 16, 230, 86, 231, 91, 223, 62, 28, 16, 52, 220, 76, 
-    28, 16, 52, 244, 66, 28, 16, 244, 67, 214, 163, 28, 16, 244, 67, 246, 
-    107, 28, 16, 229, 189, 214, 163, 28, 16, 229, 189, 246, 107, 28, 16, 220, 
-    77, 214, 163, 28, 16, 220, 77, 246, 107, 28, 16, 224, 23, 138, 220, 76, 
-    28, 16, 224, 23, 138, 244, 66, 28, 16, 249, 217, 216, 88, 28, 16, 249, 
-    86, 216, 88, 28, 16, 226, 137, 254, 143, 28, 16, 226, 137, 252, 123, 28, 
-    16, 224, 5, 254, 143, 28, 16, 224, 5, 252, 123, 28, 16, 230, 89, 223, 62, 
-    28, 16, 211, 251, 223, 62, 28, 16, 163, 223, 62, 28, 16, 224, 23, 223, 
-    62, 28, 16, 245, 190, 223, 62, 28, 16, 219, 119, 223, 62, 28, 16, 216, 
-    161, 223, 62, 28, 16, 219, 111, 223, 62, 28, 16, 123, 240, 212, 215, 71, 
-    223, 62, 28, 16, 211, 179, 228, 44, 28, 16, 96, 228, 44, 28, 16, 250, 37, 
-    211, 179, 228, 44, 28, 16, 42, 228, 45, 211, 253, 28, 16, 42, 228, 45, 
-    251, 222, 28, 16, 215, 227, 228, 45, 120, 211, 253, 28, 16, 215, 227, 
-    228, 45, 120, 251, 222, 28, 16, 215, 227, 228, 45, 43, 211, 253, 28, 16, 
-    215, 227, 228, 45, 43, 251, 222, 28, 16, 215, 227, 228, 45, 44, 211, 253, 
-    28, 16, 215, 227, 228, 45, 44, 251, 222, 28, 16, 215, 227, 228, 45, 124, 
-    211, 253, 28, 16, 215, 227, 228, 45, 124, 251, 222, 28, 16, 215, 227, 
-    228, 45, 120, 44, 211, 253, 28, 16, 215, 227, 228, 45, 120, 44, 251, 222, 
-    28, 16, 230, 130, 228, 45, 211, 253, 28, 16, 230, 130, 228, 45, 251, 222, 
-    28, 16, 215, 224, 228, 45, 124, 211, 253, 28, 16, 215, 224, 228, 45, 124, 
-    251, 222, 28, 16, 226, 5, 228, 44, 28, 16, 213, 132, 228, 44, 28, 16, 
-    228, 45, 251, 222, 28, 16, 227, 204, 228, 44, 28, 16, 249, 242, 228, 45, 
-    211, 253, 28, 16, 249, 242, 228, 45, 251, 222, 28, 16, 251, 147, 28, 16, 
-    211, 251, 228, 48, 28, 16, 163, 228, 48, 28, 16, 224, 23, 228, 48, 28, 
-    16, 245, 190, 228, 48, 28, 16, 219, 119, 228, 48, 28, 16, 216, 161, 228, 
-    48, 28, 16, 219, 111, 228, 48, 28, 16, 123, 240, 212, 215, 71, 228, 48, 
-    28, 16, 38, 218, 140, 28, 16, 38, 218, 241, 218, 140, 28, 16, 38, 215, 
-    235, 28, 16, 38, 215, 234, 28, 16, 38, 215, 233, 28, 16, 244, 102, 215, 
-    235, 28, 16, 244, 102, 215, 234, 28, 16, 244, 102, 215, 233, 28, 16, 38, 
-    253, 190, 247, 121, 28, 16, 38, 244, 73, 28, 16, 38, 244, 72, 28, 16, 38, 
-    244, 71, 28, 16, 38, 244, 70, 28, 16, 38, 244, 69, 28, 16, 252, 59, 252, 
-    75, 28, 16, 245, 144, 252, 75, 28, 16, 252, 59, 216, 112, 28, 16, 245, 
-    144, 216, 112, 28, 16, 252, 59, 219, 81, 28, 16, 245, 144, 219, 81, 28, 
-    16, 252, 59, 225, 116, 28, 16, 245, 144, 225, 116, 28, 16, 38, 255, 15, 
-    28, 16, 38, 218, 166, 28, 16, 38, 216, 239, 28, 16, 38, 218, 167, 28, 16, 
-    38, 231, 163, 28, 16, 38, 231, 162, 28, 16, 38, 255, 14, 28, 16, 38, 232, 
-    113, 28, 16, 253, 255, 214, 163, 28, 16, 253, 255, 246, 107, 28, 16, 38, 
-    247, 136, 28, 16, 38, 222, 232, 28, 16, 38, 244, 59, 28, 16, 38, 219, 77, 
-    28, 16, 38, 252, 39, 28, 16, 38, 52, 216, 20, 28, 16, 38, 215, 212, 216, 
-    20, 28, 16, 222, 236, 28, 16, 218, 76, 28, 16, 210, 159, 28, 16, 225, 
-    108, 28, 16, 231, 26, 28, 16, 244, 18, 28, 16, 249, 139, 28, 16, 248, 79, 
-    28, 16, 242, 151, 228, 49, 219, 96, 28, 16, 242, 151, 228, 49, 228, 76, 
-    219, 96, 28, 16, 216, 1, 28, 16, 215, 95, 28, 16, 235, 194, 215, 95, 28, 
-    16, 215, 96, 219, 96, 28, 16, 215, 96, 214, 163, 28, 16, 226, 149, 218, 
-    103, 28, 16, 226, 149, 218, 100, 28, 16, 226, 149, 218, 99, 28, 16, 226, 
-    149, 218, 98, 28, 16, 226, 149, 218, 97, 28, 16, 226, 149, 218, 96, 28, 
-    16, 226, 149, 218, 95, 28, 16, 226, 149, 218, 94, 28, 16, 226, 149, 218, 
-    93, 28, 16, 226, 149, 218, 102, 28, 16, 226, 149, 218, 101, 28, 16, 241, 
-    246, 28, 16, 229, 106, 28, 16, 245, 144, 64, 218, 134, 28, 16, 248, 72, 
-    219, 96, 28, 16, 38, 124, 251, 170, 28, 16, 38, 120, 251, 170, 28, 16, 
-    38, 242, 1, 28, 16, 38, 219, 68, 225, 44, 28, 16, 225, 217, 78, 28, 16, 
-    225, 217, 120, 78, 28, 16, 163, 225, 217, 78, 28, 16, 242, 183, 214, 163, 
-    28, 16, 242, 183, 246, 107, 28, 16, 2, 244, 101, 28, 16, 248, 181, 28, 
-    16, 248, 182, 254, 155, 28, 16, 231, 134, 28, 16, 232, 130, 28, 16, 251, 
-    144, 28, 16, 220, 155, 211, 253, 28, 16, 220, 155, 251, 222, 28, 16, 230, 
-    185, 28, 16, 230, 186, 251, 222, 28, 16, 220, 149, 211, 253, 28, 16, 220, 
-    149, 251, 222, 28, 16, 243, 221, 211, 253, 28, 16, 243, 221, 251, 222, 
-    28, 16, 232, 131, 225, 181, 223, 62, 28, 16, 232, 131, 236, 5, 223, 62, 
-    28, 16, 251, 145, 223, 62, 28, 16, 220, 155, 223, 62, 28, 16, 230, 186, 
-    223, 62, 28, 16, 220, 149, 223, 62, 28, 16, 216, 250, 225, 179, 249, 108, 
-    224, 175, 225, 180, 28, 16, 216, 250, 225, 179, 249, 108, 224, 175, 236, 
-    4, 28, 16, 216, 250, 225, 179, 249, 108, 224, 175, 225, 181, 247, 212, 
-    28, 16, 216, 250, 236, 3, 249, 108, 224, 175, 225, 180, 28, 16, 216, 250, 
-    236, 3, 249, 108, 224, 175, 236, 4, 28, 16, 216, 250, 236, 3, 249, 108, 
-    224, 175, 236, 5, 247, 212, 28, 16, 216, 250, 236, 3, 249, 108, 224, 175, 
-    236, 5, 247, 211, 28, 16, 216, 250, 236, 3, 249, 108, 224, 175, 236, 5, 
-    247, 210, 28, 16, 249, 134, 28, 16, 242, 127, 251, 68, 250, 15, 28, 16, 
-    242, 127, 245, 8, 250, 15, 28, 16, 42, 253, 159, 28, 16, 213, 151, 28, 
-    16, 225, 15, 28, 16, 250, 6, 28, 16, 221, 204, 28, 16, 250, 10, 28, 16, 
-    216, 8, 28, 16, 224, 243, 28, 16, 224, 244, 244, 61, 28, 16, 221, 205, 
-    244, 61, 28, 16, 216, 9, 223, 59, 28, 16, 225, 164, 218, 67, 26, 213, 
-    137, 188, 217, 230, 26, 213, 137, 188, 217, 219, 26, 213, 137, 188, 217, 
-    209, 26, 213, 137, 188, 217, 202, 26, 213, 137, 188, 217, 194, 26, 213, 
-    137, 188, 217, 188, 26, 213, 137, 188, 217, 187, 26, 213, 137, 188, 217, 
-    186, 26, 213, 137, 188, 217, 185, 26, 213, 137, 188, 217, 229, 26, 213, 
-    137, 188, 217, 228, 26, 213, 137, 188, 217, 227, 26, 213, 137, 188, 217, 
-    226, 26, 213, 137, 188, 217, 225, 26, 213, 137, 188, 217, 224, 26, 213, 
-    137, 188, 217, 223, 26, 213, 137, 188, 217, 222, 26, 213, 137, 188, 217, 
-    221, 26, 213, 137, 188, 217, 220, 26, 213, 137, 188, 217, 218, 26, 213, 
-    137, 188, 217, 217, 26, 213, 137, 188, 217, 216, 26, 213, 137, 188, 217, 
-    215, 26, 213, 137, 188, 217, 214, 26, 213, 137, 188, 217, 193, 26, 213, 
-    137, 188, 217, 192, 26, 213, 137, 188, 217, 191, 26, 213, 137, 188, 217, 
-    190, 26, 213, 137, 188, 217, 189, 26, 235, 215, 188, 217, 230, 26, 235, 
-    215, 188, 217, 219, 26, 235, 215, 188, 217, 202, 26, 235, 215, 188, 217, 
-    194, 26, 235, 215, 188, 217, 187, 26, 235, 215, 188, 217, 186, 26, 235, 
-    215, 188, 217, 228, 26, 235, 215, 188, 217, 227, 26, 235, 215, 188, 217, 
-    226, 26, 235, 215, 188, 217, 225, 26, 235, 215, 188, 217, 222, 26, 235, 
-    215, 188, 217, 221, 26, 235, 215, 188, 217, 220, 26, 235, 215, 188, 217, 
-    215, 26, 235, 215, 188, 217, 214, 26, 235, 215, 188, 217, 213, 26, 235, 
-    215, 188, 217, 212, 26, 235, 215, 188, 217, 211, 26, 235, 215, 188, 217, 
-    210, 26, 235, 215, 188, 217, 208, 26, 235, 215, 188, 217, 207, 26, 235, 
-    215, 188, 217, 206, 26, 235, 215, 188, 217, 205, 26, 235, 215, 188, 217, 
-    204, 26, 235, 215, 188, 217, 203, 26, 235, 215, 188, 217, 201, 26, 235, 
-    215, 188, 217, 200, 26, 235, 215, 188, 217, 199, 26, 235, 215, 188, 217, 
-    198, 26, 235, 215, 188, 217, 197, 26, 235, 215, 188, 217, 196, 26, 235, 
-    215, 188, 217, 195, 26, 235, 215, 188, 217, 193, 26, 235, 215, 188, 217, 
-    192, 26, 235, 215, 188, 217, 191, 26, 235, 215, 188, 217, 190, 26, 235, 
-    215, 188, 217, 189, 38, 26, 28, 215, 209, 38, 26, 28, 216, 224, 38, 26, 
-    28, 225, 189, 26, 28, 233, 32, 230, 143, 31, 245, 224, 247, 225, 31, 241, 
-    223, 245, 224, 247, 225, 31, 240, 215, 245, 224, 247, 225, 31, 245, 223, 
-    241, 224, 247, 225, 31, 245, 223, 240, 214, 247, 225, 31, 245, 224, 180, 
-    31, 250, 175, 180, 31, 243, 230, 250, 36, 180, 31, 230, 178, 180, 31, 
-    252, 131, 180, 31, 234, 180, 219, 80, 180, 31, 249, 180, 180, 31, 253, 
-    234, 180, 31, 226, 164, 180, 31, 251, 154, 226, 131, 180, 31, 248, 74, 
-    177, 247, 180, 180, 31, 247, 177, 180, 31, 210, 222, 180, 31, 235, 248, 
-    180, 31, 225, 198, 180, 31, 223, 128, 180, 31, 249, 190, 180, 31, 241, 
-    61, 252, 185, 180, 31, 212, 59, 180, 31, 244, 40, 180, 31, 254, 247, 180, 
-    31, 223, 90, 180, 31, 223, 66, 180, 31, 245, 222, 180, 31, 235, 54, 180, 
-    31, 249, 185, 180, 31, 245, 143, 180, 31, 246, 53, 180, 31, 250, 146, 
-    180, 31, 248, 83, 180, 31, 23, 223, 65, 180, 31, 226, 82, 180, 31, 233, 
-    35, 180, 31, 249, 255, 180, 31, 234, 78, 180, 31, 243, 87, 180, 31, 218, 
-    113, 180, 31, 224, 131, 180, 31, 243, 229, 180, 31, 223, 67, 180, 31, 
-    233, 72, 177, 230, 158, 180, 31, 223, 63, 180, 31, 242, 169, 216, 43, 
-    231, 77, 180, 31, 245, 145, 180, 31, 218, 125, 180, 31, 242, 129, 180, 
-    31, 245, 137, 180, 31, 225, 236, 180, 31, 222, 226, 180, 31, 244, 60, 
-    180, 31, 214, 8, 177, 212, 44, 180, 31, 249, 194, 180, 31, 231, 90, 180, 
-    31, 245, 62, 180, 31, 214, 172, 180, 31, 247, 213, 180, 31, 250, 1, 230, 
-    111, 180, 31, 242, 107, 180, 31, 243, 88, 236, 0, 180, 31, 231, 142, 180, 
-    31, 255, 11, 180, 31, 245, 158, 180, 31, 246, 110, 180, 31, 212, 42, 180, 
-    31, 219, 151, 180, 31, 235, 223, 180, 31, 248, 43, 180, 31, 248, 161, 
-    180, 31, 247, 209, 180, 31, 245, 30, 180, 31, 220, 116, 180, 31, 218, 
-    129, 180, 31, 242, 3, 180, 31, 249, 213, 180, 31, 249, 252, 180, 31, 244, 
-    178, 180, 31, 254, 213, 180, 31, 249, 212, 180, 31, 226, 198, 216, 197, 
-    213, 242, 180, 31, 247, 233, 180, 31, 233, 125, 180, 31, 244, 14, 249, 
-    150, 222, 203, 214, 174, 21, 110, 249, 150, 222, 203, 214, 174, 21, 105, 
-    249, 150, 222, 203, 214, 174, 21, 158, 249, 150, 222, 203, 214, 174, 21, 
-    161, 249, 150, 222, 203, 214, 174, 21, 189, 249, 150, 222, 203, 214, 174, 
-    21, 194, 249, 150, 222, 203, 214, 174, 21, 198, 249, 150, 222, 203, 214, 
-    174, 21, 195, 249, 150, 222, 203, 214, 174, 21, 200, 249, 150, 222, 203, 
-    216, 244, 21, 110, 249, 150, 222, 203, 216, 244, 21, 105, 249, 150, 222, 
-    203, 216, 244, 21, 158, 249, 150, 222, 203, 216, 244, 21, 161, 249, 150, 
-    222, 203, 216, 244, 21, 189, 249, 150, 222, 203, 216, 244, 21, 194, 249, 
-    150, 222, 203, 216, 244, 21, 198, 249, 150, 222, 203, 216, 244, 21, 195, 
-    249, 150, 222, 203, 216, 244, 21, 200, 11, 23, 6, 61, 11, 23, 6, 253, 
-    159, 11, 23, 6, 251, 67, 11, 23, 6, 249, 61, 11, 23, 6, 75, 11, 23, 6, 
-    245, 7, 11, 23, 6, 243, 203, 11, 23, 6, 242, 61, 11, 23, 6, 73, 11, 23, 
-    6, 235, 145, 11, 23, 6, 235, 24, 11, 23, 6, 156, 11, 23, 6, 193, 11, 23, 
-    6, 230, 26, 11, 23, 6, 76, 11, 23, 6, 226, 106, 11, 23, 6, 224, 97, 11, 
-    23, 6, 153, 11, 23, 6, 222, 92, 11, 23, 6, 217, 153, 11, 23, 6, 70, 11, 
+    244, 205, 12, 13, 243, 208, 12, 13, 243, 207, 12, 13, 243, 206, 12, 13, 
+    243, 205, 12, 13, 243, 204, 12, 13, 243, 203, 12, 13, 243, 202, 12, 13, 
+    243, 201, 12, 13, 243, 200, 12, 13, 243, 199, 12, 13, 243, 198, 12, 13, 
+    243, 197, 12, 13, 243, 196, 12, 13, 243, 195, 12, 13, 243, 194, 12, 13, 
+    243, 193, 12, 13, 243, 192, 12, 13, 243, 191, 12, 13, 243, 190, 12, 13, 
+    243, 189, 12, 13, 243, 188, 12, 13, 243, 187, 12, 13, 243, 186, 12, 13, 
+    243, 185, 12, 13, 243, 184, 12, 13, 243, 183, 12, 13, 243, 182, 12, 13, 
+    243, 181, 12, 13, 243, 180, 12, 13, 243, 179, 12, 13, 243, 178, 12, 13, 
+    243, 177, 12, 13, 243, 176, 12, 13, 243, 175, 12, 13, 243, 174, 12, 13, 
+    243, 173, 12, 13, 243, 172, 12, 13, 243, 171, 12, 13, 243, 170, 12, 13, 
+    243, 169, 12, 13, 243, 168, 12, 13, 243, 167, 12, 13, 243, 166, 12, 13, 
+    243, 165, 12, 13, 243, 164, 12, 13, 243, 163, 12, 13, 243, 162, 12, 13, 
+    243, 161, 12, 13, 243, 160, 12, 13, 243, 159, 12, 13, 243, 158, 12, 13, 
+    243, 157, 12, 13, 243, 156, 12, 13, 243, 155, 12, 13, 243, 154, 12, 13, 
+    243, 153, 12, 13, 243, 152, 12, 13, 243, 151, 12, 13, 243, 150, 12, 13, 
+    243, 149, 12, 13, 243, 148, 12, 13, 243, 147, 12, 13, 243, 146, 12, 13, 
+    243, 145, 12, 13, 242, 65, 12, 13, 242, 64, 12, 13, 242, 63, 12, 13, 242, 
+    62, 12, 13, 242, 61, 12, 13, 242, 60, 12, 13, 242, 59, 12, 13, 242, 58, 
+    12, 13, 242, 57, 12, 13, 240, 145, 12, 13, 240, 144, 12, 13, 240, 143, 
+    12, 13, 240, 142, 12, 13, 240, 141, 12, 13, 240, 140, 12, 13, 240, 139, 
+    12, 13, 240, 138, 12, 13, 240, 137, 12, 13, 240, 136, 12, 13, 240, 135, 
+    12, 13, 240, 134, 12, 13, 240, 133, 12, 13, 240, 132, 12, 13, 240, 131, 
+    12, 13, 240, 130, 12, 13, 240, 129, 12, 13, 240, 128, 12, 13, 240, 127, 
+    12, 13, 235, 28, 12, 13, 235, 27, 12, 13, 235, 26, 12, 13, 235, 25, 12, 
+    13, 235, 24, 12, 13, 235, 23, 12, 13, 235, 22, 12, 13, 235, 21, 12, 13, 
+    233, 152, 12, 13, 233, 151, 12, 13, 233, 150, 12, 13, 233, 149, 12, 13, 
+    233, 148, 12, 13, 233, 147, 12, 13, 233, 146, 12, 13, 233, 145, 12, 13, 
+    233, 144, 12, 13, 233, 143, 12, 13, 232, 54, 12, 13, 232, 53, 12, 13, 
+    232, 52, 12, 13, 232, 51, 12, 13, 232, 50, 12, 13, 232, 49, 12, 13, 232, 
+    48, 12, 13, 232, 47, 12, 13, 232, 46, 12, 13, 232, 45, 12, 13, 232, 44, 
+    12, 13, 232, 43, 12, 13, 232, 42, 12, 13, 232, 41, 12, 13, 232, 40, 12, 
+    13, 232, 39, 12, 13, 232, 38, 12, 13, 232, 37, 12, 13, 232, 36, 12, 13, 
+    232, 35, 12, 13, 232, 34, 12, 13, 232, 33, 12, 13, 232, 32, 12, 13, 232, 
+    31, 12, 13, 232, 30, 12, 13, 232, 29, 12, 13, 232, 28, 12, 13, 232, 27, 
+    12, 13, 232, 26, 12, 13, 232, 25, 12, 13, 232, 24, 12, 13, 232, 23, 12, 
+    13, 232, 22, 12, 13, 232, 21, 12, 13, 232, 20, 12, 13, 232, 19, 12, 13, 
+    232, 18, 12, 13, 232, 17, 12, 13, 232, 16, 12, 13, 232, 15, 12, 13, 232, 
+    14, 12, 13, 232, 13, 12, 13, 232, 12, 12, 13, 232, 11, 12, 13, 232, 10, 
+    12, 13, 232, 9, 12, 13, 232, 8, 12, 13, 232, 7, 12, 13, 232, 6, 12, 13, 
+    232, 5, 12, 13, 232, 4, 12, 13, 232, 3, 12, 13, 232, 2, 12, 13, 232, 1, 
+    12, 13, 232, 0, 12, 13, 231, 255, 12, 13, 231, 254, 12, 13, 231, 253, 12, 
+    13, 231, 252, 12, 13, 231, 251, 12, 13, 231, 250, 12, 13, 231, 249, 12, 
+    13, 231, 248, 12, 13, 231, 247, 12, 13, 231, 246, 12, 13, 231, 245, 12, 
+    13, 230, 27, 12, 13, 230, 26, 12, 13, 230, 25, 12, 13, 230, 24, 12, 13, 
+    230, 23, 12, 13, 230, 22, 12, 13, 230, 21, 12, 13, 230, 20, 12, 13, 230, 
+    19, 12, 13, 230, 18, 12, 13, 230, 17, 12, 13, 230, 16, 12, 13, 230, 15, 
+    12, 13, 230, 14, 12, 13, 230, 13, 12, 13, 230, 12, 12, 13, 230, 11, 12, 
+    13, 230, 10, 12, 13, 230, 9, 12, 13, 230, 8, 12, 13, 230, 7, 12, 13, 230, 
+    6, 12, 13, 230, 5, 12, 13, 230, 4, 12, 13, 230, 3, 12, 13, 230, 2, 12, 
+    13, 230, 1, 12, 13, 230, 0, 12, 13, 229, 255, 12, 13, 229, 254, 12, 13, 
+    229, 253, 12, 13, 229, 252, 12, 13, 229, 251, 12, 13, 229, 250, 12, 13, 
+    229, 249, 12, 13, 229, 248, 12, 13, 229, 247, 12, 13, 229, 246, 12, 13, 
+    229, 245, 12, 13, 229, 244, 12, 13, 229, 243, 12, 13, 229, 242, 12, 13, 
+    229, 241, 12, 13, 229, 240, 12, 13, 229, 239, 12, 13, 229, 238, 12, 13, 
+    229, 237, 12, 13, 229, 236, 12, 13, 229, 235, 12, 13, 228, 139, 12, 13, 
+    228, 138, 12, 13, 228, 137, 12, 13, 228, 136, 12, 13, 228, 135, 12, 13, 
+    228, 134, 12, 13, 228, 133, 12, 13, 228, 132, 12, 13, 228, 131, 12, 13, 
+    228, 130, 12, 13, 228, 129, 12, 13, 228, 128, 12, 13, 228, 127, 12, 13, 
+    228, 126, 12, 13, 228, 125, 12, 13, 228, 124, 12, 13, 228, 123, 12, 13, 
+    228, 122, 12, 13, 228, 121, 12, 13, 228, 120, 12, 13, 228, 119, 12, 13, 
+    228, 118, 12, 13, 227, 241, 12, 13, 227, 240, 12, 13, 227, 239, 12, 13, 
+    227, 238, 12, 13, 227, 237, 12, 13, 227, 236, 12, 13, 227, 235, 12, 13, 
+    227, 234, 12, 13, 227, 233, 12, 13, 227, 232, 12, 13, 227, 231, 12, 13, 
+    227, 230, 12, 13, 227, 229, 12, 13, 227, 228, 12, 13, 227, 227, 12, 13, 
+    227, 226, 12, 13, 227, 225, 12, 13, 227, 224, 12, 13, 227, 223, 12, 13, 
+    227, 222, 12, 13, 227, 221, 12, 13, 227, 220, 12, 13, 227, 219, 12, 13, 
+    227, 218, 12, 13, 227, 217, 12, 13, 227, 216, 12, 13, 227, 80, 12, 13, 
+    227, 79, 12, 13, 227, 78, 12, 13, 227, 77, 12, 13, 227, 76, 12, 13, 227, 
+    75, 12, 13, 227, 74, 12, 13, 227, 73, 12, 13, 227, 72, 12, 13, 227, 71, 
+    12, 13, 227, 70, 12, 13, 227, 69, 12, 13, 227, 68, 12, 13, 227, 67, 12, 
+    13, 227, 66, 12, 13, 227, 65, 12, 13, 227, 64, 12, 13, 227, 63, 12, 13, 
+    227, 62, 12, 13, 227, 61, 12, 13, 227, 60, 12, 13, 227, 59, 12, 13, 227, 
+    58, 12, 13, 227, 57, 12, 13, 227, 56, 12, 13, 227, 55, 12, 13, 227, 54, 
+    12, 13, 227, 53, 12, 13, 227, 52, 12, 13, 227, 51, 12, 13, 227, 50, 12, 
+    13, 227, 49, 12, 13, 227, 48, 12, 13, 227, 47, 12, 13, 227, 46, 12, 13, 
+    227, 45, 12, 13, 227, 44, 12, 13, 227, 43, 12, 13, 227, 42, 12, 13, 227, 
+    41, 12, 13, 227, 40, 12, 13, 227, 39, 12, 13, 227, 38, 12, 13, 227, 37, 
+    12, 13, 227, 36, 12, 13, 227, 35, 12, 13, 227, 34, 12, 13, 227, 33, 12, 
+    13, 227, 32, 12, 13, 227, 31, 12, 13, 227, 30, 12, 13, 227, 29, 12, 13, 
+    227, 28, 12, 13, 227, 27, 12, 13, 227, 26, 12, 13, 227, 25, 12, 13, 227, 
+    24, 12, 13, 227, 23, 12, 13, 227, 22, 12, 13, 227, 21, 12, 13, 227, 20, 
+    12, 13, 227, 19, 12, 13, 227, 18, 12, 13, 227, 17, 12, 13, 227, 16, 12, 
+    13, 227, 15, 12, 13, 227, 14, 12, 13, 227, 13, 12, 13, 227, 12, 12, 13, 
+    227, 11, 12, 13, 227, 10, 12, 13, 227, 9, 12, 13, 227, 8, 12, 13, 227, 7, 
+    12, 13, 227, 6, 12, 13, 226, 108, 12, 13, 226, 107, 12, 13, 226, 106, 12, 
+    13, 226, 105, 12, 13, 226, 104, 12, 13, 226, 103, 12, 13, 226, 102, 12, 
+    13, 226, 101, 12, 13, 226, 100, 12, 13, 226, 99, 12, 13, 226, 98, 12, 13, 
+    226, 97, 12, 13, 226, 96, 12, 13, 224, 98, 12, 13, 224, 97, 12, 13, 224, 
+    96, 12, 13, 224, 95, 12, 13, 224, 94, 12, 13, 224, 93, 12, 13, 224, 92, 
+    12, 13, 223, 225, 12, 13, 223, 224, 12, 13, 223, 223, 12, 13, 223, 222, 
+    12, 13, 223, 221, 12, 13, 223, 220, 12, 13, 223, 219, 12, 13, 223, 218, 
+    12, 13, 223, 217, 12, 13, 223, 216, 12, 13, 223, 215, 12, 13, 223, 214, 
+    12, 13, 223, 213, 12, 13, 223, 212, 12, 13, 223, 211, 12, 13, 223, 210, 
+    12, 13, 223, 209, 12, 13, 223, 208, 12, 13, 223, 207, 12, 13, 223, 206, 
+    12, 13, 223, 205, 12, 13, 223, 204, 12, 13, 223, 203, 12, 13, 223, 202, 
+    12, 13, 223, 201, 12, 13, 223, 200, 12, 13, 223, 199, 12, 13, 223, 198, 
+    12, 13, 223, 197, 12, 13, 223, 196, 12, 13, 223, 195, 12, 13, 223, 194, 
+    12, 13, 223, 193, 12, 13, 223, 192, 12, 13, 222, 90, 12, 13, 222, 89, 12, 
+    13, 222, 88, 12, 13, 222, 87, 12, 13, 222, 86, 12, 13, 222, 85, 12, 13, 
+    222, 84, 12, 13, 222, 83, 12, 13, 222, 82, 12, 13, 222, 81, 12, 13, 222, 
+    80, 12, 13, 222, 79, 12, 13, 222, 78, 12, 13, 222, 77, 12, 13, 222, 76, 
+    12, 13, 222, 75, 12, 13, 222, 74, 12, 13, 222, 73, 12, 13, 222, 72, 12, 
+    13, 222, 71, 12, 13, 222, 70, 12, 13, 222, 69, 12, 13, 222, 68, 12, 13, 
+    222, 67, 12, 13, 222, 66, 12, 13, 222, 65, 12, 13, 222, 64, 12, 13, 222, 
+    63, 12, 13, 222, 62, 12, 13, 222, 61, 12, 13, 222, 60, 12, 13, 222, 59, 
+    12, 13, 222, 58, 12, 13, 222, 57, 12, 13, 222, 56, 12, 13, 222, 55, 12, 
+    13, 222, 54, 12, 13, 222, 53, 12, 13, 222, 52, 12, 13, 222, 51, 12, 13, 
+    222, 50, 12, 13, 222, 49, 12, 13, 222, 48, 12, 13, 222, 47, 12, 13, 222, 
+    46, 12, 13, 222, 45, 12, 13, 222, 44, 12, 13, 222, 43, 12, 13, 222, 42, 
+    12, 13, 222, 41, 12, 13, 222, 40, 12, 13, 222, 39, 12, 13, 222, 38, 12, 
+    13, 222, 37, 12, 13, 217, 151, 12, 13, 217, 150, 12, 13, 217, 149, 12, 
+    13, 217, 148, 12, 13, 217, 147, 12, 13, 217, 146, 12, 13, 217, 145, 12, 
+    13, 217, 144, 12, 13, 217, 143, 12, 13, 217, 142, 12, 13, 217, 141, 12, 
+    13, 217, 140, 12, 13, 217, 139, 12, 13, 217, 138, 12, 13, 217, 137, 12, 
+    13, 217, 136, 12, 13, 217, 135, 12, 13, 217, 134, 12, 13, 217, 133, 12, 
+    13, 217, 132, 12, 13, 217, 131, 12, 13, 217, 130, 12, 13, 217, 129, 12, 
+    13, 217, 128, 12, 13, 217, 127, 12, 13, 217, 126, 12, 13, 217, 125, 12, 
+    13, 217, 124, 12, 13, 217, 123, 12, 13, 217, 122, 12, 13, 217, 121, 12, 
+    13, 217, 120, 12, 13, 217, 119, 12, 13, 217, 118, 12, 13, 217, 117, 12, 
+    13, 217, 116, 12, 13, 217, 115, 12, 13, 217, 114, 12, 13, 217, 113, 12, 
+    13, 217, 112, 12, 13, 217, 111, 12, 13, 217, 110, 12, 13, 217, 109, 12, 
+    13, 217, 108, 12, 13, 215, 22, 12, 13, 215, 21, 12, 13, 215, 20, 12, 13, 
+    215, 19, 12, 13, 215, 18, 12, 13, 215, 17, 12, 13, 215, 16, 12, 13, 215, 
+    15, 12, 13, 215, 14, 12, 13, 215, 13, 12, 13, 215, 12, 12, 13, 215, 11, 
+    12, 13, 215, 10, 12, 13, 215, 9, 12, 13, 215, 8, 12, 13, 215, 7, 12, 13, 
+    215, 6, 12, 13, 215, 5, 12, 13, 215, 4, 12, 13, 215, 3, 12, 13, 215, 2, 
+    12, 13, 215, 1, 12, 13, 215, 0, 12, 13, 214, 255, 12, 13, 214, 254, 12, 
+    13, 214, 253, 12, 13, 214, 252, 12, 13, 214, 251, 12, 13, 214, 250, 12, 
+    13, 214, 249, 12, 13, 214, 248, 12, 13, 214, 247, 12, 13, 214, 246, 12, 
+    13, 214, 245, 12, 13, 214, 244, 12, 13, 214, 243, 12, 13, 214, 242, 12, 
+    13, 214, 241, 12, 13, 214, 240, 12, 13, 214, 239, 12, 13, 214, 238, 12, 
+    13, 214, 237, 12, 13, 214, 236, 12, 13, 214, 235, 12, 13, 214, 234, 12, 
+    13, 214, 233, 12, 13, 214, 232, 12, 13, 214, 104, 12, 13, 214, 103, 12, 
+    13, 214, 102, 12, 13, 214, 101, 12, 13, 214, 100, 12, 13, 214, 99, 12, 
+    13, 214, 98, 12, 13, 214, 97, 12, 13, 214, 96, 12, 13, 214, 95, 12, 13, 
+    214, 94, 12, 13, 214, 93, 12, 13, 214, 92, 12, 13, 214, 91, 12, 13, 214, 
+    90, 12, 13, 214, 89, 12, 13, 214, 88, 12, 13, 214, 87, 12, 13, 214, 86, 
+    12, 13, 214, 85, 12, 13, 214, 84, 12, 13, 214, 83, 12, 13, 214, 82, 12, 
+    13, 214, 81, 12, 13, 214, 80, 12, 13, 214, 79, 12, 13, 214, 78, 12, 13, 
+    214, 77, 12, 13, 214, 76, 12, 13, 214, 75, 12, 13, 214, 74, 12, 13, 214, 
+    73, 12, 13, 214, 72, 12, 13, 214, 71, 12, 13, 214, 70, 12, 13, 214, 69, 
+    12, 13, 214, 68, 12, 13, 214, 67, 12, 13, 214, 66, 12, 13, 214, 65, 12, 
+    13, 214, 64, 12, 13, 214, 63, 12, 13, 214, 62, 12, 13, 214, 61, 12, 13, 
+    214, 60, 12, 13, 214, 59, 12, 13, 214, 58, 12, 13, 214, 57, 12, 13, 214, 
+    56, 12, 13, 214, 55, 12, 13, 214, 54, 12, 13, 214, 53, 12, 13, 214, 52, 
+    12, 13, 214, 51, 12, 13, 214, 50, 12, 13, 214, 49, 12, 13, 214, 48, 12, 
+    13, 214, 47, 12, 13, 214, 46, 12, 13, 214, 45, 12, 13, 214, 44, 12, 13, 
+    214, 43, 12, 13, 214, 42, 12, 13, 214, 41, 12, 13, 214, 40, 12, 13, 214, 
+    39, 12, 13, 214, 38, 12, 13, 214, 37, 12, 13, 214, 36, 12, 13, 214, 35, 
+    12, 13, 214, 34, 12, 13, 214, 33, 12, 13, 214, 32, 12, 13, 214, 31, 12, 
+    13, 214, 30, 12, 13, 214, 29, 12, 13, 214, 28, 12, 13, 212, 97, 12, 13, 
+    212, 96, 12, 13, 212, 95, 12, 13, 212, 94, 12, 13, 212, 93, 12, 13, 212, 
+    92, 12, 13, 212, 91, 12, 13, 212, 90, 12, 13, 212, 89, 12, 13, 212, 88, 
+    12, 13, 212, 87, 12, 13, 212, 86, 12, 13, 212, 85, 12, 13, 212, 84, 12, 
+    13, 212, 83, 12, 13, 212, 82, 12, 13, 212, 81, 12, 13, 212, 80, 12, 13, 
+    212, 79, 12, 13, 212, 78, 12, 13, 212, 77, 12, 13, 212, 76, 12, 13, 212, 
+    75, 12, 13, 212, 74, 12, 13, 212, 73, 12, 13, 212, 72, 12, 13, 212, 71, 
+    12, 13, 212, 70, 12, 13, 212, 69, 12, 13, 212, 68, 12, 13, 212, 67, 12, 
+    13, 212, 66, 12, 13, 211, 177, 12, 13, 211, 176, 12, 13, 211, 175, 12, 
+    13, 211, 174, 12, 13, 211, 173, 12, 13, 211, 172, 12, 13, 211, 171, 12, 
+    13, 211, 170, 12, 13, 211, 169, 12, 13, 211, 168, 12, 13, 211, 167, 12, 
+    13, 211, 166, 12, 13, 211, 115, 12, 13, 211, 114, 12, 13, 211, 113, 12, 
+    13, 211, 112, 12, 13, 211, 111, 12, 13, 211, 110, 12, 13, 211, 109, 12, 
+    13, 211, 108, 12, 13, 211, 107, 12, 13, 210, 158, 12, 13, 210, 157, 12, 
+    13, 210, 156, 12, 13, 210, 155, 12, 13, 210, 154, 12, 13, 210, 153, 12, 
+    13, 210, 152, 12, 13, 210, 151, 12, 13, 210, 150, 12, 13, 210, 149, 12, 
+    13, 210, 148, 12, 13, 210, 147, 12, 13, 210, 146, 12, 13, 210, 145, 12, 
+    13, 210, 144, 12, 13, 210, 143, 12, 13, 210, 142, 12, 13, 210, 141, 12, 
+    13, 210, 140, 12, 13, 210, 139, 12, 13, 210, 138, 12, 13, 210, 137, 12, 
+    13, 210, 136, 12, 13, 210, 135, 12, 13, 210, 134, 12, 13, 210, 133, 12, 
+    13, 210, 132, 12, 13, 210, 131, 12, 13, 210, 130, 12, 13, 210, 129, 12, 
+    13, 210, 128, 12, 13, 210, 127, 12, 13, 210, 126, 12, 13, 210, 125, 12, 
+    13, 210, 124, 12, 13, 210, 123, 12, 13, 210, 122, 12, 13, 210, 121, 12, 
+    13, 210, 120, 12, 13, 210, 119, 12, 13, 210, 118, 12, 13, 255, 81, 12, 
+    13, 255, 80, 12, 13, 255, 79, 12, 13, 255, 78, 12, 13, 255, 77, 12, 13, 
+    255, 76, 12, 13, 255, 75, 12, 13, 255, 74, 12, 13, 255, 73, 12, 13, 255, 
+    72, 12, 13, 255, 71, 12, 13, 255, 70, 12, 13, 255, 69, 12, 13, 255, 68, 
+    12, 13, 255, 67, 12, 13, 255, 66, 12, 13, 255, 65, 12, 13, 255, 64, 12, 
+    13, 255, 63, 12, 13, 255, 62, 12, 13, 255, 61, 12, 13, 255, 60, 12, 13, 
+    255, 59, 12, 13, 255, 58, 12, 13, 255, 57, 12, 13, 255, 56, 12, 13, 255, 
+    55, 12, 13, 255, 54, 12, 13, 255, 53, 12, 13, 255, 52, 12, 13, 255, 51, 
+    12, 13, 255, 50, 12, 13, 255, 49, 12, 13, 255, 48, 20, 1, 167, 229, 17, 
+    231, 21, 20, 1, 167, 243, 77, 244, 44, 20, 1, 167, 224, 254, 231, 22, 
+    225, 60, 20, 1, 167, 224, 254, 231, 22, 225, 61, 20, 1, 167, 229, 231, 
+    231, 21, 20, 1, 167, 219, 223, 20, 1, 167, 216, 67, 231, 21, 20, 1, 167, 
+    227, 122, 231, 21, 20, 1, 167, 220, 21, 226, 94, 228, 174, 20, 1, 167, 
+    224, 254, 226, 94, 228, 175, 225, 60, 20, 1, 167, 224, 254, 226, 94, 228, 
+    175, 225, 61, 20, 1, 167, 231, 223, 20, 1, 167, 215, 120, 231, 224, 20, 
+    1, 167, 229, 76, 20, 1, 167, 231, 220, 20, 1, 167, 231, 181, 20, 1, 167, 
+    230, 53, 20, 1, 167, 220, 126, 20, 1, 167, 227, 246, 20, 1, 167, 234, 
+    155, 20, 1, 167, 228, 143, 20, 1, 167, 218, 5, 20, 1, 167, 229, 16, 20, 
+    1, 167, 233, 93, 20, 1, 167, 233, 18, 233, 195, 20, 1, 167, 227, 253, 
+    231, 29, 20, 1, 167, 231, 227, 20, 1, 167, 225, 250, 20, 1, 167, 242, 
+    238, 20, 1, 167, 226, 54, 20, 1, 167, 230, 156, 229, 50, 20, 1, 167, 227, 
+    103, 231, 32, 20, 1, 167, 104, 210, 188, 229, 225, 20, 1, 167, 242, 239, 
+    20, 1, 167, 227, 253, 227, 254, 20, 1, 167, 219, 130, 20, 1, 167, 231, 
+    14, 20, 1, 167, 231, 35, 20, 1, 167, 230, 135, 20, 1, 167, 234, 255, 20, 
+    1, 167, 226, 94, 233, 53, 20, 1, 167, 229, 154, 233, 53, 20, 1, 167, 225, 
+    161, 20, 1, 167, 231, 221, 20, 1, 167, 228, 212, 20, 1, 167, 224, 137, 
+    20, 1, 167, 215, 117, 20, 1, 167, 232, 99, 20, 1, 167, 219, 43, 20, 1, 
+    167, 216, 217, 20, 1, 167, 231, 218, 20, 1, 167, 234, 162, 20, 1, 167, 
+    229, 150, 20, 1, 167, 233, 207, 20, 1, 167, 230, 136, 20, 1, 167, 219, 
+    220, 20, 1, 167, 232, 144, 20, 1, 167, 244, 101, 20, 1, 167, 222, 201, 
+    20, 1, 167, 233, 247, 20, 1, 167, 219, 39, 20, 1, 167, 231, 178, 225, 
+    102, 20, 1, 167, 220, 14, 20, 1, 167, 227, 252, 20, 1, 167, 219, 255, 
+    228, 7, 210, 196, 20, 1, 167, 227, 142, 230, 153, 20, 1, 167, 226, 89, 
+    20, 1, 167, 228, 144, 20, 1, 167, 214, 170, 20, 1, 167, 229, 53, 20, 1, 
+    167, 231, 217, 20, 1, 167, 228, 186, 20, 1, 167, 231, 124, 20, 1, 167, 
+    227, 155, 20, 1, 167, 216, 221, 20, 1, 167, 219, 36, 20, 1, 167, 226, 90, 
+    20, 1, 167, 228, 11, 20, 1, 167, 231, 225, 20, 1, 167, 227, 152, 20, 1, 
+    167, 234, 222, 20, 1, 167, 228, 14, 20, 1, 167, 213, 250, 20, 1, 167, 
+    232, 103, 20, 1, 167, 229, 103, 20, 1, 167, 229, 201, 20, 1, 167, 231, 
+    123, 20, 1, 225, 141, 228, 9, 20, 1, 225, 141, 215, 120, 231, 222, 20, 1, 
+    225, 141, 219, 187, 20, 1, 225, 141, 220, 130, 215, 119, 20, 1, 225, 141, 
+    232, 146, 227, 249, 20, 1, 225, 141, 231, 130, 231, 226, 20, 1, 225, 141, 
+    234, 93, 20, 1, 225, 141, 211, 15, 20, 1, 225, 141, 231, 125, 20, 1, 225, 
+    141, 234, 243, 20, 1, 225, 141, 225, 211, 20, 1, 225, 141, 211, 89, 233, 
+    53, 20, 1, 225, 141, 233, 109, 228, 7, 227, 164, 20, 1, 225, 141, 227, 
+    247, 220, 40, 20, 1, 225, 141, 229, 121, 228, 189, 20, 1, 225, 141, 242, 
+    236, 20, 1, 225, 141, 225, 52, 20, 1, 225, 141, 215, 120, 228, 5, 20, 1, 
+    225, 141, 220, 45, 228, 184, 20, 1, 225, 141, 220, 41, 20, 1, 225, 141, 
+    231, 22, 216, 220, 20, 1, 225, 141, 231, 112, 231, 126, 20, 1, 225, 141, 
+    227, 153, 227, 249, 20, 1, 225, 141, 234, 151, 20, 1, 225, 141, 242, 237, 
+    20, 1, 225, 141, 234, 147, 20, 1, 225, 141, 233, 135, 20, 1, 225, 141, 
+    225, 253, 20, 1, 225, 141, 213, 182, 20, 1, 225, 141, 229, 18, 230, 51, 
+    20, 1, 225, 141, 229, 52, 231, 108, 20, 1, 225, 141, 211, 193, 20, 1, 
+    225, 141, 222, 13, 20, 1, 225, 141, 217, 98, 20, 1, 225, 141, 231, 34, 
+    20, 1, 225, 141, 229, 37, 20, 1, 225, 141, 229, 38, 233, 90, 20, 1, 225, 
+    141, 231, 24, 20, 1, 225, 141, 218, 53, 20, 1, 225, 141, 231, 116, 20, 1, 
+    225, 141, 230, 138, 20, 1, 225, 141, 227, 167, 20, 1, 225, 141, 224, 141, 
+    20, 1, 225, 141, 231, 33, 229, 54, 20, 1, 225, 141, 244, 134, 20, 1, 225, 
+    141, 231, 103, 20, 1, 225, 141, 244, 155, 20, 1, 225, 141, 234, 159, 20, 
+    1, 225, 141, 231, 244, 228, 178, 20, 1, 225, 141, 231, 244, 228, 154, 20, 
+    1, 225, 141, 233, 17, 20, 1, 225, 141, 229, 60, 20, 1, 225, 141, 228, 16, 
+    20, 1, 225, 141, 186, 20, 1, 225, 141, 234, 80, 20, 1, 225, 141, 229, 6, 
+    20, 1, 137, 229, 17, 231, 224, 20, 1, 137, 227, 121, 20, 1, 137, 210, 
+    196, 20, 1, 137, 212, 53, 20, 1, 137, 229, 53, 20, 1, 137, 229, 142, 20, 
+    1, 137, 229, 24, 20, 1, 137, 242, 246, 20, 1, 137, 231, 120, 20, 1, 137, 
+    243, 84, 20, 1, 137, 227, 144, 230, 175, 231, 36, 20, 1, 137, 227, 245, 
+    231, 111, 20, 1, 137, 231, 117, 20, 1, 137, 225, 58, 20, 1, 137, 229, 
+    127, 20, 1, 137, 231, 128, 251, 37, 20, 1, 137, 234, 149, 20, 1, 137, 
+    242, 247, 20, 1, 137, 234, 156, 20, 1, 137, 210, 213, 230, 81, 20, 1, 
+    137, 227, 115, 20, 1, 137, 231, 105, 20, 1, 137, 228, 15, 20, 1, 137, 
+    231, 111, 20, 1, 137, 211, 16, 20, 1, 137, 233, 255, 20, 1, 137, 235, 16, 
+    20, 1, 137, 220, 125, 20, 1, 137, 229, 136, 20, 1, 137, 217, 96, 20, 1, 
+    137, 228, 158, 20, 1, 137, 216, 67, 210, 198, 20, 1, 137, 218, 80, 20, 1, 
+    137, 229, 44, 227, 164, 20, 1, 137, 213, 181, 20, 1, 137, 229, 204, 20, 
+    1, 137, 231, 244, 234, 158, 20, 1, 137, 227, 254, 20, 1, 137, 229, 39, 
+    20, 1, 137, 233, 94, 20, 1, 137, 231, 113, 20, 1, 137, 231, 13, 20, 1, 
+    137, 227, 248, 20, 1, 137, 216, 216, 20, 1, 137, 229, 41, 20, 1, 137, 
+    243, 240, 20, 1, 137, 229, 141, 20, 1, 137, 228, 17, 20, 1, 137, 228, 13, 
+    20, 1, 137, 251, 115, 20, 1, 137, 213, 183, 20, 1, 137, 231, 118, 20, 1, 
+    137, 222, 142, 20, 1, 137, 228, 188, 20, 1, 137, 233, 108, 20, 1, 137, 
+    216, 65, 20, 1, 137, 227, 255, 229, 6, 20, 1, 137, 228, 180, 20, 1, 137, 
+    234, 162, 20, 1, 137, 229, 45, 20, 1, 137, 231, 217, 20, 1, 137, 231, 
+    106, 20, 1, 137, 232, 103, 20, 1, 137, 233, 195, 20, 1, 137, 228, 186, 
+    20, 1, 137, 229, 6, 20, 1, 137, 211, 184, 20, 1, 137, 229, 42, 20, 1, 
+    137, 228, 2, 20, 1, 137, 227, 250, 20, 1, 137, 233, 209, 228, 144, 20, 1, 
+    137, 228, 0, 20, 1, 137, 229, 149, 20, 1, 137, 231, 244, 228, 5, 20, 1, 
+    137, 211, 103, 20, 1, 137, 229, 148, 20, 1, 137, 219, 222, 20, 1, 137, 
+    220, 128, 20, 1, 137, 231, 114, 20, 1, 137, 231, 224, 20, 1, 137, 231, 
+    124, 20, 1, 137, 234, 150, 20, 1, 137, 231, 115, 20, 1, 137, 234, 154, 
+    20, 1, 137, 231, 128, 225, 106, 20, 1, 137, 210, 179, 20, 1, 137, 228, 
+    176, 20, 1, 137, 230, 225, 20, 1, 137, 230, 105, 20, 1, 137, 220, 17, 20, 
+    1, 137, 234, 172, 233, 76, 20, 1, 137, 234, 172, 244, 168, 20, 1, 137, 
+    229, 74, 20, 1, 137, 229, 201, 20, 1, 137, 232, 206, 20, 1, 137, 225, 68, 
+    20, 1, 137, 225, 202, 20, 1, 137, 216, 231, 20, 1, 107, 231, 104, 20, 1, 
+    107, 212, 51, 20, 1, 107, 228, 174, 20, 1, 107, 231, 21, 20, 1, 107, 228, 
+    172, 20, 1, 107, 232, 241, 20, 1, 107, 228, 177, 20, 1, 107, 228, 12, 20, 
+    1, 107, 229, 59, 20, 1, 107, 227, 164, 20, 1, 107, 211, 194, 20, 1, 107, 
+    229, 14, 20, 1, 107, 220, 63, 20, 1, 107, 229, 25, 20, 1, 107, 234, 157, 
+    20, 1, 107, 216, 218, 20, 1, 107, 220, 43, 20, 1, 107, 228, 185, 20, 1, 
+    107, 218, 53, 20, 1, 107, 234, 162, 20, 1, 107, 211, 91, 20, 1, 107, 233, 
+    210, 20, 1, 107, 221, 236, 20, 1, 107, 231, 26, 20, 1, 107, 229, 140, 20, 
+    1, 107, 231, 193, 20, 1, 107, 231, 32, 20, 1, 107, 220, 127, 20, 1, 107, 
+    211, 39, 20, 1, 107, 228, 179, 20, 1, 107, 234, 153, 231, 107, 20, 1, 
+    107, 229, 21, 20, 1, 107, 215, 119, 20, 1, 107, 242, 255, 20, 1, 107, 
+    229, 11, 20, 1, 107, 244, 135, 20, 1, 107, 229, 144, 20, 1, 107, 231, 5, 
+    20, 1, 107, 233, 11, 20, 1, 107, 229, 126, 20, 1, 107, 230, 152, 20, 1, 
+    107, 231, 9, 20, 1, 107, 224, 121, 20, 1, 107, 231, 7, 20, 1, 107, 231, 
+    23, 20, 1, 107, 232, 89, 20, 1, 107, 228, 4, 20, 1, 107, 231, 127, 20, 1, 
+    107, 233, 186, 20, 1, 107, 227, 155, 20, 1, 107, 216, 221, 20, 1, 107, 
+    219, 36, 20, 1, 107, 210, 179, 20, 1, 107, 234, 154, 20, 1, 107, 223, 
+    173, 20, 1, 107, 217, 11, 20, 1, 107, 229, 22, 20, 1, 107, 231, 28, 20, 
+    1, 107, 228, 3, 20, 1, 107, 234, 152, 20, 1, 107, 225, 62, 20, 1, 107, 
+    225, 155, 20, 1, 107, 227, 131, 20, 1, 107, 233, 17, 20, 1, 107, 229, 60, 
+    20, 1, 107, 231, 25, 20, 1, 107, 229, 34, 20, 1, 107, 210, 193, 20, 1, 
+    107, 226, 25, 20, 1, 107, 210, 192, 20, 1, 107, 229, 149, 20, 1, 107, 
+    227, 249, 20, 1, 107, 218, 82, 20, 1, 107, 233, 214, 20, 1, 107, 229, 49, 
+    20, 1, 107, 229, 19, 20, 1, 107, 215, 103, 20, 1, 107, 231, 36, 20, 1, 
+    107, 233, 204, 20, 1, 107, 228, 1, 20, 1, 107, 216, 219, 20, 1, 107, 231, 
+    219, 20, 1, 107, 229, 58, 20, 1, 107, 233, 10, 20, 1, 107, 229, 40, 20, 
+    1, 107, 228, 6, 20, 1, 107, 228, 158, 20, 1, 107, 242, 240, 20, 1, 107, 
+    233, 223, 20, 1, 107, 223, 87, 226, 213, 20, 1, 107, 217, 87, 20, 1, 107, 
+    216, 11, 20, 1, 107, 227, 152, 20, 1, 107, 222, 242, 20, 1, 107, 233, 55, 
+    20, 1, 107, 231, 84, 20, 1, 107, 194, 20, 1, 107, 218, 5, 20, 1, 107, 
+    230, 107, 20, 1, 107, 220, 29, 20, 1, 107, 220, 39, 20, 1, 107, 233, 161, 
+    20, 1, 107, 227, 242, 20, 1, 107, 219, 227, 20, 1, 107, 227, 251, 20, 1, 
+    107, 225, 214, 20, 1, 107, 228, 238, 20, 1, 107, 219, 254, 20, 1, 107, 
+    224, 136, 20, 1, 107, 230, 51, 20, 1, 107, 232, 125, 20, 1, 107, 223, 87, 
+    230, 101, 20, 1, 107, 216, 118, 20, 1, 107, 227, 243, 20, 1, 107, 231, 
+    128, 199, 20, 1, 107, 221, 234, 20, 1, 107, 244, 203, 20, 1, 82, 229, 
+    148, 20, 1, 82, 216, 17, 20, 1, 82, 231, 117, 20, 1, 82, 233, 94, 20, 1, 
+    82, 213, 128, 20, 1, 82, 232, 131, 20, 1, 82, 226, 93, 20, 1, 82, 219, 
+    47, 20, 1, 82, 223, 148, 20, 1, 82, 228, 8, 20, 1, 82, 229, 119, 20, 1, 
+    82, 224, 150, 20, 1, 82, 217, 63, 20, 1, 82, 229, 27, 20, 1, 82, 233, 
+    251, 20, 1, 82, 211, 187, 20, 1, 82, 221, 172, 20, 1, 82, 229, 50, 20, 1, 
+    82, 226, 90, 20, 1, 82, 216, 18, 20, 1, 82, 233, 208, 20, 1, 82, 232, 
+    145, 20, 1, 82, 228, 11, 20, 1, 82, 229, 3, 20, 1, 82, 231, 225, 20, 1, 
+    82, 229, 20, 20, 1, 82, 229, 2, 20, 1, 82, 228, 10, 20, 1, 82, 222, 240, 
+    20, 1, 82, 228, 176, 20, 1, 82, 225, 213, 20, 1, 82, 222, 33, 20, 1, 82, 
+    229, 35, 20, 1, 82, 231, 15, 20, 1, 82, 242, 234, 20, 1, 82, 229, 23, 20, 
+    1, 82, 228, 187, 20, 1, 82, 231, 177, 20, 1, 82, 232, 127, 20, 1, 82, 
+    229, 55, 20, 1, 82, 229, 132, 20, 1, 82, 217, 86, 227, 249, 20, 1, 82, 
+    220, 129, 20, 1, 82, 224, 146, 20, 1, 82, 229, 152, 219, 53, 20, 1, 82, 
+    229, 43, 227, 164, 20, 1, 82, 211, 4, 20, 1, 82, 242, 235, 20, 1, 82, 
+    215, 118, 20, 1, 82, 211, 19, 20, 1, 82, 225, 19, 20, 1, 82, 215, 108, 
+    20, 1, 82, 234, 160, 20, 1, 82, 218, 81, 20, 1, 82, 216, 220, 20, 1, 82, 
+    213, 184, 20, 1, 82, 212, 6, 20, 1, 82, 233, 138, 20, 1, 82, 224, 153, 
+    20, 1, 82, 217, 97, 20, 1, 82, 242, 254, 20, 1, 82, 229, 64, 20, 1, 82, 
+    220, 42, 20, 1, 82, 231, 10, 20, 1, 82, 231, 121, 20, 1, 82, 227, 119, 
+    20, 1, 82, 228, 141, 20, 1, 82, 243, 80, 20, 1, 82, 215, 109, 20, 1, 82, 
+    233, 217, 20, 1, 82, 211, 67, 20, 1, 82, 227, 153, 250, 24, 20, 1, 82, 
+    210, 250, 20, 1, 82, 231, 27, 20, 1, 82, 229, 137, 20, 1, 82, 225, 103, 
+    20, 1, 82, 210, 197, 20, 1, 82, 233, 12, 20, 1, 82, 243, 240, 20, 1, 82, 
+    243, 79, 20, 1, 82, 229, 13, 20, 1, 82, 234, 162, 20, 1, 82, 231, 228, 
+    20, 1, 82, 229, 26, 20, 1, 82, 242, 241, 20, 1, 82, 244, 204, 20, 1, 82, 
+    227, 244, 20, 1, 82, 225, 156, 20, 1, 82, 211, 17, 20, 1, 82, 229, 51, 
+    20, 1, 82, 227, 153, 252, 31, 20, 1, 82, 227, 99, 20, 1, 82, 224, 250, 
+    20, 1, 82, 230, 225, 20, 1, 82, 243, 238, 20, 1, 82, 229, 225, 20, 1, 82, 
+    230, 105, 20, 1, 82, 242, 240, 20, 1, 82, 243, 242, 74, 20, 1, 82, 230, 
+    52, 20, 1, 82, 224, 149, 20, 1, 82, 229, 15, 20, 1, 82, 233, 195, 20, 1, 
+    82, 225, 100, 20, 1, 82, 227, 252, 20, 1, 82, 211, 18, 20, 1, 82, 229, 
+    36, 20, 1, 82, 226, 94, 225, 190, 20, 1, 82, 243, 242, 251, 23, 20, 1, 
+    82, 244, 45, 20, 1, 82, 228, 181, 20, 1, 82, 61, 20, 1, 82, 216, 11, 20, 
+    1, 82, 78, 20, 1, 82, 74, 20, 1, 82, 233, 92, 20, 1, 82, 226, 94, 225, 
+    26, 20, 1, 82, 217, 102, 20, 1, 82, 217, 52, 20, 1, 82, 229, 152, 230, 
+    39, 240, 241, 20, 1, 82, 220, 17, 20, 1, 82, 211, 14, 20, 1, 82, 228, 
+    252, 20, 1, 82, 210, 202, 20, 1, 82, 210, 227, 217, 241, 20, 1, 82, 210, 
+    227, 249, 155, 20, 1, 82, 210, 187, 20, 1, 82, 210, 195, 20, 1, 82, 234, 
+    148, 20, 1, 82, 225, 154, 20, 1, 82, 228, 182, 245, 110, 20, 1, 82, 224, 
+    147, 20, 1, 82, 211, 192, 20, 1, 82, 244, 155, 20, 1, 82, 213, 250, 20, 
+    1, 82, 232, 103, 20, 1, 82, 230, 235, 20, 1, 82, 223, 54, 20, 1, 82, 223, 
+    174, 20, 1, 82, 228, 251, 20, 1, 82, 229, 82, 20, 1, 82, 220, 9, 20, 1, 
+    82, 219, 254, 20, 1, 82, 243, 242, 223, 89, 20, 1, 82, 198, 20, 1, 82, 
+    225, 111, 20, 1, 82, 232, 125, 20, 1, 82, 234, 34, 20, 1, 82, 231, 63, 
+    20, 1, 82, 186, 20, 1, 82, 231, 174, 20, 1, 82, 216, 222, 20, 1, 82, 234, 
+    98, 20, 1, 82, 230, 155, 20, 1, 82, 216, 248, 20, 1, 82, 244, 177, 20, 1, 
+    82, 242, 230, 20, 1, 225, 140, 176, 20, 1, 225, 140, 69, 20, 1, 225, 140, 
+    233, 223, 20, 1, 225, 140, 245, 217, 20, 1, 225, 140, 223, 111, 20, 1, 
+    225, 140, 217, 87, 20, 1, 225, 140, 227, 152, 20, 1, 225, 140, 233, 141, 
+    20, 1, 225, 140, 222, 242, 20, 1, 225, 140, 223, 32, 20, 1, 225, 140, 
+    231, 84, 20, 1, 225, 140, 217, 102, 20, 1, 225, 140, 229, 151, 20, 1, 
+    225, 140, 228, 188, 20, 1, 225, 140, 194, 20, 1, 225, 140, 218, 5, 20, 1, 
+    225, 140, 220, 29, 20, 1, 225, 140, 219, 193, 20, 1, 225, 140, 220, 125, 
+    20, 1, 225, 140, 233, 161, 20, 1, 225, 140, 234, 162, 20, 1, 225, 140, 
+    227, 213, 20, 1, 225, 140, 227, 242, 20, 1, 225, 140, 228, 159, 20, 1, 
+    225, 140, 210, 226, 20, 1, 225, 140, 219, 227, 20, 1, 225, 140, 192, 20, 
+    1, 225, 140, 228, 14, 20, 1, 225, 140, 225, 154, 20, 1, 225, 140, 227, 
+    251, 20, 1, 225, 140, 211, 192, 20, 1, 225, 140, 225, 214, 20, 1, 225, 
+    140, 222, 142, 20, 1, 225, 140, 228, 238, 20, 1, 225, 140, 223, 54, 20, 
+    1, 225, 140, 234, 171, 20, 1, 225, 140, 229, 12, 20, 1, 225, 140, 229, 
+    61, 20, 1, 225, 140, 220, 9, 20, 1, 225, 140, 224, 150, 20, 1, 225, 140, 
+    244, 45, 20, 1, 225, 140, 212, 65, 20, 1, 225, 140, 232, 247, 20, 1, 225, 
+    140, 232, 125, 20, 1, 225, 140, 234, 34, 20, 1, 225, 140, 231, 119, 20, 
+    1, 225, 140, 223, 86, 20, 1, 225, 140, 186, 20, 1, 225, 140, 230, 166, 
+    20, 1, 225, 140, 231, 127, 20, 1, 225, 140, 216, 231, 20, 1, 225, 140, 
+    234, 1, 20, 1, 225, 140, 221, 253, 20, 1, 225, 140, 212, 115, 95, 1, 191, 
+    95, 1, 252, 199, 95, 1, 8, 191, 95, 1, 225, 45, 95, 1, 186, 95, 1, 230, 
+    238, 95, 1, 254, 31, 186, 95, 1, 244, 204, 95, 1, 214, 27, 95, 1, 213, 
+    177, 95, 1, 217, 106, 95, 1, 248, 229, 95, 1, 8, 215, 157, 95, 1, 8, 217, 
+    106, 95, 1, 215, 157, 95, 1, 248, 143, 95, 1, 198, 95, 1, 228, 242, 95, 
+    1, 8, 228, 115, 95, 1, 254, 31, 198, 95, 1, 228, 115, 95, 1, 228, 101, 
+    95, 1, 233, 141, 95, 1, 232, 66, 95, 1, 233, 4, 95, 1, 232, 249, 95, 1, 
+    216, 57, 95, 1, 247, 161, 95, 1, 216, 49, 95, 1, 247, 160, 95, 1, 176, 
+    95, 1, 243, 142, 95, 1, 8, 176, 95, 1, 224, 91, 95, 1, 224, 69, 95, 1, 
+    229, 82, 95, 1, 229, 33, 95, 1, 254, 31, 229, 82, 95, 1, 162, 95, 1, 211, 
+    165, 95, 1, 243, 0, 95, 1, 242, 233, 95, 1, 215, 166, 95, 1, 246, 34, 95, 
+    1, 227, 169, 95, 1, 227, 154, 95, 1, 215, 176, 95, 1, 246, 41, 95, 1, 8, 
+    215, 176, 95, 1, 8, 246, 41, 95, 1, 223, 109, 215, 176, 95, 1, 220, 104, 
+    95, 1, 218, 225, 95, 1, 210, 82, 95, 1, 210, 14, 95, 1, 215, 184, 95, 1, 
+    246, 46, 95, 1, 8, 215, 184, 95, 1, 206, 95, 1, 210, 116, 95, 1, 210, 15, 
+    95, 1, 209, 243, 95, 1, 209, 223, 95, 1, 254, 31, 209, 243, 95, 1, 209, 
+    215, 95, 1, 209, 222, 95, 1, 212, 65, 95, 1, 254, 218, 95, 1, 241, 196, 
+    95, 1, 229, 197, 95, 5, 253, 230, 95, 5, 223, 109, 213, 133, 95, 5, 223, 
+    109, 253, 230, 95, 25, 5, 61, 95, 25, 5, 255, 82, 95, 25, 5, 254, 214, 
+    95, 25, 5, 254, 131, 95, 25, 5, 254, 123, 95, 25, 5, 78, 95, 25, 5, 226, 
+    187, 95, 25, 5, 211, 227, 95, 25, 5, 212, 98, 95, 25, 5, 76, 95, 25, 5, 
+    245, 158, 95, 25, 5, 245, 146, 95, 25, 5, 226, 236, 95, 25, 5, 74, 95, 
+    25, 5, 240, 126, 95, 25, 5, 240, 125, 95, 25, 5, 240, 124, 95, 25, 5, 
+    235, 196, 95, 25, 5, 236, 67, 95, 25, 5, 236, 40, 95, 25, 5, 235, 162, 
+    95, 25, 5, 235, 238, 95, 25, 5, 69, 95, 25, 5, 214, 229, 95, 25, 5, 214, 
+    228, 95, 25, 5, 214, 227, 95, 25, 5, 214, 118, 95, 25, 5, 214, 211, 95, 
+    25, 5, 214, 178, 95, 25, 5, 211, 117, 95, 25, 5, 211, 8, 95, 25, 5, 254, 
+    252, 95, 25, 5, 254, 248, 95, 25, 5, 245, 94, 95, 25, 5, 222, 185, 245, 
+    94, 95, 25, 5, 245, 100, 95, 25, 5, 222, 185, 245, 100, 95, 25, 5, 254, 
+    210, 95, 25, 5, 245, 203, 95, 25, 5, 253, 200, 95, 25, 5, 226, 138, 95, 
+    25, 5, 230, 30, 95, 25, 5, 229, 84, 95, 138, 222, 254, 95, 138, 216, 15, 
+    222, 254, 95, 138, 48, 95, 138, 51, 95, 1, 216, 29, 95, 1, 216, 28, 95, 
+    1, 216, 27, 95, 1, 216, 26, 95, 1, 216, 25, 95, 1, 216, 24, 95, 1, 216, 
+    23, 95, 1, 223, 109, 216, 30, 95, 1, 223, 109, 216, 29, 95, 1, 223, 109, 
+    216, 27, 95, 1, 223, 109, 216, 26, 95, 1, 223, 109, 216, 25, 95, 1, 223, 
+    109, 216, 23, 56, 1, 254, 31, 76, 141, 1, 254, 31, 211, 47, 49, 28, 16, 
+    224, 157, 49, 28, 16, 248, 166, 49, 28, 16, 225, 178, 49, 28, 16, 226, 
+    117, 245, 186, 49, 28, 16, 226, 117, 247, 209, 49, 28, 16, 214, 16, 245, 
+    186, 49, 28, 16, 214, 16, 247, 209, 49, 28, 16, 234, 203, 49, 28, 16, 
+    217, 170, 49, 28, 16, 226, 13, 49, 28, 16, 210, 217, 49, 28, 16, 210, 
+    218, 247, 209, 49, 28, 16, 233, 240, 49, 28, 16, 254, 76, 245, 186, 49, 
+    28, 16, 245, 34, 245, 186, 49, 28, 16, 217, 3, 49, 28, 16, 234, 167, 49, 
+    28, 16, 254, 66, 49, 28, 16, 254, 67, 247, 209, 49, 28, 16, 217, 176, 49, 
+    28, 16, 216, 160, 49, 28, 16, 226, 210, 254, 29, 49, 28, 16, 242, 166, 
+    254, 29, 49, 28, 16, 224, 156, 49, 28, 16, 250, 157, 49, 28, 16, 214, 6, 
+    49, 28, 16, 235, 170, 254, 29, 49, 28, 16, 234, 169, 254, 29, 49, 28, 16, 
+    234, 168, 254, 29, 49, 28, 16, 221, 215, 49, 28, 16, 226, 4, 49, 28, 16, 
+    218, 148, 254, 69, 49, 28, 16, 226, 116, 254, 29, 49, 28, 16, 214, 15, 
+    254, 29, 49, 28, 16, 254, 70, 254, 29, 49, 28, 16, 254, 64, 49, 28, 16, 
+    234, 43, 49, 28, 16, 223, 49, 49, 28, 16, 225, 109, 254, 29, 49, 28, 16, 
+    216, 84, 49, 28, 16, 254, 129, 49, 28, 16, 221, 161, 49, 28, 16, 217, 
+    179, 254, 29, 49, 28, 16, 217, 179, 231, 45, 218, 146, 49, 28, 16, 226, 
+    111, 254, 29, 49, 28, 16, 216, 191, 49, 28, 16, 233, 33, 49, 28, 16, 246, 
+    49, 49, 28, 16, 215, 228, 49, 28, 16, 216, 233, 49, 28, 16, 233, 243, 49, 
+    28, 16, 254, 76, 245, 34, 229, 100, 49, 28, 16, 243, 243, 254, 29, 49, 
+    28, 16, 236, 19, 49, 28, 16, 215, 200, 254, 29, 49, 28, 16, 234, 206, 
+    215, 199, 49, 28, 16, 225, 203, 49, 28, 16, 224, 161, 49, 28, 16, 234, 
+    17, 49, 28, 16, 250, 88, 254, 29, 49, 28, 16, 223, 149, 49, 28, 16, 226, 
+    16, 254, 29, 49, 28, 16, 226, 14, 254, 29, 49, 28, 16, 240, 116, 49, 28, 
+    16, 229, 208, 49, 28, 16, 225, 159, 49, 28, 16, 234, 18, 254, 158, 49, 
+    28, 16, 215, 200, 254, 158, 49, 28, 16, 218, 125, 49, 28, 16, 242, 130, 
+    49, 28, 16, 235, 170, 229, 100, 49, 28, 16, 226, 210, 229, 100, 49, 28, 
+    16, 226, 117, 229, 100, 49, 28, 16, 225, 158, 49, 28, 16, 234, 4, 49, 28, 
+    16, 225, 157, 49, 28, 16, 233, 242, 49, 28, 16, 225, 204, 229, 100, 49, 
+    28, 16, 234, 168, 229, 101, 254, 104, 49, 28, 16, 234, 169, 229, 101, 
+    254, 104, 49, 28, 16, 210, 215, 49, 28, 16, 254, 67, 229, 100, 49, 28, 
+    16, 254, 68, 217, 177, 229, 100, 49, 28, 16, 210, 216, 49, 28, 16, 233, 
+    241, 49, 28, 16, 245, 181, 49, 28, 16, 250, 158, 49, 28, 16, 230, 203, 
+    235, 169, 49, 28, 16, 214, 16, 229, 100, 49, 28, 16, 225, 109, 229, 100, 
+    49, 28, 16, 224, 162, 229, 100, 49, 28, 16, 226, 207, 49, 28, 16, 254, 
+    92, 49, 28, 16, 232, 63, 49, 28, 16, 226, 14, 229, 100, 49, 28, 16, 226, 
+    16, 229, 100, 49, 28, 16, 245, 68, 226, 15, 49, 28, 16, 233, 159, 49, 28, 
+    16, 254, 93, 49, 28, 16, 215, 200, 229, 100, 49, 28, 16, 245, 184, 49, 
+    28, 16, 217, 179, 229, 100, 49, 28, 16, 217, 171, 49, 28, 16, 250, 88, 
+    229, 100, 49, 28, 16, 245, 114, 49, 28, 16, 221, 162, 229, 100, 49, 28, 
+    16, 211, 151, 234, 43, 49, 28, 16, 215, 197, 49, 28, 16, 224, 163, 49, 
+    28, 16, 215, 201, 49, 28, 16, 215, 198, 49, 28, 16, 224, 160, 49, 28, 16, 
+    215, 196, 49, 28, 16, 224, 159, 49, 28, 16, 242, 165, 49, 28, 16, 254, 
+    22, 49, 28, 16, 245, 68, 254, 22, 49, 28, 16, 226, 111, 229, 100, 49, 28, 
+    16, 216, 190, 245, 77, 49, 28, 16, 216, 190, 245, 33, 49, 28, 16, 216, 
+    192, 254, 71, 49, 28, 16, 216, 185, 234, 253, 254, 63, 49, 28, 16, 234, 
+    205, 49, 28, 16, 245, 147, 49, 28, 16, 211, 11, 234, 202, 49, 28, 16, 
+    211, 11, 254, 104, 49, 28, 16, 218, 147, 49, 28, 16, 234, 44, 254, 104, 
+    49, 28, 16, 247, 210, 254, 29, 49, 28, 16, 233, 244, 254, 29, 49, 28, 16, 
+    233, 244, 254, 158, 49, 28, 16, 233, 244, 229, 100, 49, 28, 16, 254, 70, 
+    229, 100, 49, 28, 16, 254, 72, 49, 28, 16, 247, 209, 49, 28, 16, 215, 
+    211, 49, 28, 16, 216, 225, 49, 28, 16, 234, 8, 49, 28, 16, 233, 38, 245, 
+    142, 250, 79, 49, 28, 16, 233, 38, 246, 50, 250, 80, 49, 28, 16, 233, 38, 
+    215, 213, 250, 80, 49, 28, 16, 233, 38, 216, 235, 250, 80, 49, 28, 16, 
+    233, 38, 236, 14, 250, 79, 49, 28, 16, 242, 166, 229, 101, 254, 104, 49, 
+    28, 16, 242, 166, 226, 5, 254, 18, 49, 28, 16, 242, 166, 226, 5, 248, 37, 
+    49, 28, 16, 247, 233, 49, 28, 16, 247, 234, 226, 5, 254, 19, 234, 202, 
+    49, 28, 16, 247, 234, 226, 5, 254, 19, 254, 104, 49, 28, 16, 247, 234, 
+    226, 5, 248, 37, 49, 28, 16, 215, 217, 49, 28, 16, 254, 23, 49, 28, 16, 
+    236, 21, 49, 28, 16, 247, 254, 49, 28, 16, 254, 220, 225, 3, 254, 24, 49, 
+    28, 16, 254, 220, 254, 21, 49, 28, 16, 254, 220, 254, 24, 49, 28, 16, 
+    254, 220, 231, 39, 49, 28, 16, 254, 220, 231, 50, 49, 28, 16, 254, 220, 
+    242, 167, 49, 28, 16, 254, 220, 242, 164, 49, 28, 16, 254, 220, 225, 3, 
+    242, 167, 49, 28, 16, 231, 156, 224, 168, 240, 114, 49, 28, 16, 231, 156, 
+    254, 160, 224, 168, 240, 114, 49, 28, 16, 231, 156, 248, 36, 240, 114, 
+    49, 28, 16, 231, 156, 254, 160, 248, 36, 240, 114, 49, 28, 16, 231, 156, 
+    215, 206, 240, 114, 49, 28, 16, 231, 156, 215, 218, 49, 28, 16, 231, 156, 
+    216, 229, 240, 114, 49, 28, 16, 231, 156, 216, 229, 233, 41, 240, 114, 
+    49, 28, 16, 231, 156, 233, 41, 240, 114, 49, 28, 16, 231, 156, 225, 42, 
+    240, 114, 49, 28, 16, 235, 176, 216, 252, 240, 115, 49, 28, 16, 254, 68, 
+    216, 252, 240, 115, 49, 28, 16, 244, 180, 216, 226, 49, 28, 16, 244, 180, 
+    230, 148, 49, 28, 16, 244, 180, 247, 238, 49, 28, 16, 231, 156, 214, 10, 
+    240, 114, 49, 28, 16, 231, 156, 224, 167, 240, 114, 49, 28, 16, 231, 156, 
+    225, 42, 216, 229, 240, 114, 49, 28, 16, 242, 162, 230, 31, 254, 71, 49, 
+    28, 16, 242, 162, 230, 31, 247, 208, 49, 28, 16, 245, 156, 234, 253, 243, 
+    243, 213, 124, 49, 28, 16, 236, 20, 49, 28, 16, 236, 18, 49, 28, 16, 243, 
+    243, 254, 30, 248, 35, 240, 113, 49, 28, 16, 243, 243, 247, 252, 191, 49, 
+    28, 16, 243, 243, 247, 252, 229, 208, 49, 28, 16, 243, 243, 229, 203, 
+    240, 114, 49, 28, 16, 243, 243, 247, 252, 248, 11, 49, 28, 16, 243, 243, 
+    219, 104, 247, 251, 248, 11, 49, 28, 16, 243, 243, 247, 252, 234, 188, 
+    49, 28, 16, 243, 243, 247, 252, 210, 23, 49, 28, 16, 243, 243, 247, 252, 
+    228, 239, 234, 202, 49, 28, 16, 243, 243, 247, 252, 228, 239, 254, 104, 
+    49, 28, 16, 243, 243, 231, 196, 250, 81, 247, 238, 49, 28, 16, 243, 243, 
+    231, 196, 250, 81, 230, 148, 49, 28, 16, 244, 130, 219, 104, 250, 81, 
+    214, 9, 49, 28, 16, 243, 243, 219, 104, 250, 81, 217, 180, 49, 28, 16, 
+    243, 243, 229, 102, 49, 28, 16, 250, 82, 209, 249, 49, 28, 16, 250, 82, 
+    234, 42, 49, 28, 16, 250, 82, 219, 11, 49, 28, 16, 243, 243, 240, 161, 
+    211, 10, 216, 230, 49, 28, 16, 243, 243, 245, 157, 254, 94, 49, 28, 16, 
+    211, 10, 215, 207, 49, 28, 16, 247, 246, 215, 207, 49, 28, 16, 247, 246, 
+    216, 230, 49, 28, 16, 247, 246, 254, 73, 246, 50, 247, 147, 49, 28, 16, 
+    247, 246, 230, 146, 216, 234, 247, 147, 49, 28, 16, 247, 246, 247, 230, 
+    245, 44, 247, 147, 49, 28, 16, 247, 246, 215, 215, 226, 215, 247, 147, 
+    49, 28, 16, 211, 10, 254, 73, 246, 50, 247, 147, 49, 28, 16, 211, 10, 
+    230, 146, 216, 234, 247, 147, 49, 28, 16, 211, 10, 247, 230, 245, 44, 
+    247, 147, 49, 28, 16, 211, 10, 215, 215, 226, 215, 247, 147, 49, 28, 16, 
+    243, 56, 247, 245, 49, 28, 16, 243, 56, 211, 9, 49, 28, 16, 247, 253, 
+    254, 73, 230, 204, 49, 28, 16, 247, 253, 254, 73, 231, 78, 49, 28, 16, 
+    247, 253, 247, 209, 49, 28, 16, 247, 253, 216, 183, 49, 28, 16, 219, 165, 
+    216, 183, 49, 28, 16, 219, 165, 216, 184, 247, 194, 49, 28, 16, 219, 165, 
+    216, 184, 215, 208, 49, 28, 16, 219, 165, 216, 184, 216, 223, 49, 28, 16, 
+    219, 165, 253, 252, 49, 28, 16, 219, 165, 253, 253, 247, 194, 49, 28, 16, 
+    219, 165, 253, 253, 215, 208, 49, 28, 16, 219, 165, 253, 253, 216, 223, 
+    49, 28, 16, 247, 231, 243, 37, 49, 28, 16, 247, 237, 226, 138, 49, 28, 
+    16, 218, 139, 49, 28, 16, 254, 15, 191, 49, 28, 16, 254, 15, 213, 124, 
+    49, 28, 16, 254, 15, 243, 142, 49, 28, 16, 254, 15, 248, 11, 49, 28, 16, 
+    254, 15, 234, 188, 49, 28, 16, 254, 15, 210, 23, 49, 28, 16, 254, 15, 
+    228, 238, 49, 28, 16, 234, 168, 229, 101, 231, 49, 49, 28, 16, 234, 169, 
+    229, 101, 231, 49, 49, 28, 16, 234, 168, 229, 101, 234, 202, 49, 28, 16, 
+    234, 169, 229, 101, 234, 202, 49, 28, 16, 234, 44, 234, 202, 49, 28, 16, 
+    242, 166, 229, 101, 234, 202, 28, 16, 219, 157, 252, 143, 28, 16, 52, 
+    252, 143, 28, 16, 40, 252, 143, 28, 16, 223, 53, 40, 252, 143, 28, 16, 
+    248, 163, 252, 143, 28, 16, 219, 253, 252, 143, 28, 16, 43, 223, 80, 50, 
+    28, 16, 44, 223, 80, 50, 28, 16, 223, 80, 247, 126, 28, 16, 248, 204, 
+    221, 165, 28, 16, 248, 230, 251, 1, 28, 16, 221, 165, 28, 16, 249, 242, 
+    28, 16, 223, 78, 244, 119, 28, 16, 223, 78, 244, 118, 28, 16, 223, 78, 
+    244, 117, 28, 16, 244, 139, 28, 16, 244, 140, 51, 28, 16, 251, 156, 79, 
+    28, 16, 251, 32, 28, 16, 251, 167, 28, 16, 127, 28, 16, 226, 197, 218, 
+    165, 28, 16, 215, 57, 218, 165, 28, 16, 216, 143, 218, 165, 28, 16, 244, 
+    18, 218, 165, 28, 16, 244, 88, 218, 165, 28, 16, 219, 126, 218, 165, 28, 
+    16, 219, 124, 244, 2, 28, 16, 244, 16, 244, 2, 28, 16, 243, 210, 250, 22, 
+    28, 16, 243, 210, 250, 23, 226, 140, 254, 150, 28, 16, 243, 210, 250, 23, 
+    226, 140, 252, 130, 28, 16, 251, 75, 250, 22, 28, 16, 245, 15, 250, 22, 
+    28, 16, 245, 15, 250, 23, 226, 140, 254, 150, 28, 16, 245, 15, 250, 23, 
+    226, 140, 252, 130, 28, 16, 246, 91, 250, 21, 28, 16, 246, 91, 250, 20, 
+    28, 16, 230, 90, 231, 95, 223, 64, 28, 16, 52, 220, 77, 28, 16, 52, 244, 
+    73, 28, 16, 244, 74, 214, 163, 28, 16, 244, 74, 246, 114, 28, 16, 229, 
+    193, 214, 163, 28, 16, 229, 193, 246, 114, 28, 16, 220, 78, 214, 163, 28, 
+    16, 220, 78, 246, 114, 28, 16, 224, 25, 138, 220, 77, 28, 16, 224, 25, 
+    138, 244, 73, 28, 16, 249, 224, 216, 88, 28, 16, 249, 93, 216, 88, 28, 
+    16, 226, 140, 254, 150, 28, 16, 226, 140, 252, 130, 28, 16, 224, 7, 254, 
+    150, 28, 16, 224, 7, 252, 130, 28, 16, 230, 93, 223, 64, 28, 16, 211, 
+    251, 223, 64, 28, 16, 163, 223, 64, 28, 16, 224, 25, 223, 64, 28, 16, 
+    245, 197, 223, 64, 28, 16, 219, 120, 223, 64, 28, 16, 216, 161, 223, 64, 
+    28, 16, 219, 112, 223, 64, 28, 16, 123, 240, 218, 215, 71, 223, 64, 28, 
+    16, 211, 179, 228, 48, 28, 16, 96, 228, 48, 28, 16, 250, 44, 211, 179, 
+    228, 48, 28, 16, 42, 228, 49, 211, 253, 28, 16, 42, 228, 49, 251, 229, 
+    28, 16, 215, 227, 228, 49, 120, 211, 253, 28, 16, 215, 227, 228, 49, 120, 
+    251, 229, 28, 16, 215, 227, 228, 49, 43, 211, 253, 28, 16, 215, 227, 228, 
+    49, 43, 251, 229, 28, 16, 215, 227, 228, 49, 44, 211, 253, 28, 16, 215, 
+    227, 228, 49, 44, 251, 229, 28, 16, 215, 227, 228, 49, 124, 211, 253, 28, 
+    16, 215, 227, 228, 49, 124, 251, 229, 28, 16, 215, 227, 228, 49, 120, 44, 
+    211, 253, 28, 16, 215, 227, 228, 49, 120, 44, 251, 229, 28, 16, 230, 134, 
+    228, 49, 211, 253, 28, 16, 230, 134, 228, 49, 251, 229, 28, 16, 215, 224, 
+    228, 49, 124, 211, 253, 28, 16, 215, 224, 228, 49, 124, 251, 229, 28, 16, 
+    226, 8, 228, 48, 28, 16, 213, 132, 228, 48, 28, 16, 228, 49, 251, 229, 
+    28, 16, 227, 207, 228, 48, 28, 16, 249, 249, 228, 49, 211, 253, 28, 16, 
+    249, 249, 228, 49, 251, 229, 28, 16, 251, 154, 28, 16, 211, 251, 228, 52, 
+    28, 16, 163, 228, 52, 28, 16, 224, 25, 228, 52, 28, 16, 245, 197, 228, 
+    52, 28, 16, 219, 120, 228, 52, 28, 16, 216, 161, 228, 52, 28, 16, 219, 
+    112, 228, 52, 28, 16, 123, 240, 218, 215, 71, 228, 52, 28, 16, 38, 218, 
+    141, 28, 16, 38, 218, 242, 218, 141, 28, 16, 38, 215, 235, 28, 16, 38, 
+    215, 234, 28, 16, 38, 215, 233, 28, 16, 244, 109, 215, 235, 28, 16, 244, 
+    109, 215, 234, 28, 16, 244, 109, 215, 233, 28, 16, 38, 253, 197, 247, 
+    128, 28, 16, 38, 244, 80, 28, 16, 38, 244, 79, 28, 16, 38, 244, 78, 28, 
+    16, 38, 244, 77, 28, 16, 38, 244, 76, 28, 16, 252, 66, 252, 82, 28, 16, 
+    245, 151, 252, 82, 28, 16, 252, 66, 216, 112, 28, 16, 245, 151, 216, 112, 
+    28, 16, 252, 66, 219, 82, 28, 16, 245, 151, 219, 82, 28, 16, 252, 66, 
+    225, 118, 28, 16, 245, 151, 225, 118, 28, 16, 38, 255, 23, 28, 16, 38, 
+    218, 167, 28, 16, 38, 216, 239, 28, 16, 38, 218, 168, 28, 16, 38, 231, 
+    167, 28, 16, 38, 231, 166, 28, 16, 38, 255, 22, 28, 16, 38, 232, 118, 28, 
+    16, 254, 6, 214, 163, 28, 16, 254, 6, 246, 114, 28, 16, 38, 247, 143, 28, 
+    16, 38, 222, 234, 28, 16, 38, 244, 66, 28, 16, 38, 219, 78, 28, 16, 38, 
+    252, 46, 28, 16, 38, 52, 216, 20, 28, 16, 38, 215, 212, 216, 20, 28, 16, 
+    222, 238, 28, 16, 218, 76, 28, 16, 210, 159, 28, 16, 225, 110, 28, 16, 
+    231, 30, 28, 16, 244, 25, 28, 16, 249, 146, 28, 16, 248, 86, 28, 16, 242, 
+    157, 228, 53, 219, 97, 28, 16, 242, 157, 228, 53, 228, 80, 219, 97, 28, 
+    16, 216, 1, 28, 16, 215, 95, 28, 16, 235, 200, 215, 95, 28, 16, 215, 96, 
+    219, 97, 28, 16, 215, 96, 214, 163, 28, 16, 226, 152, 218, 104, 28, 16, 
+    226, 152, 218, 101, 28, 16, 226, 152, 218, 100, 28, 16, 226, 152, 218, 
+    99, 28, 16, 226, 152, 218, 98, 28, 16, 226, 152, 218, 97, 28, 16, 226, 
+    152, 218, 96, 28, 16, 226, 152, 218, 95, 28, 16, 226, 152, 218, 94, 28, 
+    16, 226, 152, 218, 103, 28, 16, 226, 152, 218, 102, 28, 16, 241, 252, 28, 
+    16, 229, 110, 28, 16, 245, 151, 64, 218, 135, 28, 16, 248, 79, 219, 97, 
+    28, 16, 38, 124, 251, 177, 28, 16, 38, 120, 251, 177, 28, 16, 38, 242, 7, 
+    28, 16, 38, 219, 69, 225, 46, 28, 16, 225, 219, 79, 28, 16, 225, 219, 
+    120, 79, 28, 16, 163, 225, 219, 79, 28, 16, 242, 189, 214, 163, 28, 16, 
+    242, 189, 246, 114, 28, 16, 2, 244, 108, 28, 16, 248, 188, 28, 16, 248, 
+    189, 254, 163, 28, 16, 231, 138, 28, 16, 232, 135, 28, 16, 251, 151, 28, 
+    16, 220, 156, 211, 253, 28, 16, 220, 156, 251, 229, 28, 16, 230, 189, 28, 
+    16, 230, 190, 251, 229, 28, 16, 220, 150, 211, 253, 28, 16, 220, 150, 
+    251, 229, 28, 16, 243, 227, 211, 253, 28, 16, 243, 227, 251, 229, 28, 16, 
+    232, 136, 225, 183, 223, 64, 28, 16, 232, 136, 236, 11, 223, 64, 28, 16, 
+    251, 152, 223, 64, 28, 16, 220, 156, 223, 64, 28, 16, 230, 190, 223, 64, 
+    28, 16, 220, 150, 223, 64, 28, 16, 216, 250, 225, 181, 249, 115, 224, 
+    177, 225, 182, 28, 16, 216, 250, 225, 181, 249, 115, 224, 177, 236, 10, 
+    28, 16, 216, 250, 225, 181, 249, 115, 224, 177, 225, 183, 247, 219, 28, 
+    16, 216, 250, 236, 9, 249, 115, 224, 177, 225, 182, 28, 16, 216, 250, 
+    236, 9, 249, 115, 224, 177, 236, 10, 28, 16, 216, 250, 236, 9, 249, 115, 
+    224, 177, 236, 11, 247, 219, 28, 16, 216, 250, 236, 9, 249, 115, 224, 
+    177, 236, 11, 247, 218, 28, 16, 216, 250, 236, 9, 249, 115, 224, 177, 
+    236, 11, 247, 217, 28, 16, 249, 141, 28, 16, 242, 133, 251, 75, 250, 22, 
+    28, 16, 242, 133, 245, 15, 250, 22, 28, 16, 42, 253, 166, 28, 16, 213, 
+    151, 28, 16, 225, 17, 28, 16, 250, 13, 28, 16, 221, 205, 28, 16, 250, 17, 
+    28, 16, 216, 8, 28, 16, 224, 245, 28, 16, 224, 246, 244, 68, 28, 16, 221, 
+    206, 244, 68, 28, 16, 216, 9, 223, 61, 28, 16, 225, 166, 218, 67, 26, 
+    213, 137, 189, 217, 230, 26, 213, 137, 189, 217, 219, 26, 213, 137, 189, 
+    217, 209, 26, 213, 137, 189, 217, 202, 26, 213, 137, 189, 217, 194, 26, 
+    213, 137, 189, 217, 188, 26, 213, 137, 189, 217, 187, 26, 213, 137, 189, 
+    217, 186, 26, 213, 137, 189, 217, 185, 26, 213, 137, 189, 217, 229, 26, 
+    213, 137, 189, 217, 228, 26, 213, 137, 189, 217, 227, 26, 213, 137, 189, 
+    217, 226, 26, 213, 137, 189, 217, 225, 26, 213, 137, 189, 217, 224, 26, 
+    213, 137, 189, 217, 223, 26, 213, 137, 189, 217, 222, 26, 213, 137, 189, 
+    217, 221, 26, 213, 137, 189, 217, 220, 26, 213, 137, 189, 217, 218, 26, 
+    213, 137, 189, 217, 217, 26, 213, 137, 189, 217, 216, 26, 213, 137, 189, 
+    217, 215, 26, 213, 137, 189, 217, 214, 26, 213, 137, 189, 217, 193, 26, 
+    213, 137, 189, 217, 192, 26, 213, 137, 189, 217, 191, 26, 213, 137, 189, 
+    217, 190, 26, 213, 137, 189, 217, 189, 26, 235, 221, 189, 217, 230, 26, 
+    235, 221, 189, 217, 219, 26, 235, 221, 189, 217, 202, 26, 235, 221, 189, 
+    217, 194, 26, 235, 221, 189, 217, 187, 26, 235, 221, 189, 217, 186, 26, 
+    235, 221, 189, 217, 228, 26, 235, 221, 189, 217, 227, 26, 235, 221, 189, 
+    217, 226, 26, 235, 221, 189, 217, 225, 26, 235, 221, 189, 217, 222, 26, 
+    235, 221, 189, 217, 221, 26, 235, 221, 189, 217, 220, 26, 235, 221, 189, 
+    217, 215, 26, 235, 221, 189, 217, 214, 26, 235, 221, 189, 217, 213, 26, 
+    235, 221, 189, 217, 212, 26, 235, 221, 189, 217, 211, 26, 235, 221, 189, 
+    217, 210, 26, 235, 221, 189, 217, 208, 26, 235, 221, 189, 217, 207, 26, 
+    235, 221, 189, 217, 206, 26, 235, 221, 189, 217, 205, 26, 235, 221, 189, 
+    217, 204, 26, 235, 221, 189, 217, 203, 26, 235, 221, 189, 217, 201, 26, 
+    235, 221, 189, 217, 200, 26, 235, 221, 189, 217, 199, 26, 235, 221, 189, 
+    217, 198, 26, 235, 221, 189, 217, 197, 26, 235, 221, 189, 217, 196, 26, 
+    235, 221, 189, 217, 195, 26, 235, 221, 189, 217, 193, 26, 235, 221, 189, 
+    217, 192, 26, 235, 221, 189, 217, 191, 26, 235, 221, 189, 217, 190, 26, 
+    235, 221, 189, 217, 189, 38, 26, 28, 215, 209, 38, 26, 28, 216, 224, 38, 
+    26, 28, 225, 191, 26, 28, 233, 37, 230, 147, 31, 245, 231, 247, 232, 31, 
+    241, 229, 245, 231, 247, 232, 31, 240, 221, 245, 231, 247, 232, 31, 245, 
+    230, 241, 230, 247, 232, 31, 245, 230, 240, 220, 247, 232, 31, 245, 231, 
+    180, 31, 250, 182, 180, 31, 243, 236, 250, 43, 180, 31, 230, 182, 180, 
+    31, 252, 138, 180, 31, 234, 185, 219, 81, 180, 31, 249, 187, 180, 31, 
+    253, 241, 180, 31, 226, 167, 180, 31, 251, 161, 226, 134, 180, 31, 248, 
+    81, 177, 247, 187, 180, 31, 247, 184, 180, 31, 210, 222, 180, 31, 235, 
+    254, 180, 31, 225, 200, 180, 31, 223, 130, 180, 31, 249, 197, 180, 31, 
+    241, 67, 252, 192, 180, 31, 212, 59, 180, 31, 244, 47, 180, 31, 254, 255, 
+    180, 31, 223, 92, 180, 31, 223, 68, 180, 31, 245, 229, 180, 31, 235, 59, 
+    180, 31, 249, 192, 180, 31, 245, 150, 180, 31, 246, 60, 180, 31, 250, 
+    153, 180, 31, 248, 90, 180, 31, 23, 223, 67, 180, 31, 226, 85, 180, 31, 
+    233, 40, 180, 31, 250, 6, 180, 31, 234, 83, 180, 31, 243, 93, 180, 31, 
+    218, 114, 180, 31, 224, 133, 180, 31, 243, 235, 180, 31, 223, 69, 180, 
+    31, 233, 77, 177, 230, 162, 180, 31, 223, 65, 180, 31, 242, 175, 216, 43, 
+    231, 81, 180, 31, 245, 152, 180, 31, 218, 126, 180, 31, 242, 135, 180, 
+    31, 245, 144, 180, 31, 225, 239, 180, 31, 222, 228, 180, 31, 244, 67, 
+    180, 31, 214, 8, 177, 212, 44, 180, 31, 249, 201, 180, 31, 231, 94, 180, 
+    31, 245, 69, 180, 31, 214, 172, 180, 31, 247, 220, 180, 31, 250, 8, 230, 
+    115, 180, 31, 242, 113, 180, 31, 243, 94, 236, 6, 180, 31, 231, 146, 180, 
+    31, 255, 19, 180, 31, 245, 165, 180, 31, 246, 117, 180, 31, 212, 42, 180, 
+    31, 219, 152, 180, 31, 235, 229, 180, 31, 248, 50, 180, 31, 248, 168, 
+    180, 31, 247, 216, 180, 31, 245, 37, 180, 31, 220, 117, 180, 31, 218, 
+    130, 180, 31, 242, 9, 180, 31, 249, 220, 180, 31, 250, 3, 180, 31, 244, 
+    185, 180, 31, 254, 221, 180, 31, 249, 219, 180, 31, 226, 201, 216, 197, 
+    213, 242, 180, 31, 247, 240, 180, 31, 233, 130, 180, 31, 244, 21, 249, 
+    157, 222, 204, 214, 174, 21, 111, 249, 157, 222, 204, 214, 174, 21, 105, 
+    249, 157, 222, 204, 214, 174, 21, 158, 249, 157, 222, 204, 214, 174, 21, 
+    161, 249, 157, 222, 204, 214, 174, 21, 190, 249, 157, 222, 204, 214, 174, 
+    21, 195, 249, 157, 222, 204, 214, 174, 21, 199, 249, 157, 222, 204, 214, 
+    174, 21, 196, 249, 157, 222, 204, 214, 174, 21, 201, 249, 157, 222, 204, 
+    216, 244, 21, 111, 249, 157, 222, 204, 216, 244, 21, 105, 249, 157, 222, 
+    204, 216, 244, 21, 158, 249, 157, 222, 204, 216, 244, 21, 161, 249, 157, 
+    222, 204, 216, 244, 21, 190, 249, 157, 222, 204, 216, 244, 21, 195, 249, 
+    157, 222, 204, 216, 244, 21, 199, 249, 157, 222, 204, 216, 244, 21, 196, 
+    249, 157, 222, 204, 216, 244, 21, 201, 11, 23, 6, 61, 11, 23, 6, 253, 
+    166, 11, 23, 6, 251, 74, 11, 23, 6, 249, 68, 11, 23, 6, 76, 11, 23, 6, 
+    245, 14, 11, 23, 6, 243, 209, 11, 23, 6, 242, 67, 11, 23, 6, 74, 11, 23, 
+    6, 235, 150, 11, 23, 6, 235, 29, 11, 23, 6, 156, 11, 23, 6, 194, 11, 23, 
+    6, 230, 30, 11, 23, 6, 78, 11, 23, 6, 226, 109, 11, 23, 6, 224, 99, 11, 
+    23, 6, 153, 11, 23, 6, 222, 93, 11, 23, 6, 217, 153, 11, 23, 6, 69, 11, 
     23, 6, 214, 105, 11, 23, 6, 212, 98, 11, 23, 6, 211, 178, 11, 23, 6, 211, 
-    117, 11, 23, 6, 210, 159, 11, 23, 4, 61, 11, 23, 4, 253, 159, 11, 23, 4, 
-    251, 67, 11, 23, 4, 249, 61, 11, 23, 4, 75, 11, 23, 4, 245, 7, 11, 23, 4, 
-    243, 203, 11, 23, 4, 242, 61, 11, 23, 4, 73, 11, 23, 4, 235, 145, 11, 23, 
-    4, 235, 24, 11, 23, 4, 156, 11, 23, 4, 193, 11, 23, 4, 230, 26, 11, 23, 
-    4, 76, 11, 23, 4, 226, 106, 11, 23, 4, 224, 97, 11, 23, 4, 153, 11, 23, 
-    4, 222, 92, 11, 23, 4, 217, 153, 11, 23, 4, 70, 11, 23, 4, 214, 105, 11, 
-    23, 4, 212, 98, 11, 23, 4, 211, 178, 11, 23, 4, 211, 117, 11, 23, 4, 210, 
-    159, 11, 32, 6, 61, 11, 32, 6, 253, 159, 11, 32, 6, 251, 67, 11, 32, 6, 
-    249, 61, 11, 32, 6, 75, 11, 32, 6, 245, 7, 11, 32, 6, 243, 203, 11, 32, 
-    6, 242, 61, 11, 32, 6, 73, 11, 32, 6, 235, 145, 11, 32, 6, 235, 24, 11, 
-    32, 6, 156, 11, 32, 6, 193, 11, 32, 6, 230, 26, 11, 32, 6, 76, 11, 32, 6, 
-    226, 106, 11, 32, 6, 224, 97, 11, 32, 6, 153, 11, 32, 6, 222, 92, 11, 32, 
-    6, 217, 153, 11, 32, 6, 70, 11, 32, 6, 214, 105, 11, 32, 6, 212, 98, 11, 
-    32, 6, 211, 178, 11, 32, 6, 211, 117, 11, 32, 6, 210, 159, 11, 32, 4, 61, 
-    11, 32, 4, 253, 159, 11, 32, 4, 251, 67, 11, 32, 4, 249, 61, 11, 32, 4, 
-    75, 11, 32, 4, 245, 7, 11, 32, 4, 243, 203, 11, 32, 4, 73, 11, 32, 4, 
-    235, 145, 11, 32, 4, 235, 24, 11, 32, 4, 156, 11, 32, 4, 193, 11, 32, 4, 
-    230, 26, 11, 32, 4, 76, 11, 32, 4, 226, 106, 11, 32, 4, 224, 97, 11, 32, 
-    4, 153, 11, 32, 4, 222, 92, 11, 32, 4, 217, 153, 11, 32, 4, 70, 11, 32, 
-    4, 214, 105, 11, 32, 4, 212, 98, 11, 32, 4, 211, 178, 11, 32, 4, 211, 
-    117, 11, 32, 4, 210, 159, 11, 23, 32, 6, 61, 11, 23, 32, 6, 253, 159, 11, 
-    23, 32, 6, 251, 67, 11, 23, 32, 6, 249, 61, 11, 23, 32, 6, 75, 11, 23, 
-    32, 6, 245, 7, 11, 23, 32, 6, 243, 203, 11, 23, 32, 6, 242, 61, 11, 23, 
-    32, 6, 73, 11, 23, 32, 6, 235, 145, 11, 23, 32, 6, 235, 24, 11, 23, 32, 
-    6, 156, 11, 23, 32, 6, 193, 11, 23, 32, 6, 230, 26, 11, 23, 32, 6, 76, 
-    11, 23, 32, 6, 226, 106, 11, 23, 32, 6, 224, 97, 11, 23, 32, 6, 153, 11, 
-    23, 32, 6, 222, 92, 11, 23, 32, 6, 217, 153, 11, 23, 32, 6, 70, 11, 23, 
-    32, 6, 214, 105, 11, 23, 32, 6, 212, 98, 11, 23, 32, 6, 211, 178, 11, 23, 
-    32, 6, 211, 117, 11, 23, 32, 6, 210, 159, 11, 23, 32, 4, 61, 11, 23, 32, 
-    4, 253, 159, 11, 23, 32, 4, 251, 67, 11, 23, 32, 4, 249, 61, 11, 23, 32, 
-    4, 75, 11, 23, 32, 4, 245, 7, 11, 23, 32, 4, 243, 203, 11, 23, 32, 4, 
-    242, 61, 11, 23, 32, 4, 73, 11, 23, 32, 4, 235, 145, 11, 23, 32, 4, 235, 
-    24, 11, 23, 32, 4, 156, 11, 23, 32, 4, 193, 11, 23, 32, 4, 230, 26, 11, 
-    23, 32, 4, 76, 11, 23, 32, 4, 226, 106, 11, 23, 32, 4, 224, 97, 11, 23, 
-    32, 4, 153, 11, 23, 32, 4, 222, 92, 11, 23, 32, 4, 217, 153, 11, 23, 32, 
-    4, 70, 11, 23, 32, 4, 214, 105, 11, 23, 32, 4, 212, 98, 11, 23, 32, 4, 
-    211, 178, 11, 23, 32, 4, 211, 117, 11, 23, 32, 4, 210, 159, 11, 119, 6, 
-    61, 11, 119, 6, 251, 67, 11, 119, 6, 249, 61, 11, 119, 6, 243, 203, 11, 
-    119, 6, 235, 145, 11, 119, 6, 235, 24, 11, 119, 6, 230, 26, 11, 119, 6, 
-    76, 11, 119, 6, 226, 106, 11, 119, 6, 224, 97, 11, 119, 6, 222, 92, 11, 
-    119, 6, 217, 153, 11, 119, 6, 70, 11, 119, 6, 214, 105, 11, 119, 6, 212, 
-    98, 11, 119, 6, 211, 178, 11, 119, 6, 211, 117, 11, 119, 6, 210, 159, 11, 
-    119, 4, 61, 11, 119, 4, 253, 159, 11, 119, 4, 251, 67, 11, 119, 4, 249, 
-    61, 11, 119, 4, 245, 7, 11, 119, 4, 242, 61, 11, 119, 4, 73, 11, 119, 4, 
-    235, 145, 11, 119, 4, 235, 24, 11, 119, 4, 156, 11, 119, 4, 193, 11, 119, 
-    4, 230, 26, 11, 119, 4, 226, 106, 11, 119, 4, 224, 97, 11, 119, 4, 153, 
-    11, 119, 4, 222, 92, 11, 119, 4, 217, 153, 11, 119, 4, 70, 11, 119, 4, 
-    214, 105, 11, 119, 4, 212, 98, 11, 119, 4, 211, 178, 11, 119, 4, 211, 
-    117, 11, 119, 4, 210, 159, 11, 23, 119, 6, 61, 11, 23, 119, 6, 253, 159, 
-    11, 23, 119, 6, 251, 67, 11, 23, 119, 6, 249, 61, 11, 23, 119, 6, 75, 11, 
-    23, 119, 6, 245, 7, 11, 23, 119, 6, 243, 203, 11, 23, 119, 6, 242, 61, 
-    11, 23, 119, 6, 73, 11, 23, 119, 6, 235, 145, 11, 23, 119, 6, 235, 24, 
-    11, 23, 119, 6, 156, 11, 23, 119, 6, 193, 11, 23, 119, 6, 230, 26, 11, 
-    23, 119, 6, 76, 11, 23, 119, 6, 226, 106, 11, 23, 119, 6, 224, 97, 11, 
-    23, 119, 6, 153, 11, 23, 119, 6, 222, 92, 11, 23, 119, 6, 217, 153, 11, 
-    23, 119, 6, 70, 11, 23, 119, 6, 214, 105, 11, 23, 119, 6, 212, 98, 11, 
-    23, 119, 6, 211, 178, 11, 23, 119, 6, 211, 117, 11, 23, 119, 6, 210, 159, 
-    11, 23, 119, 4, 61, 11, 23, 119, 4, 253, 159, 11, 23, 119, 4, 251, 67, 
-    11, 23, 119, 4, 249, 61, 11, 23, 119, 4, 75, 11, 23, 119, 4, 245, 7, 11, 
-    23, 119, 4, 243, 203, 11, 23, 119, 4, 242, 61, 11, 23, 119, 4, 73, 11, 
-    23, 119, 4, 235, 145, 11, 23, 119, 4, 235, 24, 11, 23, 119, 4, 156, 11, 
-    23, 119, 4, 193, 11, 23, 119, 4, 230, 26, 11, 23, 119, 4, 76, 11, 23, 
-    119, 4, 226, 106, 11, 23, 119, 4, 224, 97, 11, 23, 119, 4, 153, 11, 23, 
-    119, 4, 222, 92, 11, 23, 119, 4, 217, 153, 11, 23, 119, 4, 70, 11, 23, 
-    119, 4, 214, 105, 11, 23, 119, 4, 212, 98, 11, 23, 119, 4, 211, 178, 11, 
-    23, 119, 4, 211, 117, 11, 23, 119, 4, 210, 159, 11, 133, 6, 61, 11, 133, 
-    6, 253, 159, 11, 133, 6, 249, 61, 11, 133, 6, 75, 11, 133, 6, 245, 7, 11, 
-    133, 6, 243, 203, 11, 133, 6, 235, 145, 11, 133, 6, 235, 24, 11, 133, 6, 
-    156, 11, 133, 6, 193, 11, 133, 6, 230, 26, 11, 133, 6, 76, 11, 133, 6, 
-    226, 106, 11, 133, 6, 224, 97, 11, 133, 6, 222, 92, 11, 133, 6, 217, 153, 
-    11, 133, 6, 70, 11, 133, 6, 214, 105, 11, 133, 6, 212, 98, 11, 133, 6, 
-    211, 178, 11, 133, 6, 211, 117, 11, 133, 4, 61, 11, 133, 4, 253, 159, 11, 
-    133, 4, 251, 67, 11, 133, 4, 249, 61, 11, 133, 4, 75, 11, 133, 4, 245, 7, 
-    11, 133, 4, 243, 203, 11, 133, 4, 242, 61, 11, 133, 4, 73, 11, 133, 4, 
-    235, 145, 11, 133, 4, 235, 24, 11, 133, 4, 156, 11, 133, 4, 193, 11, 133, 
-    4, 230, 26, 11, 133, 4, 76, 11, 133, 4, 226, 106, 11, 133, 4, 224, 97, 
-    11, 133, 4, 153, 11, 133, 4, 222, 92, 11, 133, 4, 217, 153, 11, 133, 4, 
-    70, 11, 133, 4, 214, 105, 11, 133, 4, 212, 98, 11, 133, 4, 211, 178, 11, 
-    133, 4, 211, 117, 11, 133, 4, 210, 159, 11, 139, 6, 61, 11, 139, 6, 253, 
-    159, 11, 139, 6, 249, 61, 11, 139, 6, 75, 11, 139, 6, 245, 7, 11, 139, 6, 
-    243, 203, 11, 139, 6, 73, 11, 139, 6, 235, 145, 11, 139, 6, 235, 24, 11, 
-    139, 6, 156, 11, 139, 6, 193, 11, 139, 6, 76, 11, 139, 6, 222, 92, 11, 
-    139, 6, 217, 153, 11, 139, 6, 70, 11, 139, 6, 214, 105, 11, 139, 6, 212, 
-    98, 11, 139, 6, 211, 178, 11, 139, 6, 211, 117, 11, 139, 4, 61, 11, 139, 
-    4, 253, 159, 11, 139, 4, 251, 67, 11, 139, 4, 249, 61, 11, 139, 4, 75, 
-    11, 139, 4, 245, 7, 11, 139, 4, 243, 203, 11, 139, 4, 242, 61, 11, 139, 
-    4, 73, 11, 139, 4, 235, 145, 11, 139, 4, 235, 24, 11, 139, 4, 156, 11, 
-    139, 4, 193, 11, 139, 4, 230, 26, 11, 139, 4, 76, 11, 139, 4, 226, 106, 
-    11, 139, 4, 224, 97, 11, 139, 4, 153, 11, 139, 4, 222, 92, 11, 139, 4, 
-    217, 153, 11, 139, 4, 70, 11, 139, 4, 214, 105, 11, 139, 4, 212, 98, 11, 
-    139, 4, 211, 178, 11, 139, 4, 211, 117, 11, 139, 4, 210, 159, 11, 23, 
-    133, 6, 61, 11, 23, 133, 6, 253, 159, 11, 23, 133, 6, 251, 67, 11, 23, 
-    133, 6, 249, 61, 11, 23, 133, 6, 75, 11, 23, 133, 6, 245, 7, 11, 23, 133, 
-    6, 243, 203, 11, 23, 133, 6, 242, 61, 11, 23, 133, 6, 73, 11, 23, 133, 6, 
-    235, 145, 11, 23, 133, 6, 235, 24, 11, 23, 133, 6, 156, 11, 23, 133, 6, 
-    193, 11, 23, 133, 6, 230, 26, 11, 23, 133, 6, 76, 11, 23, 133, 6, 226, 
-    106, 11, 23, 133, 6, 224, 97, 11, 23, 133, 6, 153, 11, 23, 133, 6, 222, 
-    92, 11, 23, 133, 6, 217, 153, 11, 23, 133, 6, 70, 11, 23, 133, 6, 214, 
-    105, 11, 23, 133, 6, 212, 98, 11, 23, 133, 6, 211, 178, 11, 23, 133, 6, 
-    211, 117, 11, 23, 133, 6, 210, 159, 11, 23, 133, 4, 61, 11, 23, 133, 4, 
-    253, 159, 11, 23, 133, 4, 251, 67, 11, 23, 133, 4, 249, 61, 11, 23, 133, 
-    4, 75, 11, 23, 133, 4, 245, 7, 11, 23, 133, 4, 243, 203, 11, 23, 133, 4, 
-    242, 61, 11, 23, 133, 4, 73, 11, 23, 133, 4, 235, 145, 11, 23, 133, 4, 
-    235, 24, 11, 23, 133, 4, 156, 11, 23, 133, 4, 193, 11, 23, 133, 4, 230, 
-    26, 11, 23, 133, 4, 76, 11, 23, 133, 4, 226, 106, 11, 23, 133, 4, 224, 
-    97, 11, 23, 133, 4, 153, 11, 23, 133, 4, 222, 92, 11, 23, 133, 4, 217, 
-    153, 11, 23, 133, 4, 70, 11, 23, 133, 4, 214, 105, 11, 23, 133, 4, 212, 
-    98, 11, 23, 133, 4, 211, 178, 11, 23, 133, 4, 211, 117, 11, 23, 133, 4, 
-    210, 159, 11, 35, 6, 61, 11, 35, 6, 253, 159, 11, 35, 6, 251, 67, 11, 35, 
-    6, 249, 61, 11, 35, 6, 75, 11, 35, 6, 245, 7, 11, 35, 6, 243, 203, 11, 
-    35, 6, 242, 61, 11, 35, 6, 73, 11, 35, 6, 235, 145, 11, 35, 6, 235, 24, 
-    11, 35, 6, 156, 11, 35, 6, 193, 11, 35, 6, 230, 26, 11, 35, 6, 76, 11, 
-    35, 6, 226, 106, 11, 35, 6, 224, 97, 11, 35, 6, 153, 11, 35, 6, 222, 92, 
-    11, 35, 6, 217, 153, 11, 35, 6, 70, 11, 35, 6, 214, 105, 11, 35, 6, 212, 
-    98, 11, 35, 6, 211, 178, 11, 35, 6, 211, 117, 11, 35, 6, 210, 159, 11, 
-    35, 4, 61, 11, 35, 4, 253, 159, 11, 35, 4, 251, 67, 11, 35, 4, 249, 61, 
-    11, 35, 4, 75, 11, 35, 4, 245, 7, 11, 35, 4, 243, 203, 11, 35, 4, 242, 
-    61, 11, 35, 4, 73, 11, 35, 4, 235, 145, 11, 35, 4, 235, 24, 11, 35, 4, 
-    156, 11, 35, 4, 193, 11, 35, 4, 230, 26, 11, 35, 4, 76, 11, 35, 4, 226, 
-    106, 11, 35, 4, 224, 97, 11, 35, 4, 153, 11, 35, 4, 222, 92, 11, 35, 4, 
-    217, 153, 11, 35, 4, 70, 11, 35, 4, 214, 105, 11, 35, 4, 212, 98, 11, 35, 
-    4, 211, 178, 11, 35, 4, 211, 117, 11, 35, 4, 210, 159, 11, 35, 23, 6, 61, 
-    11, 35, 23, 6, 253, 159, 11, 35, 23, 6, 251, 67, 11, 35, 23, 6, 249, 61, 
-    11, 35, 23, 6, 75, 11, 35, 23, 6, 245, 7, 11, 35, 23, 6, 243, 203, 11, 
-    35, 23, 6, 242, 61, 11, 35, 23, 6, 73, 11, 35, 23, 6, 235, 145, 11, 35, 
-    23, 6, 235, 24, 11, 35, 23, 6, 156, 11, 35, 23, 6, 193, 11, 35, 23, 6, 
-    230, 26, 11, 35, 23, 6, 76, 11, 35, 23, 6, 226, 106, 11, 35, 23, 6, 224, 
-    97, 11, 35, 23, 6, 153, 11, 35, 23, 6, 222, 92, 11, 35, 23, 6, 217, 153, 
-    11, 35, 23, 6, 70, 11, 35, 23, 6, 214, 105, 11, 35, 23, 6, 212, 98, 11, 
-    35, 23, 6, 211, 178, 11, 35, 23, 6, 211, 117, 11, 35, 23, 6, 210, 159, 
-    11, 35, 23, 4, 61, 11, 35, 23, 4, 253, 159, 11, 35, 23, 4, 251, 67, 11, 
-    35, 23, 4, 249, 61, 11, 35, 23, 4, 75, 11, 35, 23, 4, 245, 7, 11, 35, 23, 
-    4, 243, 203, 11, 35, 23, 4, 242, 61, 11, 35, 23, 4, 73, 11, 35, 23, 4, 
-    235, 145, 11, 35, 23, 4, 235, 24, 11, 35, 23, 4, 156, 11, 35, 23, 4, 193, 
-    11, 35, 23, 4, 230, 26, 11, 35, 23, 4, 76, 11, 35, 23, 4, 226, 106, 11, 
-    35, 23, 4, 224, 97, 11, 35, 23, 4, 153, 11, 35, 23, 4, 222, 92, 11, 35, 
-    23, 4, 217, 153, 11, 35, 23, 4, 70, 11, 35, 23, 4, 214, 105, 11, 35, 23, 
-    4, 212, 98, 11, 35, 23, 4, 211, 178, 11, 35, 23, 4, 211, 117, 11, 35, 23, 
-    4, 210, 159, 11, 35, 32, 6, 61, 11, 35, 32, 6, 253, 159, 11, 35, 32, 6, 
-    251, 67, 11, 35, 32, 6, 249, 61, 11, 35, 32, 6, 75, 11, 35, 32, 6, 245, 
-    7, 11, 35, 32, 6, 243, 203, 11, 35, 32, 6, 242, 61, 11, 35, 32, 6, 73, 
-    11, 35, 32, 6, 235, 145, 11, 35, 32, 6, 235, 24, 11, 35, 32, 6, 156, 11, 
-    35, 32, 6, 193, 11, 35, 32, 6, 230, 26, 11, 35, 32, 6, 76, 11, 35, 32, 6, 
-    226, 106, 11, 35, 32, 6, 224, 97, 11, 35, 32, 6, 153, 11, 35, 32, 6, 222, 
-    92, 11, 35, 32, 6, 217, 153, 11, 35, 32, 6, 70, 11, 35, 32, 6, 214, 105, 
-    11, 35, 32, 6, 212, 98, 11, 35, 32, 6, 211, 178, 11, 35, 32, 6, 211, 117, 
-    11, 35, 32, 6, 210, 159, 11, 35, 32, 4, 61, 11, 35, 32, 4, 253, 159, 11, 
-    35, 32, 4, 251, 67, 11, 35, 32, 4, 249, 61, 11, 35, 32, 4, 75, 11, 35, 
-    32, 4, 245, 7, 11, 35, 32, 4, 243, 203, 11, 35, 32, 4, 242, 61, 11, 35, 
-    32, 4, 73, 11, 35, 32, 4, 235, 145, 11, 35, 32, 4, 235, 24, 11, 35, 32, 
-    4, 156, 11, 35, 32, 4, 193, 11, 35, 32, 4, 230, 26, 11, 35, 32, 4, 76, 
-    11, 35, 32, 4, 226, 106, 11, 35, 32, 4, 224, 97, 11, 35, 32, 4, 153, 11, 
-    35, 32, 4, 222, 92, 11, 35, 32, 4, 217, 153, 11, 35, 32, 4, 70, 11, 35, 
-    32, 4, 214, 105, 11, 35, 32, 4, 212, 98, 11, 35, 32, 4, 211, 178, 11, 35, 
-    32, 4, 211, 117, 11, 35, 32, 4, 210, 159, 11, 35, 23, 32, 6, 61, 11, 35, 
-    23, 32, 6, 253, 159, 11, 35, 23, 32, 6, 251, 67, 11, 35, 23, 32, 6, 249, 
-    61, 11, 35, 23, 32, 6, 75, 11, 35, 23, 32, 6, 245, 7, 11, 35, 23, 32, 6, 
-    243, 203, 11, 35, 23, 32, 6, 242, 61, 11, 35, 23, 32, 6, 73, 11, 35, 23, 
-    32, 6, 235, 145, 11, 35, 23, 32, 6, 235, 24, 11, 35, 23, 32, 6, 156, 11, 
-    35, 23, 32, 6, 193, 11, 35, 23, 32, 6, 230, 26, 11, 35, 23, 32, 6, 76, 
-    11, 35, 23, 32, 6, 226, 106, 11, 35, 23, 32, 6, 224, 97, 11, 35, 23, 32, 
-    6, 153, 11, 35, 23, 32, 6, 222, 92, 11, 35, 23, 32, 6, 217, 153, 11, 35, 
-    23, 32, 6, 70, 11, 35, 23, 32, 6, 214, 105, 11, 35, 23, 32, 6, 212, 98, 
-    11, 35, 23, 32, 6, 211, 178, 11, 35, 23, 32, 6, 211, 117, 11, 35, 23, 32, 
-    6, 210, 159, 11, 35, 23, 32, 4, 61, 11, 35, 23, 32, 4, 253, 159, 11, 35, 
-    23, 32, 4, 251, 67, 11, 35, 23, 32, 4, 249, 61, 11, 35, 23, 32, 4, 75, 
-    11, 35, 23, 32, 4, 245, 7, 11, 35, 23, 32, 4, 243, 203, 11, 35, 23, 32, 
-    4, 242, 61, 11, 35, 23, 32, 4, 73, 11, 35, 23, 32, 4, 235, 145, 11, 35, 
-    23, 32, 4, 235, 24, 11, 35, 23, 32, 4, 156, 11, 35, 23, 32, 4, 193, 11, 
-    35, 23, 32, 4, 230, 26, 11, 35, 23, 32, 4, 76, 11, 35, 23, 32, 4, 226, 
-    106, 11, 35, 23, 32, 4, 224, 97, 11, 35, 23, 32, 4, 153, 11, 35, 23, 32, 
-    4, 222, 92, 11, 35, 23, 32, 4, 217, 153, 11, 35, 23, 32, 4, 70, 11, 35, 
-    23, 32, 4, 214, 105, 11, 35, 23, 32, 4, 212, 98, 11, 35, 23, 32, 4, 211, 
-    178, 11, 35, 23, 32, 4, 211, 117, 11, 35, 23, 32, 4, 210, 159, 11, 230, 
-    139, 6, 61, 11, 230, 139, 6, 253, 159, 11, 230, 139, 6, 251, 67, 11, 230, 
-    139, 6, 249, 61, 11, 230, 139, 6, 75, 11, 230, 139, 6, 245, 7, 11, 230, 
-    139, 6, 243, 203, 11, 230, 139, 6, 242, 61, 11, 230, 139, 6, 73, 11, 230, 
-    139, 6, 235, 145, 11, 230, 139, 6, 235, 24, 11, 230, 139, 6, 156, 11, 
-    230, 139, 6, 193, 11, 230, 139, 6, 230, 26, 11, 230, 139, 6, 76, 11, 230, 
-    139, 6, 226, 106, 11, 230, 139, 6, 224, 97, 11, 230, 139, 6, 153, 11, 
-    230, 139, 6, 222, 92, 11, 230, 139, 6, 217, 153, 11, 230, 139, 6, 70, 11, 
-    230, 139, 6, 214, 105, 11, 230, 139, 6, 212, 98, 11, 230, 139, 6, 211, 
-    178, 11, 230, 139, 6, 211, 117, 11, 230, 139, 6, 210, 159, 11, 230, 139, 
-    4, 61, 11, 230, 139, 4, 253, 159, 11, 230, 139, 4, 251, 67, 11, 230, 139, 
-    4, 249, 61, 11, 230, 139, 4, 75, 11, 230, 139, 4, 245, 7, 11, 230, 139, 
-    4, 243, 203, 11, 230, 139, 4, 242, 61, 11, 230, 139, 4, 73, 11, 230, 139, 
-    4, 235, 145, 11, 230, 139, 4, 235, 24, 11, 230, 139, 4, 156, 11, 230, 
-    139, 4, 193, 11, 230, 139, 4, 230, 26, 11, 230, 139, 4, 76, 11, 230, 139, 
-    4, 226, 106, 11, 230, 139, 4, 224, 97, 11, 230, 139, 4, 153, 11, 230, 
-    139, 4, 222, 92, 11, 230, 139, 4, 217, 153, 11, 230, 139, 4, 70, 11, 230, 
-    139, 4, 214, 105, 11, 230, 139, 4, 212, 98, 11, 230, 139, 4, 211, 178, 
-    11, 230, 139, 4, 211, 117, 11, 230, 139, 4, 210, 159, 11, 32, 4, 247, 
-    120, 73, 11, 32, 4, 247, 120, 235, 145, 11, 23, 6, 254, 144, 11, 23, 6, 
-    252, 27, 11, 23, 6, 243, 108, 11, 23, 6, 248, 55, 11, 23, 6, 245, 101, 
-    11, 23, 6, 210, 85, 11, 23, 6, 245, 64, 11, 23, 6, 216, 180, 11, 23, 6, 
-    235, 186, 11, 23, 6, 234, 223, 11, 23, 6, 233, 99, 11, 23, 6, 230, 103, 
-    11, 23, 6, 227, 238, 11, 23, 6, 211, 157, 11, 23, 6, 226, 200, 11, 23, 6, 
-    225, 109, 11, 23, 6, 223, 38, 11, 23, 6, 216, 181, 87, 11, 23, 6, 219, 
-    178, 11, 23, 6, 217, 42, 11, 23, 6, 214, 157, 11, 23, 6, 225, 134, 11, 
-    23, 6, 250, 111, 11, 23, 6, 224, 162, 11, 23, 6, 226, 202, 11, 23, 229, 
-    222, 11, 23, 4, 254, 144, 11, 23, 4, 252, 27, 11, 23, 4, 243, 108, 11, 
-    23, 4, 248, 55, 11, 23, 4, 245, 101, 11, 23, 4, 210, 85, 11, 23, 4, 245, 
-    64, 11, 23, 4, 216, 180, 11, 23, 4, 235, 186, 11, 23, 4, 234, 223, 11, 
-    23, 4, 233, 99, 11, 23, 4, 230, 103, 11, 23, 4, 227, 238, 11, 23, 4, 211, 
-    157, 11, 23, 4, 226, 200, 11, 23, 4, 225, 109, 11, 23, 4, 223, 38, 11, 
-    23, 4, 40, 219, 178, 11, 23, 4, 219, 178, 11, 23, 4, 217, 42, 11, 23, 4, 
-    214, 157, 11, 23, 4, 225, 134, 11, 23, 4, 250, 111, 11, 23, 4, 224, 162, 
-    11, 23, 4, 226, 202, 11, 23, 225, 254, 247, 234, 11, 23, 245, 102, 87, 
-    11, 23, 216, 181, 87, 11, 23, 234, 224, 87, 11, 23, 225, 135, 87, 11, 23, 
-    223, 39, 87, 11, 23, 225, 110, 87, 11, 32, 6, 254, 144, 11, 32, 6, 252, 
-    27, 11, 32, 6, 243, 108, 11, 32, 6, 248, 55, 11, 32, 6, 245, 101, 11, 32, 
-    6, 210, 85, 11, 32, 6, 245, 64, 11, 32, 6, 216, 180, 11, 32, 6, 235, 186, 
-    11, 32, 6, 234, 223, 11, 32, 6, 233, 99, 11, 32, 6, 230, 103, 11, 32, 6, 
-    227, 238, 11, 32, 6, 211, 157, 11, 32, 6, 226, 200, 11, 32, 6, 225, 109, 
-    11, 32, 6, 223, 38, 11, 32, 6, 216, 181, 87, 11, 32, 6, 219, 178, 11, 32, 
-    6, 217, 42, 11, 32, 6, 214, 157, 11, 32, 6, 225, 134, 11, 32, 6, 250, 
-    111, 11, 32, 6, 224, 162, 11, 32, 6, 226, 202, 11, 32, 229, 222, 11, 32, 
-    4, 254, 144, 11, 32, 4, 252, 27, 11, 32, 4, 243, 108, 11, 32, 4, 248, 55, 
-    11, 32, 4, 245, 101, 11, 32, 4, 210, 85, 11, 32, 4, 245, 64, 11, 32, 4, 
-    216, 180, 11, 32, 4, 235, 186, 11, 32, 4, 234, 223, 11, 32, 4, 233, 99, 
-    11, 32, 4, 230, 103, 11, 32, 4, 227, 238, 11, 32, 4, 211, 157, 11, 32, 4, 
-    226, 200, 11, 32, 4, 225, 109, 11, 32, 4, 223, 38, 11, 32, 4, 40, 219, 
-    178, 11, 32, 4, 219, 178, 11, 32, 4, 217, 42, 11, 32, 4, 214, 157, 11, 
-    32, 4, 225, 134, 11, 32, 4, 250, 111, 11, 32, 4, 224, 162, 11, 32, 4, 
-    226, 202, 11, 32, 225, 254, 247, 234, 11, 32, 245, 102, 87, 11, 32, 216, 
-    181, 87, 11, 32, 234, 224, 87, 11, 32, 225, 135, 87, 11, 32, 223, 39, 87, 
-    11, 32, 225, 110, 87, 11, 23, 32, 6, 254, 144, 11, 23, 32, 6, 252, 27, 
-    11, 23, 32, 6, 243, 108, 11, 23, 32, 6, 248, 55, 11, 23, 32, 6, 245, 101, 
-    11, 23, 32, 6, 210, 85, 11, 23, 32, 6, 245, 64, 11, 23, 32, 6, 216, 180, 
-    11, 23, 32, 6, 235, 186, 11, 23, 32, 6, 234, 223, 11, 23, 32, 6, 233, 99, 
-    11, 23, 32, 6, 230, 103, 11, 23, 32, 6, 227, 238, 11, 23, 32, 6, 211, 
-    157, 11, 23, 32, 6, 226, 200, 11, 23, 32, 6, 225, 109, 11, 23, 32, 6, 
-    223, 38, 11, 23, 32, 6, 216, 181, 87, 11, 23, 32, 6, 219, 178, 11, 23, 
-    32, 6, 217, 42, 11, 23, 32, 6, 214, 157, 11, 23, 32, 6, 225, 134, 11, 23, 
-    32, 6, 250, 111, 11, 23, 32, 6, 224, 162, 11, 23, 32, 6, 226, 202, 11, 
-    23, 32, 229, 222, 11, 23, 32, 4, 254, 144, 11, 23, 32, 4, 252, 27, 11, 
-    23, 32, 4, 243, 108, 11, 23, 32, 4, 248, 55, 11, 23, 32, 4, 245, 101, 11, 
-    23, 32, 4, 210, 85, 11, 23, 32, 4, 245, 64, 11, 23, 32, 4, 216, 180, 11, 
-    23, 32, 4, 235, 186, 11, 23, 32, 4, 234, 223, 11, 23, 32, 4, 233, 99, 11, 
-    23, 32, 4, 230, 103, 11, 23, 32, 4, 227, 238, 11, 23, 32, 4, 211, 157, 
-    11, 23, 32, 4, 226, 200, 11, 23, 32, 4, 225, 109, 11, 23, 32, 4, 223, 38, 
-    11, 23, 32, 4, 40, 219, 178, 11, 23, 32, 4, 219, 178, 11, 23, 32, 4, 217, 
-    42, 11, 23, 32, 4, 214, 157, 11, 23, 32, 4, 225, 134, 11, 23, 32, 4, 250, 
-    111, 11, 23, 32, 4, 224, 162, 11, 23, 32, 4, 226, 202, 11, 23, 32, 225, 
-    254, 247, 234, 11, 23, 32, 245, 102, 87, 11, 23, 32, 216, 181, 87, 11, 
-    23, 32, 234, 224, 87, 11, 23, 32, 225, 135, 87, 11, 23, 32, 223, 39, 87, 
-    11, 23, 32, 225, 110, 87, 11, 35, 23, 6, 254, 144, 11, 35, 23, 6, 252, 
-    27, 11, 35, 23, 6, 243, 108, 11, 35, 23, 6, 248, 55, 11, 35, 23, 6, 245, 
-    101, 11, 35, 23, 6, 210, 85, 11, 35, 23, 6, 245, 64, 11, 35, 23, 6, 216, 
-    180, 11, 35, 23, 6, 235, 186, 11, 35, 23, 6, 234, 223, 11, 35, 23, 6, 
-    233, 99, 11, 35, 23, 6, 230, 103, 11, 35, 23, 6, 227, 238, 11, 35, 23, 6, 
-    211, 157, 11, 35, 23, 6, 226, 200, 11, 35, 23, 6, 225, 109, 11, 35, 23, 
-    6, 223, 38, 11, 35, 23, 6, 216, 181, 87, 11, 35, 23, 6, 219, 178, 11, 35, 
-    23, 6, 217, 42, 11, 35, 23, 6, 214, 157, 11, 35, 23, 6, 225, 134, 11, 35, 
-    23, 6, 250, 111, 11, 35, 23, 6, 224, 162, 11, 35, 23, 6, 226, 202, 11, 
-    35, 23, 229, 222, 11, 35, 23, 4, 254, 144, 11, 35, 23, 4, 252, 27, 11, 
-    35, 23, 4, 243, 108, 11, 35, 23, 4, 248, 55, 11, 35, 23, 4, 245, 101, 11, 
-    35, 23, 4, 210, 85, 11, 35, 23, 4, 245, 64, 11, 35, 23, 4, 216, 180, 11, 
-    35, 23, 4, 235, 186, 11, 35, 23, 4, 234, 223, 11, 35, 23, 4, 233, 99, 11, 
-    35, 23, 4, 230, 103, 11, 35, 23, 4, 227, 238, 11, 35, 23, 4, 211, 157, 
-    11, 35, 23, 4, 226, 200, 11, 35, 23, 4, 225, 109, 11, 35, 23, 4, 223, 38, 
-    11, 35, 23, 4, 40, 219, 178, 11, 35, 23, 4, 219, 178, 11, 35, 23, 4, 217, 
-    42, 11, 35, 23, 4, 214, 157, 11, 35, 23, 4, 225, 134, 11, 35, 23, 4, 250, 
-    111, 11, 35, 23, 4, 224, 162, 11, 35, 23, 4, 226, 202, 11, 35, 23, 225, 
-    254, 247, 234, 11, 35, 23, 245, 102, 87, 11, 35, 23, 216, 181, 87, 11, 
-    35, 23, 234, 224, 87, 11, 35, 23, 225, 135, 87, 11, 35, 23, 223, 39, 87, 
-    11, 35, 23, 225, 110, 87, 11, 35, 23, 32, 6, 254, 144, 11, 35, 23, 32, 6, 
-    252, 27, 11, 35, 23, 32, 6, 243, 108, 11, 35, 23, 32, 6, 248, 55, 11, 35, 
-    23, 32, 6, 245, 101, 11, 35, 23, 32, 6, 210, 85, 11, 35, 23, 32, 6, 245, 
-    64, 11, 35, 23, 32, 6, 216, 180, 11, 35, 23, 32, 6, 235, 186, 11, 35, 23, 
-    32, 6, 234, 223, 11, 35, 23, 32, 6, 233, 99, 11, 35, 23, 32, 6, 230, 103, 
-    11, 35, 23, 32, 6, 227, 238, 11, 35, 23, 32, 6, 211, 157, 11, 35, 23, 32, 
-    6, 226, 200, 11, 35, 23, 32, 6, 225, 109, 11, 35, 23, 32, 6, 223, 38, 11, 
-    35, 23, 32, 6, 216, 181, 87, 11, 35, 23, 32, 6, 219, 178, 11, 35, 23, 32, 
-    6, 217, 42, 11, 35, 23, 32, 6, 214, 157, 11, 35, 23, 32, 6, 225, 134, 11, 
-    35, 23, 32, 6, 250, 111, 11, 35, 23, 32, 6, 224, 162, 11, 35, 23, 32, 6, 
-    226, 202, 11, 35, 23, 32, 229, 222, 11, 35, 23, 32, 4, 254, 144, 11, 35, 
-    23, 32, 4, 252, 27, 11, 35, 23, 32, 4, 243, 108, 11, 35, 23, 32, 4, 248, 
-    55, 11, 35, 23, 32, 4, 245, 101, 11, 35, 23, 32, 4, 210, 85, 11, 35, 23, 
-    32, 4, 245, 64, 11, 35, 23, 32, 4, 216, 180, 11, 35, 23, 32, 4, 235, 186, 
-    11, 35, 23, 32, 4, 234, 223, 11, 35, 23, 32, 4, 233, 99, 11, 35, 23, 32, 
-    4, 230, 103, 11, 35, 23, 32, 4, 227, 238, 11, 35, 23, 32, 4, 211, 157, 
-    11, 35, 23, 32, 4, 226, 200, 11, 35, 23, 32, 4, 225, 109, 11, 35, 23, 32, 
-    4, 223, 38, 11, 35, 23, 32, 4, 40, 219, 178, 11, 35, 23, 32, 4, 219, 178, 
-    11, 35, 23, 32, 4, 217, 42, 11, 35, 23, 32, 4, 214, 157, 11, 35, 23, 32, 
-    4, 225, 134, 11, 35, 23, 32, 4, 250, 111, 11, 35, 23, 32, 4, 224, 162, 
-    11, 35, 23, 32, 4, 226, 202, 11, 35, 23, 32, 225, 254, 247, 234, 11, 35, 
-    23, 32, 245, 102, 87, 11, 35, 23, 32, 216, 181, 87, 11, 35, 23, 32, 234, 
-    224, 87, 11, 35, 23, 32, 225, 135, 87, 11, 35, 23, 32, 223, 39, 87, 11, 
-    35, 23, 32, 225, 110, 87, 11, 23, 6, 247, 228, 11, 23, 4, 247, 228, 11, 
-    23, 21, 210, 86, 11, 23, 21, 110, 11, 23, 21, 105, 11, 23, 21, 158, 11, 
-    23, 21, 161, 11, 23, 21, 189, 11, 23, 21, 194, 11, 23, 21, 198, 11, 23, 
-    21, 195, 11, 23, 21, 200, 11, 139, 21, 210, 86, 11, 139, 21, 110, 11, 
-    139, 21, 105, 11, 139, 21, 158, 11, 139, 21, 161, 11, 139, 21, 189, 11, 
-    139, 21, 194, 11, 139, 21, 198, 11, 139, 21, 195, 11, 139, 21, 200, 11, 
-    35, 21, 210, 86, 11, 35, 21, 110, 11, 35, 21, 105, 11, 35, 21, 158, 11, 
-    35, 21, 161, 11, 35, 21, 189, 11, 35, 21, 194, 11, 35, 21, 198, 11, 35, 
-    21, 195, 11, 35, 21, 200, 11, 35, 23, 21, 210, 86, 11, 35, 23, 21, 110, 
-    11, 35, 23, 21, 105, 11, 35, 23, 21, 158, 11, 35, 23, 21, 161, 11, 35, 
-    23, 21, 189, 11, 35, 23, 21, 194, 11, 35, 23, 21, 198, 11, 35, 23, 21, 
-    195, 11, 35, 23, 21, 200, 11, 230, 139, 21, 210, 86, 11, 230, 139, 21, 
-    110, 11, 230, 139, 21, 105, 11, 230, 139, 21, 158, 11, 230, 139, 21, 161, 
-    11, 230, 139, 21, 189, 11, 230, 139, 21, 194, 11, 230, 139, 21, 198, 11, 
-    230, 139, 21, 195, 11, 230, 139, 21, 200, 10, 11, 254, 171, 10, 11, 252, 
-    55, 10, 11, 235, 124, 10, 11, 248, 196, 10, 11, 212, 30, 10, 11, 210, 
-    108, 10, 11, 242, 38, 10, 11, 217, 81, 10, 11, 211, 43, 10, 11, 234, 251, 
-    10, 11, 233, 103, 10, 11, 231, 79, 10, 11, 228, 63, 10, 11, 221, 167, 10, 
-    11, 254, 197, 10, 11, 244, 143, 10, 11, 222, 27, 10, 11, 224, 82, 10, 11, 
-    223, 96, 10, 11, 220, 60, 10, 11, 217, 8, 10, 11, 216, 193, 10, 11, 234, 
-    130, 10, 11, 216, 203, 10, 11, 248, 217, 10, 11, 210, 111, 10, 11, 242, 
-    245, 10, 11, 247, 120, 252, 55, 10, 11, 247, 120, 228, 63, 10, 11, 247, 
-    120, 244, 143, 10, 11, 247, 120, 224, 82, 10, 11, 65, 252, 55, 10, 11, 
-    65, 235, 124, 10, 11, 65, 241, 219, 10, 11, 65, 242, 38, 10, 11, 65, 211, 
-    43, 10, 11, 65, 234, 251, 10, 11, 65, 233, 103, 10, 11, 65, 231, 79, 10, 
-    11, 65, 228, 63, 10, 11, 65, 221, 167, 10, 11, 65, 254, 197, 10, 11, 65, 
-    244, 143, 10, 11, 65, 222, 27, 10, 11, 65, 224, 82, 10, 11, 65, 220, 60, 
-    10, 11, 65, 217, 8, 10, 11, 65, 216, 193, 10, 11, 65, 234, 130, 10, 11, 
-    65, 248, 217, 10, 11, 65, 242, 245, 10, 11, 217, 77, 235, 124, 10, 11, 
-    217, 77, 242, 38, 10, 11, 217, 77, 211, 43, 10, 11, 217, 77, 233, 103, 
-    10, 11, 217, 77, 228, 63, 10, 11, 217, 77, 221, 167, 10, 11, 217, 77, 
-    254, 197, 10, 11, 217, 77, 222, 27, 10, 11, 217, 77, 224, 82, 10, 11, 
-    217, 77, 220, 60, 10, 11, 217, 77, 234, 130, 10, 11, 217, 77, 248, 217, 
-    10, 11, 217, 77, 242, 245, 10, 11, 217, 77, 247, 120, 228, 63, 10, 11, 
-    217, 77, 247, 120, 224, 82, 10, 11, 218, 111, 252, 55, 10, 11, 218, 111, 
-    235, 124, 10, 11, 218, 111, 241, 219, 10, 11, 218, 111, 242, 38, 10, 11, 
-    218, 111, 217, 81, 10, 11, 218, 111, 211, 43, 10, 11, 218, 111, 234, 251, 
-    10, 11, 218, 111, 231, 79, 10, 11, 218, 111, 228, 63, 10, 11, 218, 111, 
-    221, 167, 10, 11, 218, 111, 254, 197, 10, 11, 218, 111, 244, 143, 10, 11, 
-    218, 111, 222, 27, 10, 11, 218, 111, 224, 82, 10, 11, 218, 111, 220, 60, 
-    10, 11, 218, 111, 217, 8, 10, 11, 218, 111, 216, 193, 10, 11, 218, 111, 
-    234, 130, 10, 11, 218, 111, 248, 217, 10, 11, 218, 111, 210, 111, 10, 11, 
-    218, 111, 242, 245, 10, 11, 218, 111, 247, 120, 252, 55, 10, 11, 218, 
-    111, 247, 120, 244, 143, 10, 11, 232, 123, 254, 171, 10, 11, 232, 123, 
-    252, 55, 10, 11, 232, 123, 235, 124, 10, 11, 232, 123, 248, 196, 10, 11, 
-    232, 123, 241, 219, 10, 11, 232, 123, 212, 30, 10, 11, 232, 123, 210, 
-    108, 10, 11, 232, 123, 242, 38, 10, 11, 232, 123, 217, 81, 10, 11, 232, 
-    123, 211, 43, 10, 11, 232, 123, 233, 103, 10, 11, 232, 123, 231, 79, 10, 
-    11, 232, 123, 228, 63, 10, 11, 232, 123, 221, 167, 10, 11, 232, 123, 254, 
-    197, 10, 11, 232, 123, 244, 143, 10, 11, 232, 123, 222, 27, 10, 11, 232, 
-    123, 224, 82, 10, 11, 232, 123, 223, 96, 10, 11, 232, 123, 220, 60, 10, 
-    11, 232, 123, 217, 8, 10, 11, 232, 123, 216, 193, 10, 11, 232, 123, 234, 
-    130, 10, 11, 232, 123, 216, 203, 10, 11, 232, 123, 248, 217, 10, 11, 232, 
-    123, 210, 111, 10, 11, 232, 123, 242, 245, 10, 11, 139, 252, 55, 10, 11, 
-    139, 235, 124, 10, 11, 139, 248, 196, 10, 11, 139, 212, 30, 10, 11, 139, 
-    210, 108, 10, 11, 139, 242, 38, 10, 11, 139, 217, 81, 10, 11, 139, 211, 
-    43, 10, 11, 139, 233, 103, 10, 11, 139, 231, 79, 10, 11, 139, 228, 63, 
-    10, 11, 139, 221, 167, 10, 11, 139, 254, 197, 10, 11, 139, 244, 143, 10, 
-    11, 139, 222, 27, 10, 11, 139, 224, 82, 10, 11, 139, 223, 96, 10, 11, 
-    139, 220, 60, 10, 11, 139, 217, 8, 10, 11, 139, 216, 193, 10, 11, 139, 
-    234, 130, 10, 11, 139, 216, 203, 10, 11, 139, 248, 217, 10, 11, 139, 210, 
-    111, 10, 11, 139, 242, 245, 10, 11, 226, 169, 66, 2, 122, 2, 217, 44, 10, 
-    11, 226, 169, 122, 2, 248, 196, 231, 206, 86, 245, 221, 211, 239, 231, 
-    206, 86, 219, 29, 211, 239, 231, 206, 86, 212, 9, 211, 239, 231, 206, 86, 
-    228, 57, 211, 239, 231, 206, 86, 223, 112, 246, 97, 231, 206, 86, 242, 
-    128, 246, 97, 231, 206, 86, 71, 246, 97, 231, 206, 86, 123, 64, 250, 142, 
-    231, 206, 86, 113, 64, 250, 142, 231, 206, 86, 134, 64, 250, 142, 231, 
-    206, 86, 244, 12, 64, 250, 142, 231, 206, 86, 244, 82, 64, 250, 142, 231, 
-    206, 86, 219, 126, 64, 250, 142, 231, 206, 86, 220, 123, 64, 250, 142, 
-    231, 206, 86, 245, 194, 64, 250, 142, 231, 206, 86, 228, 201, 64, 250, 
-    142, 231, 206, 86, 123, 64, 252, 154, 231, 206, 86, 113, 64, 252, 154, 
-    231, 206, 86, 134, 64, 252, 154, 231, 206, 86, 244, 12, 64, 252, 154, 
-    231, 206, 86, 244, 82, 64, 252, 154, 231, 206, 86, 219, 126, 64, 252, 
-    154, 231, 206, 86, 220, 123, 64, 252, 154, 231, 206, 86, 245, 194, 64, 
-    252, 154, 231, 206, 86, 228, 201, 64, 252, 154, 231, 206, 86, 123, 64, 
-    250, 35, 231, 206, 86, 113, 64, 250, 35, 231, 206, 86, 134, 64, 250, 35, 
-    231, 206, 86, 244, 12, 64, 250, 35, 231, 206, 86, 244, 82, 64, 250, 35, 
-    231, 206, 86, 219, 126, 64, 250, 35, 231, 206, 86, 220, 123, 64, 250, 35, 
-    231, 206, 86, 245, 194, 64, 250, 35, 231, 206, 86, 228, 201, 64, 250, 35, 
-    231, 206, 86, 225, 26, 231, 206, 86, 226, 157, 231, 206, 86, 252, 155, 
-    231, 206, 86, 250, 71, 231, 206, 86, 218, 240, 231, 206, 86, 218, 40, 
-    231, 206, 86, 253, 180, 231, 206, 86, 211, 232, 231, 206, 86, 235, 63, 
-    231, 206, 86, 252, 185, 131, 86, 203, 252, 185, 131, 86, 241, 44, 131, 
-    86, 241, 43, 131, 86, 241, 42, 131, 86, 241, 41, 131, 86, 241, 40, 131, 
-    86, 241, 39, 131, 86, 241, 38, 131, 86, 241, 37, 131, 86, 241, 36, 131, 
-    86, 241, 35, 131, 86, 241, 34, 131, 86, 241, 33, 131, 86, 241, 32, 131, 
-    86, 241, 31, 131, 86, 241, 30, 131, 86, 241, 29, 131, 86, 241, 28, 131, 
-    86, 241, 27, 131, 86, 241, 26, 131, 86, 241, 25, 131, 86, 241, 24, 131, 
-    86, 241, 23, 131, 86, 241, 22, 131, 86, 241, 21, 131, 86, 241, 20, 131, 
-    86, 241, 19, 131, 86, 241, 18, 131, 86, 241, 17, 131, 86, 241, 16, 131, 
-    86, 241, 15, 131, 86, 241, 14, 131, 86, 241, 13, 131, 86, 241, 12, 131, 
-    86, 241, 11, 131, 86, 241, 10, 131, 86, 241, 9, 131, 86, 241, 8, 131, 86, 
-    241, 7, 131, 86, 241, 6, 131, 86, 241, 5, 131, 86, 241, 4, 131, 86, 241, 
-    3, 131, 86, 241, 2, 131, 86, 241, 1, 131, 86, 241, 0, 131, 86, 240, 255, 
-    131, 86, 240, 254, 131, 86, 240, 253, 131, 86, 240, 252, 131, 86, 67, 
-    252, 185, 131, 86, 213, 238, 131, 86, 213, 237, 131, 86, 213, 236, 131, 
-    86, 213, 235, 131, 86, 213, 234, 131, 86, 213, 233, 131, 86, 213, 232, 
-    131, 86, 213, 231, 131, 86, 213, 230, 131, 86, 213, 229, 131, 86, 213, 
-    228, 131, 86, 213, 227, 131, 86, 213, 226, 131, 86, 213, 225, 131, 86, 
-    213, 224, 131, 86, 213, 223, 131, 86, 213, 222, 131, 86, 213, 221, 131, 
-    86, 213, 220, 131, 86, 213, 219, 131, 86, 213, 218, 131, 86, 213, 217, 
-    131, 86, 213, 216, 131, 86, 213, 215, 131, 86, 213, 214, 131, 86, 213, 
-    213, 131, 86, 213, 212, 131, 86, 213, 211, 131, 86, 213, 210, 131, 86, 
-    213, 209, 131, 86, 213, 208, 131, 86, 213, 207, 131, 86, 213, 206, 131, 
-    86, 213, 205, 131, 86, 213, 204, 131, 86, 213, 203, 131, 86, 213, 202, 
-    131, 86, 213, 201, 131, 86, 213, 200, 131, 86, 213, 199, 131, 86, 213, 
-    198, 131, 86, 213, 197, 131, 86, 213, 196, 131, 86, 213, 195, 131, 86, 
-    213, 194, 131, 86, 213, 193, 131, 86, 213, 192, 131, 86, 213, 191, 131, 
-    86, 213, 190, 225, 34, 250, 244, 252, 185, 225, 34, 250, 244, 255, 10, 
-    64, 219, 16, 225, 34, 250, 244, 113, 64, 219, 16, 225, 34, 250, 244, 134, 
-    64, 219, 16, 225, 34, 250, 244, 244, 12, 64, 219, 16, 225, 34, 250, 244, 
-    244, 82, 64, 219, 16, 225, 34, 250, 244, 219, 126, 64, 219, 16, 225, 34, 
-    250, 244, 220, 123, 64, 219, 16, 225, 34, 250, 244, 245, 194, 64, 219, 
-    16, 225, 34, 250, 244, 228, 201, 64, 219, 16, 225, 34, 250, 244, 216, 
-    249, 64, 219, 16, 225, 34, 250, 244, 235, 140, 64, 219, 16, 225, 34, 250, 
-    244, 234, 32, 64, 219, 16, 225, 34, 250, 244, 224, 16, 64, 219, 16, 225, 
-    34, 250, 244, 234, 80, 64, 219, 16, 225, 34, 250, 244, 255, 10, 64, 241, 
-    226, 225, 34, 250, 244, 113, 64, 241, 226, 225, 34, 250, 244, 134, 64, 
-    241, 226, 225, 34, 250, 244, 244, 12, 64, 241, 226, 225, 34, 250, 244, 
-    244, 82, 64, 241, 226, 225, 34, 250, 244, 219, 126, 64, 241, 226, 225, 
-    34, 250, 244, 220, 123, 64, 241, 226, 225, 34, 250, 244, 245, 194, 64, 
-    241, 226, 225, 34, 250, 244, 228, 201, 64, 241, 226, 225, 34, 250, 244, 
-    216, 249, 64, 241, 226, 225, 34, 250, 244, 235, 140, 64, 241, 226, 225, 
-    34, 250, 244, 234, 32, 64, 241, 226, 225, 34, 250, 244, 224, 16, 64, 241, 
-    226, 225, 34, 250, 244, 234, 80, 64, 241, 226, 225, 34, 250, 244, 255, 
-    10, 64, 247, 248, 225, 34, 250, 244, 113, 64, 247, 248, 225, 34, 250, 
-    244, 134, 64, 247, 248, 225, 34, 250, 244, 244, 12, 64, 247, 248, 225, 
-    34, 250, 244, 244, 82, 64, 247, 248, 225, 34, 250, 244, 219, 126, 64, 
-    247, 248, 225, 34, 250, 244, 220, 123, 64, 247, 248, 225, 34, 250, 244, 
-    245, 194, 64, 247, 248, 225, 34, 250, 244, 228, 201, 64, 247, 248, 225, 
-    34, 250, 244, 216, 249, 64, 247, 248, 225, 34, 250, 244, 235, 140, 64, 
-    247, 248, 225, 34, 250, 244, 234, 32, 64, 247, 248, 225, 34, 250, 244, 
-    224, 16, 64, 247, 248, 225, 34, 250, 244, 234, 80, 64, 247, 248, 225, 34, 
-    250, 244, 85, 235, 63, 225, 34, 250, 244, 255, 10, 64, 249, 243, 225, 34, 
-    250, 244, 113, 64, 249, 243, 225, 34, 250, 244, 134, 64, 249, 243, 225, 
-    34, 250, 244, 244, 12, 64, 249, 243, 225, 34, 250, 244, 244, 82, 64, 249, 
-    243, 225, 34, 250, 244, 219, 126, 64, 249, 243, 225, 34, 250, 244, 220, 
-    123, 64, 249, 243, 225, 34, 250, 244, 245, 194, 64, 249, 243, 225, 34, 
-    250, 244, 228, 201, 64, 249, 243, 225, 34, 250, 244, 216, 249, 64, 249, 
-    243, 225, 34, 250, 244, 235, 140, 64, 249, 243, 225, 34, 250, 244, 234, 
-    32, 64, 249, 243, 225, 34, 250, 244, 224, 16, 64, 249, 243, 225, 34, 250, 
-    244, 234, 80, 64, 249, 243, 225, 34, 250, 244, 71, 235, 63, 21, 210, 87, 
-    243, 230, 218, 130, 21, 210, 87, 249, 220, 21, 123, 249, 220, 21, 113, 
-    249, 220, 21, 134, 249, 220, 21, 244, 12, 249, 220, 21, 244, 82, 249, 
-    220, 21, 219, 126, 249, 220, 21, 220, 123, 249, 220, 21, 245, 194, 249, 
-    220, 21, 228, 201, 249, 220, 88, 7, 6, 1, 61, 88, 7, 6, 1, 253, 159, 88, 
-    7, 6, 1, 251, 67, 88, 7, 6, 1, 249, 61, 88, 7, 6, 1, 75, 88, 7, 6, 1, 
-    245, 7, 88, 7, 6, 1, 243, 203, 88, 7, 6, 1, 242, 61, 88, 7, 6, 1, 73, 88, 
-    7, 6, 1, 235, 145, 88, 7, 6, 1, 235, 24, 88, 7, 6, 1, 156, 88, 7, 6, 1, 
-    193, 88, 7, 6, 1, 230, 26, 88, 7, 6, 1, 76, 88, 7, 6, 1, 226, 106, 88, 7, 
-    6, 1, 224, 97, 88, 7, 6, 1, 153, 88, 7, 6, 1, 222, 92, 88, 7, 6, 1, 217, 
-    153, 88, 7, 6, 1, 70, 88, 7, 6, 1, 214, 105, 88, 7, 6, 1, 212, 98, 88, 7, 
-    6, 1, 211, 178, 88, 7, 6, 1, 211, 117, 88, 7, 6, 1, 210, 159, 216, 7, 
-    220, 54, 251, 158, 7, 6, 1, 222, 92, 37, 32, 7, 6, 1, 251, 67, 37, 32, 7, 
-    6, 1, 153, 37, 250, 192, 37, 211, 180, 92, 7, 6, 1, 61, 92, 7, 6, 1, 253, 
-    159, 92, 7, 6, 1, 251, 67, 92, 7, 6, 1, 249, 61, 92, 7, 6, 1, 75, 92, 7, 
-    6, 1, 245, 7, 92, 7, 6, 1, 243, 203, 92, 7, 6, 1, 242, 61, 92, 7, 6, 1, 
-    73, 92, 7, 6, 1, 235, 145, 92, 7, 6, 1, 235, 24, 92, 7, 6, 1, 156, 92, 7, 
-    6, 1, 193, 92, 7, 6, 1, 230, 26, 92, 7, 6, 1, 76, 92, 7, 6, 1, 226, 106, 
-    92, 7, 6, 1, 224, 97, 92, 7, 6, 1, 153, 92, 7, 6, 1, 222, 92, 92, 7, 6, 
-    1, 217, 153, 92, 7, 6, 1, 70, 92, 7, 6, 1, 214, 105, 92, 7, 6, 1, 212, 
-    98, 92, 7, 6, 1, 211, 178, 92, 7, 6, 1, 211, 117, 92, 7, 6, 1, 210, 159, 
-    92, 240, 202, 92, 230, 50, 92, 221, 184, 92, 218, 227, 92, 224, 219, 92, 
-    212, 23, 152, 37, 7, 6, 1, 61, 152, 37, 7, 6, 1, 253, 159, 152, 37, 7, 6, 
-    1, 251, 67, 152, 37, 7, 6, 1, 249, 61, 152, 37, 7, 6, 1, 75, 152, 37, 7, 
-    6, 1, 245, 7, 152, 37, 7, 6, 1, 243, 203, 152, 37, 7, 6, 1, 242, 61, 152, 
-    37, 7, 6, 1, 73, 152, 37, 7, 6, 1, 235, 145, 152, 37, 7, 6, 1, 235, 24, 
-    152, 37, 7, 6, 1, 156, 152, 37, 7, 6, 1, 193, 152, 37, 7, 6, 1, 230, 26, 
-    152, 37, 7, 6, 1, 76, 152, 37, 7, 6, 1, 226, 106, 152, 37, 7, 6, 1, 224, 
-    97, 152, 37, 7, 6, 1, 153, 152, 37, 7, 6, 1, 222, 92, 152, 37, 7, 6, 1, 
-    217, 153, 152, 37, 7, 6, 1, 70, 152, 37, 7, 6, 1, 214, 105, 152, 37, 7, 
-    6, 1, 212, 98, 152, 37, 7, 6, 1, 211, 178, 152, 37, 7, 6, 1, 211, 117, 
-    152, 37, 7, 6, 1, 210, 159, 223, 158, 231, 98, 50, 223, 158, 231, 95, 50, 
-    152, 92, 7, 6, 1, 61, 152, 92, 7, 6, 1, 253, 159, 152, 92, 7, 6, 1, 251, 
-    67, 152, 92, 7, 6, 1, 249, 61, 152, 92, 7, 6, 1, 75, 152, 92, 7, 6, 1, 
-    245, 7, 152, 92, 7, 6, 1, 243, 203, 152, 92, 7, 6, 1, 242, 61, 152, 92, 
-    7, 6, 1, 73, 152, 92, 7, 6, 1, 235, 145, 152, 92, 7, 6, 1, 235, 24, 152, 
-    92, 7, 6, 1, 156, 152, 92, 7, 6, 1, 193, 152, 92, 7, 6, 1, 230, 26, 152, 
-    92, 7, 6, 1, 76, 152, 92, 7, 6, 1, 226, 106, 152, 92, 7, 6, 1, 224, 97, 
-    152, 92, 7, 6, 1, 153, 152, 92, 7, 6, 1, 222, 92, 152, 92, 7, 6, 1, 217, 
-    153, 152, 92, 7, 6, 1, 70, 152, 92, 7, 6, 1, 214, 105, 152, 92, 7, 6, 1, 
-    212, 98, 152, 92, 7, 6, 1, 211, 178, 152, 92, 7, 6, 1, 211, 117, 152, 92, 
-    7, 6, 1, 210, 159, 249, 129, 152, 92, 7, 6, 1, 226, 106, 152, 92, 240, 
-    114, 152, 92, 190, 152, 92, 206, 152, 92, 255, 26, 152, 92, 212, 23, 42, 
-    247, 165, 92, 250, 24, 92, 249, 171, 92, 243, 253, 92, 240, 106, 92, 229, 
-    87, 92, 229, 80, 92, 226, 215, 92, 219, 36, 92, 120, 2, 245, 32, 78, 92, 
-    213, 119, 223, 104, 235, 240, 16, 1, 61, 223, 104, 235, 240, 16, 1, 253, 
-    159, 223, 104, 235, 240, 16, 1, 251, 67, 223, 104, 235, 240, 16, 1, 249, 
-    61, 223, 104, 235, 240, 16, 1, 75, 223, 104, 235, 240, 16, 1, 245, 7, 
-    223, 104, 235, 240, 16, 1, 243, 203, 223, 104, 235, 240, 16, 1, 242, 61, 
-    223, 104, 235, 240, 16, 1, 73, 223, 104, 235, 240, 16, 1, 235, 145, 223, 
-    104, 235, 240, 16, 1, 235, 24, 223, 104, 235, 240, 16, 1, 156, 223, 104, 
-    235, 240, 16, 1, 193, 223, 104, 235, 240, 16, 1, 230, 26, 223, 104, 235, 
-    240, 16, 1, 76, 223, 104, 235, 240, 16, 1, 226, 106, 223, 104, 235, 240, 
-    16, 1, 224, 97, 223, 104, 235, 240, 16, 1, 153, 223, 104, 235, 240, 16, 
-    1, 222, 92, 223, 104, 235, 240, 16, 1, 217, 153, 223, 104, 235, 240, 16, 
-    1, 70, 223, 104, 235, 240, 16, 1, 214, 105, 223, 104, 235, 240, 16, 1, 
-    212, 98, 223, 104, 235, 240, 16, 1, 211, 178, 223, 104, 235, 240, 16, 1, 
-    211, 117, 223, 104, 235, 240, 16, 1, 210, 159, 42, 141, 241, 64, 92, 56, 
-    234, 19, 92, 56, 206, 92, 9, 214, 177, 238, 51, 92, 9, 214, 177, 238, 55, 
-    92, 9, 214, 177, 238, 63, 92, 56, 248, 91, 92, 9, 214, 177, 238, 70, 92, 
-    9, 214, 177, 238, 57, 92, 9, 214, 177, 238, 29, 92, 9, 214, 177, 238, 56, 
-    92, 9, 214, 177, 238, 69, 92, 9, 214, 177, 238, 43, 92, 9, 214, 177, 238, 
-    36, 92, 9, 214, 177, 238, 45, 92, 9, 214, 177, 238, 66, 92, 9, 214, 177, 
-    238, 52, 92, 9, 214, 177, 238, 68, 92, 9, 214, 177, 238, 44, 92, 9, 214, 
-    177, 238, 67, 92, 9, 214, 177, 238, 30, 92, 9, 214, 177, 238, 35, 92, 9, 
-    214, 177, 238, 28, 92, 9, 214, 177, 238, 58, 92, 9, 214, 177, 238, 60, 
-    92, 9, 214, 177, 238, 38, 92, 9, 214, 177, 238, 49, 92, 9, 214, 177, 238, 
-    47, 92, 9, 214, 177, 238, 73, 92, 9, 214, 177, 238, 72, 92, 9, 214, 177, 
-    238, 26, 92, 9, 214, 177, 238, 53, 92, 9, 214, 177, 238, 71, 92, 9, 214, 
-    177, 238, 62, 92, 9, 214, 177, 238, 48, 92, 9, 214, 177, 238, 27, 92, 9, 
-    214, 177, 238, 50, 92, 9, 214, 177, 238, 32, 92, 9, 214, 177, 238, 31, 
-    92, 9, 214, 177, 238, 61, 92, 9, 214, 177, 238, 39, 92, 9, 214, 177, 238, 
-    41, 92, 9, 214, 177, 238, 42, 92, 9, 214, 177, 238, 34, 92, 9, 214, 177, 
-    238, 65, 92, 9, 214, 177, 238, 59, 216, 7, 220, 54, 251, 158, 9, 214, 
-    177, 238, 40, 216, 7, 220, 54, 251, 158, 9, 214, 177, 238, 72, 216, 7, 
-    220, 54, 251, 158, 9, 214, 177, 238, 70, 216, 7, 220, 54, 251, 158, 9, 
-    214, 177, 238, 54, 216, 7, 220, 54, 251, 158, 9, 214, 177, 238, 37, 216, 
-    7, 220, 54, 251, 158, 9, 214, 177, 238, 50, 216, 7, 220, 54, 251, 158, 9, 
-    214, 177, 238, 33, 216, 7, 220, 54, 251, 158, 9, 214, 177, 238, 64, 216, 
-    7, 220, 54, 251, 158, 9, 214, 177, 238, 46, 37, 154, 254, 246, 37, 154, 
-    255, 13, 249, 72, 244, 43, 250, 1, 214, 194, 228, 214, 2, 218, 154, 218, 
-    34, 117, 230, 115, 218, 33, 250, 27, 253, 208, 246, 55, 218, 32, 117, 
-    251, 119, 223, 159, 251, 141, 253, 208, 228, 213, 212, 41, 212, 35, 213, 
-    131, 230, 196, 212, 25, 245, 225, 242, 182, 245, 46, 245, 225, 242, 182, 
-    254, 129, 245, 225, 242, 182, 253, 226, 242, 182, 2, 231, 52, 166, 230, 
-    130, 87, 212, 27, 249, 138, 230, 130, 87, 244, 93, 224, 23, 230, 130, 87, 
-    212, 27, 242, 211, 230, 130, 87, 243, 230, 230, 130, 87, 212, 52, 242, 
-    211, 230, 130, 87, 233, 81, 224, 23, 230, 130, 87, 212, 52, 249, 138, 
-    230, 130, 87, 249, 138, 230, 129, 166, 230, 130, 2, 244, 191, 244, 93, 
-    224, 23, 230, 130, 2, 244, 191, 233, 81, 224, 23, 230, 130, 2, 244, 191, 
-    243, 230, 230, 130, 2, 244, 191, 218, 39, 2, 244, 191, 242, 180, 218, 
-    157, 220, 0, 218, 157, 250, 117, 221, 169, 245, 40, 215, 236, 248, 85, 
-    215, 236, 226, 60, 215, 236, 251, 28, 215, 110, 250, 119, 251, 211, 222, 
-    192, 241, 180, 218, 37, 251, 211, 245, 229, 64, 231, 195, 245, 229, 64, 
-    223, 32, 241, 205, 244, 12, 233, 55, 249, 247, 231, 171, 233, 54, 244, 
-    177, 233, 54, 233, 55, 244, 48, 236, 1, 211, 239, 230, 59, 216, 35, 253, 
-    192, 242, 144, 231, 68, 212, 39, 217, 58, 233, 27, 252, 150, 225, 63, 
-    223, 112, 254, 55, 242, 128, 254, 55, 225, 218, 225, 219, 250, 120, 218, 
-    115, 242, 24, 219, 91, 64, 225, 45, 231, 88, 226, 198, 251, 195, 224, 
-    230, 233, 37, 223, 33, 249, 143, 223, 33, 252, 160, 249, 174, 223, 32, 
-    249, 96, 22, 223, 32, 218, 142, 251, 168, 219, 15, 251, 152, 243, 252, 
-    243, 248, 222, 208, 217, 247, 224, 232, 248, 176, 226, 237, 218, 8, 243, 
-    249, 219, 231, 244, 92, 251, 22, 2, 217, 240, 248, 36, 219, 53, 240, 113, 
-    249, 142, 220, 71, 240, 112, 240, 113, 249, 142, 246, 109, 249, 173, 250, 
-    85, 130, 250, 255, 232, 142, 249, 89, 241, 56, 224, 234, 219, 241, 252, 
-    37, 251, 164, 224, 235, 64, 244, 34, 249, 172, 244, 25, 22, 234, 33, 217, 
-    20, 211, 230, 242, 14, 222, 13, 251, 178, 22, 249, 103, 211, 237, 242, 
-    185, 249, 236, 242, 185, 215, 194, 246, 91, 252, 63, 230, 94, 250, 8, 
-    252, 63, 230, 93, 252, 188, 251, 177, 223, 34, 211, 201, 224, 196, 251, 
-    236, 251, 21, 235, 139, 250, 78, 215, 236, 244, 163, 250, 77, 244, 95, 
-    244, 96, 219, 13, 252, 159, 225, 251, 224, 245, 249, 205, 252, 160, 217, 
-    60, 215, 236, 249, 129, 244, 68, 225, 64, 248, 82, 235, 132, 247, 132, 
-    250, 233, 218, 114, 211, 240, 250, 99, 230, 130, 213, 164, 250, 163, 221, 
-    200, 221, 225, 242, 149, 250, 252, 250, 234, 240, 246, 244, 131, 212, 0, 
-    222, 201, 249, 237, 244, 87, 225, 3, 22, 244, 91, 230, 228, 230, 109, 
-    251, 11, 250, 40, 241, 233, 253, 242, 226, 63, 216, 15, 241, 252, 250, 
-    30, 216, 243, 216, 114, 250, 21, 251, 203, 225, 178, 253, 241, 213, 172, 
-    243, 111, 247, 198, 241, 157, 219, 85, 231, 235, 251, 246, 243, 112, 247, 
-    241, 251, 167, 244, 53, 225, 34, 250, 242, 28, 228, 48, 230, 86, 28, 228, 
-    43, 221, 213, 242, 100, 28, 234, 138, 215, 191, 213, 154, 28, 221, 193, 
-    222, 125, 220, 12, 2, 221, 228, 216, 245, 223, 179, 22, 252, 160, 219, 
-    106, 22, 219, 106, 251, 188, 252, 124, 22, 241, 50, 250, 121, 244, 74, 
-    219, 64, 222, 126, 218, 13, 215, 195, 240, 247, 223, 180, 254, 130, 244, 
-    32, 222, 137, 244, 32, 217, 242, 240, 236, 251, 120, 240, 236, 2, 243, 
-    95, 226, 230, 251, 120, 235, 132, 224, 240, 226, 229, 245, 45, 224, 240, 
-    226, 229, 240, 245, 252, 146, 253, 182, 216, 253, 231, 235, 240, 241, 
-    232, 112, 240, 241, 249, 177, 218, 126, 221, 199, 248, 44, 218, 126, 244, 
-    181, 235, 150, 233, 90, 235, 132, 250, 227, 245, 45, 250, 227, 223, 142, 
-    230, 113, 226, 115, 212, 41, 251, 124, 249, 146, 216, 107, 233, 19, 223, 
-    181, 250, 225, 246, 97, 249, 136, 212, 3, 219, 71, 219, 69, 240, 246, 
-    223, 154, 242, 171, 220, 58, 230, 146, 222, 195, 250, 109, 247, 137, 225, 
-    74, 251, 204, 245, 170, 226, 239, 218, 253, 220, 53, 251, 123, 254, 93, 
-    241, 55, 233, 122, 252, 61, 244, 91, 215, 194, 244, 91, 251, 210, 215, 
-    91, 241, 250, 250, 110, 252, 188, 250, 110, 243, 243, 252, 188, 250, 110, 
-    251, 238, 225, 196, 234, 27, 224, 249, 246, 88, 251, 12, 252, 178, 251, 
-    12, 247, 131, 230, 114, 244, 191, 249, 147, 244, 191, 216, 108, 244, 191, 
-    223, 182, 244, 191, 250, 226, 244, 191, 246, 98, 244, 191, 218, 242, 212, 
-    3, 240, 247, 244, 191, 230, 147, 244, 191, 247, 138, 244, 191, 225, 75, 
-    244, 191, 243, 246, 244, 191, 242, 21, 244, 191, 211, 224, 244, 191, 252, 
-    72, 244, 191, 226, 46, 244, 191, 225, 75, 228, 54, 225, 233, 224, 187, 
-    245, 14, 245, 228, 228, 54, 230, 111, 216, 20, 71, 120, 225, 8, 252, 183, 
-    235, 243, 71, 124, 225, 8, 252, 183, 235, 243, 71, 43, 225, 8, 252, 183, 
-    235, 243, 71, 44, 225, 8, 252, 183, 235, 243, 244, 85, 242, 17, 50, 212, 
-    33, 242, 17, 50, 226, 216, 242, 17, 50, 216, 136, 120, 50, 216, 136, 124, 
-    50, 250, 20, 242, 12, 50, 204, 242, 12, 50, 249, 124, 211, 220, 241, 252, 
-    245, 15, 229, 105, 217, 152, 235, 126, 246, 93, 234, 83, 251, 248, 211, 
-    220, 249, 250, 224, 128, 242, 15, 224, 231, 231, 178, 220, 5, 253, 204, 
-    220, 5, 241, 165, 220, 5, 211, 220, 221, 241, 211, 220, 251, 187, 244, 
-    30, 251, 91, 236, 1, 219, 170, 251, 90, 236, 1, 219, 170, 251, 163, 242, 
-    195, 231, 186, 211, 221, 244, 175, 231, 187, 22, 211, 222, 241, 61, 242, 
-    11, 113, 231, 60, 241, 61, 242, 11, 113, 211, 219, 241, 61, 242, 11, 225, 
-    0, 226, 228, 211, 222, 2, 251, 107, 245, 226, 251, 142, 2, 213, 246, 225, 
-    169, 2, 251, 213, 242, 35, 231, 187, 2, 242, 111, 225, 110, 231, 175, 
-    231, 187, 2, 215, 98, 226, 209, 231, 186, 226, 209, 211, 221, 252, 187, 
-    249, 191, 211, 205, 224, 190, 235, 132, 226, 224, 235, 132, 242, 170, 
-    242, 223, 252, 188, 254, 114, 245, 19, 254, 161, 254, 162, 230, 137, 236, 
-    6, 219, 101, 235, 233, 248, 35, 225, 168, 242, 106, 248, 180, 232, 202, 
-    229, 212, 224, 255, 244, 192, 231, 143, 242, 34, 252, 139, 225, 2, 217, 
-    172, 225, 67, 234, 65, 78, 232, 112, 233, 11, 222, 234, 243, 55, 218, 
-    132, 234, 64, 251, 172, 249, 149, 2, 241, 228, 212, 19, 252, 70, 241, 
-    228, 251, 136, 241, 228, 113, 241, 226, 219, 11, 241, 228, 242, 121, 241, 
-    228, 241, 229, 2, 74, 251, 209, 241, 228, 242, 128, 241, 228, 211, 42, 
-    241, 228, 224, 129, 241, 228, 241, 229, 2, 223, 34, 223, 45, 241, 226, 
-    241, 229, 248, 82, 247, 250, 220, 83, 2, 115, 59, 235, 216, 245, 173, 
-    192, 251, 117, 254, 113, 87, 251, 196, 219, 93, 87, 249, 229, 87, 218, 
-    247, 217, 249, 87, 246, 86, 248, 158, 87, 225, 68, 64, 224, 250, 244, 62, 
-    252, 4, 247, 166, 87, 219, 4, 252, 159, 216, 150, 252, 159, 71, 244, 52, 
-    240, 212, 225, 6, 87, 230, 150, 252, 173, 249, 99, 245, 33, 114, 247, 
-    133, 50, 249, 140, 250, 243, 252, 145, 2, 211, 40, 50, 252, 145, 2, 247, 
-    133, 50, 252, 145, 2, 245, 48, 50, 252, 145, 2, 224, 229, 50, 230, 150, 
-    2, 211, 235, 250, 139, 2, 214, 153, 215, 232, 22, 211, 40, 50, 221, 179, 
-    225, 167, 249, 209, 251, 140, 230, 187, 244, 57, 247, 186, 226, 162, 247, 
-    191, 246, 50, 244, 108, 244, 41, 204, 244, 108, 244, 41, 226, 77, 2, 249, 
-    101, 226, 77, 244, 184, 214, 163, 251, 17, 217, 19, 251, 17, 250, 244, 
-    235, 243, 250, 139, 2, 214, 153, 215, 231, 250, 139, 2, 246, 105, 215, 
-    231, 252, 142, 250, 138, 250, 7, 224, 124, 222, 186, 224, 124, 226, 20, 
-    218, 122, 222, 132, 215, 223, 222, 132, 251, 192, 217, 92, 233, 52, 228, 
-    46, 228, 47, 2, 248, 81, 249, 148, 250, 1, 251, 193, 204, 251, 193, 242, 
-    128, 251, 193, 251, 209, 251, 193, 226, 158, 251, 193, 251, 190, 229, 
-    206, 252, 176, 221, 187, 231, 61, 217, 2, 223, 124, 226, 75, 244, 160, 
-    231, 235, 221, 224, 254, 90, 224, 146, 254, 253, 232, 114, 250, 128, 231, 
-    73, 226, 130, 215, 239, 235, 253, 215, 239, 226, 83, 246, 25, 87, 235, 
-    250, 245, 120, 245, 121, 2, 246, 105, 80, 48, 250, 1, 231, 201, 2, 232, 
-    108, 244, 74, 250, 1, 231, 201, 2, 223, 158, 244, 74, 204, 231, 201, 2, 
-    223, 158, 244, 74, 204, 231, 201, 2, 232, 108, 244, 74, 224, 237, 224, 
-    238, 240, 249, 229, 85, 230, 160, 225, 118, 230, 160, 225, 119, 2, 97, 
-    80, 253, 208, 233, 47, 213, 175, 230, 159, 230, 160, 225, 119, 226, 231, 
-    228, 76, 230, 160, 225, 117, 254, 91, 2, 252, 130, 251, 11, 213, 172, 
-    251, 11, 216, 255, 223, 174, 213, 171, 215, 60, 97, 253, 248, 250, 3, 97, 
-    22, 140, 204, 250, 37, 253, 248, 250, 3, 97, 22, 140, 204, 250, 37, 253, 
-    249, 2, 37, 123, 226, 121, 250, 3, 246, 105, 22, 214, 153, 204, 250, 37, 
-    253, 248, 254, 89, 246, 105, 22, 214, 153, 204, 250, 37, 253, 248, 121, 
-    251, 139, 87, 125, 251, 139, 87, 219, 8, 2, 251, 5, 91, 219, 7, 219, 8, 
-    2, 123, 219, 32, 212, 35, 219, 8, 2, 134, 219, 32, 212, 34, 252, 116, 
-    245, 173, 225, 28, 233, 43, 231, 212, 242, 185, 222, 248, 231, 212, 242, 
-    185, 232, 153, 2, 235, 226, 225, 200, 250, 1, 232, 153, 2, 234, 139, 234, 
-    139, 232, 152, 204, 232, 152, 252, 45, 252, 46, 2, 251, 5, 91, 251, 191, 
-    232, 205, 87, 223, 175, 251, 87, 252, 186, 2, 140, 80, 48, 245, 144, 2, 
-    140, 80, 48, 226, 198, 2, 245, 32, 164, 2, 43, 44, 80, 48, 219, 40, 2, 
-    97, 80, 48, 216, 15, 2, 214, 153, 80, 48, 228, 76, 123, 214, 184, 245, 
-    192, 87, 234, 137, 216, 248, 235, 220, 16, 31, 7, 6, 233, 10, 235, 220, 
-    16, 31, 7, 4, 233, 10, 235, 220, 16, 31, 227, 200, 235, 220, 16, 31, 217, 
-    184, 235, 220, 16, 31, 7, 233, 10, 244, 97, 245, 173, 216, 10, 211, 199, 
-    242, 22, 227, 183, 22, 251, 198, 241, 67, 225, 51, 230, 227, 217, 0, 249, 
-    115, 252, 160, 219, 126, 225, 10, 218, 158, 2, 230, 225, 247, 121, 235, 
-    132, 16, 31, 252, 58, 215, 221, 245, 157, 85, 42, 251, 87, 71, 42, 251, 
-    87, 233, 86, 223, 112, 250, 36, 233, 86, 251, 209, 250, 36, 233, 86, 226, 
-    158, 247, 249, 233, 86, 251, 209, 247, 249, 4, 226, 158, 247, 249, 4, 
-    251, 209, 247, 249, 214, 162, 223, 112, 215, 226, 246, 106, 223, 112, 
-    215, 226, 214, 162, 4, 223, 112, 215, 226, 246, 106, 4, 223, 112, 215, 
-    226, 37, 249, 132, 224, 253, 249, 132, 224, 254, 2, 242, 27, 51, 249, 
-    132, 224, 253, 228, 50, 43, 220, 154, 2, 134, 247, 119, 250, 5, 244, 192, 
-    123, 226, 243, 250, 5, 244, 192, 113, 226, 243, 250, 5, 244, 192, 134, 
-    226, 243, 250, 5, 244, 192, 244, 12, 226, 243, 250, 5, 244, 192, 244, 82, 
-    226, 243, 250, 5, 244, 192, 219, 126, 226, 243, 250, 5, 244, 192, 220, 
-    123, 226, 243, 250, 5, 244, 192, 245, 194, 226, 243, 250, 5, 244, 192, 
-    228, 201, 226, 243, 250, 5, 244, 192, 216, 249, 226, 243, 250, 5, 244, 
-    192, 245, 169, 226, 243, 250, 5, 244, 192, 215, 77, 226, 243, 250, 5, 
-    244, 192, 226, 193, 250, 5, 244, 192, 215, 56, 250, 5, 244, 192, 216, 
-    141, 250, 5, 244, 192, 244, 8, 250, 5, 244, 192, 244, 80, 250, 5, 244, 
-    192, 219, 122, 250, 5, 244, 192, 220, 122, 250, 5, 244, 192, 245, 193, 
-    250, 5, 244, 192, 228, 200, 250, 5, 244, 192, 216, 247, 250, 5, 244, 192, 
-    245, 167, 250, 5, 244, 192, 215, 75, 230, 118, 243, 231, 216, 37, 216, 3, 
-    218, 149, 64, 232, 240, 219, 171, 64, 235, 133, 230, 107, 242, 125, 244, 
-    191, 242, 125, 244, 192, 2, 219, 75, 245, 14, 244, 192, 2, 217, 15, 64, 
-    235, 54, 219, 75, 244, 192, 2, 204, 230, 111, 219, 75, 244, 192, 2, 204, 
-    230, 112, 22, 219, 75, 245, 14, 219, 75, 244, 192, 2, 204, 230, 112, 22, 
-    249, 231, 217, 248, 219, 75, 244, 192, 2, 204, 230, 112, 22, 216, 105, 
-    245, 14, 219, 75, 244, 192, 2, 242, 26, 219, 75, 244, 192, 2, 240, 248, 
-    211, 233, 244, 191, 219, 75, 244, 192, 2, 219, 75, 245, 14, 244, 192, 
-    221, 218, 248, 63, 244, 34, 223, 89, 244, 191, 219, 75, 244, 192, 2, 241, 
-    227, 245, 14, 219, 75, 244, 192, 2, 218, 35, 219, 74, 244, 191, 229, 88, 
-    244, 191, 245, 24, 244, 191, 214, 188, 244, 191, 244, 192, 2, 249, 231, 
-    217, 248, 225, 193, 244, 191, 249, 202, 244, 191, 249, 203, 244, 191, 
-    234, 63, 244, 191, 244, 192, 216, 138, 115, 234, 64, 234, 63, 244, 192, 
-    2, 219, 75, 245, 14, 234, 63, 244, 192, 2, 250, 1, 245, 14, 244, 192, 2, 
-    218, 89, 216, 20, 244, 192, 2, 218, 89, 216, 21, 22, 211, 233, 245, 16, 
-    244, 192, 2, 218, 89, 216, 21, 22, 216, 105, 245, 14, 247, 193, 244, 191, 
-    211, 204, 244, 191, 254, 109, 244, 191, 224, 228, 244, 191, 249, 117, 
-    244, 191, 225, 171, 244, 191, 244, 192, 2, 232, 127, 64, 215, 205, 247, 
-    193, 251, 89, 223, 89, 244, 191, 243, 240, 244, 192, 2, 204, 230, 111, 
-    254, 107, 244, 191, 244, 153, 244, 191, 212, 20, 244, 191, 219, 92, 244, 
-    191, 216, 72, 244, 191, 242, 126, 244, 191, 232, 115, 249, 117, 244, 191, 
-    244, 192, 2, 204, 230, 111, 240, 204, 244, 191, 244, 192, 2, 204, 230, 
-    112, 22, 249, 231, 217, 248, 244, 192, 221, 191, 236, 1, 244, 154, 253, 
-    214, 244, 191, 244, 50, 244, 191, 219, 93, 244, 191, 247, 166, 244, 191, 
-    244, 192, 211, 230, 230, 111, 244, 192, 2, 231, 85, 231, 145, 242, 125, 
-    250, 226, 244, 192, 2, 219, 75, 245, 14, 250, 226, 244, 192, 2, 217, 15, 
-    64, 235, 54, 219, 75, 250, 226, 244, 192, 2, 204, 230, 111, 219, 75, 250, 
-    226, 244, 192, 2, 241, 227, 245, 14, 250, 226, 244, 192, 2, 211, 196, 
-    219, 76, 234, 63, 250, 226, 244, 192, 2, 250, 1, 245, 14, 224, 228, 250, 
-    226, 244, 191, 249, 117, 250, 226, 244, 191, 212, 20, 250, 226, 244, 191, 
-    244, 192, 2, 228, 76, 242, 164, 243, 35, 244, 192, 2, 226, 216, 243, 35, 
-    225, 169, 251, 169, 248, 76, 221, 170, 230, 146, 241, 230, 230, 146, 219, 
-    9, 230, 146, 242, 6, 225, 169, 223, 157, 123, 242, 16, 225, 169, 223, 
-    157, 251, 179, 242, 12, 236, 1, 250, 180, 225, 169, 243, 239, 225, 169, 
-    2, 224, 228, 244, 191, 225, 169, 2, 244, 42, 242, 11, 222, 204, 241, 215, 
-    218, 144, 232, 150, 223, 163, 250, 245, 241, 163, 215, 249, 241, 163, 
-    215, 250, 2, 251, 115, 228, 54, 215, 249, 231, 33, 192, 223, 164, 218, 
-    150, 215, 247, 215, 248, 250, 245, 251, 93, 226, 195, 251, 93, 215, 202, 
-    251, 94, 218, 130, 230, 188, 254, 131, 244, 98, 245, 138, 225, 0, 250, 
-    245, 226, 195, 225, 0, 250, 245, 217, 33, 226, 195, 217, 33, 253, 181, 
-    226, 195, 253, 181, 223, 119, 213, 247, 248, 59, 215, 193, 253, 243, 232, 
-    118, 215, 255, 230, 140, 230, 117, 223, 162, 218, 7, 223, 162, 230, 117, 
-    251, 29, 254, 230, 215, 246, 220, 17, 222, 183, 219, 2, 203, 215, 253, 
-    232, 231, 67, 215, 253, 232, 231, 249, 191, 50, 225, 0, 250, 230, 223, 
-    45, 232, 231, 215, 223, 244, 75, 226, 198, 224, 239, 247, 124, 228, 76, 
-    245, 126, 50, 219, 73, 87, 228, 76, 219, 73, 87, 224, 123, 232, 194, 236, 
-    1, 235, 158, 225, 42, 87, 247, 147, 228, 53, 232, 194, 87, 224, 233, 212, 
-    41, 87, 228, 67, 212, 41, 87, 252, 3, 228, 76, 252, 2, 252, 1, 230, 117, 
-    252, 1, 225, 214, 228, 76, 225, 213, 250, 101, 249, 125, 231, 57, 87, 
-    211, 218, 87, 223, 60, 252, 188, 87, 216, 38, 212, 41, 249, 254, 219, 
-    235, 252, 119, 252, 117, 225, 243, 249, 178, 249, 87, 252, 170, 250, 23, 
-    43, 232, 91, 108, 16, 31, 224, 4, 108, 16, 31, 254, 193, 108, 16, 31, 
-    244, 97, 108, 16, 31, 245, 224, 108, 16, 31, 212, 40, 108, 16, 31, 254, 
-    44, 108, 16, 31, 254, 45, 223, 106, 108, 16, 31, 254, 45, 223, 105, 108, 
-    16, 31, 254, 45, 213, 143, 108, 16, 31, 254, 45, 213, 142, 108, 16, 31, 
+    117, 11, 23, 6, 210, 159, 11, 23, 4, 61, 11, 23, 4, 253, 166, 11, 23, 4, 
+    251, 74, 11, 23, 4, 249, 68, 11, 23, 4, 76, 11, 23, 4, 245, 14, 11, 23, 
+    4, 243, 209, 11, 23, 4, 242, 67, 11, 23, 4, 74, 11, 23, 4, 235, 150, 11, 
+    23, 4, 235, 29, 11, 23, 4, 156, 11, 23, 4, 194, 11, 23, 4, 230, 30, 11, 
+    23, 4, 78, 11, 23, 4, 226, 109, 11, 23, 4, 224, 99, 11, 23, 4, 153, 11, 
+    23, 4, 222, 93, 11, 23, 4, 217, 153, 11, 23, 4, 69, 11, 23, 4, 214, 105, 
+    11, 23, 4, 212, 98, 11, 23, 4, 211, 178, 11, 23, 4, 211, 117, 11, 23, 4, 
+    210, 159, 11, 32, 6, 61, 11, 32, 6, 253, 166, 11, 32, 6, 251, 74, 11, 32, 
+    6, 249, 68, 11, 32, 6, 76, 11, 32, 6, 245, 14, 11, 32, 6, 243, 209, 11, 
+    32, 6, 242, 67, 11, 32, 6, 74, 11, 32, 6, 235, 150, 11, 32, 6, 235, 29, 
+    11, 32, 6, 156, 11, 32, 6, 194, 11, 32, 6, 230, 30, 11, 32, 6, 78, 11, 
+    32, 6, 226, 109, 11, 32, 6, 224, 99, 11, 32, 6, 153, 11, 32, 6, 222, 93, 
+    11, 32, 6, 217, 153, 11, 32, 6, 69, 11, 32, 6, 214, 105, 11, 32, 6, 212, 
+    98, 11, 32, 6, 211, 178, 11, 32, 6, 211, 117, 11, 32, 6, 210, 159, 11, 
+    32, 4, 61, 11, 32, 4, 253, 166, 11, 32, 4, 251, 74, 11, 32, 4, 249, 68, 
+    11, 32, 4, 76, 11, 32, 4, 245, 14, 11, 32, 4, 243, 209, 11, 32, 4, 74, 
+    11, 32, 4, 235, 150, 11, 32, 4, 235, 29, 11, 32, 4, 156, 11, 32, 4, 194, 
+    11, 32, 4, 230, 30, 11, 32, 4, 78, 11, 32, 4, 226, 109, 11, 32, 4, 224, 
+    99, 11, 32, 4, 153, 11, 32, 4, 222, 93, 11, 32, 4, 217, 153, 11, 32, 4, 
+    69, 11, 32, 4, 214, 105, 11, 32, 4, 212, 98, 11, 32, 4, 211, 178, 11, 32, 
+    4, 211, 117, 11, 32, 4, 210, 159, 11, 23, 32, 6, 61, 11, 23, 32, 6, 253, 
+    166, 11, 23, 32, 6, 251, 74, 11, 23, 32, 6, 249, 68, 11, 23, 32, 6, 76, 
+    11, 23, 32, 6, 245, 14, 11, 23, 32, 6, 243, 209, 11, 23, 32, 6, 242, 67, 
+    11, 23, 32, 6, 74, 11, 23, 32, 6, 235, 150, 11, 23, 32, 6, 235, 29, 11, 
+    23, 32, 6, 156, 11, 23, 32, 6, 194, 11, 23, 32, 6, 230, 30, 11, 23, 32, 
+    6, 78, 11, 23, 32, 6, 226, 109, 11, 23, 32, 6, 224, 99, 11, 23, 32, 6, 
+    153, 11, 23, 32, 6, 222, 93, 11, 23, 32, 6, 217, 153, 11, 23, 32, 6, 69, 
+    11, 23, 32, 6, 214, 105, 11, 23, 32, 6, 212, 98, 11, 23, 32, 6, 211, 178, 
+    11, 23, 32, 6, 211, 117, 11, 23, 32, 6, 210, 159, 11, 23, 32, 4, 61, 11, 
+    23, 32, 4, 253, 166, 11, 23, 32, 4, 251, 74, 11, 23, 32, 4, 249, 68, 11, 
+    23, 32, 4, 76, 11, 23, 32, 4, 245, 14, 11, 23, 32, 4, 243, 209, 11, 23, 
+    32, 4, 242, 67, 11, 23, 32, 4, 74, 11, 23, 32, 4, 235, 150, 11, 23, 32, 
+    4, 235, 29, 11, 23, 32, 4, 156, 11, 23, 32, 4, 194, 11, 23, 32, 4, 230, 
+    30, 11, 23, 32, 4, 78, 11, 23, 32, 4, 226, 109, 11, 23, 32, 4, 224, 99, 
+    11, 23, 32, 4, 153, 11, 23, 32, 4, 222, 93, 11, 23, 32, 4, 217, 153, 11, 
+    23, 32, 4, 69, 11, 23, 32, 4, 214, 105, 11, 23, 32, 4, 212, 98, 11, 23, 
+    32, 4, 211, 178, 11, 23, 32, 4, 211, 117, 11, 23, 32, 4, 210, 159, 11, 
+    119, 6, 61, 11, 119, 6, 251, 74, 11, 119, 6, 249, 68, 11, 119, 6, 243, 
+    209, 11, 119, 6, 235, 150, 11, 119, 6, 235, 29, 11, 119, 6, 230, 30, 11, 
+    119, 6, 78, 11, 119, 6, 226, 109, 11, 119, 6, 224, 99, 11, 119, 6, 222, 
+    93, 11, 119, 6, 217, 153, 11, 119, 6, 69, 11, 119, 6, 214, 105, 11, 119, 
+    6, 212, 98, 11, 119, 6, 211, 178, 11, 119, 6, 211, 117, 11, 119, 6, 210, 
+    159, 11, 119, 4, 61, 11, 119, 4, 253, 166, 11, 119, 4, 251, 74, 11, 119, 
+    4, 249, 68, 11, 119, 4, 245, 14, 11, 119, 4, 242, 67, 11, 119, 4, 74, 11, 
+    119, 4, 235, 150, 11, 119, 4, 235, 29, 11, 119, 4, 156, 11, 119, 4, 194, 
+    11, 119, 4, 230, 30, 11, 119, 4, 226, 109, 11, 119, 4, 224, 99, 11, 119, 
+    4, 153, 11, 119, 4, 222, 93, 11, 119, 4, 217, 153, 11, 119, 4, 69, 11, 
+    119, 4, 214, 105, 11, 119, 4, 212, 98, 11, 119, 4, 211, 178, 11, 119, 4, 
+    211, 117, 11, 119, 4, 210, 159, 11, 23, 119, 6, 61, 11, 23, 119, 6, 253, 
+    166, 11, 23, 119, 6, 251, 74, 11, 23, 119, 6, 249, 68, 11, 23, 119, 6, 
+    76, 11, 23, 119, 6, 245, 14, 11, 23, 119, 6, 243, 209, 11, 23, 119, 6, 
+    242, 67, 11, 23, 119, 6, 74, 11, 23, 119, 6, 235, 150, 11, 23, 119, 6, 
+    235, 29, 11, 23, 119, 6, 156, 11, 23, 119, 6, 194, 11, 23, 119, 6, 230, 
+    30, 11, 23, 119, 6, 78, 11, 23, 119, 6, 226, 109, 11, 23, 119, 6, 224, 
+    99, 11, 23, 119, 6, 153, 11, 23, 119, 6, 222, 93, 11, 23, 119, 6, 217, 
+    153, 11, 23, 119, 6, 69, 11, 23, 119, 6, 214, 105, 11, 23, 119, 6, 212, 
+    98, 11, 23, 119, 6, 211, 178, 11, 23, 119, 6, 211, 117, 11, 23, 119, 6, 
+    210, 159, 11, 23, 119, 4, 61, 11, 23, 119, 4, 253, 166, 11, 23, 119, 4, 
+    251, 74, 11, 23, 119, 4, 249, 68, 11, 23, 119, 4, 76, 11, 23, 119, 4, 
+    245, 14, 11, 23, 119, 4, 243, 209, 11, 23, 119, 4, 242, 67, 11, 23, 119, 
+    4, 74, 11, 23, 119, 4, 235, 150, 11, 23, 119, 4, 235, 29, 11, 23, 119, 4, 
+    156, 11, 23, 119, 4, 194, 11, 23, 119, 4, 230, 30, 11, 23, 119, 4, 78, 
+    11, 23, 119, 4, 226, 109, 11, 23, 119, 4, 224, 99, 11, 23, 119, 4, 153, 
+    11, 23, 119, 4, 222, 93, 11, 23, 119, 4, 217, 153, 11, 23, 119, 4, 69, 
+    11, 23, 119, 4, 214, 105, 11, 23, 119, 4, 212, 98, 11, 23, 119, 4, 211, 
+    178, 11, 23, 119, 4, 211, 117, 11, 23, 119, 4, 210, 159, 11, 133, 6, 61, 
+    11, 133, 6, 253, 166, 11, 133, 6, 249, 68, 11, 133, 6, 76, 11, 133, 6, 
+    245, 14, 11, 133, 6, 243, 209, 11, 133, 6, 235, 150, 11, 133, 6, 235, 29, 
+    11, 133, 6, 156, 11, 133, 6, 194, 11, 133, 6, 230, 30, 11, 133, 6, 78, 
+    11, 133, 6, 226, 109, 11, 133, 6, 224, 99, 11, 133, 6, 222, 93, 11, 133, 
+    6, 217, 153, 11, 133, 6, 69, 11, 133, 6, 214, 105, 11, 133, 6, 212, 98, 
+    11, 133, 6, 211, 178, 11, 133, 6, 211, 117, 11, 133, 4, 61, 11, 133, 4, 
+    253, 166, 11, 133, 4, 251, 74, 11, 133, 4, 249, 68, 11, 133, 4, 76, 11, 
+    133, 4, 245, 14, 11, 133, 4, 243, 209, 11, 133, 4, 242, 67, 11, 133, 4, 
+    74, 11, 133, 4, 235, 150, 11, 133, 4, 235, 29, 11, 133, 4, 156, 11, 133, 
+    4, 194, 11, 133, 4, 230, 30, 11, 133, 4, 78, 11, 133, 4, 226, 109, 11, 
+    133, 4, 224, 99, 11, 133, 4, 153, 11, 133, 4, 222, 93, 11, 133, 4, 217, 
+    153, 11, 133, 4, 69, 11, 133, 4, 214, 105, 11, 133, 4, 212, 98, 11, 133, 
+    4, 211, 178, 11, 133, 4, 211, 117, 11, 133, 4, 210, 159, 11, 139, 6, 61, 
+    11, 139, 6, 253, 166, 11, 139, 6, 249, 68, 11, 139, 6, 76, 11, 139, 6, 
+    245, 14, 11, 139, 6, 243, 209, 11, 139, 6, 74, 11, 139, 6, 235, 150, 11, 
+    139, 6, 235, 29, 11, 139, 6, 156, 11, 139, 6, 194, 11, 139, 6, 78, 11, 
+    139, 6, 222, 93, 11, 139, 6, 217, 153, 11, 139, 6, 69, 11, 139, 6, 214, 
+    105, 11, 139, 6, 212, 98, 11, 139, 6, 211, 178, 11, 139, 6, 211, 117, 11, 
+    139, 4, 61, 11, 139, 4, 253, 166, 11, 139, 4, 251, 74, 11, 139, 4, 249, 
+    68, 11, 139, 4, 76, 11, 139, 4, 245, 14, 11, 139, 4, 243, 209, 11, 139, 
+    4, 242, 67, 11, 139, 4, 74, 11, 139, 4, 235, 150, 11, 139, 4, 235, 29, 
+    11, 139, 4, 156, 11, 139, 4, 194, 11, 139, 4, 230, 30, 11, 139, 4, 78, 
+    11, 139, 4, 226, 109, 11, 139, 4, 224, 99, 11, 139, 4, 153, 11, 139, 4, 
+    222, 93, 11, 139, 4, 217, 153, 11, 139, 4, 69, 11, 139, 4, 214, 105, 11, 
+    139, 4, 212, 98, 11, 139, 4, 211, 178, 11, 139, 4, 211, 117, 11, 139, 4, 
+    210, 159, 11, 23, 133, 6, 61, 11, 23, 133, 6, 253, 166, 11, 23, 133, 6, 
+    251, 74, 11, 23, 133, 6, 249, 68, 11, 23, 133, 6, 76, 11, 23, 133, 6, 
+    245, 14, 11, 23, 133, 6, 243, 209, 11, 23, 133, 6, 242, 67, 11, 23, 133, 
+    6, 74, 11, 23, 133, 6, 235, 150, 11, 23, 133, 6, 235, 29, 11, 23, 133, 6, 
+    156, 11, 23, 133, 6, 194, 11, 23, 133, 6, 230, 30, 11, 23, 133, 6, 78, 
+    11, 23, 133, 6, 226, 109, 11, 23, 133, 6, 224, 99, 11, 23, 133, 6, 153, 
+    11, 23, 133, 6, 222, 93, 11, 23, 133, 6, 217, 153, 11, 23, 133, 6, 69, 
+    11, 23, 133, 6, 214, 105, 11, 23, 133, 6, 212, 98, 11, 23, 133, 6, 211, 
+    178, 11, 23, 133, 6, 211, 117, 11, 23, 133, 6, 210, 159, 11, 23, 133, 4, 
+    61, 11, 23, 133, 4, 253, 166, 11, 23, 133, 4, 251, 74, 11, 23, 133, 4, 
+    249, 68, 11, 23, 133, 4, 76, 11, 23, 133, 4, 245, 14, 11, 23, 133, 4, 
+    243, 209, 11, 23, 133, 4, 242, 67, 11, 23, 133, 4, 74, 11, 23, 133, 4, 
+    235, 150, 11, 23, 133, 4, 235, 29, 11, 23, 133, 4, 156, 11, 23, 133, 4, 
+    194, 11, 23, 133, 4, 230, 30, 11, 23, 133, 4, 78, 11, 23, 133, 4, 226, 
+    109, 11, 23, 133, 4, 224, 99, 11, 23, 133, 4, 153, 11, 23, 133, 4, 222, 
+    93, 11, 23, 133, 4, 217, 153, 11, 23, 133, 4, 69, 11, 23, 133, 4, 214, 
+    105, 11, 23, 133, 4, 212, 98, 11, 23, 133, 4, 211, 178, 11, 23, 133, 4, 
+    211, 117, 11, 23, 133, 4, 210, 159, 11, 35, 6, 61, 11, 35, 6, 253, 166, 
+    11, 35, 6, 251, 74, 11, 35, 6, 249, 68, 11, 35, 6, 76, 11, 35, 6, 245, 
+    14, 11, 35, 6, 243, 209, 11, 35, 6, 242, 67, 11, 35, 6, 74, 11, 35, 6, 
+    235, 150, 11, 35, 6, 235, 29, 11, 35, 6, 156, 11, 35, 6, 194, 11, 35, 6, 
+    230, 30, 11, 35, 6, 78, 11, 35, 6, 226, 109, 11, 35, 6, 224, 99, 11, 35, 
+    6, 153, 11, 35, 6, 222, 93, 11, 35, 6, 217, 153, 11, 35, 6, 69, 11, 35, 
+    6, 214, 105, 11, 35, 6, 212, 98, 11, 35, 6, 211, 178, 11, 35, 6, 211, 
+    117, 11, 35, 6, 210, 159, 11, 35, 4, 61, 11, 35, 4, 253, 166, 11, 35, 4, 
+    251, 74, 11, 35, 4, 249, 68, 11, 35, 4, 76, 11, 35, 4, 245, 14, 11, 35, 
+    4, 243, 209, 11, 35, 4, 242, 67, 11, 35, 4, 74, 11, 35, 4, 235, 150, 11, 
+    35, 4, 235, 29, 11, 35, 4, 156, 11, 35, 4, 194, 11, 35, 4, 230, 30, 11, 
+    35, 4, 78, 11, 35, 4, 226, 109, 11, 35, 4, 224, 99, 11, 35, 4, 153, 11, 
+    35, 4, 222, 93, 11, 35, 4, 217, 153, 11, 35, 4, 69, 11, 35, 4, 214, 105, 
+    11, 35, 4, 212, 98, 11, 35, 4, 211, 178, 11, 35, 4, 211, 117, 11, 35, 4, 
+    210, 159, 11, 35, 23, 6, 61, 11, 35, 23, 6, 253, 166, 11, 35, 23, 6, 251, 
+    74, 11, 35, 23, 6, 249, 68, 11, 35, 23, 6, 76, 11, 35, 23, 6, 245, 14, 
+    11, 35, 23, 6, 243, 209, 11, 35, 23, 6, 242, 67, 11, 35, 23, 6, 74, 11, 
+    35, 23, 6, 235, 150, 11, 35, 23, 6, 235, 29, 11, 35, 23, 6, 156, 11, 35, 
+    23, 6, 194, 11, 35, 23, 6, 230, 30, 11, 35, 23, 6, 78, 11, 35, 23, 6, 
+    226, 109, 11, 35, 23, 6, 224, 99, 11, 35, 23, 6, 153, 11, 35, 23, 6, 222, 
+    93, 11, 35, 23, 6, 217, 153, 11, 35, 23, 6, 69, 11, 35, 23, 6, 214, 105, 
+    11, 35, 23, 6, 212, 98, 11, 35, 23, 6, 211, 178, 11, 35, 23, 6, 211, 117, 
+    11, 35, 23, 6, 210, 159, 11, 35, 23, 4, 61, 11, 35, 23, 4, 253, 166, 11, 
+    35, 23, 4, 251, 74, 11, 35, 23, 4, 249, 68, 11, 35, 23, 4, 76, 11, 35, 
+    23, 4, 245, 14, 11, 35, 23, 4, 243, 209, 11, 35, 23, 4, 242, 67, 11, 35, 
+    23, 4, 74, 11, 35, 23, 4, 235, 150, 11, 35, 23, 4, 235, 29, 11, 35, 23, 
+    4, 156, 11, 35, 23, 4, 194, 11, 35, 23, 4, 230, 30, 11, 35, 23, 4, 78, 
+    11, 35, 23, 4, 226, 109, 11, 35, 23, 4, 224, 99, 11, 35, 23, 4, 153, 11, 
+    35, 23, 4, 222, 93, 11, 35, 23, 4, 217, 153, 11, 35, 23, 4, 69, 11, 35, 
+    23, 4, 214, 105, 11, 35, 23, 4, 212, 98, 11, 35, 23, 4, 211, 178, 11, 35, 
+    23, 4, 211, 117, 11, 35, 23, 4, 210, 159, 11, 35, 32, 6, 61, 11, 35, 32, 
+    6, 253, 166, 11, 35, 32, 6, 251, 74, 11, 35, 32, 6, 249, 68, 11, 35, 32, 
+    6, 76, 11, 35, 32, 6, 245, 14, 11, 35, 32, 6, 243, 209, 11, 35, 32, 6, 
+    242, 67, 11, 35, 32, 6, 74, 11, 35, 32, 6, 235, 150, 11, 35, 32, 6, 235, 
+    29, 11, 35, 32, 6, 156, 11, 35, 32, 6, 194, 11, 35, 32, 6, 230, 30, 11, 
+    35, 32, 6, 78, 11, 35, 32, 6, 226, 109, 11, 35, 32, 6, 224, 99, 11, 35, 
+    32, 6, 153, 11, 35, 32, 6, 222, 93, 11, 35, 32, 6, 217, 153, 11, 35, 32, 
+    6, 69, 11, 35, 32, 6, 214, 105, 11, 35, 32, 6, 212, 98, 11, 35, 32, 6, 
+    211, 178, 11, 35, 32, 6, 211, 117, 11, 35, 32, 6, 210, 159, 11, 35, 32, 
+    4, 61, 11, 35, 32, 4, 253, 166, 11, 35, 32, 4, 251, 74, 11, 35, 32, 4, 
+    249, 68, 11, 35, 32, 4, 76, 11, 35, 32, 4, 245, 14, 11, 35, 32, 4, 243, 
+    209, 11, 35, 32, 4, 242, 67, 11, 35, 32, 4, 74, 11, 35, 32, 4, 235, 150, 
+    11, 35, 32, 4, 235, 29, 11, 35, 32, 4, 156, 11, 35, 32, 4, 194, 11, 35, 
+    32, 4, 230, 30, 11, 35, 32, 4, 78, 11, 35, 32, 4, 226, 109, 11, 35, 32, 
+    4, 224, 99, 11, 35, 32, 4, 153, 11, 35, 32, 4, 222, 93, 11, 35, 32, 4, 
+    217, 153, 11, 35, 32, 4, 69, 11, 35, 32, 4, 214, 105, 11, 35, 32, 4, 212, 
+    98, 11, 35, 32, 4, 211, 178, 11, 35, 32, 4, 211, 117, 11, 35, 32, 4, 210, 
+    159, 11, 35, 23, 32, 6, 61, 11, 35, 23, 32, 6, 253, 166, 11, 35, 23, 32, 
+    6, 251, 74, 11, 35, 23, 32, 6, 249, 68, 11, 35, 23, 32, 6, 76, 11, 35, 
+    23, 32, 6, 245, 14, 11, 35, 23, 32, 6, 243, 209, 11, 35, 23, 32, 6, 242, 
+    67, 11, 35, 23, 32, 6, 74, 11, 35, 23, 32, 6, 235, 150, 11, 35, 23, 32, 
+    6, 235, 29, 11, 35, 23, 32, 6, 156, 11, 35, 23, 32, 6, 194, 11, 35, 23, 
+    32, 6, 230, 30, 11, 35, 23, 32, 6, 78, 11, 35, 23, 32, 6, 226, 109, 11, 
+    35, 23, 32, 6, 224, 99, 11, 35, 23, 32, 6, 153, 11, 35, 23, 32, 6, 222, 
+    93, 11, 35, 23, 32, 6, 217, 153, 11, 35, 23, 32, 6, 69, 11, 35, 23, 32, 
+    6, 214, 105, 11, 35, 23, 32, 6, 212, 98, 11, 35, 23, 32, 6, 211, 178, 11, 
+    35, 23, 32, 6, 211, 117, 11, 35, 23, 32, 6, 210, 159, 11, 35, 23, 32, 4, 
+    61, 11, 35, 23, 32, 4, 253, 166, 11, 35, 23, 32, 4, 251, 74, 11, 35, 23, 
+    32, 4, 249, 68, 11, 35, 23, 32, 4, 76, 11, 35, 23, 32, 4, 245, 14, 11, 
+    35, 23, 32, 4, 243, 209, 11, 35, 23, 32, 4, 242, 67, 11, 35, 23, 32, 4, 
+    74, 11, 35, 23, 32, 4, 235, 150, 11, 35, 23, 32, 4, 235, 29, 11, 35, 23, 
+    32, 4, 156, 11, 35, 23, 32, 4, 194, 11, 35, 23, 32, 4, 230, 30, 11, 35, 
+    23, 32, 4, 78, 11, 35, 23, 32, 4, 226, 109, 11, 35, 23, 32, 4, 224, 99, 
+    11, 35, 23, 32, 4, 153, 11, 35, 23, 32, 4, 222, 93, 11, 35, 23, 32, 4, 
+    217, 153, 11, 35, 23, 32, 4, 69, 11, 35, 23, 32, 4, 214, 105, 11, 35, 23, 
+    32, 4, 212, 98, 11, 35, 23, 32, 4, 211, 178, 11, 35, 23, 32, 4, 211, 117, 
+    11, 35, 23, 32, 4, 210, 159, 11, 230, 143, 6, 61, 11, 230, 143, 6, 253, 
+    166, 11, 230, 143, 6, 251, 74, 11, 230, 143, 6, 249, 68, 11, 230, 143, 6, 
+    76, 11, 230, 143, 6, 245, 14, 11, 230, 143, 6, 243, 209, 11, 230, 143, 6, 
+    242, 67, 11, 230, 143, 6, 74, 11, 230, 143, 6, 235, 150, 11, 230, 143, 6, 
+    235, 29, 11, 230, 143, 6, 156, 11, 230, 143, 6, 194, 11, 230, 143, 6, 
+    230, 30, 11, 230, 143, 6, 78, 11, 230, 143, 6, 226, 109, 11, 230, 143, 6, 
+    224, 99, 11, 230, 143, 6, 153, 11, 230, 143, 6, 222, 93, 11, 230, 143, 6, 
+    217, 153, 11, 230, 143, 6, 69, 11, 230, 143, 6, 214, 105, 11, 230, 143, 
+    6, 212, 98, 11, 230, 143, 6, 211, 178, 11, 230, 143, 6, 211, 117, 11, 
+    230, 143, 6, 210, 159, 11, 230, 143, 4, 61, 11, 230, 143, 4, 253, 166, 
+    11, 230, 143, 4, 251, 74, 11, 230, 143, 4, 249, 68, 11, 230, 143, 4, 76, 
+    11, 230, 143, 4, 245, 14, 11, 230, 143, 4, 243, 209, 11, 230, 143, 4, 
+    242, 67, 11, 230, 143, 4, 74, 11, 230, 143, 4, 235, 150, 11, 230, 143, 4, 
+    235, 29, 11, 230, 143, 4, 156, 11, 230, 143, 4, 194, 11, 230, 143, 4, 
+    230, 30, 11, 230, 143, 4, 78, 11, 230, 143, 4, 226, 109, 11, 230, 143, 4, 
+    224, 99, 11, 230, 143, 4, 153, 11, 230, 143, 4, 222, 93, 11, 230, 143, 4, 
+    217, 153, 11, 230, 143, 4, 69, 11, 230, 143, 4, 214, 105, 11, 230, 143, 
+    4, 212, 98, 11, 230, 143, 4, 211, 178, 11, 230, 143, 4, 211, 117, 11, 
+    230, 143, 4, 210, 159, 11, 32, 4, 247, 127, 74, 11, 32, 4, 247, 127, 235, 
+    150, 11, 23, 6, 254, 151, 11, 23, 6, 252, 34, 11, 23, 6, 243, 114, 11, 
+    23, 6, 248, 62, 11, 23, 6, 245, 108, 11, 23, 6, 210, 85, 11, 23, 6, 245, 
+    71, 11, 23, 6, 216, 180, 11, 23, 6, 235, 192, 11, 23, 6, 234, 228, 11, 
+    23, 6, 233, 104, 11, 23, 6, 230, 107, 11, 23, 6, 227, 242, 11, 23, 6, 
+    211, 157, 11, 23, 6, 226, 203, 11, 23, 6, 225, 111, 11, 23, 6, 223, 40, 
+    11, 23, 6, 216, 181, 87, 11, 23, 6, 219, 179, 11, 23, 6, 217, 42, 11, 23, 
+    6, 214, 157, 11, 23, 6, 225, 136, 11, 23, 6, 250, 118, 11, 23, 6, 224, 
+    164, 11, 23, 6, 226, 205, 11, 23, 229, 226, 11, 23, 4, 254, 151, 11, 23, 
+    4, 252, 34, 11, 23, 4, 243, 114, 11, 23, 4, 248, 62, 11, 23, 4, 245, 108, 
+    11, 23, 4, 210, 85, 11, 23, 4, 245, 71, 11, 23, 4, 216, 180, 11, 23, 4, 
+    235, 192, 11, 23, 4, 234, 228, 11, 23, 4, 233, 104, 11, 23, 4, 230, 107, 
+    11, 23, 4, 227, 242, 11, 23, 4, 211, 157, 11, 23, 4, 226, 203, 11, 23, 4, 
+    225, 111, 11, 23, 4, 223, 40, 11, 23, 4, 40, 219, 179, 11, 23, 4, 219, 
+    179, 11, 23, 4, 217, 42, 11, 23, 4, 214, 157, 11, 23, 4, 225, 136, 11, 
+    23, 4, 250, 118, 11, 23, 4, 224, 164, 11, 23, 4, 226, 205, 11, 23, 226, 
+    1, 247, 241, 11, 23, 245, 109, 87, 11, 23, 216, 181, 87, 11, 23, 234, 
+    229, 87, 11, 23, 225, 137, 87, 11, 23, 223, 41, 87, 11, 23, 225, 112, 87, 
+    11, 32, 6, 254, 151, 11, 32, 6, 252, 34, 11, 32, 6, 243, 114, 11, 32, 6, 
+    248, 62, 11, 32, 6, 245, 108, 11, 32, 6, 210, 85, 11, 32, 6, 245, 71, 11, 
+    32, 6, 216, 180, 11, 32, 6, 235, 192, 11, 32, 6, 234, 228, 11, 32, 6, 
+    233, 104, 11, 32, 6, 230, 107, 11, 32, 6, 227, 242, 11, 32, 6, 211, 157, 
+    11, 32, 6, 226, 203, 11, 32, 6, 225, 111, 11, 32, 6, 223, 40, 11, 32, 6, 
+    216, 181, 87, 11, 32, 6, 219, 179, 11, 32, 6, 217, 42, 11, 32, 6, 214, 
+    157, 11, 32, 6, 225, 136, 11, 32, 6, 250, 118, 11, 32, 6, 224, 164, 11, 
+    32, 6, 226, 205, 11, 32, 229, 226, 11, 32, 4, 254, 151, 11, 32, 4, 252, 
+    34, 11, 32, 4, 243, 114, 11, 32, 4, 248, 62, 11, 32, 4, 245, 108, 11, 32, 
+    4, 210, 85, 11, 32, 4, 245, 71, 11, 32, 4, 216, 180, 11, 32, 4, 235, 192, 
+    11, 32, 4, 234, 228, 11, 32, 4, 233, 104, 11, 32, 4, 230, 107, 11, 32, 4, 
+    227, 242, 11, 32, 4, 211, 157, 11, 32, 4, 226, 203, 11, 32, 4, 225, 111, 
+    11, 32, 4, 223, 40, 11, 32, 4, 40, 219, 179, 11, 32, 4, 219, 179, 11, 32, 
+    4, 217, 42, 11, 32, 4, 214, 157, 11, 32, 4, 225, 136, 11, 32, 4, 250, 
+    118, 11, 32, 4, 224, 164, 11, 32, 4, 226, 205, 11, 32, 226, 1, 247, 241, 
+    11, 32, 245, 109, 87, 11, 32, 216, 181, 87, 11, 32, 234, 229, 87, 11, 32, 
+    225, 137, 87, 11, 32, 223, 41, 87, 11, 32, 225, 112, 87, 11, 23, 32, 6, 
+    254, 151, 11, 23, 32, 6, 252, 34, 11, 23, 32, 6, 243, 114, 11, 23, 32, 6, 
+    248, 62, 11, 23, 32, 6, 245, 108, 11, 23, 32, 6, 210, 85, 11, 23, 32, 6, 
+    245, 71, 11, 23, 32, 6, 216, 180, 11, 23, 32, 6, 235, 192, 11, 23, 32, 6, 
+    234, 228, 11, 23, 32, 6, 233, 104, 11, 23, 32, 6, 230, 107, 11, 23, 32, 
+    6, 227, 242, 11, 23, 32, 6, 211, 157, 11, 23, 32, 6, 226, 203, 11, 23, 
+    32, 6, 225, 111, 11, 23, 32, 6, 223, 40, 11, 23, 32, 6, 216, 181, 87, 11, 
+    23, 32, 6, 219, 179, 11, 23, 32, 6, 217, 42, 11, 23, 32, 6, 214, 157, 11, 
+    23, 32, 6, 225, 136, 11, 23, 32, 6, 250, 118, 11, 23, 32, 6, 224, 164, 
+    11, 23, 32, 6, 226, 205, 11, 23, 32, 229, 226, 11, 23, 32, 4, 254, 151, 
+    11, 23, 32, 4, 252, 34, 11, 23, 32, 4, 243, 114, 11, 23, 32, 4, 248, 62, 
+    11, 23, 32, 4, 245, 108, 11, 23, 32, 4, 210, 85, 11, 23, 32, 4, 245, 71, 
+    11, 23, 32, 4, 216, 180, 11, 23, 32, 4, 235, 192, 11, 23, 32, 4, 234, 
+    228, 11, 23, 32, 4, 233, 104, 11, 23, 32, 4, 230, 107, 11, 23, 32, 4, 
+    227, 242, 11, 23, 32, 4, 211, 157, 11, 23, 32, 4, 226, 203, 11, 23, 32, 
+    4, 225, 111, 11, 23, 32, 4, 223, 40, 11, 23, 32, 4, 40, 219, 179, 11, 23, 
+    32, 4, 219, 179, 11, 23, 32, 4, 217, 42, 11, 23, 32, 4, 214, 157, 11, 23, 
+    32, 4, 225, 136, 11, 23, 32, 4, 250, 118, 11, 23, 32, 4, 224, 164, 11, 
+    23, 32, 4, 226, 205, 11, 23, 32, 226, 1, 247, 241, 11, 23, 32, 245, 109, 
+    87, 11, 23, 32, 216, 181, 87, 11, 23, 32, 234, 229, 87, 11, 23, 32, 225, 
+    137, 87, 11, 23, 32, 223, 41, 87, 11, 23, 32, 225, 112, 87, 11, 35, 23, 
+    6, 254, 151, 11, 35, 23, 6, 252, 34, 11, 35, 23, 6, 243, 114, 11, 35, 23, 
+    6, 248, 62, 11, 35, 23, 6, 245, 108, 11, 35, 23, 6, 210, 85, 11, 35, 23, 
+    6, 245, 71, 11, 35, 23, 6, 216, 180, 11, 35, 23, 6, 235, 192, 11, 35, 23, 
+    6, 234, 228, 11, 35, 23, 6, 233, 104, 11, 35, 23, 6, 230, 107, 11, 35, 
+    23, 6, 227, 242, 11, 35, 23, 6, 211, 157, 11, 35, 23, 6, 226, 203, 11, 
+    35, 23, 6, 225, 111, 11, 35, 23, 6, 223, 40, 11, 35, 23, 6, 216, 181, 87, 
+    11, 35, 23, 6, 219, 179, 11, 35, 23, 6, 217, 42, 11, 35, 23, 6, 214, 157, 
+    11, 35, 23, 6, 225, 136, 11, 35, 23, 6, 250, 118, 11, 35, 23, 6, 224, 
+    164, 11, 35, 23, 6, 226, 205, 11, 35, 23, 229, 226, 11, 35, 23, 4, 254, 
+    151, 11, 35, 23, 4, 252, 34, 11, 35, 23, 4, 243, 114, 11, 35, 23, 4, 248, 
+    62, 11, 35, 23, 4, 245, 108, 11, 35, 23, 4, 210, 85, 11, 35, 23, 4, 245, 
+    71, 11, 35, 23, 4, 216, 180, 11, 35, 23, 4, 235, 192, 11, 35, 23, 4, 234, 
+    228, 11, 35, 23, 4, 233, 104, 11, 35, 23, 4, 230, 107, 11, 35, 23, 4, 
+    227, 242, 11, 35, 23, 4, 211, 157, 11, 35, 23, 4, 226, 203, 11, 35, 23, 
+    4, 225, 111, 11, 35, 23, 4, 223, 40, 11, 35, 23, 4, 40, 219, 179, 11, 35, 
+    23, 4, 219, 179, 11, 35, 23, 4, 217, 42, 11, 35, 23, 4, 214, 157, 11, 35, 
+    23, 4, 225, 136, 11, 35, 23, 4, 250, 118, 11, 35, 23, 4, 224, 164, 11, 
+    35, 23, 4, 226, 205, 11, 35, 23, 226, 1, 247, 241, 11, 35, 23, 245, 109, 
+    87, 11, 35, 23, 216, 181, 87, 11, 35, 23, 234, 229, 87, 11, 35, 23, 225, 
+    137, 87, 11, 35, 23, 223, 41, 87, 11, 35, 23, 225, 112, 87, 11, 35, 23, 
+    32, 6, 254, 151, 11, 35, 23, 32, 6, 252, 34, 11, 35, 23, 32, 6, 243, 114, 
+    11, 35, 23, 32, 6, 248, 62, 11, 35, 23, 32, 6, 245, 108, 11, 35, 23, 32, 
+    6, 210, 85, 11, 35, 23, 32, 6, 245, 71, 11, 35, 23, 32, 6, 216, 180, 11, 
+    35, 23, 32, 6, 235, 192, 11, 35, 23, 32, 6, 234, 228, 11, 35, 23, 32, 6, 
+    233, 104, 11, 35, 23, 32, 6, 230, 107, 11, 35, 23, 32, 6, 227, 242, 11, 
+    35, 23, 32, 6, 211, 157, 11, 35, 23, 32, 6, 226, 203, 11, 35, 23, 32, 6, 
+    225, 111, 11, 35, 23, 32, 6, 223, 40, 11, 35, 23, 32, 6, 216, 181, 87, 
+    11, 35, 23, 32, 6, 219, 179, 11, 35, 23, 32, 6, 217, 42, 11, 35, 23, 32, 
+    6, 214, 157, 11, 35, 23, 32, 6, 225, 136, 11, 35, 23, 32, 6, 250, 118, 
+    11, 35, 23, 32, 6, 224, 164, 11, 35, 23, 32, 6, 226, 205, 11, 35, 23, 32, 
+    229, 226, 11, 35, 23, 32, 4, 254, 151, 11, 35, 23, 32, 4, 252, 34, 11, 
+    35, 23, 32, 4, 243, 114, 11, 35, 23, 32, 4, 248, 62, 11, 35, 23, 32, 4, 
+    245, 108, 11, 35, 23, 32, 4, 210, 85, 11, 35, 23, 32, 4, 245, 71, 11, 35, 
+    23, 32, 4, 216, 180, 11, 35, 23, 32, 4, 235, 192, 11, 35, 23, 32, 4, 234, 
+    228, 11, 35, 23, 32, 4, 233, 104, 11, 35, 23, 32, 4, 230, 107, 11, 35, 
+    23, 32, 4, 227, 242, 11, 35, 23, 32, 4, 211, 157, 11, 35, 23, 32, 4, 226, 
+    203, 11, 35, 23, 32, 4, 225, 111, 11, 35, 23, 32, 4, 223, 40, 11, 35, 23, 
+    32, 4, 40, 219, 179, 11, 35, 23, 32, 4, 219, 179, 11, 35, 23, 32, 4, 217, 
+    42, 11, 35, 23, 32, 4, 214, 157, 11, 35, 23, 32, 4, 225, 136, 11, 35, 23, 
+    32, 4, 250, 118, 11, 35, 23, 32, 4, 224, 164, 11, 35, 23, 32, 4, 226, 
+    205, 11, 35, 23, 32, 226, 1, 247, 241, 11, 35, 23, 32, 245, 109, 87, 11, 
+    35, 23, 32, 216, 181, 87, 11, 35, 23, 32, 234, 229, 87, 11, 35, 23, 32, 
+    225, 137, 87, 11, 35, 23, 32, 223, 41, 87, 11, 35, 23, 32, 225, 112, 87, 
+    11, 23, 6, 247, 235, 11, 23, 4, 247, 235, 11, 23, 21, 210, 86, 11, 23, 
+    21, 111, 11, 23, 21, 105, 11, 23, 21, 158, 11, 23, 21, 161, 11, 23, 21, 
+    190, 11, 23, 21, 195, 11, 23, 21, 199, 11, 23, 21, 196, 11, 23, 21, 201, 
+    11, 139, 21, 210, 86, 11, 139, 21, 111, 11, 139, 21, 105, 11, 139, 21, 
+    158, 11, 139, 21, 161, 11, 139, 21, 190, 11, 139, 21, 195, 11, 139, 21, 
+    199, 11, 139, 21, 196, 11, 139, 21, 201, 11, 35, 21, 210, 86, 11, 35, 21, 
+    111, 11, 35, 21, 105, 11, 35, 21, 158, 11, 35, 21, 161, 11, 35, 21, 190, 
+    11, 35, 21, 195, 11, 35, 21, 199, 11, 35, 21, 196, 11, 35, 21, 201, 11, 
+    35, 23, 21, 210, 86, 11, 35, 23, 21, 111, 11, 35, 23, 21, 105, 11, 35, 
+    23, 21, 158, 11, 35, 23, 21, 161, 11, 35, 23, 21, 190, 11, 35, 23, 21, 
+    195, 11, 35, 23, 21, 199, 11, 35, 23, 21, 196, 11, 35, 23, 21, 201, 11, 
+    230, 143, 21, 210, 86, 11, 230, 143, 21, 111, 11, 230, 143, 21, 105, 11, 
+    230, 143, 21, 158, 11, 230, 143, 21, 161, 11, 230, 143, 21, 190, 11, 230, 
+    143, 21, 195, 11, 230, 143, 21, 199, 11, 230, 143, 21, 196, 11, 230, 143, 
+    21, 201, 9, 11, 254, 179, 9, 11, 252, 62, 9, 11, 235, 129, 9, 11, 248, 
+    203, 9, 11, 212, 30, 9, 11, 210, 108, 9, 11, 242, 44, 9, 11, 217, 81, 9, 
+    11, 211, 43, 9, 11, 235, 0, 9, 11, 233, 108, 9, 11, 231, 83, 9, 11, 228, 
+    67, 9, 11, 221, 168, 9, 11, 254, 205, 9, 11, 244, 150, 9, 11, 222, 28, 9, 
+    11, 224, 84, 9, 11, 223, 98, 9, 11, 220, 61, 9, 11, 217, 8, 9, 11, 216, 
+    193, 9, 11, 234, 135, 9, 11, 216, 203, 9, 11, 248, 224, 9, 11, 210, 111, 
+    9, 11, 242, 251, 9, 11, 247, 127, 252, 62, 9, 11, 247, 127, 228, 67, 9, 
+    11, 247, 127, 244, 150, 9, 11, 247, 127, 224, 84, 9, 11, 65, 252, 62, 9, 
+    11, 65, 235, 129, 9, 11, 65, 241, 225, 9, 11, 65, 242, 44, 9, 11, 65, 
+    211, 43, 9, 11, 65, 235, 0, 9, 11, 65, 233, 108, 9, 11, 65, 231, 83, 9, 
+    11, 65, 228, 67, 9, 11, 65, 221, 168, 9, 11, 65, 254, 205, 9, 11, 65, 
+    244, 150, 9, 11, 65, 222, 28, 9, 11, 65, 224, 84, 9, 11, 65, 220, 61, 9, 
+    11, 65, 217, 8, 9, 11, 65, 216, 193, 9, 11, 65, 234, 135, 9, 11, 65, 248, 
+    224, 9, 11, 65, 242, 251, 9, 11, 217, 77, 235, 129, 9, 11, 217, 77, 242, 
+    44, 9, 11, 217, 77, 211, 43, 9, 11, 217, 77, 233, 108, 9, 11, 217, 77, 
+    228, 67, 9, 11, 217, 77, 221, 168, 9, 11, 217, 77, 254, 205, 9, 11, 217, 
+    77, 222, 28, 9, 11, 217, 77, 224, 84, 9, 11, 217, 77, 220, 61, 9, 11, 
+    217, 77, 234, 135, 9, 11, 217, 77, 248, 224, 9, 11, 217, 77, 242, 251, 9, 
+    11, 217, 77, 247, 127, 228, 67, 9, 11, 217, 77, 247, 127, 224, 84, 9, 11, 
+    218, 112, 252, 62, 9, 11, 218, 112, 235, 129, 9, 11, 218, 112, 241, 225, 
+    9, 11, 218, 112, 242, 44, 9, 11, 218, 112, 217, 81, 9, 11, 218, 112, 211, 
+    43, 9, 11, 218, 112, 235, 0, 9, 11, 218, 112, 231, 83, 9, 11, 218, 112, 
+    228, 67, 9, 11, 218, 112, 221, 168, 9, 11, 218, 112, 254, 205, 9, 11, 
+    218, 112, 244, 150, 9, 11, 218, 112, 222, 28, 9, 11, 218, 112, 224, 84, 
+    9, 11, 218, 112, 220, 61, 9, 11, 218, 112, 217, 8, 9, 11, 218, 112, 216, 
+    193, 9, 11, 218, 112, 234, 135, 9, 11, 218, 112, 248, 224, 9, 11, 218, 
+    112, 210, 111, 9, 11, 218, 112, 242, 251, 9, 11, 218, 112, 247, 127, 252, 
+    62, 9, 11, 218, 112, 247, 127, 244, 150, 9, 11, 232, 128, 254, 179, 9, 
+    11, 232, 128, 252, 62, 9, 11, 232, 128, 235, 129, 9, 11, 232, 128, 248, 
+    203, 9, 11, 232, 128, 241, 225, 9, 11, 232, 128, 212, 30, 9, 11, 232, 
+    128, 210, 108, 9, 11, 232, 128, 242, 44, 9, 11, 232, 128, 217, 81, 9, 11, 
+    232, 128, 211, 43, 9, 11, 232, 128, 233, 108, 9, 11, 232, 128, 231, 83, 
+    9, 11, 232, 128, 228, 67, 9, 11, 232, 128, 221, 168, 9, 11, 232, 128, 
+    254, 205, 9, 11, 232, 128, 244, 150, 9, 11, 232, 128, 222, 28, 9, 11, 
+    232, 128, 224, 84, 9, 11, 232, 128, 223, 98, 9, 11, 232, 128, 220, 61, 9, 
+    11, 232, 128, 217, 8, 9, 11, 232, 128, 216, 193, 9, 11, 232, 128, 234, 
+    135, 9, 11, 232, 128, 216, 203, 9, 11, 232, 128, 248, 224, 9, 11, 232, 
+    128, 210, 111, 9, 11, 232, 128, 242, 251, 9, 11, 139, 252, 62, 9, 11, 
+    139, 235, 129, 9, 11, 139, 248, 203, 9, 11, 139, 212, 30, 9, 11, 139, 
+    210, 108, 9, 11, 139, 242, 44, 9, 11, 139, 217, 81, 9, 11, 139, 211, 43, 
+    9, 11, 139, 233, 108, 9, 11, 139, 231, 83, 9, 11, 139, 228, 67, 9, 11, 
+    139, 221, 168, 9, 11, 139, 254, 205, 9, 11, 139, 244, 150, 9, 11, 139, 
+    222, 28, 9, 11, 139, 224, 84, 9, 11, 139, 223, 98, 9, 11, 139, 220, 61, 
+    9, 11, 139, 217, 8, 9, 11, 139, 216, 193, 9, 11, 139, 234, 135, 9, 11, 
+    139, 216, 203, 9, 11, 139, 248, 224, 9, 11, 139, 210, 111, 9, 11, 139, 
+    242, 251, 9, 11, 226, 172, 66, 2, 122, 2, 217, 44, 9, 11, 226, 172, 122, 
+    2, 248, 203, 231, 210, 86, 245, 228, 211, 239, 231, 210, 86, 219, 30, 
+    211, 239, 231, 210, 86, 212, 9, 211, 239, 231, 210, 86, 228, 61, 211, 
+    239, 231, 210, 86, 223, 114, 246, 104, 231, 210, 86, 242, 134, 246, 104, 
+    231, 210, 86, 71, 246, 104, 231, 210, 86, 123, 64, 250, 149, 231, 210, 
+    86, 113, 64, 250, 149, 231, 210, 86, 134, 64, 250, 149, 231, 210, 86, 
+    244, 19, 64, 250, 149, 231, 210, 86, 244, 89, 64, 250, 149, 231, 210, 86, 
+    219, 127, 64, 250, 149, 231, 210, 86, 220, 124, 64, 250, 149, 231, 210, 
+    86, 245, 201, 64, 250, 149, 231, 210, 86, 228, 205, 64, 250, 149, 231, 
+    210, 86, 123, 64, 252, 161, 231, 210, 86, 113, 64, 252, 161, 231, 210, 
+    86, 134, 64, 252, 161, 231, 210, 86, 244, 19, 64, 252, 161, 231, 210, 86, 
+    244, 89, 64, 252, 161, 231, 210, 86, 219, 127, 64, 252, 161, 231, 210, 
+    86, 220, 124, 64, 252, 161, 231, 210, 86, 245, 201, 64, 252, 161, 231, 
+    210, 86, 228, 205, 64, 252, 161, 231, 210, 86, 123, 64, 250, 42, 231, 
+    210, 86, 113, 64, 250, 42, 231, 210, 86, 134, 64, 250, 42, 231, 210, 86, 
+    244, 19, 64, 250, 42, 231, 210, 86, 244, 89, 64, 250, 42, 231, 210, 86, 
+    219, 127, 64, 250, 42, 231, 210, 86, 220, 124, 64, 250, 42, 231, 210, 86, 
+    245, 201, 64, 250, 42, 231, 210, 86, 228, 205, 64, 250, 42, 231, 210, 86, 
+    225, 28, 231, 210, 86, 226, 160, 231, 210, 86, 252, 162, 231, 210, 86, 
+    250, 78, 231, 210, 86, 218, 241, 231, 210, 86, 218, 40, 231, 210, 86, 
+    253, 187, 231, 210, 86, 211, 232, 231, 210, 86, 235, 68, 231, 210, 86, 
+    252, 192, 131, 86, 203, 252, 192, 131, 86, 241, 50, 131, 86, 241, 49, 
+    131, 86, 241, 48, 131, 86, 241, 47, 131, 86, 241, 46, 131, 86, 241, 45, 
+    131, 86, 241, 44, 131, 86, 241, 43, 131, 86, 241, 42, 131, 86, 241, 41, 
+    131, 86, 241, 40, 131, 86, 241, 39, 131, 86, 241, 38, 131, 86, 241, 37, 
+    131, 86, 241, 36, 131, 86, 241, 35, 131, 86, 241, 34, 131, 86, 241, 33, 
+    131, 86, 241, 32, 131, 86, 241, 31, 131, 86, 241, 30, 131, 86, 241, 29, 
+    131, 86, 241, 28, 131, 86, 241, 27, 131, 86, 241, 26, 131, 86, 241, 25, 
+    131, 86, 241, 24, 131, 86, 241, 23, 131, 86, 241, 22, 131, 86, 241, 21, 
+    131, 86, 241, 20, 131, 86, 241, 19, 131, 86, 241, 18, 131, 86, 241, 17, 
+    131, 86, 241, 16, 131, 86, 241, 15, 131, 86, 241, 14, 131, 86, 241, 13, 
+    131, 86, 241, 12, 131, 86, 241, 11, 131, 86, 241, 10, 131, 86, 241, 9, 
+    131, 86, 241, 8, 131, 86, 241, 7, 131, 86, 241, 6, 131, 86, 241, 5, 131, 
+    86, 241, 4, 131, 86, 241, 3, 131, 86, 241, 2, 131, 86, 67, 252, 192, 131, 
+    86, 213, 238, 131, 86, 213, 237, 131, 86, 213, 236, 131, 86, 213, 235, 
+    131, 86, 213, 234, 131, 86, 213, 233, 131, 86, 213, 232, 131, 86, 213, 
+    231, 131, 86, 213, 230, 131, 86, 213, 229, 131, 86, 213, 228, 131, 86, 
+    213, 227, 131, 86, 213, 226, 131, 86, 213, 225, 131, 86, 213, 224, 131, 
+    86, 213, 223, 131, 86, 213, 222, 131, 86, 213, 221, 131, 86, 213, 220, 
+    131, 86, 213, 219, 131, 86, 213, 218, 131, 86, 213, 217, 131, 86, 213, 
+    216, 131, 86, 213, 215, 131, 86, 213, 214, 131, 86, 213, 213, 131, 86, 
+    213, 212, 131, 86, 213, 211, 131, 86, 213, 210, 131, 86, 213, 209, 131, 
+    86, 213, 208, 131, 86, 213, 207, 131, 86, 213, 206, 131, 86, 213, 205, 
+    131, 86, 213, 204, 131, 86, 213, 203, 131, 86, 213, 202, 131, 86, 213, 
+    201, 131, 86, 213, 200, 131, 86, 213, 199, 131, 86, 213, 198, 131, 86, 
+    213, 197, 131, 86, 213, 196, 131, 86, 213, 195, 131, 86, 213, 194, 131, 
+    86, 213, 193, 131, 86, 213, 192, 131, 86, 213, 191, 131, 86, 213, 190, 
+    225, 36, 250, 251, 252, 192, 225, 36, 250, 251, 255, 18, 64, 219, 17, 
+    225, 36, 250, 251, 113, 64, 219, 17, 225, 36, 250, 251, 134, 64, 219, 17, 
+    225, 36, 250, 251, 244, 19, 64, 219, 17, 225, 36, 250, 251, 244, 89, 64, 
+    219, 17, 225, 36, 250, 251, 219, 127, 64, 219, 17, 225, 36, 250, 251, 
+    220, 124, 64, 219, 17, 225, 36, 250, 251, 245, 201, 64, 219, 17, 225, 36, 
+    250, 251, 228, 205, 64, 219, 17, 225, 36, 250, 251, 216, 249, 64, 219, 
+    17, 225, 36, 250, 251, 235, 145, 64, 219, 17, 225, 36, 250, 251, 234, 37, 
+    64, 219, 17, 225, 36, 250, 251, 224, 18, 64, 219, 17, 225, 36, 250, 251, 
+    234, 85, 64, 219, 17, 225, 36, 250, 251, 255, 18, 64, 241, 232, 225, 36, 
+    250, 251, 113, 64, 241, 232, 225, 36, 250, 251, 134, 64, 241, 232, 225, 
+    36, 250, 251, 244, 19, 64, 241, 232, 225, 36, 250, 251, 244, 89, 64, 241, 
+    232, 225, 36, 250, 251, 219, 127, 64, 241, 232, 225, 36, 250, 251, 220, 
+    124, 64, 241, 232, 225, 36, 250, 251, 245, 201, 64, 241, 232, 225, 36, 
+    250, 251, 228, 205, 64, 241, 232, 225, 36, 250, 251, 216, 249, 64, 241, 
+    232, 225, 36, 250, 251, 235, 145, 64, 241, 232, 225, 36, 250, 251, 234, 
+    37, 64, 241, 232, 225, 36, 250, 251, 224, 18, 64, 241, 232, 225, 36, 250, 
+    251, 234, 85, 64, 241, 232, 225, 36, 250, 251, 255, 18, 64, 247, 255, 
+    225, 36, 250, 251, 113, 64, 247, 255, 225, 36, 250, 251, 134, 64, 247, 
+    255, 225, 36, 250, 251, 244, 19, 64, 247, 255, 225, 36, 250, 251, 244, 
+    89, 64, 247, 255, 225, 36, 250, 251, 219, 127, 64, 247, 255, 225, 36, 
+    250, 251, 220, 124, 64, 247, 255, 225, 36, 250, 251, 245, 201, 64, 247, 
+    255, 225, 36, 250, 251, 228, 205, 64, 247, 255, 225, 36, 250, 251, 216, 
+    249, 64, 247, 255, 225, 36, 250, 251, 235, 145, 64, 247, 255, 225, 36, 
+    250, 251, 234, 37, 64, 247, 255, 225, 36, 250, 251, 224, 18, 64, 247, 
+    255, 225, 36, 250, 251, 234, 85, 64, 247, 255, 225, 36, 250, 251, 85, 
+    235, 68, 225, 36, 250, 251, 255, 18, 64, 249, 250, 225, 36, 250, 251, 
+    113, 64, 249, 250, 225, 36, 250, 251, 134, 64, 249, 250, 225, 36, 250, 
+    251, 244, 19, 64, 249, 250, 225, 36, 250, 251, 244, 89, 64, 249, 250, 
+    225, 36, 250, 251, 219, 127, 64, 249, 250, 225, 36, 250, 251, 220, 124, 
+    64, 249, 250, 225, 36, 250, 251, 245, 201, 64, 249, 250, 225, 36, 250, 
+    251, 228, 205, 64, 249, 250, 225, 36, 250, 251, 216, 249, 64, 249, 250, 
+    225, 36, 250, 251, 235, 145, 64, 249, 250, 225, 36, 250, 251, 234, 37, 
+    64, 249, 250, 225, 36, 250, 251, 224, 18, 64, 249, 250, 225, 36, 250, 
+    251, 234, 85, 64, 249, 250, 225, 36, 250, 251, 71, 235, 68, 21, 210, 87, 
+    243, 236, 218, 131, 21, 210, 87, 249, 227, 21, 123, 249, 227, 21, 113, 
+    249, 227, 21, 134, 249, 227, 21, 244, 19, 249, 227, 21, 244, 89, 249, 
+    227, 21, 219, 127, 249, 227, 21, 220, 124, 249, 227, 21, 245, 201, 249, 
+    227, 21, 228, 205, 249, 227, 88, 7, 6, 1, 61, 88, 7, 6, 1, 253, 166, 88, 
+    7, 6, 1, 251, 74, 88, 7, 6, 1, 249, 68, 88, 7, 6, 1, 76, 88, 7, 6, 1, 
+    245, 14, 88, 7, 6, 1, 243, 209, 88, 7, 6, 1, 242, 67, 88, 7, 6, 1, 74, 
+    88, 7, 6, 1, 235, 150, 88, 7, 6, 1, 235, 29, 88, 7, 6, 1, 156, 88, 7, 6, 
+    1, 194, 88, 7, 6, 1, 230, 30, 88, 7, 6, 1, 78, 88, 7, 6, 1, 226, 109, 88, 
+    7, 6, 1, 224, 99, 88, 7, 6, 1, 153, 88, 7, 6, 1, 222, 93, 88, 7, 6, 1, 
+    217, 153, 88, 7, 6, 1, 69, 88, 7, 6, 1, 214, 105, 88, 7, 6, 1, 212, 98, 
+    88, 7, 6, 1, 211, 178, 88, 7, 6, 1, 211, 117, 88, 7, 6, 1, 210, 159, 216, 
+    7, 220, 55, 251, 165, 7, 6, 1, 222, 93, 37, 32, 7, 6, 1, 251, 74, 37, 32, 
+    7, 6, 1, 153, 37, 250, 199, 37, 211, 180, 92, 7, 6, 1, 61, 92, 7, 6, 1, 
+    253, 166, 92, 7, 6, 1, 251, 74, 92, 7, 6, 1, 249, 68, 92, 7, 6, 1, 76, 
+    92, 7, 6, 1, 245, 14, 92, 7, 6, 1, 243, 209, 92, 7, 6, 1, 242, 67, 92, 7, 
+    6, 1, 74, 92, 7, 6, 1, 235, 150, 92, 7, 6, 1, 235, 29, 92, 7, 6, 1, 156, 
+    92, 7, 6, 1, 194, 92, 7, 6, 1, 230, 30, 92, 7, 6, 1, 78, 92, 7, 6, 1, 
+    226, 109, 92, 7, 6, 1, 224, 99, 92, 7, 6, 1, 153, 92, 7, 6, 1, 222, 93, 
+    92, 7, 6, 1, 217, 153, 92, 7, 6, 1, 69, 92, 7, 6, 1, 214, 105, 92, 7, 6, 
+    1, 212, 98, 92, 7, 6, 1, 211, 178, 92, 7, 6, 1, 211, 117, 92, 7, 6, 1, 
+    210, 159, 92, 240, 208, 92, 230, 54, 92, 221, 185, 92, 218, 228, 92, 224, 
+    221, 92, 212, 23, 152, 37, 7, 6, 1, 61, 152, 37, 7, 6, 1, 253, 166, 152, 
+    37, 7, 6, 1, 251, 74, 152, 37, 7, 6, 1, 249, 68, 152, 37, 7, 6, 1, 76, 
+    152, 37, 7, 6, 1, 245, 14, 152, 37, 7, 6, 1, 243, 209, 152, 37, 7, 6, 1, 
+    242, 67, 152, 37, 7, 6, 1, 74, 152, 37, 7, 6, 1, 235, 150, 152, 37, 7, 6, 
+    1, 235, 29, 152, 37, 7, 6, 1, 156, 152, 37, 7, 6, 1, 194, 152, 37, 7, 6, 
+    1, 230, 30, 152, 37, 7, 6, 1, 78, 152, 37, 7, 6, 1, 226, 109, 152, 37, 7, 
+    6, 1, 224, 99, 152, 37, 7, 6, 1, 153, 152, 37, 7, 6, 1, 222, 93, 152, 37, 
+    7, 6, 1, 217, 153, 152, 37, 7, 6, 1, 69, 152, 37, 7, 6, 1, 214, 105, 152, 
+    37, 7, 6, 1, 212, 98, 152, 37, 7, 6, 1, 211, 178, 152, 37, 7, 6, 1, 211, 
+    117, 152, 37, 7, 6, 1, 210, 159, 223, 160, 231, 102, 50, 223, 160, 231, 
+    99, 50, 152, 92, 7, 6, 1, 61, 152, 92, 7, 6, 1, 253, 166, 152, 92, 7, 6, 
+    1, 251, 74, 152, 92, 7, 6, 1, 249, 68, 152, 92, 7, 6, 1, 76, 152, 92, 7, 
+    6, 1, 245, 14, 152, 92, 7, 6, 1, 243, 209, 152, 92, 7, 6, 1, 242, 67, 
+    152, 92, 7, 6, 1, 74, 152, 92, 7, 6, 1, 235, 150, 152, 92, 7, 6, 1, 235, 
+    29, 152, 92, 7, 6, 1, 156, 152, 92, 7, 6, 1, 194, 152, 92, 7, 6, 1, 230, 
+    30, 152, 92, 7, 6, 1, 78, 152, 92, 7, 6, 1, 226, 109, 152, 92, 7, 6, 1, 
+    224, 99, 152, 92, 7, 6, 1, 153, 152, 92, 7, 6, 1, 222, 93, 152, 92, 7, 6, 
+    1, 217, 153, 152, 92, 7, 6, 1, 69, 152, 92, 7, 6, 1, 214, 105, 152, 92, 
+    7, 6, 1, 212, 98, 152, 92, 7, 6, 1, 211, 178, 152, 92, 7, 6, 1, 211, 117, 
+    152, 92, 7, 6, 1, 210, 159, 249, 136, 152, 92, 7, 6, 1, 226, 109, 152, 
+    92, 240, 120, 152, 92, 191, 152, 92, 206, 152, 92, 255, 34, 152, 92, 212, 
+    23, 42, 247, 172, 92, 250, 31, 92, 249, 178, 92, 244, 4, 92, 240, 112, 
+    92, 229, 91, 92, 229, 84, 92, 226, 218, 92, 219, 37, 92, 120, 2, 245, 39, 
+    79, 92, 213, 119, 223, 106, 235, 246, 16, 1, 61, 223, 106, 235, 246, 16, 
+    1, 253, 166, 223, 106, 235, 246, 16, 1, 251, 74, 223, 106, 235, 246, 16, 
+    1, 249, 68, 223, 106, 235, 246, 16, 1, 76, 223, 106, 235, 246, 16, 1, 
+    245, 14, 223, 106, 235, 246, 16, 1, 243, 209, 223, 106, 235, 246, 16, 1, 
+    242, 67, 223, 106, 235, 246, 16, 1, 74, 223, 106, 235, 246, 16, 1, 235, 
+    150, 223, 106, 235, 246, 16, 1, 235, 29, 223, 106, 235, 246, 16, 1, 156, 
+    223, 106, 235, 246, 16, 1, 194, 223, 106, 235, 246, 16, 1, 230, 30, 223, 
+    106, 235, 246, 16, 1, 78, 223, 106, 235, 246, 16, 1, 226, 109, 223, 106, 
+    235, 246, 16, 1, 224, 99, 223, 106, 235, 246, 16, 1, 153, 223, 106, 235, 
+    246, 16, 1, 222, 93, 223, 106, 235, 246, 16, 1, 217, 153, 223, 106, 235, 
+    246, 16, 1, 69, 223, 106, 235, 246, 16, 1, 214, 105, 223, 106, 235, 246, 
+    16, 1, 212, 98, 223, 106, 235, 246, 16, 1, 211, 178, 223, 106, 235, 246, 
+    16, 1, 211, 117, 223, 106, 235, 246, 16, 1, 210, 159, 42, 141, 241, 70, 
+    92, 56, 234, 24, 92, 56, 206, 92, 10, 214, 177, 238, 57, 92, 10, 214, 
+    177, 238, 61, 92, 10, 214, 177, 238, 69, 92, 56, 248, 98, 92, 10, 214, 
+    177, 238, 76, 92, 10, 214, 177, 238, 63, 92, 10, 214, 177, 238, 35, 92, 
+    10, 214, 177, 238, 62, 92, 10, 214, 177, 238, 75, 92, 10, 214, 177, 238, 
+    49, 92, 10, 214, 177, 238, 42, 92, 10, 214, 177, 238, 51, 92, 10, 214, 
+    177, 238, 72, 92, 10, 214, 177, 238, 58, 92, 10, 214, 177, 238, 74, 92, 
+    10, 214, 177, 238, 50, 92, 10, 214, 177, 238, 73, 92, 10, 214, 177, 238, 
+    36, 92, 10, 214, 177, 238, 41, 92, 10, 214, 177, 238, 34, 92, 10, 214, 
+    177, 238, 64, 92, 10, 214, 177, 238, 66, 92, 10, 214, 177, 238, 44, 92, 
+    10, 214, 177, 238, 55, 92, 10, 214, 177, 238, 53, 92, 10, 214, 177, 238, 
+    79, 92, 10, 214, 177, 238, 78, 92, 10, 214, 177, 238, 32, 92, 10, 214, 
+    177, 238, 59, 92, 10, 214, 177, 238, 77, 92, 10, 214, 177, 238, 68, 92, 
+    10, 214, 177, 238, 54, 92, 10, 214, 177, 238, 33, 92, 10, 214, 177, 238, 
+    56, 92, 10, 214, 177, 238, 38, 92, 10, 214, 177, 238, 37, 92, 10, 214, 
+    177, 238, 67, 92, 10, 214, 177, 238, 45, 92, 10, 214, 177, 238, 47, 92, 
+    10, 214, 177, 238, 48, 92, 10, 214, 177, 238, 40, 92, 10, 214, 177, 238, 
+    71, 92, 10, 214, 177, 238, 65, 216, 7, 220, 55, 251, 165, 10, 214, 177, 
+    238, 46, 216, 7, 220, 55, 251, 165, 10, 214, 177, 238, 78, 216, 7, 220, 
+    55, 251, 165, 10, 214, 177, 238, 76, 216, 7, 220, 55, 251, 165, 10, 214, 
+    177, 238, 60, 216, 7, 220, 55, 251, 165, 10, 214, 177, 238, 43, 216, 7, 
+    220, 55, 251, 165, 10, 214, 177, 238, 56, 216, 7, 220, 55, 251, 165, 10, 
+    214, 177, 238, 39, 216, 7, 220, 55, 251, 165, 10, 214, 177, 238, 70, 216, 
+    7, 220, 55, 251, 165, 10, 214, 177, 238, 52, 37, 154, 254, 254, 37, 154, 
+    255, 21, 249, 79, 244, 50, 250, 8, 214, 194, 228, 218, 2, 218, 155, 218, 
+    34, 115, 230, 119, 218, 33, 250, 34, 253, 215, 246, 62, 218, 32, 115, 
+    251, 126, 223, 161, 251, 148, 253, 215, 228, 217, 212, 41, 212, 35, 213, 
+    131, 230, 200, 212, 25, 245, 232, 242, 188, 245, 53, 245, 232, 242, 188, 
+    254, 136, 245, 232, 242, 188, 253, 233, 242, 188, 2, 231, 56, 166, 230, 
+    134, 87, 212, 27, 249, 145, 230, 134, 87, 244, 100, 224, 25, 230, 134, 
+    87, 212, 27, 242, 217, 230, 134, 87, 243, 236, 230, 134, 87, 212, 52, 
+    242, 217, 230, 134, 87, 233, 86, 224, 25, 230, 134, 87, 212, 52, 249, 
+    145, 230, 134, 87, 249, 145, 230, 133, 166, 230, 134, 2, 244, 198, 244, 
+    100, 224, 25, 230, 134, 2, 244, 198, 233, 86, 224, 25, 230, 134, 2, 244, 
+    198, 243, 236, 230, 134, 2, 244, 198, 218, 39, 2, 244, 198, 242, 186, 
+    218, 158, 220, 1, 218, 158, 250, 124, 221, 170, 245, 47, 215, 236, 248, 
+    92, 215, 236, 226, 63, 215, 236, 251, 35, 215, 110, 250, 126, 251, 218, 
+    222, 193, 241, 186, 218, 37, 251, 218, 245, 236, 64, 231, 199, 245, 236, 
+    64, 223, 34, 241, 211, 244, 19, 233, 60, 249, 254, 231, 175, 233, 59, 
+    244, 184, 233, 59, 233, 60, 244, 55, 236, 7, 211, 239, 230, 63, 216, 35, 
+    253, 199, 242, 150, 231, 72, 212, 39, 217, 58, 233, 32, 252, 157, 225, 
+    65, 223, 114, 254, 62, 242, 134, 254, 62, 225, 220, 225, 221, 250, 127, 
+    218, 116, 242, 30, 219, 92, 64, 225, 47, 231, 92, 226, 201, 251, 202, 
+    224, 232, 233, 42, 223, 35, 249, 150, 223, 35, 252, 167, 249, 181, 223, 
+    34, 249, 103, 22, 223, 34, 218, 143, 251, 175, 219, 16, 251, 159, 244, 3, 
+    243, 255, 222, 209, 217, 247, 224, 234, 248, 183, 226, 240, 218, 8, 244, 
+    0, 219, 232, 244, 99, 251, 29, 2, 217, 240, 248, 43, 219, 54, 240, 119, 
+    249, 149, 220, 72, 240, 118, 240, 119, 249, 149, 246, 116, 249, 180, 250, 
+    92, 130, 251, 6, 232, 147, 249, 96, 241, 62, 224, 236, 219, 242, 252, 44, 
+    251, 171, 224, 237, 64, 244, 41, 249, 179, 244, 32, 22, 234, 38, 217, 20, 
+    211, 230, 242, 20, 222, 14, 251, 185, 22, 249, 110, 211, 237, 242, 191, 
+    249, 243, 242, 191, 215, 194, 246, 98, 252, 70, 230, 98, 250, 15, 252, 
+    70, 230, 97, 252, 195, 251, 184, 223, 36, 211, 201, 224, 198, 251, 243, 
+    251, 28, 235, 144, 250, 85, 215, 236, 244, 170, 250, 84, 244, 102, 244, 
+    103, 219, 14, 252, 166, 225, 254, 224, 247, 249, 212, 252, 167, 217, 60, 
+    215, 236, 249, 136, 244, 75, 225, 66, 248, 89, 235, 137, 247, 139, 250, 
+    240, 218, 115, 211, 240, 250, 106, 230, 134, 213, 164, 250, 170, 221, 
+    201, 221, 226, 242, 155, 251, 3, 250, 241, 240, 252, 244, 138, 212, 0, 
+    222, 202, 249, 244, 244, 94, 225, 5, 22, 244, 98, 230, 232, 230, 113, 
+    251, 18, 250, 47, 241, 239, 253, 249, 226, 66, 216, 15, 242, 2, 250, 37, 
+    216, 243, 216, 114, 250, 28, 251, 210, 225, 180, 253, 248, 213, 172, 243, 
+    117, 247, 205, 241, 163, 219, 86, 231, 239, 251, 253, 243, 118, 247, 248, 
+    251, 174, 244, 60, 225, 36, 250, 249, 28, 228, 52, 230, 90, 28, 228, 47, 
+    221, 214, 242, 106, 28, 234, 143, 215, 191, 213, 154, 28, 221, 194, 222, 
+    126, 220, 13, 2, 221, 229, 216, 245, 223, 181, 22, 252, 167, 219, 107, 
+    22, 219, 107, 251, 195, 252, 131, 22, 241, 56, 250, 128, 244, 81, 219, 
+    65, 222, 127, 218, 13, 215, 195, 240, 253, 223, 182, 254, 137, 244, 39, 
+    222, 138, 244, 39, 217, 242, 240, 242, 251, 127, 240, 242, 2, 243, 101, 
+    226, 233, 251, 127, 235, 137, 224, 242, 226, 232, 245, 52, 224, 242, 226, 
+    232, 240, 251, 252, 153, 253, 189, 216, 253, 231, 239, 240, 247, 232, 
+    117, 240, 247, 249, 184, 218, 127, 221, 200, 248, 51, 218, 127, 244, 188, 
+    235, 155, 233, 95, 235, 137, 250, 234, 245, 52, 250, 234, 223, 144, 230, 
+    117, 226, 118, 212, 41, 251, 131, 249, 153, 216, 107, 233, 24, 223, 183, 
+    250, 232, 246, 104, 249, 143, 212, 3, 219, 72, 219, 70, 240, 252, 223, 
+    156, 242, 177, 220, 59, 230, 150, 222, 196, 250, 116, 247, 144, 225, 76, 
+    251, 211, 245, 177, 226, 242, 218, 254, 220, 54, 251, 130, 254, 100, 241, 
+    61, 233, 127, 252, 68, 244, 98, 215, 194, 244, 98, 251, 217, 215, 91, 
+    242, 0, 250, 117, 252, 195, 250, 117, 243, 250, 252, 195, 250, 117, 251, 
+    245, 225, 198, 234, 32, 224, 251, 246, 95, 251, 19, 252, 185, 251, 19, 
+    247, 138, 230, 118, 244, 198, 249, 154, 244, 198, 216, 108, 244, 198, 
+    223, 184, 244, 198, 250, 233, 244, 198, 246, 105, 244, 198, 218, 243, 
+    212, 3, 240, 253, 244, 198, 230, 151, 244, 198, 247, 145, 244, 198, 225, 
+    77, 244, 198, 243, 253, 244, 198, 242, 27, 244, 198, 211, 224, 244, 198, 
+    252, 79, 244, 198, 226, 49, 244, 198, 225, 77, 228, 58, 225, 236, 224, 
+    189, 245, 21, 245, 235, 228, 58, 230, 115, 216, 20, 71, 120, 225, 10, 
+    252, 190, 235, 249, 71, 124, 225, 10, 252, 190, 235, 249, 71, 43, 225, 
+    10, 252, 190, 235, 249, 71, 44, 225, 10, 252, 190, 235, 249, 244, 92, 
+    242, 23, 50, 212, 33, 242, 23, 50, 226, 219, 242, 23, 50, 216, 136, 120, 
+    50, 216, 136, 124, 50, 250, 27, 242, 18, 50, 204, 242, 18, 50, 249, 131, 
+    211, 220, 242, 2, 245, 22, 229, 109, 217, 152, 235, 131, 246, 100, 234, 
+    88, 251, 255, 211, 220, 250, 1, 224, 130, 242, 21, 224, 233, 231, 182, 
+    220, 6, 253, 211, 220, 6, 241, 171, 220, 6, 211, 220, 221, 242, 211, 220, 
+    251, 194, 244, 37, 251, 98, 236, 7, 219, 171, 251, 97, 236, 7, 219, 171, 
+    251, 170, 242, 201, 231, 190, 211, 221, 244, 182, 231, 191, 22, 211, 222, 
+    241, 67, 242, 17, 113, 231, 64, 241, 67, 242, 17, 113, 211, 219, 241, 67, 
+    242, 17, 225, 2, 226, 231, 211, 222, 2, 251, 114, 245, 233, 251, 149, 2, 
+    213, 246, 225, 171, 2, 251, 220, 242, 41, 231, 191, 2, 242, 117, 225, 
+    112, 231, 179, 231, 191, 2, 215, 98, 226, 212, 231, 190, 226, 212, 211, 
+    221, 252, 194, 249, 198, 211, 205, 224, 192, 235, 137, 226, 227, 235, 
+    137, 242, 176, 242, 229, 252, 195, 254, 121, 245, 26, 254, 169, 254, 170, 
+    230, 141, 236, 12, 219, 102, 235, 239, 248, 42, 225, 170, 242, 112, 248, 
+    187, 232, 207, 229, 216, 225, 1, 244, 199, 231, 147, 242, 40, 252, 146, 
+    225, 4, 217, 172, 225, 69, 234, 70, 79, 232, 117, 233, 16, 222, 236, 243, 
+    61, 218, 133, 234, 69, 251, 179, 249, 156, 2, 241, 234, 212, 19, 252, 77, 
+    241, 234, 251, 143, 241, 234, 113, 241, 232, 219, 12, 241, 234, 242, 127, 
+    241, 234, 241, 235, 2, 75, 251, 216, 241, 234, 242, 134, 241, 234, 211, 
+    42, 241, 234, 224, 131, 241, 234, 241, 235, 2, 223, 36, 223, 47, 241, 
+    232, 241, 235, 248, 89, 248, 1, 220, 84, 2, 116, 59, 235, 222, 245, 180, 
+    193, 251, 124, 254, 120, 87, 251, 203, 219, 94, 87, 249, 236, 87, 218, 
+    248, 217, 249, 87, 246, 93, 248, 165, 87, 225, 70, 64, 224, 252, 244, 69, 
+    252, 11, 247, 173, 87, 219, 5, 252, 166, 216, 150, 252, 166, 71, 244, 59, 
+    240, 218, 225, 8, 87, 230, 154, 252, 180, 249, 106, 245, 40, 114, 247, 
+    140, 50, 249, 147, 250, 250, 252, 152, 2, 211, 40, 50, 252, 152, 2, 247, 
+    140, 50, 252, 152, 2, 245, 55, 50, 252, 152, 2, 224, 231, 50, 230, 154, 
+    2, 211, 235, 250, 146, 2, 214, 153, 215, 232, 22, 211, 40, 50, 221, 180, 
+    225, 169, 249, 216, 251, 147, 230, 191, 244, 64, 247, 193, 226, 165, 247, 
+    198, 246, 57, 244, 115, 244, 48, 204, 244, 115, 244, 48, 226, 80, 2, 249, 
+    108, 226, 80, 244, 191, 214, 163, 251, 24, 217, 19, 251, 24, 250, 251, 
+    235, 249, 250, 146, 2, 214, 153, 215, 231, 250, 146, 2, 246, 112, 215, 
+    231, 252, 149, 250, 145, 250, 14, 224, 126, 222, 187, 224, 126, 226, 23, 
+    218, 123, 222, 133, 215, 223, 222, 133, 251, 199, 217, 92, 233, 57, 228, 
+    50, 228, 51, 2, 248, 88, 249, 155, 250, 8, 251, 200, 204, 251, 200, 242, 
+    134, 251, 200, 251, 216, 251, 200, 226, 161, 251, 200, 251, 197, 229, 
+    210, 252, 183, 221, 188, 231, 65, 217, 2, 223, 126, 226, 78, 244, 167, 
+    231, 239, 221, 225, 254, 97, 224, 148, 255, 5, 232, 119, 250, 135, 231, 
+    77, 226, 133, 215, 239, 236, 3, 215, 239, 226, 86, 246, 32, 87, 236, 0, 
+    245, 127, 245, 128, 2, 246, 112, 80, 48, 250, 8, 231, 205, 2, 232, 113, 
+    244, 81, 250, 8, 231, 205, 2, 223, 160, 244, 81, 204, 231, 205, 2, 223, 
+    160, 244, 81, 204, 231, 205, 2, 232, 113, 244, 81, 224, 239, 224, 240, 
+    240, 255, 229, 89, 230, 164, 225, 120, 230, 164, 225, 121, 2, 97, 80, 
+    253, 215, 233, 52, 213, 175, 230, 163, 230, 164, 225, 121, 226, 234, 228, 
+    80, 230, 164, 225, 119, 254, 98, 2, 252, 137, 251, 18, 213, 172, 251, 18, 
+    216, 255, 223, 176, 213, 171, 215, 60, 97, 253, 255, 250, 10, 97, 22, 
+    140, 204, 250, 44, 253, 255, 250, 10, 97, 22, 140, 204, 250, 44, 254, 0, 
+    2, 37, 123, 226, 124, 250, 10, 246, 112, 22, 214, 153, 204, 250, 44, 253, 
+    255, 254, 96, 246, 112, 22, 214, 153, 204, 250, 44, 253, 255, 121, 251, 
+    146, 87, 125, 251, 146, 87, 219, 9, 2, 251, 12, 91, 219, 8, 219, 9, 2, 
+    123, 219, 33, 212, 35, 219, 9, 2, 134, 219, 33, 212, 34, 252, 123, 245, 
+    180, 225, 30, 233, 48, 231, 216, 242, 191, 222, 250, 231, 216, 242, 191, 
+    232, 158, 2, 235, 232, 225, 202, 250, 8, 232, 158, 2, 234, 144, 234, 144, 
+    232, 157, 204, 232, 157, 252, 52, 252, 53, 2, 251, 12, 91, 251, 198, 232, 
+    210, 87, 223, 177, 251, 94, 252, 193, 2, 140, 80, 48, 245, 151, 2, 140, 
+    80, 48, 226, 201, 2, 245, 39, 164, 2, 43, 44, 80, 48, 219, 41, 2, 97, 80, 
+    48, 216, 15, 2, 214, 153, 80, 48, 228, 80, 123, 214, 184, 245, 199, 87, 
+    234, 142, 216, 248, 235, 226, 16, 31, 7, 6, 233, 15, 235, 226, 16, 31, 7, 
+    4, 233, 15, 235, 226, 16, 31, 227, 203, 235, 226, 16, 31, 217, 184, 235, 
+    226, 16, 31, 7, 233, 15, 244, 104, 245, 180, 216, 10, 211, 199, 242, 28, 
+    227, 186, 22, 251, 205, 241, 73, 225, 53, 230, 231, 217, 0, 249, 122, 
+    252, 167, 219, 127, 225, 12, 218, 159, 2, 230, 229, 247, 128, 235, 137, 
+    16, 31, 252, 65, 215, 221, 245, 164, 85, 42, 251, 94, 71, 42, 251, 94, 
+    233, 91, 223, 114, 250, 43, 233, 91, 251, 216, 250, 43, 233, 91, 226, 
+    161, 248, 0, 233, 91, 251, 216, 248, 0, 4, 226, 161, 248, 0, 4, 251, 216, 
+    248, 0, 214, 162, 223, 114, 215, 226, 246, 113, 223, 114, 215, 226, 214, 
+    162, 4, 223, 114, 215, 226, 246, 113, 4, 223, 114, 215, 226, 37, 249, 
+    139, 224, 255, 249, 139, 225, 0, 2, 242, 33, 51, 249, 139, 224, 255, 228, 
+    54, 43, 220, 155, 2, 134, 247, 126, 250, 12, 244, 199, 123, 226, 246, 
+    250, 12, 244, 199, 113, 226, 246, 250, 12, 244, 199, 134, 226, 246, 250, 
+    12, 244, 199, 244, 19, 226, 246, 250, 12, 244, 199, 244, 89, 226, 246, 
+    250, 12, 244, 199, 219, 127, 226, 246, 250, 12, 244, 199, 220, 124, 226, 
+    246, 250, 12, 244, 199, 245, 201, 226, 246, 250, 12, 244, 199, 228, 205, 
+    226, 246, 250, 12, 244, 199, 216, 249, 226, 246, 250, 12, 244, 199, 245, 
+    176, 226, 246, 250, 12, 244, 199, 215, 77, 226, 246, 250, 12, 244, 199, 
+    226, 196, 250, 12, 244, 199, 215, 56, 250, 12, 244, 199, 216, 141, 250, 
+    12, 244, 199, 244, 15, 250, 12, 244, 199, 244, 87, 250, 12, 244, 199, 
+    219, 123, 250, 12, 244, 199, 220, 123, 250, 12, 244, 199, 245, 200, 250, 
+    12, 244, 199, 228, 204, 250, 12, 244, 199, 216, 247, 250, 12, 244, 199, 
+    245, 174, 250, 12, 244, 199, 215, 75, 230, 122, 243, 237, 216, 37, 216, 
+    3, 218, 150, 64, 232, 245, 219, 172, 64, 235, 138, 230, 111, 242, 131, 
+    244, 198, 242, 131, 244, 199, 2, 219, 76, 245, 21, 244, 199, 2, 217, 15, 
+    64, 235, 59, 219, 76, 244, 199, 2, 204, 230, 115, 219, 76, 244, 199, 2, 
+    204, 230, 116, 22, 219, 76, 245, 21, 219, 76, 244, 199, 2, 204, 230, 116, 
+    22, 249, 238, 217, 248, 219, 76, 244, 199, 2, 204, 230, 116, 22, 216, 
+    105, 245, 21, 219, 76, 244, 199, 2, 242, 32, 219, 76, 244, 199, 2, 240, 
+    254, 211, 233, 244, 198, 219, 76, 244, 199, 2, 219, 76, 245, 21, 244, 
+    199, 221, 219, 248, 70, 244, 41, 223, 91, 244, 198, 219, 76, 244, 199, 2, 
+    241, 233, 245, 21, 219, 76, 244, 199, 2, 218, 35, 219, 75, 244, 198, 229, 
+    92, 244, 198, 245, 31, 244, 198, 214, 188, 244, 198, 244, 199, 2, 249, 
+    238, 217, 248, 225, 195, 244, 198, 249, 209, 244, 198, 249, 210, 244, 
+    198, 234, 68, 244, 198, 244, 199, 216, 138, 116, 234, 69, 234, 68, 244, 
+    199, 2, 219, 76, 245, 21, 234, 68, 244, 199, 2, 250, 8, 245, 21, 244, 
+    199, 2, 218, 89, 216, 20, 244, 199, 2, 218, 89, 216, 21, 22, 211, 233, 
+    245, 23, 244, 199, 2, 218, 89, 216, 21, 22, 216, 105, 245, 21, 247, 200, 
+    244, 198, 211, 204, 244, 198, 254, 116, 244, 198, 224, 230, 244, 198, 
+    249, 124, 244, 198, 225, 173, 244, 198, 244, 199, 2, 232, 132, 64, 215, 
+    205, 247, 200, 251, 96, 223, 91, 244, 198, 243, 247, 244, 199, 2, 204, 
+    230, 115, 254, 114, 244, 198, 244, 160, 244, 198, 212, 20, 244, 198, 219, 
+    93, 244, 198, 216, 72, 244, 198, 242, 132, 244, 198, 232, 120, 249, 124, 
+    244, 198, 244, 199, 2, 204, 230, 115, 240, 210, 244, 198, 244, 199, 2, 
+    204, 230, 116, 22, 249, 238, 217, 248, 244, 199, 221, 192, 236, 7, 244, 
+    161, 253, 221, 244, 198, 244, 57, 244, 198, 219, 94, 244, 198, 247, 173, 
+    244, 198, 244, 199, 211, 230, 230, 115, 244, 199, 2, 231, 89, 231, 149, 
+    242, 131, 250, 233, 244, 199, 2, 219, 76, 245, 21, 250, 233, 244, 199, 2, 
+    217, 15, 64, 235, 59, 219, 76, 250, 233, 244, 199, 2, 204, 230, 115, 219, 
+    76, 250, 233, 244, 199, 2, 241, 233, 245, 21, 250, 233, 244, 199, 2, 211, 
+    196, 219, 77, 234, 68, 250, 233, 244, 199, 2, 250, 8, 245, 21, 224, 230, 
+    250, 233, 244, 198, 249, 124, 250, 233, 244, 198, 212, 20, 250, 233, 244, 
+    198, 244, 199, 2, 228, 80, 242, 170, 243, 41, 244, 199, 2, 226, 219, 243, 
+    41, 225, 171, 251, 176, 248, 83, 221, 171, 230, 150, 241, 236, 230, 150, 
+    219, 10, 230, 150, 242, 12, 225, 171, 223, 159, 123, 242, 22, 225, 171, 
+    223, 159, 251, 186, 242, 18, 236, 7, 250, 187, 225, 171, 243, 246, 225, 
+    171, 2, 224, 230, 244, 198, 225, 171, 2, 244, 49, 242, 17, 222, 205, 241, 
+    221, 218, 145, 232, 155, 223, 165, 250, 252, 241, 169, 215, 249, 241, 
+    169, 215, 250, 2, 251, 122, 228, 58, 215, 249, 231, 37, 193, 223, 166, 
+    218, 151, 215, 247, 215, 248, 250, 252, 251, 100, 226, 198, 251, 100, 
+    215, 202, 251, 101, 218, 131, 230, 192, 254, 138, 244, 105, 245, 145, 
+    225, 2, 250, 252, 226, 198, 225, 2, 250, 252, 217, 33, 226, 198, 217, 33, 
+    253, 188, 226, 198, 253, 188, 223, 121, 213, 247, 248, 66, 215, 193, 253, 
+    250, 232, 123, 215, 255, 230, 144, 230, 121, 223, 164, 218, 7, 223, 164, 
+    230, 121, 251, 36, 254, 238, 215, 246, 220, 18, 222, 184, 219, 3, 203, 
+    215, 253, 232, 236, 67, 215, 253, 232, 236, 249, 198, 50, 225, 2, 250, 
+    237, 223, 47, 232, 236, 215, 223, 244, 82, 226, 201, 224, 241, 247, 131, 
+    228, 80, 245, 133, 50, 219, 74, 87, 228, 80, 219, 74, 87, 224, 125, 232, 
+    199, 236, 7, 235, 163, 225, 44, 87, 247, 154, 228, 57, 232, 199, 87, 224, 
+    235, 212, 41, 87, 228, 71, 212, 41, 87, 252, 10, 228, 80, 252, 9, 252, 8, 
+    230, 121, 252, 8, 225, 216, 228, 80, 225, 215, 250, 108, 249, 132, 231, 
+    61, 87, 211, 218, 87, 223, 62, 252, 195, 87, 216, 38, 212, 41, 250, 5, 
+    219, 236, 252, 126, 252, 124, 225, 246, 249, 185, 249, 94, 252, 177, 250, 
+    30, 43, 232, 95, 108, 16, 31, 224, 6, 108, 16, 31, 254, 201, 108, 16, 31, 
+    244, 104, 108, 16, 31, 245, 231, 108, 16, 31, 212, 40, 108, 16, 31, 254, 
+    51, 108, 16, 31, 254, 52, 223, 108, 108, 16, 31, 254, 52, 223, 107, 108, 
+    16, 31, 254, 52, 213, 143, 108, 16, 31, 254, 52, 213, 142, 108, 16, 31, 
     213, 157, 108, 16, 31, 213, 156, 108, 16, 31, 213, 155, 108, 16, 31, 218, 
-    45, 108, 16, 31, 225, 126, 218, 45, 108, 16, 31, 85, 218, 45, 108, 16, 
-    31, 231, 56, 218, 72, 108, 16, 31, 231, 56, 218, 71, 108, 16, 31, 231, 
-    56, 218, 70, 108, 16, 31, 250, 39, 108, 16, 31, 222, 2, 108, 16, 31, 228, 
-    189, 108, 16, 31, 213, 141, 108, 16, 31, 213, 140, 108, 16, 31, 222, 205, 
-    222, 2, 108, 16, 31, 222, 205, 222, 1, 108, 16, 31, 242, 167, 108, 16, 
-    31, 219, 167, 108, 16, 31, 235, 178, 226, 154, 108, 16, 31, 235, 178, 
-    226, 153, 108, 16, 31, 249, 135, 64, 235, 177, 108, 16, 31, 223, 102, 64, 
-    235, 177, 108, 16, 31, 249, 169, 226, 154, 108, 16, 31, 235, 176, 226, 
-    154, 108, 16, 31, 218, 73, 64, 249, 168, 108, 16, 31, 249, 135, 64, 249, 
-    168, 108, 16, 31, 249, 135, 64, 249, 167, 108, 16, 31, 249, 169, 254, 84, 
-    108, 16, 31, 222, 3, 64, 249, 169, 254, 84, 108, 16, 31, 218, 73, 64, 
-    222, 3, 64, 249, 168, 108, 16, 31, 213, 243, 108, 16, 31, 216, 85, 226, 
-    154, 108, 16, 31, 233, 58, 226, 154, 108, 16, 31, 254, 83, 226, 154, 108, 
-    16, 31, 218, 73, 64, 254, 82, 108, 16, 31, 222, 3, 64, 254, 82, 108, 16, 
-    31, 218, 73, 64, 222, 3, 64, 254, 82, 108, 16, 31, 213, 158, 64, 254, 82, 
-    108, 16, 31, 223, 102, 64, 254, 82, 108, 16, 31, 223, 102, 64, 254, 81, 
-    108, 16, 31, 223, 101, 108, 16, 31, 223, 100, 108, 16, 31, 223, 99, 108, 
-    16, 31, 223, 98, 108, 16, 31, 254, 158, 108, 16, 31, 254, 157, 108, 16, 
-    31, 231, 164, 108, 16, 31, 222, 8, 108, 16, 31, 253, 247, 108, 16, 31, 
-    223, 126, 108, 16, 31, 223, 125, 108, 16, 31, 253, 184, 108, 16, 31, 251, 
-    230, 226, 154, 108, 16, 31, 217, 50, 108, 16, 31, 217, 49, 108, 16, 31, 
-    224, 9, 232, 223, 108, 16, 31, 251, 184, 108, 16, 31, 251, 183, 108, 16, 
-    31, 251, 182, 108, 16, 31, 254, 139, 108, 16, 31, 226, 219, 108, 16, 31, 
-    218, 249, 108, 16, 31, 216, 83, 108, 16, 31, 242, 97, 108, 16, 31, 212, 
-    28, 108, 16, 31, 224, 227, 108, 16, 31, 251, 15, 108, 16, 31, 215, 86, 
-    108, 16, 31, 250, 247, 230, 123, 108, 16, 31, 221, 203, 64, 235, 56, 108, 
-    16, 31, 251, 26, 108, 16, 31, 215, 220, 108, 16, 31, 218, 155, 215, 220, 
-    108, 16, 31, 232, 149, 108, 16, 31, 219, 57, 108, 16, 31, 214, 142, 108, 
-    16, 31, 240, 247, 246, 65, 108, 16, 31, 253, 228, 108, 16, 31, 224, 235, 
-    253, 228, 108, 16, 31, 251, 143, 108, 16, 31, 224, 226, 251, 143, 108, 
-    16, 31, 254, 136, 108, 16, 31, 218, 118, 218, 27, 218, 117, 108, 16, 31, 
-    218, 118, 218, 27, 218, 116, 108, 16, 31, 218, 69, 108, 16, 31, 224, 201, 
-    108, 16, 31, 247, 182, 108, 16, 31, 247, 184, 108, 16, 31, 247, 183, 108, 
-    16, 31, 224, 132, 108, 16, 31, 224, 121, 108, 16, 31, 249, 123, 108, 16, 
-    31, 249, 122, 108, 16, 31, 249, 121, 108, 16, 31, 249, 120, 108, 16, 31, 
-    249, 119, 108, 16, 31, 254, 170, 108, 16, 31, 252, 120, 64, 231, 150, 
-    108, 16, 31, 252, 120, 64, 214, 17, 108, 16, 31, 223, 58, 108, 16, 31, 
-    240, 239, 108, 16, 31, 228, 213, 108, 16, 31, 248, 146, 108, 16, 31, 230, 
-    135, 108, 16, 31, 163, 246, 95, 108, 16, 31, 163, 226, 133, 9, 14, 240, 
-    103, 9, 14, 240, 102, 9, 14, 240, 101, 9, 14, 240, 100, 9, 14, 240, 99, 
-    9, 14, 240, 98, 9, 14, 240, 97, 9, 14, 240, 96, 9, 14, 240, 95, 9, 14, 
-    240, 94, 9, 14, 240, 93, 9, 14, 240, 92, 9, 14, 240, 91, 9, 14, 240, 90, 
-    9, 14, 240, 89, 9, 14, 240, 88, 9, 14, 240, 87, 9, 14, 240, 86, 9, 14, 
-    240, 85, 9, 14, 240, 84, 9, 14, 240, 83, 9, 14, 240, 82, 9, 14, 240, 81, 
-    9, 14, 240, 80, 9, 14, 240, 79, 9, 14, 240, 78, 9, 14, 240, 77, 9, 14, 
-    240, 76, 9, 14, 240, 75, 9, 14, 240, 74, 9, 14, 240, 73, 9, 14, 240, 72, 
-    9, 14, 240, 71, 9, 14, 240, 70, 9, 14, 240, 69, 9, 14, 240, 68, 9, 14, 
-    240, 67, 9, 14, 240, 66, 9, 14, 240, 65, 9, 14, 240, 64, 9, 14, 240, 63, 
-    9, 14, 240, 62, 9, 14, 240, 61, 9, 14, 240, 60, 9, 14, 240, 59, 9, 14, 
-    240, 58, 9, 14, 240, 57, 9, 14, 240, 56, 9, 14, 240, 55, 9, 14, 240, 54, 
-    9, 14, 240, 53, 9, 14, 240, 52, 9, 14, 240, 51, 9, 14, 240, 50, 9, 14, 
-    240, 49, 9, 14, 240, 48, 9, 14, 240, 47, 9, 14, 240, 46, 9, 14, 240, 45, 
-    9, 14, 240, 44, 9, 14, 240, 43, 9, 14, 240, 42, 9, 14, 240, 41, 9, 14, 
-    240, 40, 9, 14, 240, 39, 9, 14, 240, 38, 9, 14, 240, 37, 9, 14, 240, 36, 
-    9, 14, 240, 35, 9, 14, 240, 34, 9, 14, 240, 33, 9, 14, 240, 32, 9, 14, 
-    240, 31, 9, 14, 240, 30, 9, 14, 240, 29, 9, 14, 240, 28, 9, 14, 240, 27, 
-    9, 14, 240, 26, 9, 14, 240, 25, 9, 14, 240, 24, 9, 14, 240, 23, 9, 14, 
-    240, 22, 9, 14, 240, 21, 9, 14, 240, 20, 9, 14, 240, 19, 9, 14, 240, 18, 
-    9, 14, 240, 17, 9, 14, 240, 16, 9, 14, 240, 15, 9, 14, 240, 14, 9, 14, 
-    240, 13, 9, 14, 240, 12, 9, 14, 240, 11, 9, 14, 240, 10, 9, 14, 240, 9, 
-    9, 14, 240, 8, 9, 14, 240, 7, 9, 14, 240, 6, 9, 14, 240, 5, 9, 14, 240, 
-    4, 9, 14, 240, 3, 9, 14, 240, 2, 9, 14, 240, 1, 9, 14, 240, 0, 9, 14, 
-    239, 255, 9, 14, 239, 254, 9, 14, 239, 253, 9, 14, 239, 252, 9, 14, 239, 
-    251, 9, 14, 239, 250, 9, 14, 239, 249, 9, 14, 239, 248, 9, 14, 239, 247, 
-    9, 14, 239, 246, 9, 14, 239, 245, 9, 14, 239, 244, 9, 14, 239, 243, 9, 
-    14, 239, 242, 9, 14, 239, 241, 9, 14, 239, 240, 9, 14, 239, 239, 9, 14, 
-    239, 238, 9, 14, 239, 237, 9, 14, 239, 236, 9, 14, 239, 235, 9, 14, 239, 
-    234, 9, 14, 239, 233, 9, 14, 239, 232, 9, 14, 239, 231, 9, 14, 239, 230, 
-    9, 14, 239, 229, 9, 14, 239, 228, 9, 14, 239, 227, 9, 14, 239, 226, 9, 
-    14, 239, 225, 9, 14, 239, 224, 9, 14, 239, 223, 9, 14, 239, 222, 9, 14, 
-    239, 221, 9, 14, 239, 220, 9, 14, 239, 219, 9, 14, 239, 218, 9, 14, 239, 
-    217, 9, 14, 239, 216, 9, 14, 239, 215, 9, 14, 239, 214, 9, 14, 239, 213, 
-    9, 14, 239, 212, 9, 14, 239, 211, 9, 14, 239, 210, 9, 14, 239, 209, 9, 
-    14, 239, 208, 9, 14, 239, 207, 9, 14, 239, 206, 9, 14, 239, 205, 9, 14, 
-    239, 204, 9, 14, 239, 203, 9, 14, 239, 202, 9, 14, 239, 201, 9, 14, 239, 
-    200, 9, 14, 239, 199, 9, 14, 239, 198, 9, 14, 239, 197, 9, 14, 239, 196, 
-    9, 14, 239, 195, 9, 14, 239, 194, 9, 14, 239, 193, 9, 14, 239, 192, 9, 
-    14, 239, 191, 9, 14, 239, 190, 9, 14, 239, 189, 9, 14, 239, 188, 9, 14, 
-    239, 187, 9, 14, 239, 186, 9, 14, 239, 185, 9, 14, 239, 184, 9, 14, 239, 
-    183, 9, 14, 239, 182, 9, 14, 239, 181, 9, 14, 239, 180, 9, 14, 239, 179, 
-    9, 14, 239, 178, 9, 14, 239, 177, 9, 14, 239, 176, 9, 14, 239, 175, 9, 
-    14, 239, 174, 9, 14, 239, 173, 9, 14, 239, 172, 9, 14, 239, 171, 9, 14, 
-    239, 170, 9, 14, 239, 169, 9, 14, 239, 168, 9, 14, 239, 167, 9, 14, 239, 
-    166, 9, 14, 239, 165, 9, 14, 239, 164, 9, 14, 239, 163, 9, 14, 239, 162, 
-    9, 14, 239, 161, 9, 14, 239, 160, 9, 14, 239, 159, 9, 14, 239, 158, 9, 
-    14, 239, 157, 9, 14, 239, 156, 9, 14, 239, 155, 9, 14, 239, 154, 9, 14, 
-    239, 153, 9, 14, 239, 152, 9, 14, 239, 151, 9, 14, 239, 150, 9, 14, 239, 
-    149, 9, 14, 239, 148, 9, 14, 239, 147, 9, 14, 239, 146, 9, 14, 239, 145, 
-    9, 14, 239, 144, 9, 14, 239, 143, 9, 14, 239, 142, 9, 14, 239, 141, 9, 
-    14, 239, 140, 9, 14, 239, 139, 9, 14, 239, 138, 9, 14, 239, 137, 9, 14, 
-    239, 136, 9, 14, 239, 135, 9, 14, 239, 134, 9, 14, 239, 133, 9, 14, 239, 
-    132, 9, 14, 239, 131, 9, 14, 239, 130, 9, 14, 239, 129, 9, 14, 239, 128, 
-    9, 14, 239, 127, 9, 14, 239, 126, 9, 14, 239, 125, 9, 14, 239, 124, 9, 
-    14, 239, 123, 9, 14, 239, 122, 9, 14, 239, 121, 9, 14, 239, 120, 9, 14, 
-    239, 119, 9, 14, 239, 118, 9, 14, 239, 117, 9, 14, 239, 116, 9, 14, 239, 
-    115, 9, 14, 239, 114, 9, 14, 239, 113, 9, 14, 239, 112, 9, 14, 239, 111, 
-    9, 14, 239, 110, 9, 14, 239, 109, 9, 14, 239, 108, 9, 14, 239, 107, 9, 
-    14, 239, 106, 9, 14, 239, 105, 9, 14, 239, 104, 9, 14, 239, 103, 9, 14, 
-    239, 102, 9, 14, 239, 101, 9, 14, 239, 100, 9, 14, 239, 99, 9, 14, 239, 
-    98, 9, 14, 239, 97, 9, 14, 239, 96, 9, 14, 239, 95, 9, 14, 239, 94, 9, 
-    14, 239, 93, 9, 14, 239, 92, 9, 14, 239, 91, 9, 14, 239, 90, 9, 14, 239, 
-    89, 9, 14, 239, 88, 9, 14, 239, 87, 9, 14, 239, 86, 9, 14, 239, 85, 9, 
-    14, 239, 84, 9, 14, 239, 83, 9, 14, 239, 82, 9, 14, 239, 81, 9, 14, 239, 
-    80, 9, 14, 239, 79, 9, 14, 239, 78, 9, 14, 239, 77, 9, 14, 239, 76, 9, 
-    14, 239, 75, 9, 14, 239, 74, 9, 14, 239, 73, 9, 14, 239, 72, 9, 14, 239, 
-    71, 9, 14, 239, 70, 9, 14, 239, 69, 9, 14, 239, 68, 9, 14, 239, 67, 9, 
-    14, 239, 66, 9, 14, 239, 65, 9, 14, 239, 64, 9, 14, 239, 63, 9, 14, 239, 
-    62, 9, 14, 239, 61, 9, 14, 239, 60, 9, 14, 239, 59, 9, 14, 239, 58, 9, 
-    14, 239, 57, 9, 14, 239, 56, 9, 14, 239, 55, 9, 14, 239, 54, 9, 14, 239, 
-    53, 9, 14, 239, 52, 9, 14, 239, 51, 9, 14, 239, 50, 9, 14, 239, 49, 9, 
-    14, 239, 48, 9, 14, 239, 47, 9, 14, 239, 46, 9, 14, 239, 45, 9, 14, 239, 
-    44, 9, 14, 239, 43, 9, 14, 239, 42, 9, 14, 239, 41, 9, 14, 239, 40, 9, 
-    14, 239, 39, 9, 14, 239, 38, 9, 14, 239, 37, 9, 14, 239, 36, 9, 14, 239, 
-    35, 9, 14, 239, 34, 9, 14, 239, 33, 9, 14, 239, 32, 9, 14, 239, 31, 9, 
-    14, 239, 30, 9, 14, 239, 29, 9, 14, 239, 28, 9, 14, 239, 27, 9, 14, 239, 
-    26, 9, 14, 239, 25, 9, 14, 239, 24, 9, 14, 239, 23, 9, 14, 239, 22, 9, 
-    14, 239, 21, 9, 14, 239, 20, 9, 14, 239, 19, 9, 14, 239, 18, 9, 14, 239, 
-    17, 9, 14, 239, 16, 9, 14, 239, 15, 9, 14, 239, 14, 9, 14, 239, 13, 9, 
-    14, 239, 12, 9, 14, 239, 11, 9, 14, 239, 10, 9, 14, 239, 9, 9, 14, 239, 
-    8, 9, 14, 239, 7, 9, 14, 239, 6, 9, 14, 239, 5, 9, 14, 239, 4, 9, 14, 
-    239, 3, 9, 14, 239, 2, 9, 14, 239, 1, 9, 14, 239, 0, 9, 14, 238, 255, 9, 
-    14, 238, 254, 9, 14, 238, 253, 9, 14, 238, 252, 9, 14, 238, 251, 9, 14, 
-    238, 250, 9, 14, 238, 249, 9, 14, 238, 248, 9, 14, 238, 247, 9, 14, 238, 
-    246, 9, 14, 238, 245, 9, 14, 238, 244, 9, 14, 238, 243, 9, 14, 238, 242, 
-    9, 14, 238, 241, 9, 14, 238, 240, 9, 14, 238, 239, 9, 14, 238, 238, 9, 
-    14, 238, 237, 9, 14, 238, 236, 9, 14, 238, 235, 9, 14, 238, 234, 9, 14, 
-    238, 233, 9, 14, 238, 232, 9, 14, 238, 231, 9, 14, 238, 230, 9, 14, 238, 
-    229, 9, 14, 238, 228, 9, 14, 238, 227, 9, 14, 238, 226, 9, 14, 238, 225, 
-    9, 14, 238, 224, 9, 14, 238, 223, 9, 14, 238, 222, 9, 14, 238, 221, 9, 
-    14, 238, 220, 9, 14, 238, 219, 9, 14, 238, 218, 9, 14, 238, 217, 9, 14, 
-    238, 216, 9, 14, 238, 215, 9, 14, 238, 214, 9, 14, 238, 213, 9, 14, 238, 
-    212, 9, 14, 238, 211, 9, 14, 238, 210, 9, 14, 238, 209, 9, 14, 238, 208, 
-    9, 14, 238, 207, 9, 14, 238, 206, 9, 14, 238, 205, 9, 14, 238, 204, 9, 
-    14, 238, 203, 9, 14, 238, 202, 9, 14, 238, 201, 9, 14, 238, 200, 9, 14, 
-    238, 199, 9, 14, 238, 198, 9, 14, 238, 197, 9, 14, 238, 196, 9, 14, 238, 
-    195, 9, 14, 238, 194, 9, 14, 238, 193, 9, 14, 238, 192, 9, 14, 238, 191, 
-    9, 14, 238, 190, 9, 14, 238, 189, 9, 14, 238, 188, 9, 14, 238, 187, 9, 
-    14, 238, 186, 9, 14, 238, 185, 9, 14, 238, 184, 9, 14, 238, 183, 9, 14, 
-    238, 182, 9, 14, 238, 181, 9, 14, 238, 180, 9, 14, 238, 179, 9, 14, 238, 
-    178, 9, 14, 238, 177, 9, 14, 238, 176, 9, 14, 238, 175, 9, 14, 238, 174, 
-    9, 14, 238, 173, 9, 14, 238, 172, 9, 14, 238, 171, 9, 14, 238, 170, 9, 
-    14, 238, 169, 9, 14, 238, 168, 9, 14, 238, 167, 9, 14, 238, 166, 9, 14, 
-    238, 165, 9, 14, 238, 164, 9, 14, 238, 163, 9, 14, 238, 162, 9, 14, 238, 
-    161, 9, 14, 238, 160, 9, 14, 238, 159, 9, 14, 238, 158, 9, 14, 238, 157, 
-    9, 14, 238, 156, 9, 14, 238, 155, 9, 14, 238, 154, 9, 14, 238, 153, 9, 
-    14, 238, 152, 9, 14, 238, 151, 9, 14, 238, 150, 9, 14, 238, 149, 9, 14, 
-    238, 148, 9, 14, 238, 147, 9, 14, 238, 146, 9, 14, 238, 145, 9, 14, 238, 
-    144, 9, 14, 238, 143, 9, 14, 238, 142, 9, 14, 238, 141, 9, 14, 238, 140, 
-    9, 14, 238, 139, 9, 14, 238, 138, 9, 14, 238, 137, 9, 14, 238, 136, 9, 
-    14, 238, 135, 9, 14, 238, 134, 9, 14, 238, 133, 9, 14, 238, 132, 9, 14, 
-    238, 131, 9, 14, 238, 130, 9, 14, 238, 129, 9, 14, 238, 128, 9, 14, 238, 
-    127, 9, 14, 238, 126, 9, 14, 238, 125, 9, 14, 238, 124, 9, 14, 238, 123, 
-    9, 14, 238, 122, 9, 14, 238, 121, 9, 14, 238, 120, 9, 14, 238, 119, 9, 
-    14, 238, 118, 9, 14, 238, 117, 9, 14, 238, 116, 9, 14, 238, 115, 9, 14, 
-    238, 114, 9, 14, 238, 113, 9, 14, 238, 112, 9, 14, 238, 111, 9, 14, 238, 
-    110, 9, 14, 238, 109, 9, 14, 238, 108, 9, 14, 238, 107, 9, 14, 238, 106, 
-    9, 14, 238, 105, 9, 14, 238, 104, 9, 14, 238, 103, 9, 14, 238, 102, 9, 
-    14, 238, 101, 9, 14, 238, 100, 9, 14, 238, 99, 9, 14, 238, 98, 9, 14, 
-    238, 97, 9, 14, 238, 96, 9, 14, 238, 95, 9, 14, 238, 94, 9, 14, 238, 93, 
-    9, 14, 238, 92, 9, 14, 238, 91, 9, 14, 238, 90, 9, 14, 238, 89, 9, 14, 
-    238, 88, 9, 14, 238, 87, 9, 14, 238, 86, 9, 14, 238, 85, 9, 14, 238, 84, 
-    9, 14, 238, 83, 9, 14, 238, 82, 9, 14, 238, 81, 9, 14, 238, 80, 9, 14, 
-    238, 79, 9, 14, 238, 78, 9, 14, 238, 77, 9, 14, 238, 76, 9, 14, 238, 75, 
-    9, 14, 238, 74, 233, 91, 217, 85, 129, 219, 19, 129, 245, 32, 78, 129, 
-    223, 255, 78, 129, 54, 50, 129, 247, 133, 50, 129, 225, 183, 50, 129, 
-    254, 127, 129, 254, 58, 129, 43, 226, 4, 129, 44, 226, 4, 129, 253, 217, 
-    129, 96, 50, 129, 249, 220, 129, 240, 168, 129, 243, 230, 218, 130, 129, 
-    219, 47, 129, 21, 210, 86, 129, 21, 110, 129, 21, 105, 129, 21, 158, 129, 
-    21, 161, 129, 21, 189, 129, 21, 194, 129, 21, 198, 129, 21, 195, 129, 21, 
-    200, 129, 249, 227, 129, 220, 151, 129, 233, 16, 50, 129, 245, 99, 50, 
-    129, 242, 131, 50, 129, 224, 14, 78, 129, 249, 218, 253, 207, 129, 7, 6, 
-    1, 61, 129, 7, 6, 1, 253, 159, 129, 7, 6, 1, 251, 67, 129, 7, 6, 1, 249, 
-    61, 129, 7, 6, 1, 75, 129, 7, 6, 1, 245, 7, 129, 7, 6, 1, 243, 203, 129, 
-    7, 6, 1, 242, 61, 129, 7, 6, 1, 73, 129, 7, 6, 1, 235, 145, 129, 7, 6, 1, 
-    235, 24, 129, 7, 6, 1, 156, 129, 7, 6, 1, 193, 129, 7, 6, 1, 230, 26, 
-    129, 7, 6, 1, 76, 129, 7, 6, 1, 226, 106, 129, 7, 6, 1, 224, 97, 129, 7, 
-    6, 1, 153, 129, 7, 6, 1, 222, 92, 129, 7, 6, 1, 217, 153, 129, 7, 6, 1, 
-    70, 129, 7, 6, 1, 214, 105, 129, 7, 6, 1, 212, 98, 129, 7, 6, 1, 211, 
-    178, 129, 7, 6, 1, 211, 117, 129, 7, 6, 1, 210, 159, 129, 43, 42, 127, 
-    129, 223, 51, 219, 47, 129, 44, 42, 127, 129, 250, 32, 255, 15, 129, 121, 
-    232, 214, 129, 242, 138, 255, 15, 129, 7, 4, 1, 61, 129, 7, 4, 1, 253, 
-    159, 129, 7, 4, 1, 251, 67, 129, 7, 4, 1, 249, 61, 129, 7, 4, 1, 75, 129, 
-    7, 4, 1, 245, 7, 129, 7, 4, 1, 243, 203, 129, 7, 4, 1, 242, 61, 129, 7, 
-    4, 1, 73, 129, 7, 4, 1, 235, 145, 129, 7, 4, 1, 235, 24, 129, 7, 4, 1, 
-    156, 129, 7, 4, 1, 193, 129, 7, 4, 1, 230, 26, 129, 7, 4, 1, 76, 129, 7, 
-    4, 1, 226, 106, 129, 7, 4, 1, 224, 97, 129, 7, 4, 1, 153, 129, 7, 4, 1, 
-    222, 92, 129, 7, 4, 1, 217, 153, 129, 7, 4, 1, 70, 129, 7, 4, 1, 214, 
-    105, 129, 7, 4, 1, 212, 98, 129, 7, 4, 1, 211, 178, 129, 7, 4, 1, 211, 
-    117, 129, 7, 4, 1, 210, 159, 129, 43, 249, 100, 127, 129, 67, 232, 214, 
-    129, 44, 249, 100, 127, 129, 183, 251, 7, 217, 85, 45, 221, 79, 45, 221, 
-    68, 45, 221, 57, 45, 221, 45, 45, 221, 34, 45, 221, 23, 45, 221, 12, 45, 
-    221, 1, 45, 220, 246, 45, 220, 238, 45, 220, 237, 45, 220, 236, 45, 220, 
-    235, 45, 220, 233, 45, 220, 232, 45, 220, 231, 45, 220, 230, 45, 220, 
+    45, 108, 16, 31, 225, 128, 218, 45, 108, 16, 31, 85, 218, 45, 108, 16, 
+    31, 231, 60, 218, 72, 108, 16, 31, 231, 60, 218, 71, 108, 16, 31, 231, 
+    60, 218, 70, 108, 16, 31, 250, 46, 108, 16, 31, 222, 3, 108, 16, 31, 228, 
+    193, 108, 16, 31, 213, 141, 108, 16, 31, 213, 140, 108, 16, 31, 222, 206, 
+    222, 3, 108, 16, 31, 222, 206, 222, 2, 108, 16, 31, 242, 173, 108, 16, 
+    31, 219, 168, 108, 16, 31, 235, 184, 226, 157, 108, 16, 31, 235, 184, 
+    226, 156, 108, 16, 31, 249, 142, 64, 235, 183, 108, 16, 31, 223, 104, 64, 
+    235, 183, 108, 16, 31, 249, 176, 226, 157, 108, 16, 31, 235, 182, 226, 
+    157, 108, 16, 31, 218, 73, 64, 249, 175, 108, 16, 31, 249, 142, 64, 249, 
+    175, 108, 16, 31, 249, 142, 64, 249, 174, 108, 16, 31, 249, 176, 254, 91, 
+    108, 16, 31, 222, 4, 64, 249, 176, 254, 91, 108, 16, 31, 218, 73, 64, 
+    222, 4, 64, 249, 175, 108, 16, 31, 213, 243, 108, 16, 31, 216, 85, 226, 
+    157, 108, 16, 31, 233, 63, 226, 157, 108, 16, 31, 254, 90, 226, 157, 108, 
+    16, 31, 218, 73, 64, 254, 89, 108, 16, 31, 222, 4, 64, 254, 89, 108, 16, 
+    31, 218, 73, 64, 222, 4, 64, 254, 89, 108, 16, 31, 213, 158, 64, 254, 89, 
+    108, 16, 31, 223, 104, 64, 254, 89, 108, 16, 31, 223, 104, 64, 254, 88, 
+    108, 16, 31, 223, 103, 108, 16, 31, 223, 102, 108, 16, 31, 223, 101, 108, 
+    16, 31, 223, 100, 108, 16, 31, 254, 166, 108, 16, 31, 254, 165, 108, 16, 
+    31, 231, 168, 108, 16, 31, 222, 9, 108, 16, 31, 253, 254, 108, 16, 31, 
+    223, 128, 108, 16, 31, 223, 127, 108, 16, 31, 253, 191, 108, 16, 31, 251, 
+    237, 226, 157, 108, 16, 31, 217, 50, 108, 16, 31, 217, 49, 108, 16, 31, 
+    224, 11, 232, 228, 108, 16, 31, 251, 191, 108, 16, 31, 251, 190, 108, 16, 
+    31, 251, 189, 108, 16, 31, 254, 146, 108, 16, 31, 226, 222, 108, 16, 31, 
+    218, 250, 108, 16, 31, 216, 83, 108, 16, 31, 242, 103, 108, 16, 31, 212, 
+    28, 108, 16, 31, 224, 229, 108, 16, 31, 251, 22, 108, 16, 31, 215, 86, 
+    108, 16, 31, 250, 254, 230, 127, 108, 16, 31, 221, 204, 64, 235, 61, 108, 
+    16, 31, 251, 33, 108, 16, 31, 215, 220, 108, 16, 31, 218, 156, 215, 220, 
+    108, 16, 31, 232, 154, 108, 16, 31, 219, 58, 108, 16, 31, 214, 142, 108, 
+    16, 31, 240, 253, 246, 72, 108, 16, 31, 253, 235, 108, 16, 31, 224, 237, 
+    253, 235, 108, 16, 31, 251, 150, 108, 16, 31, 224, 228, 251, 150, 108, 
+    16, 31, 254, 143, 108, 16, 31, 218, 119, 218, 27, 218, 118, 108, 16, 31, 
+    218, 119, 218, 27, 218, 117, 108, 16, 31, 218, 69, 108, 16, 31, 224, 203, 
+    108, 16, 31, 247, 189, 108, 16, 31, 247, 191, 108, 16, 31, 247, 190, 108, 
+    16, 31, 224, 134, 108, 16, 31, 224, 123, 108, 16, 31, 249, 130, 108, 16, 
+    31, 249, 129, 108, 16, 31, 249, 128, 108, 16, 31, 249, 127, 108, 16, 31, 
+    249, 126, 108, 16, 31, 254, 178, 108, 16, 31, 252, 127, 64, 231, 154, 
+    108, 16, 31, 252, 127, 64, 214, 17, 108, 16, 31, 223, 60, 108, 16, 31, 
+    240, 245, 108, 16, 31, 228, 217, 108, 16, 31, 248, 153, 108, 16, 31, 230, 
+    139, 108, 16, 31, 163, 246, 102, 108, 16, 31, 163, 226, 136, 10, 14, 240, 
+    109, 10, 14, 240, 108, 10, 14, 240, 107, 10, 14, 240, 106, 10, 14, 240, 
+    105, 10, 14, 240, 104, 10, 14, 240, 103, 10, 14, 240, 102, 10, 14, 240, 
+    101, 10, 14, 240, 100, 10, 14, 240, 99, 10, 14, 240, 98, 10, 14, 240, 97, 
+    10, 14, 240, 96, 10, 14, 240, 95, 10, 14, 240, 94, 10, 14, 240, 93, 10, 
+    14, 240, 92, 10, 14, 240, 91, 10, 14, 240, 90, 10, 14, 240, 89, 10, 14, 
+    240, 88, 10, 14, 240, 87, 10, 14, 240, 86, 10, 14, 240, 85, 10, 14, 240, 
+    84, 10, 14, 240, 83, 10, 14, 240, 82, 10, 14, 240, 81, 10, 14, 240, 80, 
+    10, 14, 240, 79, 10, 14, 240, 78, 10, 14, 240, 77, 10, 14, 240, 76, 10, 
+    14, 240, 75, 10, 14, 240, 74, 10, 14, 240, 73, 10, 14, 240, 72, 10, 14, 
+    240, 71, 10, 14, 240, 70, 10, 14, 240, 69, 10, 14, 240, 68, 10, 14, 240, 
+    67, 10, 14, 240, 66, 10, 14, 240, 65, 10, 14, 240, 64, 10, 14, 240, 63, 
+    10, 14, 240, 62, 10, 14, 240, 61, 10, 14, 240, 60, 10, 14, 240, 59, 10, 
+    14, 240, 58, 10, 14, 240, 57, 10, 14, 240, 56, 10, 14, 240, 55, 10, 14, 
+    240, 54, 10, 14, 240, 53, 10, 14, 240, 52, 10, 14, 240, 51, 10, 14, 240, 
+    50, 10, 14, 240, 49, 10, 14, 240, 48, 10, 14, 240, 47, 10, 14, 240, 46, 
+    10, 14, 240, 45, 10, 14, 240, 44, 10, 14, 240, 43, 10, 14, 240, 42, 10, 
+    14, 240, 41, 10, 14, 240, 40, 10, 14, 240, 39, 10, 14, 240, 38, 10, 14, 
+    240, 37, 10, 14, 240, 36, 10, 14, 240, 35, 10, 14, 240, 34, 10, 14, 240, 
+    33, 10, 14, 240, 32, 10, 14, 240, 31, 10, 14, 240, 30, 10, 14, 240, 29, 
+    10, 14, 240, 28, 10, 14, 240, 27, 10, 14, 240, 26, 10, 14, 240, 25, 10, 
+    14, 240, 24, 10, 14, 240, 23, 10, 14, 240, 22, 10, 14, 240, 21, 10, 14, 
+    240, 20, 10, 14, 240, 19, 10, 14, 240, 18, 10, 14, 240, 17, 10, 14, 240, 
+    16, 10, 14, 240, 15, 10, 14, 240, 14, 10, 14, 240, 13, 10, 14, 240, 12, 
+    10, 14, 240, 11, 10, 14, 240, 10, 10, 14, 240, 9, 10, 14, 240, 8, 10, 14, 
+    240, 7, 10, 14, 240, 6, 10, 14, 240, 5, 10, 14, 240, 4, 10, 14, 240, 3, 
+    10, 14, 240, 2, 10, 14, 240, 1, 10, 14, 240, 0, 10, 14, 239, 255, 10, 14, 
+    239, 254, 10, 14, 239, 253, 10, 14, 239, 252, 10, 14, 239, 251, 10, 14, 
+    239, 250, 10, 14, 239, 249, 10, 14, 239, 248, 10, 14, 239, 247, 10, 14, 
+    239, 246, 10, 14, 239, 245, 10, 14, 239, 244, 10, 14, 239, 243, 10, 14, 
+    239, 242, 10, 14, 239, 241, 10, 14, 239, 240, 10, 14, 239, 239, 10, 14, 
+    239, 238, 10, 14, 239, 237, 10, 14, 239, 236, 10, 14, 239, 235, 10, 14, 
+    239, 234, 10, 14, 239, 233, 10, 14, 239, 232, 10, 14, 239, 231, 10, 14, 
+    239, 230, 10, 14, 239, 229, 10, 14, 239, 228, 10, 14, 239, 227, 10, 14, 
+    239, 226, 10, 14, 239, 225, 10, 14, 239, 224, 10, 14, 239, 223, 10, 14, 
+    239, 222, 10, 14, 239, 221, 10, 14, 239, 220, 10, 14, 239, 219, 10, 14, 
+    239, 218, 10, 14, 239, 217, 10, 14, 239, 216, 10, 14, 239, 215, 10, 14, 
+    239, 214, 10, 14, 239, 213, 10, 14, 239, 212, 10, 14, 239, 211, 10, 14, 
+    239, 210, 10, 14, 239, 209, 10, 14, 239, 208, 10, 14, 239, 207, 10, 14, 
+    239, 206, 10, 14, 239, 205, 10, 14, 239, 204, 10, 14, 239, 203, 10, 14, 
+    239, 202, 10, 14, 239, 201, 10, 14, 239, 200, 10, 14, 239, 199, 10, 14, 
+    239, 198, 10, 14, 239, 197, 10, 14, 239, 196, 10, 14, 239, 195, 10, 14, 
+    239, 194, 10, 14, 239, 193, 10, 14, 239, 192, 10, 14, 239, 191, 10, 14, 
+    239, 190, 10, 14, 239, 189, 10, 14, 239, 188, 10, 14, 239, 187, 10, 14, 
+    239, 186, 10, 14, 239, 185, 10, 14, 239, 184, 10, 14, 239, 183, 10, 14, 
+    239, 182, 10, 14, 239, 181, 10, 14, 239, 180, 10, 14, 239, 179, 10, 14, 
+    239, 178, 10, 14, 239, 177, 10, 14, 239, 176, 10, 14, 239, 175, 10, 14, 
+    239, 174, 10, 14, 239, 173, 10, 14, 239, 172, 10, 14, 239, 171, 10, 14, 
+    239, 170, 10, 14, 239, 169, 10, 14, 239, 168, 10, 14, 239, 167, 10, 14, 
+    239, 166, 10, 14, 239, 165, 10, 14, 239, 164, 10, 14, 239, 163, 10, 14, 
+    239, 162, 10, 14, 239, 161, 10, 14, 239, 160, 10, 14, 239, 159, 10, 14, 
+    239, 158, 10, 14, 239, 157, 10, 14, 239, 156, 10, 14, 239, 155, 10, 14, 
+    239, 154, 10, 14, 239, 153, 10, 14, 239, 152, 10, 14, 239, 151, 10, 14, 
+    239, 150, 10, 14, 239, 149, 10, 14, 239, 148, 10, 14, 239, 147, 10, 14, 
+    239, 146, 10, 14, 239, 145, 10, 14, 239, 144, 10, 14, 239, 143, 10, 14, 
+    239, 142, 10, 14, 239, 141, 10, 14, 239, 140, 10, 14, 239, 139, 10, 14, 
+    239, 138, 10, 14, 239, 137, 10, 14, 239, 136, 10, 14, 239, 135, 10, 14, 
+    239, 134, 10, 14, 239, 133, 10, 14, 239, 132, 10, 14, 239, 131, 10, 14, 
+    239, 130, 10, 14, 239, 129, 10, 14, 239, 128, 10, 14, 239, 127, 10, 14, 
+    239, 126, 10, 14, 239, 125, 10, 14, 239, 124, 10, 14, 239, 123, 10, 14, 
+    239, 122, 10, 14, 239, 121, 10, 14, 239, 120, 10, 14, 239, 119, 10, 14, 
+    239, 118, 10, 14, 239, 117, 10, 14, 239, 116, 10, 14, 239, 115, 10, 14, 
+    239, 114, 10, 14, 239, 113, 10, 14, 239, 112, 10, 14, 239, 111, 10, 14, 
+    239, 110, 10, 14, 239, 109, 10, 14, 239, 108, 10, 14, 239, 107, 10, 14, 
+    239, 106, 10, 14, 239, 105, 10, 14, 239, 104, 10, 14, 239, 103, 10, 14, 
+    239, 102, 10, 14, 239, 101, 10, 14, 239, 100, 10, 14, 239, 99, 10, 14, 
+    239, 98, 10, 14, 239, 97, 10, 14, 239, 96, 10, 14, 239, 95, 10, 14, 239, 
+    94, 10, 14, 239, 93, 10, 14, 239, 92, 10, 14, 239, 91, 10, 14, 239, 90, 
+    10, 14, 239, 89, 10, 14, 239, 88, 10, 14, 239, 87, 10, 14, 239, 86, 10, 
+    14, 239, 85, 10, 14, 239, 84, 10, 14, 239, 83, 10, 14, 239, 82, 10, 14, 
+    239, 81, 10, 14, 239, 80, 10, 14, 239, 79, 10, 14, 239, 78, 10, 14, 239, 
+    77, 10, 14, 239, 76, 10, 14, 239, 75, 10, 14, 239, 74, 10, 14, 239, 73, 
+    10, 14, 239, 72, 10, 14, 239, 71, 10, 14, 239, 70, 10, 14, 239, 69, 10, 
+    14, 239, 68, 10, 14, 239, 67, 10, 14, 239, 66, 10, 14, 239, 65, 10, 14, 
+    239, 64, 10, 14, 239, 63, 10, 14, 239, 62, 10, 14, 239, 61, 10, 14, 239, 
+    60, 10, 14, 239, 59, 10, 14, 239, 58, 10, 14, 239, 57, 10, 14, 239, 56, 
+    10, 14, 239, 55, 10, 14, 239, 54, 10, 14, 239, 53, 10, 14, 239, 52, 10, 
+    14, 239, 51, 10, 14, 239, 50, 10, 14, 239, 49, 10, 14, 239, 48, 10, 14, 
+    239, 47, 10, 14, 239, 46, 10, 14, 239, 45, 10, 14, 239, 44, 10, 14, 239, 
+    43, 10, 14, 239, 42, 10, 14, 239, 41, 10, 14, 239, 40, 10, 14, 239, 39, 
+    10, 14, 239, 38, 10, 14, 239, 37, 10, 14, 239, 36, 10, 14, 239, 35, 10, 
+    14, 239, 34, 10, 14, 239, 33, 10, 14, 239, 32, 10, 14, 239, 31, 10, 14, 
+    239, 30, 10, 14, 239, 29, 10, 14, 239, 28, 10, 14, 239, 27, 10, 14, 239, 
+    26, 10, 14, 239, 25, 10, 14, 239, 24, 10, 14, 239, 23, 10, 14, 239, 22, 
+    10, 14, 239, 21, 10, 14, 239, 20, 10, 14, 239, 19, 10, 14, 239, 18, 10, 
+    14, 239, 17, 10, 14, 239, 16, 10, 14, 239, 15, 10, 14, 239, 14, 10, 14, 
+    239, 13, 10, 14, 239, 12, 10, 14, 239, 11, 10, 14, 239, 10, 10, 14, 239, 
+    9, 10, 14, 239, 8, 10, 14, 239, 7, 10, 14, 239, 6, 10, 14, 239, 5, 10, 
+    14, 239, 4, 10, 14, 239, 3, 10, 14, 239, 2, 10, 14, 239, 1, 10, 14, 239, 
+    0, 10, 14, 238, 255, 10, 14, 238, 254, 10, 14, 238, 253, 10, 14, 238, 
+    252, 10, 14, 238, 251, 10, 14, 238, 250, 10, 14, 238, 249, 10, 14, 238, 
+    248, 10, 14, 238, 247, 10, 14, 238, 246, 10, 14, 238, 245, 10, 14, 238, 
+    244, 10, 14, 238, 243, 10, 14, 238, 242, 10, 14, 238, 241, 10, 14, 238, 
+    240, 10, 14, 238, 239, 10, 14, 238, 238, 10, 14, 238, 237, 10, 14, 238, 
+    236, 10, 14, 238, 235, 10, 14, 238, 234, 10, 14, 238, 233, 10, 14, 238, 
+    232, 10, 14, 238, 231, 10, 14, 238, 230, 10, 14, 238, 229, 10, 14, 238, 
+    228, 10, 14, 238, 227, 10, 14, 238, 226, 10, 14, 238, 225, 10, 14, 238, 
+    224, 10, 14, 238, 223, 10, 14, 238, 222, 10, 14, 238, 221, 10, 14, 238, 
+    220, 10, 14, 238, 219, 10, 14, 238, 218, 10, 14, 238, 217, 10, 14, 238, 
+    216, 10, 14, 238, 215, 10, 14, 238, 214, 10, 14, 238, 213, 10, 14, 238, 
+    212, 10, 14, 238, 211, 10, 14, 238, 210, 10, 14, 238, 209, 10, 14, 238, 
+    208, 10, 14, 238, 207, 10, 14, 238, 206, 10, 14, 238, 205, 10, 14, 238, 
+    204, 10, 14, 238, 203, 10, 14, 238, 202, 10, 14, 238, 201, 10, 14, 238, 
+    200, 10, 14, 238, 199, 10, 14, 238, 198, 10, 14, 238, 197, 10, 14, 238, 
+    196, 10, 14, 238, 195, 10, 14, 238, 194, 10, 14, 238, 193, 10, 14, 238, 
+    192, 10, 14, 238, 191, 10, 14, 238, 190, 10, 14, 238, 189, 10, 14, 238, 
+    188, 10, 14, 238, 187, 10, 14, 238, 186, 10, 14, 238, 185, 10, 14, 238, 
+    184, 10, 14, 238, 183, 10, 14, 238, 182, 10, 14, 238, 181, 10, 14, 238, 
+    180, 10, 14, 238, 179, 10, 14, 238, 178, 10, 14, 238, 177, 10, 14, 238, 
+    176, 10, 14, 238, 175, 10, 14, 238, 174, 10, 14, 238, 173, 10, 14, 238, 
+    172, 10, 14, 238, 171, 10, 14, 238, 170, 10, 14, 238, 169, 10, 14, 238, 
+    168, 10, 14, 238, 167, 10, 14, 238, 166, 10, 14, 238, 165, 10, 14, 238, 
+    164, 10, 14, 238, 163, 10, 14, 238, 162, 10, 14, 238, 161, 10, 14, 238, 
+    160, 10, 14, 238, 159, 10, 14, 238, 158, 10, 14, 238, 157, 10, 14, 238, 
+    156, 10, 14, 238, 155, 10, 14, 238, 154, 10, 14, 238, 153, 10, 14, 238, 
+    152, 10, 14, 238, 151, 10, 14, 238, 150, 10, 14, 238, 149, 10, 14, 238, 
+    148, 10, 14, 238, 147, 10, 14, 238, 146, 10, 14, 238, 145, 10, 14, 238, 
+    144, 10, 14, 238, 143, 10, 14, 238, 142, 10, 14, 238, 141, 10, 14, 238, 
+    140, 10, 14, 238, 139, 10, 14, 238, 138, 10, 14, 238, 137, 10, 14, 238, 
+    136, 10, 14, 238, 135, 10, 14, 238, 134, 10, 14, 238, 133, 10, 14, 238, 
+    132, 10, 14, 238, 131, 10, 14, 238, 130, 10, 14, 238, 129, 10, 14, 238, 
+    128, 10, 14, 238, 127, 10, 14, 238, 126, 10, 14, 238, 125, 10, 14, 238, 
+    124, 10, 14, 238, 123, 10, 14, 238, 122, 10, 14, 238, 121, 10, 14, 238, 
+    120, 10, 14, 238, 119, 10, 14, 238, 118, 10, 14, 238, 117, 10, 14, 238, 
+    116, 10, 14, 238, 115, 10, 14, 238, 114, 10, 14, 238, 113, 10, 14, 238, 
+    112, 10, 14, 238, 111, 10, 14, 238, 110, 10, 14, 238, 109, 10, 14, 238, 
+    108, 10, 14, 238, 107, 10, 14, 238, 106, 10, 14, 238, 105, 10, 14, 238, 
+    104, 10, 14, 238, 103, 10, 14, 238, 102, 10, 14, 238, 101, 10, 14, 238, 
+    100, 10, 14, 238, 99, 10, 14, 238, 98, 10, 14, 238, 97, 10, 14, 238, 96, 
+    10, 14, 238, 95, 10, 14, 238, 94, 10, 14, 238, 93, 10, 14, 238, 92, 10, 
+    14, 238, 91, 10, 14, 238, 90, 10, 14, 238, 89, 10, 14, 238, 88, 10, 14, 
+    238, 87, 10, 14, 238, 86, 10, 14, 238, 85, 10, 14, 238, 84, 10, 14, 238, 
+    83, 10, 14, 238, 82, 10, 14, 238, 81, 10, 14, 238, 80, 233, 96, 217, 85, 
+    129, 219, 20, 129, 245, 39, 79, 129, 224, 1, 79, 129, 54, 50, 129, 247, 
+    140, 50, 129, 225, 185, 50, 129, 254, 134, 129, 254, 65, 129, 43, 226, 7, 
+    129, 44, 226, 7, 129, 253, 224, 129, 96, 50, 129, 249, 227, 129, 240, 
+    174, 129, 243, 236, 218, 131, 129, 219, 48, 129, 21, 210, 86, 129, 21, 
+    111, 129, 21, 105, 129, 21, 158, 129, 21, 161, 129, 21, 190, 129, 21, 
+    195, 129, 21, 199, 129, 21, 196, 129, 21, 201, 129, 249, 234, 129, 220, 
+    152, 129, 233, 21, 50, 129, 245, 106, 50, 129, 242, 137, 50, 129, 224, 
+    16, 79, 129, 249, 225, 253, 214, 129, 7, 6, 1, 61, 129, 7, 6, 1, 253, 
+    166, 129, 7, 6, 1, 251, 74, 129, 7, 6, 1, 249, 68, 129, 7, 6, 1, 76, 129, 
+    7, 6, 1, 245, 14, 129, 7, 6, 1, 243, 209, 129, 7, 6, 1, 242, 67, 129, 7, 
+    6, 1, 74, 129, 7, 6, 1, 235, 150, 129, 7, 6, 1, 235, 29, 129, 7, 6, 1, 
+    156, 129, 7, 6, 1, 194, 129, 7, 6, 1, 230, 30, 129, 7, 6, 1, 78, 129, 7, 
+    6, 1, 226, 109, 129, 7, 6, 1, 224, 99, 129, 7, 6, 1, 153, 129, 7, 6, 1, 
+    222, 93, 129, 7, 6, 1, 217, 153, 129, 7, 6, 1, 69, 129, 7, 6, 1, 214, 
+    105, 129, 7, 6, 1, 212, 98, 129, 7, 6, 1, 211, 178, 129, 7, 6, 1, 211, 
+    117, 129, 7, 6, 1, 210, 159, 129, 43, 42, 127, 129, 223, 53, 219, 48, 
+    129, 44, 42, 127, 129, 250, 39, 255, 23, 129, 121, 232, 219, 129, 242, 
+    144, 255, 23, 129, 7, 4, 1, 61, 129, 7, 4, 1, 253, 166, 129, 7, 4, 1, 
+    251, 74, 129, 7, 4, 1, 249, 68, 129, 7, 4, 1, 76, 129, 7, 4, 1, 245, 14, 
+    129, 7, 4, 1, 243, 209, 129, 7, 4, 1, 242, 67, 129, 7, 4, 1, 74, 129, 7, 
+    4, 1, 235, 150, 129, 7, 4, 1, 235, 29, 129, 7, 4, 1, 156, 129, 7, 4, 1, 
+    194, 129, 7, 4, 1, 230, 30, 129, 7, 4, 1, 78, 129, 7, 4, 1, 226, 109, 
+    129, 7, 4, 1, 224, 99, 129, 7, 4, 1, 153, 129, 7, 4, 1, 222, 93, 129, 7, 
+    4, 1, 217, 153, 129, 7, 4, 1, 69, 129, 7, 4, 1, 214, 105, 129, 7, 4, 1, 
+    212, 98, 129, 7, 4, 1, 211, 178, 129, 7, 4, 1, 211, 117, 129, 7, 4, 1, 
+    210, 159, 129, 43, 249, 107, 127, 129, 67, 232, 219, 129, 44, 249, 107, 
+    127, 129, 184, 251, 14, 217, 85, 45, 221, 80, 45, 221, 69, 45, 221, 58, 
+    45, 221, 46, 45, 221, 35, 45, 221, 24, 45, 221, 13, 45, 221, 2, 45, 220, 
+    247, 45, 220, 239, 45, 220, 238, 45, 220, 237, 45, 220, 236, 45, 220, 
+    234, 45, 220, 233, 45, 220, 232, 45, 220, 231, 45, 220, 230, 45, 220, 
     229, 45, 220, 228, 45, 220, 227, 45, 220, 226, 45, 220, 225, 45, 220, 
-    224, 45, 220, 222, 45, 220, 221, 45, 220, 220, 45, 220, 219, 45, 220, 
+    223, 45, 220, 222, 45, 220, 221, 45, 220, 220, 45, 220, 219, 45, 220, 
     218, 45, 220, 217, 45, 220, 216, 45, 220, 215, 45, 220, 214, 45, 220, 
-    213, 45, 220, 211, 45, 220, 210, 45, 220, 209, 45, 220, 208, 45, 220, 
+    212, 45, 220, 211, 45, 220, 210, 45, 220, 209, 45, 220, 208, 45, 220, 
     207, 45, 220, 206, 45, 220, 205, 45, 220, 204, 45, 220, 203, 45, 220, 
-    202, 45, 220, 200, 45, 220, 199, 45, 220, 198, 45, 220, 197, 45, 220, 
+    201, 45, 220, 200, 45, 220, 199, 45, 220, 198, 45, 220, 197, 45, 220, 
     196, 45, 220, 195, 45, 220, 194, 45, 220, 193, 45, 220, 192, 45, 220, 
-    191, 45, 220, 189, 45, 220, 188, 45, 220, 187, 45, 220, 186, 45, 220, 
+    190, 45, 220, 189, 45, 220, 188, 45, 220, 187, 45, 220, 186, 45, 220, 
     185, 45, 220, 184, 45, 220, 183, 45, 220, 182, 45, 220, 181, 45, 220, 
-    180, 45, 220, 178, 45, 220, 177, 45, 220, 176, 45, 220, 175, 45, 220, 
+    179, 45, 220, 178, 45, 220, 177, 45, 220, 176, 45, 220, 175, 45, 220, 
     174, 45, 220, 173, 45, 220, 172, 45, 220, 171, 45, 220, 170, 45, 220, 
-    169, 45, 220, 167, 45, 220, 166, 45, 220, 165, 45, 220, 164, 45, 220, 
-    163, 45, 220, 162, 45, 220, 161, 45, 220, 160, 45, 220, 159, 45, 220, 
-    158, 45, 221, 155, 45, 221, 154, 45, 221, 153, 45, 221, 152, 45, 221, 
+    168, 45, 220, 167, 45, 220, 166, 45, 220, 165, 45, 220, 164, 45, 220, 
+    163, 45, 220, 162, 45, 220, 161, 45, 220, 160, 45, 220, 159, 45, 221, 
+    156, 45, 221, 155, 45, 221, 154, 45, 221, 153, 45, 221, 152, 45, 221, 
     151, 45, 221, 150, 45, 221, 149, 45, 221, 148, 45, 221, 147, 45, 221, 
-    146, 45, 221, 144, 45, 221, 143, 45, 221, 142, 45, 221, 141, 45, 221, 
+    145, 45, 221, 144, 45, 221, 143, 45, 221, 142, 45, 221, 141, 45, 221, 
     140, 45, 221, 139, 45, 221, 138, 45, 221, 137, 45, 221, 136, 45, 221, 
-    135, 45, 221, 133, 45, 221, 132, 45, 221, 131, 45, 221, 130, 45, 221, 
+    134, 45, 221, 133, 45, 221, 132, 45, 221, 131, 45, 221, 130, 45, 221, 
     129, 45, 221, 128, 45, 221, 127, 45, 221, 126, 45, 221, 125, 45, 221, 
-    124, 45, 221, 122, 45, 221, 121, 45, 221, 120, 45, 221, 119, 45, 221, 
+    123, 45, 221, 122, 45, 221, 121, 45, 221, 120, 45, 221, 119, 45, 221, 
     118, 45, 221, 117, 45, 221, 116, 45, 221, 115, 45, 221, 114, 45, 221, 
-    113, 45, 221, 111, 45, 221, 110, 45, 221, 109, 45, 221, 108, 45, 221, 
+    112, 45, 221, 111, 45, 221, 110, 45, 221, 109, 45, 221, 108, 45, 221, 
     107, 45, 221, 106, 45, 221, 105, 45, 221, 104, 45, 221, 103, 45, 221, 
-    102, 45, 221, 100, 45, 221, 99, 45, 221, 98, 45, 221, 97, 45, 221, 96, 
-    45, 221, 95, 45, 221, 94, 45, 221, 93, 45, 221, 92, 45, 221, 91, 45, 221, 
+    101, 45, 221, 100, 45, 221, 99, 45, 221, 98, 45, 221, 97, 45, 221, 96, 
+    45, 221, 95, 45, 221, 94, 45, 221, 93, 45, 221, 92, 45, 221, 90, 45, 221, 
     89, 45, 221, 88, 45, 221, 87, 45, 221, 86, 45, 221, 85, 45, 221, 84, 45, 
-    221, 83, 45, 221, 82, 45, 221, 81, 45, 221, 80, 45, 221, 78, 45, 221, 77, 
+    221, 83, 45, 221, 82, 45, 221, 81, 45, 221, 79, 45, 221, 78, 45, 221, 77, 
     45, 221, 76, 45, 221, 75, 45, 221, 74, 45, 221, 73, 45, 221, 72, 45, 221, 
-    71, 45, 221, 70, 45, 221, 69, 45, 221, 67, 45, 221, 66, 45, 221, 65, 45, 
+    71, 45, 221, 70, 45, 221, 68, 45, 221, 67, 45, 221, 66, 45, 221, 65, 45, 
     221, 64, 45, 221, 63, 45, 221, 62, 45, 221, 61, 45, 221, 60, 45, 221, 59, 
-    45, 221, 58, 45, 221, 56, 45, 221, 55, 45, 221, 54, 45, 221, 53, 45, 221, 
-    52, 45, 221, 51, 45, 221, 50, 45, 221, 49, 45, 221, 48, 45, 221, 47, 45, 
+    45, 221, 57, 45, 221, 56, 45, 221, 55, 45, 221, 54, 45, 221, 53, 45, 221, 
+    52, 45, 221, 51, 45, 221, 50, 45, 221, 49, 45, 221, 48, 45, 221, 45, 45, 
     221, 44, 45, 221, 43, 45, 221, 42, 45, 221, 41, 45, 221, 40, 45, 221, 39, 
-    45, 221, 38, 45, 221, 37, 45, 221, 36, 45, 221, 35, 45, 221, 33, 45, 221, 
+    45, 221, 38, 45, 221, 37, 45, 221, 36, 45, 221, 34, 45, 221, 33, 45, 221, 
     32, 45, 221, 31, 45, 221, 30, 45, 221, 29, 45, 221, 28, 45, 221, 27, 45, 
-    221, 26, 45, 221, 25, 45, 221, 24, 45, 221, 22, 45, 221, 21, 45, 221, 20, 
+    221, 26, 45, 221, 25, 45, 221, 23, 45, 221, 22, 45, 221, 21, 45, 221, 20, 
     45, 221, 19, 45, 221, 18, 45, 221, 17, 45, 221, 16, 45, 221, 15, 45, 221, 
-    14, 45, 221, 13, 45, 221, 11, 45, 221, 10, 45, 221, 9, 45, 221, 8, 45, 
-    221, 7, 45, 221, 6, 45, 221, 5, 45, 221, 4, 45, 221, 3, 45, 221, 2, 45, 
+    14, 45, 221, 12, 45, 221, 11, 45, 221, 10, 45, 221, 9, 45, 221, 8, 45, 
+    221, 7, 45, 221, 6, 45, 221, 5, 45, 221, 4, 45, 221, 3, 45, 221, 1, 45, 
     221, 0, 45, 220, 255, 45, 220, 254, 45, 220, 253, 45, 220, 252, 45, 220, 
-    251, 45, 220, 250, 45, 220, 249, 45, 220, 248, 45, 220, 247, 45, 220, 
+    251, 45, 220, 250, 45, 220, 249, 45, 220, 248, 45, 220, 246, 45, 220, 
     245, 45, 220, 244, 45, 220, 243, 45, 220, 242, 45, 220, 241, 45, 220, 
-    240, 45, 220, 239, 227, 203, 227, 205, 218, 153, 64, 241, 234, 219, 49, 
-    218, 153, 64, 216, 213, 218, 86, 245, 144, 64, 216, 213, 245, 57, 245, 
-    144, 64, 215, 244, 245, 110, 245, 133, 245, 134, 255, 8, 255, 9, 254, 
-    168, 252, 48, 252, 180, 251, 132, 135, 217, 90, 203, 217, 90, 240, 228, 
-    217, 94, 232, 215, 244, 146, 166, 232, 214, 245, 144, 64, 232, 214, 233, 
-    1, 228, 136, 245, 113, 232, 215, 217, 90, 67, 217, 90, 212, 118, 244, 21, 
-    244, 146, 244, 126, 250, 231, 223, 54, 249, 144, 220, 29, 226, 131, 232, 
-    151, 110, 219, 59, 220, 29, 236, 0, 232, 151, 210, 86, 219, 192, 248, 
-    152, 232, 205, 245, 78, 247, 156, 248, 32, 249, 179, 110, 248, 142, 248, 
-    32, 249, 179, 105, 248, 141, 248, 32, 249, 179, 158, 248, 140, 248, 32, 
-    249, 179, 161, 248, 139, 152, 255, 8, 229, 210, 217, 178, 236, 63, 217, 
-    181, 245, 144, 64, 215, 245, 251, 214, 245, 63, 251, 6, 251, 8, 245, 144, 
-    64, 231, 82, 245, 111, 218, 62, 218, 79, 245, 78, 245, 79, 235, 233, 220, 
-    139, 161, 244, 108, 220, 138, 243, 238, 235, 233, 220, 139, 158, 242, 
-    122, 220, 138, 242, 119, 235, 233, 220, 139, 105, 223, 122, 220, 138, 
-    222, 146, 235, 233, 220, 139, 110, 214, 174, 220, 138, 214, 133, 219, 22, 
-    248, 64, 248, 66, 226, 79, 250, 143, 226, 81, 125, 226, 241, 224, 194, 
-    241, 48, 251, 151, 225, 174, 241, 204, 251, 162, 228, 76, 251, 151, 241, 
-    204, 229, 176, 235, 243, 235, 245, 229, 83, 232, 214, 229, 100, 218, 153, 
-    64, 221, 159, 254, 19, 218, 224, 245, 144, 64, 221, 159, 254, 19, 245, 
-    81, 135, 217, 91, 220, 128, 203, 217, 91, 220, 128, 240, 225, 135, 217, 
-    91, 2, 235, 36, 203, 217, 91, 2, 235, 36, 240, 226, 232, 215, 217, 91, 
-    220, 128, 67, 217, 91, 220, 128, 212, 117, 225, 254, 232, 215, 244, 15, 
-    225, 254, 232, 215, 246, 107, 225, 33, 225, 254, 232, 215, 252, 179, 225, 
-    254, 232, 215, 214, 163, 225, 29, 223, 51, 232, 215, 244, 146, 223, 51, 
-    235, 243, 223, 36, 219, 156, 220, 29, 105, 219, 153, 218, 226, 219, 156, 
-    220, 29, 158, 219, 152, 218, 225, 248, 32, 249, 179, 218, 106, 248, 138, 
-    224, 184, 214, 132, 110, 224, 184, 214, 130, 224, 150, 224, 184, 214, 
-    132, 105, 224, 184, 214, 129, 224, 149, 220, 129, 215, 243, 218, 152, 
-    218, 90, 251, 7, 250, 143, 250, 210, 231, 44, 212, 59, 230, 44, 218, 153, 
-    64, 242, 108, 254, 19, 218, 153, 64, 224, 167, 254, 19, 219, 21, 245, 
-    144, 64, 242, 108, 254, 19, 245, 144, 64, 224, 167, 254, 19, 245, 108, 
-    218, 153, 64, 218, 106, 219, 36, 219, 156, 242, 142, 135, 235, 196, 220, 
-    108, 219, 156, 135, 235, 196, 221, 195, 249, 179, 220, 136, 235, 196, 
-    249, 114, 218, 107, 216, 237, 218, 169, 226, 170, 217, 168, 249, 219, 
-    226, 143, 224, 185, 231, 43, 225, 20, 254, 54, 224, 179, 249, 219, 254, 
-    70, 229, 164, 219, 201, 7, 6, 1, 242, 250, 7, 4, 1, 242, 250, 250, 160, 
-    182, 218, 68, 249, 228, 219, 107, 233, 47, 165, 1, 232, 176, 209, 209, 1, 
-    244, 45, 244, 37, 209, 209, 1, 244, 45, 244, 158, 209, 209, 1, 222, 212, 
-    209, 209, 1, 232, 157, 63, 164, 251, 224, 220, 4, 242, 216, 230, 249, 
-    223, 42, 243, 217, 243, 216, 243, 215, 230, 46, 209, 251, 209, 252, 209, 
-    254, 232, 103, 222, 220, 232, 104, 222, 221, 225, 224, 232, 102, 222, 
-    219, 228, 107, 230, 166, 211, 229, 212, 15, 245, 163, 243, 227, 230, 230, 
-    226, 198, 214, 134, 87, 230, 230, 248, 158, 87, 8, 3, 235, 159, 78, 224, 
-    195, 244, 21, 31, 67, 44, 71, 233, 21, 127, 213, 118, 213, 7, 212, 195, 
-    212, 184, 212, 173, 212, 162, 212, 151, 212, 140, 212, 129, 213, 117, 
-    213, 106, 213, 95, 213, 84, 213, 73, 213, 62, 213, 51, 251, 72, 226, 156, 
-    78, 251, 197, 209, 253, 49, 28, 16, 243, 237, 219, 103, 250, 74, 214, 9, 
-    213, 40, 213, 29, 213, 18, 213, 6, 212, 251, 212, 240, 212, 229, 212, 
-    218, 212, 207, 212, 199, 212, 198, 212, 197, 212, 196, 212, 194, 212, 
-    193, 212, 192, 212, 191, 212, 190, 212, 189, 212, 188, 212, 187, 212, 
-    186, 212, 185, 212, 183, 212, 182, 212, 181, 212, 180, 212, 179, 212, 
-    178, 212, 177, 212, 176, 212, 175, 212, 174, 212, 172, 212, 171, 212, 
-    170, 212, 169, 212, 168, 212, 167, 212, 166, 212, 165, 212, 164, 212, 
-    163, 212, 161, 212, 160, 212, 159, 212, 158, 212, 157, 212, 156, 212, 
-    155, 212, 154, 212, 153, 212, 152, 212, 150, 212, 149, 212, 148, 212, 
-    147, 212, 146, 212, 145, 212, 144, 212, 143, 212, 142, 212, 141, 212, 
-    139, 212, 138, 212, 137, 212, 136, 212, 135, 212, 134, 212, 133, 212, 
-    132, 212, 131, 212, 130, 212, 128, 212, 127, 212, 126, 212, 125, 212, 
-    124, 212, 123, 212, 122, 212, 121, 212, 120, 212, 119, 213, 116, 213, 
-    115, 213, 114, 213, 113, 213, 112, 213, 111, 213, 110, 213, 109, 213, 
-    108, 213, 107, 213, 105, 213, 104, 213, 103, 213, 102, 213, 101, 213, 
-    100, 213, 99, 213, 98, 213, 97, 213, 96, 213, 94, 213, 93, 213, 92, 213, 
-    91, 213, 90, 213, 89, 213, 88, 213, 87, 213, 86, 213, 85, 213, 83, 213, 
-    82, 213, 81, 213, 80, 213, 79, 213, 78, 213, 77, 213, 76, 213, 75, 213, 
-    74, 213, 72, 213, 71, 213, 70, 213, 69, 213, 68, 213, 67, 213, 66, 213, 
-    65, 213, 64, 213, 63, 213, 61, 213, 60, 213, 59, 213, 58, 213, 57, 213, 
-    56, 213, 55, 213, 54, 213, 53, 213, 52, 213, 50, 213, 49, 213, 48, 213, 
-    47, 213, 46, 213, 45, 213, 44, 213, 43, 213, 42, 213, 41, 213, 39, 213, 
-    38, 213, 37, 213, 36, 213, 35, 213, 34, 213, 33, 213, 32, 213, 31, 213, 
-    30, 213, 28, 213, 27, 213, 26, 213, 25, 213, 24, 213, 23, 213, 22, 213, 
-    21, 213, 20, 213, 19, 213, 17, 213, 16, 213, 15, 213, 14, 213, 13, 213, 
-    12, 213, 11, 213, 10, 213, 9, 213, 8, 213, 5, 213, 4, 213, 3, 213, 2, 
-    213, 1, 213, 0, 212, 255, 212, 254, 212, 253, 212, 252, 212, 250, 212, 
-    249, 212, 248, 212, 247, 212, 246, 212, 245, 212, 244, 212, 243, 212, 
-    242, 212, 241, 212, 239, 212, 238, 212, 237, 212, 236, 212, 235, 212, 
-    234, 212, 233, 212, 232, 212, 231, 212, 230, 212, 228, 212, 227, 212, 
-    226, 212, 225, 212, 224, 212, 223, 212, 222, 212, 221, 212, 220, 212, 
-    219, 212, 217, 212, 216, 212, 215, 212, 214, 212, 213, 212, 212, 212, 
-    211, 212, 210, 212, 209, 212, 208, 212, 206, 212, 205, 212, 204, 212, 
-    203, 212, 202, 212, 201, 212, 200, 7, 6, 1, 115, 2, 231, 234, 22, 242, 
-    137, 7, 4, 1, 115, 2, 231, 234, 22, 242, 137, 7, 6, 1, 160, 2, 67, 232, 
-    215, 51, 7, 4, 1, 160, 2, 67, 232, 215, 51, 7, 6, 1, 160, 2, 67, 232, 
-    215, 252, 44, 22, 242, 137, 7, 4, 1, 160, 2, 67, 232, 215, 252, 44, 22, 
-    242, 137, 7, 6, 1, 160, 2, 67, 232, 215, 252, 44, 22, 142, 7, 4, 1, 160, 
-    2, 67, 232, 215, 252, 44, 22, 142, 7, 6, 1, 160, 2, 250, 32, 22, 231, 
-    233, 7, 4, 1, 160, 2, 250, 32, 22, 231, 233, 7, 6, 1, 160, 2, 250, 32, 
-    22, 250, 235, 7, 4, 1, 160, 2, 250, 32, 22, 250, 235, 7, 6, 1, 240, 155, 
-    2, 231, 234, 22, 242, 137, 7, 4, 1, 240, 155, 2, 231, 234, 22, 242, 137, 
-    7, 4, 1, 240, 155, 2, 59, 77, 22, 142, 7, 4, 1, 229, 81, 2, 216, 90, 48, 
-    7, 6, 1, 144, 2, 67, 232, 215, 51, 7, 4, 1, 144, 2, 67, 232, 215, 51, 7, 
-    6, 1, 144, 2, 67, 232, 215, 252, 44, 22, 242, 137, 7, 4, 1, 144, 2, 67, 
-    232, 215, 252, 44, 22, 242, 137, 7, 6, 1, 144, 2, 67, 232, 215, 252, 44, 
-    22, 142, 7, 4, 1, 144, 2, 67, 232, 215, 252, 44, 22, 142, 7, 6, 1, 222, 
-    93, 2, 67, 232, 215, 51, 7, 4, 1, 222, 93, 2, 67, 232, 215, 51, 7, 6, 1, 
-    104, 2, 231, 234, 22, 242, 137, 7, 4, 1, 104, 2, 231, 234, 22, 242, 137, 
-    7, 6, 1, 115, 2, 226, 226, 22, 142, 7, 4, 1, 115, 2, 226, 226, 22, 142, 
-    7, 6, 1, 115, 2, 226, 226, 22, 183, 7, 4, 1, 115, 2, 226, 226, 22, 183, 
-    7, 6, 1, 160, 2, 226, 226, 22, 142, 7, 4, 1, 160, 2, 226, 226, 22, 142, 
-    7, 6, 1, 160, 2, 226, 226, 22, 183, 7, 4, 1, 160, 2, 226, 226, 22, 183, 
-    7, 6, 1, 160, 2, 59, 77, 22, 142, 7, 4, 1, 160, 2, 59, 77, 22, 142, 7, 6, 
-    1, 160, 2, 59, 77, 22, 183, 7, 4, 1, 160, 2, 59, 77, 22, 183, 7, 4, 1, 
-    240, 155, 2, 59, 77, 22, 242, 137, 7, 4, 1, 240, 155, 2, 59, 77, 22, 183, 
-    7, 6, 1, 240, 155, 2, 226, 226, 22, 142, 7, 4, 1, 240, 155, 2, 226, 226, 
-    22, 59, 77, 22, 142, 7, 6, 1, 240, 155, 2, 226, 226, 22, 183, 7, 4, 1, 
-    240, 155, 2, 226, 226, 22, 59, 77, 22, 183, 7, 6, 1, 235, 146, 2, 183, 7, 
-    4, 1, 235, 146, 2, 59, 77, 22, 183, 7, 6, 1, 233, 150, 2, 183, 7, 4, 1, 
-    233, 150, 2, 183, 7, 6, 1, 232, 51, 2, 183, 7, 4, 1, 232, 51, 2, 183, 7, 
-    6, 1, 223, 225, 2, 183, 7, 4, 1, 223, 225, 2, 183, 7, 6, 1, 104, 2, 226, 
-    226, 22, 142, 7, 4, 1, 104, 2, 226, 226, 22, 142, 7, 6, 1, 104, 2, 226, 
-    226, 22, 183, 7, 4, 1, 104, 2, 226, 226, 22, 183, 7, 6, 1, 104, 2, 231, 
-    234, 22, 142, 7, 4, 1, 104, 2, 231, 234, 22, 142, 7, 6, 1, 104, 2, 231, 
-    234, 22, 183, 7, 4, 1, 104, 2, 231, 234, 22, 183, 7, 4, 1, 254, 245, 2, 
-    242, 137, 7, 4, 1, 204, 144, 2, 242, 137, 7, 4, 1, 204, 144, 2, 142, 7, 
-    4, 1, 215, 94, 214, 106, 2, 242, 137, 7, 4, 1, 215, 94, 214, 106, 2, 142, 
-    7, 4, 1, 221, 197, 2, 242, 137, 7, 4, 1, 221, 197, 2, 142, 7, 4, 1, 241, 
-    52, 221, 197, 2, 242, 137, 7, 4, 1, 241, 52, 221, 197, 2, 142, 146, 1, 
-    234, 110, 36, 116, 235, 24, 36, 116, 229, 80, 36, 116, 251, 67, 36, 116, 
-    227, 168, 36, 116, 215, 160, 36, 116, 228, 112, 36, 116, 217, 153, 36, 
-    116, 230, 26, 36, 116, 226, 106, 36, 116, 193, 36, 116, 211, 117, 36, 
-    116, 153, 36, 116, 156, 36, 116, 214, 105, 36, 116, 232, 177, 36, 116, 
-    232, 186, 36, 116, 222, 181, 36, 116, 228, 94, 36, 116, 235, 145, 36, 
-    116, 220, 105, 36, 116, 218, 227, 36, 116, 222, 92, 36, 116, 242, 61, 36, 
-    116, 233, 233, 36, 3, 235, 11, 36, 3, 234, 93, 36, 3, 234, 84, 36, 3, 
-    233, 218, 36, 3, 233, 189, 36, 3, 234, 183, 36, 3, 234, 182, 36, 3, 234, 
-    247, 36, 3, 234, 29, 36, 3, 234, 11, 36, 3, 234, 196, 36, 3, 229, 77, 36, 
-    3, 229, 28, 36, 3, 229, 24, 36, 3, 228, 249, 36, 3, 228, 242, 36, 3, 229, 
-    65, 36, 3, 229, 63, 36, 3, 229, 74, 36, 3, 229, 5, 36, 3, 229, 0, 36, 3, 
-    229, 67, 36, 3, 251, 33, 36, 3, 250, 52, 36, 3, 250, 42, 36, 3, 249, 113, 
-    36, 3, 249, 84, 36, 3, 250, 191, 36, 3, 250, 183, 36, 3, 251, 23, 36, 3, 
-    249, 239, 36, 3, 249, 175, 36, 3, 250, 223, 36, 3, 227, 165, 36, 3, 227, 
-    149, 36, 3, 227, 144, 36, 3, 227, 129, 36, 3, 227, 122, 36, 3, 227, 157, 
-    36, 3, 227, 156, 36, 3, 227, 162, 36, 3, 227, 135, 36, 3, 227, 133, 36, 
-    3, 227, 160, 36, 3, 215, 156, 36, 3, 215, 136, 36, 3, 215, 135, 36, 3, 
-    215, 124, 36, 3, 215, 121, 36, 3, 215, 152, 36, 3, 215, 151, 36, 3, 215, 
-    155, 36, 3, 215, 134, 36, 3, 215, 133, 36, 3, 215, 154, 36, 3, 228, 110, 
-    36, 3, 228, 96, 36, 3, 228, 95, 36, 3, 228, 79, 36, 3, 228, 78, 36, 3, 
-    228, 106, 36, 3, 228, 105, 36, 3, 228, 109, 36, 3, 228, 81, 36, 3, 228, 
-    80, 36, 3, 228, 108, 36, 3, 217, 102, 36, 3, 216, 118, 36, 3, 216, 104, 
-    36, 3, 215, 119, 36, 3, 215, 85, 36, 3, 217, 23, 36, 3, 217, 12, 36, 3, 
-    217, 80, 36, 3, 111, 36, 3, 216, 18, 36, 3, 217, 42, 36, 3, 229, 226, 36, 
-    3, 228, 234, 36, 3, 228, 209, 36, 3, 227, 238, 36, 3, 227, 180, 36, 3, 
-    229, 108, 36, 3, 229, 104, 36, 3, 229, 213, 36, 3, 228, 75, 36, 3, 228, 
-    65, 36, 3, 229, 188, 36, 3, 226, 90, 36, 3, 225, 109, 36, 3, 225, 72, 36, 
-    3, 224, 151, 36, 3, 224, 120, 36, 3, 225, 222, 36, 3, 225, 212, 36, 3, 
-    226, 72, 36, 3, 225, 17, 36, 3, 224, 250, 36, 3, 225, 235, 36, 3, 231, 
-    238, 36, 3, 230, 231, 36, 3, 230, 202, 36, 3, 230, 103, 36, 3, 230, 55, 
-    36, 3, 231, 92, 36, 3, 231, 81, 36, 3, 231, 204, 36, 3, 230, 162, 36, 3, 
-    230, 133, 36, 3, 231, 136, 36, 3, 211, 103, 36, 3, 211, 8, 36, 3, 210, 
-    255, 36, 3, 210, 212, 36, 3, 210, 181, 36, 3, 211, 47, 36, 3, 211, 44, 
-    36, 3, 211, 82, 36, 3, 210, 244, 36, 3, 210, 229, 36, 3, 211, 55, 36, 3, 
-    223, 185, 36, 3, 223, 36, 36, 3, 222, 240, 36, 3, 222, 141, 36, 3, 222, 
-    113, 36, 3, 223, 129, 36, 3, 223, 109, 36, 3, 223, 167, 36, 3, 222, 212, 
-    36, 3, 222, 198, 36, 3, 223, 137, 36, 3, 233, 135, 36, 3, 232, 242, 36, 
-    3, 232, 228, 36, 3, 232, 99, 36, 3, 232, 74, 36, 3, 233, 59, 36, 3, 233, 
-    51, 36, 3, 233, 110, 36, 3, 232, 157, 36, 3, 232, 128, 36, 3, 233, 75, 
-    36, 3, 214, 26, 36, 3, 213, 176, 36, 3, 213, 162, 36, 3, 212, 116, 36, 3, 
-    212, 109, 36, 3, 213, 255, 36, 3, 213, 250, 36, 3, 214, 23, 36, 3, 213, 
-    138, 36, 3, 213, 127, 36, 3, 214, 5, 36, 3, 232, 175, 36, 3, 232, 170, 
-    36, 3, 232, 169, 36, 3, 232, 166, 36, 3, 232, 165, 36, 3, 232, 172, 36, 
-    3, 232, 171, 36, 3, 232, 174, 36, 3, 232, 168, 36, 3, 232, 167, 36, 3, 
-    232, 173, 36, 3, 232, 184, 36, 3, 232, 179, 36, 3, 232, 178, 36, 3, 232, 
-    162, 36, 3, 232, 161, 36, 3, 232, 181, 36, 3, 232, 180, 36, 3, 232, 183, 
-    36, 3, 232, 164, 36, 3, 232, 163, 36, 3, 232, 182, 36, 3, 222, 179, 36, 
-    3, 222, 168, 36, 3, 222, 167, 36, 3, 222, 161, 36, 3, 222, 154, 36, 3, 
-    222, 175, 36, 3, 222, 174, 36, 3, 222, 178, 36, 3, 222, 166, 36, 3, 222, 
-    165, 36, 3, 222, 177, 36, 3, 228, 92, 36, 3, 228, 87, 36, 3, 228, 86, 36, 
-    3, 228, 83, 36, 3, 228, 82, 36, 3, 228, 89, 36, 3, 228, 88, 36, 3, 228, 
-    91, 36, 3, 228, 85, 36, 3, 228, 84, 36, 3, 228, 90, 36, 3, 235, 141, 36, 
-    3, 235, 109, 36, 3, 235, 102, 36, 3, 235, 52, 36, 3, 235, 34, 36, 3, 235, 
-    127, 36, 3, 235, 125, 36, 3, 235, 136, 36, 3, 235, 69, 36, 3, 235, 60, 
-    36, 3, 235, 130, 36, 3, 220, 99, 36, 3, 220, 33, 36, 3, 220, 28, 36, 3, 
-    219, 226, 36, 3, 219, 211, 36, 3, 220, 64, 36, 3, 220, 62, 36, 3, 220, 
-    91, 36, 3, 220, 8, 36, 3, 220, 2, 36, 3, 220, 72, 36, 3, 218, 223, 36, 3, 
-    218, 193, 36, 3, 218, 189, 36, 3, 218, 180, 36, 3, 218, 177, 36, 3, 218, 
-    198, 36, 3, 218, 197, 36, 3, 218, 222, 36, 3, 218, 185, 36, 3, 218, 184, 
-    36, 3, 218, 200, 36, 3, 222, 32, 36, 3, 219, 192, 36, 3, 219, 176, 36, 3, 
-    218, 84, 36, 3, 218, 5, 36, 3, 221, 182, 36, 3, 221, 171, 36, 3, 222, 18, 
-    36, 3, 219, 59, 36, 3, 219, 41, 36, 3, 221, 220, 36, 3, 242, 47, 36, 3, 
-    241, 181, 36, 3, 241, 162, 36, 3, 240, 223, 36, 3, 240, 203, 36, 3, 241, 
-    239, 36, 3, 241, 221, 36, 3, 242, 37, 36, 3, 241, 69, 36, 3, 241, 54, 36, 
-    3, 241, 247, 36, 3, 233, 232, 36, 3, 233, 231, 36, 3, 233, 226, 36, 3, 
-    233, 225, 36, 3, 233, 222, 36, 3, 233, 221, 36, 3, 233, 228, 36, 3, 233, 
-    227, 36, 3, 233, 230, 36, 3, 233, 224, 36, 3, 233, 223, 36, 3, 233, 229, 
-    36, 3, 219, 232, 175, 116, 5, 211, 68, 175, 116, 5, 223, 156, 175, 116, 
-    5, 223, 79, 98, 1, 215, 28, 69, 116, 5, 249, 234, 176, 69, 116, 5, 249, 
-    234, 234, 133, 69, 116, 5, 249, 234, 234, 29, 69, 116, 5, 249, 234, 234, 
-    106, 69, 116, 5, 249, 234, 229, 5, 69, 116, 5, 249, 234, 251, 34, 69, 
-    116, 5, 249, 234, 250, 158, 69, 116, 5, 249, 234, 249, 239, 69, 116, 5, 
-    249, 234, 250, 87, 69, 116, 5, 249, 234, 227, 135, 69, 116, 5, 249, 234, 
-    248, 222, 69, 116, 5, 249, 234, 215, 145, 69, 116, 5, 249, 234, 247, 146, 
-    69, 116, 5, 249, 234, 215, 140, 69, 116, 5, 249, 234, 197, 69, 116, 5, 
-    249, 234, 217, 106, 69, 116, 5, 249, 234, 216, 209, 69, 116, 5, 249, 234, 
-    111, 69, 116, 5, 249, 234, 216, 157, 69, 116, 5, 249, 234, 228, 75, 69, 
-    116, 5, 249, 234, 252, 192, 69, 116, 5, 249, 234, 225, 148, 69, 116, 5, 
-    249, 234, 225, 17, 69, 116, 5, 249, 234, 225, 122, 69, 116, 5, 249, 234, 
-    230, 162, 69, 116, 5, 249, 234, 210, 244, 69, 116, 5, 249, 234, 222, 212, 
-    69, 116, 5, 249, 234, 232, 157, 69, 116, 5, 249, 234, 213, 138, 69, 116, 
-    5, 249, 234, 220, 103, 69, 116, 5, 249, 234, 218, 224, 69, 116, 5, 249, 
-    234, 206, 69, 116, 5, 249, 234, 162, 69, 116, 5, 249, 234, 233, 136, 69, 
-    25, 5, 249, 234, 224, 89, 69, 235, 244, 25, 5, 249, 234, 224, 31, 69, 
-    235, 244, 25, 5, 249, 234, 222, 101, 69, 235, 244, 25, 5, 249, 234, 222, 
-    94, 69, 235, 244, 25, 5, 249, 234, 224, 70, 69, 25, 5, 226, 205, 69, 25, 
-    5, 255, 35, 141, 1, 252, 0, 229, 78, 141, 1, 252, 0, 229, 28, 141, 1, 
-    252, 0, 228, 249, 141, 1, 252, 0, 229, 65, 141, 1, 252, 0, 229, 5, 56, 1, 
-    252, 0, 229, 78, 56, 1, 252, 0, 229, 28, 56, 1, 252, 0, 228, 249, 56, 1, 
-    252, 0, 229, 65, 56, 1, 252, 0, 229, 5, 56, 1, 254, 195, 250, 191, 56, 1, 
-    254, 195, 215, 119, 56, 1, 254, 195, 111, 56, 1, 254, 195, 226, 106, 58, 
-    1, 245, 21, 245, 20, 249, 183, 138, 130, 58, 1, 245, 20, 245, 21, 249, 
-    183, 138, 130, 
+    240, 227, 206, 227, 208, 218, 154, 64, 241, 240, 219, 50, 218, 154, 64, 
+    216, 213, 218, 86, 245, 151, 64, 216, 213, 245, 64, 245, 151, 64, 215, 
+    244, 245, 117, 245, 140, 245, 141, 255, 16, 255, 17, 254, 176, 252, 55, 
+    252, 187, 251, 139, 135, 217, 90, 203, 217, 90, 240, 234, 217, 94, 232, 
+    220, 244, 153, 166, 232, 219, 245, 151, 64, 232, 219, 233, 6, 228, 140, 
+    245, 120, 232, 220, 217, 90, 67, 217, 90, 212, 118, 244, 28, 244, 153, 
+    244, 133, 250, 238, 223, 56, 249, 151, 220, 30, 226, 134, 232, 156, 111, 
+    219, 60, 220, 30, 236, 6, 232, 156, 210, 86, 219, 193, 248, 159, 232, 
+    210, 245, 85, 247, 163, 248, 39, 249, 186, 111, 248, 149, 248, 39, 249, 
+    186, 105, 248, 148, 248, 39, 249, 186, 158, 248, 147, 248, 39, 249, 186, 
+    161, 248, 146, 152, 255, 16, 229, 214, 217, 178, 236, 69, 217, 181, 245, 
+    151, 64, 215, 245, 251, 221, 245, 70, 251, 13, 251, 15, 245, 151, 64, 
+    231, 86, 245, 118, 218, 62, 218, 79, 245, 85, 245, 86, 235, 239, 220, 
+    140, 161, 244, 115, 220, 139, 243, 245, 235, 239, 220, 140, 158, 242, 
+    128, 220, 139, 242, 125, 235, 239, 220, 140, 105, 223, 124, 220, 139, 
+    222, 147, 235, 239, 220, 140, 111, 214, 174, 220, 139, 214, 133, 219, 23, 
+    248, 71, 248, 73, 226, 82, 250, 150, 226, 84, 125, 226, 244, 224, 196, 
+    241, 54, 251, 158, 225, 176, 241, 210, 251, 169, 228, 80, 251, 158, 241, 
+    210, 229, 180, 235, 249, 235, 251, 229, 87, 232, 219, 229, 104, 218, 154, 
+    64, 221, 160, 254, 26, 218, 225, 245, 151, 64, 221, 160, 254, 26, 245, 
+    88, 135, 217, 91, 220, 129, 203, 217, 91, 220, 129, 240, 231, 135, 217, 
+    91, 2, 235, 41, 203, 217, 91, 2, 235, 41, 240, 232, 232, 220, 217, 91, 
+    220, 129, 67, 217, 91, 220, 129, 212, 117, 226, 1, 232, 220, 244, 22, 
+    226, 1, 232, 220, 246, 114, 225, 35, 226, 1, 232, 220, 252, 186, 226, 1, 
+    232, 220, 214, 163, 225, 31, 223, 53, 232, 220, 244, 153, 223, 53, 235, 
+    249, 223, 38, 219, 157, 220, 30, 105, 219, 154, 218, 227, 219, 157, 220, 
+    30, 158, 219, 153, 218, 226, 248, 39, 249, 186, 218, 107, 248, 145, 224, 
+    186, 214, 132, 111, 224, 186, 214, 130, 224, 152, 224, 186, 214, 132, 
+    105, 224, 186, 214, 129, 224, 151, 220, 130, 215, 243, 218, 153, 218, 90, 
+    251, 14, 250, 150, 250, 217, 231, 48, 212, 59, 230, 48, 218, 154, 64, 
+    242, 114, 254, 26, 218, 154, 64, 224, 169, 254, 26, 219, 22, 245, 151, 
+    64, 242, 114, 254, 26, 245, 151, 64, 224, 169, 254, 26, 245, 115, 218, 
+    154, 64, 218, 107, 219, 37, 219, 157, 242, 148, 135, 235, 202, 220, 109, 
+    219, 157, 135, 235, 202, 221, 196, 249, 186, 220, 137, 235, 202, 249, 
+    121, 218, 108, 216, 237, 218, 170, 226, 173, 217, 168, 249, 226, 226, 
+    146, 224, 187, 231, 47, 225, 22, 254, 61, 224, 181, 249, 226, 254, 77, 
+    229, 168, 219, 202, 7, 6, 1, 243, 0, 7, 4, 1, 243, 0, 250, 167, 254, 157, 
+    183, 218, 68, 249, 235, 219, 108, 233, 52, 165, 1, 232, 181, 209, 209, 1, 
+    244, 52, 244, 44, 209, 209, 1, 244, 52, 244, 165, 209, 209, 1, 222, 213, 
+    209, 209, 1, 232, 162, 63, 164, 251, 231, 220, 5, 242, 222, 230, 253, 
+    223, 44, 243, 223, 243, 222, 243, 221, 230, 50, 209, 251, 209, 252, 209, 
+    254, 232, 107, 222, 221, 232, 109, 222, 223, 225, 227, 232, 106, 222, 
+    220, 228, 111, 230, 170, 211, 229, 232, 108, 222, 222, 243, 244, 225, 
+    226, 212, 15, 245, 170, 243, 233, 230, 234, 226, 201, 214, 134, 87, 230, 
+    234, 248, 165, 87, 8, 3, 235, 164, 79, 224, 197, 244, 28, 31, 67, 44, 71, 
+    233, 26, 127, 213, 118, 213, 7, 212, 195, 212, 184, 212, 173, 212, 162, 
+    212, 151, 212, 140, 212, 129, 213, 117, 213, 106, 213, 95, 213, 84, 213, 
+    73, 213, 62, 213, 51, 251, 79, 226, 159, 79, 251, 204, 209, 253, 15, 5, 
+    227, 215, 216, 240, 15, 5, 227, 215, 115, 227, 215, 251, 107, 115, 251, 
+    106, 49, 28, 16, 243, 243, 219, 104, 250, 81, 214, 9, 213, 40, 213, 29, 
+    213, 18, 213, 6, 212, 251, 212, 240, 212, 229, 212, 218, 212, 207, 212, 
+    199, 212, 198, 212, 197, 212, 196, 212, 194, 212, 193, 212, 192, 212, 
+    191, 212, 190, 212, 189, 212, 188, 212, 187, 212, 186, 212, 185, 212, 
+    183, 212, 182, 212, 181, 212, 180, 212, 179, 212, 178, 212, 177, 212, 
+    176, 212, 175, 212, 174, 212, 172, 212, 171, 212, 170, 212, 169, 212, 
+    168, 212, 167, 212, 166, 212, 165, 212, 164, 212, 163, 212, 161, 212, 
+    160, 212, 159, 212, 158, 212, 157, 212, 156, 212, 155, 212, 154, 212, 
+    153, 212, 152, 212, 150, 212, 149, 212, 148, 212, 147, 212, 146, 212, 
+    145, 212, 144, 212, 143, 212, 142, 212, 141, 212, 139, 212, 138, 212, 
+    137, 212, 136, 212, 135, 212, 134, 212, 133, 212, 132, 212, 131, 212, 
+    130, 212, 128, 212, 127, 212, 126, 212, 125, 212, 124, 212, 123, 212, 
+    122, 212, 121, 212, 120, 212, 119, 213, 116, 213, 115, 213, 114, 213, 
+    113, 213, 112, 213, 111, 213, 110, 213, 109, 213, 108, 213, 107, 213, 
+    105, 213, 104, 213, 103, 213, 102, 213, 101, 213, 100, 213, 99, 213, 98, 
+    213, 97, 213, 96, 213, 94, 213, 93, 213, 92, 213, 91, 213, 90, 213, 89, 
+    213, 88, 213, 87, 213, 86, 213, 85, 213, 83, 213, 82, 213, 81, 213, 80, 
+    213, 79, 213, 78, 213, 77, 213, 76, 213, 75, 213, 74, 213, 72, 213, 71, 
+    213, 70, 213, 69, 213, 68, 213, 67, 213, 66, 213, 65, 213, 64, 213, 63, 
+    213, 61, 213, 60, 213, 59, 213, 58, 213, 57, 213, 56, 213, 55, 213, 54, 
+    213, 53, 213, 52, 213, 50, 213, 49, 213, 48, 213, 47, 213, 46, 213, 45, 
+    213, 44, 213, 43, 213, 42, 213, 41, 213, 39, 213, 38, 213, 37, 213, 36, 
+    213, 35, 213, 34, 213, 33, 213, 32, 213, 31, 213, 30, 213, 28, 213, 27, 
+    213, 26, 213, 25, 213, 24, 213, 23, 213, 22, 213, 21, 213, 20, 213, 19, 
+    213, 17, 213, 16, 213, 15, 213, 14, 213, 13, 213, 12, 213, 11, 213, 10, 
+    213, 9, 213, 8, 213, 5, 213, 4, 213, 3, 213, 2, 213, 1, 213, 0, 212, 255, 
+    212, 254, 212, 253, 212, 252, 212, 250, 212, 249, 212, 248, 212, 247, 
+    212, 246, 212, 245, 212, 244, 212, 243, 212, 242, 212, 241, 212, 239, 
+    212, 238, 212, 237, 212, 236, 212, 235, 212, 234, 212, 233, 212, 232, 
+    212, 231, 212, 230, 212, 228, 212, 227, 212, 226, 212, 225, 212, 224, 
+    212, 223, 212, 222, 212, 221, 212, 220, 212, 219, 212, 217, 212, 216, 
+    212, 215, 212, 214, 212, 213, 212, 212, 212, 211, 212, 210, 212, 209, 
+    212, 208, 212, 206, 212, 205, 212, 204, 212, 203, 212, 202, 212, 201, 
+    212, 200, 7, 6, 1, 116, 2, 231, 238, 22, 242, 143, 7, 4, 1, 116, 2, 231, 
+    238, 22, 242, 143, 7, 6, 1, 160, 2, 67, 232, 220, 51, 7, 4, 1, 160, 2, 
+    67, 232, 220, 51, 7, 6, 1, 160, 2, 67, 232, 220, 252, 51, 22, 242, 143, 
+    7, 4, 1, 160, 2, 67, 232, 220, 252, 51, 22, 242, 143, 7, 6, 1, 160, 2, 
+    67, 232, 220, 252, 51, 22, 142, 7, 4, 1, 160, 2, 67, 232, 220, 252, 51, 
+    22, 142, 7, 6, 1, 160, 2, 250, 39, 22, 231, 237, 7, 4, 1, 160, 2, 250, 
+    39, 22, 231, 237, 7, 6, 1, 160, 2, 250, 39, 22, 250, 242, 7, 4, 1, 160, 
+    2, 250, 39, 22, 250, 242, 7, 6, 1, 240, 161, 2, 231, 238, 22, 242, 143, 
+    7, 4, 1, 240, 161, 2, 231, 238, 22, 242, 143, 7, 4, 1, 240, 161, 2, 59, 
+    72, 22, 142, 7, 4, 1, 229, 85, 2, 216, 90, 48, 7, 6, 1, 144, 2, 67, 232, 
+    220, 51, 7, 4, 1, 144, 2, 67, 232, 220, 51, 7, 6, 1, 144, 2, 67, 232, 
+    220, 252, 51, 22, 242, 143, 7, 4, 1, 144, 2, 67, 232, 220, 252, 51, 22, 
+    242, 143, 7, 6, 1, 144, 2, 67, 232, 220, 252, 51, 22, 142, 7, 4, 1, 144, 
+    2, 67, 232, 220, 252, 51, 22, 142, 7, 6, 1, 222, 94, 2, 67, 232, 220, 51, 
+    7, 4, 1, 222, 94, 2, 67, 232, 220, 51, 7, 6, 1, 104, 2, 231, 238, 22, 
+    242, 143, 7, 4, 1, 104, 2, 231, 238, 22, 242, 143, 7, 6, 1, 116, 2, 226, 
+    229, 22, 142, 7, 4, 1, 116, 2, 226, 229, 22, 142, 7, 6, 1, 116, 2, 226, 
+    229, 22, 184, 7, 4, 1, 116, 2, 226, 229, 22, 184, 7, 6, 1, 160, 2, 226, 
+    229, 22, 142, 7, 4, 1, 160, 2, 226, 229, 22, 142, 7, 6, 1, 160, 2, 226, 
+    229, 22, 184, 7, 4, 1, 160, 2, 226, 229, 22, 184, 7, 6, 1, 160, 2, 59, 
+    72, 22, 142, 7, 4, 1, 160, 2, 59, 72, 22, 142, 7, 6, 1, 160, 2, 59, 72, 
+    22, 184, 7, 4, 1, 160, 2, 59, 72, 22, 184, 7, 4, 1, 240, 161, 2, 59, 72, 
+    22, 242, 143, 7, 4, 1, 240, 161, 2, 59, 72, 22, 184, 7, 6, 1, 240, 161, 
+    2, 226, 229, 22, 142, 7, 4, 1, 240, 161, 2, 226, 229, 22, 59, 72, 22, 
+    142, 7, 6, 1, 240, 161, 2, 226, 229, 22, 184, 7, 4, 1, 240, 161, 2, 226, 
+    229, 22, 59, 72, 22, 184, 7, 6, 1, 235, 151, 2, 184, 7, 4, 1, 235, 151, 
+    2, 59, 72, 22, 184, 7, 6, 1, 233, 155, 2, 184, 7, 4, 1, 233, 155, 2, 184, 
+    7, 6, 1, 232, 55, 2, 184, 7, 4, 1, 232, 55, 2, 184, 7, 6, 1, 223, 227, 2, 
+    184, 7, 4, 1, 223, 227, 2, 184, 7, 6, 1, 104, 2, 226, 229, 22, 142, 7, 4, 
+    1, 104, 2, 226, 229, 22, 142, 7, 6, 1, 104, 2, 226, 229, 22, 184, 7, 4, 
+    1, 104, 2, 226, 229, 22, 184, 7, 6, 1, 104, 2, 231, 238, 22, 142, 7, 4, 
+    1, 104, 2, 231, 238, 22, 142, 7, 6, 1, 104, 2, 231, 238, 22, 184, 7, 4, 
+    1, 104, 2, 231, 238, 22, 184, 7, 4, 1, 254, 253, 2, 242, 143, 7, 4, 1, 
+    204, 144, 2, 242, 143, 7, 4, 1, 204, 144, 2, 142, 7, 4, 1, 215, 94, 214, 
+    106, 2, 242, 143, 7, 4, 1, 215, 94, 214, 106, 2, 142, 7, 4, 1, 221, 198, 
+    2, 242, 143, 7, 4, 1, 221, 198, 2, 142, 7, 4, 1, 241, 58, 221, 198, 2, 
+    242, 143, 7, 4, 1, 241, 58, 221, 198, 2, 142, 9, 220, 137, 77, 2, 182, 
+    72, 2, 254, 179, 9, 220, 137, 77, 2, 182, 72, 2, 212, 30, 9, 220, 137, 
+    77, 2, 182, 72, 2, 109, 231, 197, 9, 220, 137, 77, 2, 182, 72, 2, 226, 
+    238, 9, 220, 137, 77, 2, 182, 72, 2, 69, 9, 220, 137, 77, 2, 182, 72, 2, 
+    210, 212, 9, 220, 137, 77, 2, 182, 72, 2, 76, 9, 220, 137, 77, 2, 182, 
+    72, 2, 254, 252, 9, 220, 137, 228, 68, 2, 234, 180, 146, 1, 234, 115, 36, 
+    117, 235, 29, 36, 117, 229, 84, 36, 117, 251, 74, 36, 117, 227, 171, 36, 
+    117, 215, 160, 36, 117, 228, 116, 36, 117, 217, 153, 36, 117, 230, 30, 
+    36, 117, 226, 109, 36, 117, 194, 36, 117, 211, 117, 36, 117, 153, 36, 
+    117, 156, 36, 117, 214, 105, 36, 117, 232, 182, 36, 117, 232, 191, 36, 
+    117, 222, 182, 36, 117, 228, 98, 36, 117, 235, 150, 36, 117, 220, 106, 
+    36, 117, 218, 228, 36, 117, 222, 93, 36, 117, 242, 67, 36, 117, 233, 238, 
+    36, 3, 235, 16, 36, 3, 234, 98, 36, 3, 234, 89, 36, 3, 233, 223, 36, 3, 
+    233, 194, 36, 3, 234, 188, 36, 3, 234, 187, 36, 3, 234, 252, 36, 3, 234, 
+    34, 36, 3, 234, 16, 36, 3, 234, 201, 36, 3, 229, 81, 36, 3, 229, 32, 36, 
+    3, 229, 28, 36, 3, 228, 253, 36, 3, 228, 246, 36, 3, 229, 69, 36, 3, 229, 
+    67, 36, 3, 229, 78, 36, 3, 229, 9, 36, 3, 229, 4, 36, 3, 229, 71, 36, 3, 
+    251, 40, 36, 3, 250, 59, 36, 3, 250, 49, 36, 3, 249, 120, 36, 3, 249, 91, 
+    36, 3, 250, 198, 36, 3, 250, 190, 36, 3, 251, 30, 36, 3, 249, 246, 36, 3, 
+    249, 182, 36, 3, 250, 230, 36, 3, 227, 168, 36, 3, 227, 152, 36, 3, 227, 
+    147, 36, 3, 227, 132, 36, 3, 227, 125, 36, 3, 227, 160, 36, 3, 227, 159, 
+    36, 3, 227, 165, 36, 3, 227, 138, 36, 3, 227, 136, 36, 3, 227, 163, 36, 
+    3, 215, 156, 36, 3, 215, 136, 36, 3, 215, 135, 36, 3, 215, 124, 36, 3, 
+    215, 121, 36, 3, 215, 152, 36, 3, 215, 151, 36, 3, 215, 155, 36, 3, 215, 
+    134, 36, 3, 215, 133, 36, 3, 215, 154, 36, 3, 228, 114, 36, 3, 228, 100, 
+    36, 3, 228, 99, 36, 3, 228, 83, 36, 3, 228, 82, 36, 3, 228, 110, 36, 3, 
+    228, 109, 36, 3, 228, 113, 36, 3, 228, 85, 36, 3, 228, 84, 36, 3, 228, 
+    112, 36, 3, 217, 102, 36, 3, 216, 118, 36, 3, 216, 104, 36, 3, 215, 119, 
+    36, 3, 215, 85, 36, 3, 217, 23, 36, 3, 217, 12, 36, 3, 217, 80, 36, 3, 
+    112, 36, 3, 216, 18, 36, 3, 217, 42, 36, 3, 229, 230, 36, 3, 228, 238, 
+    36, 3, 228, 213, 36, 3, 227, 242, 36, 3, 227, 183, 36, 3, 229, 112, 36, 
+    3, 229, 108, 36, 3, 229, 217, 36, 3, 228, 79, 36, 3, 228, 69, 36, 3, 229, 
+    192, 36, 3, 226, 93, 36, 3, 225, 111, 36, 3, 225, 74, 36, 3, 224, 153, 
+    36, 3, 224, 122, 36, 3, 225, 224, 36, 3, 225, 214, 36, 3, 226, 75, 36, 3, 
+    225, 19, 36, 3, 224, 252, 36, 3, 225, 238, 36, 3, 231, 242, 36, 3, 230, 
+    235, 36, 3, 230, 206, 36, 3, 230, 107, 36, 3, 230, 59, 36, 3, 231, 96, 
+    36, 3, 231, 85, 36, 3, 231, 208, 36, 3, 230, 166, 36, 3, 230, 137, 36, 3, 
+    231, 140, 36, 3, 211, 103, 36, 3, 211, 8, 36, 3, 210, 255, 36, 3, 210, 
+    212, 36, 3, 210, 181, 36, 3, 211, 47, 36, 3, 211, 44, 36, 3, 211, 82, 36, 
+    3, 210, 244, 36, 3, 210, 229, 36, 3, 211, 55, 36, 3, 223, 187, 36, 3, 
+    223, 38, 36, 3, 222, 242, 36, 3, 222, 142, 36, 3, 222, 114, 36, 3, 223, 
+    131, 36, 3, 223, 111, 36, 3, 223, 169, 36, 3, 222, 213, 36, 3, 222, 199, 
+    36, 3, 223, 139, 36, 3, 233, 140, 36, 3, 232, 247, 36, 3, 232, 233, 36, 
+    3, 232, 103, 36, 3, 232, 78, 36, 3, 233, 64, 36, 3, 233, 56, 36, 3, 233, 
+    115, 36, 3, 232, 162, 36, 3, 232, 133, 36, 3, 233, 80, 36, 3, 214, 26, 
+    36, 3, 213, 176, 36, 3, 213, 162, 36, 3, 212, 116, 36, 3, 212, 109, 36, 
+    3, 213, 255, 36, 3, 213, 250, 36, 3, 214, 23, 36, 3, 213, 138, 36, 3, 
+    213, 127, 36, 3, 214, 5, 36, 3, 232, 180, 36, 3, 232, 175, 36, 3, 232, 
+    174, 36, 3, 232, 171, 36, 3, 232, 170, 36, 3, 232, 177, 36, 3, 232, 176, 
+    36, 3, 232, 179, 36, 3, 232, 173, 36, 3, 232, 172, 36, 3, 232, 178, 36, 
+    3, 232, 189, 36, 3, 232, 184, 36, 3, 232, 183, 36, 3, 232, 167, 36, 3, 
+    232, 166, 36, 3, 232, 186, 36, 3, 232, 185, 36, 3, 232, 188, 36, 3, 232, 
+    169, 36, 3, 232, 168, 36, 3, 232, 187, 36, 3, 222, 180, 36, 3, 222, 169, 
+    36, 3, 222, 168, 36, 3, 222, 162, 36, 3, 222, 155, 36, 3, 222, 176, 36, 
+    3, 222, 175, 36, 3, 222, 179, 36, 3, 222, 167, 36, 3, 222, 166, 36, 3, 
+    222, 178, 36, 3, 228, 96, 36, 3, 228, 91, 36, 3, 228, 90, 36, 3, 228, 87, 
+    36, 3, 228, 86, 36, 3, 228, 93, 36, 3, 228, 92, 36, 3, 228, 95, 36, 3, 
+    228, 89, 36, 3, 228, 88, 36, 3, 228, 94, 36, 3, 235, 146, 36, 3, 235, 
+    114, 36, 3, 235, 107, 36, 3, 235, 57, 36, 3, 235, 39, 36, 3, 235, 132, 
+    36, 3, 235, 130, 36, 3, 235, 141, 36, 3, 235, 74, 36, 3, 235, 65, 36, 3, 
+    235, 135, 36, 3, 220, 100, 36, 3, 220, 34, 36, 3, 220, 29, 36, 3, 219, 
+    227, 36, 3, 219, 212, 36, 3, 220, 65, 36, 3, 220, 63, 36, 3, 220, 92, 36, 
+    3, 220, 9, 36, 3, 220, 3, 36, 3, 220, 73, 36, 3, 218, 224, 36, 3, 218, 
+    194, 36, 3, 218, 190, 36, 3, 218, 181, 36, 3, 218, 178, 36, 3, 218, 199, 
+    36, 3, 218, 198, 36, 3, 218, 223, 36, 3, 218, 186, 36, 3, 218, 185, 36, 
+    3, 218, 201, 36, 3, 222, 33, 36, 3, 219, 193, 36, 3, 219, 177, 36, 3, 
+    218, 84, 36, 3, 218, 5, 36, 3, 221, 183, 36, 3, 221, 172, 36, 3, 222, 19, 
+    36, 3, 219, 60, 36, 3, 219, 42, 36, 3, 221, 221, 36, 3, 242, 53, 36, 3, 
+    241, 187, 36, 3, 241, 168, 36, 3, 240, 229, 36, 3, 240, 209, 36, 3, 241, 
+    245, 36, 3, 241, 227, 36, 3, 242, 43, 36, 3, 241, 75, 36, 3, 241, 60, 36, 
+    3, 241, 253, 36, 3, 233, 237, 36, 3, 233, 236, 36, 3, 233, 231, 36, 3, 
+    233, 230, 36, 3, 233, 227, 36, 3, 233, 226, 36, 3, 233, 233, 36, 3, 233, 
+    232, 36, 3, 233, 235, 36, 3, 233, 229, 36, 3, 233, 228, 36, 3, 233, 234, 
+    36, 3, 219, 233, 175, 117, 5, 211, 68, 175, 117, 5, 223, 158, 175, 117, 
+    5, 223, 81, 98, 1, 215, 28, 70, 117, 5, 249, 241, 176, 70, 117, 5, 249, 
+    241, 234, 138, 70, 117, 5, 249, 241, 234, 34, 70, 117, 5, 249, 241, 234, 
+    111, 70, 117, 5, 249, 241, 229, 9, 70, 117, 5, 249, 241, 251, 41, 70, 
+    117, 5, 249, 241, 250, 165, 70, 117, 5, 249, 241, 249, 246, 70, 117, 5, 
+    249, 241, 250, 94, 70, 117, 5, 249, 241, 227, 138, 70, 117, 5, 249, 241, 
+    248, 229, 70, 117, 5, 249, 241, 215, 145, 70, 117, 5, 249, 241, 247, 153, 
+    70, 117, 5, 249, 241, 215, 140, 70, 117, 5, 249, 241, 198, 70, 117, 5, 
+    249, 241, 217, 106, 70, 117, 5, 249, 241, 216, 209, 70, 117, 5, 249, 241, 
+    112, 70, 117, 5, 249, 241, 216, 157, 70, 117, 5, 249, 241, 228, 79, 70, 
+    117, 5, 249, 241, 252, 199, 70, 117, 5, 249, 241, 225, 150, 70, 117, 5, 
+    249, 241, 225, 19, 70, 117, 5, 249, 241, 225, 124, 70, 117, 5, 249, 241, 
+    230, 166, 70, 117, 5, 249, 241, 210, 244, 70, 117, 5, 249, 241, 222, 213, 
+    70, 117, 5, 249, 241, 232, 162, 70, 117, 5, 249, 241, 213, 138, 70, 117, 
+    5, 249, 241, 220, 104, 70, 117, 5, 249, 241, 218, 225, 70, 117, 5, 249, 
+    241, 206, 70, 117, 5, 249, 241, 162, 70, 117, 5, 249, 241, 233, 141, 70, 
+    25, 5, 249, 241, 224, 91, 70, 235, 250, 25, 5, 249, 241, 224, 33, 70, 
+    235, 250, 25, 5, 249, 241, 222, 102, 70, 235, 250, 25, 5, 249, 241, 222, 
+    95, 70, 235, 250, 25, 5, 249, 241, 224, 72, 70, 25, 5, 226, 208, 70, 25, 
+    5, 255, 43, 141, 1, 252, 7, 229, 82, 141, 1, 252, 7, 229, 32, 141, 1, 
+    252, 7, 228, 253, 141, 1, 252, 7, 229, 69, 141, 1, 252, 7, 229, 9, 56, 1, 
+    252, 7, 229, 82, 56, 1, 252, 7, 229, 32, 56, 1, 252, 7, 228, 253, 56, 1, 
+    252, 7, 229, 69, 56, 1, 252, 7, 229, 9, 56, 1, 254, 203, 250, 198, 56, 1, 
+    254, 203, 215, 119, 56, 1, 254, 203, 112, 56, 1, 254, 203, 226, 109, 58, 
+    1, 245, 28, 245, 27, 249, 190, 138, 130, 58, 1, 245, 27, 245, 28, 249, 
+    190, 138, 130, 
 };
 
 static unsigned char phrasebook_offset1[] = {
@@ -14433,2681 +14448,2683 @@
     8647, 0, 0, 0, 0, 0, 8651, 8658, 8666, 8673, 8678, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 8683, 8686, 8690, 8695, 8699, 0, 8703, 8709, 8715, 8718, 
     8725, 8734, 8737, 8740, 8745, 8751, 8755, 8763, 8769, 8775, 8783, 8787, 
-    8792, 8803, 8808, 8812, 8816, 8820, 0, 0, 8823, 8830, 8834, 8840, 8844, 
-    8851, 8857, 8864, 8870, 8876, 8880, 8884, 8890, 8894, 8898, 8902, 8906, 
-    8910, 8914, 8918, 8922, 8926, 8930, 8934, 8938, 8942, 8946, 8950, 8954, 
-    8958, 8966, 8974, 8984, 8993, 9002, 9005, 9009, 9013, 9017, 9021, 9025, 
-    9029, 9033, 9037, 9042, 9046, 9049, 9052, 9055, 9058, 9061, 9064, 9067, 
-    9070, 9074, 9077, 9080, 9085, 9090, 9096, 9099, 9106, 9115, 9120, 9125, 
-    9132, 9137, 9142, 9146, 9150, 9154, 9158, 9162, 9166, 9170, 9174, 9178, 
-    9182, 9187, 9192, 9199, 9205, 9211, 9217, 9222, 9230, 9238, 9243, 9249, 
-    9255, 9261, 9267, 9271, 9275, 9279, 9286, 9296, 9300, 9304, 9308, 9314, 
-    9322, 9326, 9330, 9337, 9341, 9345, 9349, 9356, 9363, 9375, 9379, 9383, 
-    9387, 9397, 9406, 9410, 9418, 9425, 9432, 9441, 9452, 9460, 9464, 9473, 
-    9484, 9492, 9505, 9513, 9521, 9529, 9537, 9543, 9552, 9559, 9563, 9571, 
-    9575, 9582, 9590, 9594, 9600, 9607, 9614, 9618, 9626, 9630, 9637, 9641, 
-    9649, 9653, 9661, 9669, 9676, 9684, 9692, 9699, 9705, 9709, 9716, 9724, 
-    9730, 9737, 9744, 9750, 9759, 9767, 9774, 9780, 9784, 9787, 9791, 9797, 
-    9805, 9809, 9815, 9821, 9828, 9835, 9838, 9845, 9850, 9858, 9863, 9867, 
-    9880, 9893, 9899, 9906, 9911, 9917, 9922, 9928, 9938, 9945, 9954, 9964, 
-    9970, 9975, 9980, 9984, 9988, 9993, 9998, 10004, 10012, 10020, 10031, 
-    10036, 10045, 10054, 10061, 10067, 10073, 10079, 10085, 10091, 10097, 
-    10103, 10109, 10115, 10122, 10129, 10136, 10142, 10150, 10159, 10165, 
-    10172, 10179, 10184, 10189, 10193, 10200, 10207, 10216, 10225, 10228, 
-    10233, 10238, 0, 10243, 10247, 10251, 10257, 10261, 10265, 10271, 10275, 
-    10283, 10287, 10291, 10295, 10299, 10303, 10309, 10313, 10319, 10323, 
-    10327, 10331, 10335, 10339, 10344, 10347, 10351, 10357, 10361, 10365, 
-    10369, 10373, 10377, 10383, 10389, 10395, 10399, 10403, 10408, 10412, 
-    10416, 10421, 10425, 10429, 10436, 10443, 10447, 10451, 10456, 10460, 
-    10464, 10467, 10472, 10475, 10478, 10483, 10488, 10492, 10496, 10502, 
-    10508, 10511, 0, 0, 10514, 10520, 10526, 10532, 10542, 10554, 10566, 
-    10583, 10595, 10606, 10614, 10621, 10632, 10647, 10658, 10664, 10673, 
-    10681, 10693, 10703, 10711, 10723, 10730, 10738, 10750, 10756, 10762, 
-    10770, 10778, 10786, 10792, 10802, 10809, 10819, 10829, 10842, 10856, 
-    10870, 10880, 10891, 10902, 10915, 10928, 10942, 10954, 10966, 10979, 
-    10992, 11004, 11017, 11026, 11034, 11039, 11044, 11049, 11054, 11059, 
-    11064, 11069, 11074, 11079, 11084, 11089, 11094, 11099, 11104, 11109, 
-    11114, 11119, 11124, 11129, 11134, 11139, 11144, 11149, 11154, 11159, 
-    11164, 11169, 11174, 11179, 11184, 11189, 11194, 11198, 11203, 11208, 
-    11213, 11218, 11223, 11227, 11231, 11235, 11239, 11243, 11247, 11251, 
-    11255, 11259, 11263, 11267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    11272, 11277, 11281, 11285, 11289, 11293, 11297, 11301, 11305, 11309, 
-    11313, 11317, 11322, 11326, 11330, 11334, 11339, 11343, 11348, 11353, 
-    11358, 11362, 11367, 11372, 11377, 11382, 11386, 11391, 11395, 11400, 
-    11405, 11409, 11414, 11421, 11425, 11430, 11434, 11438, 11443, 11447, 
-    11454, 11461, 11468, 11474, 11482, 11490, 11499, 11507, 11514, 11521, 
-    11529, 11535, 11541, 11547, 11553, 11560, 11565, 11569, 11574, 0, 0, 0, 
-    0, 0, 11578, 11583, 11588, 11593, 11598, 11603, 11608, 11613, 11618, 
-    11623, 11628, 11633, 11638, 11643, 11648, 11653, 11658, 11663, 11668, 
-    11673, 11678, 11683, 11688, 11693, 11698, 11703, 11708, 11716, 11723, 
-    11729, 11734, 11742, 11749, 11755, 11762, 11768, 11773, 11780, 11787, 
-    11793, 11798, 11803, 11809, 11814, 11819, 11825, 0, 0, 11830, 11836, 
-    11842, 11848, 11854, 11860, 11866, 11871, 11879, 11885, 11891, 11897, 
-    11903, 11909, 11917, 0, 11923, 11928, 11933, 11938, 11943, 11948, 11953, 
-    11958, 11963, 11968, 11973, 11978, 11983, 11988, 11993, 11998, 12003, 
-    12008, 12013, 12018, 12023, 12028, 12033, 12038, 12043, 12048, 12053, 
-    12058, 0, 0, 12063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    8792, 8803, 8808, 8812, 8816, 8820, 8823, 0, 8826, 8833, 8837, 8843, 
+    8847, 8854, 8860, 8867, 8873, 8879, 8883, 8887, 8893, 8897, 8901, 8905, 
+    8909, 8913, 8917, 8921, 8925, 8929, 8933, 8937, 8941, 8945, 8949, 8953, 
+    8957, 8961, 8969, 8977, 8987, 8996, 9005, 9008, 9012, 9016, 9020, 9024, 
+    9028, 9032, 9036, 9040, 9045, 9049, 9052, 9055, 9058, 9061, 9064, 9067, 
+    9070, 9073, 9077, 9080, 9083, 9088, 9093, 9099, 9102, 9109, 9118, 9123, 
+    9128, 9135, 9140, 9145, 9149, 9153, 9157, 9161, 9165, 9169, 9173, 9177, 
+    9181, 9185, 9190, 9195, 9202, 9208, 9214, 9220, 9225, 9233, 9241, 9246, 
+    9252, 9258, 9264, 9270, 9274, 9278, 9282, 9289, 9299, 9303, 9307, 9311, 
+    9317, 9325, 9329, 9333, 9340, 9344, 9348, 9352, 9359, 9366, 9378, 9382, 
+    9386, 9390, 9400, 9409, 9413, 9421, 9428, 9435, 9444, 9455, 9463, 9467, 
+    9476, 9487, 9495, 9508, 9516, 9524, 9532, 9540, 9546, 9555, 9562, 9566, 
+    9574, 9578, 9585, 9593, 9597, 9603, 9610, 9617, 9621, 9629, 9633, 9640, 
+    9644, 9652, 9656, 9664, 9672, 9679, 9687, 9695, 9702, 9708, 9712, 9719, 
+    9727, 9733, 9740, 9747, 9753, 9762, 9770, 9777, 9783, 9787, 9790, 9794, 
+    9800, 9808, 9812, 9818, 9824, 9831, 9838, 9841, 9848, 9853, 9861, 9866, 
+    9870, 9883, 9896, 9902, 9909, 9914, 9920, 9925, 9931, 9941, 9948, 9957, 
+    9967, 9973, 9978, 9983, 9987, 9991, 9996, 10001, 10007, 10015, 10023, 
+    10034, 10039, 10048, 10057, 10064, 10070, 10076, 10082, 10088, 10094, 
+    10100, 10106, 10112, 10118, 10125, 10132, 10139, 10145, 10153, 10162, 
+    10168, 10175, 10182, 10187, 10192, 10196, 10203, 10210, 10219, 10228, 
+    10231, 10236, 10241, 0, 10246, 10250, 10254, 10260, 10264, 10268, 10274, 
+    10278, 10286, 10290, 10294, 10298, 10302, 10306, 10312, 10316, 10322, 
+    10326, 10330, 10334, 10338, 10342, 10347, 10350, 10354, 10360, 10364, 
+    10368, 10372, 10376, 10380, 10386, 10392, 10398, 10402, 10406, 10411, 
+    10415, 10419, 10424, 10428, 10432, 10439, 10446, 10450, 10454, 10459, 
+    10463, 10467, 10470, 10475, 10478, 10481, 10486, 10491, 10495, 10499, 
+    10505, 10511, 10514, 0, 0, 10517, 10523, 10529, 10535, 10545, 10557, 
+    10569, 10586, 10598, 10609, 10617, 10624, 10635, 10650, 10661, 10667, 
+    10676, 10684, 10696, 10706, 10714, 10726, 10733, 10741, 10753, 10759, 
+    10765, 10773, 10781, 10789, 10795, 10805, 10812, 10822, 10832, 10845, 
+    10859, 10873, 10883, 10894, 10905, 10918, 10931, 10945, 10957, 10969, 
+    10982, 10995, 11007, 11020, 11029, 11037, 11042, 11047, 11052, 11057, 
+    11062, 11067, 11072, 11077, 11082, 11087, 11092, 11097, 11102, 11107, 
+    11112, 11117, 11122, 11127, 11132, 11137, 11142, 11147, 11152, 11157, 
+    11162, 11167, 11172, 11177, 11182, 11187, 11192, 11197, 11201, 11206, 
+    11211, 11216, 11221, 11226, 11230, 11234, 11238, 11242, 11246, 11250, 
+    11254, 11258, 11262, 11266, 11270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 11275, 11280, 11284, 11288, 11292, 11296, 11300, 11304, 11308, 11312, 
+    11316, 11320, 11325, 11329, 11333, 11337, 11342, 11346, 11351, 11356, 
+    11361, 11365, 11370, 11375, 11380, 11385, 11389, 11394, 11398, 11403, 
+    11408, 11412, 11417, 11424, 11428, 11433, 11437, 11441, 11446, 11450, 
+    11457, 11464, 11471, 11477, 11485, 11493, 11502, 11510, 11517, 11524, 
+    11532, 11538, 11544, 11550, 11556, 11563, 11568, 11572, 11577, 0, 0, 0, 
+    0, 0, 11581, 11586, 11591, 11596, 11601, 11606, 11611, 11616, 11621, 
+    11626, 11631, 11636, 11641, 11646, 11651, 11656, 11661, 11666, 11671, 
+    11676, 11681, 11686, 11691, 11696, 11701, 11706, 11711, 11719, 11726, 
+    11732, 11737, 11745, 11752, 11758, 11765, 11771, 11776, 11783, 11790, 
+    11796, 11801, 11806, 11812, 11817, 11822, 11828, 0, 0, 11833, 11839, 
+    11845, 11851, 11857, 11863, 11869, 11874, 11882, 11888, 11894, 11900, 
+    11906, 11912, 11920, 0, 11926, 11931, 11936, 11941, 11946, 11951, 11956, 
+    11961, 11966, 11971, 11976, 11981, 11986, 11991, 11996, 12001, 12006, 
+    12011, 12016, 12021, 12026, 12031, 12036, 12041, 12046, 12051, 12056, 
+    12061, 0, 0, 12066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    12067, 0, 12076, 12083, 12091, 12103, 12110, 12117, 12124, 12135, 12146, 
-    12153, 12161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    12070, 0, 12079, 12086, 12094, 12106, 12113, 12120, 12127, 12138, 12149, 
+    12156, 12164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12167, 12172, 12177, 12182, 12187, 
-    12192, 12197, 12202, 12207, 12212, 12217, 12222, 12227, 12231, 12235, 
-    12239, 12244, 12250, 12256, 12262, 12267, 12272, 12277, 12282, 12288, 
-    12297, 12305, 0, 12311, 12317, 12321, 12325, 12329, 12334, 12337, 12341, 
-    12344, 12348, 12351, 12355, 12359, 12363, 12368, 12373, 12376, 12380, 
-    12385, 12390, 12393, 12397, 12400, 12404, 12408, 12412, 12416, 12420, 
-    12424, 12428, 12432, 12436, 12440, 12444, 12448, 12452, 12456, 12460, 
-    12464, 12468, 12472, 12475, 12479, 12482, 12486, 12490, 12494, 12497, 
-    12500, 12503, 12507, 12511, 12515, 12519, 12523, 12527, 12531, 12534, 
-    12537, 12542, 12547, 12551, 12555, 12560, 12564, 12569, 12573, 12578, 
-    12583, 12589, 12595, 12601, 12605, 12610, 12616, 12622, 12626, 12631, 
-    12635, 12641, 12646, 12649, 12655, 12661, 12666, 12671, 12678, 12683, 
-    12688, 12692, 12696, 12700, 12704, 12708, 12712, 12716, 12720, 12725, 
-    12730, 12735, 12741, 12744, 12748, 12752, 12755, 12758, 12761, 12764, 
-    12767, 12770, 12773, 12776, 12779, 12783, 12790, 12795, 12799, 12803, 
-    12807, 12811, 0, 12815, 12819, 12823, 12827, 12831, 12837, 12841, 0, 
-    12845, 12849, 12853, 0, 12857, 12860, 12864, 12867, 12871, 12874, 12878, 
-    12882, 0, 0, 12886, 12889, 0, 0, 12893, 12896, 12900, 12903, 12907, 
-    12911, 12915, 12919, 12923, 12927, 12931, 12935, 12939, 12943, 12947, 
-    12951, 12955, 12959, 12963, 12967, 12971, 12975, 0, 12978, 12981, 12985, 
-    12989, 12993, 12996, 12999, 0, 13002, 0, 0, 0, 13006, 13010, 13014, 
-    13017, 0, 0, 13020, 13024, 13028, 13033, 13037, 13042, 13046, 13051, 
-    13056, 0, 0, 13062, 13066, 0, 0, 13071, 13075, 13080, 13084, 0, 0, 0, 0, 
-    0, 0, 0, 0, 13090, 0, 0, 0, 0, 13096, 13100, 0, 13104, 13108, 13113, 
-    13118, 13123, 0, 0, 13129, 13133, 13136, 13139, 13142, 13145, 13148, 
-    13151, 13154, 13157, 13160, 13169, 13178, 13182, 13186, 13192, 13198, 
-    13204, 13210, 13224, 13231, 13234, 0, 0, 0, 0, 0, 13238, 13244, 13248, 0, 
-    13252, 13255, 13259, 13262, 13266, 13269, 0, 0, 0, 0, 13273, 13277, 0, 0, 
-    13281, 13285, 13289, 13292, 13296, 13300, 13304, 13308, 13312, 13316, 
-    13320, 13324, 13328, 13332, 13336, 13340, 13344, 13348, 13352, 13356, 
-    13360, 13364, 0, 13367, 13370, 13374, 13378, 13382, 13385, 13388, 0, 
-    13391, 13395, 0, 13399, 13403, 0, 13407, 13410, 0, 0, 13413, 0, 13417, 
-    13422, 13426, 13431, 13435, 0, 0, 0, 0, 13440, 13445, 0, 0, 13450, 13455, 
-    13460, 0, 0, 0, 13464, 0, 0, 0, 0, 0, 0, 0, 13468, 13472, 13476, 13480, 
-    0, 13484, 0, 0, 0, 0, 0, 0, 0, 13488, 13492, 13495, 13498, 13501, 13504, 
-    13507, 13510, 13513, 13516, 13519, 13522, 13525, 13528, 13531, 13536, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13540, 13544, 13548, 0, 13552, 13555, 
-    13559, 13562, 13566, 13569, 13573, 13577, 13581, 0, 13586, 13589, 13593, 
-    0, 13598, 13601, 13605, 13608, 13612, 13616, 13620, 13624, 13628, 13632, 
-    13636, 13640, 13644, 13648, 13652, 13656, 13660, 13664, 13668, 13672, 
-    13676, 13680, 0, 13683, 13686, 13690, 13694, 13698, 13701, 13704, 0, 
-    13707, 13711, 0, 13715, 13719, 13723, 13727, 13730, 0, 0, 13733, 13737, 
-    13741, 13746, 13750, 13755, 13759, 13764, 13769, 13775, 0, 13781, 13785, 
-    13790, 0, 13796, 13800, 13805, 0, 0, 13809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 13812, 13817, 13822, 13827, 0, 0, 13833, 13837, 13840, 
-    13843, 13846, 13849, 13852, 13855, 13858, 13861, 13864, 13868, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13872, 13876, 13880, 0, 13884, 13887, 
-    13891, 13894, 13898, 13901, 13905, 13909, 0, 0, 13913, 13916, 0, 0, 
-    13920, 13923, 13927, 13930, 13934, 13938, 13942, 13946, 13950, 13954, 
-    13958, 13962, 13966, 13970, 13974, 13978, 13982, 13986, 13990, 13994, 
-    13998, 14002, 0, 14005, 14008, 14012, 14016, 14020, 14023, 14026, 0, 
-    14029, 14033, 0, 14037, 14041, 14045, 14049, 14052, 0, 0, 14055, 14059, 
-    14063, 14068, 14072, 14077, 14081, 14086, 14091, 0, 0, 14097, 14101, 0, 
-    0, 14106, 14110, 14115, 0, 0, 0, 0, 0, 0, 0, 0, 14119, 14125, 0, 0, 0, 0, 
-    14131, 14135, 0, 14139, 14143, 14148, 14153, 14158, 0, 0, 14164, 14168, 
-    14171, 14174, 14177, 14180, 14183, 14186, 14189, 14192, 14195, 14198, 
-    14202, 14208, 14214, 14220, 14226, 14232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    14238, 14242, 0, 14246, 14249, 14253, 14256, 14260, 14263, 0, 0, 0, 
-    14267, 14270, 14274, 0, 14278, 14281, 14285, 14289, 0, 0, 0, 14292, 
-    14296, 0, 14300, 0, 14304, 14308, 0, 0, 0, 14312, 14316, 0, 0, 0, 14320, 
-    14323, 14327, 0, 0, 0, 14330, 14333, 14336, 14339, 14343, 14347, 14351, 
-    14355, 14359, 14363, 14367, 14370, 0, 0, 0, 0, 14373, 14378, 14382, 
-    14387, 14391, 0, 0, 0, 14396, 14400, 14405, 0, 14410, 14414, 14419, 
-    14424, 0, 0, 14428, 0, 0, 0, 0, 0, 0, 14431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 14437, 14441, 14444, 14447, 14450, 14453, 14456, 14459, 
-    14462, 14465, 14468, 14472, 14477, 14482, 14486, 14490, 14494, 14498, 
-    14502, 14507, 14511, 0, 0, 0, 0, 0, 0, 14514, 14518, 14522, 0, 14526, 
-    14529, 14533, 14536, 14540, 14543, 14547, 14551, 0, 14555, 14558, 14562, 
-    0, 14566, 14569, 14573, 14577, 14580, 14584, 14588, 14592, 14596, 14600, 
-    14604, 14608, 14612, 14616, 14620, 14624, 14628, 14632, 14636, 14640, 
-    14644, 14648, 14652, 0, 14655, 14658, 14662, 14666, 14670, 14673, 14676, 
-    14679, 14683, 14687, 0, 14691, 14695, 14699, 14703, 14706, 0, 0, 0, 
-    14709, 14713, 14718, 14722, 14727, 14731, 14736, 14741, 0, 14747, 14751, 
-    14756, 0, 14761, 14765, 14770, 14775, 0, 0, 0, 0, 0, 0, 0, 14779, 14783, 
-    0, 14789, 14793, 0, 0, 0, 0, 0, 0, 14797, 14802, 14807, 14812, 0, 0, 
-    14818, 14822, 14825, 14828, 14831, 14834, 14837, 14840, 14843, 14846, 0, 
-    0, 0, 0, 0, 0, 0, 0, 14849, 14862, 14874, 14886, 14898, 14910, 14922, 
-    14934, 0, 0, 14938, 14942, 0, 14946, 14949, 14953, 14956, 14960, 14963, 
-    14967, 14971, 0, 14975, 14978, 14982, 0, 14986, 14989, 14993, 14997, 
-    15000, 15004, 15008, 15012, 15016, 15020, 15024, 15028, 15032, 15036, 
-    15040, 15044, 15048, 15052, 15056, 15060, 15064, 15068, 15072, 0, 15075, 
-    15078, 15082, 15086, 15090, 15093, 15096, 15099, 15103, 15107, 0, 15111, 
-    15115, 15119, 15123, 15126, 0, 0, 15129, 15133, 15137, 15142, 15146, 
-    15151, 15155, 15160, 15165, 0, 15171, 15175, 15180, 0, 15185, 15189, 
-    15194, 15199, 0, 0, 0, 0, 0, 0, 0, 15203, 15207, 0, 0, 0, 0, 0, 0, 0, 
-    15213, 0, 15217, 15222, 15227, 15232, 0, 0, 15238, 15242, 15245, 15248, 
-    15251, 15254, 15257, 15260, 15263, 15266, 0, 15269, 15273, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15277, 15281, 0, 15285, 15288, 15292, 
-    15295, 15299, 15302, 15306, 15310, 0, 15314, 15317, 15321, 0, 15325, 
-    15328, 15332, 15336, 15339, 15343, 15347, 15351, 15355, 15359, 15363, 
-    15367, 15371, 15375, 15379, 15383, 15387, 15391, 15395, 15399, 15403, 
-    15407, 15411, 15414, 15418, 15421, 15425, 15429, 15433, 15436, 15439, 
-    15442, 15446, 15450, 15454, 15458, 15462, 15466, 15470, 15473, 15476, 0, 
-    0, 15480, 15484, 15489, 15493, 15498, 15502, 15507, 15512, 0, 15518, 
-    15522, 15527, 0, 15532, 15536, 15541, 15546, 15550, 0, 0, 0, 0, 0, 0, 0, 
-    0, 15555, 0, 0, 0, 0, 0, 0, 0, 0, 15561, 15566, 15571, 15576, 0, 0, 
-    15582, 15586, 15589, 15592, 15595, 15598, 15601, 15604, 15607, 15610, 
-    15613, 15617, 15622, 15627, 15633, 15639, 0, 0, 0, 15645, 15649, 15655, 
-    15661, 15667, 15672, 15678, 0, 0, 15684, 15688, 0, 15692, 15696, 15700, 
-    15704, 15708, 15712, 15716, 15720, 15724, 15728, 15732, 15736, 15740, 
-    15744, 15748, 15752, 15756, 15760, 0, 0, 0, 15764, 15770, 15776, 15782, 
-    15788, 15794, 15800, 15806, 15812, 15818, 15824, 15830, 15838, 15844, 
-    15850, 15856, 15862, 15868, 15874, 15880, 15886, 15892, 15898, 15904, 0, 
-    15910, 15916, 15922, 15928, 15934, 15940, 15944, 15950, 15954, 0, 15958, 
-    0, 0, 15964, 15968, 15974, 15980, 15986, 15990, 15996, 0, 0, 0, 16000, 0, 
-    0, 0, 0, 16004, 16009, 16016, 16023, 16030, 16037, 0, 16044, 0, 16051, 
-    16056, 16061, 16068, 16075, 16084, 16095, 16104, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16109, 16116, 16123, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 16128, 16134, 16140, 16146, 16152, 16158, 16164, 16170, 
-    16176, 16182, 16188, 16194, 16200, 16206, 16212, 16218, 16224, 16230, 
-    16236, 16242, 16248, 16254, 16260, 16266, 16272, 16278, 16284, 16290, 
-    16296, 16302, 16308, 16314, 16320, 16325, 16331, 16337, 16341, 16347, 
-    16351, 16357, 16363, 16369, 16375, 16381, 16387, 16392, 16398, 16402, 
-    16407, 16413, 16419, 16425, 16430, 16436, 16442, 16448, 16453, 16459, 0, 
-    0, 0, 0, 16463, 16469, 16474, 16480, 16485, 16493, 16501, 16505, 16509, 
-    16513, 16519, 16525, 16531, 16537, 16541, 16545, 16549, 16553, 16557, 
-    16560, 16563, 16566, 16569, 16572, 16575, 16578, 16581, 16584, 16588, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12170, 12175, 12180, 12185, 12190, 
+    12195, 12200, 12205, 12210, 12215, 12220, 12225, 12230, 12234, 12238, 
+    12242, 12247, 12253, 12259, 12265, 12270, 12275, 12280, 12285, 12291, 
+    12300, 12308, 0, 12314, 12320, 12324, 12328, 12332, 12337, 12340, 12344, 
+    12347, 12351, 12354, 12358, 12362, 12366, 12371, 12376, 12379, 12383, 
+    12388, 12393, 12396, 12400, 12403, 12407, 12411, 12415, 12419, 12423, 
+    12427, 12431, 12435, 12439, 12443, 12447, 12451, 12455, 12459, 12463, 
+    12467, 12471, 12475, 12478, 12482, 12485, 12489, 12493, 12497, 12500, 
+    12503, 12506, 12510, 12514, 12518, 12522, 12526, 12530, 12534, 12537, 
+    12540, 12545, 12550, 12554, 12558, 12563, 12567, 12572, 12576, 12581, 
+    12586, 12592, 12598, 12604, 12608, 12613, 12619, 12625, 12629, 12634, 
+    12638, 12644, 12649, 12652, 12658, 12664, 12669, 12674, 12681, 12686, 
+    12691, 12695, 12699, 12703, 12707, 12711, 12715, 12719, 12723, 12728, 
+    12733, 12738, 12744, 12747, 12751, 12755, 12758, 12761, 12764, 12767, 
+    12770, 12773, 12776, 12779, 12782, 12786, 12793, 12798, 12802, 12806, 
+    12810, 12814, 0, 12818, 12822, 12826, 12830, 12834, 12840, 12844, 0, 
+    12848, 12852, 12856, 0, 12860, 12863, 12867, 12870, 12874, 12877, 12881, 
+    12885, 0, 0, 12889, 12892, 0, 0, 12896, 12899, 12903, 12906, 12910, 
+    12914, 12918, 12922, 12926, 12930, 12934, 12938, 12942, 12946, 12950, 
+    12954, 12958, 12962, 12966, 12970, 12974, 12978, 0, 12981, 12984, 12988, 
+    12992, 12996, 12999, 13002, 0, 13005, 0, 0, 0, 13009, 13013, 13017, 
+    13020, 0, 0, 13023, 13027, 13031, 13036, 13040, 13045, 13049, 13054, 
+    13059, 0, 0, 13065, 13069, 0, 0, 13074, 13078, 13083, 13087, 0, 0, 0, 0, 
+    0, 0, 0, 0, 13093, 0, 0, 0, 0, 13099, 13103, 0, 13107, 13111, 13116, 
+    13121, 13126, 0, 0, 13132, 13136, 13139, 13142, 13145, 13148, 13151, 
+    13154, 13157, 13160, 13163, 13172, 13181, 13185, 13189, 13195, 13201, 
+    13207, 13213, 13227, 13234, 13237, 0, 0, 0, 0, 0, 13241, 13247, 13251, 0, 
+    13255, 13258, 13262, 13265, 13269, 13272, 0, 0, 0, 0, 13276, 13280, 0, 0, 
+    13284, 13288, 13292, 13295, 13299, 13303, 13307, 13311, 13315, 13319, 
+    13323, 13327, 13331, 13335, 13339, 13343, 13347, 13351, 13355, 13359, 
+    13363, 13367, 0, 13370, 13373, 13377, 13381, 13385, 13388, 13391, 0, 
+    13394, 13398, 0, 13402, 13406, 0, 13410, 13413, 0, 0, 13416, 0, 13420, 
+    13425, 13429, 13434, 13438, 0, 0, 0, 0, 13443, 13448, 0, 0, 13453, 13458, 
+    13463, 0, 0, 0, 13467, 0, 0, 0, 0, 0, 0, 0, 13471, 13475, 13479, 13483, 
+    0, 13487, 0, 0, 0, 0, 0, 0, 0, 13491, 13495, 13498, 13501, 13504, 13507, 
+    13510, 13513, 13516, 13519, 13522, 13525, 13528, 13531, 13534, 13539, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13543, 13547, 13551, 0, 13555, 13558, 
+    13562, 13565, 13569, 13572, 13576, 13580, 13584, 0, 13589, 13592, 13596, 
+    0, 13601, 13604, 13608, 13611, 13615, 13619, 13623, 13627, 13631, 13635, 
+    13639, 13643, 13647, 13651, 13655, 13659, 13663, 13667, 13671, 13675, 
+    13679, 13683, 0, 13686, 13689, 13693, 13697, 13701, 13704, 13707, 0, 
+    13710, 13714, 0, 13718, 13722, 13726, 13730, 13733, 0, 0, 13736, 13740, 
+    13744, 13749, 13753, 13758, 13762, 13767, 13772, 13778, 0, 13784, 13788, 
+    13793, 0, 13799, 13803, 13808, 0, 0, 13812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 13815, 13820, 13825, 13830, 0, 0, 13836, 13840, 13843, 
+    13846, 13849, 13852, 13855, 13858, 13861, 13864, 13867, 13871, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13875, 13879, 13883, 0, 13887, 13890, 
+    13894, 13897, 13901, 13904, 13908, 13912, 0, 0, 13916, 13919, 0, 0, 
+    13923, 13926, 13930, 13933, 13937, 13941, 13945, 13949, 13953, 13957, 
+    13961, 13965, 13969, 13973, 13977, 13981, 13985, 13989, 13993, 13997, 
+    14001, 14005, 0, 14008, 14011, 14015, 14019, 14023, 14026, 14029, 0, 
+    14032, 14036, 0, 14040, 14044, 14048, 14052, 14055, 0, 0, 14058, 14062, 
+    14066, 14071, 14075, 14080, 14084, 14089, 14094, 0, 0, 14100, 14104, 0, 
+    0, 14109, 14113, 14118, 0, 0, 0, 0, 0, 0, 0, 0, 14122, 14128, 0, 0, 0, 0, 
+    14134, 14138, 0, 14142, 14146, 14151, 14156, 14161, 0, 0, 14167, 14171, 
+    14174, 14177, 14180, 14183, 14186, 14189, 14192, 14195, 14198, 14201, 
+    14205, 14211, 14217, 14223, 14229, 14235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    14241, 14245, 0, 14249, 14252, 14256, 14259, 14263, 14266, 0, 0, 0, 
+    14270, 14273, 14277, 0, 14281, 14284, 14288, 14292, 0, 0, 0, 14295, 
+    14299, 0, 14303, 0, 14307, 14311, 0, 0, 0, 14315, 14319, 0, 0, 0, 14323, 
+    14326, 14330, 0, 0, 0, 14333, 14336, 14339, 14342, 14346, 14350, 14354, 
+    14358, 14362, 14366, 14370, 14373, 0, 0, 0, 0, 14376, 14381, 14385, 
+    14390, 14394, 0, 0, 0, 14399, 14403, 14408, 0, 14413, 14417, 14422, 
+    14427, 0, 0, 14431, 0, 0, 0, 0, 0, 0, 14434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 14440, 14444, 14447, 14450, 14453, 14456, 14459, 14462, 
+    14465, 14468, 14471, 14475, 14480, 14485, 14489, 14493, 14497, 14501, 
+    14505, 14510, 14514, 0, 0, 0, 0, 0, 0, 14517, 14521, 14525, 0, 14529, 
+    14532, 14536, 14539, 14543, 14546, 14550, 14554, 0, 14558, 14561, 14565, 
+    0, 14569, 14572, 14576, 14580, 14583, 14587, 14591, 14595, 14599, 14603, 
+    14607, 14611, 14615, 14619, 14623, 14627, 14631, 14635, 14639, 14643, 
+    14647, 14651, 14655, 0, 14658, 14661, 14665, 14669, 14673, 14676, 14679, 
+    14682, 14686, 14690, 0, 14694, 14698, 14702, 14706, 14709, 0, 0, 0, 
+    14712, 14716, 14721, 14725, 14730, 14734, 14739, 14744, 0, 14750, 14754, 
+    14759, 0, 14764, 14768, 14773, 14778, 0, 0, 0, 0, 0, 0, 0, 14782, 14786, 
+    0, 14792, 14796, 0, 0, 0, 0, 0, 0, 14800, 14805, 14810, 14815, 0, 0, 
+    14821, 14825, 14828, 14831, 14834, 14837, 14840, 14843, 14846, 14849, 0, 
+    0, 0, 0, 0, 0, 0, 0, 14852, 14865, 14877, 14889, 14901, 14913, 14925, 
+    14937, 0, 0, 14941, 14945, 0, 14949, 14952, 14956, 14959, 14963, 14966, 
+    14970, 14974, 0, 14978, 14981, 14985, 0, 14989, 14992, 14996, 15000, 
+    15003, 15007, 15011, 15015, 15019, 15023, 15027, 15031, 15035, 15039, 
+    15043, 15047, 15051, 15055, 15059, 15063, 15067, 15071, 15075, 0, 15078, 
+    15081, 15085, 15089, 15093, 15096, 15099, 15102, 15106, 15110, 0, 15114, 
+    15118, 15122, 15126, 15129, 0, 0, 15132, 15136, 15140, 15145, 15149, 
+    15154, 15158, 15163, 15168, 0, 15174, 15178, 15183, 0, 15188, 15192, 
+    15197, 15202, 0, 0, 0, 0, 0, 0, 0, 15206, 15210, 0, 0, 0, 0, 0, 0, 0, 
+    15216, 0, 15220, 15225, 15230, 15235, 0, 0, 15241, 15245, 15248, 15251, 
+    15254, 15257, 15260, 15263, 15266, 15269, 0, 15272, 15276, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15280, 15284, 0, 15288, 15291, 15295, 
+    15298, 15302, 15305, 15309, 15313, 0, 15317, 15320, 15324, 0, 15328, 
+    15331, 15335, 15339, 15342, 15346, 15350, 15354, 15358, 15362, 15366, 
+    15370, 15374, 15378, 15382, 15386, 15390, 15394, 15398, 15402, 15406, 
+    15410, 15414, 15417, 15421, 15424, 15428, 15432, 15436, 15439, 15442, 
+    15445, 15449, 15453, 15457, 15461, 15465, 15469, 15473, 15476, 15479, 0, 
+    0, 15483, 15487, 15492, 15496, 15501, 15505, 15510, 15515, 0, 15521, 
+    15525, 15530, 0, 15535, 15539, 15544, 15549, 15553, 0, 0, 0, 0, 0, 0, 0, 
+    0, 15558, 0, 0, 0, 0, 0, 0, 0, 0, 15564, 15569, 15574, 15579, 0, 0, 
+    15585, 15589, 15592, 15595, 15598, 15601, 15604, 15607, 15610, 15613, 
+    15616, 15620, 15625, 15630, 15636, 15642, 0, 0, 0, 15648, 15652, 15658, 
+    15664, 15670, 15675, 15681, 0, 0, 15687, 15691, 0, 15695, 15699, 15703, 
+    15707, 15711, 15715, 15719, 15723, 15727, 15731, 15735, 15739, 15743, 
+    15747, 15751, 15755, 15759, 15763, 0, 0, 0, 15767, 15773, 15779, 15785, 
+    15791, 15797, 15803, 15809, 15815, 15821, 15827, 15833, 15841, 15847, 
+    15853, 15859, 15865, 15871, 15877, 15883, 15889, 15895, 15901, 15907, 0, 
+    15913, 15919, 15925, 15931, 15937, 15943, 15947, 15953, 15957, 0, 15961, 
+    0, 0, 15967, 15971, 15977, 15983, 15989, 15993, 15999, 0, 0, 0, 16003, 0, 
+    0, 0, 0, 16007, 16012, 16019, 16026, 16033, 16040, 0, 16047, 0, 16054, 
+    16059, 16064, 16071, 16078, 16087, 16098, 16107, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16112, 16119, 16126, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 16131, 16137, 16143, 16149, 16155, 16161, 16167, 16173, 
+    16179, 16185, 16191, 16197, 16203, 16209, 16215, 16221, 16227, 16233, 
+    16239, 16245, 16251, 16257, 16263, 16269, 16275, 16281, 16287, 16293, 
+    16299, 16305, 16311, 16317, 16323, 16328, 16334, 16340, 16344, 16350, 
+    16354, 16360, 16366, 16372, 16378, 16384, 16390, 16395, 16401, 16405, 
+    16410, 16416, 16422, 16428, 16433, 16439, 16445, 16451, 16456, 16462, 0, 
+    0, 0, 0, 16466, 16472, 16477, 16483, 16488, 16496, 16504, 16508, 16512, 
+    16516, 16522, 16528, 16534, 16540, 16544, 16548, 16552, 16556, 16560, 
+    16563, 16566, 16569, 16572, 16575, 16578, 16581, 16584, 16587, 16591, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16592, 16597, 0, 16604, 0, 0, 16611, 
-    16616, 0, 16621, 0, 0, 16628, 0, 0, 0, 0, 0, 0, 16633, 16638, 16642, 
-    16649, 0, 16656, 16661, 16666, 16671, 16678, 16685, 16692, 0, 16699, 
-    16704, 16709, 0, 16716, 0, 16723, 0, 0, 16728, 16735, 0, 16742, 16746, 
-    16753, 16757, 16762, 16770, 16776, 16782, 16787, 16793, 16799, 16805, 
-    16810, 0, 16816, 16824, 16831, 0, 0, 16838, 16843, 16849, 16854, 16860, 
-    0, 16866, 0, 16872, 16879, 16886, 16893, 16900, 16905, 0, 0, 16909, 
-    16914, 16918, 16922, 16926, 16930, 16934, 16938, 16942, 16946, 0, 0, 
-    16950, 16956, 16962, 16969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16976, 16980, 16991, 
-    17006, 17021, 17031, 17042, 17055, 17066, 17072, 17080, 17090, 17096, 
-    17104, 17108, 17114, 17120, 17128, 17138, 17146, 17159, 17165, 17173, 
-    17181, 17193, 17200, 17208, 17216, 17224, 17232, 17240, 17248, 17258, 
-    17262, 17265, 17268, 17271, 17274, 17277, 17280, 17283, 17286, 17289, 
-    17293, 17297, 17301, 17305, 17309, 17313, 17317, 17321, 17325, 17330, 
-    17336, 17346, 17360, 17370, 17376, 17382, 17390, 17398, 17406, 17414, 
-    17420, 17426, 17429, 17433, 17437, 17441, 17445, 17449, 17453, 0, 17457, 
-    17461, 17465, 17469, 17473, 17477, 17481, 17485, 17489, 17493, 17497, 
-    17500, 17503, 17507, 17511, 17515, 17518, 17522, 17526, 17530, 17534, 
-    17538, 17542, 17546, 17550, 17553, 17556, 17560, 17564, 17568, 17571, 
-    17574, 17577, 17581, 17586, 17590, 0, 0, 0, 0, 17594, 17599, 17603, 
-    17608, 17612, 17617, 17622, 17628, 17633, 17639, 17643, 17648, 17652, 
-    17657, 17667, 17673, 17679, 17686, 17696, 17702, 17706, 17710, 17716, 
-    17722, 17730, 17736, 17744, 17752, 17760, 17770, 17778, 17788, 17793, 
-    17799, 17805, 17811, 17817, 17823, 17829, 0, 17835, 17841, 17847, 17853, 
-    17859, 17865, 17871, 17877, 17883, 17889, 17895, 17900, 17905, 17911, 
-    17917, 17923, 17928, 17934, 17940, 17946, 17952, 17958, 17964, 17970, 
-    17976, 17981, 17986, 17992, 17998, 18004, 18009, 18014, 18019, 18025, 
-    18033, 18040, 0, 18047, 18054, 18067, 18074, 18081, 18089, 18097, 18103, 
-    18109, 18115, 18125, 18130, 18136, 18146, 18156, 0, 18166, 18176, 18184, 
-    18196, 18208, 18214, 18228, 18243, 18248, 18253, 18261, 18269, 18277, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16595, 16600, 0, 16607, 0, 0, 16614, 
+    16619, 0, 16624, 0, 0, 16631, 0, 0, 0, 0, 0, 0, 16636, 16641, 16645, 
+    16652, 0, 16659, 16664, 16669, 16674, 16681, 16688, 16695, 0, 16702, 
+    16707, 16712, 0, 16719, 0, 16726, 0, 0, 16731, 16738, 0, 16745, 16749, 
+    16756, 16760, 16765, 16773, 16779, 16785, 16790, 16796, 16802, 16808, 
+    16813, 0, 16819, 16827, 16834, 0, 0, 16841, 16846, 16852, 16857, 16863, 
+    0, 16869, 0, 16875, 16882, 16889, 16896, 16903, 16908, 0, 0, 16912, 
+    16917, 16921, 16925, 16929, 16933, 16937, 16941, 16945, 16949, 0, 0, 
+    16953, 16959, 16965, 16972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16979, 16983, 16994, 
+    17009, 17024, 17034, 17045, 17058, 17069, 17075, 17083, 17093, 17099, 
+    17107, 17111, 17117, 17123, 17131, 17141, 17149, 17162, 17168, 17176, 
+    17184, 17196, 17203, 17211, 17219, 17227, 17235, 17243, 17251, 17261, 
+    17265, 17268, 17271, 17274, 17277, 17280, 17283, 17286, 17289, 17292, 
+    17296, 17300, 17304, 17308, 17312, 17316, 17320, 17324, 17328, 17333, 
+    17339, 17349, 17363, 17373, 17379, 17385, 17393, 17401, 17409, 17417, 
+    17423, 17429, 17432, 17436, 17440, 17444, 17448, 17452, 17456, 0, 17460, 
+    17464, 17468, 17472, 17476, 17480, 17484, 17488, 17492, 17496, 17500, 
+    17503, 17506, 17510, 17514, 17518, 17521, 17525, 17529, 17533, 17537, 
+    17541, 17545, 17549, 17553, 17556, 17559, 17563, 17567, 17571, 17574, 
+    17577, 17580, 17584, 17589, 17593, 0, 0, 0, 0, 17597, 17602, 17606, 
+    17611, 17615, 17620, 17625, 17631, 17636, 17642, 17646, 17651, 17655, 
+    17660, 17670, 17676, 17682, 17689, 17699, 17705, 17709, 17713, 17719, 
+    17725, 17733, 17739, 17747, 17755, 17763, 17773, 17781, 17791, 17796, 
+    17802, 17808, 17814, 17820, 17826, 17832, 0, 17838, 17844, 17850, 17856, 
+    17862, 17868, 17874, 17880, 17886, 17892, 17898, 17903, 17908, 17914, 
+    17920, 17926, 17931, 17937, 17943, 17949, 17955, 17961, 17967, 17973, 
+    17979, 17984, 17989, 17995, 18001, 18007, 18012, 18017, 18022, 18028, 
+    18036, 18043, 0, 18050, 18057, 18070, 18077, 18084, 18092, 18100, 18106, 
+    18112, 18118, 18128, 18133, 18139, 18149, 18159, 0, 18169, 18179, 18187, 
+    18199, 18211, 18217, 18231, 18246, 18251, 18256, 18264, 18272, 18280, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18285, 18288, 18292, 18296, 18300, 
-    18304, 18308, 18312, 18316, 18320, 18324, 18328, 18332, 18336, 18340, 
-    18344, 18348, 18352, 18356, 18360, 18364, 18367, 18370, 18374, 18378, 
-    18382, 18385, 18388, 18391, 18395, 18399, 18402, 18405, 18409, 18412, 
-    18417, 18420, 18424, 18427, 18431, 18434, 18439, 18442, 18446, 18453, 
-    18458, 18462, 18467, 18471, 18476, 18480, 18485, 18492, 18498, 18503, 
-    18507, 18511, 18515, 18519, 18523, 18528, 18533, 18539, 18544, 18549, 
-    18553, 18556, 18559, 18562, 18565, 18568, 18571, 18574, 18577, 18580, 
-    18586, 18590, 18594, 18598, 18602, 18606, 18610, 18614, 18618, 18623, 
-    18627, 18632, 18637, 18643, 18648, 18654, 18660, 18666, 18672, 18678, 
-    18685, 18692, 18700, 18708, 18717, 18726, 18737, 18747, 18757, 18768, 
-    18779, 18789, 18799, 18809, 18819, 18829, 18839, 18849, 18859, 18867, 
-    18874, 18880, 18887, 18892, 18898, 18904, 18910, 18916, 18922, 18928, 
-    18933, 18939, 18945, 18951, 18957, 18962, 18970, 18977, 18983, 18990, 
-    18998, 19004, 19010, 19016, 19022, 19030, 19038, 19048, 19056, 19064, 
-    19070, 19075, 19080, 19085, 19090, 19095, 19100, 19105, 19110, 19115, 
-    19121, 19127, 19133, 19140, 19145, 19151, 19156, 19161, 19166, 19171, 
-    19176, 19181, 19186, 19191, 19196, 19201, 19206, 19211, 19216, 19221, 
-    19226, 19231, 19236, 19241, 19246, 19251, 19256, 19261, 19266, 19271, 
-    19276, 19281, 19286, 19291, 19296, 19301, 19306, 19311, 19316, 19321, 
-    19326, 19331, 19336, 0, 19341, 0, 0, 0, 0, 0, 19346, 0, 0, 19351, 19355, 
-    19359, 19363, 19367, 19371, 19375, 19379, 19383, 19387, 19391, 19395, 
-    19399, 19403, 19407, 19411, 19415, 19419, 19423, 19427, 19431, 19435, 
-    19439, 19443, 19447, 19451, 19455, 19459, 19463, 19467, 19471, 19475, 
-    19479, 19483, 19487, 19491, 19495, 19499, 19503, 19507, 19511, 19515, 
-    19521, 19525, 19530, 19535, 19539, 19544, 19549, 19553, 19557, 19561, 
-    19565, 19569, 19573, 19577, 19581, 19585, 19589, 19593, 19597, 19601, 
-    19605, 19609, 19613, 19617, 19621, 19625, 19629, 19633, 19637, 19641, 
-    19645, 19649, 19653, 19657, 19661, 19665, 19669, 19673, 19677, 19681, 
-    19685, 19689, 19693, 19697, 19701, 19705, 19709, 19713, 19717, 19721, 
-    19725, 19729, 19733, 19737, 19741, 19745, 19749, 19753, 19757, 19761, 
-    19765, 19769, 19773, 19777, 19781, 19785, 19789, 19793, 19797, 19801, 
-    19805, 19809, 19813, 19817, 19821, 19825, 19829, 19833, 19837, 19841, 
-    19845, 19849, 19853, 19857, 19861, 19865, 19869, 19873, 19877, 19881, 
-    19885, 19889, 19893, 19897, 19901, 19905, 19909, 19913, 19917, 19921, 
-    19925, 19929, 19933, 19937, 19940, 19944, 19947, 19951, 19955, 19958, 
-    19962, 19966, 19969, 19973, 19977, 19981, 19985, 19988, 19992, 19996, 
-    20000, 20004, 20008, 20012, 20015, 20019, 20023, 20027, 20031, 20035, 
-    20039, 20043, 20047, 20051, 20055, 20059, 20063, 20067, 20071, 20075, 
-    20079, 20083, 20087, 20091, 20095, 20099, 20103, 20107, 20111, 20115, 
-    20119, 20123, 20127, 20131, 20135, 20139, 20143, 20147, 20151, 20155, 
-    20159, 20163, 20167, 20171, 20175, 20179, 20183, 20187, 20191, 20195, 
-    20199, 20203, 20207, 20211, 20215, 20219, 20223, 20227, 20231, 20235, 
-    20239, 20243, 20247, 20251, 20255, 20259, 20263, 20267, 20271, 20275, 
-    20279, 20283, 20287, 20291, 20295, 20299, 20303, 20307, 20311, 20315, 
-    20319, 20323, 20327, 20331, 20335, 20339, 20343, 20347, 20351, 20355, 
-    20359, 20363, 20367, 20371, 20375, 20379, 20383, 20387, 20391, 20395, 
-    20399, 20403, 20407, 20411, 20415, 20419, 20423, 20427, 20431, 20435, 
-    20439, 20443, 20447, 20451, 20455, 20459, 20463, 20467, 20471, 20475, 
-    20479, 20483, 20487, 20491, 20495, 20499, 20503, 20507, 20511, 20515, 
-    20519, 20523, 20527, 20531, 20535, 20539, 20543, 20547, 20551, 20555, 
-    20559, 20563, 20567, 20570, 20574, 20578, 20582, 20586, 20590, 20594, 
-    20598, 20602, 20606, 20610, 20614, 20618, 20622, 20626, 20630, 20634, 
-    20638, 20642, 20646, 20650, 20654, 20658, 20662, 20665, 20669, 20673, 
-    20677, 20681, 20685, 20689, 20693, 20697, 20701, 20705, 20709, 20713, 
-    20717, 20721, 20725, 20728, 20732, 20736, 20740, 20744, 20748, 20752, 
-    20756, 20759, 20763, 20767, 20771, 20775, 20779, 20783, 20787, 20791, 
-    20795, 20799, 20803, 20807, 20811, 20815, 20819, 20823, 20827, 20831, 
-    20835, 20839, 20843, 20847, 20851, 0, 20855, 20859, 20863, 20867, 0, 0, 
-    20871, 20875, 20879, 20883, 20887, 20891, 20895, 0, 20899, 0, 20903, 
-    20907, 20911, 20915, 0, 0, 20919, 20923, 20927, 20931, 20935, 20939, 
-    20943, 20947, 20951, 20955, 20959, 20963, 20967, 20971, 20975, 20979, 
-    20983, 20987, 20991, 20995, 20999, 21003, 21007, 21010, 21014, 21018, 
-    21022, 21026, 21030, 21034, 21038, 21042, 21046, 21050, 21054, 21058, 
-    21062, 21066, 21070, 21074, 21078, 0, 21082, 21086, 21090, 21094, 0, 0, 
-    21098, 21101, 21105, 21109, 21113, 21117, 21121, 21125, 21129, 21133, 
-    21137, 21141, 21145, 21149, 21153, 21157, 21161, 21166, 21171, 21176, 
-    21182, 21188, 21193, 21198, 21204, 21207, 21211, 21215, 21219, 21223, 
-    21227, 21231, 21235, 0, 21239, 21243, 21247, 21251, 0, 0, 21255, 21259, 
-    21263, 21267, 21271, 21275, 21279, 0, 21283, 0, 21287, 21291, 21295, 
-    21299, 0, 0, 21303, 21307, 21311, 21315, 21319, 21323, 21327, 21331, 
-    21335, 21340, 21345, 21350, 21356, 21362, 21367, 0, 21372, 21376, 21380, 
-    21384, 21388, 21392, 21396, 21400, 21404, 21408, 21412, 21416, 21420, 
-    21424, 21428, 21432, 21436, 21439, 21443, 21447, 21451, 21455, 21459, 
-    21463, 21467, 21471, 21475, 21479, 21483, 21487, 21491, 21495, 21499, 
-    21503, 21507, 21511, 21515, 21519, 21523, 21527, 21531, 21535, 21539, 
-    21543, 21547, 21551, 21555, 21559, 21563, 21567, 21571, 21575, 21579, 
-    21583, 21587, 21591, 21595, 0, 21599, 21603, 21607, 21611, 0, 0, 21615, 
-    21619, 21623, 21627, 21631, 21635, 21639, 21643, 21647, 21651, 21655, 
-    21659, 21663, 21667, 21671, 21675, 21679, 21683, 21687, 21691, 21695, 
-    21699, 21703, 21707, 21711, 21715, 21719, 21723, 21727, 21731, 21735, 
-    21739, 21743, 21747, 21751, 21755, 21759, 21763, 21767, 21771, 21775, 
-    21779, 21783, 21787, 21791, 21795, 21799, 21803, 21807, 21811, 21815, 
-    21819, 21823, 21827, 21831, 21835, 21839, 21842, 21846, 21850, 21854, 
-    21858, 21862, 21866, 21870, 21874, 21878, 0, 0, 21882, 21891, 21897, 
-    21902, 21906, 21909, 21914, 21917, 21920, 21923, 21928, 21932, 21937, 
-    21940, 21943, 21946, 21949, 21952, 21955, 21958, 21961, 21964, 21968, 
-    21972, 21976, 21980, 21984, 21988, 21992, 21996, 22000, 22004, 0, 0, 0, 
-    22010, 22016, 22020, 22024, 22028, 22034, 22038, 22042, 22046, 22052, 
-    22056, 22060, 22064, 22070, 22074, 22078, 22082, 22088, 22094, 22100, 
-    22108, 22114, 22120, 22126, 22132, 22138, 0, 0, 0, 0, 0, 0, 22144, 22147, 
-    22150, 22153, 22156, 22159, 22163, 22167, 22170, 22174, 22178, 22182, 
-    22186, 22190, 22193, 22197, 22201, 22205, 22209, 22213, 22217, 22221, 
-    22225, 22229, 22233, 22237, 22240, 22244, 22248, 22252, 22256, 22259, 
-    22263, 22267, 22271, 22275, 22279, 22283, 22287, 22291, 22295, 22299, 
-    22303, 22307, 22311, 22314, 22318, 22322, 22326, 22330, 22334, 22338, 
-    22342, 22346, 22350, 22354, 22358, 22362, 22366, 22370, 22374, 22378, 
-    22382, 22386, 22390, 22394, 22398, 22402, 22406, 22410, 22414, 22418, 
-    22422, 22426, 22430, 22434, 22438, 22442, 22446, 22450, 22453, 22457, 
-    22461, 22465, 22469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22473, 22477, 
-    22480, 22484, 22487, 22491, 22494, 22498, 22504, 22509, 22513, 22516, 
-    22520, 22524, 22529, 22533, 22538, 22542, 22547, 22551, 22556, 22560, 
-    22565, 22571, 22575, 22580, 22584, 22589, 22595, 22599, 22605, 22611, 
-    22615, 22620, 22628, 22636, 22643, 22648, 22653, 22662, 22669, 22676, 
-    22681, 22687, 22691, 22695, 22699, 22703, 22707, 22711, 22715, 22719, 
-    22723, 22727, 22733, 22738, 22743, 22746, 22750, 22754, 22759, 22763, 
-    22768, 22772, 22777, 22781, 22786, 22790, 22795, 22799, 22804, 22808, 
-    22813, 22819, 22823, 22828, 22833, 22837, 22841, 22845, 22849, 22852, 
-    22856, 22862, 22867, 22872, 22876, 22880, 22884, 22889, 22893, 22898, 
-    22902, 22907, 22910, 22914, 22918, 22923, 22927, 22932, 22936, 22941, 
-    22947, 22951, 22955, 22959, 22963, 22967, 22971, 22975, 22979, 22983, 
-    22987, 22991, 22997, 23000, 23004, 23008, 23013, 23017, 23022, 23026, 
-    23031, 23035, 23040, 23044, 23049, 23053, 23058, 23062, 23067, 23073, 
-    23077, 23081, 23087, 23093, 23099, 23105, 23109, 23113, 23117, 23121, 
-    23125, 23129, 23135, 23139, 23143, 23147, 23152, 23156, 23161, 23165, 
-    23170, 23174, 23179, 23183, 23188, 23192, 23197, 23201, 23206, 23212, 
-    23216, 23222, 23226, 23230, 23234, 23238, 23242, 23246, 23252, 23255, 
-    23259, 23263, 23268, 23272, 23277, 23281, 23286, 23290, 23295, 23299, 
-    23304, 23308, 23313, 23317, 23322, 23328, 23331, 23335, 23339, 23344, 
-    23349, 23353, 23357, 23361, 23365, 23369, 23373, 23379, 23382, 23386, 
-    23390, 23395, 23399, 23404, 23408, 23413, 23419, 23423, 23428, 23432, 
-    23436, 23440, 23444, 23448, 23452, 23456, 23462, 23466, 23470, 23474, 
-    23479, 23483, 23488, 23492, 23497, 23501, 23506, 23510, 23515, 23519, 
-    23524, 23528, 23533, 23536, 23540, 23544, 23548, 23552, 23556, 23560, 
-    23564, 23568, 23574, 23577, 23581, 23585, 23590, 23594, 23599, 23603, 
-    23608, 23612, 23617, 23621, 23626, 23630, 23635, 23639, 23644, 23650, 
-    23654, 23660, 23664, 23670, 23676, 23682, 23688, 23694, 23700, 23706, 
-    23712, 23716, 23720, 23724, 23728, 23732, 23736, 23740, 23744, 23749, 
-    23753, 23758, 23762, 23767, 23771, 23776, 23780, 23785, 23789, 23794, 
-    23798, 23803, 23807, 23811, 23815, 23819, 23823, 23827, 23831, 23837, 
-    23840, 23844, 23848, 23853, 23857, 23862, 23866, 23871, 23875, 23880, 
-    23884, 23889, 23893, 23898, 23902, 23907, 23913, 23917, 23923, 23928, 
-    23934, 23938, 23944, 23949, 23953, 23957, 23961, 23965, 23969, 23974, 
-    23977, 23981, 23986, 23990, 23995, 23998, 24002, 24006, 24010, 24014, 
-    24018, 24022, 24026, 24030, 24034, 24038, 24042, 24047, 24051, 24055, 
-    24061, 24065, 24071, 24075, 24081, 24085, 24089, 24093, 24097, 24101, 
-    24106, 24110, 24114, 24118, 24122, 24126, 24130, 24134, 24138, 24142, 
-    24146, 24152, 24158, 24164, 24170, 24176, 24181, 24187, 24193, 24199, 
-    24203, 24207, 24211, 24215, 24219, 24223, 24227, 24231, 24235, 24239, 
-    24243, 24247, 24251, 24256, 24261, 24266, 24270, 24274, 24278, 24282, 
-    24286, 24290, 24294, 24298, 24302, 24306, 24312, 24318, 24324, 24330, 
-    24336, 24342, 24348, 24354, 24360, 24364, 24368, 24372, 24376, 24380, 
-    24384, 24388, 24394, 24400, 24406, 24412, 24418, 24424, 24430, 24436, 
-    24442, 24447, 24452, 24457, 24462, 24468, 24474, 24480, 24486, 24492, 
-    24498, 24504, 24509, 24515, 24521, 24527, 24532, 24538, 24544, 24550, 
-    24555, 24560, 24565, 24570, 24575, 24580, 24585, 24590, 24595, 24600, 
-    24605, 24610, 24614, 24619, 24624, 24629, 24634, 24639, 24644, 24649, 
-    24654, 24659, 24664, 24669, 24674, 24679, 24684, 24689, 24694, 24699, 
-    24704, 24709, 24714, 24719, 24724, 24729, 24734, 24739, 24744, 24749, 
-    24754, 24759, 24763, 24768, 24773, 24778, 24783, 24788, 24793, 24798, 
-    24803, 24808, 24813, 24818, 24823, 24828, 24833, 24838, 24843, 24848, 
-    24853, 24858, 24863, 24868, 24873, 24878, 24883, 24888, 24892, 24897, 
-    24902, 24907, 24912, 24917, 24921, 24926, 24931, 24936, 24941, 24946, 
-    24950, 24955, 24961, 24966, 24971, 24976, 24981, 24987, 24992, 24997, 
-    25002, 25007, 25012, 25017, 25022, 25027, 25032, 25037, 25042, 25047, 
-    25052, 25057, 25062, 25067, 25072, 25077, 25082, 25087, 25092, 25097, 
-    25102, 25107, 25112, 25117, 25122, 25127, 25132, 25137, 25142, 25147, 
-    25152, 25157, 25162, 25167, 25172, 25177, 25182, 25187, 25192, 25197, 
-    25202, 25207, 25213, 25218, 25223, 25228, 25233, 25238, 25243, 25248, 
-    25253, 25258, 25263, 25268, 25272, 25277, 25282, 25287, 25292, 25297, 
-    25302, 25307, 25312, 25317, 25322, 25327, 25332, 25337, 25342, 25347, 
-    25352, 25357, 25362, 25367, 25372, 25377, 25382, 25387, 25392, 25397, 
-    25402, 25408, 25412, 25416, 25420, 25424, 25428, 25432, 25436, 25440, 
-    25446, 25452, 25458, 25464, 25470, 25476, 25482, 25489, 25495, 25500, 
-    25505, 25510, 25515, 25520, 25525, 25530, 25535, 25540, 25545, 25550, 
-    25555, 25560, 25565, 25570, 25575, 25580, 25585, 25590, 25595, 25600, 
-    25605, 25610, 25615, 25620, 25625, 25630, 25635, 0, 0, 0, 25642, 25652, 
-    25656, 25663, 25667, 25671, 25675, 25683, 25687, 25692, 25697, 25702, 
-    25706, 25711, 25716, 25719, 25723, 25727, 25736, 25740, 25744, 25750, 
-    25754, 25758, 25766, 25770, 25778, 25784, 25790, 25796, 25802, 25812, 
-    25818, 25822, 25831, 25834, 25840, 25844, 25850, 25855, 25861, 25869, 
-    25875, 25881, 25889, 25895, 25899, 25903, 25913, 25919, 25923, 25933, 
-    25939, 25943, 25947, 25954, 25961, 25966, 25971, 25980, 25984, 25988, 
-    25992, 26000, 26007, 26011, 26015, 26019, 26023, 26027, 26031, 26035, 
-    26039, 26043, 26047, 26051, 26056, 26061, 26066, 26070, 26074, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26078, 26082, 26086, 26090, 26094, 
-    26099, 26104, 26109, 26114, 26118, 26122, 26127, 26131, 0, 26135, 26140, 
-    26145, 26149, 26153, 26158, 26163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    26168, 26172, 26176, 26180, 26184, 26189, 26194, 26199, 26204, 26208, 
-    26212, 26217, 26221, 26225, 26229, 26234, 26239, 26243, 26247, 26252, 
-    26257, 26262, 26268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26273, 26277, 26281, 
-    26285, 26289, 26294, 26299, 26304, 26309, 26313, 26317, 26322, 26326, 
-    26330, 26334, 26339, 26344, 26348, 26352, 26357, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 26362, 26366, 26370, 26374, 26378, 26383, 26388, 26393, 
-    26398, 26402, 26406, 26411, 26415, 0, 26419, 26424, 26429, 0, 26433, 
-    26438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26443, 26446, 26450, 26454, 
-    26458, 26462, 26466, 26470, 26474, 26478, 26482, 26486, 26490, 26494, 
-    26498, 26502, 26506, 26510, 26513, 26517, 26521, 26525, 26529, 26533, 
-    26537, 26541, 26545, 26549, 26553, 26557, 26561, 26565, 26568, 26571, 
-    26575, 26579, 26585, 26591, 26597, 26603, 26609, 26615, 26621, 26627, 
-    26633, 26639, 26645, 26651, 26657, 26663, 26672, 26681, 26687, 26693, 
-    26699, 26704, 26708, 26713, 26718, 26723, 26727, 26732, 26737, 26742, 
-    26746, 26751, 26755, 26760, 26765, 26770, 26775, 26779, 26783, 26787, 
-    26791, 26795, 26799, 26803, 26807, 26811, 26815, 26821, 26825, 26829, 
-    26833, 26837, 26841, 26849, 26855, 26859, 26865, 26869, 26875, 26879, 0, 
-    0, 26883, 26887, 26890, 26893, 26896, 26899, 26902, 26905, 26908, 26911, 
-    0, 0, 0, 0, 0, 0, 26914, 26922, 26930, 26938, 26946, 26954, 26962, 26970, 
-    26978, 26986, 0, 0, 0, 0, 0, 0, 26994, 26997, 27000, 27003, 27008, 27011, 
-    27016, 27023, 27031, 27036, 27043, 27046, 27053, 27060, 27067, 0, 27071, 
-    27075, 27078, 27081, 27084, 27087, 27090, 27093, 27096, 27099, 0, 0, 0, 
-    0, 0, 0, 27102, 27105, 27108, 27111, 27114, 27117, 27121, 27125, 27129, 
-    27132, 27136, 27140, 27143, 27147, 27151, 27154, 27158, 27161, 27165, 
-    27169, 27173, 27177, 27181, 27184, 27187, 27191, 27195, 27198, 27202, 
-    27206, 27210, 27214, 27218, 27222, 27226, 27230, 27237, 27242, 27247, 
-    27252, 27257, 27263, 27269, 27275, 27281, 27286, 27292, 27298, 27303, 
-    27309, 27315, 27321, 27327, 27333, 27338, 27344, 27349, 27355, 27361, 
-    27367, 27373, 27379, 27384, 27389, 27395, 27401, 27406, 27412, 27417, 
-    27423, 27428, 27433, 27439, 27445, 27451, 27457, 27463, 27469, 27475, 
-    27481, 27487, 27493, 27499, 27505, 27510, 27515, 27520, 27526, 0, 0, 0, 
-    0, 0, 0, 0, 0, 27532, 27541, 27550, 27558, 27566, 27576, 27584, 27593, 
-    27600, 27607, 27614, 27622, 27630, 27638, 27646, 27654, 27662, 27670, 
-    27678, 27685, 27693, 27701, 27709, 27717, 27725, 27735, 27745, 27755, 
-    27765, 27775, 27785, 27795, 27805, 27815, 27825, 27835, 27845, 27855, 
-    27865, 27873, 27881, 27891, 27899, 0, 0, 0, 0, 0, 27909, 27913, 27917, 
-    27921, 27925, 27929, 27933, 27937, 27941, 27945, 27949, 27953, 27957, 
-    27961, 27965, 27969, 27973, 27977, 27981, 27985, 27989, 27993, 27997, 
-    28001, 28007, 28011, 28017, 28021, 28027, 28031, 28037, 28041, 28045, 
-    28049, 28053, 28057, 28061, 28067, 28073, 28079, 28085, 28090, 28096, 
-    28102, 28108, 28114, 28120, 28126, 28133, 28139, 28144, 28149, 28153, 
-    28157, 28161, 28165, 28169, 28173, 28177, 28183, 28189, 28195, 28200, 
-    28207, 28212, 28217, 28223, 28228, 28235, 28242, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 28249, 28255, 28259, 28264, 28269, 28274, 28279, 28284, 28289, 
-    28294, 28299, 28304, 28309, 28314, 28319, 28324, 28328, 28332, 28337, 
-    28342, 28347, 28351, 28355, 28359, 28364, 28369, 28374, 28379, 28383, 0, 
-    0, 0, 28387, 28392, 28397, 28402, 28408, 28414, 28420, 28426, 28431, 
-    28436, 28442, 28448, 0, 0, 0, 0, 28455, 28460, 28466, 28472, 28478, 
-    28483, 28488, 28493, 28498, 28504, 28509, 28514, 0, 0, 0, 0, 28519, 0, 0, 
-    0, 28524, 28529, 28534, 28539, 28543, 28547, 28551, 28555, 28559, 28563, 
-    28567, 28571, 28575, 28580, 28586, 28592, 28598, 28603, 28608, 28614, 
-    28620, 28626, 28631, 28637, 28642, 28648, 28654, 28659, 28665, 28671, 
-    28677, 28682, 28687, 28692, 28698, 28704, 28709, 28715, 28720, 28726, 
-    28731, 28737, 0, 0, 28743, 28749, 28755, 28761, 28767, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 28773, 28780, 28787, 28793, 28800, 28807, 28813, 28820, 
-    28827, 28834, 28840, 28846, 28853, 28859, 28865, 28872, 28879, 28885, 
-    28892, 28899, 28905, 28911, 28918, 28924, 28930, 28937, 28943, 28950, 
-    28957, 28964, 28971, 28978, 28985, 28991, 28998, 29005, 29011, 29018, 
-    29025, 29032, 29039, 29046, 29053, 29060, 0, 0, 0, 0, 29067, 29075, 
-    29082, 29089, 29095, 29102, 29108, 29115, 29121, 29128, 29135, 29142, 
-    29149, 29156, 29163, 29170, 29177, 29184, 29191, 29198, 29205, 29211, 
-    29218, 29225, 29232, 29238, 0, 0, 0, 0, 0, 0, 29244, 29250, 29255, 29260, 
-    29265, 29270, 29275, 29280, 29285, 29290, 29295, 0, 0, 0, 29301, 29307, 
-    29313, 29317, 29323, 29329, 29335, 29341, 29347, 29353, 29359, 29365, 
-    29371, 29377, 29383, 29389, 29395, 29401, 29407, 29411, 29417, 29423, 
-    29429, 29435, 29441, 29447, 29453, 29459, 29465, 29471, 29477, 29483, 
-    29489, 29495, 29501, 29505, 29510, 29515, 29520, 29524, 29529, 29533, 
-    29538, 29543, 29548, 29552, 29557, 29562, 29567, 29572, 29577, 29581, 
-    29585, 29590, 29595, 29599, 29603, 29607, 29612, 29617, 29622, 29627, 0, 
-    0, 29633, 29637, 29644, 29649, 29655, 29661, 29666, 29672, 29678, 29683, 
-    29689, 29695, 29701, 29706, 29712, 29717, 29722, 29728, 29733, 29739, 
-    29744, 29750, 29756, 29762, 29768, 29772, 29777, 29782, 29788, 29794, 
-    29799, 29805, 29811, 29815, 29820, 29825, 29829, 29834, 29839, 29844, 
-    29849, 29855, 29861, 29866, 29871, 29876, 29880, 29885, 29889, 29894, 
-    29898, 29903, 29908, 29913, 29918, 29924, 29930, 29937, 29947, 29956, 
-    29963, 29969, 29979, 29984, 29990, 0, 29995, 30000, 30005, 30013, 30019, 
-    30027, 30032, 30038, 30044, 30050, 30055, 30061, 30066, 30073, 30079, 
-    30084, 30090, 30096, 30102, 30109, 30116, 30123, 30128, 30133, 30140, 
-    30147, 30154, 30161, 30168, 0, 0, 30175, 30182, 30189, 30195, 30201, 
-    30207, 30213, 30219, 30225, 30231, 30237, 0, 0, 0, 0, 0, 0, 30243, 30249, 
-    30254, 30259, 30264, 30269, 30274, 30279, 30284, 30289, 0, 0, 0, 0, 0, 0, 
-    30294, 30299, 30304, 30309, 30314, 30319, 30324, 30333, 30340, 30345, 
-    30350, 30355, 30360, 30365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18288, 18291, 18295, 18299, 18303, 
+    18307, 18311, 18315, 18319, 18323, 18327, 18331, 18335, 18339, 18343, 
+    18347, 18351, 18355, 18359, 18363, 18367, 18370, 18373, 18377, 18381, 
+    18385, 18388, 18391, 18394, 18398, 18402, 18405, 18408, 18412, 18415, 
+    18420, 18423, 18427, 18430, 18434, 18437, 18442, 18445, 18449, 18456, 
+    18461, 18465, 18470, 18474, 18479, 18483, 18488, 18495, 18501, 18506, 
+    18510, 18514, 18518, 18522, 18526, 18531, 18536, 18542, 18547, 18552, 
+    18556, 18559, 18562, 18565, 18568, 18571, 18574, 18577, 18580, 18583, 
+    18589, 18593, 18597, 18601, 18605, 18609, 18613, 18617, 18621, 18626, 
+    18630, 18635, 18640, 18646, 18651, 18657, 18663, 18669, 18675, 18681, 
+    18688, 18695, 18703, 18711, 18720, 18729, 18740, 18750, 18760, 18771, 
+    18782, 18792, 18802, 18812, 18822, 18832, 18842, 18852, 18862, 18870, 
+    18877, 18883, 18890, 18895, 18901, 18907, 18913, 18919, 18925, 18931, 
+    18936, 18942, 18948, 18954, 18960, 18965, 18973, 18980, 18986, 18993, 
+    19001, 19007, 19013, 19019, 19025, 19033, 19041, 19051, 19059, 19067, 
+    19073, 19078, 19083, 19088, 19093, 19098, 19103, 19108, 19113, 19118, 
+    19124, 19130, 19136, 19143, 19148, 19154, 19159, 19164, 19169, 19174, 
+    19179, 19184, 19189, 19194, 19199, 19204, 19209, 19214, 19219, 19224, 
+    19229, 19234, 19239, 19244, 19249, 19254, 19259, 19264, 19269, 19274, 
+    19279, 19284, 19289, 19294, 19299, 19304, 19309, 19314, 19319, 19324, 
+    19329, 19334, 19339, 0, 19344, 0, 0, 0, 0, 0, 19349, 0, 0, 19354, 19358, 
+    19362, 19366, 19370, 19374, 19378, 19382, 19386, 19390, 19394, 19398, 
+    19402, 19406, 19410, 19414, 19418, 19422, 19426, 19430, 19434, 19438, 
+    19442, 19446, 19450, 19454, 19458, 19462, 19466, 19470, 19474, 19478, 
+    19482, 19486, 19490, 19494, 19498, 19502, 19506, 19510, 19514, 19518, 
+    19524, 19528, 19533, 19538, 19542, 19547, 19552, 19556, 19560, 19564, 
+    19568, 19572, 19576, 19580, 19584, 19588, 19592, 19596, 19600, 19604, 
+    19608, 19612, 19616, 19620, 19624, 19628, 19632, 19636, 19640, 19644, 
+    19648, 19652, 19656, 19660, 19664, 19668, 19672, 19676, 19680, 19684, 
+    19688, 19692, 19696, 19700, 19704, 19708, 19712, 19716, 19720, 19724, 
+    19728, 19732, 19736, 19740, 19744, 19748, 19752, 19756, 19760, 19764, 
+    19768, 19772, 19776, 19780, 19784, 19788, 19792, 19796, 19800, 19804, 
+    19808, 19812, 19816, 19820, 19824, 19828, 19832, 19836, 19840, 19844, 
+    19848, 19852, 19856, 19860, 19864, 19868, 19872, 19876, 19880, 19884, 
+    19888, 19892, 19896, 19900, 19904, 19908, 19912, 19916, 19920, 19924, 
+    19928, 19932, 19936, 19940, 19943, 19947, 19950, 19954, 19958, 19961, 
+    19965, 19969, 19972, 19976, 19980, 19984, 19988, 19991, 19995, 19999, 
+    20003, 20007, 20011, 20015, 20018, 20022, 20026, 20030, 20034, 20038, 
+    20042, 20046, 20050, 20054, 20058, 20062, 20066, 20070, 20074, 20078, 
+    20082, 20086, 20090, 20094, 20098, 20102, 20106, 20110, 20114, 20118, 
+    20122, 20126, 20130, 20134, 20138, 20142, 20146, 20150, 20154, 20158, 
+    20162, 20166, 20170, 20174, 20178, 20182, 20186, 20190, 20194, 20198, 
+    20202, 20206, 20210, 20214, 20218, 20222, 20226, 20230, 20234, 20238, 
+    20242, 20246, 20250, 20254, 20258, 20262, 20266, 20270, 20274, 20278, 
+    20282, 20286, 20290, 20294, 20298, 20302, 20306, 20310, 20314, 20318, 
+    20322, 20326, 20330, 20334, 20338, 20342, 20346, 20350, 20354, 20358, 
+    20362, 20366, 20370, 20374, 20378, 20382, 20386, 20390, 20394, 20398, 
+    20402, 20406, 20410, 20414, 20418, 20422, 20426, 20430, 20434, 20438, 
+    20442, 20446, 20450, 20454, 20458, 20462, 20466, 20470, 20474, 20478, 
+    20482, 20486, 20490, 20494, 20498, 20502, 20506, 20510, 20514, 20518, 
+    20522, 20526, 20530, 20534, 20538, 20542, 20546, 20550, 20554, 20558, 
+    20562, 20566, 20570, 20573, 20577, 20581, 20585, 20589, 20593, 20597, 
+    20601, 20605, 20609, 20613, 20617, 20621, 20625, 20629, 20633, 20637, 
+    20641, 20645, 20649, 20653, 20657, 20661, 20665, 20668, 20672, 20676, 
+    20680, 20684, 20688, 20692, 20696, 20700, 20704, 20708, 20712, 20716, 
+    20720, 20724, 20728, 20731, 20735, 20739, 20743, 20747, 20751, 20755, 
+    20759, 20762, 20766, 20770, 20774, 20778, 20782, 20786, 20790, 20794, 
+    20798, 20802, 20806, 20810, 20814, 20818, 20822, 20826, 20830, 20834, 
+    20838, 20842, 20846, 20850, 20854, 0, 20858, 20862, 20866, 20870, 0, 0, 
+    20874, 20878, 20882, 20886, 20890, 20894, 20898, 0, 20902, 0, 20906, 
+    20910, 20914, 20918, 0, 0, 20922, 20926, 20930, 20934, 20938, 20942, 
+    20946, 20950, 20954, 20958, 20962, 20966, 20970, 20974, 20978, 20982, 
+    20986, 20990, 20994, 20998, 21002, 21006, 21010, 21013, 21017, 21021, 
+    21025, 21029, 21033, 21037, 21041, 21045, 21049, 21053, 21057, 21061, 
+    21065, 21069, 21073, 21077, 21081, 0, 21085, 21089, 21093, 21097, 0, 0, 
+    21101, 21104, 21108, 21112, 21116, 21120, 21124, 21128, 21132, 21136, 
+    21140, 21144, 21148, 21152, 21156, 21160, 21164, 21169, 21174, 21179, 
+    21185, 21191, 21196, 21201, 21207, 21210, 21214, 21218, 21222, 21226, 
+    21230, 21234, 21238, 0, 21242, 21246, 21250, 21254, 0, 0, 21258, 21262, 
+    21266, 21270, 21274, 21278, 21282, 0, 21286, 0, 21290, 21294, 21298, 
+    21302, 0, 0, 21306, 21310, 21314, 21318, 21322, 21326, 21330, 21334, 
+    21338, 21343, 21348, 21353, 21359, 21365, 21370, 0, 21375, 21379, 21383, 
+    21387, 21391, 21395, 21399, 21403, 21407, 21411, 21415, 21419, 21423, 
+    21427, 21431, 21435, 21439, 21442, 21446, 21450, 21454, 21458, 21462, 
+    21466, 21470, 21474, 21478, 21482, 21486, 21490, 21494, 21498, 21502, 
+    21506, 21510, 21514, 21518, 21522, 21526, 21530, 21534, 21538, 21542, 
+    21546, 21550, 21554, 21558, 21562, 21566, 21570, 21574, 21578, 21582, 
+    21586, 21590, 21594, 21598, 0, 21602, 21606, 21610, 21614, 0, 0, 21618, 
+    21622, 21626, 21630, 21634, 21638, 21642, 21646, 21650, 21654, 21658, 
+    21662, 21666, 21670, 21674, 21678, 21682, 21686, 21690, 21694, 21698, 
+    21702, 21706, 21710, 21714, 21718, 21722, 21726, 21730, 21734, 21738, 
+    21742, 21746, 21750, 21754, 21758, 21762, 21766, 21770, 21774, 21778, 
+    21782, 21786, 21790, 21794, 21798, 21802, 21806, 21810, 21814, 21818, 
+    21822, 21826, 21830, 21834, 21838, 21842, 21845, 21849, 21853, 21857, 
+    21861, 21865, 21869, 21873, 21877, 21881, 0, 0, 21885, 21894, 21900, 
+    21905, 21909, 21912, 21917, 21920, 21923, 21926, 21931, 21935, 21940, 
+    21943, 21946, 21949, 21952, 21955, 21958, 21961, 21964, 21967, 21971, 
+    21975, 21979, 21983, 21987, 21991, 21995, 21999, 22003, 22007, 0, 0, 0, 
+    22013, 22019, 22023, 22027, 22031, 22037, 22041, 22045, 22049, 22055, 
+    22059, 22063, 22067, 22073, 22077, 22081, 22085, 22091, 22097, 22103, 
+    22111, 22117, 22123, 22129, 22135, 22141, 0, 0, 0, 0, 0, 0, 22147, 22150, 
+    22153, 22156, 22159, 22162, 22166, 22170, 22173, 22177, 22181, 22185, 
+    22189, 22193, 22196, 22200, 22204, 22208, 22212, 22216, 22220, 22224, 
+    22228, 22232, 22236, 22240, 22243, 22247, 22251, 22255, 22259, 22262, 
+    22266, 22270, 22274, 22278, 22282, 22286, 22290, 22294, 22298, 22302, 
+    22306, 22310, 22314, 22317, 22321, 22325, 22329, 22333, 22337, 22341, 
+    22345, 22349, 22353, 22357, 22361, 22365, 22369, 22373, 22377, 22381, 
+    22385, 22389, 22393, 22397, 22401, 22405, 22409, 22413, 22417, 22421, 
+    22425, 22429, 22433, 22437, 22441, 22445, 22449, 22453, 22456, 22460, 
+    22464, 22468, 22472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22476, 22480, 
+    22483, 22487, 22490, 22494, 22497, 22501, 22507, 22512, 22516, 22519, 
+    22523, 22527, 22532, 22536, 22541, 22545, 22550, 22554, 22559, 22563, 
+    22568, 22574, 22578, 22583, 22587, 22592, 22598, 22602, 22608, 22614, 
+    22618, 22623, 22631, 22639, 22646, 22651, 22656, 22665, 22672, 22679, 
+    22684, 22690, 22694, 22698, 22702, 22706, 22710, 22714, 22718, 22722, 
+    22726, 22730, 22736, 22741, 22746, 22749, 22753, 22757, 22762, 22766, 
+    22771, 22775, 22780, 22784, 22789, 22793, 22798, 22802, 22807, 22811, 
+    22816, 22822, 22826, 22831, 22836, 22840, 22844, 22848, 22852, 22855, 
+    22859, 22865, 22870, 22875, 22879, 22883, 22887, 22892, 22896, 22901, 
+    22905, 22910, 22913, 22917, 22921, 22926, 22930, 22935, 22939, 22944, 
+    22950, 22954, 22958, 22962, 22966, 22970, 22974, 22978, 22982, 22986, 
+    22990, 22994, 23000, 23003, 23007, 23011, 23016, 23020, 23025, 23029, 
+    23034, 23038, 23043, 23047, 23052, 23056, 23061, 23065, 23070, 23076, 
+    23080, 23084, 23090, 23096, 23102, 23108, 23112, 23116, 23120, 23124, 
+    23128, 23132, 23138, 23142, 23146, 23150, 23155, 23159, 23164, 23168, 
+    23173, 23177, 23182, 23186, 23191, 23195, 23200, 23204, 23209, 23215, 
+    23219, 23225, 23229, 23233, 23237, 23241, 23245, 23249, 23255, 23258, 
+    23262, 23266, 23271, 23275, 23280, 23284, 23289, 23293, 23298, 23302, 
+    23307, 23311, 23316, 23320, 23325, 23331, 23334, 23338, 23342, 23347, 
+    23352, 23356, 23360, 23364, 23368, 23372, 23376, 23382, 23385, 23389, 
+    23393, 23398, 23402, 23407, 23411, 23416, 23422, 23426, 23431, 23435, 
+    23439, 23443, 23447, 23451, 23455, 23459, 23465, 23469, 23473, 23477, 
+    23482, 23486, 23491, 23495, 23500, 23504, 23509, 23513, 23518, 23522, 
+    23527, 23531, 23536, 23539, 23543, 23547, 23551, 23555, 23559, 23563, 
+    23567, 23571, 23577, 23580, 23584, 23588, 23593, 23597, 23602, 23606, 
+    23611, 23615, 23620, 23624, 23629, 23633, 23638, 23642, 23647, 23653, 
+    23657, 23663, 23667, 23673, 23679, 23685, 23691, 23697, 23703, 23709, 
+    23715, 23719, 23723, 23727, 23731, 23735, 23739, 23743, 23747, 23752, 
+    23756, 23761, 23765, 23770, 23774, 23779, 23783, 23788, 23792, 23797, 
+    23801, 23806, 23810, 23814, 23818, 23822, 23826, 23830, 23834, 23840, 
+    23843, 23847, 23851, 23856, 23860, 23865, 23869, 23874, 23878, 23883, 
+    23887, 23892, 23896, 23901, 23905, 23910, 23916, 23920, 23926, 23931, 
+    23937, 23941, 23947, 23952, 23956, 23960, 23964, 23968, 23972, 23977, 
+    23980, 23984, 23989, 23993, 23998, 24001, 24005, 24009, 24013, 24017, 
+    24021, 24025, 24029, 24033, 24037, 24041, 24045, 24050, 24054, 24058, 
+    24064, 24068, 24074, 24078, 24084, 24088, 24092, 24096, 24100, 24104, 
+    24109, 24113, 24117, 24121, 24125, 24129, 24133, 24137, 24141, 24145, 
+    24149, 24155, 24161, 24167, 24173, 24179, 24184, 24190, 24196, 24202, 
+    24206, 24210, 24214, 24218, 24222, 24226, 24230, 24234, 24238, 24242, 
+    24246, 24250, 24254, 24259, 24264, 24269, 24273, 24277, 24281, 24285, 
+    24289, 24293, 24297, 24301, 24305, 24309, 24315, 24321, 24327, 24333, 
+    24339, 24345, 24351, 24357, 24363, 24367, 24371, 24375, 24379, 24383, 
+    24387, 24391, 24397, 24403, 24409, 24415, 24421, 24427, 24433, 24439, 
+    24445, 24450, 24455, 24460, 24465, 24471, 24477, 24483, 24489, 24495, 
+    24501, 24507, 24512, 24518, 24524, 24530, 24535, 24541, 24547, 24553, 
+    24558, 24563, 24568, 24573, 24578, 24583, 24588, 24593, 24598, 24603, 
+    24608, 24613, 24617, 24622, 24627, 24632, 24637, 24642, 24647, 24652, 
+    24657, 24662, 24667, 24672, 24677, 24682, 24687, 24692, 24697, 24702, 
+    24707, 24712, 24717, 24722, 24727, 24732, 24737, 24742, 24747, 24752, 
+    24757, 24762, 24766, 24771, 24776, 24781, 24786, 24791, 24796, 24801, 
+    24806, 24811, 24816, 24821, 24826, 24831, 24836, 24841, 24846, 24851, 
+    24856, 24861, 24866, 24871, 24876, 24881, 24886, 24891, 24895, 24900, 
+    24905, 24910, 24915, 24920, 24924, 24929, 24934, 24939, 24944, 24949, 
+    24953, 24958, 24964, 24969, 24974, 24979, 24984, 24990, 24995, 25000, 
+    25005, 25010, 25015, 25020, 25025, 25030, 25035, 25040, 25045, 25050, 
+    25055, 25060, 25065, 25070, 25075, 25080, 25085, 25090, 25095, 25100, 
+    25105, 25110, 25115, 25120, 25125, 25130, 25135, 25140, 25145, 25150, 
+    25155, 25160, 25165, 25170, 25175, 25180, 25185, 25190, 25195, 25200, 
+    25205, 25210, 25216, 25221, 25226, 25231, 25236, 25241, 25246, 25251, 
+    25256, 25261, 25266, 25271, 25275, 25280, 25285, 25290, 25295, 25300, 
+    25305, 25310, 25315, 25320, 25325, 25330, 25335, 25340, 25345, 25350, 
+    25355, 25360, 25365, 25370, 25375, 25380, 25385, 25390, 25395, 25400, 
+    25405, 25411, 25415, 25419, 25423, 25427, 25431, 25435, 25439, 25443, 
+    25449, 25455, 25461, 25467, 25473, 25479, 25485, 25492, 25498, 25503, 
+    25508, 25513, 25518, 25523, 25528, 25533, 25538, 25543, 25548, 25553, 
+    25558, 25563, 25568, 25573, 25578, 25583, 25588, 25593, 25598, 25603, 
+    25608, 25613, 25618, 25623, 25628, 25633, 25638, 0, 0, 0, 25645, 25655, 
+    25659, 25666, 25670, 25674, 25678, 25686, 25690, 25695, 25700, 25705, 
+    25709, 25714, 25719, 25722, 25726, 25730, 25739, 25743, 25747, 25753, 
+    25757, 25761, 25769, 25773, 25781, 25787, 25793, 25799, 25805, 25815, 
+    25821, 25825, 25834, 25837, 25843, 25847, 25853, 25858, 25864, 25872, 
+    25878, 25884, 25892, 25898, 25902, 25906, 25916, 25922, 25926, 25936, 
+    25942, 25946, 25950, 25957, 25964, 25969, 25974, 25983, 25987, 25991, 
+    25995, 26003, 26010, 26014, 26018, 26022, 26026, 26030, 26034, 26038, 
+    26042, 26046, 26050, 26054, 26059, 26064, 26069, 26073, 26077, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26081, 26085, 26089, 26093, 26097, 
+    26102, 26107, 26112, 26117, 26121, 26125, 26130, 26134, 0, 26138, 26143, 
+    26148, 26152, 26156, 26161, 26166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    26171, 26175, 26179, 26183, 26187, 26192, 26197, 26202, 26207, 26211, 
+    26215, 26220, 26224, 26228, 26232, 26237, 26242, 26246, 26250, 26255, 
+    26260, 26265, 26271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26276, 26280, 26284, 
+    26288, 26292, 26297, 26302, 26307, 26312, 26316, 26320, 26325, 26329, 
+    26333, 26337, 26342, 26347, 26351, 26355, 26360, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 26365, 26369, 26373, 26377, 26381, 26386, 26391, 26396, 
+    26401, 26405, 26409, 26414, 26418, 0, 26422, 26427, 26432, 0, 26436, 
+    26441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26446, 26449, 26453, 26457, 
+    26461, 26465, 26469, 26473, 26477, 26481, 26485, 26489, 26493, 26497, 
+    26501, 26505, 26509, 26513, 26516, 26520, 26524, 26528, 26532, 26536, 
+    26540, 26544, 26548, 26552, 26556, 26560, 26564, 26568, 26571, 26574, 
+    26578, 26582, 26588, 26594, 26600, 26606, 26612, 26618, 26624, 26630, 
+    26636, 26642, 26648, 26654, 26660, 26666, 26675, 26684, 26690, 26696, 
+    26702, 26707, 26711, 26716, 26721, 26726, 26730, 26735, 26740, 26745, 
+    26749, 26754, 26758, 26763, 26768, 26773, 26778, 26782, 26786, 26790, 
+    26794, 26798, 26802, 26806, 26810, 26814, 26818, 26824, 26828, 26832, 
+    26836, 26840, 26844, 26852, 26858, 26862, 26868, 26872, 26878, 26882, 0, 
+    0, 26886, 26890, 26893, 26896, 26899, 26902, 26905, 26908, 26911, 26914, 
+    0, 0, 0, 0, 0, 0, 26917, 26925, 26933, 26941, 26949, 26957, 26965, 26973, 
+    26981, 26989, 0, 0, 0, 0, 0, 0, 26997, 27000, 27003, 27006, 27011, 27014, 
+    27019, 27026, 27034, 27039, 27046, 27049, 27056, 27063, 27070, 0, 27074, 
+    27078, 27081, 27084, 27087, 27090, 27093, 27096, 27099, 27102, 0, 0, 0, 
+    0, 0, 0, 27105, 27108, 27111, 27114, 27117, 27120, 27124, 27128, 27132, 
+    27135, 27139, 27143, 27146, 27150, 27154, 27157, 27161, 27164, 27168, 
+    27172, 27176, 27180, 27184, 27187, 27190, 27194, 27198, 27201, 27205, 
+    27209, 27213, 27217, 27221, 27225, 27229, 27233, 27240, 27245, 27250, 
+    27255, 27260, 27266, 27272, 27278, 27284, 27289, 27295, 27301, 27306, 
+    27312, 27318, 27324, 27330, 27336, 27341, 27347, 27352, 27358, 27364, 
+    27370, 27376, 27382, 27387, 27392, 27398, 27404, 27409, 27415, 27420, 
+    27426, 27431, 27436, 27442, 27448, 27454, 27460, 27466, 27472, 27478, 
+    27484, 27490, 27496, 27502, 27508, 27513, 27518, 27523, 27529, 0, 0, 0, 
+    0, 0, 0, 0, 0, 27535, 27544, 27553, 27561, 27569, 27579, 27587, 27596, 
+    27603, 27610, 27617, 27625, 27633, 27641, 27649, 27657, 27665, 27673, 
+    27681, 27688, 27696, 27704, 27712, 27720, 27728, 27738, 27748, 27758, 
+    27768, 27778, 27788, 27798, 27808, 27818, 27828, 27838, 27848, 27858, 
+    27868, 27876, 27884, 27894, 27902, 0, 0, 0, 0, 0, 27912, 27916, 27920, 
+    27924, 27928, 27932, 27936, 27940, 27944, 27948, 27952, 27956, 27960, 
+    27964, 27968, 27972, 27976, 27980, 27984, 27988, 27992, 27996, 28000, 
+    28004, 28010, 28014, 28020, 28024, 28030, 28034, 28040, 28044, 28048, 
+    28052, 28056, 28060, 28064, 28070, 28076, 28082, 28088, 28093, 28099, 
+    28105, 28111, 28117, 28123, 28129, 28136, 28142, 28147, 28152, 28156, 
+    28160, 28164, 28168, 28172, 28176, 28180, 28186, 28192, 28198, 28203, 
+    28210, 28215, 28220, 28226, 28231, 28238, 28245, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 28252, 28258, 28262, 28267, 28272, 28277, 28282, 28287, 28292, 
+    28297, 28302, 28307, 28312, 28317, 28322, 28327, 28331, 28335, 28340, 
+    28345, 28350, 28354, 28358, 28362, 28367, 28372, 28377, 28382, 28386, 0, 
+    0, 0, 28390, 28395, 28400, 28405, 28411, 28417, 28423, 28429, 28434, 
+    28439, 28445, 28451, 0, 0, 0, 0, 28458, 28463, 28469, 28475, 28481, 
+    28486, 28491, 28496, 28501, 28507, 28512, 28517, 0, 0, 0, 0, 28522, 0, 0, 
+    0, 28527, 28532, 28537, 28542, 28546, 28550, 28554, 28558, 28562, 28566, 
+    28570, 28574, 28578, 28583, 28589, 28595, 28601, 28606, 28611, 28617, 
+    28623, 28629, 28634, 28640, 28645, 28651, 28657, 28662, 28668, 28674, 
+    28680, 28685, 28690, 28695, 28701, 28707, 28712, 28718, 28723, 28729, 
+    28734, 28740, 0, 0, 28746, 28752, 28758, 28764, 28770, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 28776, 28783, 28790, 28796, 28803, 28810, 28816, 28823, 
+    28830, 28837, 28843, 28849, 28856, 28862, 28868, 28875, 28882, 28888, 
+    28895, 28902, 28908, 28914, 28921, 28927, 28933, 28940, 28946, 28953, 
+    28960, 28967, 28974, 28981, 28988, 28994, 29001, 29008, 29014, 29021, 
+    29028, 29035, 29042, 29049, 29056, 29063, 0, 0, 0, 0, 29070, 29078, 
+    29085, 29092, 29098, 29105, 29111, 29118, 29124, 29131, 29138, 29145, 
+    29152, 29159, 29166, 29173, 29180, 29187, 29194, 29201, 29208, 29214, 
+    29221, 29228, 29235, 29241, 0, 0, 0, 0, 0, 0, 29247, 29253, 29258, 29263, 
+    29268, 29273, 29278, 29283, 29288, 29293, 29298, 0, 0, 0, 29304, 29310, 
+    29316, 29320, 29326, 29332, 29338, 29344, 29350, 29356, 29362, 29368, 
+    29374, 29380, 29386, 29392, 29398, 29404, 29410, 29414, 29420, 29426, 
+    29432, 29438, 29444, 29450, 29456, 29462, 29468, 29474, 29480, 29486, 
+    29492, 29498, 29504, 29508, 29513, 29518, 29523, 29527, 29532, 29536, 
+    29541, 29546, 29551, 29555, 29560, 29565, 29570, 29575, 29580, 29584, 
+    29588, 29593, 29598, 29602, 29606, 29610, 29615, 29620, 29625, 29630, 0, 
+    0, 29636, 29640, 29647, 29652, 29658, 29664, 29669, 29675, 29681, 29686, 
+    29692, 29698, 29704, 29709, 29715, 29720, 29725, 29731, 29736, 29742, 
+    29747, 29753, 29759, 29765, 29771, 29775, 29780, 29785, 29791, 29797, 
+    29802, 29808, 29814, 29818, 29823, 29828, 29832, 29837, 29842, 29847, 
+    29852, 29858, 29864, 29869, 29874, 29879, 29883, 29888, 29892, 29897, 
+    29901, 29906, 29911, 29916, 29921, 29927, 29933, 29940, 29950, 29959, 
+    29966, 29972, 29982, 29987, 29993, 0, 29998, 30003, 30008, 30016, 30022, 
+    30030, 30035, 30041, 30047, 30053, 30058, 30064, 30069, 30076, 30082, 
+    30087, 30093, 30099, 30105, 30112, 30119, 30126, 30131, 30136, 30143, 
+    30150, 30157, 30164, 30171, 0, 0, 30178, 30185, 30192, 30198, 30204, 
+    30210, 30216, 30222, 30228, 30234, 30240, 0, 0, 0, 0, 0, 0, 30246, 30252, 
+    30257, 30262, 30267, 30272, 30277, 30282, 30287, 30292, 0, 0, 0, 0, 0, 0, 
+    30297, 30302, 30307, 30312, 30317, 30322, 30327, 30336, 30343, 30348, 
+    30353, 30358, 30363, 30368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30370, 30376, 
-    30382, 30386, 30390, 30394, 30398, 30404, 30408, 30414, 30418, 30424, 
-    30430, 30438, 30444, 30452, 30456, 30460, 30464, 30470, 30473, 30479, 
-    30483, 30489, 30493, 30497, 30503, 30507, 30513, 30517, 30523, 30531, 
-    30539, 30547, 30553, 30557, 30563, 30567, 30573, 30576, 30579, 30585, 
-    30589, 30595, 30598, 30601, 30604, 30608, 30612, 30618, 30624, 30627, 
-    30630, 30634, 30639, 30644, 30651, 30656, 30663, 30670, 30679, 30686, 
-    30695, 30700, 30707, 30714, 30723, 30728, 30735, 30740, 30746, 30752, 
-    30758, 30764, 30770, 30776, 0, 0, 0, 0, 30782, 30786, 30789, 30792, 
-    30795, 30798, 30801, 30804, 30807, 30810, 30813, 30816, 30819, 30822, 
-    30827, 30832, 30837, 30840, 30845, 30850, 30855, 30860, 30867, 30872, 
-    30877, 30882, 30887, 30894, 30900, 30906, 30912, 30918, 30924, 30933, 
-    30942, 30948, 30954, 30962, 30970, 30979, 30988, 30996, 31004, 31013, 
-    31022, 0, 0, 0, 31030, 31034, 31038, 31042, 31045, 31048, 31051, 31055, 
-    31058, 31061, 31065, 31068, 31072, 31076, 31080, 31084, 31088, 31092, 
-    31096, 31100, 31104, 31107, 31110, 31114, 31118, 31122, 31125, 31128, 
-    31131, 31135, 31139, 31142, 31146, 31149, 31154, 31159, 31164, 31169, 
-    31174, 31179, 31184, 31189, 31194, 31198, 31202, 31208, 31215, 31219, 
-    31223, 31227, 31230, 31233, 31236, 31239, 31242, 31245, 31248, 31251, 
-    31254, 31257, 31261, 31265, 31269, 31274, 31278, 31282, 31288, 31292, 
-    31298, 31304, 31309, 31316, 31320, 31326, 31330, 31336, 31341, 31348, 
-    31355, 31360, 31367, 31372, 31377, 31381, 31387, 31391, 31397, 31404, 
-    31411, 31415, 31421, 31427, 31431, 31437, 31442, 31447, 31454, 31459, 
-    31464, 31469, 31474, 31478, 31482, 31487, 31492, 31499, 31505, 31510, 
-    31517, 31522, 31529, 31534, 31543, 31549, 31555, 31559, 0, 0, 0, 0, 0, 0, 
-    0, 0, 31563, 31572, 31579, 31586, 31593, 31596, 31600, 31604, 31608, 
-    31612, 31616, 31620, 31624, 31628, 31632, 31636, 31640, 31644, 31647, 
-    31650, 31654, 31658, 31662, 31666, 31670, 31674, 31677, 31681, 31685, 
-    31689, 31693, 31696, 31699, 31703, 31706, 31710, 31714, 31717, 31721, 
-    31725, 31728, 31733, 31738, 31743, 31747, 31751, 31756, 31760, 31765, 
-    31769, 31774, 31778, 31782, 31787, 31792, 31796, 31801, 31806, 31811, 
-    31815, 0, 0, 0, 31819, 31824, 31833, 31838, 31845, 31850, 31854, 31857, 
-    31860, 31863, 31866, 31869, 31872, 31875, 31878, 0, 0, 0, 31881, 31885, 
-    31889, 31893, 31900, 31906, 31912, 31918, 31924, 31930, 31936, 31942, 
-    31948, 31954, 31961, 31968, 31975, 31982, 31989, 31996, 32003, 32010, 
-    32017, 32024, 32031, 32038, 32045, 32052, 32059, 32066, 32073, 32080, 
-    32087, 32094, 32101, 32108, 32115, 32122, 32129, 32136, 32143, 32150, 
-    32157, 32164, 32172, 32180, 32188, 32194, 32200, 32206, 32214, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30373, 30379, 
+    30385, 30389, 30393, 30397, 30401, 30407, 30411, 30417, 30421, 30427, 
+    30433, 30441, 30447, 30455, 30459, 30463, 30467, 30473, 30476, 30482, 
+    30486, 30492, 30496, 30500, 30506, 30510, 30516, 30520, 30526, 30534, 
+    30542, 30550, 30556, 30560, 30566, 30570, 30576, 30579, 30582, 30588, 
+    30592, 30598, 30601, 30604, 30607, 30611, 30615, 30621, 30627, 30630, 
+    30633, 30637, 30642, 30647, 30654, 30659, 30666, 30673, 30682, 30689, 
+    30698, 30703, 30710, 30717, 30726, 30731, 30738, 30743, 30749, 30755, 
+    30761, 30767, 30773, 30779, 0, 0, 0, 0, 30785, 30789, 30792, 30795, 
+    30798, 30801, 30804, 30807, 30810, 30813, 30816, 30819, 30822, 30825, 
+    30830, 30835, 30840, 30843, 30848, 30853, 30858, 30863, 30870, 30875, 
+    30880, 30885, 30890, 30897, 30903, 30909, 30915, 30921, 30927, 30936, 
+    30945, 30951, 30957, 30965, 30973, 30982, 30991, 30999, 31007, 31016, 
+    31025, 0, 0, 0, 31033, 31037, 31041, 31045, 31048, 31051, 31054, 31058, 
+    31061, 31064, 31068, 31071, 31075, 31079, 31083, 31087, 31091, 31095, 
+    31099, 31103, 31107, 31110, 31113, 31117, 31121, 31125, 31128, 31131, 
+    31134, 31138, 31142, 31145, 31149, 31152, 31157, 31162, 31167, 31172, 
+    31177, 31182, 31187, 31192, 31197, 31201, 31205, 31211, 31218, 31222, 
+    31226, 31230, 31233, 31236, 31239, 31242, 31245, 31248, 31251, 31254, 
+    31257, 31260, 31264, 31268, 31272, 31277, 31281, 31285, 31291, 31295, 
+    31301, 31307, 31312, 31319, 31323, 31329, 31333, 31339, 31344, 31351, 
+    31358, 31363, 31370, 31375, 31380, 31384, 31390, 31394, 31400, 31407, 
+    31414, 31418, 31424, 31430, 31434, 31440, 31445, 31450, 31457, 31462, 
+    31467, 31472, 31477, 31481, 31485, 31490, 31495, 31502, 31508, 31513, 
+    31520, 31525, 31532, 31537, 31546, 31552, 31558, 31562, 0, 0, 0, 0, 0, 0, 
+    0, 0, 31566, 31575, 31582, 31589, 31596, 31599, 31603, 31607, 31611, 
+    31615, 31619, 31623, 31627, 31631, 31635, 31639, 31643, 31647, 31650, 
+    31653, 31657, 31661, 31665, 31669, 31673, 31677, 31680, 31684, 31688, 
+    31692, 31696, 31699, 31702, 31706, 31709, 31713, 31717, 31720, 31724, 
+    31728, 31731, 31736, 31741, 31746, 31750, 31754, 31759, 31763, 31768, 
+    31772, 31777, 31781, 31785, 31790, 31795, 31799, 31804, 31809, 31814, 
+    31818, 0, 0, 0, 31822, 31827, 31836, 31841, 31848, 31853, 31857, 31860, 
+    31863, 31866, 31869, 31872, 31875, 31878, 31881, 0, 0, 0, 31884, 31888, 
+    31892, 31896, 31903, 31909, 31915, 31921, 31927, 31933, 31939, 31945, 
+    31951, 31957, 31964, 31971, 31978, 31985, 31992, 31999, 32006, 32013, 
+    32020, 32027, 32034, 32041, 32048, 32055, 32062, 32069, 32076, 32083, 
+    32090, 32097, 32104, 32111, 32118, 32125, 32132, 32139, 32146, 32153, 
+    32160, 32167, 32175, 32183, 32191, 32197, 32203, 32209, 32217, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32223, 32230, 32237, 32244, 32251, 
-    32260, 32269, 32278, 0, 0, 0, 0, 0, 0, 0, 0, 32287, 32292, 32297, 32302, 
-    32307, 32316, 32327, 32336, 32347, 32353, 32366, 32372, 32379, 32386, 
-    32391, 32397, 32403, 32414, 32423, 32430, 32437, 32446, 32453, 32462, 
-    32472, 32482, 32489, 32496, 32503, 32513, 32518, 32526, 32532, 32540, 
-    32549, 32554, 32561, 32567, 32572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32577, 
-    32582, 32588, 32595, 32603, 32609, 32615, 32621, 32626, 32633, 32639, 
-    32645, 32651, 32659, 32664, 32672, 32677, 32683, 32689, 32696, 32704, 
-    32711, 32717, 32724, 32731, 32737, 32744, 32751, 32757, 32762, 32768, 
-    32776, 32784, 32790, 32796, 32802, 32808, 32816, 32820, 32826, 32832, 
-    32838, 32844, 32850, 32856, 32860, 32865, 32870, 32877, 32882, 32886, 
-    32892, 32897, 32902, 32906, 32911, 32916, 32920, 32924, 32929, 32936, 
-    32940, 32945, 32950, 32954, 32959, 32963, 32968, 32972, 32978, 32983, 
-    32990, 32995, 33000, 33004, 33009, 33014, 33021, 33026, 33032, 33037, 
-    33041, 33046, 33050, 33055, 33062, 33069, 33074, 33079, 33083, 33089, 
-    33095, 33100, 33105, 33110, 33116, 33121, 33127, 33132, 33138, 33144, 
-    33150, 33157, 33164, 33171, 33178, 33185, 33192, 33197, 33205, 33214, 
-    33223, 33232, 33241, 33250, 33259, 33271, 33280, 33289, 33298, 33305, 
-    33310, 33317, 33325, 33333, 33340, 33347, 33354, 33361, 33369, 33378, 
-    33387, 33396, 33405, 33414, 33423, 33432, 33441, 33450, 33459, 33468, 
-    33477, 33486, 33495, 33503, 33512, 33523, 33531, 33540, 33551, 33560, 
-    33569, 33578, 33587, 33595, 33604, 33611, 33616, 33624, 33629, 33636, 
-    33641, 33650, 33656, 33663, 33670, 33675, 33680, 33688, 33696, 33705, 
-    33714, 33719, 33726, 33737, 33745, 33754, 33760, 33766, 33771, 33778, 
-    33783, 33792, 33797, 33802, 33807, 33814, 33821, 33826, 33835, 33843, 
-    33848, 33853, 33860, 33867, 33871, 33875, 33878, 33881, 33884, 33887, 
-    33890, 33893, 33900, 33903, 33906, 33911, 33915, 33919, 33923, 33927, 
-    33931, 33940, 33946, 33952, 33958, 33966, 33974, 33980, 33986, 33993, 
-    33999, 34004, 34010, 34016, 34022, 34029, 34035, 34043, 34049, 34056, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34062, 34069, 
-    34076, 34081, 34090, 34098, 34106, 34113, 34120, 34127, 34134, 34142, 
-    34150, 34160, 34170, 34178, 34186, 34194, 34202, 34211, 34220, 34228, 
-    34236, 34245, 34254, 34264, 34274, 34283, 34292, 34300, 34308, 34316, 
-    34324, 34334, 34344, 34352, 34360, 34368, 34376, 34384, 34392, 34400, 
-    34408, 34416, 34424, 34432, 34440, 34449, 34458, 34467, 34476, 34486, 
-    34496, 34503, 34510, 34518, 34526, 34535, 34544, 34552, 34560, 34572, 
-    34584, 34593, 34602, 34611, 34620, 34627, 34634, 34642, 34650, 34658, 
-    34666, 34674, 34682, 34690, 34698, 34707, 34716, 34725, 34734, 34743, 
-    34752, 34762, 34772, 34782, 34792, 34801, 34810, 34817, 34824, 34832, 
-    34840, 34848, 34856, 34864, 34872, 34884, 34896, 34905, 34914, 34922, 
-    34930, 34938, 34946, 34957, 34968, 34979, 34990, 35002, 35014, 35022, 
-    35030, 35038, 35046, 35055, 35064, 35073, 35082, 35090, 35098, 35106, 
-    35114, 35122, 35130, 35139, 35148, 35158, 35168, 35175, 35182, 35190, 
-    35198, 35206, 35214, 35221, 35228, 35236, 35244, 35252, 35260, 35268, 
-    35276, 35284, 35292, 35300, 35308, 35316, 35324, 35332, 35340, 35348, 
-    35356, 35365, 35374, 35383, 35391, 35400, 35409, 35418, 35427, 35437, 
-    35446, 35453, 35458, 35465, 35472, 35480, 35488, 35497, 35506, 35516, 
-    35526, 35537, 35548, 35557, 35566, 35576, 35586, 35595, 35604, 35614, 
-    35624, 35635, 35646, 35655, 35664, 35674, 35684, 35691, 35698, 35706, 
-    35714, 35720, 35726, 35735, 35744, 35754, 35764, 35775, 35786, 35795, 
-    35804, 35814, 35824, 35833, 35842, 35850, 35858, 35865, 35872, 35880, 
-    35888, 35897, 35906, 35916, 35926, 35937, 35948, 35957, 35966, 35976, 
-    35986, 35995, 36004, 36014, 36024, 36035, 36046, 36055, 36064, 36074, 
-    36084, 36091, 36098, 36106, 36114, 36123, 36132, 36142, 36152, 36163, 
-    36174, 36183, 36192, 36202, 36212, 36220, 36228, 36236, 36244, 36253, 
-    36262, 36269, 36276, 36283, 36290, 36297, 36304, 36312, 36320, 36328, 
-    36336, 36347, 36358, 36369, 36380, 36391, 36402, 36410, 36418, 36429, 
-    36440, 36451, 36462, 36473, 36484, 36492, 36500, 36511, 36522, 36533, 0, 
-    0, 36544, 36552, 36560, 36571, 36582, 36593, 0, 0, 36604, 36612, 36620, 
-    36631, 36642, 36653, 36664, 36675, 36686, 36694, 36702, 36713, 36724, 
-    36735, 36746, 36757, 36768, 36776, 36784, 36795, 36806, 36817, 36828, 
-    36839, 36850, 36858, 36866, 36877, 36888, 36899, 36910, 36921, 36932, 
-    36940, 36948, 36959, 36970, 36981, 0, 0, 36992, 37000, 37008, 37019, 
-    37030, 37041, 0, 0, 37052, 37060, 37068, 37079, 37090, 37101, 37112, 
-    37123, 0, 37134, 0, 37142, 0, 37153, 0, 37164, 37175, 37183, 37191, 
-    37202, 37213, 37224, 37235, 37246, 37257, 37265, 37273, 37284, 37295, 
-    37306, 37317, 37328, 37339, 37347, 37355, 37363, 37371, 37379, 37387, 
-    37395, 37403, 37411, 37419, 37427, 37435, 37443, 0, 0, 37451, 37462, 
-    37473, 37487, 37501, 37515, 37529, 37543, 37557, 37568, 37579, 37593, 
-    37607, 37621, 37635, 37649, 37663, 37674, 37685, 37699, 37713, 37727, 
-    37741, 37755, 37769, 37780, 37791, 37805, 37819, 37833, 37847, 37861, 
-    37875, 37886, 37897, 37911, 37925, 37939, 37953, 37967, 37981, 37992, 
-    38003, 38017, 38031, 38045, 38059, 38073, 38087, 38095, 38103, 38114, 
-    38122, 0, 38133, 38141, 38152, 38160, 38168, 38176, 38184, 38192, 38195, 
-    38198, 38201, 38204, 38210, 38221, 38229, 0, 38240, 38248, 38259, 38267, 
-    38275, 38283, 38291, 38299, 38305, 38311, 38317, 38325, 38333, 38344, 0, 
-    0, 38355, 38363, 38374, 38382, 38390, 38398, 0, 38406, 38412, 38418, 
-    38424, 38432, 38440, 38451, 38462, 38470, 38478, 38486, 38497, 38505, 
-    38513, 38521, 38529, 38537, 38543, 38549, 0, 0, 38552, 38563, 38571, 0, 
-    38582, 38590, 38601, 38609, 38617, 38625, 38633, 38641, 38644, 0, 38647, 
-    38651, 38655, 38659, 38663, 38667, 38671, 38675, 38679, 38683, 38687, 
-    38691, 38697, 38703, 38709, 38712, 38715, 38717, 38721, 38725, 38729, 
-    38733, 38735, 38739, 38743, 38749, 38755, 38762, 38769, 38774, 38779, 
-    38785, 38791, 38793, 38796, 38798, 38802, 38806, 38810, 38813, 38817, 
-    38821, 38825, 38829, 38833, 38839, 38843, 38847, 38853, 38858, 38865, 
-    38867, 38870, 38874, 38878, 38883, 38889, 38891, 38900, 38909, 38912, 
-    38916, 38918, 38920, 38922, 38925, 38931, 38933, 38937, 38941, 38948, 
-    38955, 38959, 38964, 38969, 38974, 38979, 38983, 38987, 38990, 38994, 
-    38998, 39005, 39010, 39014, 39018, 39023, 39027, 39031, 39036, 39041, 
-    39045, 39049, 39053, 39055, 39060, 39065, 39069, 39073, 39077, 39081, 0, 
-    0, 0, 0, 0, 39085, 39091, 39097, 39104, 39111, 39116, 39121, 39125, 0, 0, 
-    39131, 39134, 39137, 39140, 39143, 39146, 39149, 39153, 39157, 39162, 
-    39167, 39172, 39179, 39183, 39186, 39189, 39192, 39195, 39198, 39201, 
-    39204, 39207, 39210, 39214, 39218, 39223, 39228, 0, 39233, 39239, 39245, 
-    39251, 39258, 39265, 39272, 39279, 39285, 39291, 39298, 39305, 39312, 0, 
-    0, 0, 39319, 39322, 39325, 39328, 39333, 39336, 39339, 39342, 39345, 
-    39348, 39351, 39355, 39358, 39361, 39364, 39367, 39370, 39375, 39378, 
-    39381, 39384, 39387, 39390, 39395, 39398, 39401, 39406, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39411, 39416, 39421, 39428, 
-    39436, 39441, 39446, 39450, 39454, 39459, 39466, 39473, 39477, 39482, 
-    39487, 39492, 39497, 39504, 39509, 39514, 39519, 39528, 39535, 39542, 
-    39546, 39551, 39557, 39562, 39569, 39578, 39587, 39591, 39595, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39599, 39603, 39611, 39615, 39619, 
-    39624, 39628, 39632, 39636, 39638, 39642, 39646, 39650, 39655, 39659, 
-    39663, 39671, 39674, 39678, 39681, 39684, 39690, 39694, 39697, 39703, 
-    39707, 39711, 39715, 39718, 39722, 39725, 39729, 39731, 39734, 39737, 
-    39741, 39743, 39747, 39750, 39753, 39758, 39763, 39770, 39773, 39776, 
-    39780, 39785, 39788, 39791, 39794, 39798, 39803, 39806, 39809, 39811, 
-    39814, 39817, 39820, 39824, 39829, 39832, 39836, 39840, 39844, 39848, 
-    39853, 39859, 39864, 39869, 39875, 39880, 39885, 39889, 39893, 39898, 
-    39902, 39906, 39909, 39911, 39916, 39922, 39929, 39936, 39943, 39950, 
-    39957, 39964, 39971, 39978, 39986, 39993, 40001, 40008, 40015, 40023, 
-    40031, 40036, 40041, 40046, 40051, 40056, 40061, 40066, 40071, 40076, 
-    40081, 40087, 40093, 40099, 40105, 40112, 40120, 40127, 40133, 40139, 
-    40145, 40151, 40157, 40163, 40169, 40175, 40181, 40188, 40195, 40202, 
-    40209, 40217, 40226, 40234, 40245, 40253, 40261, 40270, 40277, 40286, 
-    40295, 40303, 40312, 0, 0, 0, 0, 0, 0, 40320, 40322, 40325, 40327, 40330, 
-    40333, 40336, 40341, 40346, 40351, 40356, 40360, 40364, 40368, 40372, 
-    40377, 40383, 40388, 40394, 40399, 40404, 40409, 40415, 40420, 40426, 
-    40432, 40436, 40440, 40445, 40450, 40455, 40460, 40465, 40473, 40481, 
-    40489, 40497, 40504, 40512, 40519, 40526, 40535, 40547, 40553, 40559, 
-    40567, 40575, 40584, 40593, 40601, 40609, 40618, 40627, 40632, 40640, 
-    40645, 40650, 40656, 40661, 40667, 40674, 40681, 40686, 40692, 40697, 
-    40700, 40704, 40707, 40711, 40715, 40719, 40725, 40731, 40737, 40743, 
-    40747, 40751, 40755, 40759, 40765, 40771, 40775, 40780, 40784, 40789, 
-    40794, 40799, 40802, 40806, 40809, 40813, 40820, 40828, 40839, 40850, 
-    40855, 40864, 40871, 40880, 40889, 40893, 40899, 40907, 40911, 40916, 
-    40921, 40927, 40933, 40939, 40946, 40950, 40954, 40959, 40962, 40964, 
-    40968, 40972, 40980, 40984, 40986, 40988, 40992, 41000, 41005, 41011, 
-    41021, 41028, 41033, 41037, 41041, 41045, 41048, 41051, 41054, 41058, 
-    41062, 41066, 41070, 41074, 41077, 41081, 41085, 41088, 41090, 41093, 
-    41095, 41099, 41103, 41105, 41111, 41114, 41119, 41123, 41127, 41129, 
-    41131, 41133, 41136, 41140, 41144, 41148, 41152, 41156, 41162, 41168, 
-    41170, 41172, 41174, 41176, 41179, 41181, 41185, 41187, 41191, 41194, 
-    41200, 41204, 41208, 41211, 41214, 41218, 41224, 41228, 41238, 41248, 
-    41252, 41258, 41264, 41267, 41271, 41274, 41279, 41283, 41289, 41293, 
-    41305, 41313, 41317, 41321, 41327, 41331, 41334, 41336, 41339, 41343, 
-    41347, 41354, 41358, 41362, 41366, 41369, 41374, 41379, 41384, 41389, 
-    41394, 41399, 41407, 41415, 41419, 41423, 41425, 41430, 41434, 41438, 
-    41446, 41454, 41460, 41466, 41475, 41484, 41489, 41494, 41502, 41510, 
-    41512, 41514, 41519, 41524, 41530, 41536, 41542, 41548, 41552, 41556, 
-    41563, 41570, 41576, 41582, 41592, 41602, 41610, 41618, 41620, 41624, 
-    41628, 41633, 41638, 41645, 41652, 41655, 41658, 41661, 41664, 41667, 
-    41672, 41676, 41681, 41686, 41689, 41692, 41695, 41698, 41701, 41705, 
-    41708, 41711, 41714, 41717, 41719, 41721, 41723, 41725, 41733, 41741, 
-    41747, 41751, 41757, 41767, 41773, 41779, 41785, 41793, 41801, 41812, 
-    41816, 41820, 41822, 41828, 41830, 41832, 41834, 41836, 41842, 41845, 
-    41851, 41857, 41861, 41865, 41869, 41872, 41876, 41880, 41882, 41891, 
-    41900, 41905, 41910, 41916, 41922, 41928, 41931, 41934, 41937, 41940, 
-    41942, 41947, 41952, 41957, 41963, 41969, 41977, 41985, 41991, 41997, 
-    42003, 42009, 42018, 42027, 42036, 42045, 42054, 42063, 42072, 42081, 
-    42090, 42099, 42107, 42119, 42129, 42144, 42147, 42152, 42158, 42164, 
-    42171, 42185, 42200, 42206, 42212, 42219, 42225, 42233, 42239, 42252, 
-    42266, 42271, 42277, 42284, 42287, 42290, 42292, 42295, 42298, 42300, 
-    42302, 42306, 42309, 42312, 42315, 42318, 42323, 42328, 42333, 42338, 
-    42343, 42346, 42348, 42350, 42352, 42356, 42360, 42364, 42370, 42375, 
-    42377, 42379, 42384, 42389, 42394, 42399, 42404, 42409, 42411, 42413, 
-    42422, 42426, 42434, 42443, 42445, 42450, 42455, 42463, 42467, 42469, 
-    42473, 42475, 42479, 42483, 42487, 42489, 42491, 42493, 42500, 42509, 
-    42518, 42527, 42536, 42545, 42554, 42563, 42572, 42580, 42588, 42597, 
-    42606, 42615, 42624, 42632, 42640, 42649, 42658, 42667, 42677, 42686, 
-    42696, 42705, 42715, 42724, 42734, 42744, 42753, 42763, 42772, 42782, 
-    42791, 42801, 42810, 42819, 42828, 42837, 42846, 42856, 42865, 42874, 
-    42883, 42893, 42902, 42911, 42920, 42929, 42939, 42949, 42958, 42967, 
-    42975, 42983, 42990, 42998, 43007, 43018, 43027, 43036, 43045, 43052, 
-    43059, 43066, 43075, 43084, 43093, 43102, 43109, 43114, 43123, 43128, 
-    43131, 43139, 43142, 43147, 43152, 43155, 43158, 43166, 43169, 43174, 
-    43177, 43184, 43189, 43197, 43200, 43203, 43206, 43211, 43216, 43219, 
-    43222, 43230, 43233, 43240, 43247, 43251, 43255, 43260, 43265, 43271, 
-    43276, 43282, 43288, 43293, 43299, 43307, 43313, 43321, 43329, 43335, 
-    43343, 43351, 43360, 43368, 43374, 43382, 43391, 43399, 43403, 43408, 
-    43421, 43434, 43438, 43442, 43446, 43450, 43460, 43464, 43469, 43474, 
-    43479, 43484, 43489, 43494, 43504, 43514, 43522, 43532, 43542, 43550, 
-    43560, 43570, 43578, 43588, 43598, 43606, 43614, 43624, 43634, 43637, 
-    43640, 43643, 43648, 43652, 43658, 43665, 43672, 43680, 43687, 43691, 
-    43695, 43699, 43703, 43705, 43709, 43713, 43718, 43723, 43730, 43737, 
-    43740, 43747, 43749, 43751, 43755, 43759, 43764, 43770, 43776, 43782, 
-    43788, 43797, 43806, 43815, 43819, 43821, 43825, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 43832, 43836, 43843, 43850, 43857, 43864, 43868, 43872, 
-    43876, 43880, 43885, 43891, 43896, 43902, 43908, 43914, 43920, 43928, 
-    43935, 43942, 43949, 43956, 43961, 43967, 43976, 43980, 43987, 43991, 
-    43995, 44001, 44007, 44013, 44019, 44023, 44027, 44030, 44033, 44037, 
-    44044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 44051, 44054, 44058, 44062, 44068, 44074, 44080, 44088, 44095, 
-    44099, 44107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 44112, 44115, 44118, 44121, 44124, 44127, 44130, 44133, 44136, 44139, 
-    44143, 44147, 44151, 44155, 44159, 44163, 44167, 44171, 44175, 44179, 
-    44183, 44186, 44189, 44192, 44195, 44198, 44201, 44204, 44207, 44210, 
-    44214, 44218, 44222, 44226, 44230, 44234, 44238, 44242, 44246, 44250, 
-    44254, 44260, 44266, 44272, 44279, 44286, 44293, 44300, 44307, 44314, 
-    44321, 44328, 44335, 44342, 44349, 44356, 44363, 44370, 44377, 44384, 
-    44391, 44396, 44402, 44408, 44414, 44419, 44425, 44431, 44437, 44442, 
-    44448, 44454, 44459, 44464, 44470, 44475, 44481, 44487, 44492, 44498, 
-    44504, 44509, 44515, 44521, 44527, 44533, 44539, 44544, 44550, 44556, 
-    44562, 44567, 44573, 44579, 44585, 44590, 44596, 44602, 44607, 44612, 
-    44618, 44623, 44629, 44635, 44640, 44646, 44652, 44657, 44663, 44669, 
-    44675, 44681, 44687, 44692, 44698, 44704, 44710, 44715, 44721, 44727, 
-    44733, 44738, 44744, 44750, 44755, 44760, 44766, 44771, 44777, 44783, 
-    44788, 44794, 44800, 44805, 44811, 44817, 44823, 44829, 44835, 44839, 
-    44844, 44849, 44854, 44859, 44864, 44869, 44874, 44879, 44884, 44889, 
-    44893, 44897, 44901, 44905, 44909, 44913, 44917, 44921, 44925, 44930, 
-    44935, 44940, 44945, 44950, 44955, 44964, 44973, 44982, 44991, 45000, 
-    45009, 45018, 45027, 45034, 45042, 45050, 45057, 45064, 45072, 45080, 
-    45087, 45094, 45102, 45110, 45117, 45124, 45132, 45140, 45147, 45154, 
-    45162, 45171, 45180, 45188, 45197, 45206, 45213, 45220, 45228, 45237, 
-    45246, 45254, 45263, 45272, 45279, 45286, 45295, 45304, 45312, 45320, 
-    45329, 45338, 45345, 45352, 45361, 45370, 45378, 45386, 45395, 45404, 
-    45411, 45418, 45427, 45436, 45444, 45453, 45462, 45470, 45480, 45490, 
-    45500, 45510, 45519, 45528, 45537, 45546, 45553, 45561, 45569, 45577, 
-    45585, 45590, 45595, 45604, 45612, 45619, 45628, 45636, 45643, 45652, 
-    45660, 45667, 45676, 45684, 45691, 45700, 45708, 45715, 45724, 45732, 
-    45739, 45748, 45756, 45763, 45772, 45780, 45787, 45796, 45804, 45811, 
-    45820, 45829, 45838, 45847, 45861, 45875, 45882, 45887, 45892, 45897, 
-    45902, 45907, 45912, 45917, 45922, 45930, 45938, 45946, 45954, 45959, 
-    45966, 45973, 45980, 45985, 45993, 46000, 46008, 46012, 46019, 46025, 
-    46032, 46036, 46042, 46048, 46054, 46058, 46061, 46065, 46069, 46076, 
-    46082, 46088, 46094, 46100, 46114, 46124, 46138, 46152, 46158, 46168, 
-    46182, 46185, 46188, 46195, 46203, 46208, 46213, 46221, 46233, 46245, 
-    46253, 46257, 46261, 46264, 46267, 46271, 46275, 46278, 46281, 46286, 
-    46291, 46297, 46303, 46308, 46313, 46319, 46325, 46330, 46335, 46340, 
-    46345, 46351, 46357, 46362, 46367, 46373, 46379, 46384, 46389, 46392, 
-    46395, 46404, 46406, 46408, 46411, 46415, 46421, 46423, 46426, 46433, 
-    46440, 46448, 46456, 46466, 46480, 46485, 46490, 46494, 46499, 46507, 
-    46515, 46524, 46533, 46542, 46551, 46556, 46561, 46567, 46573, 46579, 
-    46585, 46588, 46594, 46600, 46610, 46620, 46628, 46636, 46645, 46654, 
-    46658, 46666, 46674, 46682, 46690, 46699, 46708, 46717, 46726, 46731, 
-    46736, 46741, 46746, 46751, 46757, 46763, 46768, 46774, 46776, 46778, 
-    46780, 46782, 46785, 46788, 46790, 46792, 46794, 46798, 46802, 46804, 
-    46806, 46809, 46812, 46816, 46822, 46828, 46830, 46837, 46841, 46846, 
-    46851, 46853, 46863, 46869, 46875, 46881, 46887, 46893, 46899, 46904, 
-    46907, 46910, 46913, 46915, 46917, 46921, 46925, 46930, 46935, 46940, 
-    46943, 46947, 46952, 46955, 46959, 46964, 46969, 46974, 46979, 46984, 
-    46989, 46994, 46999, 47004, 47009, 47014, 47019, 47025, 47031, 47037, 
-    47039, 47042, 47044, 47047, 47049, 47051, 47053, 47055, 47057, 47059, 
-    47061, 47063, 47065, 47067, 47069, 47071, 47073, 47075, 47077, 47079, 
-    47081, 47086, 47091, 47096, 47101, 47106, 47111, 47116, 47121, 47126, 
-    47131, 47136, 47141, 47146, 47151, 47156, 47161, 47166, 47171, 47176, 
-    47181, 47185, 47189, 47193, 47199, 47205, 47210, 47215, 47220, 47225, 
-    47230, 47235, 47243, 47251, 47259, 47267, 47275, 47283, 47291, 47299, 
-    47305, 47310, 47315, 47320, 47323, 47327, 47331, 47335, 47339, 47343, 
-    47347, 47354, 47361, 47369, 47377, 47382, 47387, 47394, 47401, 47408, 
-    47415, 47418, 47421, 47426, 47428, 47432, 47437, 47439, 47441, 47443, 
-    47445, 47450, 47453, 47455, 47460, 47467, 47474, 47477, 47481, 47486, 
-    47491, 47499, 47505, 47511, 47523, 47530, 47537, 47542, 47547, 47553, 
-    47556, 47559, 47564, 47566, 47570, 47572, 47574, 47576, 47578, 47580, 
-    47582, 47587, 47589, 47591, 47593, 47595, 47599, 47601, 47604, 47609, 
-    47614, 47619, 47624, 47630, 47636, 47638, 47641, 47648, 47655, 47662, 
-    47669, 47673, 47677, 47679, 47681, 47685, 47691, 47696, 47698, 47702, 
-    47711, 47719, 47727, 47733, 47739, 47744, 47750, 47755, 47758, 47772, 
-    47775, 47780, 47785, 47791, 47801, 47803, 47809, 47815, 47819, 47826, 
-    47830, 47832, 47834, 47838, 47844, 47849, 47855, 47857, 47863, 47865, 
-    47871, 47873, 47875, 47880, 47882, 47886, 47891, 47893, 47898, 47903, 
-    47907, 47914, 0, 47924, 47930, 47933, 47939, 47942, 47947, 47952, 47956, 
-    47958, 47960, 47964, 47968, 47972, 47976, 47981, 47983, 47988, 47991, 
-    47994, 47997, 48001, 48005, 48010, 48014, 48019, 48024, 48028, 48033, 
-    48039, 48042, 48048, 48053, 48057, 48062, 48068, 48074, 48081, 48087, 
-    48094, 48101, 48103, 48110, 48114, 48120, 48126, 48131, 48137, 48141, 
-    48146, 48149, 48154, 48160, 48167, 48175, 48182, 48191, 48201, 48208, 
-    48214, 48218, 48225, 48230, 48239, 48242, 48245, 48254, 48264, 48271, 
-    48273, 48279, 48284, 48286, 48289, 48293, 48301, 48310, 48313, 48318, 
-    48323, 48331, 48339, 48347, 48355, 48361, 48367, 48373, 48381, 48386, 
-    48389, 48393, 48396, 48408, 48418, 48429, 48438, 48449, 48459, 48468, 
-    48474, 48482, 48486, 48494, 48498, 48506, 48513, 48520, 48529, 48538, 
-    48548, 48558, 48568, 48578, 48587, 48596, 48606, 48616, 48625, 48634, 
-    48640, 48646, 48652, 48658, 48664, 48670, 48676, 48682, 48688, 48695, 
-    48701, 48707, 48713, 48719, 48725, 48731, 48737, 48743, 48749, 48756, 
-    48763, 48770, 48777, 48784, 48791, 48798, 48805, 48812, 48819, 48827, 
-    48832, 48835, 48839, 48843, 48849, 48852, 48858, 48864, 48869, 48873, 
-    48878, 48884, 48891, 48894, 48901, 48908, 48912, 48921, 48930, 48935, 
-    48941, 48946, 48951, 48958, 48965, 48973, 48981, 48990, 48994, 49003, 
-    49008, 49012, 49019, 49023, 49030, 49038, 49043, 49051, 49055, 49060, 
-    49064, 49069, 49073, 49078, 49083, 49092, 49094, 49097, 49100, 49107, 
-    49114, 49119, 49127, 49133, 49139, 49144, 49147, 49152, 49157, 49162, 
-    49170, 49174, 49181, 49189, 49197, 49202, 49207, 49213, 49218, 49223, 
-    49229, 49234, 49237, 49241, 49245, 49252, 49261, 49266, 49275, 49284, 
-    49290, 49296, 49301, 49306, 49311, 49316, 49322, 49328, 49336, 49344, 
-    49350, 49356, 49361, 49366, 49373, 49380, 49386, 49389, 49392, 49396, 
-    49400, 49404, 49409, 49415, 49421, 49428, 49435, 49440, 49444, 49448, 
-    49452, 49456, 49460, 49464, 49468, 49472, 49476, 49480, 49484, 49488, 
-    49492, 49496, 49500, 49504, 49508, 49512, 49516, 49520, 49524, 49528, 
-    49532, 49536, 49540, 49544, 49548, 49552, 49556, 49560, 49564, 49568, 
-    49572, 49576, 49580, 49584, 49588, 49592, 49596, 49600, 49604, 49608, 
-    49612, 49616, 49620, 49624, 49628, 49632, 49636, 49640, 49644, 49648, 
-    49652, 49656, 49660, 49664, 49668, 49672, 49676, 49680, 49684, 49688, 
-    49692, 49696, 49700, 49704, 49708, 49712, 49716, 49720, 49724, 49728, 
-    49732, 49736, 49740, 49744, 49748, 49752, 49756, 49760, 49764, 49768, 
-    49772, 49776, 49780, 49784, 49788, 49792, 49796, 49800, 49804, 49808, 
-    49812, 49816, 49820, 49824, 49828, 49832, 49836, 49840, 49844, 49848, 
-    49852, 49856, 49860, 49864, 49868, 49872, 49876, 49880, 49884, 49888, 
-    49892, 49896, 49900, 49904, 49908, 49912, 49916, 49920, 49924, 49928, 
-    49932, 49936, 49940, 49944, 49948, 49952, 49956, 49960, 49964, 49968, 
-    49972, 49976, 49980, 49984, 49988, 49992, 49996, 50000, 50004, 50008, 
-    50012, 50016, 50020, 50024, 50028, 50032, 50036, 50040, 50044, 50048, 
-    50052, 50056, 50060, 50064, 50068, 50072, 50076, 50080, 50084, 50088, 
-    50092, 50096, 50100, 50104, 50108, 50112, 50116, 50120, 50124, 50128, 
-    50132, 50136, 50140, 50144, 50148, 50152, 50156, 50160, 50164, 50168, 
-    50172, 50176, 50180, 50184, 50188, 50192, 50196, 50200, 50204, 50208, 
-    50212, 50216, 50220, 50224, 50228, 50232, 50236, 50240, 50244, 50248, 
-    50252, 50256, 50260, 50264, 50268, 50272, 50276, 50280, 50284, 50288, 
-    50292, 50296, 50300, 50304, 50308, 50312, 50316, 50320, 50324, 50328, 
-    50332, 50336, 50340, 50344, 50348, 50352, 50356, 50360, 50364, 50368, 
-    50372, 50376, 50380, 50384, 50388, 50392, 50396, 50400, 50404, 50408, 
-    50412, 50416, 50420, 50424, 50428, 50432, 50436, 50440, 50444, 50448, 
-    50452, 50456, 50460, 50464, 50471, 50479, 50485, 50491, 50498, 50505, 
-    50511, 50517, 50523, 50529, 50534, 50539, 50544, 50549, 50555, 50561, 
-    50569, 50576, 50582, 50588, 50596, 50605, 50612, 50622, 50633, 50636, 
-    50639, 50643, 50647, 50654, 50661, 50672, 50683, 50693, 50703, 50710, 
-    50717, 50724, 50731, 50742, 50753, 50764, 50775, 50785, 50795, 50807, 
-    50819, 50830, 50841, 50853, 50865, 50874, 50884, 50894, 50905, 50916, 
-    50923, 50930, 50937, 50944, 50954, 50964, 50972, 50980, 50987, 50994, 
-    51001, 51008, 51015, 51020, 51025, 51031, 51039, 51049, 51059, 51069, 
-    51079, 51089, 51099, 51109, 51119, 51129, 51139, 51149, 51160, 51171, 
-    51181, 51191, 51202, 51213, 51223, 51233, 51244, 51255, 51265, 51275, 
-    51286, 51297, 51313, 51332, 51348, 51367, 51383, 51399, 51415, 51431, 
-    51442, 51454, 51465, 51477, 51496, 51515, 51523, 51529, 51536, 51543, 
-    51550, 51557, 51562, 51568, 51573, 51578, 51584, 51589, 51594, 51599, 
-    51604, 51609, 51616, 51621, 51628, 51633, 51638, 51642, 51646, 51653, 
-    51660, 51667, 51674, 51681, 51688, 51701, 51714, 51727, 51740, 51748, 
-    51756, 51762, 51768, 51775, 51782, 51789, 51796, 51800, 51805, 51813, 
-    51821, 51829, 51836, 51840, 51848, 51856, 51860, 51864, 51869, 51876, 
-    51884, 51892, 51911, 51930, 51949, 51968, 51987, 52006, 52025, 52044, 
-    52050, 52057, 52066, 52074, 52082, 52087, 52090, 52093, 52098, 52101, 
-    52120, 52127, 52133, 52139, 52143, 52146, 52149, 52152, 52164, 52177, 
-    52184, 52191, 52194, 52198, 52201, 52206, 52211, 52216, 52222, 52231, 
-    52238, 52245, 52253, 52260, 52267, 52270, 52276, 52282, 52285, 52288, 
-    52293, 52298, 52304, 52310, 52314, 52319, 52326, 52330, 52336, 52340, 
-    52344, 52352, 52364, 52373, 52377, 52379, 52388, 52397, 52403, 52406, 
-    52412, 52418, 52423, 52428, 52433, 52438, 52443, 52448, 52450, 52456, 
-    52461, 52468, 52472, 52478, 52481, 52485, 52492, 52499, 52501, 52503, 
-    52509, 52515, 52521, 52530, 52539, 52546, 52553, 52559, 52565, 52570, 
-    52575, 52580, 52586, 52592, 52597, 52604, 52608, 52612, 52625, 52638, 
-    52650, 52659, 52665, 52672, 52677, 52682, 52687, 52692, 52697, 52699, 
-    52706, 52713, 52720, 52727, 52734, 52742, 52748, 52753, 52759, 52765, 
-    52771, 52778, 52784, 52792, 52800, 52808, 52816, 52823, 52829, 52835, 
-    52844, 52848, 52857, 52866, 52875, 52883, 52887, 52893, 52900, 52907, 
-    52911, 52917, 52924, 52929, 52934, 52940, 52945, 52950, 52957, 52964, 
-    52969, 52974, 52982, 52990, 53000, 53010, 53017, 53024, 53028, 53032, 
-    53044, 53050, 53056, 53061, 53066, 53073, 53080, 53086, 53092, 53101, 
-    53109, 53117, 53124, 53131, 53138, 53144, 53151, 53157, 53164, 53171, 
-    53178, 53185, 53191, 53196, 53205, 53215, 53222, 53231, 53237, 53242, 
-    53247, 53257, 53263, 53269, 53275, 53283, 53288, 53295, 53302, 53313, 
-    53320, 53327, 53334, 53341, 53348, 53355, 53362, 53374, 53386, 53397, 
-    53408, 53421, 53434, 53439, 53444, 53453, 53462, 53469, 53476, 53485, 
-    53494, 53502, 53510, 53518, 53526, 53536, 53546, 53560, 53574, 53582, 
-    53590, 53602, 53614, 53622, 53630, 53640, 53650, 53655, 53660, 53669, 
-    53678, 53683, 53688, 53696, 53702, 53708, 53716, 53724, 53737, 53750, 
-    53754, 53758, 53765, 53772, 53779, 53787, 53795, 53804, 53813, 53819, 
-    53825, 53832, 53839, 53846, 53853, 53862, 53871, 53874, 53877, 53882, 
-    53887, 53893, 53899, 53906, 53913, 53923, 53933, 53940, 53947, 53955, 
-    53963, 53971, 53979, 53987, 53995, 54001, 54007, 54011, 54015, 54022, 
-    54029, 54034, 54039, 54044, 54049, 54055, 54069, 54076, 54083, 54087, 
-    54089, 54091, 54096, 54101, 54106, 54111, 54119, 54126, 54133, 54141, 
-    54153, 54161, 54169, 54180, 54184, 54188, 54194, 54202, 54215, 54222, 
-    54229, 54236, 54241, 54248, 54257, 54265, 54271, 54277, 54283, 54292, 
-    54301, 54309, 54318, 54323, 54326, 54331, 54337, 54343, 54349, 54355, 
-    54359, 54362, 54366, 54370, 54376, 54382, 54388, 54394, 54398, 54402, 
-    54409, 54416, 54423, 54430, 54437, 54444, 54454, 54464, 54471, 54478, 
-    54486, 54494, 54498, 54503, 54508, 54514, 54520, 54523, 54526, 54529, 
-    54532, 54536, 54541, 54546, 54551, 54556, 54561, 54565, 54569, 54573, 
-    54577, 54581, 54585, 54589, 54595, 54599, 54605, 54610, 54617, 54625, 
-    54632, 54640, 54647, 54655, 54664, 54671, 54681, 54692, 54698, 54707, 
-    54713, 54722, 54731, 54737, 54743, 54747, 54751, 54760, 54769, 54776, 
-    54783, 54792, 0, 0, 0, 54801, 54806, 54810, 54814, 54819, 54824, 54829, 
-    54837, 54845, 54848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32226, 32233, 32240, 32247, 32254, 
+    32263, 32272, 32281, 0, 0, 0, 0, 0, 0, 0, 0, 32290, 32295, 32300, 32305, 
+    32310, 32319, 32330, 32339, 32350, 32356, 32369, 32375, 32382, 32389, 
+    32394, 32400, 32406, 32417, 32426, 32433, 32440, 32449, 32456, 32465, 
+    32475, 32485, 32492, 32499, 32506, 32516, 32521, 32529, 32535, 32543, 
+    32552, 32557, 32564, 32570, 32575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32580, 
+    32585, 32591, 32598, 32606, 32612, 32618, 32624, 32629, 32636, 32642, 
+    32648, 32654, 32662, 32667, 32675, 32680, 32686, 32692, 32699, 32707, 
+    32714, 32720, 32727, 32734, 32740, 32747, 32754, 32760, 32765, 32771, 
+    32779, 32787, 32793, 32799, 32805, 32811, 32819, 32823, 32829, 32835, 
+    32841, 32847, 32853, 32859, 32863, 32868, 32873, 32880, 32885, 32889, 
+    32895, 32900, 32905, 32909, 32914, 32919, 32923, 32927, 32932, 32939, 
+    32943, 32948, 32953, 32957, 32962, 32966, 32971, 32975, 32981, 32986, 
+    32993, 32998, 33003, 33007, 33012, 33017, 33024, 33029, 33035, 33040, 
+    33044, 33049, 33053, 33058, 33065, 33072, 33077, 33082, 33086, 33092, 
+    33098, 33103, 33108, 33113, 33119, 33124, 33130, 33135, 33141, 33147, 
+    33153, 33160, 33167, 33174, 33181, 33188, 33195, 33200, 33208, 33217, 
+    33226, 33235, 33244, 33253, 33262, 33274, 33283, 33292, 33301, 33308, 
+    33313, 33320, 33328, 33336, 33343, 33350, 33357, 33364, 33372, 33381, 
+    33390, 33399, 33408, 33417, 33426, 33435, 33444, 33453, 33462, 33471, 
+    33480, 33489, 33498, 33506, 33515, 33526, 33534, 33543, 33554, 33563, 
+    33572, 33581, 33590, 33598, 33607, 33614, 33619, 33627, 33632, 33639, 
+    33644, 33653, 33659, 33666, 33673, 33678, 33683, 33691, 33699, 33708, 
+    33717, 33722, 33729, 33740, 33748, 33757, 33763, 33769, 33774, 33781, 
+    33786, 33795, 33800, 33805, 33810, 33817, 33824, 33829, 33838, 33846, 
+    33851, 33856, 33863, 33870, 33874, 33878, 33881, 33884, 33887, 33890, 
+    33893, 33896, 33903, 33906, 33909, 33914, 33918, 33922, 33926, 33930, 
+    33934, 33943, 33949, 33955, 33961, 33969, 33977, 33983, 33989, 33996, 
+    34002, 34007, 34013, 34019, 34025, 34032, 34038, 34046, 34052, 34059, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34065, 34072, 
+    34079, 34084, 34093, 34101, 34109, 34116, 34123, 34130, 34137, 34145, 
+    34153, 34163, 34173, 34181, 34189, 34197, 34205, 34214, 34223, 34231, 
+    34239, 34248, 34257, 34267, 34277, 34286, 34295, 34303, 34311, 34319, 
+    34327, 34337, 34347, 34355, 34363, 34371, 34379, 34387, 34395, 34403, 
+    34411, 34419, 34427, 34435, 34443, 34452, 34461, 34470, 34479, 34489, 
+    34499, 34506, 34513, 34521, 34529, 34538, 34547, 34555, 34563, 34575, 
+    34587, 34596, 34605, 34614, 34623, 34630, 34637, 34645, 34653, 34661, 
+    34669, 34677, 34685, 34693, 34701, 34710, 34719, 34728, 34737, 34746, 
+    34755, 34765, 34775, 34785, 34795, 34804, 34813, 34820, 34827, 34835, 
+    34843, 34851, 34859, 34867, 34875, 34887, 34899, 34908, 34917, 34925, 
+    34933, 34941, 34949, 34960, 34971, 34982, 34993, 35005, 35017, 35025, 
+    35033, 35041, 35049, 35058, 35067, 35076, 35085, 35093, 35101, 35109, 
+    35117, 35125, 35133, 35142, 35151, 35161, 35171, 35178, 35185, 35193, 
+    35201, 35209, 35217, 35224, 35231, 35239, 35247, 35255, 35263, 35271, 
+    35279, 35287, 35295, 35303, 35311, 35319, 35327, 35335, 35343, 35351, 
+    35359, 35368, 35377, 35386, 35394, 35403, 35412, 35421, 35430, 35440, 
+    35449, 35456, 35461, 35468, 35475, 35483, 35491, 35500, 35509, 35519, 
+    35529, 35540, 35551, 35560, 35569, 35579, 35589, 35598, 35607, 35617, 
+    35627, 35638, 35649, 35658, 35667, 35677, 35687, 35694, 35701, 35709, 
+    35717, 35723, 35729, 35738, 35747, 35757, 35767, 35778, 35789, 35798, 
+    35807, 35817, 35827, 35836, 35845, 35853, 35861, 35868, 35875, 35883, 
+    35891, 35900, 35909, 35919, 35929, 35940, 35951, 35960, 35969, 35979, 
+    35989, 35998, 36007, 36017, 36027, 36038, 36049, 36058, 36067, 36077, 
+    36087, 36094, 36101, 36109, 36117, 36126, 36135, 36145, 36155, 36166, 
+    36177, 36186, 36195, 36205, 36215, 36223, 36231, 36239, 36247, 36256, 
+    36265, 36272, 36279, 36286, 36293, 36300, 36307, 36315, 36323, 36331, 
+    36339, 36350, 36361, 36372, 36383, 36394, 36405, 36413, 36421, 36432, 
+    36443, 36454, 36465, 36476, 36487, 36495, 36503, 36514, 36525, 36536, 0, 
+    0, 36547, 36555, 36563, 36574, 36585, 36596, 0, 0, 36607, 36615, 36623, 
+    36634, 36645, 36656, 36667, 36678, 36689, 36697, 36705, 36716, 36727, 
+    36738, 36749, 36760, 36771, 36779, 36787, 36798, 36809, 36820, 36831, 
+    36842, 36853, 36861, 36869, 36880, 36891, 36902, 36913, 36924, 36935, 
+    36943, 36951, 36962, 36973, 36984, 0, 0, 36995, 37003, 37011, 37022, 
+    37033, 37044, 0, 0, 37055, 37063, 37071, 37082, 37093, 37104, 37115, 
+    37126, 0, 37137, 0, 37145, 0, 37156, 0, 37167, 37178, 37186, 37194, 
+    37205, 37216, 37227, 37238, 37249, 37260, 37268, 37276, 37287, 37298, 
+    37309, 37320, 37331, 37342, 37350, 37358, 37366, 37374, 37382, 37390, 
+    37398, 37406, 37414, 37422, 37430, 37438, 37446, 0, 0, 37454, 37465, 
+    37476, 37490, 37504, 37518, 37532, 37546, 37560, 37571, 37582, 37596, 
+    37610, 37624, 37638, 37652, 37666, 37677, 37688, 37702, 37716, 37730, 
+    37744, 37758, 37772, 37783, 37794, 37808, 37822, 37836, 37850, 37864, 
+    37878, 37889, 37900, 37914, 37928, 37942, 37956, 37970, 37984, 37995, 
+    38006, 38020, 38034, 38048, 38062, 38076, 38090, 38098, 38106, 38117, 
+    38125, 0, 38136, 38144, 38155, 38163, 38171, 38179, 38187, 38195, 38198, 
+    38201, 38204, 38207, 38213, 38224, 38232, 0, 38243, 38251, 38262, 38270, 
+    38278, 38286, 38294, 38302, 38308, 38314, 38320, 38328, 38336, 38347, 0, 
+    0, 38358, 38366, 38377, 38385, 38393, 38401, 0, 38409, 38415, 38421, 
+    38427, 38435, 38443, 38454, 38465, 38473, 38481, 38489, 38500, 38508, 
+    38516, 38524, 38532, 38540, 38546, 38552, 0, 0, 38555, 38566, 38574, 0, 
+    38585, 38593, 38604, 38612, 38620, 38628, 38636, 38644, 38647, 0, 38650, 
+    38654, 38658, 38662, 38666, 38670, 38674, 38678, 38682, 38686, 38690, 
+    38694, 38700, 38706, 38712, 38715, 38718, 38720, 38724, 38728, 38732, 
+    38736, 38738, 38742, 38746, 38752, 38758, 38765, 38772, 38777, 38782, 
+    38788, 38794, 38796, 38799, 38801, 38805, 38809, 38813, 38816, 38820, 
+    38824, 38828, 38832, 38836, 38842, 38846, 38850, 38856, 38861, 38868, 
+    38870, 38873, 38877, 38881, 38886, 38892, 38894, 38903, 38912, 38915, 
+    38919, 38921, 38923, 38925, 38928, 38934, 38936, 38940, 38944, 38951, 
+    38958, 38962, 38967, 38972, 38977, 38982, 38986, 38990, 38993, 38997, 
+    39001, 39008, 39013, 39017, 39021, 39026, 39030, 39034, 39039, 39044, 
+    39048, 39052, 39056, 39058, 39063, 39068, 39072, 39076, 39080, 39084, 0, 
+    39088, 39092, 39096, 39102, 39108, 39114, 39120, 39127, 39134, 39139, 
+    39144, 39148, 0, 0, 39154, 39157, 39160, 39163, 39166, 39169, 39172, 
+    39176, 39180, 39185, 39190, 39195, 39202, 39206, 39209, 39212, 39215, 
+    39218, 39221, 39224, 39227, 39230, 39233, 39237, 39241, 39246, 39251, 0, 
+    39256, 39262, 39268, 39274, 39281, 39288, 39295, 39302, 39308, 39314, 
+    39321, 39328, 39335, 0, 0, 0, 39342, 39345, 39348, 39351, 39356, 39359, 
+    39362, 39365, 39368, 39371, 39374, 39378, 39381, 39384, 39387, 39390, 
+    39393, 39398, 39401, 39404, 39407, 39410, 39413, 39418, 39421, 39424, 
+    39429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    39434, 39439, 39444, 39451, 39459, 39464, 39469, 39473, 39477, 39482, 
+    39489, 39496, 39500, 39505, 39510, 39515, 39520, 39527, 39532, 39537, 
+    39542, 39551, 39558, 39565, 39569, 39574, 39580, 39585, 39592, 39601, 
+    39610, 39614, 39618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39622, 
+    39626, 39634, 39638, 39642, 39647, 39651, 39655, 39659, 39661, 39665, 
+    39669, 39673, 39678, 39682, 39686, 39694, 39697, 39701, 39704, 39707, 
+    39713, 39717, 39720, 39726, 39730, 39734, 39738, 39741, 39745, 39748, 
+    39752, 39754, 39757, 39760, 39764, 39766, 39770, 39773, 39776, 39781, 
+    39786, 39793, 39796, 39799, 39803, 39808, 39811, 39814, 39817, 39821, 
+    39826, 39829, 39832, 39834, 39837, 39840, 39843, 39847, 39852, 39855, 
+    39859, 39863, 39867, 39871, 39876, 39882, 39887, 39892, 39898, 39903, 
+    39908, 39912, 39916, 39921, 39925, 39929, 39932, 39934, 39939, 39945, 
+    39952, 39959, 39966, 39973, 39980, 39987, 39994, 40001, 40009, 40016, 
+    40024, 40031, 40038, 40046, 40054, 40059, 40064, 40069, 40074, 40079, 
+    40084, 40089, 40094, 40099, 40104, 40110, 40116, 40122, 40128, 40135, 
+    40143, 40150, 40156, 40162, 40168, 40174, 40180, 40186, 40192, 40198, 
+    40204, 40211, 40218, 40225, 40232, 40240, 40249, 40257, 40268, 40276, 
+    40284, 40293, 40300, 40309, 40318, 40326, 40335, 0, 0, 0, 0, 0, 0, 40343, 
+    40345, 40348, 40350, 40353, 40356, 40359, 40364, 40369, 40374, 40379, 
+    40383, 40387, 40391, 40395, 40400, 40406, 40411, 40417, 40422, 40427, 
+    40432, 40438, 40443, 40449, 40455, 40459, 40463, 40468, 40473, 40478, 
+    40483, 40488, 40496, 40504, 40512, 40520, 40527, 40535, 40542, 40549, 
+    40558, 40570, 40576, 40582, 40590, 40598, 40607, 40616, 40624, 40632, 
+    40641, 40650, 40655, 40663, 40668, 40673, 40679, 40684, 40690, 40697, 
+    40704, 40709, 40715, 40720, 40723, 40727, 40730, 40734, 40738, 40742, 
+    40748, 40754, 40760, 40766, 40770, 40774, 40778, 40782, 40788, 40794, 
+    40798, 40803, 40807, 40812, 40817, 40822, 40825, 40829, 40832, 40836, 
+    40843, 40851, 40862, 40873, 40878, 40887, 40894, 40903, 40912, 40916, 
+    40922, 40930, 40934, 40939, 40944, 40950, 40956, 40962, 40969, 40973, 
+    40977, 40982, 40985, 40987, 40991, 40995, 41003, 41007, 41009, 41011, 
+    41015, 41023, 41028, 41034, 41044, 41051, 41056, 41060, 41064, 41068, 
+    41071, 41074, 41077, 41081, 41085, 41089, 41093, 41097, 41100, 41104, 
+    41108, 41111, 41113, 41116, 41118, 41122, 41126, 41128, 41134, 41137, 
+    41142, 41146, 41150, 41152, 41154, 41156, 41159, 41163, 41167, 41171, 
+    41175, 41179, 41185, 41191, 41193, 41195, 41197, 41199, 41202, 41204, 
+    41208, 41210, 41214, 41217, 41223, 41227, 41231, 41234, 41237, 41241, 
+    41247, 41251, 41261, 41271, 41275, 41281, 41287, 41290, 41294, 41297, 
+    41302, 41306, 41312, 41316, 41328, 41336, 41340, 41344, 41350, 41354, 
+    41357, 41359, 41362, 41366, 41370, 41377, 41381, 41385, 41389, 41392, 
+    41397, 41402, 41407, 41412, 41417, 41422, 41430, 41438, 41442, 41446, 
+    41448, 41453, 41457, 41461, 41469, 41477, 41483, 41489, 41498, 41507, 
+    41512, 41517, 41525, 41533, 41535, 41537, 41542, 41547, 41553, 41559, 
+    41565, 41571, 41575, 41579, 41586, 41593, 41599, 41605, 41615, 41625, 
+    41633, 41641, 41643, 41647, 41651, 41656, 41661, 41668, 41675, 41678, 
+    41681, 41684, 41687, 41690, 41695, 41699, 41704, 41709, 41712, 41715, 
+    41718, 41721, 41724, 41728, 41731, 41734, 41737, 41740, 41742, 41744, 
+    41746, 41748, 41756, 41764, 41770, 41774, 41780, 41790, 41796, 41802, 
+    41808, 41816, 41824, 41835, 41839, 41843, 41845, 41851, 41853, 41855, 
+    41857, 41859, 41865, 41868, 41874, 41880, 41884, 41888, 41892, 41895, 
+    41899, 41903, 41905, 41914, 41923, 41928, 41933, 41939, 41945, 41951, 
+    41954, 41957, 41960, 41963, 41965, 41970, 41975, 41980, 41986, 41992, 
+    42000, 42008, 42014, 42020, 42026, 42032, 42041, 42050, 42059, 42068, 
+    42077, 42086, 42095, 42104, 42113, 42122, 42130, 42142, 42152, 42167, 
+    42170, 42175, 42181, 42187, 42194, 42208, 42223, 42229, 42235, 42242, 
+    42248, 42256, 42262, 42275, 42289, 42294, 42300, 42307, 42310, 42313, 
+    42315, 42318, 42321, 42323, 42325, 42329, 42332, 42335, 42338, 42341, 
+    42346, 42351, 42356, 42361, 42366, 42369, 42371, 42373, 42375, 42379, 
+    42383, 42387, 42393, 42398, 42400, 42402, 42407, 42412, 42417, 42422, 
+    42427, 42432, 42434, 42436, 42445, 42449, 42457, 42466, 42468, 42473, 
+    42478, 42486, 42490, 42492, 42496, 42498, 42502, 42506, 42510, 42512, 
+    42514, 42516, 42523, 42532, 42541, 42550, 42559, 42568, 42577, 42586, 
+    42595, 42603, 42611, 42620, 42629, 42638, 42647, 42655, 42663, 42672, 
+    42681, 42690, 42700, 42709, 42719, 42728, 42738, 42747, 42757, 42767, 
+    42776, 42786, 42795, 42805, 42814, 42824, 42833, 42842, 42851, 42860, 
+    42869, 42879, 42888, 42897, 42906, 42916, 42925, 42934, 42943, 42952, 
+    42962, 42972, 42981, 42990, 42998, 43006, 43013, 43021, 43030, 43041, 
+    43050, 43059, 43068, 43075, 43082, 43089, 43098, 43107, 43116, 43125, 
+    43132, 43137, 43146, 43151, 43154, 43162, 43165, 43170, 43175, 43178, 
+    43181, 43189, 43192, 43197, 43200, 43207, 43212, 43220, 43223, 43226, 
+    43229, 43234, 43239, 43242, 43245, 43253, 43256, 43263, 43270, 43274, 
+    43278, 43283, 43288, 43294, 43299, 43305, 43311, 43316, 43322, 43330, 
+    43336, 43344, 43352, 43358, 43366, 43374, 43383, 43391, 43397, 43405, 
+    43414, 43422, 43426, 43431, 43444, 43457, 43461, 43465, 43469, 43473, 
+    43483, 43487, 43492, 43497, 43502, 43507, 43512, 43517, 43527, 43537, 
+    43545, 43555, 43565, 43573, 43583, 43593, 43601, 43611, 43621, 43629, 
+    43637, 43647, 43657, 43660, 43663, 43666, 43671, 43675, 43681, 43688, 
+    43695, 43703, 43710, 43714, 43718, 43722, 43726, 43728, 43732, 43736, 
+    43741, 43746, 43753, 43760, 43763, 43770, 43772, 43774, 43778, 43782, 
+    43787, 43793, 43799, 43805, 43811, 43820, 43829, 43838, 43842, 43844, 
+    43848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43855, 43859, 43866, 43873, 
+    43880, 43887, 43891, 43895, 43899, 43903, 43908, 43914, 43919, 43925, 
+    43931, 43937, 43943, 43951, 43958, 43965, 43972, 43979, 43984, 43990, 
+    43999, 44003, 44010, 44014, 44018, 44024, 44030, 44036, 44042, 44046, 
+    44050, 44053, 44056, 44060, 44067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44074, 44077, 44081, 44085, 44091, 
+    44097, 44103, 44111, 44118, 44122, 44130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44135, 44138, 44141, 44144, 44147, 
+    44150, 44153, 44156, 44159, 44162, 44166, 44170, 44174, 44178, 44182, 
+    44186, 44190, 44194, 44198, 44202, 44206, 44209, 44212, 44215, 44218, 
+    44221, 44224, 44227, 44230, 44233, 44237, 44241, 44245, 44249, 44253, 
+    44257, 44261, 44265, 44269, 44273, 44277, 44283, 44289, 44295, 44302, 
+    44309, 44316, 44323, 44330, 44337, 44344, 44351, 44358, 44365, 44372, 
+    44379, 44386, 44393, 44400, 44407, 44414, 44419, 44425, 44431, 44437, 
+    44442, 44448, 44454, 44460, 44465, 44471, 44477, 44482, 44487, 44493, 
+    44498, 44504, 44510, 44515, 44521, 44527, 44532, 44538, 44544, 44550, 
+    44556, 44562, 44567, 44573, 44579, 44585, 44590, 44596, 44602, 44608, 
+    44613, 44619, 44625, 44630, 44635, 44641, 44646, 44652, 44658, 44663, 
+    44669, 44675, 44680, 44686, 44692, 44698, 44704, 44710, 44715, 44721, 
+    44727, 44733, 44738, 44744, 44750, 44756, 44761, 44767, 44773, 44778, 
+    44783, 44789, 44794, 44800, 44806, 44811, 44817, 44823, 44828, 44834, 
+    44840, 44846, 44852, 44858, 44862, 44867, 44872, 44877, 44882, 44887, 
+    44892, 44897, 44902, 44907, 44912, 44916, 44920, 44924, 44928, 44932, 
+    44936, 44940, 44944, 44948, 44953, 44958, 44963, 44968, 44973, 44978, 
+    44987, 44996, 45005, 45014, 45023, 45032, 45041, 45050, 45057, 45065, 
+    45073, 45080, 45087, 45095, 45103, 45110, 45117, 45125, 45133, 45140, 
+    45147, 45155, 45163, 45170, 45177, 45185, 45194, 45203, 45211, 45220, 
+    45229, 45236, 45243, 45251, 45260, 45269, 45277, 45286, 45295, 45302, 
+    45309, 45318, 45327, 45335, 45343, 45352, 45361, 45368, 45375, 45384, 
+    45393, 45401, 45409, 45418, 45427, 45434, 45441, 45450, 45459, 45467, 
+    45476, 45485, 45493, 45503, 45513, 45523, 45533, 45542, 45551, 45560, 
+    45569, 45576, 45584, 45592, 45600, 45608, 45613, 45618, 45627, 45635, 
+    45642, 45651, 45659, 45666, 45675, 45683, 45690, 45699, 45707, 45714, 
+    45723, 45731, 45738, 45747, 45755, 45762, 45771, 45779, 45786, 45795, 
+    45803, 45810, 45819, 45827, 45834, 45843, 45852, 45861, 45870, 45884, 
+    45898, 45905, 45910, 45915, 45920, 45925, 45930, 45935, 45940, 45945, 
+    45953, 45961, 45969, 45977, 45982, 45989, 45996, 46003, 46008, 46016, 
+    46023, 46031, 46035, 46042, 46048, 46055, 46059, 46065, 46071, 46077, 
+    46081, 46084, 46088, 46092, 46099, 46105, 46111, 46117, 46123, 46137, 
+    46147, 46161, 46175, 46181, 46191, 46205, 46208, 46211, 46218, 46226, 
+    46231, 46236, 46244, 46256, 46268, 46276, 46280, 46284, 46287, 46290, 
+    46294, 46298, 46301, 46304, 46309, 46314, 46320, 46326, 46331, 46336, 
+    46342, 46348, 46353, 46358, 46363, 46368, 46374, 46380, 46385, 46390, 
+    46396, 46402, 46407, 46412, 46415, 46418, 46427, 46429, 46431, 46434, 
+    46438, 46444, 46446, 46449, 46456, 46463, 46471, 46479, 46489, 46503, 
+    46508, 46513, 46517, 46522, 46530, 46538, 46547, 46556, 46565, 46574, 
+    46579, 46584, 46590, 46596, 46602, 46608, 46611, 46617, 46623, 46633, 
+    46643, 46651, 46659, 46668, 46677, 46681, 46689, 46697, 46705, 46713, 
+    46722, 46731, 46740, 46749, 46754, 46759, 46764, 46769, 46774, 46780, 
+    46786, 46791, 46797, 46799, 46801, 46803, 46805, 46808, 46811, 46813, 
+    46815, 46817, 46821, 46825, 46827, 46829, 46832, 46835, 46839, 46845, 
+    46851, 46853, 46860, 46864, 46869, 46874, 46876, 46886, 46892, 46898, 
+    46904, 46910, 46916, 46922, 46927, 46930, 46933, 46936, 46938, 46940, 
+    46944, 46948, 46953, 46958, 46963, 46966, 46970, 46975, 46978, 46982, 
+    46987, 46992, 46997, 47002, 47007, 47012, 47017, 47022, 47027, 47032, 
+    47037, 47042, 47048, 47054, 47060, 47062, 47065, 47067, 47070, 47072, 
+    47074, 47076, 47078, 47080, 47082, 47084, 47086, 47088, 47090, 47092, 
+    47094, 47096, 47098, 47100, 47102, 47104, 47109, 47114, 47119, 47124, 
+    47129, 47134, 47139, 47144, 47149, 47154, 47159, 47164, 47169, 47174, 
+    47179, 47184, 47189, 47194, 47199, 47204, 47208, 47212, 47216, 47222, 
+    47228, 47233, 47238, 47243, 47248, 47253, 47258, 47266, 47274, 47282, 
+    47290, 47298, 47306, 47314, 47322, 47328, 47333, 47338, 47343, 47346, 
+    47350, 47354, 47358, 47362, 47366, 47370, 47377, 47384, 47392, 47400, 
+    47405, 47410, 47417, 47424, 47431, 47438, 47441, 47444, 47449, 47451, 
+    47455, 47460, 47462, 47464, 47466, 47468, 47473, 47476, 47478, 47483, 
+    47490, 47497, 47500, 47504, 47509, 47514, 47522, 47528, 47534, 47546, 
+    47553, 47560, 47565, 47570, 47576, 47579, 47582, 47587, 47589, 47593, 
+    47595, 47597, 47599, 47601, 47603, 47605, 47610, 47612, 47614, 47616, 
+    47618, 47622, 47624, 47627, 47632, 47637, 47642, 47647, 47653, 47659, 
+    47661, 47664, 47671, 47678, 47685, 47692, 47696, 47700, 47702, 47704, 
+    47708, 47714, 47719, 47721, 47725, 47734, 47742, 47750, 47756, 47762, 
+    47767, 47773, 47778, 47781, 47795, 47798, 47803, 47808, 47814, 47824, 
+    47826, 47832, 47838, 47842, 47849, 47853, 47855, 47857, 47861, 47867, 
+    47872, 47878, 47880, 47886, 47888, 47894, 47896, 47898, 47903, 47905, 
+    47909, 47914, 47916, 47921, 47926, 47930, 47937, 0, 47947, 47953, 47956, 
+    47962, 47965, 47970, 47975, 47979, 47981, 47983, 47987, 47991, 47995, 
+    47999, 48004, 48006, 48011, 48014, 48017, 48020, 48024, 48028, 48033, 
+    48037, 48042, 48047, 48051, 48056, 48062, 48065, 48071, 48076, 48080, 
+    48085, 48091, 48097, 48104, 48110, 48117, 48124, 48126, 48133, 48137, 
+    48143, 48149, 48154, 48160, 48164, 48169, 48172, 48177, 48183, 48190, 
+    48198, 48205, 48214, 48224, 48231, 48237, 48241, 48248, 48253, 48262, 
+    48265, 48268, 48277, 48287, 48294, 48296, 48302, 48307, 48309, 48312, 
+    48316, 48324, 48333, 48336, 48341, 48346, 48354, 48362, 48370, 48378, 
+    48384, 48390, 48396, 48404, 48409, 48412, 48416, 48419, 48431, 48441, 
+    48452, 48461, 48472, 48482, 48491, 48497, 48505, 48509, 48517, 48521, 
+    48529, 48536, 48543, 48552, 48561, 48571, 48581, 48591, 48601, 48610, 
+    48619, 48629, 48639, 48648, 48657, 48663, 48669, 48675, 48681, 48687, 
+    48693, 48699, 48705, 48711, 48718, 48724, 48730, 48736, 48742, 48748, 
+    48754, 48760, 48766, 48772, 48779, 48786, 48793, 48800, 48807, 48814, 
+    48821, 48828, 48835, 48842, 48850, 48855, 48858, 48862, 48866, 48872, 
+    48875, 48881, 48887, 48892, 48896, 48901, 48907, 48914, 48917, 48924, 
+    48931, 48935, 48944, 48953, 48958, 48964, 48969, 48974, 48981, 48988, 
+    48996, 49004, 49013, 49017, 49026, 49031, 49035, 49042, 49046, 49053, 
+    49061, 49066, 49074, 49078, 49083, 49087, 49092, 49096, 49101, 49106, 
+    49115, 49117, 49120, 49123, 49130, 49137, 49142, 49150, 49156, 49162, 
+    49167, 49170, 49175, 49180, 49185, 49193, 49197, 49204, 49212, 49220, 
+    49225, 49230, 49236, 49241, 49246, 49252, 49257, 49260, 49264, 49268, 
+    49275, 49284, 49289, 49298, 49307, 49313, 49319, 49324, 49329, 49334, 
+    49339, 49345, 49351, 49359, 49367, 49373, 49379, 49384, 49389, 49396, 
+    49403, 49409, 49412, 49415, 49419, 49423, 49427, 49432, 49438, 49444, 
+    49451, 49458, 49463, 49467, 49471, 49475, 49479, 49483, 49487, 49491, 
+    49495, 49499, 49503, 49507, 49511, 49515, 49519, 49523, 49527, 49531, 
+    49535, 49539, 49543, 49547, 49551, 49555, 49559, 49563, 49567, 49571, 
+    49575, 49579, 49583, 49587, 49591, 49595, 49599, 49603, 49607, 49611, 
+    49615, 49619, 49623, 49627, 49631, 49635, 49639, 49643, 49647, 49651, 
+    49655, 49659, 49663, 49667, 49671, 49675, 49679, 49683, 49687, 49691, 
+    49695, 49699, 49703, 49707, 49711, 49715, 49719, 49723, 49727, 49731, 
+    49735, 49739, 49743, 49747, 49751, 49755, 49759, 49763, 49767, 49771, 
+    49775, 49779, 49783, 49787, 49791, 49795, 49799, 49803, 49807, 49811, 
+    49815, 49819, 49823, 49827, 49831, 49835, 49839, 49843, 49847, 49851, 
+    49855, 49859, 49863, 49867, 49871, 49875, 49879, 49883, 49887, 49891, 
+    49895, 49899, 49903, 49907, 49911, 49915, 49919, 49923, 49927, 49931, 
+    49935, 49939, 49943, 49947, 49951, 49955, 49959, 49963, 49967, 49971, 
+    49975, 49979, 49983, 49987, 49991, 49995, 49999, 50003, 50007, 50011, 
+    50015, 50019, 50023, 50027, 50031, 50035, 50039, 50043, 50047, 50051, 
+    50055, 50059, 50063, 50067, 50071, 50075, 50079, 50083, 50087, 50091, 
+    50095, 50099, 50103, 50107, 50111, 50115, 50119, 50123, 50127, 50131, 
+    50135, 50139, 50143, 50147, 50151, 50155, 50159, 50163, 50167, 50171, 
+    50175, 50179, 50183, 50187, 50191, 50195, 50199, 50203, 50207, 50211, 
+    50215, 50219, 50223, 50227, 50231, 50235, 50239, 50243, 50247, 50251, 
+    50255, 50259, 50263, 50267, 50271, 50275, 50279, 50283, 50287, 50291, 
+    50295, 50299, 50303, 50307, 50311, 50315, 50319, 50323, 50327, 50331, 
+    50335, 50339, 50343, 50347, 50351, 50355, 50359, 50363, 50367, 50371, 
+    50375, 50379, 50383, 50387, 50391, 50395, 50399, 50403, 50407, 50411, 
+    50415, 50419, 50423, 50427, 50431, 50435, 50439, 50443, 50447, 50451, 
+    50455, 50459, 50463, 50467, 50471, 50475, 50479, 50483, 50487, 50494, 
+    50502, 50508, 50514, 50521, 50528, 50534, 50540, 50546, 50552, 50557, 
+    50562, 50567, 50572, 50578, 50584, 50592, 50599, 50605, 50611, 50619, 
+    50628, 50635, 50645, 50656, 50659, 50662, 50666, 50670, 50677, 50684, 
+    50695, 50706, 50716, 50726, 50733, 50740, 50747, 50754, 50765, 50776, 
+    50787, 50798, 50808, 50818, 50830, 50842, 50853, 50864, 50876, 50888, 
+    50897, 50907, 50917, 50928, 50939, 50946, 50953, 50960, 50967, 50977, 
+    50987, 50995, 51003, 51010, 51017, 51024, 51031, 51038, 51043, 51048, 
+    51054, 51062, 51072, 51082, 51092, 51102, 51112, 51122, 51132, 51142, 
+    51152, 51162, 51172, 51183, 51194, 51204, 51214, 51225, 51236, 51246, 
+    51256, 51267, 51278, 51288, 51298, 51309, 51320, 51336, 51355, 51371, 
+    51390, 51406, 51422, 51438, 51454, 51465, 51477, 51488, 51500, 51519, 
+    51538, 51546, 51552, 51559, 51566, 51573, 51580, 51585, 51591, 51596, 
+    51601, 51607, 51612, 51617, 51622, 51627, 51632, 51639, 51644, 51651, 
+    51656, 51661, 51665, 51669, 51676, 51683, 51690, 51697, 51704, 51711, 
+    51724, 51737, 51750, 51763, 51771, 51779, 51785, 51791, 51798, 51805, 
+    51812, 51819, 51823, 51828, 51836, 51844, 51852, 51859, 51863, 51871, 
+    51879, 51883, 51887, 51892, 51899, 51907, 51915, 51934, 51953, 51972, 
+    51991, 52010, 52029, 52048, 52067, 52073, 52080, 52089, 52097, 52105, 
+    52110, 52113, 52116, 52121, 52124, 52143, 52150, 52156, 52162, 52166, 
+    52169, 52172, 52175, 52187, 52200, 52207, 52214, 52217, 52221, 52224, 
+    52229, 52234, 52239, 52245, 52254, 52261, 52268, 52276, 52283, 52290, 
+    52293, 52299, 52305, 52308, 52311, 52316, 52321, 52327, 52333, 52337, 
+    52342, 52349, 52353, 52359, 52363, 52367, 52375, 52387, 52396, 52400, 
+    52402, 52411, 52420, 52426, 52429, 52435, 52441, 52446, 52451, 52456, 
+    52461, 52466, 52471, 52473, 52479, 52484, 52491, 52495, 52501, 52504, 
+    52508, 52515, 52522, 52524, 52526, 52532, 52538, 52544, 52553, 52562, 
+    52569, 52576, 52582, 52588, 52593, 52598, 52603, 52609, 52615, 52620, 
+    52627, 52631, 52635, 52648, 52661, 52673, 52682, 52688, 52695, 52700, 
+    52705, 52710, 52715, 52720, 52722, 52729, 52736, 52743, 52750, 52757, 
+    52765, 52771, 52776, 52782, 52788, 52794, 52801, 52807, 52815, 52823, 
+    52831, 52839, 52846, 52852, 52858, 52867, 52871, 52880, 52889, 52898, 
+    52906, 52910, 52916, 52923, 52930, 52934, 52940, 52947, 52952, 52957, 
+    52963, 52968, 52973, 52980, 52987, 52992, 52997, 53005, 53013, 53023, 
+    53033, 53040, 53047, 53051, 53055, 53067, 53073, 53079, 53084, 53089, 
+    53096, 53103, 53109, 53115, 53124, 53132, 53140, 53147, 53154, 53161, 
+    53167, 53174, 53180, 53187, 53194, 53201, 53208, 53214, 53219, 53228, 
+    53238, 53245, 53254, 53260, 53265, 53270, 53280, 53286, 53292, 53298, 
+    53306, 53311, 53318, 53325, 53336, 53343, 53350, 53357, 53364, 53371, 
+    53378, 53385, 53397, 53409, 53420, 53431, 53444, 53457, 53462, 53467, 
+    53476, 53485, 53492, 53499, 53508, 53517, 53525, 53533, 53541, 53549, 
+    53559, 53569, 53583, 53597, 53605, 53613, 53625, 53637, 53645, 53653, 
+    53663, 53673, 53678, 53683, 53692, 53701, 53706, 53711, 53719, 53725, 
+    53731, 53739, 53747, 53760, 53773, 53777, 53781, 53788, 53795, 53802, 
+    53810, 53818, 53827, 53836, 53842, 53848, 53855, 53862, 53869, 53876, 
+    53885, 53894, 53897, 53900, 53905, 53910, 53916, 53922, 53929, 53936, 
+    53946, 53956, 53963, 53970, 53978, 53986, 53994, 54002, 54010, 54018, 
+    54024, 54030, 54034, 54038, 54045, 54052, 54057, 54062, 54067, 54072, 
+    54078, 54092, 54099, 54106, 54110, 54112, 54114, 54119, 54124, 54129, 
+    54134, 54142, 54149, 54156, 54164, 54176, 54184, 54192, 54203, 54207, 
+    54211, 54217, 54225, 54238, 54245, 54252, 54259, 54264, 54271, 54280, 
+    54288, 54294, 54300, 54306, 54315, 54324, 54332, 54341, 54346, 54349, 
+    54354, 54360, 54366, 54372, 54378, 54382, 54385, 54389, 54393, 54399, 
+    54405, 54411, 54417, 54421, 54425, 54432, 54439, 54446, 54453, 54460, 
+    54467, 54477, 54487, 54494, 54501, 54509, 54517, 54521, 54526, 54531, 
+    54537, 54543, 54546, 54549, 54552, 54555, 54559, 54564, 54569, 54574, 
+    54579, 54584, 54588, 54592, 54596, 54600, 54604, 54608, 54612, 54618, 
+    54622, 54628, 54633, 54640, 54648, 54655, 54663, 54670, 54678, 54687, 
+    54694, 54704, 54715, 54721, 54730, 54736, 54745, 54754, 54760, 54766, 
+    54770, 54774, 54783, 54792, 54799, 54806, 54815, 0, 0, 0, 54824, 54829, 
+    54833, 54837, 54842, 54847, 54852, 54860, 54868, 54871, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 54852, 54857, 54862, 54867, 54872, 54877, 54882, 54887, 
-    54892, 54897, 54902, 54908, 54912, 54917, 54922, 54927, 54932, 54937, 
-    54942, 54947, 54952, 54957, 54962, 54967, 54972, 54977, 54982, 54987, 
-    54992, 54997, 55002, 55007, 55012, 55017, 55022, 55028, 55033, 55039, 
-    55048, 55053, 55061, 55068, 55077, 55082, 55087, 55092, 55098, 0, 55105, 
-    55110, 55115, 55120, 55125, 55130, 55135, 55140, 55145, 55150, 55155, 
-    55161, 55165, 55170, 55175, 55180, 55185, 55190, 55195, 55200, 55205, 
-    55210, 55215, 55220, 55225, 55230, 55235, 55240, 55245, 55250, 55255, 
-    55260, 55265, 55270, 55275, 55281, 55286, 55292, 55301, 55306, 55314, 
-    55321, 55330, 55335, 55340, 55345, 55351, 0, 55358, 55366, 55374, 55383, 
-    55390, 55398, 55404, 55413, 55421, 55429, 55437, 55445, 55453, 55461, 
-    55466, 55473, 55479, 55486, 55494, 55501, 55508, 55516, 55522, 55528, 
-    55535, 55542, 55552, 55562, 55569, 55576, 55581, 55591, 55601, 55606, 
-    55611, 55616, 55621, 55626, 55631, 55636, 55641, 55646, 55651, 55656, 
-    55661, 55666, 55671, 55676, 55681, 55686, 55691, 55696, 55701, 55706, 
-    55711, 55716, 55721, 55726, 55731, 55736, 55741, 55746, 55751, 55755, 
-    55759, 55764, 55769, 55774, 55779, 55784, 55789, 55794, 55799, 55804, 
-    55809, 55814, 55819, 55824, 55829, 55834, 55839, 55844, 55849, 55856, 
-    55863, 55870, 55877, 55884, 55891, 55898, 55905, 55912, 55919, 55926, 
-    55933, 55940, 55947, 55952, 55957, 55964, 55971, 55978, 55985, 55992, 
-    55999, 56006, 56013, 56020, 56027, 56034, 56041, 56047, 56053, 56059, 
-    56065, 56072, 56079, 56086, 56093, 56100, 56107, 56114, 56121, 56128, 
-    56135, 56143, 56151, 56159, 56167, 56175, 56183, 56191, 56199, 56203, 
-    56209, 56215, 56219, 56225, 56231, 56237, 56244, 56251, 56258, 56265, 
-    56270, 56276, 56282, 56289, 0, 0, 0, 0, 0, 56296, 56304, 56313, 56322, 
-    56330, 56336, 56341, 56346, 56351, 56356, 56361, 56366, 56371, 56376, 
-    56381, 56386, 56391, 56396, 56401, 56406, 56411, 56416, 56421, 56426, 
-    56431, 56436, 56441, 56446, 56451, 56456, 56461, 56466, 56471, 56476, 
-    56481, 56486, 56491, 56496, 56501, 56506, 56511, 56516, 56521, 56526, 
-    56531, 0, 56536, 0, 0, 0, 0, 0, 56541, 0, 0, 56546, 56550, 56555, 56560, 
-    56565, 56570, 56579, 56584, 56589, 56594, 56599, 56604, 56609, 56614, 
-    56619, 56626, 56631, 56636, 56645, 56652, 56657, 56662, 56667, 56674, 
-    56679, 56686, 56691, 56696, 56703, 56710, 56715, 56720, 56725, 56732, 
-    56739, 56744, 56749, 56754, 56759, 56764, 56771, 56778, 56783, 56788, 
-    56793, 56798, 56803, 56808, 56813, 56818, 56823, 56828, 56833, 56840, 
-    56845, 56850, 0, 0, 0, 0, 0, 0, 0, 56855, 56862, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 56867, 56872, 56876, 56880, 56884, 56888, 56892, 56896, 
-    56900, 56904, 56908, 56912, 56918, 56922, 56926, 56930, 56934, 56938, 
-    56942, 56946, 56950, 56954, 56958, 56962, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    56966, 56970, 56974, 56978, 56982, 56986, 56990, 0, 56994, 56998, 57002, 
-    57006, 57010, 57014, 57018, 0, 57022, 57026, 57030, 57034, 57038, 57042, 
-    57046, 0, 57050, 57054, 57058, 57062, 57066, 57070, 57074, 0, 57078, 
-    57082, 57086, 57090, 57094, 57098, 57102, 0, 57106, 57110, 57114, 57118, 
-    57122, 57126, 57130, 0, 57134, 57138, 57142, 57146, 57150, 57154, 57158, 
-    0, 57162, 57166, 57170, 57174, 57178, 57182, 57186, 0, 57190, 57195, 
-    57200, 57205, 57210, 57215, 57220, 57224, 57229, 57234, 57239, 57243, 
-    57248, 57253, 57258, 57263, 57267, 57272, 57277, 57282, 57287, 57292, 
-    57297, 57301, 57306, 57311, 57318, 57323, 57328, 57334, 57341, 57348, 
-    57357, 57364, 57373, 57377, 57381, 57387, 57393, 57399, 57407, 57413, 
-    57417, 57421, 57425, 57431, 57437, 57441, 57443, 57447, 57453, 57455, 
-    57459, 57463, 57467, 57473, 57478, 57482, 57486, 57491, 57497, 57502, 
-    57507, 57512, 57517, 57524, 57531, 57536, 57541, 57546, 57551, 57556, 
-    57561, 57565, 57569, 57576, 57583, 57589, 57593, 57598, 57600, 57604, 
-    57612, 57616, 57620, 57624, 57628, 57634, 57640, 57644, 57650, 57654, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54875, 54880, 54885, 
+    54890, 54895, 54900, 54905, 54910, 54915, 54920, 54925, 54931, 54935, 
+    54940, 54945, 54950, 54955, 54960, 54965, 54970, 54975, 54980, 54985, 
+    54990, 54995, 55000, 55005, 55010, 55015, 55020, 55025, 55030, 55035, 
+    55040, 55045, 55051, 55056, 55062, 55071, 55076, 55084, 55091, 55100, 
+    55105, 55110, 55115, 55121, 0, 55128, 55133, 55138, 55143, 55148, 55153, 
+    55158, 55163, 55168, 55173, 55178, 55184, 55188, 55193, 55198, 55203, 
+    55208, 55213, 55218, 55223, 55228, 55233, 55238, 55243, 55248, 55253, 
+    55258, 55263, 55268, 55273, 55278, 55283, 55288, 55293, 55298, 55304, 
+    55309, 55315, 55324, 55329, 55337, 55344, 55353, 55358, 55363, 55368, 
+    55374, 0, 55381, 55389, 55397, 55406, 55413, 55421, 55427, 55436, 55444, 
+    55452, 55460, 55468, 55476, 55484, 55489, 55496, 55502, 55509, 55517, 
+    55524, 55531, 55539, 55545, 55551, 55558, 55565, 55575, 55585, 55592, 
+    55599, 55604, 55614, 55624, 55629, 55634, 55639, 55644, 55649, 55654, 
+    55659, 55664, 55669, 55674, 55679, 55684, 55689, 55694, 55699, 55704, 
+    55709, 55714, 55719, 55724, 55729, 55734, 55739, 55744, 55749, 55754, 
+    55759, 55764, 55769, 55774, 55778, 55782, 55787, 55792, 55797, 55802, 
+    55807, 55812, 55817, 55822, 55827, 55832, 55837, 55842, 55847, 55852, 
+    55857, 55862, 55867, 55872, 55879, 55886, 55893, 55900, 55907, 55914, 
+    55921, 55928, 55935, 55942, 55949, 55956, 55963, 55970, 55975, 55980, 
+    55987, 55994, 56001, 56008, 56015, 56022, 56029, 56036, 56043, 56050, 
+    56057, 56064, 56070, 56076, 56082, 56088, 56095, 56102, 56109, 56116, 
+    56123, 56130, 56137, 56144, 56151, 56158, 56166, 56174, 56182, 56190, 
+    56198, 56206, 56214, 56222, 56226, 56232, 56238, 56242, 56248, 56254, 
+    56260, 56267, 56274, 56281, 56288, 56293, 56299, 56305, 56312, 0, 0, 0, 
+    0, 0, 56319, 56327, 56336, 56345, 56353, 56359, 56364, 56369, 56374, 
+    56379, 56384, 56389, 56394, 56399, 56404, 56409, 56414, 56419, 56424, 
+    56429, 56434, 56439, 56444, 56449, 56454, 56459, 56464, 56469, 56474, 
+    56479, 56484, 56489, 56494, 56499, 56504, 56509, 56514, 56519, 56524, 
+    56529, 56534, 56539, 56544, 56549, 56554, 0, 56559, 0, 0, 0, 0, 0, 56564, 
+    0, 0, 56569, 56573, 56578, 56583, 56588, 56593, 56602, 56607, 56612, 
+    56617, 56622, 56627, 56632, 56637, 56642, 56649, 56654, 56659, 56668, 
+    56675, 56680, 56685, 56690, 56697, 56702, 56709, 56714, 56719, 56726, 
+    56733, 56738, 56743, 56748, 56755, 56762, 56767, 56772, 56777, 56782, 
+    56787, 56794, 56801, 56806, 56811, 56816, 56821, 56826, 56831, 56836, 
+    56841, 56846, 56851, 56856, 56863, 56868, 56873, 0, 0, 0, 0, 0, 0, 0, 
+    56878, 56885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56890, 56895, 
+    56899, 56903, 56907, 56911, 56915, 56919, 56923, 56927, 56931, 56935, 
+    56941, 56945, 56949, 56953, 56957, 56961, 56965, 56969, 56973, 56977, 
+    56981, 56985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56989, 56993, 56997, 57001, 
+    57005, 57009, 57013, 0, 57017, 57021, 57025, 57029, 57033, 57037, 57041, 
+    0, 57045, 57049, 57053, 57057, 57061, 57065, 57069, 0, 57073, 57077, 
+    57081, 57085, 57089, 57093, 57097, 0, 57101, 57105, 57109, 57113, 57117, 
+    57121, 57125, 0, 57129, 57133, 57137, 57141, 57145, 57149, 57153, 0, 
+    57157, 57161, 57165, 57169, 57173, 57177, 57181, 0, 57185, 57189, 57193, 
+    57197, 57201, 57205, 57209, 0, 57213, 57218, 57223, 57228, 57233, 57238, 
+    57243, 57247, 57252, 57257, 57262, 57266, 57271, 57276, 57281, 57286, 
+    57290, 57295, 57300, 57305, 57310, 57315, 57320, 57324, 57329, 57334, 
+    57341, 57346, 57351, 57357, 57364, 57371, 57380, 57387, 57396, 57400, 
+    57404, 57410, 57416, 57422, 57430, 57436, 57440, 57444, 57448, 57454, 
+    57460, 57464, 57466, 57470, 57476, 57478, 57482, 57486, 57490, 57496, 
+    57501, 57505, 57509, 57514, 57520, 57525, 57530, 57535, 57540, 57547, 
+    57554, 57559, 57564, 57569, 57574, 57579, 57584, 57588, 57592, 57599, 
+    57606, 57612, 57616, 57621, 57623, 57627, 57635, 57639, 57643, 57647, 
+    57651, 57657, 57663, 57667, 57673, 57677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57658, 57662, 
-    57666, 57671, 57676, 57681, 57685, 57689, 57693, 57698, 57703, 57707, 
-    57711, 57715, 57719, 57724, 57729, 57734, 57739, 57743, 57747, 57752, 
-    57757, 57762, 57767, 57771, 0, 57775, 57779, 57783, 57787, 57791, 57795, 
-    57799, 57804, 57809, 57813, 57818, 57823, 57832, 57836, 57840, 57844, 
-    57851, 57855, 57860, 57865, 57869, 57873, 57879, 57884, 57889, 57894, 
-    57899, 57903, 57907, 57911, 57915, 57919, 57924, 57929, 57933, 57937, 
-    57942, 57947, 57952, 57956, 57960, 57965, 57970, 57976, 57982, 57986, 
-    57992, 57998, 58002, 58008, 58014, 58019, 58024, 58028, 58034, 58038, 
-    58042, 58048, 58054, 58059, 58064, 58068, 58072, 58080, 58086, 58092, 
-    58098, 58103, 58108, 58113, 58119, 58123, 58129, 58133, 58137, 58143, 
-    58149, 58155, 58161, 58167, 58173, 58179, 58185, 58191, 58197, 58203, 
-    58209, 58213, 58219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58225, 58228, 
-    58232, 58236, 58240, 58244, 58247, 58250, 58254, 58258, 58262, 58266, 
-    58269, 58274, 58278, 58282, 58286, 58291, 58295, 58299, 58303, 58307, 
-    58313, 58319, 58323, 58327, 58331, 58335, 58339, 58343, 58347, 58351, 
-    58355, 58359, 58363, 58369, 58373, 58377, 58381, 58385, 58389, 58393, 
-    58397, 58401, 58405, 58409, 58413, 58417, 58421, 58425, 58429, 58433, 
-    58439, 58445, 58450, 58455, 58459, 58463, 58467, 58471, 58475, 58479, 
-    58483, 58487, 58491, 58495, 58499, 58503, 58507, 58511, 58515, 58519, 
-    58523, 58527, 58531, 58535, 58539, 58543, 58547, 58551, 58557, 58561, 
-    58565, 58569, 58573, 58577, 58581, 58585, 58589, 58594, 58601, 58605, 
-    58609, 58613, 58617, 58621, 58625, 58629, 58633, 58637, 58641, 58645, 
-    58649, 58656, 58660, 58666, 58670, 58674, 58678, 58682, 58686, 58689, 
-    58693, 58697, 58701, 58705, 58709, 58713, 58717, 58721, 58725, 58729, 
-    58733, 58737, 58741, 58745, 58749, 58753, 58757, 58761, 58765, 58769, 
-    58773, 58777, 58781, 58785, 58789, 58793, 58797, 58801, 58805, 58809, 
-    58813, 58817, 58823, 58827, 58831, 58835, 58839, 58843, 58847, 58851, 
-    58855, 58859, 58863, 58867, 58871, 58875, 58879, 58883, 58887, 58891, 
-    58895, 58899, 58903, 58907, 58911, 58915, 58919, 58923, 58927, 58931, 
-    58939, 58943, 58947, 58951, 58955, 58959, 58965, 58969, 58973, 58977, 
-    58981, 58985, 58989, 58993, 58997, 59001, 59005, 59009, 59013, 59017, 
-    59023, 59027, 59031, 59035, 59039, 59043, 59047, 59051, 59055, 59059, 
-    59063, 59067, 59071, 59075, 59079, 59083, 59087, 59091, 59095, 59099, 
-    59103, 59107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 59111, 59120, 59128, 59140, 59151, 59159, 59168, 59177, 
-    59187, 59199, 59211, 59223, 0, 0, 0, 0, 59229, 59232, 59235, 59240, 
-    59243, 59250, 59254, 59258, 59262, 59266, 59270, 59275, 59280, 59284, 
-    59288, 59293, 59298, 59303, 59308, 59311, 59314, 59320, 59326, 59331, 
-    59336, 59343, 59350, 59354, 59358, 59362, 59370, 59376, 59383, 59388, 
-    59393, 59398, 59403, 59408, 59413, 59418, 59423, 59428, 59433, 59438, 
-    59443, 59448, 59453, 59459, 59464, 59468, 59474, 59485, 59495, 59510, 
-    59520, 59524, 59534, 59540, 59546, 59552, 59557, 59560, 59565, 59569, 0, 
-    59575, 59579, 59582, 59586, 59589, 59593, 59596, 59600, 59603, 59607, 
-    59610, 59613, 59617, 59621, 59625, 59629, 59633, 59637, 59641, 59645, 
-    59649, 59652, 59656, 59660, 59664, 59668, 59672, 59676, 59680, 59684, 
-    59688, 59692, 59696, 59700, 59704, 59709, 59713, 59717, 59721, 59725, 
-    59728, 59732, 59735, 59739, 59743, 59747, 59751, 59754, 59758, 59761, 
-    59765, 59769, 59773, 59777, 59781, 59785, 59789, 59793, 59797, 59801, 
-    59805, 59809, 59812, 59816, 59820, 59824, 59828, 59832, 59835, 59840, 
-    59844, 59849, 59853, 59856, 59860, 59864, 59868, 59872, 59877, 59881, 
-    59885, 59889, 59893, 59897, 59901, 59905, 0, 0, 59910, 59918, 59926, 
-    59933, 59940, 59944, 59950, 59955, 59960, 59964, 59967, 59971, 59974, 
-    59978, 59981, 59985, 59988, 59992, 59995, 59998, 60002, 60006, 60010, 
-    60014, 60018, 60022, 60026, 60030, 60034, 60037, 60041, 60045, 60049, 
-    60053, 60057, 60061, 60065, 60069, 60073, 60077, 60081, 60085, 60089, 
-    60094, 60098, 60102, 60106, 60110, 60113, 60117, 60120, 60124, 60128, 
-    60132, 60136, 60139, 60143, 60146, 60150, 60154, 60158, 60162, 60166, 
-    60170, 60174, 60178, 60182, 60186, 60190, 60194, 60197, 60201, 60205, 
-    60209, 60213, 60217, 60220, 60225, 60229, 60234, 60238, 60241, 60245, 
-    60249, 60253, 60257, 60262, 60266, 60270, 60274, 60278, 60282, 60286, 
-    60290, 60295, 60299, 60303, 60307, 60311, 60316, 60323, 60327, 60333, 0, 
-    0, 0, 0, 0, 60338, 60343, 60348, 60352, 60357, 60362, 60367, 60372, 
-    60376, 60381, 60386, 60391, 60396, 60401, 60406, 60411, 60416, 60421, 
-    60425, 60430, 60435, 60440, 60444, 60448, 60452, 60457, 60462, 60467, 
-    60472, 60477, 60482, 60487, 60492, 60497, 60502, 60506, 60510, 60515, 
-    60520, 60525, 60530, 0, 0, 0, 60535, 60539, 60543, 60547, 60551, 60555, 
-    60559, 60563, 60567, 60571, 60575, 60579, 60583, 60587, 60591, 60595, 
-    60599, 60603, 60607, 60611, 60615, 60619, 60623, 60627, 60631, 60635, 
-    60639, 60643, 60647, 60651, 60655, 60658, 60662, 60665, 60669, 60673, 
-    60676, 60680, 60684, 60687, 60691, 60695, 60699, 60703, 60706, 60710, 
-    60714, 60718, 60722, 60726, 60730, 60733, 60736, 60740, 60744, 60748, 
-    60752, 60756, 60760, 60764, 60768, 60772, 60776, 60780, 60784, 60788, 
-    60792, 60796, 60800, 60804, 60808, 60812, 60816, 60820, 60824, 60828, 
-    60832, 60836, 60840, 60844, 60848, 60852, 60856, 60860, 60864, 60868, 
-    60872, 60876, 60880, 60884, 60888, 60892, 60896, 60900, 0, 60904, 60910, 
-    60916, 60921, 60926, 60931, 60937, 60943, 60949, 60955, 60961, 60967, 
-    60973, 60979, 60985, 60991, 60997, 61002, 61007, 61012, 61017, 61022, 
-    61027, 61032, 61037, 61042, 61047, 61052, 61057, 61062, 61067, 61072, 
-    61077, 61082, 61087, 61092, 61097, 61103, 61109, 61115, 61121, 61126, 
-    61131, 0, 0, 0, 0, 0, 61136, 61141, 61146, 61151, 61156, 61161, 61166, 
-    61171, 61176, 61181, 61186, 61191, 61196, 61201, 61206, 61211, 61216, 
-    61221, 61226, 61231, 61236, 61241, 61246, 61251, 61256, 61261, 61266, 
-    61271, 61276, 61281, 61286, 61291, 61296, 61301, 61306, 61311, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 61316, 61321, 61326, 61331, 61335, 61340, 
-    61344, 61349, 61354, 61359, 61364, 61369, 61373, 61378, 61383, 61388, 
-    61393, 61397, 61401, 61405, 61409, 61413, 61417, 61421, 61425, 61429, 
-    61433, 61437, 61441, 61445, 61449, 61454, 61459, 61464, 61469, 61474, 
-    61479, 61484, 61489, 61494, 61499, 61504, 61509, 61514, 61519, 61524, 
-    61530, 0, 61537, 61540, 61543, 61546, 61549, 61552, 61555, 61558, 61561, 
-    61564, 61568, 61572, 61576, 61580, 61584, 61588, 61592, 61596, 61600, 
-    61604, 61608, 61612, 61616, 61620, 61624, 61628, 61632, 61636, 61640, 
-    61644, 61648, 61652, 61656, 61660, 61664, 61668, 61672, 61676, 61680, 
-    61684, 61688, 61697, 61706, 61715, 61724, 61733, 61742, 61751, 61760, 
-    61763, 61768, 61773, 61778, 61783, 61788, 61793, 61798, 61803, 61808, 
-    61812, 61817, 61822, 61827, 61832, 61837, 61841, 61845, 61849, 61853, 
-    61857, 61861, 61865, 61869, 61873, 61877, 61881, 61885, 61889, 61893, 
-    61898, 61903, 61908, 61913, 61918, 61923, 61928, 61933, 61938, 61943, 
-    61948, 61953, 61958, 61963, 61969, 61975, 61980, 61985, 61988, 61991, 
-    61994, 61997, 62000, 62003, 62006, 62009, 62012, 62016, 62020, 62024, 
-    62028, 62032, 62036, 62040, 62044, 62048, 62052, 62056, 62060, 62064, 
-    62068, 62072, 62076, 62080, 62084, 62088, 62092, 62096, 62100, 62104, 
-    62108, 62112, 62116, 62120, 62124, 62128, 62132, 62136, 62140, 62144, 
-    62148, 62152, 62156, 62160, 62164, 62168, 62172, 62177, 62182, 62187, 
-    62192, 62196, 62201, 62206, 62211, 62216, 62221, 62226, 62231, 62236, 
-    62241, 62245, 62252, 62259, 62266, 62273, 62280, 62287, 62294, 62301, 
-    62308, 62315, 62322, 62329, 62332, 62335, 62338, 62343, 62346, 62349, 
-    62352, 62355, 62358, 62361, 62365, 62369, 62373, 62377, 62380, 62384, 
-    62388, 62392, 62396, 62400, 62404, 62408, 62412, 62415, 62418, 62422, 
-    62426, 62430, 62434, 62437, 62441, 62445, 62449, 62453, 62456, 62460, 
-    62464, 62468, 62472, 62475, 62479, 62483, 62486, 62490, 62494, 62498, 
-    62502, 62506, 62510, 62514, 0, 62518, 62521, 62524, 62527, 62530, 62533, 
-    62536, 62539, 62542, 62545, 62548, 62551, 62554, 62557, 62560, 62563, 
-    62566, 62569, 62572, 62575, 62578, 62581, 62584, 62587, 62590, 62593, 
-    62596, 62599, 62602, 62605, 62608, 62611, 62614, 62617, 62620, 62623, 
-    62626, 62629, 62632, 62635, 62638, 62641, 62644, 62647, 62650, 62653, 
-    62656, 62659, 62662, 62665, 62668, 62671, 62674, 62677, 62680, 62683, 
-    62686, 62689, 62692, 62695, 62698, 62701, 62704, 62707, 62710, 62713, 
-    62716, 62719, 62722, 62725, 62728, 62731, 62734, 62737, 62740, 62743, 
-    62746, 62749, 62752, 62755, 62758, 62761, 62764, 62767, 62770, 62773, 
-    62776, 62779, 62782, 62791, 62799, 62807, 62815, 62823, 62831, 62839, 
-    62847, 62855, 62863, 62872, 62881, 62890, 62899, 62908, 62917, 62926, 
-    62935, 62944, 62953, 62962, 62971, 62980, 62989, 62998, 63001, 63004, 
-    63007, 63009, 63012, 63015, 63018, 63023, 63028, 63031, 63038, 63045, 
-    63052, 63059, 63062, 63067, 63069, 63073, 63075, 63077, 63080, 63083, 
-    63086, 63089, 63092, 63095, 63098, 63103, 63108, 63111, 63114, 63117, 
-    63120, 63123, 63126, 63129, 63133, 63136, 63139, 63142, 63145, 63148, 
-    63152, 63155, 63158, 63161, 63166, 63171, 63176, 63181, 63186, 63191, 
-    63196, 63201, 63207, 63215, 63217, 63220, 63223, 63226, 63229, 63235, 
-    63243, 63246, 63249, 63254, 63257, 63260, 63263, 63268, 63271, 63274, 
-    63279, 63282, 63285, 63290, 63293, 63296, 63301, 63306, 63311, 63314, 
-    63317, 63320, 63323, 63329, 63332, 63335, 63338, 63340, 63343, 63346, 
-    63349, 63354, 63357, 63360, 63363, 63366, 63369, 63374, 63377, 63380, 
-    63383, 63386, 63389, 63392, 63395, 63398, 63401, 63406, 63410, 63418, 
-    63426, 63434, 63442, 63450, 63458, 63466, 63474, 63482, 63491, 63500, 
-    63509, 63518, 63527, 63536, 63545, 63554, 63563, 63572, 63581, 63590, 
-    63599, 63608, 63617, 63626, 63635, 63644, 63653, 63662, 63671, 63680, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57681, 57685, 57689, 57694, 57699, 57704, 
+    57708, 57712, 57716, 57721, 57726, 57730, 57734, 57738, 57742, 57747, 
+    57752, 57757, 57762, 57766, 57770, 57775, 57780, 57785, 57790, 57794, 0, 
+    57798, 57802, 57806, 57810, 57814, 57818, 57822, 57827, 57832, 57836, 
+    57841, 57846, 57855, 57859, 57863, 57867, 57874, 57878, 57883, 57888, 
+    57892, 57896, 57902, 57907, 57912, 57917, 57922, 57926, 57930, 57934, 
+    57938, 57942, 57947, 57952, 57956, 57960, 57965, 57970, 57975, 57979, 
+    57983, 57988, 57993, 57999, 58005, 58009, 58015, 58021, 58025, 58031, 
+    58037, 58042, 58047, 58051, 58057, 58061, 58065, 58071, 58077, 58082, 
+    58087, 58091, 58095, 58103, 58109, 58115, 58121, 58126, 58131, 58136, 
+    58142, 58146, 58152, 58156, 58160, 58166, 58172, 58178, 58184, 58190, 
+    58196, 58202, 58208, 58214, 58220, 58226, 58232, 58236, 58242, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 58248, 58251, 58255, 58259, 58263, 58267, 
+    58270, 58273, 58277, 58281, 58285, 58289, 58292, 58297, 58301, 58305, 
+    58309, 58314, 58318, 58322, 58326, 58330, 58336, 58342, 58346, 58350, 
+    58354, 58358, 58362, 58366, 58370, 58374, 58378, 58382, 58386, 58392, 
+    58396, 58400, 58404, 58408, 58412, 58416, 58420, 58424, 58428, 58432, 
+    58436, 58440, 58444, 58448, 58452, 58456, 58462, 58468, 58473, 58478, 
+    58482, 58486, 58490, 58494, 58498, 58502, 58506, 58510, 58514, 58518, 
+    58522, 58526, 58530, 58534, 58538, 58542, 58546, 58550, 58554, 58558, 
+    58562, 58566, 58570, 58574, 58580, 58584, 58588, 58592, 58596, 58600, 
+    58604, 58608, 58612, 58617, 58624, 58628, 58632, 58636, 58640, 58644, 
+    58648, 58652, 58656, 58660, 58664, 58668, 58672, 58679, 58683, 58689, 
+    58693, 58697, 58701, 58705, 58709, 58712, 58716, 58720, 58724, 58728, 
+    58732, 58736, 58740, 58744, 58748, 58752, 58756, 58760, 58764, 58768, 
+    58772, 58776, 58780, 58784, 58788, 58792, 58796, 58800, 58804, 58808, 
+    58812, 58816, 58820, 58824, 58828, 58832, 58836, 58840, 58846, 58850, 
+    58854, 58858, 58862, 58866, 58870, 58874, 58878, 58882, 58886, 58890, 
+    58894, 58898, 58902, 58906, 58910, 58914, 58918, 58922, 58926, 58930, 
+    58934, 58938, 58942, 58946, 58950, 58954, 58962, 58966, 58970, 58974, 
+    58978, 58982, 58988, 58992, 58996, 59000, 59004, 59008, 59012, 59016, 
+    59020, 59024, 59028, 59032, 59036, 59040, 59046, 59050, 59054, 59058, 
+    59062, 59066, 59070, 59074, 59078, 59082, 59086, 59090, 59094, 59098, 
+    59102, 59106, 59110, 59114, 59118, 59122, 59126, 59130, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59134, 59143, 
+    59151, 59163, 59174, 59182, 59191, 59200, 59210, 59222, 59234, 59246, 0, 
+    0, 0, 0, 59252, 59255, 59258, 59263, 59266, 59273, 59277, 59281, 59285, 
+    59289, 59293, 59298, 59303, 59307, 59311, 59316, 59321, 59326, 59331, 
+    59334, 59337, 59343, 59349, 59354, 59359, 59366, 59373, 59377, 59381, 
+    59385, 59393, 59399, 59406, 59411, 59416, 59421, 59426, 59431, 59436, 
+    59441, 59446, 59451, 59456, 59461, 59466, 59471, 59476, 59482, 59487, 
+    59491, 59497, 59508, 59518, 59533, 59543, 59547, 59557, 59563, 59569, 
+    59575, 59580, 59583, 59588, 59592, 0, 59598, 59602, 59605, 59609, 59612, 
+    59616, 59619, 59623, 59626, 59630, 59633, 59636, 59640, 59644, 59648, 
+    59652, 59656, 59660, 59664, 59668, 59672, 59675, 59679, 59683, 59687, 
+    59691, 59695, 59699, 59703, 59707, 59711, 59715, 59719, 59723, 59727, 
+    59732, 59736, 59740, 59744, 59748, 59751, 59755, 59758, 59762, 59766, 
+    59770, 59774, 59777, 59781, 59784, 59788, 59792, 59796, 59800, 59804, 
+    59808, 59812, 59816, 59820, 59824, 59828, 59832, 59835, 59839, 59843, 
+    59847, 59851, 59855, 59858, 59863, 59867, 59872, 59876, 59879, 59883, 
+    59887, 59891, 59895, 59900, 59904, 59908, 59912, 59916, 59920, 59924, 
+    59928, 0, 0, 59933, 59941, 59949, 59956, 59963, 59967, 59973, 59978, 
+    59983, 59987, 59990, 59994, 59997, 60001, 60004, 60008, 60011, 60015, 
+    60018, 60021, 60025, 60029, 60033, 60037, 60041, 60045, 60049, 60053, 
+    60057, 60060, 60064, 60068, 60072, 60076, 60080, 60084, 60088, 60092, 
+    60096, 60100, 60104, 60108, 60112, 60117, 60121, 60125, 60129, 60133, 
+    60136, 60140, 60143, 60147, 60151, 60155, 60159, 60162, 60166, 60169, 
+    60173, 60177, 60181, 60185, 60189, 60193, 60197, 60201, 60205, 60209, 
+    60213, 60217, 60220, 60224, 60228, 60232, 60236, 60240, 60243, 60248, 
+    60252, 60257, 60261, 60264, 60268, 60272, 60276, 60280, 60285, 60289, 
+    60293, 60297, 60301, 60305, 60309, 60313, 60318, 60322, 60326, 60330, 
+    60334, 60339, 60346, 60350, 60356, 0, 0, 0, 0, 0, 60361, 60366, 60371, 
+    60375, 60380, 60385, 60390, 60395, 60399, 60404, 60409, 60414, 60419, 
+    60424, 60429, 60434, 60439, 60444, 60448, 60453, 60458, 60463, 60467, 
+    60471, 60475, 60480, 60485, 60490, 60495, 60500, 60505, 60510, 60515, 
+    60520, 60525, 60529, 60533, 60538, 60543, 60548, 60553, 0, 0, 0, 60558, 
+    60562, 60566, 60570, 60574, 60578, 60582, 60586, 60590, 60594, 60598, 
+    60602, 60606, 60610, 60614, 60618, 60622, 60626, 60630, 60634, 60638, 
+    60642, 60646, 60650, 60654, 60658, 60662, 60666, 60670, 60674, 60678, 
+    60681, 60685, 60688, 60692, 60696, 60699, 60703, 60707, 60710, 60714, 
+    60718, 60722, 60726, 60729, 60733, 60737, 60741, 60745, 60749, 60753, 
+    60756, 60759, 60763, 60767, 60771, 60775, 60779, 60783, 60787, 60791, 
+    60795, 60799, 60803, 60807, 60811, 60815, 60819, 60823, 60827, 60831, 
+    60835, 60839, 60843, 60847, 60851, 60855, 60859, 60863, 60867, 60871, 
+    60875, 60879, 60883, 60887, 60891, 60895, 60899, 60903, 60907, 60911, 
+    60915, 60919, 60923, 0, 60927, 60933, 60939, 60944, 60949, 60954, 60960, 
+    60966, 60972, 60978, 60984, 60990, 60996, 61002, 61008, 61014, 61020, 
+    61025, 61030, 61035, 61040, 61045, 61050, 61055, 61060, 61065, 61070, 
+    61075, 61080, 61085, 61090, 61095, 61100, 61105, 61110, 61115, 61120, 
+    61126, 61132, 61138, 61144, 61149, 61154, 0, 0, 0, 0, 0, 61159, 61164, 
+    61169, 61174, 61179, 61184, 61189, 61194, 61199, 61204, 61209, 61214, 
+    61219, 61224, 61229, 61234, 61239, 61244, 61249, 61254, 61259, 61264, 
+    61269, 61274, 61279, 61284, 61289, 61294, 61299, 61304, 61309, 61314, 
+    61319, 61324, 61329, 61334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61339, 
+    61344, 61349, 61354, 61358, 61363, 61367, 61372, 61377, 61382, 61387, 
+    61392, 61396, 61401, 61406, 61411, 61416, 61420, 61424, 61428, 61432, 
+    61436, 61440, 61444, 61448, 61452, 61456, 61460, 61464, 61468, 61472, 
+    61477, 61482, 61487, 61492, 61497, 61502, 61507, 61512, 61517, 61522, 
+    61527, 61532, 61537, 61542, 61547, 61553, 0, 61560, 61563, 61566, 61569, 
+    61572, 61575, 61578, 61581, 61584, 61587, 61591, 61595, 61599, 61603, 
+    61607, 61611, 61615, 61619, 61623, 61627, 61631, 61635, 61639, 61643, 
+    61647, 61651, 61655, 61659, 61663, 61667, 61671, 61675, 61679, 61683, 
+    61687, 61691, 61695, 61699, 61703, 61707, 61711, 61720, 61729, 61738, 
+    61747, 61756, 61765, 61774, 61783, 61786, 61791, 61796, 61801, 61806, 
+    61811, 61816, 61821, 61826, 61831, 61835, 61840, 61845, 61850, 61855, 
+    61860, 61864, 61868, 61872, 61876, 61880, 61884, 61888, 61892, 61896, 
+    61900, 61904, 61908, 61912, 61916, 61921, 61926, 61931, 61936, 61941, 
+    61946, 61951, 61956, 61961, 61966, 61971, 61976, 61981, 61986, 61992, 
+    61998, 62003, 62008, 62011, 62014, 62017, 62020, 62023, 62026, 62029, 
+    62032, 62035, 62039, 62043, 62047, 62051, 62055, 62059, 62063, 62067, 
+    62071, 62075, 62079, 62083, 62087, 62091, 62095, 62099, 62103, 62107, 
+    62111, 62115, 62119, 62123, 62127, 62131, 62135, 62139, 62143, 62147, 
+    62151, 62155, 62159, 62163, 62167, 62171, 62175, 62179, 62183, 62187, 
+    62191, 62195, 62200, 62205, 62210, 62215, 62219, 62224, 62229, 62234, 
+    62239, 62244, 62249, 62254, 62259, 62264, 62268, 62275, 62282, 62289, 
+    62296, 62303, 62310, 62317, 62324, 62331, 62338, 62345, 62352, 62355, 
+    62358, 62361, 62366, 62369, 62372, 62375, 62378, 62381, 62384, 62388, 
+    62392, 62396, 62400, 62403, 62407, 62411, 62415, 62419, 62423, 62427, 
+    62431, 62435, 62438, 62441, 62445, 62449, 62453, 62457, 62460, 62464, 
+    62468, 62472, 62476, 62479, 62483, 62487, 62491, 62495, 62498, 62502, 
+    62506, 62509, 62513, 62517, 62521, 62525, 62529, 62533, 62537, 0, 62541, 
+    62544, 62547, 62550, 62553, 62556, 62559, 62562, 62565, 62568, 62571, 
+    62574, 62577, 62580, 62583, 62586, 62589, 62592, 62595, 62598, 62601, 
+    62604, 62607, 62610, 62613, 62616, 62619, 62622, 62625, 62628, 62631, 
+    62634, 62637, 62640, 62643, 62646, 62649, 62652, 62655, 62658, 62661, 
+    62664, 62667, 62670, 62673, 62676, 62679, 62682, 62685, 62688, 62691, 
+    62694, 62697, 62700, 62703, 62706, 62709, 62712, 62715, 62718, 62721, 
+    62724, 62727, 62730, 62733, 62736, 62739, 62742, 62745, 62748, 62751, 
+    62754, 62757, 62760, 62763, 62766, 62769, 62772, 62775, 62778, 62781, 
+    62784, 62787, 62790, 62793, 62796, 62799, 62802, 62805, 62814, 62822, 
+    62830, 62838, 62846, 62854, 62862, 62870, 62878, 62886, 62895, 62904, 
+    62913, 62922, 62931, 62940, 62949, 62958, 62967, 62976, 62985, 62994, 
+    63003, 63012, 63021, 63024, 63027, 63030, 63032, 63035, 63038, 63041, 
+    63046, 63051, 63054, 63061, 63068, 63075, 63082, 63085, 63090, 63092, 
+    63096, 63098, 63100, 63103, 63106, 63109, 63112, 63115, 63118, 63121, 
+    63126, 63131, 63134, 63137, 63140, 63143, 63146, 63149, 63152, 63156, 
+    63159, 63162, 63165, 63168, 63171, 63175, 63178, 63181, 63184, 63189, 
+    63194, 63199, 63204, 63209, 63214, 63219, 63224, 63230, 63238, 63240, 
+    63243, 63246, 63249, 63252, 63258, 63266, 63269, 63272, 63277, 63280, 
+    63283, 63286, 63291, 63294, 63297, 63302, 63305, 63308, 63313, 63316, 
+    63319, 63324, 63329, 63334, 63337, 63340, 63343, 63346, 63352, 63355, 
+    63358, 63361, 63363, 63366, 63369, 63372, 63377, 63380, 63383, 63386, 
+    63389, 63392, 63397, 63400, 63403, 63406, 63409, 63412, 63415, 63418, 
+    63421, 63424, 63429, 63433, 63441, 63449, 63457, 63465, 63473, 63481, 
+    63489, 63497, 63505, 63514, 63523, 63532, 63541, 63550, 63559, 63568, 
+    63577, 63586, 63595, 63604, 63613, 63622, 63631, 63640, 63649, 63658, 
+    63667, 63676, 63685, 63694, 63703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63683, 63692, 63701, 63712, 
-    63719, 63724, 63729, 63736, 63743, 63749, 63754, 63759, 63764, 63769, 
-    63776, 63781, 63786, 63791, 63802, 63807, 63812, 63819, 63824, 63831, 
-    63836, 63841, 63848, 63855, 63862, 63871, 63880, 63885, 63890, 63895, 
-    63902, 63907, 63917, 63924, 63929, 63934, 63939, 63944, 63949, 63954, 
-    63963, 63970, 63977, 63982, 63989, 63994, 64001, 64010, 64021, 64026, 
-    64035, 64040, 64047, 64056, 64065, 64070, 64075, 64082, 64088, 64095, 
-    64102, 64106, 64110, 64113, 64117, 64121, 64125, 64129, 64133, 64137, 
-    64141, 64144, 64148, 64152, 64156, 64160, 64164, 64168, 64171, 64175, 
-    64179, 64182, 64186, 64190, 64194, 64198, 64202, 64206, 64210, 64214, 
-    64218, 64222, 64226, 64230, 64234, 64238, 64242, 64246, 64250, 64254, 
-    64258, 64262, 64266, 64270, 64274, 64278, 64282, 64286, 64290, 64294, 
-    64298, 64302, 64306, 64310, 64314, 64318, 64322, 64326, 64330, 64334, 
-    64338, 64342, 64346, 64350, 64354, 64358, 64361, 64365, 64369, 64373, 
-    64377, 64381, 64385, 64389, 64393, 64397, 64401, 64405, 64409, 64413, 
-    64417, 64421, 64425, 64429, 64433, 64437, 64441, 64445, 64449, 64453, 
-    64457, 64461, 64465, 64469, 64473, 64477, 64481, 64485, 64489, 64493, 
-    64497, 64501, 64505, 64509, 64513, 64517, 64521, 64525, 64529, 64533, 
-    64537, 64541, 64545, 64549, 64553, 64557, 64561, 64565, 64569, 64573, 
-    64577, 64581, 64585, 64589, 64593, 64597, 64601, 64605, 64609, 64613, 
-    64617, 64621, 64625, 64629, 64633, 64637, 64641, 64645, 64649, 64653, 
-    64657, 64661, 64665, 64669, 64673, 64677, 64681, 64685, 64689, 64693, 
-    64697, 64701, 64705, 64709, 64713, 64717, 64721, 64725, 64729, 64733, 
-    64737, 64741, 64745, 64749, 64753, 64757, 64761, 64765, 64769, 64773, 
-    64777, 64781, 64785, 64789, 64793, 64797, 64801, 64805, 64809, 64813, 
-    64817, 64821, 64825, 64829, 64832, 64836, 64840, 64844, 64848, 64852, 
-    64856, 64860, 64864, 64868, 64872, 64876, 64880, 64884, 64888, 64892, 
-    64896, 64900, 64904, 64908, 64912, 64916, 64920, 64924, 64928, 64932, 
-    64936, 64940, 64944, 64948, 64952, 64956, 64960, 64964, 64968, 64972, 
-    64976, 64980, 64984, 64988, 64992, 64996, 65000, 65004, 65008, 65012, 
-    65016, 65020, 65024, 65028, 65032, 65036, 65040, 65044, 65048, 65052, 
-    65056, 65060, 65064, 65068, 65072, 65076, 65080, 65084, 65088, 65092, 
-    65096, 65100, 65104, 65108, 65112, 65116, 65120, 65124, 65128, 65132, 
-    65136, 65140, 65144, 65148, 65152, 65156, 65160, 65164, 65168, 65172, 
-    65176, 65180, 65184, 65188, 65192, 65196, 65200, 65204, 65208, 65212, 
-    65216, 65220, 65224, 65228, 65232, 65236, 65240, 65244, 65248, 65252, 
-    65256, 65260, 65264, 65268, 65272, 65276, 65280, 65284, 65288, 65292, 
-    65295, 65299, 65303, 65307, 65311, 65315, 65319, 65323, 65327, 65331, 
-    65335, 65339, 65343, 65347, 65351, 65355, 65359, 65363, 65367, 65371, 
-    65375, 65379, 65383, 65387, 65391, 65395, 65399, 65403, 65407, 65411, 
-    65415, 65419, 65423, 65427, 65431, 65435, 65439, 65443, 65447, 65451, 
-    65455, 65459, 65463, 65467, 65471, 65475, 65479, 65483, 65487, 65491, 
-    65495, 65499, 65503, 65507, 65511, 65515, 65519, 65523, 65527, 65531, 
-    65535, 65539, 65543, 65547, 65551, 65555, 65559, 65563, 65567, 65571, 
-    65575, 65579, 65583, 65587, 65591, 65595, 65599, 65603, 65607, 65611, 
-    65615, 65619, 65623, 65627, 65631, 65635, 65639, 65643, 65647, 65651, 
-    65654, 65658, 65662, 65666, 65670, 65674, 65678, 65682, 65686, 65690, 
-    65694, 65698, 65702, 65706, 65710, 65714, 65718, 65722, 65726, 65730, 
-    65734, 65738, 65742, 65746, 65750, 65754, 65758, 65762, 65766, 65770, 
-    65774, 65778, 65782, 65786, 65790, 65794, 65798, 65802, 65806, 65810, 
-    65814, 65818, 65822, 65826, 65830, 65834, 65838, 65842, 65846, 65850, 
-    65854, 65858, 65862, 65866, 65870, 65874, 65878, 65882, 65886, 65890, 
-    65894, 65898, 65902, 65906, 65910, 65914, 65918, 65922, 65926, 65930, 
-    65934, 65938, 65942, 65946, 65950, 65954, 65958, 65962, 65966, 65970, 
-    65974, 65978, 65982, 65986, 65990, 65994, 65998, 66002, 66006, 66010, 
-    66014, 66018, 66022, 66026, 66030, 66034, 66038, 66042, 66046, 66050, 
-    66054, 66058, 66062, 66066, 66070, 66074, 66078, 66082, 66086, 66090, 
-    66094, 66098, 66102, 66106, 66110, 66114, 66118, 66122, 66126, 66130, 
-    66134, 66138, 66142, 66146, 66149, 66153, 66157, 66161, 66165, 66169, 
-    66173, 66177, 66181, 66185, 66189, 66193, 66197, 66201, 66205, 66209, 
-    66213, 66217, 66221, 66225, 66229, 66233, 66237, 66241, 66245, 66249, 
-    66253, 66257, 66261, 66265, 66269, 66273, 66277, 66281, 66285, 66289, 
-    66293, 66297, 66301, 66305, 66309, 66313, 66317, 66321, 66325, 66329, 
-    66333, 66337, 66341, 66345, 66349, 66353, 66357, 66361, 66365, 66369, 
-    66373, 66377, 66381, 66385, 66389, 66393, 66397, 66401, 66405, 66409, 
-    66413, 66417, 66421, 66425, 66429, 66433, 66437, 66441, 66445, 66449, 
-    66453, 66457, 66461, 66465, 66469, 66473, 66477, 66481, 66485, 66489, 
-    66493, 66497, 66501, 66505, 66509, 66513, 66517, 66521, 66525, 66529, 
-    66533, 66537, 66541, 66545, 66549, 66553, 66557, 66561, 66565, 66569, 
-    66573, 66577, 66581, 66585, 66589, 66593, 66597, 66601, 66604, 66608, 
-    66612, 66616, 66620, 66624, 66628, 66632, 66636, 66640, 66644, 66648, 
-    66652, 66656, 66660, 66664, 66668, 66672, 66676, 66680, 66684, 66688, 
-    66692, 66696, 66700, 66704, 66708, 66712, 66716, 66720, 66724, 66728, 
-    66732, 66736, 66740, 66744, 66748, 66752, 66756, 66760, 66764, 66768, 
-    66772, 66776, 66780, 66784, 66788, 66792, 66796, 66800, 66804, 66808, 
-    66812, 66816, 66820, 66824, 66828, 66832, 66836, 66840, 66844, 66848, 
-    66852, 66856, 66860, 66864, 66868, 66872, 66876, 66880, 66884, 66888, 
-    66892, 66896, 66900, 66904, 66908, 66912, 66916, 66920, 66924, 66928, 
-    66932, 66936, 66940, 66944, 66948, 66952, 66956, 66960, 66964, 66968, 
-    66972, 66976, 66980, 66984, 66988, 66992, 66996, 67000, 67004, 67008, 
-    67012, 67016, 67020, 67024, 67028, 67032, 67036, 67040, 67044, 67048, 
-    67052, 67056, 67060, 67064, 67068, 67072, 67076, 67080, 67084, 67088, 
-    67092, 67096, 67100, 67104, 67108, 67112, 67116, 67120, 67124, 67128, 
-    67132, 67136, 67140, 67144, 67148, 67152, 67156, 67160, 67164, 67168, 
-    67172, 67176, 67180, 67184, 67188, 67192, 67196, 67200, 67204, 67207, 
-    67211, 67215, 67219, 67223, 67227, 67231, 67235, 67238, 67242, 67246, 
-    67250, 67254, 67258, 67262, 67266, 67270, 67274, 67278, 67282, 67286, 
-    67290, 67294, 67298, 67302, 67306, 67310, 67314, 67318, 67322, 67326, 
-    67330, 67334, 67338, 67342, 67346, 67350, 67354, 67358, 67362, 67366, 
-    67370, 67374, 67378, 67382, 67386, 67390, 67394, 67398, 67402, 67406, 
-    67410, 67414, 67418, 67422, 67426, 67430, 67434, 67438, 67442, 67446, 
-    67450, 67454, 67458, 67462, 67466, 67470, 67474, 67478, 67482, 67486, 
-    67490, 67494, 67498, 67502, 67506, 67510, 67514, 67518, 67522, 67526, 
-    67530, 67534, 67538, 67542, 67546, 67550, 67554, 67558, 67562, 67566, 
-    67570, 67574, 67578, 67582, 67586, 67590, 67594, 67598, 67602, 67606, 
-    67610, 67614, 67618, 67622, 67626, 67630, 67634, 67638, 67642, 67646, 
-    67650, 67654, 67658, 67662, 67666, 67670, 67674, 67678, 67682, 67686, 
-    67690, 67694, 67698, 67702, 67706, 67710, 67714, 67718, 67722, 67726, 
-    67730, 67734, 67738, 67742, 67746, 67750, 67754, 67758, 67762, 67766, 
-    67770, 67774, 67778, 67782, 67786, 67790, 67794, 67798, 67802, 67806, 
-    67810, 67814, 67818, 67822, 67826, 67830, 67834, 67838, 67842, 67846, 
-    67850, 67854, 67858, 67862, 67866, 67870, 67874, 67878, 67882, 67886, 
-    67890, 67894, 67898, 67902, 67906, 67910, 67914, 67918, 67922, 67926, 
-    67930, 67934, 67938, 67942, 67946, 67950, 67954, 67958, 67962, 67965, 
-    67969, 67973, 67977, 67981, 67985, 67989, 67993, 67997, 68001, 68005, 
-    68009, 68013, 68017, 68021, 68025, 68029, 68033, 68037, 68041, 68045, 
-    68049, 68053, 68057, 68061, 68065, 68069, 68073, 68077, 68081, 68085, 
-    68089, 68093, 68097, 68101, 68105, 68109, 68113, 68117, 68121, 68125, 
-    68129, 68133, 68137, 68141, 68145, 68149, 68153, 68157, 68161, 68165, 
-    68169, 68173, 68177, 68181, 68185, 68189, 68193, 68197, 68201, 68205, 
-    68209, 68213, 68217, 68221, 68225, 68229, 68233, 68237, 68241, 68245, 
-    68249, 68253, 68257, 68261, 68265, 68269, 68273, 68277, 68281, 68285, 
-    68289, 68293, 68297, 68301, 68305, 68309, 68313, 68317, 68321, 68325, 
-    68329, 68333, 68337, 68341, 68345, 68349, 68353, 68357, 68361, 68365, 
-    68369, 68373, 68377, 68381, 68385, 68389, 68393, 68397, 68401, 68405, 
-    68409, 68413, 68417, 68421, 68425, 68429, 68433, 68437, 68441, 68445, 
-    68449, 68453, 68457, 68461, 68465, 68469, 68473, 68477, 68481, 68485, 
-    68489, 68493, 68497, 68501, 68505, 68509, 68513, 68517, 68521, 68525, 
-    68529, 68533, 68537, 68541, 68545, 68549, 68553, 68557, 68561, 68565, 
-    68569, 68573, 68577, 68581, 68585, 68589, 68593, 68597, 68601, 68605, 
-    68609, 68613, 68617, 68621, 68625, 68629, 68633, 68637, 68641, 68645, 
-    68649, 68653, 68657, 68661, 68665, 68669, 68673, 68677, 68681, 68685, 
-    68689, 68693, 68697, 68701, 68705, 68709, 68713, 68717, 68721, 68725, 
-    68729, 68733, 68737, 68741, 68745, 0, 0, 0, 68749, 68753, 68757, 68761, 
-    68765, 68769, 68773, 68777, 68781, 68785, 68789, 68793, 68797, 68801, 
-    68805, 68809, 68813, 68817, 68821, 68825, 68829, 68833, 68837, 68841, 
-    68845, 68849, 68853, 68857, 68861, 68865, 68869, 68873, 68877, 68881, 
-    68885, 68889, 68893, 68897, 68901, 68905, 68909, 68913, 68917, 68921, 
-    68925, 68929, 68933, 68937, 68941, 68945, 68949, 68953, 68957, 68961, 
-    68965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68969, 68974, 68978, 68983, 68988, 
-    68993, 68998, 69003, 69007, 69012, 69017, 69022, 69027, 69032, 69037, 
-    69042, 69046, 69050, 69055, 69059, 69064, 69069, 69074, 69078, 69083, 
-    69088, 69093, 69098, 69103, 69107, 69112, 69116, 69121, 69125, 69130, 
-    69134, 69138, 69142, 69147, 69152, 69157, 69165, 69173, 69181, 69189, 
-    69196, 69204, 69210, 69218, 69222, 69226, 69230, 69234, 69238, 69242, 
-    69246, 69250, 69254, 69258, 69262, 69266, 69270, 69274, 69278, 69282, 
-    69286, 69290, 69294, 69298, 69302, 69306, 69310, 69314, 69318, 69322, 
-    69326, 69330, 69334, 69338, 69342, 69346, 69350, 69354, 69358, 69362, 
-    69365, 69369, 69373, 69377, 69381, 69385, 69389, 69393, 69397, 69401, 
-    69405, 69409, 69413, 69417, 69421, 69425, 69429, 69433, 69437, 69441, 
-    69445, 69449, 69453, 69457, 69461, 69465, 69469, 69473, 69477, 69481, 
-    69485, 69489, 69493, 69497, 69501, 69505, 69509, 69512, 69516, 69520, 
-    69523, 69527, 69531, 69535, 69538, 69542, 69546, 69550, 69554, 69558, 
-    69562, 69566, 69570, 69574, 69578, 69582, 69586, 69590, 69594, 69597, 
-    69601, 69605, 69608, 69612, 69616, 69620, 69624, 69628, 69632, 69635, 
-    69638, 69642, 69646, 69650, 69653, 69656, 69660, 69664, 69668, 69672, 
-    69676, 69680, 69684, 69688, 69692, 69696, 69700, 69704, 69708, 69712, 
-    69716, 69720, 69724, 69728, 69732, 69736, 69740, 69744, 69748, 69752, 
-    69756, 69760, 69764, 69768, 69772, 69776, 69780, 69784, 69788, 69792, 
-    69796, 69800, 69804, 69807, 69811, 69815, 69819, 69823, 69827, 69831, 
-    69835, 69839, 69843, 69847, 69851, 69855, 69859, 69863, 69867, 69871, 
-    69875, 69879, 69883, 69887, 69891, 69895, 69899, 69903, 69907, 69911, 
-    69915, 69919, 69923, 69927, 69931, 69935, 69939, 69943, 69947, 69951, 
-    69954, 69958, 69962, 69966, 69970, 69974, 69978, 69982, 69986, 69990, 
-    69994, 69998, 70002, 70006, 70010, 70014, 70018, 70021, 70025, 70029, 
-    70033, 70037, 70041, 70045, 70049, 70053, 70057, 70061, 70065, 70069, 
-    70073, 70077, 70081, 70085, 70089, 70093, 70097, 70101, 70105, 70108, 
-    70112, 70116, 70120, 70124, 70128, 70132, 70136, 70140, 70144, 70148, 
-    70152, 70156, 70160, 70164, 70168, 70172, 70176, 70180, 70184, 70188, 
-    70192, 70196, 70200, 70204, 70208, 70212, 70216, 70220, 70224, 70228, 
-    70232, 70236, 70240, 70244, 70248, 70252, 70256, 70260, 70264, 70268, 
-    70272, 70276, 70280, 70283, 70288, 70292, 70298, 70303, 70309, 70313, 
-    70317, 70321, 70325, 70329, 70333, 70337, 70341, 70345, 70349, 70353, 
-    70357, 70361, 70365, 70368, 70371, 70374, 70377, 70380, 70383, 70386, 
-    70389, 70392, 70397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 70403, 70408, 70413, 70418, 70423, 70430, 70437, 70442, 70447, 
-    70452, 70457, 70464, 70471, 70478, 70485, 70492, 70499, 70509, 70519, 
-    70526, 70533, 70540, 70547, 70553, 70559, 70568, 70577, 70584, 70591, 
-    70602, 70613, 70618, 70623, 70630, 70637, 70644, 70651, 70658, 70665, 
-    70672, 70679, 70685, 70691, 70697, 70703, 70710, 70717, 70722, 70726, 
-    70733, 70740, 70747, 70751, 70758, 70762, 70767, 70771, 70777, 70782, 
-    70788, 70793, 70797, 70801, 70804, 70807, 70812, 70817, 70822, 70827, 
-    70832, 70837, 70842, 70847, 70852, 70857, 70866, 70875, 70880, 70885, 
-    70890, 70895, 70900, 70905, 70910, 70915, 70920, 70925, 70930, 0, 0, 0, 
-    0, 0, 0, 0, 70935, 70941, 70944, 70947, 70950, 70954, 70958, 70962, 
-    70966, 70969, 70973, 70976, 70980, 70983, 70987, 70991, 70995, 70999, 
-    71003, 71007, 71011, 71014, 71018, 71022, 71026, 71030, 71034, 71038, 
-    71042, 71046, 71050, 71054, 71058, 71062, 71066, 71070, 71073, 71077, 
-    71081, 71085, 71089, 71093, 71097, 71101, 71105, 71109, 71113, 71117, 
-    71121, 71125, 71129, 71133, 71137, 71141, 71145, 71149, 71153, 71157, 
-    71161, 71165, 71169, 71172, 71176, 71180, 71184, 71188, 71192, 71196, 
-    71200, 71203, 71207, 71211, 71215, 71219, 71223, 71227, 71231, 71235, 
-    71239, 71243, 71247, 71251, 71256, 71261, 71264, 71269, 71272, 71275, 
-    71278, 0, 0, 0, 0, 0, 0, 0, 0, 71282, 71291, 71300, 71309, 71318, 71327, 
-    71336, 71345, 71354, 71362, 71369, 71377, 71384, 71392, 71402, 71411, 
-    71421, 71430, 71440, 71448, 71455, 71463, 71470, 71478, 71483, 71488, 
-    71493, 71502, 71508, 71514, 71521, 71530, 71538, 71546, 71554, 71561, 
-    71568, 71575, 71582, 71587, 71592, 71597, 71602, 71607, 71612, 71617, 
-    71622, 71630, 71638, 71644, 71650, 71655, 71660, 71665, 71670, 71675, 
-    71680, 71685, 71690, 71698, 71706, 71711, 71716, 71726, 71736, 71743, 
-    71750, 71759, 71768, 71780, 71792, 71798, 71804, 71812, 71820, 71830, 
-    71840, 71847, 71854, 71859, 71864, 71876, 71888, 71896, 71904, 71914, 
-    71924, 71936, 71948, 71957, 71966, 71973, 71980, 71987, 71994, 72003, 
-    72012, 72017, 72022, 72029, 72036, 72043, 72050, 72062, 72074, 72079, 
-    72084, 72089, 72094, 72099, 72104, 72109, 72114, 72118, 72123, 72128, 
-    72133, 72138, 72143, 72149, 72154, 72159, 72166, 72173, 72180, 72187, 
-    72194, 72203, 72212, 72218, 72224, 72230, 72236, 72243, 72250, 72257, 
-    72264, 72271, 72275, 72282, 72287, 72292, 72299, 0, 72312, 72320, 72328, 
-    72335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72342, 72351, 72360, 72369, 
-    72378, 72387, 72396, 72405, 72414, 72423, 72432, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 63706, 63715, 63724, 63735, 63742, 63747, 63752, 63759, 63766, 
+    63772, 63777, 63782, 63787, 63792, 63799, 63804, 63809, 63814, 63825, 
+    63830, 63835, 63842, 63847, 63854, 63859, 63864, 63871, 63878, 63885, 
+    63894, 63903, 63908, 63913, 63918, 63925, 63930, 63940, 63947, 63952, 
+    63957, 63962, 63967, 63972, 63977, 63986, 63993, 64000, 64005, 64012, 
+    64017, 64024, 64033, 64044, 64049, 64058, 64063, 64070, 64079, 64088, 
+    64093, 64098, 64105, 64111, 64118, 64125, 64129, 64133, 64136, 64140, 
+    64144, 64148, 64152, 64156, 64160, 64164, 64167, 64171, 64175, 64179, 
+    64183, 64187, 64191, 64194, 64198, 64202, 64205, 64209, 64213, 64217, 
+    64221, 64225, 64229, 64233, 64237, 64241, 64245, 64249, 64253, 64257, 
+    64261, 64265, 64269, 64273, 64277, 64281, 64285, 64289, 64293, 64297, 
+    64301, 64305, 64309, 64313, 64317, 64321, 64325, 64329, 64333, 64337, 
+    64341, 64345, 64349, 64353, 64357, 64361, 64365, 64369, 64373, 64377, 
+    64381, 64384, 64388, 64392, 64396, 64400, 64404, 64408, 64412, 64416, 
+    64420, 64424, 64428, 64432, 64436, 64440, 64444, 64448, 64452, 64456, 
+    64460, 64464, 64468, 64472, 64476, 64480, 64484, 64488, 64492, 64496, 
+    64500, 64504, 64508, 64512, 64516, 64520, 64524, 64528, 64532, 64536, 
+    64540, 64544, 64548, 64552, 64556, 64560, 64564, 64568, 64572, 64576, 
+    64580, 64584, 64588, 64592, 64596, 64600, 64604, 64608, 64612, 64616, 
+    64620, 64624, 64628, 64632, 64636, 64640, 64644, 64648, 64652, 64656, 
+    64660, 64664, 64668, 64672, 64676, 64680, 64684, 64688, 64692, 64696, 
+    64700, 64704, 64708, 64712, 64716, 64720, 64724, 64728, 64732, 64736, 
+    64740, 64744, 64748, 64752, 64756, 64760, 64764, 64768, 64772, 64776, 
+    64780, 64784, 64788, 64792, 64796, 64800, 64804, 64808, 64812, 64816, 
+    64820, 64824, 64828, 64832, 64836, 64840, 64844, 64848, 64852, 64855, 
+    64859, 64863, 64867, 64871, 64875, 64879, 64883, 64887, 64891, 64895, 
+    64899, 64903, 64907, 64911, 64915, 64919, 64923, 64927, 64931, 64935, 
+    64939, 64943, 64947, 64951, 64955, 64959, 64963, 64967, 64971, 64975, 
+    64979, 64983, 64987, 64991, 64995, 64999, 65003, 65007, 65011, 65015, 
+    65019, 65023, 65027, 65031, 65035, 65039, 65043, 65047, 65051, 65055, 
+    65059, 65063, 65067, 65071, 65075, 65079, 65083, 65087, 65091, 65095, 
+    65099, 65103, 65107, 65111, 65115, 65119, 65123, 65127, 65131, 65135, 
+    65139, 65143, 65147, 65151, 65155, 65159, 65163, 65167, 65171, 65175, 
+    65179, 65183, 65187, 65191, 65195, 65199, 65203, 65207, 65211, 65215, 
+    65219, 65223, 65227, 65231, 65235, 65239, 65243, 65247, 65251, 65255, 
+    65259, 65263, 65267, 65271, 65275, 65279, 65283, 65287, 65291, 65295, 
+    65299, 65303, 65307, 65311, 65315, 65318, 65322, 65326, 65330, 65334, 
+    65338, 65342, 65346, 65350, 65354, 65358, 65362, 65366, 65370, 65374, 
+    65378, 65382, 65386, 65390, 65394, 65398, 65402, 65406, 65410, 65414, 
+    65418, 65422, 65426, 65430, 65434, 65438, 65442, 65446, 65450, 65454, 
+    65458, 65462, 65466, 65470, 65474, 65478, 65482, 65486, 65490, 65494, 
+    65498, 65502, 65506, 65510, 65514, 65518, 65522, 65526, 65530, 65534, 
+    65538, 65542, 65546, 65550, 65554, 65558, 65562, 65566, 65570, 65574, 
+    65578, 65582, 65586, 65590, 65594, 65598, 65602, 65606, 65610, 65614, 
+    65618, 65622, 65626, 65630, 65634, 65638, 65642, 65646, 65650, 65654, 
+    65658, 65662, 65666, 65670, 65674, 65677, 65681, 65685, 65689, 65693, 
+    65697, 65701, 65705, 65709, 65713, 65717, 65721, 65725, 65729, 65733, 
+    65737, 65741, 65745, 65749, 65753, 65757, 65761, 65765, 65769, 65773, 
+    65777, 65781, 65785, 65789, 65793, 65797, 65801, 65805, 65809, 65813, 
+    65817, 65821, 65825, 65829, 65833, 65837, 65841, 65845, 65849, 65853, 
+    65857, 65861, 65865, 65869, 65873, 65877, 65881, 65885, 65889, 65893, 
+    65897, 65901, 65905, 65909, 65913, 65917, 65921, 65925, 65929, 65933, 
+    65937, 65941, 65945, 65949, 65953, 65957, 65961, 65965, 65969, 65973, 
+    65977, 65981, 65985, 65989, 65993, 65997, 66001, 66005, 66009, 66013, 
+    66017, 66021, 66025, 66029, 66033, 66037, 66041, 66045, 66049, 66053, 
+    66057, 66061, 66065, 66069, 66073, 66077, 66081, 66085, 66089, 66093, 
+    66097, 66101, 66105, 66109, 66113, 66117, 66121, 66125, 66129, 66133, 
+    66137, 66141, 66145, 66149, 66153, 66157, 66161, 66165, 66169, 66172, 
+    66176, 66180, 66184, 66188, 66192, 66196, 66200, 66204, 66208, 66212, 
+    66216, 66220, 66224, 66228, 66232, 66236, 66240, 66244, 66248, 66252, 
+    66256, 66260, 66264, 66268, 66272, 66276, 66280, 66284, 66288, 66292, 
+    66296, 66300, 66304, 66308, 66312, 66316, 66320, 66324, 66328, 66332, 
+    66336, 66340, 66344, 66348, 66352, 66356, 66360, 66364, 66368, 66372, 
+    66376, 66380, 66384, 66388, 66392, 66396, 66400, 66404, 66408, 66412, 
+    66416, 66420, 66424, 66428, 66432, 66436, 66440, 66444, 66448, 66452, 
+    66456, 66460, 66464, 66468, 66472, 66476, 66480, 66484, 66488, 66492, 
+    66496, 66500, 66504, 66508, 66512, 66516, 66520, 66524, 66528, 66532, 
+    66536, 66540, 66544, 66548, 66552, 66556, 66560, 66564, 66568, 66572, 
+    66576, 66580, 66584, 66588, 66592, 66596, 66600, 66604, 66608, 66612, 
+    66616, 66620, 66624, 66627, 66631, 66635, 66639, 66643, 66647, 66651, 
+    66655, 66659, 66663, 66667, 66671, 66675, 66679, 66683, 66687, 66691, 
+    66695, 66699, 66703, 66707, 66711, 66715, 66719, 66723, 66727, 66731, 
+    66735, 66739, 66743, 66747, 66751, 66755, 66759, 66763, 66767, 66771, 
+    66775, 66779, 66783, 66787, 66791, 66795, 66799, 66803, 66807, 66811, 
+    66815, 66819, 66823, 66827, 66831, 66835, 66839, 66843, 66847, 66851, 
+    66855, 66859, 66863, 66867, 66871, 66875, 66879, 66883, 66887, 66891, 
+    66895, 66899, 66903, 66907, 66911, 66915, 66919, 66923, 66927, 66931, 
+    66935, 66939, 66943, 66947, 66951, 66955, 66959, 66963, 66967, 66971, 
+    66975, 66979, 66983, 66987, 66991, 66995, 66999, 67003, 67007, 67011, 
+    67015, 67019, 67023, 67027, 67031, 67035, 67039, 67043, 67047, 67051, 
+    67055, 67059, 67063, 67067, 67071, 67075, 67079, 67083, 67087, 67091, 
+    67095, 67099, 67103, 67107, 67111, 67115, 67119, 67123, 67127, 67131, 
+    67135, 67139, 67143, 67147, 67151, 67155, 67159, 67163, 67167, 67171, 
+    67175, 67179, 67183, 67187, 67191, 67195, 67199, 67203, 67207, 67211, 
+    67215, 67219, 67223, 67227, 67230, 67234, 67238, 67242, 67246, 67250, 
+    67254, 67258, 67261, 67265, 67269, 67273, 67277, 67281, 67285, 67289, 
+    67293, 67297, 67301, 67305, 67309, 67313, 67317, 67321, 67325, 67329, 
+    67333, 67337, 67341, 67345, 67349, 67353, 67357, 67361, 67365, 67369, 
+    67373, 67377, 67381, 67385, 67389, 67393, 67397, 67401, 67405, 67409, 
+    67413, 67417, 67421, 67425, 67429, 67433, 67437, 67441, 67445, 67449, 
+    67453, 67457, 67461, 67465, 67469, 67473, 67477, 67481, 67485, 67489, 
+    67493, 67497, 67501, 67505, 67509, 67513, 67517, 67521, 67525, 67529, 
+    67533, 67537, 67541, 67545, 67549, 67553, 67557, 67561, 67565, 67569, 
+    67573, 67577, 67581, 67585, 67589, 67593, 67597, 67601, 67605, 67609, 
+    67613, 67617, 67621, 67625, 67629, 67633, 67637, 67641, 67645, 67649, 
+    67653, 67657, 67661, 67665, 67669, 67673, 67677, 67681, 67685, 67689, 
+    67693, 67697, 67701, 67705, 67709, 67713, 67717, 67721, 67725, 67729, 
+    67733, 67737, 67741, 67745, 67749, 67753, 67757, 67761, 67765, 67769, 
+    67773, 67777, 67781, 67785, 67789, 67793, 67797, 67801, 67805, 67809, 
+    67813, 67817, 67821, 67825, 67829, 67833, 67837, 67841, 67845, 67849, 
+    67853, 67857, 67861, 67865, 67869, 67873, 67877, 67881, 67885, 67889, 
+    67893, 67897, 67901, 67905, 67909, 67913, 67917, 67921, 67925, 67929, 
+    67933, 67937, 67941, 67945, 67949, 67953, 67957, 67961, 67965, 67969, 
+    67973, 67977, 67981, 67985, 67988, 67992, 67996, 68000, 68004, 68008, 
+    68012, 68016, 68020, 68024, 68028, 68032, 68036, 68040, 68044, 68048, 
+    68052, 68056, 68060, 68064, 68068, 68072, 68076, 68080, 68084, 68088, 
+    68092, 68096, 68100, 68104, 68108, 68112, 68116, 68120, 68124, 68128, 
+    68132, 68136, 68140, 68144, 68148, 68152, 68156, 68160, 68164, 68168, 
+    68172, 68176, 68180, 68184, 68188, 68192, 68196, 68200, 68204, 68208, 
+    68212, 68216, 68220, 68224, 68228, 68232, 68236, 68240, 68244, 68248, 
+    68252, 68256, 68260, 68264, 68268, 68272, 68276, 68280, 68284, 68288, 
+    68292, 68296, 68300, 68304, 68308, 68312, 68316, 68320, 68324, 68328, 
+    68332, 68336, 68340, 68344, 68348, 68352, 68356, 68360, 68364, 68368, 
+    68372, 68376, 68380, 68384, 68388, 68392, 68396, 68400, 68404, 68408, 
+    68412, 68416, 68420, 68424, 68428, 68432, 68436, 68440, 68444, 68448, 
+    68452, 68456, 68460, 68464, 68468, 68472, 68476, 68480, 68484, 68488, 
+    68492, 68496, 68500, 68504, 68508, 68512, 68516, 68520, 68524, 68528, 
+    68532, 68536, 68540, 68544, 68548, 68552, 68556, 68560, 68564, 68568, 
+    68572, 68576, 68580, 68584, 68588, 68592, 68596, 68600, 68604, 68608, 
+    68612, 68616, 68620, 68624, 68628, 68632, 68636, 68640, 68644, 68648, 
+    68652, 68656, 68660, 68664, 68668, 68672, 68676, 68680, 68684, 68688, 
+    68692, 68696, 68700, 68704, 68708, 68712, 68716, 68720, 68724, 68728, 
+    68732, 68736, 68740, 68744, 68748, 68752, 68756, 68760, 68764, 68768, 0, 
+    0, 0, 68772, 68776, 68780, 68784, 68788, 68792, 68796, 68800, 68804, 
+    68808, 68812, 68816, 68820, 68824, 68828, 68832, 68836, 68840, 68844, 
+    68848, 68852, 68856, 68860, 68864, 68868, 68872, 68876, 68880, 68884, 
+    68888, 68892, 68896, 68900, 68904, 68908, 68912, 68916, 68920, 68924, 
+    68928, 68932, 68936, 68940, 68944, 68948, 68952, 68956, 68960, 68964, 
+    68968, 68972, 68976, 68980, 68984, 68988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    68992, 68997, 69001, 69006, 69011, 69016, 69021, 69026, 69030, 69035, 
+    69040, 69045, 69050, 69055, 69060, 69065, 69069, 69073, 69078, 69082, 
+    69087, 69092, 69097, 69101, 69106, 69111, 69116, 69121, 69126, 69130, 
+    69135, 69139, 69144, 69148, 69153, 69157, 69161, 69165, 69170, 69175, 
+    69180, 69188, 69196, 69204, 69212, 69219, 69227, 69233, 69241, 69245, 
+    69249, 69253, 69257, 69261, 69265, 69269, 69273, 69277, 69281, 69285, 
+    69289, 69293, 69297, 69301, 69305, 69309, 69313, 69317, 69321, 69325, 
+    69329, 69333, 69337, 69341, 69345, 69349, 69353, 69357, 69361, 69365, 
+    69369, 69373, 69377, 69381, 69385, 69388, 69392, 69396, 69400, 69404, 
+    69408, 69412, 69416, 69420, 69424, 69428, 69432, 69436, 69440, 69444, 
+    69448, 69452, 69456, 69460, 69464, 69468, 69472, 69476, 69480, 69484, 
+    69488, 69492, 69496, 69500, 69504, 69508, 69512, 69516, 69520, 69524, 
+    69528, 69532, 69535, 69539, 69543, 69546, 69550, 69554, 69558, 69561, 
+    69565, 69569, 69573, 69577, 69581, 69585, 69589, 69593, 69597, 69601, 
+    69605, 69609, 69613, 69617, 69620, 69624, 69628, 69631, 69635, 69639, 
+    69643, 69647, 69651, 69655, 69658, 69661, 69665, 69669, 69673, 69676, 
+    69679, 69683, 69687, 69691, 69695, 69699, 69703, 69707, 69711, 69715, 
+    69719, 69723, 69727, 69731, 69735, 69739, 69743, 69747, 69751, 69755, 
+    69759, 69763, 69767, 69771, 69775, 69779, 69783, 69787, 69791, 69795, 
+    69799, 69803, 69807, 69811, 69815, 69819, 69823, 69827, 69830, 69834, 
+    69838, 69842, 69846, 69850, 69854, 69858, 69862, 69866, 69870, 69874, 
+    69878, 69882, 69886, 69890, 69894, 69898, 69902, 69906, 69910, 69914, 
+    69918, 69922, 69926, 69930, 69934, 69938, 69942, 69946, 69950, 69954, 
+    69958, 69962, 69966, 69970, 69974, 69977, 69981, 69985, 69989, 69993, 
+    69997, 70001, 70005, 70009, 70013, 70017, 70021, 70025, 70029, 70033, 
+    70037, 70041, 70044, 70048, 70052, 70056, 70060, 70064, 70068, 70072, 
+    70076, 70080, 70084, 70088, 70092, 70096, 70100, 70104, 70108, 70112, 
+    70116, 70120, 70124, 70128, 70131, 70135, 70139, 70143, 70147, 70151, 
+    70155, 70159, 70163, 70167, 70171, 70175, 70179, 70183, 70187, 70191, 
+    70195, 70199, 70203, 70207, 70211, 70215, 70219, 70223, 70227, 70231, 
+    70235, 70239, 70243, 70247, 70251, 70255, 70259, 70263, 70267, 70271, 
+    70275, 70279, 70283, 70287, 70291, 70295, 70299, 70303, 70306, 70311, 
+    70315, 70321, 70326, 70332, 70336, 70340, 70344, 70348, 70352, 70356, 
+    70360, 70364, 70368, 70372, 70376, 70380, 70384, 70388, 70391, 70394, 
+    70397, 70400, 70403, 70406, 70409, 70412, 70415, 70420, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70426, 70431, 70436, 70441, 
+    70446, 70453, 70460, 70465, 70470, 70475, 70480, 70487, 70494, 70501, 
+    70508, 70515, 70522, 70532, 70542, 70549, 70556, 70563, 70570, 70576, 
+    70582, 70591, 70600, 70607, 70614, 70625, 70636, 70641, 70646, 70653, 
+    70660, 70667, 70674, 70681, 70688, 70695, 70702, 70708, 70714, 70720, 
+    70726, 70733, 70740, 70745, 70749, 70756, 70763, 70770, 70774, 70781, 
+    70785, 70790, 70794, 70800, 70805, 70811, 70816, 70820, 70824, 70827, 
+    70830, 70835, 70840, 70845, 70850, 70855, 70860, 70865, 70870, 70875, 
+    70880, 70889, 70898, 70903, 70908, 70913, 70918, 70923, 70928, 70933, 
+    70938, 70943, 70948, 70953, 0, 0, 0, 0, 0, 0, 0, 70958, 70964, 70967, 
+    70970, 70973, 70977, 70981, 70985, 70989, 70992, 70996, 70999, 71003, 
+    71006, 71010, 71014, 71018, 71022, 71026, 71030, 71034, 71037, 71041, 
+    71045, 71049, 71053, 71057, 71061, 71065, 71069, 71073, 71077, 71081, 
+    71085, 71089, 71093, 71096, 71100, 71104, 71108, 71112, 71116, 71120, 
+    71124, 71128, 71132, 71136, 71140, 71144, 71148, 71152, 71156, 71160, 
+    71164, 71168, 71172, 71176, 71180, 71184, 71188, 71192, 71195, 71199, 
+    71203, 71207, 71211, 71215, 71219, 71223, 71226, 71230, 71234, 71238, 
+    71242, 71246, 71250, 71254, 71258, 71262, 71266, 71270, 71274, 71279, 
+    71284, 71287, 71292, 71295, 71298, 71301, 0, 0, 0, 0, 0, 0, 0, 0, 71305, 
+    71314, 71323, 71332, 71341, 71350, 71359, 71368, 71377, 71385, 71392, 
+    71400, 71407, 71415, 71425, 71434, 71444, 71453, 71463, 71471, 71478, 
+    71486, 71493, 71501, 71506, 71511, 71516, 71525, 71531, 71537, 71544, 
+    71553, 71561, 71569, 71577, 71584, 71591, 71598, 71605, 71610, 71615, 
+    71620, 71625, 71630, 71635, 71640, 71645, 71653, 71661, 71667, 71673, 
+    71678, 71683, 71688, 71693, 71698, 71703, 71708, 71713, 71721, 71729, 
+    71734, 71739, 71749, 71759, 71766, 71773, 71782, 71791, 71803, 71815, 
+    71821, 71827, 71835, 71843, 71853, 71863, 71870, 71877, 71882, 71887, 
+    71899, 71911, 71919, 71927, 71937, 71947, 71959, 71971, 71980, 71989, 
+    71996, 72003, 72010, 72017, 72026, 72035, 72040, 72045, 72052, 72059, 
+    72066, 72073, 72085, 72097, 72102, 72107, 72112, 72117, 72122, 72127, 
+    72132, 72137, 72141, 72146, 72151, 72156, 72161, 72166, 72172, 72177, 
+    72182, 72189, 72196, 72203, 72210, 72217, 72226, 72235, 72241, 72247, 
+    72253, 72259, 72266, 72273, 72280, 72287, 72294, 72298, 72305, 72310, 
+    72315, 72322, 0, 72335, 72343, 72351, 72358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 72365, 72374, 72383, 72392, 72401, 72410, 72419, 72428, 72437, 
+    72446, 72455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72439, 
-    72446, 72452, 72459, 72467, 72475, 72482, 72490, 72497, 72503, 72509, 
-    72516, 72522, 72528, 72534, 72541, 72548, 72555, 72562, 72569, 72576, 
-    72583, 72590, 72597, 72604, 72611, 72618, 72625, 72632, 72638, 72645, 
-    72652, 72659, 72666, 72673, 72680, 72687, 72694, 72701, 72708, 72715, 
-    72722, 72729, 72736, 72743, 72750, 72757, 72764, 72772, 72780, 72788, 
-    72796, 0, 0, 0, 0, 72804, 72813, 72822, 72831, 72840, 72849, 72858, 
-    72865, 72872, 72879, 0, 0, 0, 0, 0, 0, 72886, 72890, 72895, 72900, 72905, 
-    72910, 72915, 72920, 72925, 72930, 72935, 72940, 72944, 72948, 72953, 
-    72958, 72962, 72967, 72972, 72977, 72982, 72987, 72992, 72997, 73001, 
-    73005, 73010, 73015, 73019, 73023, 73027, 73031, 73035, 73039, 73043, 
-    73048, 73053, 73058, 73063, 73068, 73075, 73081, 73086, 73091, 73096, 
-    73101, 73107, 73114, 73120, 73127, 73133, 73139, 73144, 73151, 73157, 
-    73162, 0, 0, 0, 0, 0, 0, 0, 0, 73168, 73172, 73176, 73179, 73183, 73186, 
-    73190, 73193, 73197, 73201, 73206, 73210, 73215, 73218, 73222, 73226, 
-    73229, 73233, 73237, 73240, 73244, 73248, 73252, 73256, 73260, 73264, 
-    73268, 73272, 73276, 73280, 73284, 73288, 73292, 73296, 73300, 73304, 
-    73308, 73312, 73315, 73318, 73322, 73326, 73330, 73333, 73336, 73339, 
-    73343, 73347, 73351, 73355, 73358, 73361, 73365, 73370, 73375, 73379, 
-    73384, 73388, 73393, 73398, 73404, 73409, 73415, 73419, 73424, 73429, 
-    73433, 73438, 73443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73447, 73450, 73454, 
-    73458, 73461, 73464, 73467, 73470, 73473, 73476, 73479, 73482, 0, 0, 0, 
-    0, 0, 0, 73485, 73490, 73494, 73498, 73502, 73506, 73510, 73514, 73518, 
-    73522, 73526, 73530, 73534, 73538, 73542, 73546, 73550, 73555, 73560, 
-    73566, 73572, 73579, 73584, 73589, 73595, 73599, 73604, 73607, 0, 0, 0, 
-    0, 73610, 73617, 73623, 73629, 73635, 73641, 73647, 73653, 73659, 73665, 
-    73671, 73677, 73684, 73691, 73698, 73704, 73711, 73718, 73725, 73732, 
-    73739, 73745, 73751, 73758, 73764, 73771, 73778, 73784, 73790, 73797, 
-    73804, 73811, 73817, 73824, 73831, 73837, 73844, 73850, 73857, 73864, 
-    73870, 73876, 73883, 73889, 73896, 73903, 73912, 73919, 73926, 73930, 
-    73935, 73940, 73945, 73950, 73954, 73958, 73963, 73967, 73972, 73977, 
-    73982, 73986, 73990, 73995, 73999, 74004, 74008, 74013, 74018, 74023, 
-    74028, 74032, 74037, 74042, 74047, 74053, 74058, 74064, 74070, 74076, 
-    74082, 74088, 74093, 74099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74103, 
-    74108, 74112, 74116, 74120, 74124, 74128, 74132, 74136, 74140, 74144, 
-    74148, 74152, 74156, 74160, 74164, 74168, 74172, 74176, 74180, 74184, 
-    74188, 74192, 74196, 74200, 74204, 74208, 74212, 74216, 74220, 0, 0, 0, 
-    74224, 74228, 74232, 74236, 74240, 74243, 74249, 74252, 74256, 74259, 
-    74265, 74271, 74279, 74282, 74286, 74289, 74292, 74298, 74304, 74308, 
-    74314, 74318, 74322, 74328, 74332, 74338, 74344, 74348, 74352, 74358, 
-    74362, 74368, 74374, 74378, 74384, 74388, 74394, 74397, 74400, 74406, 
-    74410, 74416, 74419, 74422, 74425, 74431, 74435, 74439, 74445, 74451, 
-    74454, 74457, 74463, 74468, 74473, 74478, 74485, 74490, 74497, 74502, 
-    74509, 74514, 74519, 74524, 74529, 74532, 74536, 74540, 74545, 74550, 
-    74555, 74560, 74565, 74570, 74575, 74580, 74587, 74592, 0, 74599, 74602, 
-    74606, 74609, 74612, 74615, 74618, 74621, 74624, 74627, 74630, 0, 0, 0, 
-    0, 74633, 74640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74645, 74648, 74651, 74654, 74657, 
-    74661, 74664, 74667, 74671, 74675, 74679, 74683, 74687, 74691, 74695, 
-    74699, 74703, 74707, 74711, 74715, 74719, 74723, 74727, 74731, 74735, 
-    74738, 74742, 74745, 74749, 74753, 74757, 74761, 74765, 74768, 74772, 
-    74775, 74778, 74782, 74786, 74790, 74793, 74796, 74801, 74805, 74810, 
-    74815, 74819, 74824, 74828, 74833, 74838, 74843, 74847, 74851, 74856, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 74861, 74866, 74871, 74876, 74882, 74887, 74892, 
-    74897, 74902, 74907, 74911, 74915, 74920, 74925, 0, 0, 74931, 74935, 
-    74938, 74941, 74944, 74947, 74950, 74953, 74956, 74959, 0, 0, 74962, 
-    74967, 74972, 74978, 74985, 74991, 74997, 75003, 75009, 75015, 75021, 
-    75027, 75033, 75039, 75045, 75051, 75056, 75061, 75066, 75072, 75078, 
-    75085, 75091, 75097, 75102, 75109, 75116, 75123, 75129, 75134, 75139, 
-    75144, 0, 0, 0, 0, 75152, 75158, 75164, 75170, 75176, 75182, 75188, 
-    75194, 75200, 75206, 75212, 75218, 75224, 75230, 75236, 75242, 75248, 
-    75254, 75260, 75266, 75272, 75277, 75282, 75288, 75294, 75300, 75306, 
-    75312, 75318, 75324, 75330, 75336, 75342, 75348, 75354, 75360, 75366, 
-    75372, 75378, 75384, 75390, 75396, 75402, 75408, 75414, 75420, 75426, 
-    75431, 75436, 75442, 75447, 75451, 75456, 75460, 75464, 75468, 75474, 
-    75479, 75484, 75489, 75494, 75499, 75504, 75509, 75516, 75523, 75530, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 72462, 72469, 72475, 72482, 72490, 72498, 
+    72505, 72513, 72520, 72526, 72532, 72539, 72545, 72551, 72557, 72564, 
+    72571, 72578, 72585, 72592, 72599, 72606, 72613, 72620, 72627, 72634, 
+    72641, 72648, 72655, 72661, 72668, 72675, 72682, 72689, 72696, 72703, 
+    72710, 72717, 72724, 72731, 72738, 72745, 72752, 72759, 72766, 72773, 
+    72780, 72787, 72795, 72803, 72811, 72819, 0, 0, 0, 0, 72827, 72836, 
+    72845, 72854, 72863, 72872, 72881, 72888, 72895, 72902, 0, 0, 0, 0, 0, 0, 
+    72909, 72913, 72918, 72923, 72928, 72933, 72938, 72943, 72948, 72953, 
+    72958, 72963, 72967, 72971, 72976, 72981, 72985, 72990, 72995, 73000, 
+    73005, 73010, 73015, 73020, 73024, 73028, 73033, 73038, 73042, 73046, 
+    73050, 73054, 73058, 73062, 73066, 73071, 73076, 73081, 73086, 73091, 
+    73098, 73104, 73109, 73114, 73119, 73124, 73130, 73137, 73143, 73150, 
+    73156, 73162, 73167, 73174, 73180, 73185, 0, 0, 0, 0, 0, 0, 0, 0, 73191, 
+    73195, 73199, 73202, 73206, 73209, 73213, 73216, 73220, 73224, 73229, 
+    73233, 73238, 73241, 73245, 73249, 73252, 73256, 73260, 73263, 73267, 
+    73271, 73275, 73279, 73283, 73287, 73291, 73295, 73299, 73303, 73307, 
+    73311, 73315, 73319, 73323, 73327, 73331, 73335, 73338, 73341, 73345, 
+    73349, 73353, 73356, 73359, 73362, 73366, 73370, 73374, 73378, 73381, 
+    73384, 73388, 73393, 73398, 73402, 73407, 73411, 73416, 73421, 73427, 
+    73432, 73438, 73442, 73447, 73452, 73456, 73461, 73466, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 73470, 73473, 73477, 73481, 73484, 73487, 73490, 73493, 73496, 
+    73499, 73502, 73505, 0, 0, 0, 0, 0, 0, 73508, 73513, 73517, 73521, 73525, 
+    73529, 73533, 73537, 73541, 73545, 73549, 73553, 73557, 73561, 73565, 
+    73569, 73573, 73578, 73583, 73589, 73595, 73602, 73607, 73612, 73618, 
+    73622, 73627, 73630, 0, 0, 0, 0, 73633, 73640, 73646, 73652, 73658, 
+    73664, 73670, 73676, 73682, 73688, 73694, 73700, 73707, 73714, 73721, 
+    73727, 73734, 73741, 73748, 73755, 73762, 73768, 73774, 73781, 73787, 
+    73794, 73801, 73807, 73813, 73820, 73827, 73834, 73840, 73847, 73854, 
+    73860, 73867, 73873, 73880, 73887, 73893, 73899, 73906, 73912, 73919, 
+    73926, 73935, 73942, 73949, 73953, 73958, 73963, 73968, 73973, 73977, 
+    73981, 73986, 73990, 73995, 74000, 74005, 74009, 74013, 74018, 74022, 
+    74027, 74031, 74036, 74041, 74046, 74051, 74055, 74060, 74065, 74070, 
+    74076, 74081, 74087, 74093, 74099, 74105, 74111, 74116, 74122, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 74126, 74131, 74135, 74139, 74143, 74147, 74151, 
+    74155, 74159, 74163, 74167, 74171, 74175, 74179, 74183, 74187, 74191, 
+    74195, 74199, 74203, 74207, 74211, 74215, 74219, 74223, 74227, 74231, 
+    74235, 74239, 74243, 0, 0, 0, 74247, 74251, 74255, 74259, 74263, 74266, 
+    74272, 74275, 74279, 74282, 74288, 74294, 74302, 74305, 74309, 74312, 
+    74315, 74321, 74327, 74331, 74337, 74341, 74345, 74351, 74355, 74361, 
+    74367, 74371, 74375, 74381, 74385, 74391, 74397, 74401, 74407, 74411, 
+    74417, 74420, 74423, 74429, 74433, 74439, 74442, 74445, 74448, 74454, 
+    74458, 74462, 74468, 74474, 74477, 74480, 74486, 74491, 74496, 74501, 
+    74508, 74513, 74520, 74525, 74532, 74537, 74542, 74547, 74552, 74555, 
+    74559, 74563, 74568, 74573, 74578, 74583, 74588, 74593, 74598, 74603, 
+    74610, 74615, 0, 74622, 74625, 74629, 74632, 74635, 74638, 74641, 74644, 
+    74647, 74650, 74653, 0, 0, 0, 0, 74656, 74663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    75537, 75542, 75547, 75552, 75559, 75566, 75570, 75574, 75579, 75584, 
-    75589, 75594, 75599, 75604, 75609, 75614, 75619, 75625, 75631, 75637, 
-    75643, 75649, 75653, 75659, 75663, 75669, 75676, 75682, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 75686, 75690, 75694, 75698, 75702, 75706, 0, 0, 75710, 75714, 
-    75718, 75722, 75726, 75730, 0, 0, 75734, 75738, 75742, 75746, 75750, 
-    75754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75758, 75762, 75766, 75770, 75774, 
-    75778, 75782, 0, 75786, 75790, 75794, 75798, 75802, 75806, 75810, 0, 0, 
+    74668, 74671, 74674, 74677, 74680, 74684, 74687, 74690, 74694, 74698, 
+    74702, 74706, 74710, 74714, 74718, 74722, 74726, 74730, 74734, 74738, 
+    74742, 74746, 74750, 74754, 74758, 74761, 74765, 74768, 74772, 74776, 
+    74780, 74784, 74788, 74791, 74795, 74798, 74801, 74805, 74809, 74813, 
+    74816, 74819, 74824, 74828, 74833, 74838, 74842, 74847, 74851, 74856, 
+    74861, 74866, 74870, 74874, 74879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74884, 
+    74889, 74894, 74899, 74905, 74910, 74915, 74920, 74925, 74930, 74934, 
+    74938, 74943, 74948, 0, 0, 74954, 74958, 74961, 74964, 74967, 74970, 
+    74973, 74976, 74979, 74982, 0, 0, 74985, 74990, 74995, 75001, 75008, 
+    75014, 75020, 75026, 75032, 75038, 75044, 75050, 75056, 75062, 75068, 
+    75074, 75079, 75084, 75089, 75095, 75101, 75108, 75114, 75120, 75125, 
+    75132, 75139, 75146, 75152, 75157, 75162, 75167, 0, 0, 0, 0, 75175, 
+    75181, 75187, 75193, 75199, 75205, 75211, 75217, 75223, 75229, 75235, 
+    75241, 75247, 75253, 75259, 75265, 75271, 75277, 75283, 75289, 75295, 
+    75300, 75305, 75311, 75317, 75323, 75329, 75335, 75341, 75347, 75353, 
+    75359, 75365, 75371, 75377, 75383, 75389, 75395, 75401, 75407, 75413, 
+    75419, 75425, 75431, 75437, 75443, 75449, 75454, 75459, 75465, 75470, 
+    75474, 75479, 75483, 75487, 75491, 75497, 75502, 75507, 75512, 75517, 
+    75522, 75527, 75532, 75539, 75546, 75553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75560, 75565, 75570, 75575, 
+    75582, 75589, 75593, 75597, 75602, 75607, 75612, 75617, 75622, 75627, 
+    75632, 75637, 75642, 75648, 75654, 75660, 75666, 75672, 75676, 75682, 
+    75686, 75692, 75699, 75705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75709, 75713, 
+    75717, 75721, 75725, 75729, 0, 0, 75733, 75737, 75741, 75745, 75749, 
+    75753, 0, 0, 75757, 75761, 75765, 75769, 75773, 75777, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 75781, 75785, 75789, 75793, 75797, 75801, 75805, 0, 75809, 
+    75813, 75817, 75821, 75825, 75829, 75833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75837, 75842, 75847, 75852, 
+    75857, 75861, 75865, 75870, 75875, 75880, 75885, 75890, 75895, 75900, 
+    75905, 75910, 75914, 75919, 75924, 75929, 75934, 75939, 75944, 75949, 
+    75954, 75959, 75964, 75969, 75976, 75983, 75990, 75997, 76004, 76011, 
+    76018, 76025, 76031, 76037, 76043, 76049, 76055, 76061, 76067, 76073, 
+    76077, 76083, 0, 0, 76089, 76094, 76098, 76102, 76106, 76110, 76114, 
+    76118, 76122, 76126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76130, 76134, 76138, 76142, 76146, 
+    76150, 76154, 76158, 76162, 76166, 76170, 76174, 76178, 76182, 76186, 
+    76190, 76194, 76198, 76202, 76206, 76210, 76214, 76218, 0, 0, 0, 0, 
+    76222, 76226, 76230, 76234, 76238, 76242, 76246, 76250, 76254, 76258, 
+    76262, 76266, 76270, 76274, 76278, 76282, 76286, 76290, 76294, 76298, 
+    76302, 76306, 76310, 76314, 76318, 76322, 76326, 76330, 76334, 76338, 
+    76342, 76346, 76350, 76354, 76358, 76362, 76366, 76370, 76374, 76378, 
+    76382, 76386, 76390, 76394, 76398, 76402, 76406, 76410, 76414, 0, 0, 0, 
+    0, 76418, 76422, 76426, 76430, 76434, 76438, 76442, 76446, 76450, 76454, 
+    76458, 76462, 76466, 76470, 76474, 76478, 76482, 76486, 76490, 76494, 
+    76498, 76502, 76506, 76510, 76514, 76518, 76522, 76526, 76530, 76534, 
+    76538, 76542, 76546, 76550, 76554, 76558, 76562, 76566, 76570, 76574, 
+    76578, 76582, 76586, 76590, 76594, 76598, 76602, 76606, 76610, 76614, 
+    76618, 76622, 76626, 76630, 76634, 76638, 76642, 76646, 76650, 76654, 
+    76658, 76662, 76666, 76670, 76674, 76678, 76682, 76686, 76690, 76694, 
+    76698, 76702, 76706, 76710, 76714, 76718, 76722, 76726, 76730, 76734, 
+    76738, 76742, 76746, 76750, 76754, 76758, 76762, 76766, 76770, 76774, 
+    76778, 76782, 76786, 76790, 76794, 76798, 76802, 76806, 76810, 76814, 
+    76818, 76822, 76826, 76830, 76834, 76838, 76842, 76846, 76850, 76854, 
+    76858, 76862, 76866, 76870, 76874, 76878, 76882, 76886, 76890, 76894, 
+    76898, 76902, 76906, 76910, 76914, 76918, 76922, 76926, 76930, 76934, 
+    76938, 76942, 76946, 76950, 76954, 76958, 76962, 76966, 76970, 76974, 
+    76978, 76982, 76986, 76990, 76994, 76998, 77002, 77006, 77010, 77014, 
+    77018, 77022, 77026, 77030, 77034, 77038, 77042, 77046, 77050, 77054, 
+    77058, 77062, 77066, 77070, 77074, 77078, 77082, 77086, 77090, 77094, 
+    77098, 77102, 77106, 77110, 77114, 77118, 77122, 77126, 77130, 77134, 
+    77138, 77142, 77146, 77150, 77154, 77158, 77162, 77166, 77170, 77174, 
+    77178, 77182, 77186, 77190, 77194, 77198, 77202, 77206, 77210, 77214, 
+    77218, 77222, 77226, 77230, 77234, 77238, 77242, 77246, 77250, 77254, 
+    77258, 77262, 77266, 77270, 77274, 77278, 77282, 77286, 77290, 77294, 
+    77298, 77302, 77306, 77310, 77314, 77318, 77322, 77326, 77330, 77334, 
+    77338, 77342, 77346, 77350, 77354, 77358, 77362, 77366, 77370, 77374, 
+    77378, 77382, 77386, 77390, 77394, 77398, 77402, 77406, 77410, 77414, 
+    77418, 77422, 77426, 77430, 77434, 77438, 77442, 77446, 77450, 77454, 
+    77458, 77462, 77466, 77470, 77474, 77478, 77482, 77486, 77490, 77494, 
+    77498, 77502, 77506, 77510, 77514, 77518, 77522, 77526, 77530, 77534, 
+    77538, 77542, 77546, 77550, 77554, 77558, 77562, 77566, 77570, 77574, 
+    77578, 77582, 77586, 77590, 77594, 77598, 77602, 77606, 77610, 77614, 
+    77618, 77622, 77626, 77630, 77634, 77638, 77642, 77646, 77650, 77654, 
+    77658, 77662, 77666, 77670, 77674, 77678, 77682, 77686, 77690, 77694, 
+    77698, 77702, 77706, 77710, 77714, 77718, 77722, 77726, 77730, 77734, 
+    77738, 77742, 77746, 77750, 77754, 77758, 77762, 77766, 77770, 77774, 
+    77778, 77782, 77786, 77790, 77794, 77798, 77802, 77806, 77810, 77814, 
+    77818, 77822, 77826, 77830, 77834, 77838, 77842, 77846, 77850, 77854, 
+    77858, 77862, 77866, 77870, 77874, 77878, 0, 0, 77882, 77886, 77890, 
+    77894, 77898, 77902, 77906, 77910, 77914, 77918, 77922, 77926, 77930, 
+    77934, 77938, 77942, 77946, 77950, 77954, 77958, 77962, 77966, 77970, 
+    77974, 77978, 77982, 77986, 77990, 77994, 77998, 78002, 78006, 78010, 
+    78014, 78018, 78022, 78026, 78030, 78034, 78038, 78042, 78046, 78050, 
+    78054, 78058, 78062, 78066, 78070, 78074, 78078, 78082, 78086, 78090, 
+    78094, 78098, 78102, 78106, 78110, 78114, 78118, 78122, 78126, 78130, 
+    78134, 78138, 78142, 78146, 78150, 78154, 78158, 78162, 78166, 78170, 
+    78174, 78178, 78182, 78186, 78190, 78194, 78198, 78202, 78206, 78210, 
+    78214, 78218, 78222, 78226, 78230, 78234, 78238, 78242, 78246, 78250, 
+    78254, 78258, 78262, 78266, 78270, 78274, 78278, 78282, 78286, 78290, 
+    78294, 78298, 78302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78306, 
+    78311, 78316, 78321, 78326, 78331, 78339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 78344, 78351, 78358, 78365, 78372, 0, 0, 0, 0, 0, 78379, 78386, 
+    78393, 78403, 78409, 78415, 78421, 78427, 78433, 78439, 78446, 78452, 
+    78458, 78464, 78473, 78482, 78494, 78506, 78512, 78518, 78524, 78531, 
+    78538, 78545, 78552, 78559, 0, 78566, 78573, 78580, 78588, 78595, 0, 
+    78602, 0, 78609, 78616, 0, 78623, 78631, 0, 78638, 78645, 78652, 78659, 
+    78666, 78673, 78680, 78687, 78694, 78701, 78706, 78713, 78720, 78726, 
+    78732, 78738, 78744, 78750, 78756, 78762, 78768, 78774, 78780, 78786, 
+    78792, 78798, 78804, 78810, 78816, 78822, 78828, 78834, 78840, 78846, 
+    78852, 78858, 78864, 78870, 78876, 78882, 78888, 78894, 78900, 78906, 
+    78912, 78918, 78924, 78930, 78936, 78942, 78948, 78954, 78960, 78966, 
+    78972, 78978, 78984, 78990, 78996, 79002, 79008, 79014, 79020, 79026, 
+    79032, 79038, 79044, 79050, 79056, 79062, 79068, 79074, 79080, 79086, 
+    79092, 79098, 79104, 79110, 79116, 79122, 79128, 79134, 79140, 79146, 
+    79152, 79158, 79164, 79170, 79176, 79184, 79192, 79198, 79204, 79210, 
+    79216, 79225, 79234, 79242, 79250, 79258, 79266, 79274, 79282, 79290, 
+    79298, 79305, 79312, 79322, 79332, 79336, 79340, 79345, 79350, 79355, 
+    79360, 79369, 79378, 79384, 79390, 79397, 79404, 79411, 79415, 79421, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79427, 79433, 79439, 
+    79445, 79451, 79456, 79461, 79467, 79473, 79479, 79485, 79493, 79499, 
+    79505, 79513, 79521, 79529, 79537, 79542, 79547, 79552, 79557, 79570, 
+    79583, 79593, 79603, 79614, 79625, 79636, 79647, 79657, 79667, 79678, 
+    79689, 79700, 79711, 79721, 79731, 79741, 79757, 79773, 79789, 79796, 
+    79803, 79810, 79817, 79827, 79837, 79847, 79859, 79869, 79877, 79885, 
+    79894, 79902, 79912, 79920, 79928, 79936, 79945, 79953, 79963, 79971, 
+    79979, 79987, 79997, 80005, 80012, 80019, 80026, 80033, 80041, 80049, 
+    80057, 80065, 80073, 80082, 80090, 80098, 80106, 80114, 80122, 80131, 
+    80139, 80147, 80155, 80163, 80171, 80179, 80187, 80195, 80203, 80211, 
+    80220, 80228, 80238, 80246, 80254, 80262, 80272, 80280, 80288, 80296, 
+    80304, 80313, 80322, 80330, 80340, 80348, 80356, 80364, 80373, 80381, 
+    80391, 80399, 80406, 80413, 80421, 80428, 80437, 80444, 80452, 80460, 
+    80469, 80477, 80487, 80495, 80503, 80511, 80521, 80529, 80536, 80543, 
+    80551, 80558, 80567, 80574, 80584, 80594, 80605, 80614, 80623, 80632, 
+    80641, 80650, 80660, 80671, 80682, 80692, 80703, 80715, 80725, 80734, 
+    80743, 80751, 80760, 80770, 80778, 80787, 80796, 80804, 80813, 80823, 
+    80831, 80840, 80849, 80857, 80866, 80876, 80884, 80894, 80902, 80912, 
+    80920, 80928, 80937, 80945, 80955, 80963, 80971, 80981, 80989, 80996, 
+    81003, 81012, 81021, 81029, 81038, 81048, 81056, 81067, 81075, 81083, 
+    81090, 81098, 81107, 81114, 81124, 81134, 81145, 81155, 81166, 81174, 
+    81182, 81191, 81199, 81208, 81216, 81224, 81233, 81241, 81250, 81258, 
+    81265, 81272, 81279, 81286, 81294, 81302, 81310, 81318, 81327, 81335, 
+    81343, 81352, 81360, 81368, 81376, 81385, 81393, 81401, 81409, 81417, 
+    81425, 81433, 81441, 81449, 81457, 81466, 81474, 81482, 81490, 81498, 
+    81506, 81515, 81524, 81532, 81540, 81548, 81557, 81565, 81574, 81581, 
+    81588, 81596, 81603, 81611, 81619, 81628, 81636, 81645, 81653, 81661, 
+    81671, 81678, 81685, 81693, 81700, 81708, 81718, 81729, 81737, 81746, 
+    81754, 81763, 81771, 81780, 81788, 81797, 81805, 81814, 81823, 81831, 
+    81839, 81847, 81856, 81863, 81871, 81880, 81889, 81898, 81908, 81916, 
+    81926, 81934, 81944, 81952, 81962, 81970, 81980, 81988, 81997, 82004, 
+    82013, 82020, 82030, 82038, 82048, 82056, 82066, 82074, 82082, 82090, 
+    82099, 82107, 82116, 82125, 82134, 82143, 82153, 82161, 82171, 82179, 
+    82189, 82197, 82207, 82215, 82225, 82233, 82242, 82249, 82258, 82265, 
+    82275, 82283, 82293, 82301, 82311, 82319, 82327, 82335, 82344, 82352, 
+    82361, 82370, 82379, 82388, 82396, 82404, 82413, 82421, 82430, 82439, 
+    82447, 82455, 82463, 82472, 82480, 82488, 82497, 82505, 82513, 82521, 
+    82529, 82534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82539, 
+    82549, 82559, 82569, 82579, 82590, 82600, 82610, 82621, 82630, 82639, 
+    82648, 82659, 82669, 82679, 82691, 82701, 82711, 82721, 82731, 82741, 
+    82751, 82761, 82771, 82781, 82791, 82801, 82812, 82823, 82833, 82843, 
+    82855, 82866, 82877, 82887, 82897, 82907, 82917, 82927, 82937, 82947, 
+    82959, 82969, 82979, 82991, 83002, 83013, 83023, 83033, 83043, 83053, 
+    83065, 83075, 83085, 83096, 83107, 83117, 83127, 83136, 83145, 83154, 
+    83163, 83172, 83182, 0, 0, 83192, 83202, 83212, 83222, 83232, 83244, 
+    83254, 83264, 83276, 83286, 83298, 83307, 83316, 83327, 83337, 83349, 
+    83360, 83373, 83383, 83395, 83404, 83415, 83426, 83439, 83449, 83459, 
+    83469, 83479, 83489, 83498, 83507, 83516, 83525, 83535, 83545, 83555, 
+    83565, 83575, 83585, 83595, 83605, 83615, 83625, 83635, 83645, 83654, 
+    83663, 83672, 83682, 83692, 83702, 83712, 83722, 83733, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83743, 83758, 83773, 83779, 83785, 83791, 
+    83797, 83803, 83809, 83815, 83821, 83829, 83833, 83836, 0, 0, 83844, 
+    83847, 83850, 83853, 83856, 83859, 83862, 83865, 83868, 83871, 83874, 
+    83877, 83880, 83883, 83886, 83889, 83892, 83900, 83909, 83920, 83928, 
+    83936, 83945, 83954, 83965, 83977, 0, 0, 0, 0, 0, 0, 83986, 83991, 83996, 
+    84003, 84010, 84016, 84022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84027, 84037, 
+    84047, 84057, 84066, 84077, 84086, 84095, 84105, 84115, 84127, 84139, 
+    84150, 84161, 84172, 84183, 84193, 84203, 84213, 84223, 84234, 84245, 
+    84249, 84254, 84263, 84272, 84276, 84280, 84284, 84289, 84294, 84299, 
+    84304, 84307, 84311, 0, 84316, 84319, 84322, 84326, 84330, 84335, 84339, 
+    84343, 84348, 84353, 84360, 84367, 84370, 84373, 84376, 84379, 84382, 
+    84386, 84390, 0, 84394, 84399, 84403, 84407, 0, 0, 0, 0, 84412, 84417, 
+    84424, 84429, 84434, 0, 84439, 84444, 84449, 84454, 84459, 84464, 84469, 
+    84474, 84479, 84484, 84489, 84494, 84503, 84512, 84520, 84528, 84537, 
+    84546, 84555, 84564, 84572, 84580, 84588, 84596, 84601, 84606, 84612, 
+    84618, 84624, 84630, 84638, 84646, 84652, 84658, 84664, 84670, 84676, 
+    84682, 84688, 84694, 84699, 84704, 84709, 84714, 84719, 84724, 84729, 
+    84734, 84740, 84746, 84752, 84758, 84764, 84770, 84776, 84782, 84788, 
+    84794, 84800, 84806, 84812, 84818, 84824, 84830, 84836, 84842, 84848, 
+    84854, 84860, 84866, 84872, 84878, 84884, 84890, 84896, 84902, 84908, 
+    84914, 84920, 84926, 84932, 84938, 84944, 84950, 84956, 84962, 84968, 
+    84974, 84980, 84986, 84992, 84998, 85004, 85010, 85016, 85022, 85028, 
+    85034, 85040, 85046, 85052, 85058, 85064, 85070, 85076, 85082, 85088, 
+    85094, 85099, 85104, 85109, 85114, 85120, 85126, 85132, 85138, 85144, 
+    85150, 85156, 85162, 85168, 85174, 85181, 85188, 85193, 85198, 85203, 
+    85208, 85220, 85232, 85243, 85254, 85266, 85278, 85286, 0, 0, 85294, 0, 
+    85302, 85306, 85310, 85313, 85317, 85321, 85324, 85327, 85331, 85335, 
+    85338, 85341, 85344, 85347, 85352, 85355, 85359, 85362, 85365, 85368, 
+    85371, 85374, 85377, 85380, 85383, 85386, 85389, 85392, 85396, 85400, 
+    85404, 85408, 85413, 85418, 85424, 85430, 85436, 85441, 85447, 85453, 
+    85459, 85464, 85470, 85476, 85481, 85486, 85492, 85497, 85503, 85509, 
+    85514, 85520, 85526, 85531, 85537, 85543, 85549, 85555, 85561, 85565, 
+    85570, 85574, 85579, 85583, 85588, 85593, 85599, 85605, 85611, 85616, 
+    85622, 85628, 85634, 85639, 85645, 85651, 85656, 85661, 85667, 85672, 
+    85678, 85684, 85689, 85695, 85701, 85706, 85712, 85718, 85724, 85730, 
+    85736, 85741, 85745, 85750, 85752, 85757, 85762, 85768, 85773, 85778, 
+    85782, 85788, 85793, 85798, 85803, 85808, 85813, 85818, 85823, 85829, 
+    85835, 85841, 85849, 85853, 85857, 85861, 85865, 85869, 85873, 85878, 
+    85883, 85888, 85893, 85897, 85902, 85907, 85912, 85917, 85922, 85927, 
+    85932, 85937, 85941, 85945, 85950, 85955, 85960, 85965, 85969, 85974, 
+    85979, 85984, 85989, 85993, 85998, 86003, 86008, 86013, 86017, 86022, 
+    86027, 86031, 86036, 86041, 86046, 86051, 86056, 86061, 86068, 86075, 
+    86079, 86084, 86089, 86094, 86099, 86104, 86109, 86114, 86119, 86124, 
+    86129, 86134, 86139, 86144, 86149, 86154, 86159, 86164, 86169, 86174, 
+    86179, 86184, 86189, 86194, 86199, 86204, 86209, 86214, 86219, 86224, 0, 
+    0, 0, 86229, 86233, 86238, 86242, 86247, 86252, 0, 0, 86256, 86261, 
+    86266, 86270, 86275, 86280, 0, 0, 86285, 86290, 86294, 86299, 86304, 
+    86309, 0, 0, 86314, 86319, 86324, 0, 0, 0, 86328, 86332, 86336, 86340, 
+    86343, 86347, 86351, 0, 86355, 86361, 86364, 86368, 86371, 86375, 86379, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86383, 86389, 86395, 86401, 86407, 0, 0, 
+    86411, 86417, 86423, 86429, 86435, 86441, 86448, 86455, 86462, 86469, 
+    86476, 86483, 0, 86490, 86497, 86504, 86510, 86517, 86524, 86531, 86538, 
+    86544, 86551, 86558, 86565, 86572, 86578, 86585, 86592, 86599, 86606, 
+    86612, 86619, 86626, 86633, 86640, 86647, 86654, 86661, 0, 86668, 86674, 
+    86681, 86688, 86695, 86702, 86708, 86715, 86722, 86729, 86736, 86743, 
+    86750, 86757, 86763, 86770, 86777, 86784, 86791, 0, 86798, 86805, 0, 
+    86812, 86819, 86826, 86833, 86840, 86847, 86854, 86861, 86868, 86875, 
+    86882, 86889, 86896, 86903, 86910, 0, 0, 86916, 86921, 86926, 86931, 
+    86936, 86941, 86946, 86951, 86956, 86961, 86966, 86971, 86976, 86981, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 86986, 86993, 87000, 87007, 87014, 87021, 
+    87028, 87035, 87042, 87049, 87056, 87063, 87070, 87077, 87084, 87091, 
+    87098, 87105, 87112, 87119, 87127, 87135, 87142, 87149, 87154, 87162, 
+    87170, 87177, 87184, 87189, 87196, 87201, 87206, 87213, 87218, 87223, 
+    87228, 87236, 87241, 87246, 87253, 87258, 87263, 87270, 87277, 87282, 
+    87287, 87292, 87297, 87302, 87307, 87312, 87317, 87322, 87329, 87334, 
+    87341, 87346, 87351, 87356, 87361, 87366, 87371, 87376, 87381, 87386, 
+    87391, 87396, 87403, 87410, 87417, 87424, 87430, 87435, 87442, 87447, 
+    87452, 87461, 87468, 87477, 87484, 87489, 87494, 87502, 87507, 87512, 
+    87517, 87522, 87527, 87534, 87539, 87544, 87549, 87554, 87559, 87566, 
+    87573, 87580, 87587, 87594, 87601, 87608, 87615, 87622, 87629, 87636, 
+    87643, 87650, 87657, 87664, 87671, 87678, 87685, 87692, 87699, 87706, 
+    87713, 87720, 87727, 87734, 87741, 87748, 87755, 0, 0, 0, 0, 0, 87762, 
+    87770, 87778, 0, 0, 0, 0, 87783, 87787, 87791, 87795, 87799, 87803, 
+    87807, 87811, 87815, 87819, 87824, 87829, 87834, 87839, 87844, 87849, 
+    87854, 87859, 87864, 87870, 87876, 87882, 87889, 87896, 87903, 87910, 
+    87917, 87924, 87930, 87936, 87942, 87949, 87956, 87963, 87970, 87977, 
+    87984, 87991, 87998, 88005, 88012, 88019, 88026, 88033, 88040, 0, 0, 0, 
+    88047, 88055, 88063, 88071, 88079, 88087, 88097, 88107, 88115, 88123, 
+    88131, 88139, 88147, 88153, 88160, 88169, 88178, 88187, 88196, 88205, 
+    88214, 88224, 88235, 88245, 88256, 88265, 88274, 88283, 88293, 88304, 
+    88314, 88325, 88336, 88345, 88353, 88359, 88365, 88371, 88377, 88385, 
+    88393, 88399, 88406, 88416, 88423, 88430, 88437, 88444, 88451, 88461, 
+    88468, 88475, 88483, 88491, 88500, 88509, 88518, 88527, 88536, 88544, 
+    88553, 88562, 88571, 88575, 88582, 88587, 88592, 88596, 88600, 88604, 
+    88608, 88613, 88618, 88624, 88630, 88634, 88640, 88644, 88648, 88652, 
+    88656, 88660, 88664, 88670, 0, 0, 0, 0, 0, 88674, 88679, 88684, 88689, 
+    88694, 88701, 88706, 88711, 88716, 88721, 88726, 88731, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88736, 
+    88743, 88752, 88761, 88768, 88775, 88782, 88789, 88796, 88803, 88809, 
+    88816, 88823, 88830, 88837, 88844, 88851, 88858, 88865, 88874, 88881, 
+    88888, 88895, 88902, 88909, 88916, 88923, 88930, 88939, 88946, 88953, 
+    88960, 88967, 88974, 88981, 88990, 88997, 89004, 89011, 89018, 89027, 
+    89034, 89041, 89048, 89056, 89065, 0, 0, 89074, 89078, 89082, 89087, 
+    89092, 89097, 89102, 89106, 89111, 89116, 89121, 89126, 89131, 89136, 
+    89140, 89144, 89149, 89154, 89159, 89163, 89168, 89173, 89177, 89182, 
+    89187, 89192, 89197, 89202, 89207, 0, 0, 0, 89212, 89216, 89221, 89226, 
+    89230, 89235, 89239, 89244, 89249, 89254, 89259, 89263, 89267, 89272, 
+    89277, 89282, 89287, 89292, 89297, 89301, 89306, 89311, 89316, 89321, 
+    89326, 89331, 89335, 89339, 89344, 89349, 89354, 89359, 89364, 89369, 
+    89374, 89379, 89384, 89389, 89394, 89399, 89404, 89409, 89414, 89419, 
+    89424, 89429, 89434, 89439, 89444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89449, 89453, 89458, 89463, 89468, 89472, 
+    89477, 89482, 89487, 89492, 89496, 89500, 89505, 89510, 89515, 89520, 
+    89524, 89529, 89534, 89539, 89544, 89549, 89554, 89558, 89563, 89568, 
+    89573, 89578, 89583, 89588, 89593, 0, 89598, 89603, 89608, 89614, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89620, 89625, 89630, 89635, 89640, 89645, 
+    89650, 89655, 89660, 89665, 89670, 89675, 89680, 89685, 89690, 89695, 
+    89700, 89705, 89710, 89715, 89720, 89725, 89730, 89735, 89740, 89745, 
+    89750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 89757, 89762, 89767, 89772, 89777, 89782, 89787, 
+    89792, 89797, 89802, 89807, 89812, 89817, 89822, 89827, 89832, 89837, 
+    89842, 89847, 89852, 89857, 89862, 89867, 89872, 89877, 89882, 89887, 
+    89891, 89895, 89899, 0, 89904, 89910, 89915, 89920, 89925, 89930, 89936, 
+    89942, 89948, 89954, 89960, 89966, 89972, 89978, 89984, 89990, 89996, 
+    90002, 90008, 90013, 90019, 90025, 90030, 90036, 90041, 90047, 90053, 
+    90058, 90064, 90070, 90075, 90081, 90087, 90092, 90098, 90104, 90110, 0, 
+    0, 0, 0, 90115, 90121, 90127, 90133, 90139, 90145, 90151, 90157, 90163, 
+    90170, 90175, 90180, 90186, 90192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 90198, 90203, 90208, 90213, 90219, 90224, 90230, 90236, 
+    90242, 90248, 90255, 90261, 90268, 90273, 90278, 90283, 90288, 90293, 
+    90298, 90303, 90308, 90313, 90318, 90323, 90328, 90333, 90338, 90343, 
+    90348, 90353, 90358, 90363, 90368, 90373, 90378, 90383, 90388, 90393, 
+    90398, 90403, 90408, 90413, 90418, 90423, 90429, 90434, 90440, 90446, 
+    90452, 90458, 90465, 90471, 90478, 90483, 90488, 90493, 90498, 90503, 
+    90508, 90513, 90518, 90523, 90528, 90533, 90538, 90543, 90548, 90553, 
+    90558, 90563, 90568, 90573, 90578, 90583, 90588, 90593, 90598, 90603, 
+    90608, 90613, 90618, 90623, 90628, 90633, 90638, 90643, 90648, 90653, 
+    90658, 90663, 90668, 90673, 90678, 90683, 90688, 90693, 90698, 90703, 
+    90708, 90713, 90718, 90723, 90728, 90733, 90738, 90743, 90748, 90753, 
+    90758, 90763, 90768, 90773, 90778, 90783, 90788, 90793, 90798, 90803, 
+    90808, 90813, 90818, 90823, 90828, 90833, 90838, 90843, 90848, 90853, 
+    90858, 90863, 90868, 90873, 90878, 90883, 90888, 90893, 90897, 90901, 
+    90906, 90911, 90916, 90921, 90926, 90931, 90936, 90941, 90946, 90951, 
+    90956, 90960, 90964, 90968, 90972, 90976, 90980, 90984, 90989, 90994, 0, 
+    0, 90999, 91004, 91008, 91012, 91016, 91020, 91024, 91028, 91032, 91036, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91040, 91044, 91048, 91052, 
+    91056, 91060, 0, 0, 91065, 0, 91070, 91074, 91079, 91084, 91089, 91094, 
+    91099, 91104, 91109, 91114, 91119, 91123, 91128, 91133, 91138, 91143, 
+    91147, 91152, 91157, 91162, 91167, 91171, 91176, 91181, 91186, 91191, 
+    91195, 91200, 91205, 91210, 91215, 91219, 91224, 91229, 91234, 91239, 
+    91244, 91249, 91254, 91258, 91263, 91268, 91273, 91278, 0, 91283, 91288, 
+    0, 0, 0, 91293, 0, 0, 91298, 91303, 91310, 91317, 91324, 91331, 91338, 
+    91345, 91352, 91359, 91366, 91373, 91380, 91387, 91394, 91401, 91408, 
+    91415, 91422, 91429, 91436, 91443, 91450, 0, 91457, 91464, 91470, 91476, 
+    91482, 91489, 91496, 91504, 91512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91521, 91526, 
+    91531, 91536, 91541, 91546, 91551, 91556, 91561, 91566, 91571, 91576, 
+    91581, 91586, 91591, 91596, 91601, 91606, 91611, 91616, 91621, 91626, 
+    91631, 91635, 91640, 91645, 91651, 91655, 0, 0, 0, 91659, 91665, 91669, 
+    91674, 91679, 91684, 91688, 91693, 91697, 91702, 91707, 91711, 91715, 
+    91720, 91724, 91728, 91733, 91738, 91742, 91747, 91752, 91757, 91762, 
+    91767, 91772, 91777, 91782, 0, 0, 0, 0, 0, 91787, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 91792, 91798, 91804, 91810, 91816, 91822, 91829, 
+    91836, 91843, 91849, 91855, 91861, 91868, 91875, 91882, 91888, 91895, 
+    91902, 91909, 91916, 91922, 91929, 91936, 91942, 91949, 91956, 91963, 
+    91970, 91977, 91983, 91990, 91997, 92004, 92010, 92016, 92022, 92028, 
+    92034, 92041, 92048, 92054, 92060, 92066, 92073, 92079, 92086, 92093, 
+    92100, 92106, 92114, 92121, 92127, 92134, 92141, 92148, 92154, 0, 0, 0, 
+    0, 0, 0, 92161, 92169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    75814, 75819, 75824, 75829, 75834, 75838, 75842, 75847, 75852, 75857, 
-    75862, 75867, 75872, 75877, 75882, 75887, 75891, 75896, 75901, 75906, 
-    75911, 75916, 75921, 75926, 75931, 75936, 75941, 75946, 75953, 75960, 
-    75967, 75974, 75981, 75988, 75995, 76002, 76008, 76014, 76020, 76026, 
-    76032, 76038, 76044, 76050, 76054, 76060, 0, 0, 76066, 76071, 76075, 
-    76079, 76083, 76087, 76091, 76095, 76099, 76103, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76107, 
-    76111, 76115, 76119, 76123, 76127, 76131, 76135, 76139, 76143, 76147, 
-    76151, 76155, 76159, 76163, 76167, 76171, 76175, 76179, 76183, 76187, 
-    76191, 76195, 0, 0, 0, 0, 76199, 76203, 76207, 76211, 76215, 76219, 
-    76223, 76227, 76231, 76235, 76239, 76243, 76247, 76251, 76255, 76259, 
-    76263, 76267, 76271, 76275, 76279, 76283, 76287, 76291, 76295, 76299, 
-    76303, 76307, 76311, 76315, 76319, 76323, 76327, 76331, 76335, 76339, 
-    76343, 76347, 76351, 76355, 76359, 76363, 76367, 76371, 76375, 76379, 
-    76383, 76387, 76391, 0, 0, 0, 0, 76395, 76399, 76403, 76407, 76411, 
-    76415, 76419, 76423, 76427, 76431, 76435, 76439, 76443, 76447, 76451, 
-    76455, 76459, 76463, 76467, 76471, 76475, 76479, 76483, 76487, 76491, 
-    76495, 76499, 76503, 76507, 76511, 76515, 76519, 76523, 76527, 76531, 
-    76535, 76539, 76543, 76547, 76551, 76555, 76559, 76563, 76567, 76571, 
-    76575, 76579, 76583, 76587, 76591, 76595, 76599, 76603, 76607, 76611, 
-    76615, 76619, 76623, 76627, 76631, 76635, 76639, 76643, 76647, 76651, 
-    76655, 76659, 76663, 76667, 76671, 76675, 76679, 76683, 76687, 76691, 
-    76695, 76699, 76703, 76707, 76711, 76715, 76719, 76723, 76727, 76731, 
-    76735, 76739, 76743, 76747, 76751, 76755, 76759, 76763, 76767, 76771, 
-    76775, 76779, 76783, 76787, 76791, 76795, 76799, 76803, 76807, 76811, 
-    76815, 76819, 76823, 76827, 76831, 76835, 76839, 76843, 76847, 76851, 
-    76855, 76859, 76863, 76867, 76871, 76875, 76879, 76883, 76887, 76891, 
-    76895, 76899, 76903, 76907, 76911, 76915, 76919, 76923, 76927, 76931, 
-    76935, 76939, 76943, 76947, 76951, 76955, 76959, 76963, 76967, 76971, 
-    76975, 76979, 76983, 76987, 76991, 76995, 76999, 77003, 77007, 77011, 
-    77015, 77019, 77023, 77027, 77031, 77035, 77039, 77043, 77047, 77051, 
-    77055, 77059, 77063, 77067, 77071, 77075, 77079, 77083, 77087, 77091, 
-    77095, 77099, 77103, 77107, 77111, 77115, 77119, 77123, 77127, 77131, 
-    77135, 77139, 77143, 77147, 77151, 77155, 77159, 77163, 77167, 77171, 
-    77175, 77179, 77183, 77187, 77191, 77195, 77199, 77203, 77207, 77211, 
-    77215, 77219, 77223, 77227, 77231, 77235, 77239, 77243, 77247, 77251, 
-    77255, 77259, 77263, 77267, 77271, 77275, 77279, 77283, 77287, 77291, 
-    77295, 77299, 77303, 77307, 77311, 77315, 77319, 77323, 77327, 77331, 
-    77335, 77339, 77343, 77347, 77351, 77355, 77359, 77363, 77367, 77371, 
-    77375, 77379, 77383, 77387, 77391, 77395, 77399, 77403, 77407, 77411, 
-    77415, 77419, 77423, 77427, 77431, 77435, 77439, 77443, 77447, 77451, 
-    77455, 77459, 77463, 77467, 77471, 77475, 77479, 77483, 77487, 77491, 
-    77495, 77499, 77503, 77507, 77511, 77515, 77519, 77523, 77527, 77531, 
-    77535, 77539, 77543, 77547, 77551, 77555, 77559, 77563, 77567, 77571, 
-    77575, 77579, 77583, 77587, 77591, 77595, 77599, 77603, 77607, 77611, 
-    77615, 77619, 77623, 77627, 77631, 77635, 77639, 77643, 77647, 77651, 
-    77655, 77659, 77663, 77667, 77671, 77675, 77679, 77683, 77687, 77691, 
-    77695, 77699, 77703, 77707, 77711, 77715, 77719, 77723, 77727, 77731, 
-    77735, 77739, 77743, 77747, 77751, 77755, 77759, 77763, 77767, 77771, 
-    77775, 77779, 77783, 77787, 77791, 77795, 77799, 77803, 77807, 77811, 
-    77815, 77819, 77823, 77827, 77831, 77835, 77839, 77843, 77847, 77851, 
-    77855, 0, 0, 77859, 77863, 77867, 77871, 77875, 77879, 77883, 77887, 
-    77891, 77895, 77899, 77903, 77907, 77911, 77915, 77919, 77923, 77927, 
-    77931, 77935, 77939, 77943, 77947, 77951, 77955, 77959, 77963, 77967, 
-    77971, 77975, 77979, 77983, 77987, 77991, 77995, 77999, 78003, 78007, 
-    78011, 78015, 78019, 78023, 78027, 78031, 78035, 78039, 78043, 78047, 
-    78051, 78055, 78059, 78063, 78067, 78071, 78075, 78079, 78083, 78087, 
-    78091, 78095, 78099, 78103, 78107, 78111, 78115, 78119, 78123, 78127, 
-    78131, 78135, 78139, 78143, 78147, 78151, 78155, 78159, 78163, 78167, 
-    78171, 78175, 78179, 78183, 78187, 78191, 78195, 78199, 78203, 78207, 
-    78211, 78215, 78219, 78223, 78227, 78231, 78235, 78239, 78243, 78247, 
-    78251, 78255, 78259, 78263, 78267, 78271, 78275, 78279, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 78283, 78288, 78293, 78298, 78303, 78308, 78316, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78321, 78328, 78335, 78342, 78349, 0, 
-    0, 0, 0, 0, 78356, 78363, 78370, 78380, 78386, 78392, 78398, 78404, 
-    78410, 78416, 78423, 78429, 78435, 78441, 78450, 78459, 78471, 78483, 
-    78489, 78495, 78501, 78508, 78515, 78522, 78529, 78536, 0, 78543, 78550, 
-    78557, 78565, 78572, 0, 78579, 0, 78586, 78593, 0, 78600, 78608, 0, 
-    78615, 78622, 78629, 78636, 78643, 78650, 78657, 78664, 78671, 78678, 
-    78683, 78690, 78697, 78703, 78709, 78715, 78721, 78727, 78733, 78739, 
-    78745, 78751, 78757, 78763, 78769, 78775, 78781, 78787, 78793, 78799, 
-    78805, 78811, 78817, 78823, 78829, 78835, 78841, 78847, 78853, 78859, 
-    78865, 78871, 78877, 78883, 78889, 78895, 78901, 78907, 78913, 78919, 
-    78925, 78931, 78937, 78943, 78949, 78955, 78961, 78967, 78973, 78979, 
-    78985, 78991, 78997, 79003, 79009, 79015, 79021, 79027, 79033, 79039, 
-    79045, 79051, 79057, 79063, 79069, 79075, 79081, 79087, 79093, 79099, 
-    79105, 79111, 79117, 79123, 79129, 79135, 79141, 79147, 79153, 79161, 
-    79169, 79175, 79181, 79187, 79193, 79202, 79211, 79219, 79227, 79235, 
-    79243, 79251, 79259, 79267, 79275, 79282, 79289, 79299, 79309, 79313, 
-    79317, 79322, 79327, 79332, 79337, 79346, 79355, 79361, 79367, 79374, 
-    79381, 79388, 79392, 79398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 79404, 79410, 79416, 79422, 79428, 79433, 79438, 79444, 79450, 
-    79456, 79462, 79470, 79476, 79482, 79490, 79498, 79506, 79514, 79519, 
-    79524, 79529, 79534, 79547, 79560, 79570, 79580, 79591, 79602, 79613, 
-    79624, 79634, 79644, 79655, 79666, 79677, 79688, 79698, 79708, 79718, 
-    79734, 79750, 79766, 79773, 79780, 79787, 79794, 79804, 79814, 79824, 
-    79836, 79846, 79854, 79862, 79871, 79879, 79889, 79897, 79905, 79913, 
-    79922, 79930, 79940, 79948, 79956, 79964, 79974, 79982, 79989, 79996, 
-    80003, 80010, 80018, 80026, 80034, 80042, 80050, 80059, 80067, 80075, 
-    80083, 80091, 80099, 80108, 80116, 80124, 80132, 80140, 80148, 80156, 
-    80164, 80172, 80180, 80188, 80197, 80205, 80215, 80223, 80231, 80239, 
-    80249, 80257, 80265, 80273, 80281, 80290, 80299, 80307, 80317, 80325, 
-    80333, 80341, 80350, 80358, 80368, 80376, 80383, 80390, 80398, 80405, 
-    80414, 80421, 80429, 80437, 80446, 80454, 80464, 80472, 80480, 80488, 
-    80498, 80506, 80513, 80520, 80528, 80535, 80544, 80551, 80561, 80571, 
-    80582, 80591, 80600, 80609, 80618, 80627, 80637, 80648, 80659, 80669, 
-    80680, 80692, 80702, 80711, 80720, 80728, 80737, 80747, 80755, 80764, 
-    80773, 80781, 80790, 80800, 80808, 80817, 80826, 80834, 80843, 80853, 
-    80861, 80871, 80879, 80889, 80897, 80905, 80914, 80922, 80932, 80940, 
-    80948, 80958, 80966, 80973, 80980, 80989, 80998, 81006, 81015, 81025, 
-    81033, 81044, 81052, 81060, 81067, 81075, 81084, 81091, 81101, 81111, 
-    81122, 81132, 81143, 81151, 81159, 81168, 81176, 81185, 81193, 81201, 
-    81210, 81218, 81227, 81235, 81242, 81249, 81256, 81263, 81271, 81279, 
-    81287, 81295, 81304, 81312, 81320, 81329, 81337, 81345, 81353, 81362, 
-    81370, 81378, 81386, 81394, 81402, 81410, 81418, 81426, 81434, 81443, 
-    81451, 81459, 81467, 81475, 81483, 81492, 81501, 81509, 81517, 81525, 
-    81534, 81542, 81551, 81558, 81565, 81573, 81580, 81588, 81596, 81605, 
-    81613, 81622, 81630, 81638, 81648, 81655, 81662, 81670, 81677, 81685, 
-    81695, 81706, 81714, 81723, 81731, 81740, 81748, 81757, 81765, 81774, 
-    81782, 81791, 81800, 81808, 81816, 81824, 81833, 81840, 81848, 81857, 
-    81866, 81875, 81885, 81893, 81903, 81911, 81921, 81929, 81939, 81947, 
-    81957, 81965, 81974, 81981, 81990, 81997, 82007, 82015, 82025, 82033, 
-    82043, 82051, 82059, 82067, 82076, 82084, 82093, 82102, 82111, 82120, 
-    82130, 82138, 82148, 82156, 82166, 82174, 82184, 82192, 82202, 82210, 
-    82219, 82226, 82235, 82242, 82252, 82260, 82270, 82278, 82288, 82296, 
-    82304, 82312, 82321, 82329, 82338, 82347, 82356, 82365, 82373, 82381, 
-    82390, 82398, 82407, 82416, 82424, 82432, 82440, 82449, 82457, 82465, 
-    82474, 82482, 82490, 82498, 82506, 82511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 82516, 82526, 82536, 82546, 82556, 82567, 82577, 82587, 
-    82598, 82607, 82616, 82625, 82636, 82646, 82656, 82668, 82678, 82688, 
-    82698, 82708, 82718, 82728, 82738, 82748, 82758, 82768, 82778, 82789, 
-    82800, 82810, 82820, 82832, 82843, 82854, 82864, 82874, 82884, 82894, 
-    82904, 82914, 82924, 82936, 82946, 82956, 82968, 82979, 82990, 83000, 
-    83010, 83020, 83030, 83042, 83052, 83062, 83073, 83084, 83094, 83104, 
-    83113, 83122, 83131, 83140, 83149, 83159, 0, 0, 83169, 83179, 83189, 
-    83199, 83209, 83221, 83231, 83241, 83253, 83263, 83275, 83284, 83293, 
-    83304, 83314, 83326, 83337, 83350, 83360, 83372, 83381, 83392, 83403, 
-    83416, 83426, 83436, 83446, 83456, 83466, 83475, 83484, 83493, 83502, 
-    83512, 83522, 83532, 83542, 83552, 83562, 83572, 83582, 83592, 83602, 
-    83612, 83622, 83631, 83640, 83649, 83659, 83669, 83679, 83689, 83699, 
-    83710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83720, 83735, 
-    83750, 83756, 83762, 83768, 83774, 83780, 83786, 83792, 83798, 83806, 
-    83810, 83813, 0, 0, 83821, 83824, 83827, 83830, 83833, 83836, 83839, 
-    83842, 83845, 83848, 83851, 83854, 83857, 83860, 83863, 83866, 83869, 
-    83877, 83886, 83897, 83905, 83913, 83922, 83931, 83942, 83954, 0, 0, 0, 
-    0, 0, 0, 83963, 83968, 83973, 83980, 83987, 83993, 83999, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 84004, 84014, 84024, 84034, 84043, 84054, 84063, 84072, 
-    84082, 84092, 84104, 84116, 84127, 84138, 84149, 84160, 84170, 84180, 
-    84190, 84200, 84211, 84222, 84226, 84231, 84240, 84249, 84253, 84257, 
-    84261, 84266, 84271, 84276, 84281, 84284, 84288, 0, 84293, 84296, 84299, 
-    84303, 84307, 84312, 84316, 84320, 84325, 84330, 84337, 84344, 84347, 
-    84350, 84353, 84356, 84359, 84363, 84367, 0, 84371, 84376, 84380, 84384, 
-    0, 0, 0, 0, 84389, 84394, 84401, 84406, 84411, 0, 84416, 84421, 84426, 
-    84431, 84436, 84441, 84446, 84451, 84456, 84461, 84466, 84471, 84480, 
-    84489, 84497, 84505, 84514, 84523, 84532, 84541, 84549, 84557, 84565, 
-    84573, 84578, 84583, 84589, 84595, 84601, 84607, 84615, 84623, 84629, 
-    84635, 84641, 84647, 84653, 84659, 84665, 84671, 84676, 84681, 84686, 
-    84691, 84696, 84701, 84706, 84711, 84717, 84723, 84729, 84735, 84741, 
-    84747, 84753, 84759, 84765, 84771, 84777, 84783, 84789, 84795, 84801, 
-    84807, 84813, 84819, 84825, 84831, 84837, 84843, 84849, 84855, 84861, 
-    84867, 84873, 84879, 84885, 84891, 84897, 84903, 84909, 84915, 84921, 
-    84927, 84933, 84939, 84945, 84951, 84957, 84963, 84969, 84975, 84981, 
-    84987, 84993, 84999, 85005, 85011, 85017, 85023, 85029, 85035, 85041, 
-    85047, 85053, 85059, 85065, 85071, 85076, 85081, 85086, 85091, 85097, 
-    85103, 85109, 85115, 85121, 85127, 85133, 85139, 85145, 85151, 85158, 
-    85165, 85170, 85175, 85180, 85185, 85197, 85209, 85220, 85231, 85243, 
-    85255, 85263, 0, 0, 85271, 0, 85279, 85283, 85287, 85290, 85294, 85298, 
-    85301, 85304, 85308, 85312, 85315, 85318, 85321, 85324, 85329, 85332, 
-    85336, 85339, 85342, 85345, 85348, 85351, 85354, 85357, 85360, 85363, 
-    85366, 85369, 85373, 85377, 85381, 85385, 85390, 85395, 85401, 85407, 
-    85413, 85418, 85424, 85430, 85436, 85441, 85447, 85453, 85458, 85463, 
-    85469, 85474, 85480, 85486, 85491, 85497, 85503, 85508, 85514, 85520, 
-    85526, 85532, 85538, 85542, 85547, 85551, 85556, 85560, 85565, 85570, 
-    85576, 85582, 85588, 85593, 85599, 85605, 85611, 85616, 85622, 85628, 
-    85633, 85638, 85644, 85649, 85655, 85661, 85666, 85672, 85678, 85683, 
-    85689, 85695, 85701, 85707, 85713, 85718, 85722, 85727, 85729, 85734, 
-    85739, 85745, 85750, 85755, 85759, 85765, 85770, 85775, 85780, 85785, 
-    85790, 85795, 85800, 85806, 85812, 85818, 85826, 85830, 85834, 85838, 
-    85842, 85846, 85850, 85855, 85860, 85865, 85870, 85874, 85879, 85884, 
-    85889, 85894, 85899, 85904, 85909, 85914, 85918, 85922, 85927, 85932, 
-    85937, 85942, 85946, 85951, 85956, 85961, 85966, 85970, 85975, 85980, 
-    85985, 85990, 85994, 85999, 86004, 86008, 86013, 86018, 86023, 86028, 
-    86033, 86038, 86045, 86052, 86056, 86061, 86066, 86071, 86076, 86081, 
-    86086, 86091, 86096, 86101, 86106, 86111, 86116, 86121, 86126, 86131, 
-    86136, 86141, 86146, 86151, 86156, 86161, 86166, 86171, 86176, 86181, 
-    86186, 86191, 86196, 86201, 0, 0, 0, 86206, 86210, 86215, 86219, 86224, 
-    86229, 0, 0, 86233, 86238, 86243, 86247, 86252, 86257, 0, 0, 86262, 
-    86267, 86271, 86276, 86281, 86286, 0, 0, 86291, 86296, 86301, 0, 0, 0, 
-    86305, 86309, 86313, 86317, 86320, 86324, 86328, 0, 86332, 86338, 86341, 
-    86345, 86348, 86352, 86356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86360, 86366, 
-    86372, 86378, 86384, 0, 0, 86388, 86394, 86400, 86406, 86412, 86418, 
-    86425, 86432, 86439, 86446, 86453, 86460, 0, 86467, 86474, 86481, 86487, 
-    86494, 86501, 86508, 86515, 86521, 86528, 86535, 86542, 86549, 86555, 
-    86562, 86569, 86576, 86583, 86589, 86596, 86603, 86610, 86617, 86624, 
-    86631, 86638, 0, 86645, 86651, 86658, 86665, 86672, 86679, 86685, 86692, 
-    86699, 86706, 86713, 86720, 86727, 86734, 86740, 86747, 86754, 86761, 
-    86768, 0, 86775, 86782, 0, 86789, 86796, 86803, 86810, 86817, 86824, 
-    86831, 86838, 86845, 86852, 86859, 86866, 86873, 86880, 86887, 0, 0, 
-    86893, 86898, 86903, 86908, 86913, 86918, 86923, 86928, 86933, 86938, 
-    86943, 86948, 86953, 86958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86963, 86970, 
-    86977, 86984, 86991, 86998, 87005, 87012, 87019, 87026, 87033, 87040, 
-    87047, 87054, 87061, 87068, 87075, 87082, 87089, 87096, 87104, 87112, 
-    87119, 87126, 87131, 87139, 87147, 87154, 87161, 87166, 87173, 87178, 
-    87183, 87190, 87195, 87200, 87205, 87213, 87218, 87223, 87230, 87235, 
-    87240, 87247, 87254, 87259, 87264, 87269, 87274, 87279, 87284, 87289, 
-    87294, 87299, 87306, 87311, 87318, 87323, 87328, 87333, 87338, 87343, 
-    87348, 87353, 87358, 87363, 87368, 87373, 87380, 87387, 87394, 87401, 
-    87407, 87412, 87419, 87424, 87429, 87438, 87445, 87454, 87461, 87466, 
-    87471, 87479, 87484, 87489, 87494, 87499, 87504, 87511, 87516, 87521, 
-    87526, 87531, 87536, 87543, 87550, 87557, 87564, 87571, 87578, 87585, 
-    87592, 87599, 87606, 87613, 87620, 87627, 87634, 87641, 87648, 87655, 
-    87662, 87669, 87676, 87683, 87690, 87697, 87704, 87711, 87718, 87725, 
-    87732, 0, 0, 0, 0, 0, 87739, 87747, 87755, 0, 0, 0, 0, 87760, 87764, 
-    87768, 87772, 87776, 87780, 87784, 87788, 87792, 87796, 87801, 87806, 
-    87811, 87816, 87821, 87826, 87831, 87836, 87841, 87847, 87853, 87859, 
-    87866, 87873, 87880, 87887, 87894, 87901, 87907, 87913, 87919, 87926, 
-    87933, 87940, 87947, 87954, 87961, 87968, 87975, 87982, 87989, 87996, 
-    88003, 88010, 88017, 0, 0, 0, 88024, 88032, 88040, 88048, 88056, 88064, 
-    88074, 88084, 88092, 88100, 88108, 88116, 88124, 88130, 88137, 88146, 
-    88155, 88164, 88173, 88182, 88191, 88201, 88212, 88222, 88233, 88242, 
-    88251, 88260, 88270, 88281, 88291, 88302, 88313, 88322, 88330, 88336, 
-    88342, 88348, 88354, 88362, 88370, 88376, 88383, 88393, 88400, 88407, 
-    88414, 88421, 88428, 88438, 88445, 88452, 88460, 88468, 88477, 88486, 
-    88495, 88504, 88513, 88521, 88530, 88539, 88548, 88552, 88559, 88564, 
-    88569, 88573, 88577, 88581, 88585, 88590, 88595, 88601, 88607, 88611, 
-    88617, 88621, 88625, 88629, 88633, 88637, 88641, 88647, 0, 0, 0, 0, 0, 
-    88651, 88656, 88661, 88666, 88671, 88678, 88683, 88688, 88693, 88698, 
-    88703, 88708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 88713, 88720, 88729, 88738, 88745, 88752, 88759, 
-    88766, 88773, 88780, 88786, 88793, 88800, 88807, 88814, 88821, 88828, 
-    88835, 88842, 88851, 88858, 88865, 88872, 88879, 88886, 88893, 88900, 
-    88907, 88916, 88923, 88930, 88937, 88944, 88951, 88958, 88967, 88974, 
-    88981, 88988, 88995, 89004, 89011, 89018, 89025, 89033, 89042, 0, 0, 
-    89051, 89055, 89059, 89064, 89069, 89074, 89079, 89083, 89088, 89093, 
-    89098, 89103, 89108, 89113, 89117, 89121, 89126, 89131, 89136, 89140, 
-    89145, 89150, 89154, 89159, 89164, 89169, 89174, 89179, 89184, 0, 0, 0, 
-    89189, 89193, 89198, 89203, 89207, 89212, 89216, 89221, 89226, 89231, 
-    89236, 89240, 89244, 89249, 89254, 89259, 89264, 89269, 89274, 89278, 
-    89283, 89288, 89293, 89298, 89303, 89308, 89312, 89316, 89321, 89326, 
-    89331, 89336, 89341, 89346, 89351, 89356, 89361, 89366, 89371, 89376, 
-    89381, 89386, 89391, 89396, 89401, 89406, 89411, 89416, 89421, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89426, 89430, 
-    89435, 89440, 89445, 89449, 89454, 89459, 89464, 89469, 89473, 89477, 
-    89482, 89487, 89492, 89497, 89501, 89506, 89511, 89516, 89521, 89526, 
-    89531, 89535, 89540, 89545, 89550, 89555, 89560, 89565, 89570, 0, 89575, 
-    89580, 89585, 89591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89597, 89602, 
-    89607, 89612, 89617, 89622, 89627, 89632, 89637, 89642, 89647, 89652, 
-    89657, 89662, 89667, 89672, 89677, 89682, 89687, 89692, 89697, 89702, 
-    89707, 89712, 89717, 89722, 89727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89734, 89739, 89744, 
-    89749, 89754, 89759, 89764, 89769, 89774, 89779, 89784, 89789, 89794, 
-    89799, 89804, 89809, 89814, 89819, 89824, 89829, 89834, 89839, 89844, 
-    89849, 89854, 89859, 89864, 89868, 89872, 89876, 0, 89881, 89887, 89892, 
-    89897, 89902, 89907, 89913, 89919, 89925, 89931, 89937, 89943, 89949, 
-    89955, 89961, 89967, 89973, 89979, 89985, 89990, 89996, 90002, 90007, 
-    90013, 90018, 90024, 90030, 90035, 90041, 90047, 90052, 90058, 90064, 
-    90069, 90075, 90081, 90087, 0, 0, 0, 0, 90092, 90098, 90104, 90110, 
-    90116, 90122, 90128, 90134, 90140, 90147, 90152, 90157, 90163, 90169, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90175, 90180, 90185, 
-    90190, 90196, 90201, 90207, 90213, 90219, 90225, 90232, 90238, 90245, 
-    90250, 90255, 90260, 90265, 90270, 90275, 90280, 90285, 90290, 90295, 
-    90300, 90305, 90310, 90315, 90320, 90325, 90330, 90335, 90340, 90345, 
-    90350, 90355, 90360, 90365, 90370, 90375, 90380, 90385, 90390, 90395, 
-    90400, 90406, 90411, 90417, 90423, 90429, 90435, 90442, 90448, 90455, 
-    90460, 90465, 90470, 90475, 90480, 90485, 90490, 90495, 90500, 90505, 
-    90510, 90515, 90520, 90525, 90530, 90535, 90540, 90545, 90550, 90555, 
-    90560, 90565, 90570, 90575, 90580, 90585, 90590, 90595, 90600, 90605, 
-    90610, 90615, 90620, 90625, 90630, 90635, 90640, 90645, 90650, 90655, 
-    90660, 90665, 90670, 90675, 90680, 90685, 90690, 90695, 90700, 90705, 
-    90710, 90715, 90720, 90725, 90730, 90735, 90740, 90745, 90750, 90755, 
-    90760, 90765, 90770, 90775, 90780, 90785, 90790, 90795, 90800, 90805, 
-    90810, 90815, 90820, 90825, 90830, 90835, 90840, 90845, 90850, 90855, 
-    90860, 90865, 90870, 90874, 90878, 90883, 90888, 90893, 90898, 90903, 
-    90908, 90913, 90918, 90923, 90928, 90933, 90937, 90941, 90945, 90949, 
-    90953, 90957, 90961, 90966, 90971, 0, 0, 90976, 90981, 90985, 90989, 
-    90993, 90997, 91001, 91005, 91009, 91013, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 91017, 91021, 91025, 91029, 91033, 91037, 0, 0, 91042, 0, 
-    91047, 91051, 91056, 91061, 91066, 91071, 91076, 91081, 91086, 91091, 
-    91096, 91100, 91105, 91110, 91115, 91120, 91124, 91129, 91134, 91139, 
-    91144, 91148, 91153, 91158, 91163, 91168, 91172, 91177, 91182, 91187, 
-    91192, 91196, 91201, 91206, 91211, 91216, 91221, 91226, 91231, 91235, 
-    91240, 91245, 91250, 91255, 0, 91260, 91265, 0, 0, 0, 91270, 0, 0, 91275, 
-    91280, 91287, 91294, 91301, 91308, 91315, 91322, 91329, 91336, 91343, 
-    91350, 91357, 91364, 91371, 91378, 91385, 91392, 91399, 91406, 91413, 
-    91420, 91427, 0, 91434, 91441, 91447, 91453, 91459, 91466, 91473, 91481, 
-    91489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91498, 91503, 91508, 91513, 91518, 91523, 
-    91528, 91533, 91538, 91543, 91548, 91553, 91558, 91563, 91568, 91573, 
-    91578, 91583, 91588, 91593, 91598, 91603, 91608, 91612, 91617, 91622, 
-    91628, 91632, 0, 0, 0, 91636, 91642, 91646, 91651, 91656, 91661, 91665, 
-    91670, 91674, 91679, 91684, 91688, 91692, 91697, 91701, 91705, 91710, 
-    91715, 91719, 91724, 91729, 91734, 91739, 91744, 91749, 91754, 91759, 0, 
-    0, 0, 0, 0, 91764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91769, 
-    91775, 91781, 91787, 91793, 91799, 91806, 91813, 91820, 91826, 91832, 
-    91838, 91845, 91852, 91859, 91865, 91872, 91879, 91886, 91893, 91899, 
-    91906, 91913, 91919, 91926, 91933, 91940, 91947, 91954, 91960, 91967, 
-    91974, 91981, 91987, 91993, 91999, 92005, 92011, 92018, 92025, 92031, 
-    92037, 92043, 92050, 92056, 92063, 92070, 92077, 92083, 92091, 92098, 
-    92104, 92111, 92118, 92125, 92131, 0, 0, 0, 0, 0, 0, 92138, 92146, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92154, 92158, 92163, 92168, 0, 
-    92174, 92179, 0, 0, 0, 0, 0, 92184, 92190, 92197, 92202, 92207, 92211, 
-    92216, 92221, 0, 92226, 92231, 92236, 0, 92241, 92246, 92251, 92256, 
-    92261, 92266, 92271, 92276, 92281, 92286, 92291, 92295, 92299, 92304, 
-    92309, 92314, 92318, 92322, 92326, 92331, 92336, 92341, 92346, 92350, 
-    92355, 92359, 92364, 0, 0, 0, 0, 92369, 92375, 92380, 0, 0, 0, 0, 92385, 
-    92389, 92393, 92397, 92401, 92405, 92410, 92415, 92421, 0, 0, 0, 0, 0, 0, 
-    0, 0, 92427, 92433, 92440, 92446, 92453, 92459, 92465, 92471, 92478, 0, 
-    0, 0, 0, 0, 0, 0, 92484, 92492, 92500, 92508, 92516, 92524, 92532, 92540, 
-    92548, 92556, 92564, 92572, 92580, 92588, 92596, 92604, 92612, 92620, 
-    92628, 92636, 92644, 92652, 92660, 92668, 92676, 92684, 92692, 92700, 
-    92708, 92716, 92723, 92731, 92739, 92743, 92748, 92753, 92758, 92763, 
-    92768, 92773, 92778, 92782, 92787, 92791, 92796, 92800, 92805, 92809, 
-    92814, 92819, 92824, 92829, 92834, 92839, 92844, 92849, 92854, 92859, 
-    92864, 92869, 92874, 92879, 92884, 92889, 92894, 92899, 92904, 92909, 
-    92914, 92919, 92924, 92929, 92934, 92939, 92944, 92949, 92954, 92959, 
-    92964, 92969, 92974, 92979, 92984, 92989, 92994, 92999, 0, 0, 0, 93004, 
-    93009, 93018, 93026, 93035, 93044, 93055, 93066, 93073, 93080, 93087, 
-    93094, 93101, 93108, 93115, 93122, 93129, 93136, 93143, 93150, 93157, 
-    93164, 93171, 93178, 93185, 93192, 93199, 93206, 93213, 0, 0, 93220, 
-    93226, 93232, 93238, 93244, 93251, 93258, 93266, 93274, 93281, 93288, 
-    93295, 93302, 93309, 93316, 93323, 93330, 93337, 93344, 93351, 93358, 
-    93365, 93372, 93379, 93386, 93393, 93400, 0, 0, 0, 0, 0, 93407, 93413, 
-    93419, 93425, 93431, 93438, 93445, 93453, 93461, 93467, 93473, 93480, 
-    93486, 93492, 93498, 93504, 93511, 93518, 93525, 93532, 93539, 93546, 
-    93553, 93560, 93567, 93574, 93581, 93588, 93595, 93602, 93609, 93616, 
-    93623, 93630, 93637, 93644, 93651, 93658, 93665, 93672, 93679, 93686, 
-    93693, 93700, 93707, 93714, 93721, 93728, 93735, 93742, 93749, 93756, 
-    93763, 93770, 93777, 93784, 93791, 93798, 93805, 93812, 93819, 93826, 
-    93833, 93840, 93847, 93854, 93861, 93868, 93875, 93882, 93889, 93896, 
-    93903, 93910, 93917, 93924, 93931, 93938, 93945, 93952, 93959, 0, 0, 0, 
+    92177, 92181, 92186, 92191, 0, 92197, 92202, 0, 0, 0, 0, 0, 92207, 92213, 
+    92220, 92225, 92230, 92234, 92239, 92244, 0, 92249, 92254, 92259, 0, 
+    92264, 92269, 92274, 92279, 92284, 92289, 92294, 92299, 92304, 92309, 
+    92314, 92318, 92322, 92327, 92332, 92337, 92341, 92345, 92349, 92354, 
+    92359, 92364, 92369, 92373, 92378, 92382, 92387, 0, 0, 0, 0, 92392, 
+    92398, 92403, 0, 0, 0, 0, 92408, 92412, 92416, 92420, 92424, 92428, 
+    92433, 92438, 92444, 0, 0, 0, 0, 0, 0, 0, 0, 92450, 92456, 92463, 92469, 
+    92476, 92482, 92488, 92494, 92501, 0, 0, 0, 0, 0, 0, 0, 92507, 92515, 
+    92523, 92531, 92539, 92547, 92555, 92563, 92571, 92579, 92587, 92595, 
+    92603, 92611, 92619, 92627, 92635, 92643, 92651, 92659, 92667, 92675, 
+    92683, 92691, 92699, 92707, 92715, 92723, 92731, 92739, 92746, 92754, 
+    92762, 92766, 92771, 92776, 92781, 92786, 92791, 92796, 92801, 92805, 
+    92810, 92814, 92819, 92823, 92828, 92832, 92837, 92842, 92847, 92852, 
+    92857, 92862, 92867, 92872, 92877, 92882, 92887, 92892, 92897, 92902, 
+    92907, 92912, 92917, 92922, 92927, 92932, 92937, 92942, 92947, 92952, 
+    92957, 92962, 92967, 92972, 92977, 92982, 92987, 92992, 92997, 93002, 
+    93007, 93012, 93017, 93022, 0, 0, 0, 93027, 93032, 93041, 93049, 93058, 
+    93067, 93078, 93089, 93096, 93103, 93110, 93117, 93124, 93131, 93138, 
+    93145, 93152, 93159, 93166, 93173, 93180, 93187, 93194, 93201, 93208, 
+    93215, 93222, 93229, 93236, 0, 0, 93243, 93249, 93255, 93261, 93267, 
+    93274, 93281, 93289, 93297, 93304, 93311, 93318, 93325, 93332, 93339, 
+    93346, 93353, 93360, 93367, 93374, 93381, 93388, 93395, 93402, 93409, 
+    93416, 93423, 0, 0, 0, 0, 0, 93430, 93436, 93442, 93448, 93454, 93461, 
+    93468, 93476, 93484, 93490, 93496, 93503, 93509, 93515, 93521, 93527, 
+    93534, 93541, 93548, 93555, 93562, 93569, 93576, 93583, 93590, 93597, 
+    93604, 93611, 93618, 93625, 93632, 93639, 93646, 93653, 93660, 93667, 
+    93674, 93681, 93688, 93695, 93702, 93709, 93716, 93723, 93730, 93737, 
+    93744, 93751, 93758, 93765, 93772, 93779, 93786, 93793, 93800, 93807, 
+    93814, 93821, 93828, 93835, 93842, 93849, 93856, 93863, 93870, 93877, 
+    93884, 93891, 93898, 93905, 93912, 93919, 93926, 93933, 93940, 93947, 
+    93954, 93961, 93968, 93975, 93982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93989, 93993, 
+    93997, 94001, 94005, 94009, 94013, 94017, 94021, 94025, 94030, 94035, 
+    94040, 94045, 94050, 94055, 94060, 94065, 94070, 94076, 94082, 94088, 
+    94095, 94102, 94109, 94116, 94123, 94130, 94137, 94144, 94151, 0, 94158, 
+    94162, 94166, 94170, 94174, 94178, 94181, 94185, 94188, 94192, 94195, 
+    94199, 94203, 94208, 94212, 94217, 94220, 94224, 94227, 94231, 94234, 
+    94238, 94242, 94246, 94250, 94254, 94258, 94262, 94266, 94270, 94274, 
+    94278, 94282, 94286, 94290, 94294, 94298, 94302, 94306, 94309, 94312, 
+    94316, 94320, 94324, 94327, 94330, 94333, 94337, 94341, 94345, 94349, 
+    94352, 94355, 94359, 94365, 94371, 94377, 94382, 94389, 94393, 94398, 
+    94402, 94407, 94412, 94418, 94423, 94429, 94433, 94438, 94442, 94447, 
+    94450, 94453, 94457, 94462, 94468, 94473, 94479, 0, 0, 0, 0, 94484, 
+    94487, 94490, 94493, 94496, 94499, 94502, 94505, 94508, 94511, 94515, 
+    94519, 94523, 94527, 94531, 94535, 94539, 94543, 94547, 94552, 94557, 
+    94561, 94564, 94567, 94570, 94573, 94576, 94579, 94582, 94585, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94588, 94593, 94598, 94603, 94607, 
+    94612, 94616, 94621, 94625, 94630, 94634, 94639, 94643, 94648, 94652, 
+    94657, 94662, 94667, 94672, 94677, 94682, 94687, 94692, 94697, 94702, 
+    94707, 94712, 94717, 94722, 94727, 94732, 94737, 94742, 94747, 94752, 
+    94756, 94760, 94765, 94770, 94775, 94779, 94783, 94787, 94792, 94797, 
+    94802, 94807, 94811, 94815, 94821, 94826, 94832, 94837, 94843, 94848, 
+    94854, 94859, 94865, 94870, 94875, 94880, 94885, 94889, 94894, 94900, 
+    94904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94909, 94916, 94923, 
+    94930, 94937, 94944, 94951, 94958, 94965, 94972, 94979, 94986, 94993, 
+    95000, 95007, 95014, 95021, 95028, 95035, 95042, 95049, 95056, 95063, 
+    95070, 95077, 0, 0, 0, 0, 0, 0, 0, 95084, 95091, 95097, 95103, 95109, 
+    95115, 95121, 95127, 95133, 95139, 0, 0, 0, 0, 0, 0, 95145, 95150, 95155, 
+    95160, 95165, 95169, 95173, 95177, 95182, 95187, 95192, 95197, 95202, 
+    95207, 95212, 95217, 95222, 95227, 95232, 95237, 95242, 95247, 95252, 
+    95257, 95262, 95267, 95272, 95277, 95282, 95287, 95292, 95297, 95302, 
+    95307, 95312, 95317, 95322, 95327, 95332, 95337, 95342, 95347, 95353, 
+    95358, 95364, 95369, 95375, 95380, 95386, 95392, 95396, 95401, 95405, 0, 
+    95409, 95414, 95418, 95422, 95426, 95430, 95434, 95438, 95442, 95446, 
+    95450, 95455, 95459, 95464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 93966, 93970, 93974, 93978, 93982, 93986, 93990, 93994, 
-    93998, 94002, 94007, 94012, 94017, 94022, 94027, 94032, 94037, 94042, 
-    94047, 94053, 94059, 94065, 94072, 94079, 94086, 94093, 94100, 94107, 
-    94114, 94121, 94128, 0, 94135, 94139, 94143, 94147, 94151, 94155, 94158, 
-    94162, 94165, 94169, 94172, 94176, 94180, 94185, 94189, 94194, 94197, 
-    94201, 94204, 94208, 94211, 94215, 94219, 94223, 94227, 94231, 94235, 
-    94239, 94243, 94247, 94251, 94255, 94259, 94263, 94267, 94271, 94275, 
-    94279, 94283, 94286, 94289, 94293, 94297, 94301, 94304, 94307, 94310, 
-    94314, 94318, 94322, 94326, 94329, 94332, 94336, 94342, 94348, 94354, 
-    94359, 94366, 94370, 94375, 94379, 94384, 94389, 94395, 94400, 94406, 
-    94410, 94415, 94419, 94424, 94427, 94430, 94434, 94439, 94445, 94450, 
-    94456, 0, 0, 0, 0, 94461, 94464, 94467, 94470, 94473, 94476, 94479, 
-    94482, 94485, 94488, 94492, 94496, 94500, 94504, 94508, 94512, 94516, 
-    94520, 94524, 94529, 94534, 94538, 94541, 94544, 94547, 94550, 94553, 
-    94556, 94559, 94562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    94565, 94570, 94575, 94580, 94584, 94589, 94593, 94598, 94602, 94607, 
-    94611, 94616, 94620, 94625, 94629, 94634, 94639, 94644, 94649, 94654, 
-    94659, 94664, 94669, 94674, 94679, 94684, 94689, 94694, 94699, 94704, 
-    94709, 94714, 94719, 94724, 94729, 94733, 94737, 94742, 94747, 94752, 
-    94756, 94760, 94764, 94769, 94774, 94779, 94784, 94788, 94792, 94798, 
-    94803, 94809, 94814, 94820, 94825, 94831, 94836, 94842, 94847, 94852, 
-    94857, 94862, 94866, 94871, 94877, 94881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 94886, 94893, 94900, 94907, 94914, 94921, 94928, 94935, 
-    94942, 94949, 94956, 94963, 94970, 94977, 94984, 94991, 94998, 95005, 
-    95012, 95019, 95026, 95033, 95040, 95047, 95054, 0, 0, 0, 0, 0, 0, 0, 
-    95061, 95068, 95074, 95080, 95086, 95092, 95098, 95104, 95110, 95116, 0, 
-    0, 0, 0, 0, 0, 95122, 95127, 95132, 95137, 95142, 95146, 95150, 95154, 
-    95159, 95164, 95169, 95174, 95179, 95184, 95189, 95194, 95199, 95204, 
-    95209, 95214, 95219, 95224, 95229, 95234, 95239, 95244, 95249, 95254, 
-    95259, 95264, 95269, 95274, 95279, 95284, 95289, 95294, 95299, 95304, 
-    95309, 95314, 95319, 95324, 95330, 95335, 95341, 95346, 95352, 95357, 
-    95363, 95369, 95373, 95378, 95382, 0, 95386, 95391, 95395, 95399, 95403, 
-    95407, 95411, 95415, 95419, 95423, 95427, 95432, 95436, 95441, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95469, 
+    95473, 95477, 95481, 95484, 95488, 95491, 95495, 95498, 95502, 95506, 
+    95511, 95515, 95520, 95523, 95527, 95530, 95534, 95537, 95541, 95545, 
+    95549, 95553, 95557, 95561, 95565, 95569, 95573, 95577, 95581, 95585, 
+    95589, 95593, 95597, 95601, 95605, 95609, 95612, 95615, 95619, 95623, 
+    95627, 95630, 95633, 95636, 95640, 95644, 95648, 95652, 95656, 95659, 
+    95662, 95667, 95671, 95676, 95680, 95685, 95690, 95696, 95701, 95707, 
+    95711, 95716, 95720, 95725, 95729, 95733, 95737, 95741, 95744, 95747, 
+    95751, 95755, 0, 0, 0, 0, 0, 0, 0, 95758, 95762, 95765, 95768, 95771, 
+    95774, 95777, 95780, 95783, 95786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 95789, 95793, 95798, 95802, 95807, 95811, 95816, 95820, 95825, 95829, 
+    95834, 95838, 95843, 95848, 95853, 95858, 95863, 95868, 95873, 95878, 
+    95883, 95888, 95893, 95898, 95903, 95908, 95913, 95918, 95923, 95928, 
+    95932, 95936, 95941, 95946, 95951, 95955, 95959, 95963, 95968, 95973, 
+    95978, 95982, 95986, 95991, 95996, 96001, 96007, 96012, 96018, 96023, 
+    96029, 96034, 96040, 96045, 96051, 96056, 0, 0, 0, 0, 0, 0, 0, 0, 96061, 
+    96066, 96070, 96074, 96078, 96082, 96086, 96090, 96094, 96098, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 95446, 95450, 95454, 95458, 95461, 95465, 
-    95468, 95472, 95475, 95479, 95483, 95488, 95492, 95497, 95500, 95504, 
-    95507, 95511, 95514, 95518, 95522, 95526, 95530, 95534, 95538, 95542, 
-    95546, 95550, 95554, 95558, 95562, 95566, 95570, 95574, 95578, 95582, 
-    95586, 95589, 95592, 95596, 95600, 95604, 95607, 95610, 95613, 95617, 
-    95621, 95625, 95629, 95633, 95636, 95639, 95644, 95648, 95653, 95657, 
-    95662, 95667, 95673, 95678, 95684, 95688, 95693, 95697, 95702, 95706, 
-    95710, 95714, 95718, 95721, 95724, 95728, 95732, 0, 0, 0, 0, 0, 0, 0, 
-    95735, 95739, 95742, 95745, 95748, 95751, 95754, 95757, 95760, 95763, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95766, 95770, 95775, 95779, 95784, 
-    95788, 95793, 95797, 95802, 95806, 95811, 95815, 95820, 95825, 95830, 
-    95835, 95840, 95845, 95850, 95855, 95860, 95865, 95870, 95875, 95880, 
-    95885, 95890, 95895, 95900, 95905, 95909, 95913, 95918, 95923, 95928, 
-    95932, 95936, 95940, 95945, 95950, 95955, 95959, 95963, 95968, 95973, 
-    95978, 95984, 95989, 95995, 96000, 96006, 96011, 96017, 96022, 96028, 
-    96033, 0, 0, 0, 0, 0, 0, 0, 0, 96038, 96043, 96047, 96051, 96055, 96059, 
-    96063, 96067, 96071, 96075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96079, 96082, 96087, 96093, 
-    96101, 96106, 96112, 96120, 96126, 96132, 96136, 96140, 96147, 96156, 
-    96163, 96172, 96178, 96187, 96194, 96201, 96208, 96218, 96224, 96228, 
-    96235, 96244, 96254, 96261, 96268, 96272, 96276, 96283, 96293, 96297, 
-    96304, 96311, 96318, 96324, 96331, 96338, 96345, 96352, 96356, 96360, 
-    96364, 96371, 96375, 96382, 96389, 96403, 96412, 96416, 96420, 96424, 
-    96431, 96435, 96439, 96443, 96451, 96459, 96478, 96488, 96508, 96512, 
-    96516, 96520, 96524, 96528, 96532, 96536, 96543, 96547, 96550, 96554, 
-    96558, 96564, 96571, 96580, 96584, 96593, 96602, 96610, 96614, 96621, 
-    96625, 96629, 96633, 96637, 96648, 96657, 96666, 96675, 96684, 96696, 
-    96705, 96714, 96723, 96731, 96740, 96752, 96761, 96770, 96779, 96791, 
-    96800, 96809, 96821, 96830, 96839, 96851, 96860, 96864, 96868, 96872, 
-    96876, 96880, 96884, 96888, 96895, 96899, 96903, 96914, 96918, 96922, 
-    96929, 96935, 96941, 96945, 96952, 96956, 96960, 96964, 96968, 96972, 
-    96976, 96982, 96990, 96994, 96998, 97001, 97007, 97017, 97021, 97033, 
-    97040, 97047, 97054, 97061, 97067, 97071, 97075, 97079, 97083, 97090, 
-    97099, 97106, 97114, 97122, 97128, 97132, 97136, 97140, 97144, 97150, 
-    97159, 97171, 97178, 97185, 97194, 97205, 97211, 97220, 97229, 97236, 
-    97245, 97252, 97259, 97269, 97276, 97283, 97290, 97297, 97301, 97307, 
-    97311, 97322, 97330, 97339, 97351, 97358, 97365, 97375, 97382, 97391, 
-    97398, 97407, 97414, 97421, 97431, 97438, 97445, 97455, 97462, 97474, 
-    97483, 97490, 97497, 97504, 97513, 97523, 97536, 97543, 97553, 97563, 
-    97570, 97579, 97592, 97599, 97606, 97613, 97623, 97633, 97640, 97650, 
-    97657, 97664, 97674, 97680, 97687, 97694, 97701, 97711, 97718, 97725, 
-    97732, 97738, 97745, 97755, 97762, 97766, 97774, 97778, 97790, 97794, 
-    97808, 97812, 97816, 97820, 97824, 97830, 97837, 97845, 97849, 97853, 
-    97857, 97861, 97868, 97872, 97878, 97884, 97892, 97896, 97903, 97911, 
-    97915, 97919, 97925, 97929, 97938, 97947, 97954, 97964, 97970, 97974, 
-    97978, 97986, 97993, 98000, 98006, 98010, 98018, 98022, 98029, 98041, 
-    98048, 98058, 98064, 98068, 98077, 98084, 98093, 98097, 98101, 98108, 
-    98112, 98116, 98120, 98124, 98127, 98133, 98139, 98143, 98147, 98154, 
-    98161, 98168, 98175, 98182, 98189, 98196, 98203, 98209, 98213, 98217, 
-    98224, 98231, 98238, 98245, 98252, 98256, 98259, 98264, 98268, 98272, 
-    98281, 98290, 98294, 98298, 98304, 98310, 98327, 98333, 98337, 98346, 
-    98350, 98354, 98361, 98369, 98377, 98383, 98387, 98391, 98395, 98399, 
-    98402, 98408, 98415, 98425, 98432, 98439, 98446, 98452, 98459, 98466, 
-    98473, 98480, 98487, 98496, 98503, 98515, 98522, 98529, 98539, 98550, 
-    98557, 98564, 98571, 98578, 98585, 98592, 98599, 98606, 98613, 98620, 
-    98630, 98640, 98650, 98657, 98667, 98674, 98681, 98688, 98695, 98701, 
-    98708, 98715, 98722, 98729, 98736, 98743, 98750, 98757, 98763, 98770, 
-    98777, 98786, 98793, 98800, 98804, 98812, 98816, 98820, 98824, 98828, 
-    98832, 98839, 98843, 98852, 98856, 98863, 98871, 98875, 98879, 98883, 
-    98896, 98912, 98916, 98920, 98927, 98933, 98940, 98944, 98948, 98952, 
-    98956, 98960, 98967, 98971, 98989, 98993, 98997, 99004, 99008, 99012, 
-    99018, 99022, 99026, 99034, 99038, 99042, 99046, 99050, 99056, 99067, 
-    99076, 99085, 99092, 99099, 99110, 99117, 99124, 99131, 99138, 99145, 
-    99152, 99159, 99169, 99175, 99182, 99192, 99201, 99208, 99217, 99227, 
-    99234, 99241, 99248, 99255, 99267, 99274, 99281, 99288, 99295, 99302, 
-    99312, 99319, 99326, 99336, 99349, 99361, 99368, 99378, 99385, 99392, 
-    99399, 99413, 99419, 99427, 99437, 99447, 99454, 99461, 99467, 99471, 
-    99478, 99488, 99494, 99507, 99511, 99515, 99522, 99526, 99533, 99543, 
-    99547, 99551, 99555, 99559, 99563, 99570, 99574, 99581, 99588, 99595, 
-    99604, 99613, 99623, 99630, 99637, 99644, 99654, 99661, 99671, 99678, 
-    99688, 99695, 99702, 99712, 99722, 99729, 99735, 99743, 99751, 99757, 
-    99763, 99767, 99771, 99778, 99786, 99792, 99796, 99800, 99804, 99811, 
-    99823, 99826, 99833, 99839, 99843, 99847, 99851, 99855, 99859, 99863, 
-    99867, 99871, 99875, 99879, 99886, 99890, 99896, 99900, 99904, 99908, 
-    99914, 99921, 99928, 99935, 99946, 99954, 99958, 99964, 99973, 99980, 
-    99986, 99989, 99993, 99997, 100003, 100012, 100020, 100024, 100030, 
-    100034, 100038, 100042, 100048, 100055, 100061, 100065, 100071, 100075, 
-    100079, 100088, 100100, 100104, 100111, 100118, 100128, 100135, 100147, 
-    100154, 100161, 100168, 100179, 100189, 100202, 100212, 100219, 100223, 
-    100227, 100231, 100235, 100244, 100253, 100262, 100279, 100288, 100294, 
-    100301, 100309, 100322, 100326, 100335, 100344, 100353, 100362, 100373, 
-    100382, 100391, 100400, 100409, 100418, 100427, 100437, 100440, 100444, 
-    100448, 100452, 100456, 100460, 100466, 100473, 100480, 100487, 100493, 
-    100499, 100506, 100512, 100519, 100527, 100531, 100538, 100545, 100552, 
-    100560, 100563, 100567, 100571, 100575, 100578, 100584, 100588, 100594, 
-    100601, 100608, 100614, 100621, 100628, 100635, 100642, 100649, 100656, 
-    100663, 100670, 100677, 100684, 100691, 100698, 100705, 100712, 100718, 
-    100722, 100731, 100735, 100739, 100743, 100747, 100753, 100760, 100767, 
-    100774, 100781, 100788, 100794, 100802, 100806, 100810, 100814, 100818, 
-    100824, 100841, 100858, 100862, 100866, 100870, 100874, 100878, 100882, 
-    100888, 100895, 100899, 100905, 100912, 100919, 100926, 100933, 100940, 
-    100949, 100956, 100963, 100970, 100977, 100981, 100985, 100991, 101003, 
-    101007, 101011, 101020, 101024, 101028, 101032, 101038, 101042, 101046, 
-    101055, 101059, 101063, 101067, 101074, 101078, 101082, 101086, 101090, 
-    101094, 101098, 101102, 101106, 101112, 101119, 101126, 101132, 101136, 
-    101153, 101159, 101163, 101169, 101175, 101181, 101187, 101193, 101199, 
-    101203, 101207, 101211, 101217, 101221, 101227, 101231, 101235, 101242, 
-    101249, 101266, 101270, 101274, 101278, 101282, 101286, 101298, 101301, 
-    101306, 101311, 101326, 101336, 101348, 101352, 101356, 101360, 101366, 
-    101373, 101380, 101390, 101402, 101408, 101414, 101423, 101427, 101431, 
-    101438, 101448, 101455, 101461, 101465, 101469, 101476, 101482, 101486, 
-    101492, 101496, 101504, 101510, 101514, 101522, 101530, 101537, 101543, 
-    101550, 101557, 101567, 101577, 101581, 101585, 101589, 101593, 101599, 
-    101606, 101612, 101619, 101626, 101633, 101642, 101649, 101656, 101662, 
-    101669, 101676, 101683, 101690, 101697, 101704, 101710, 101717, 101724, 
-    101731, 101740, 101747, 101754, 101758, 101764, 101768, 101774, 101781, 
-    101788, 101795, 101799, 101803, 101807, 101811, 101815, 101822, 101826, 
-    101830, 101836, 101844, 101848, 101852, 101856, 101860, 101867, 101871, 
-    101875, 101883, 101887, 101891, 101895, 101899, 101905, 101909, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101913, 101919, 101925, 101932, 
-    101939, 101946, 101953, 101960, 101967, 101973, 101980, 101987, 101994, 
-    102001, 102008, 102015, 102021, 102027, 102033, 102039, 102045, 102051, 
-    102057, 102063, 102069, 102076, 102083, 102090, 102097, 102104, 102111, 
-    102117, 102123, 102129, 102136, 102143, 102149, 102155, 102164, 102171, 
-    102178, 102185, 102192, 102199, 102206, 102212, 102218, 102224, 102233, 
-    102240, 102247, 102258, 102269, 102275, 102281, 102287, 102296, 102303, 
-    102310, 102320, 102330, 102341, 102352, 102364, 102377, 102388, 102399, 
-    102411, 102424, 102435, 102446, 102457, 102468, 102479, 102491, 102499, 
-    102507, 102516, 102525, 102534, 102540, 102546, 102552, 102559, 102569, 
-    102576, 102586, 102591, 102596, 102602, 102608, 102616, 102624, 102633, 
-    102644, 102655, 102663, 102671, 102680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 102689, 102700, 102707, 102715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    102723, 102727, 102731, 102735, 102739, 102743, 102747, 102751, 102755, 
-    102759, 102763, 102767, 102771, 102775, 102779, 102783, 102787, 102791, 
-    102795, 102799, 102803, 102807, 102811, 102815, 102819, 102823, 102827, 
-    102831, 102835, 102839, 102843, 102847, 102851, 102855, 102859, 102863, 
-    102867, 102871, 102875, 102879, 102883, 102887, 102891, 102895, 102899, 
-    102903, 102907, 102911, 102915, 102919, 102923, 102927, 102931, 102935, 
-    102939, 102943, 102947, 102951, 102955, 102959, 102963, 102967, 102971, 
-    102975, 102979, 102983, 102987, 102991, 102995, 102999, 103003, 103007, 
-    103011, 103015, 103019, 103023, 103027, 103031, 103035, 103039, 103043, 
-    103047, 103051, 103055, 103059, 103063, 103067, 103071, 103075, 103079, 
-    103083, 103087, 103091, 103095, 103099, 103103, 103107, 103111, 103115, 
-    103119, 103123, 103127, 103131, 103135, 103139, 103143, 103147, 103151, 
-    103155, 103159, 103163, 103167, 103171, 103175, 103179, 103183, 103187, 
-    103191, 103195, 103199, 103203, 103207, 103211, 103215, 103219, 103223, 
-    103227, 103231, 103235, 103239, 103243, 103247, 103251, 103255, 103259, 
-    103263, 103267, 103271, 103275, 103279, 103283, 103287, 103291, 103295, 
-    103299, 103303, 103307, 103311, 103315, 103319, 103323, 103327, 103331, 
-    103335, 103339, 103343, 103347, 103351, 103355, 103359, 103363, 103367, 
-    103371, 103375, 103379, 103383, 103387, 103391, 103395, 103399, 103403, 
-    103407, 103411, 103415, 103419, 103423, 103427, 103431, 103435, 103439, 
-    103443, 103447, 103451, 103455, 103459, 103463, 103467, 103471, 103475, 
-    103479, 103483, 103487, 103491, 103495, 103499, 103503, 103507, 103511, 
-    103515, 103519, 103523, 103527, 103531, 103535, 103539, 103543, 103547, 
-    103551, 103555, 103559, 103563, 103567, 103571, 103575, 103579, 103583, 
-    103587, 103591, 103595, 103599, 103603, 103607, 103611, 103615, 103619, 
-    103623, 103627, 103631, 103635, 103639, 103643, 103647, 103651, 103655, 
-    103659, 103663, 103667, 103671, 103675, 103679, 103683, 103687, 103691, 
-    103695, 103699, 103703, 103707, 103711, 103715, 103719, 103723, 103727, 
-    103731, 103735, 103739, 103743, 103747, 103751, 103755, 103759, 103763, 
-    103767, 103771, 103775, 103779, 103783, 103787, 103791, 103795, 103799, 
-    103803, 103807, 103811, 103815, 103819, 103823, 103827, 103831, 103835, 
-    103839, 103843, 103847, 103851, 103855, 103859, 103863, 103867, 103871, 
-    103875, 103879, 103883, 103887, 103891, 103895, 103899, 103903, 103907, 
-    103911, 103915, 103919, 103923, 103927, 103931, 103935, 103939, 103943, 
-    103947, 103951, 103955, 103959, 103963, 103967, 103971, 103975, 103979, 
-    103983, 103987, 103991, 103995, 103999, 104003, 104007, 104011, 104015, 
-    104019, 104023, 104027, 104031, 104035, 104039, 104043, 104047, 104051, 
-    104055, 104059, 104063, 104067, 104071, 104075, 104079, 104083, 104087, 
-    104091, 104095, 104099, 104103, 104107, 104111, 104115, 104119, 104123, 
-    104127, 104131, 104135, 104139, 104143, 104147, 104151, 104155, 104159, 
-    104163, 104167, 104171, 104175, 104179, 104183, 104187, 104191, 104195, 
-    104199, 104203, 104207, 104211, 104215, 104219, 104223, 104227, 104231, 
-    104235, 104239, 104243, 104247, 104251, 104255, 104259, 104263, 104267, 
-    104271, 104275, 104279, 104283, 104287, 104291, 104295, 104299, 104303, 
-    104307, 104311, 104315, 104319, 104323, 104327, 104331, 104335, 104339, 
-    104343, 104347, 104351, 104355, 104359, 104363, 104367, 104371, 104375, 
-    104379, 104383, 104387, 104391, 104395, 104399, 104403, 104407, 104411, 
-    104415, 104419, 104423, 104427, 104431, 104435, 104439, 104443, 104447, 
-    104451, 104455, 104459, 104463, 104467, 104471, 104475, 104479, 104483, 
-    104487, 104491, 104495, 104499, 104503, 104507, 104511, 104515, 104519, 
-    104523, 104527, 104531, 104535, 104539, 104543, 104547, 104551, 104555, 
-    104559, 104563, 104567, 104571, 104575, 104579, 104583, 104587, 104591, 
-    104595, 104599, 104603, 104607, 104611, 104615, 104619, 104623, 104627, 
-    104631, 104635, 104639, 104643, 104647, 104651, 104655, 104659, 104663, 
-    104667, 104671, 104675, 104679, 104683, 104687, 104691, 104695, 104699, 
-    104703, 104707, 104711, 104715, 104719, 104723, 104727, 104731, 104735, 
-    104739, 104743, 104747, 104751, 104755, 104759, 104763, 104767, 104771, 
-    104775, 104779, 104783, 104787, 104791, 104795, 104799, 104803, 104807, 
-    104811, 104815, 104819, 104823, 104827, 104831, 104835, 104839, 104843, 
-    104847, 104851, 104855, 104859, 104863, 104867, 104871, 104875, 104879, 
-    104883, 104887, 104891, 104895, 104899, 104903, 104907, 104911, 104915, 
-    104919, 104923, 104927, 104931, 104935, 104939, 104943, 104947, 104951, 
-    104955, 104959, 104963, 104967, 104971, 104975, 104979, 104983, 104987, 
-    104991, 104995, 104999, 105003, 105007, 105011, 105015, 105019, 105023, 
-    105027, 105031, 105035, 105039, 105043, 105047, 105051, 105055, 105059, 
-    105063, 105067, 105071, 105075, 105079, 105083, 105087, 105091, 105095, 
-    105099, 105103, 105107, 105111, 105115, 105119, 105123, 105127, 105131, 
-    105135, 105139, 105143, 105147, 105151, 105155, 105159, 105163, 105167, 
-    105171, 105175, 105179, 105183, 105187, 105191, 105195, 105199, 105203, 
-    105207, 105211, 105215, 105219, 105223, 105227, 105231, 105235, 105239, 
-    105243, 105247, 105251, 105255, 105259, 105263, 105267, 105271, 105275, 
-    105279, 105283, 105287, 105291, 105295, 105299, 105303, 105307, 105311, 
-    105315, 105319, 105323, 105327, 105331, 105335, 105339, 105343, 105347, 
-    105351, 105355, 105359, 105363, 105367, 105371, 105375, 105379, 105383, 
-    105387, 105391, 105395, 105399, 105403, 105407, 105411, 105415, 105419, 
-    105423, 105427, 105431, 105435, 105439, 105443, 105447, 105451, 105455, 
-    105459, 105463, 105467, 105471, 105475, 105479, 105483, 105487, 105491, 
-    105495, 105499, 105503, 105507, 105511, 105515, 105519, 105523, 105527, 
-    105531, 105535, 105539, 105543, 105547, 105551, 105555, 105559, 105563, 
-    105567, 105571, 105575, 105579, 105583, 105587, 105591, 105595, 105599, 
-    105603, 105607, 105611, 105615, 105619, 105623, 105627, 105631, 105635, 
-    105639, 105643, 105647, 105651, 105655, 105659, 105663, 105667, 105671, 
-    105675, 105679, 105683, 105687, 105691, 105695, 105699, 105703, 105707, 
-    105711, 105715, 105719, 105723, 105727, 105731, 105735, 105739, 105743, 
-    105747, 105751, 105755, 105759, 105763, 105767, 105771, 105775, 105779, 
-    105783, 105787, 105791, 105795, 105799, 105803, 105807, 105811, 105815, 
-    105819, 105823, 105827, 105831, 105835, 105839, 105843, 105847, 105851, 
-    105855, 105859, 105863, 105867, 105871, 105875, 105879, 105883, 105887, 
-    105891, 105895, 105899, 105903, 105907, 105911, 105915, 105919, 105923, 
-    105927, 105931, 105935, 105939, 105943, 105947, 105951, 105955, 105959, 
-    105963, 105967, 105971, 105975, 105979, 105983, 105987, 105991, 105995, 
-    105999, 106003, 106007, 106011, 106015, 106019, 106023, 106027, 106031, 
-    106035, 106039, 106043, 106047, 106051, 106055, 106059, 106063, 106067, 
-    106071, 106075, 106079, 106083, 106087, 106091, 106095, 106099, 106103, 
-    106107, 106111, 106115, 106119, 106123, 106127, 106131, 106135, 106139, 
-    106143, 106147, 106151, 106155, 106159, 106163, 106167, 106171, 106175, 
-    106179, 106183, 106187, 106191, 106195, 106199, 106203, 106207, 106211, 
-    106215, 106219, 106223, 106227, 106231, 106235, 106239, 106243, 106247, 
-    106251, 106255, 106259, 106263, 106267, 106271, 106275, 106279, 106283, 
-    106287, 106291, 106295, 106299, 106303, 106307, 106311, 106315, 106319, 
-    106323, 106327, 106331, 106335, 106339, 106343, 106347, 106351, 106355, 
-    106359, 106363, 106367, 106371, 106375, 106379, 106383, 106387, 106391, 
-    106395, 106399, 106403, 106407, 106411, 106415, 106419, 106423, 106427, 
-    106431, 106435, 106439, 106443, 106447, 106451, 106455, 106459, 106463, 
-    106467, 106471, 106475, 106479, 106483, 106487, 106491, 106495, 106499, 
-    106503, 106507, 106511, 106515, 106519, 106523, 106527, 106531, 106535, 
-    106539, 106543, 106547, 106551, 106555, 106559, 106563, 106567, 106571, 
-    106575, 106579, 106583, 106587, 106591, 106595, 106599, 106603, 106607, 
-    106611, 106615, 106619, 106623, 106627, 106631, 106635, 106639, 106643, 
-    106647, 106651, 106655, 106659, 106663, 106667, 106671, 106675, 106679, 
-    106683, 106687, 106691, 106695, 106699, 106703, 106707, 106711, 106715, 
-    106719, 106723, 106727, 106731, 106735, 106739, 106743, 106747, 106751, 
-    106755, 106759, 106763, 106767, 106771, 106775, 106779, 106783, 106787, 
-    106791, 106795, 106799, 106803, 106807, 106811, 106815, 106819, 106823, 
-    106827, 106831, 106835, 106839, 106843, 106847, 106851, 106855, 106859, 
-    106863, 106867, 106871, 106875, 106879, 106883, 106887, 106891, 106895, 
-    106899, 106903, 106907, 106911, 106915, 106919, 106923, 106927, 106931, 
-    106935, 106939, 106943, 106947, 106951, 106955, 106959, 106963, 106967, 
-    106971, 106975, 106979, 106983, 106987, 106991, 106995, 106999, 107003, 
+    0, 0, 0, 96102, 96105, 96110, 96116, 96124, 96129, 96135, 96143, 96149, 
+    96155, 96159, 96163, 96170, 96179, 96186, 96195, 96201, 96210, 96217, 
+    96224, 96231, 96241, 96247, 96251, 96258, 96267, 96277, 96284, 96291, 
+    96295, 96299, 96306, 96316, 96320, 96327, 96334, 96341, 96347, 96354, 
+    96361, 96368, 96375, 96379, 96383, 96387, 96394, 96398, 96405, 96412, 
+    96426, 96435, 96439, 96443, 96447, 96454, 96458, 96462, 96466, 96474, 
+    96482, 96501, 96511, 96531, 96535, 96539, 96543, 96547, 96551, 96555, 
+    96559, 96566, 96570, 96573, 96577, 96581, 96587, 96594, 96603, 96607, 
+    96616, 96625, 96633, 96637, 96644, 96648, 96652, 96656, 96660, 96671, 
+    96680, 96689, 96698, 96707, 96719, 96728, 96737, 96746, 96754, 96763, 
+    96775, 96784, 96793, 96802, 96814, 96823, 96832, 96844, 96853, 96862, 
+    96874, 96883, 96887, 96891, 96895, 96899, 96903, 96907, 96911, 96918, 
+    96922, 96926, 96937, 96941, 96945, 96952, 96958, 96964, 96968, 96975, 
+    96979, 96983, 96987, 96991, 96995, 96999, 97005, 97013, 97017, 97021, 
+    97024, 97030, 97040, 97044, 97056, 97063, 97070, 97077, 97084, 97090, 
+    97094, 97098, 97102, 97106, 97113, 97122, 97129, 97137, 97145, 97151, 
+    97155, 97159, 97163, 97167, 97173, 97182, 97194, 97201, 97208, 97217, 
+    97228, 97234, 97243, 97252, 97259, 97268, 97275, 97282, 97292, 97299, 
+    97306, 97313, 97320, 97324, 97330, 97334, 97345, 97353, 97362, 97374, 
+    97381, 97388, 97398, 97405, 97414, 97421, 97430, 97437, 97444, 97454, 
+    97461, 97468, 97478, 97485, 97497, 97506, 97513, 97520, 97527, 97536, 
+    97546, 97559, 97566, 97576, 97586, 97593, 97602, 97615, 97622, 97629, 
+    97636, 97646, 97656, 97663, 97673, 97680, 97687, 97697, 97703, 97710, 
+    97717, 97724, 97734, 97741, 97748, 97755, 97761, 97768, 97778, 97785, 
+    97789, 97797, 97801, 97813, 97817, 97831, 97835, 97839, 97843, 97847, 
+    97853, 97860, 97868, 97872, 97876, 97880, 97884, 97891, 97895, 97901, 
+    97907, 97915, 97919, 97926, 97934, 97938, 97942, 97948, 97952, 97961, 
+    97970, 97977, 97987, 97993, 97997, 98001, 98009, 98016, 98023, 98029, 
+    98033, 98041, 98045, 98052, 98064, 98071, 98081, 98087, 98091, 98100, 
+    98107, 98116, 98120, 98124, 98131, 98135, 98139, 98143, 98147, 98150, 
+    98156, 98162, 98166, 98170, 98177, 98184, 98191, 98198, 98205, 98212, 
+    98219, 98226, 98232, 98236, 98240, 98247, 98254, 98261, 98268, 98275, 
+    98279, 98282, 98287, 98291, 98295, 98304, 98313, 98317, 98321, 98327, 
+    98333, 98350, 98356, 98360, 98369, 98373, 98377, 98384, 98392, 98400, 
+    98406, 98410, 98414, 98418, 98422, 98425, 98431, 98438, 98448, 98455, 
+    98462, 98469, 98475, 98482, 98489, 98496, 98503, 98510, 98519, 98526, 
+    98538, 98545, 98552, 98562, 98573, 98580, 98587, 98594, 98601, 98608, 
+    98615, 98622, 98629, 98636, 98643, 98653, 98663, 98673, 98680, 98690, 
+    98697, 98704, 98711, 98718, 98724, 98731, 98738, 98745, 98752, 98759, 
+    98766, 98773, 98780, 98786, 98793, 98800, 98809, 98816, 98823, 98827, 
+    98835, 98839, 98843, 98847, 98851, 98855, 98862, 98866, 98875, 98879, 
+    98886, 98894, 98898, 98902, 98906, 98919, 98935, 98939, 98943, 98950, 
+    98956, 98963, 98967, 98971, 98975, 98979, 98983, 98990, 98994, 99012, 
+    99016, 99020, 99027, 99031, 99035, 99041, 99045, 99049, 99057, 99061, 
+    99065, 99069, 99073, 99079, 99090, 99099, 99108, 99115, 99122, 99133, 
+    99140, 99147, 99154, 99161, 99168, 99175, 99182, 99192, 99198, 99205, 
+    99215, 99224, 99231, 99240, 99250, 99257, 99264, 99271, 99278, 99290, 
+    99297, 99304, 99311, 99318, 99325, 99335, 99342, 99349, 99359, 99372, 
+    99384, 99391, 99401, 99408, 99415, 99422, 99436, 99442, 99450, 99460, 
+    99470, 99477, 99484, 99490, 99494, 99501, 99511, 99517, 99530, 99534, 
+    99538, 99545, 99549, 99556, 99566, 99570, 99574, 99578, 99582, 99586, 
+    99593, 99597, 99604, 99611, 99618, 99627, 99636, 99646, 99653, 99660, 
+    99667, 99677, 99684, 99694, 99701, 99711, 99718, 99725, 99735, 99745, 
+    99752, 99758, 99766, 99774, 99780, 99786, 99790, 99794, 99801, 99809, 
+    99815, 99819, 99823, 99827, 99834, 99846, 99849, 99856, 99862, 99866, 
+    99870, 99874, 99878, 99882, 99886, 99890, 99894, 99898, 99902, 99909, 
+    99913, 99919, 99923, 99927, 99931, 99937, 99944, 99951, 99958, 99969, 
+    99977, 99981, 99987, 99996, 100003, 100009, 100012, 100016, 100020, 
+    100026, 100035, 100043, 100047, 100053, 100057, 100061, 100065, 100071, 
+    100078, 100084, 100088, 100094, 100098, 100102, 100111, 100123, 100127, 
+    100134, 100141, 100151, 100158, 100170, 100177, 100184, 100191, 100202, 
+    100212, 100225, 100235, 100242, 100246, 100250, 100254, 100258, 100267, 
+    100276, 100285, 100302, 100311, 100317, 100324, 100332, 100345, 100349, 
+    100358, 100367, 100376, 100385, 100396, 100405, 100414, 100423, 100432, 
+    100441, 100450, 100460, 100463, 100467, 100471, 100475, 100479, 100483, 
+    100489, 100496, 100503, 100510, 100516, 100522, 100529, 100535, 100542, 
+    100550, 100554, 100561, 100568, 100575, 100583, 100586, 100590, 100594, 
+    100598, 100601, 100607, 100611, 100617, 100624, 100631, 100637, 100644, 
+    100651, 100658, 100665, 100672, 100679, 100686, 100693, 100700, 100707, 
+    100714, 100721, 100728, 100735, 100741, 100745, 100754, 100758, 100762, 
+    100766, 100770, 100776, 100783, 100790, 100797, 100804, 100811, 100817, 
+    100825, 100829, 100833, 100837, 100841, 100847, 100864, 100881, 100885, 
+    100889, 100893, 100897, 100901, 100905, 100911, 100918, 100922, 100928, 
+    100935, 100942, 100949, 100956, 100963, 100972, 100979, 100986, 100993, 
+    101000, 101004, 101008, 101014, 101026, 101030, 101034, 101043, 101047, 
+    101051, 101055, 101061, 101065, 101069, 101078, 101082, 101086, 101090, 
+    101097, 101101, 101105, 101109, 101113, 101117, 101121, 101125, 101129, 
+    101135, 101142, 101149, 101155, 101159, 101176, 101182, 101186, 101192, 
+    101198, 101204, 101210, 101216, 101222, 101226, 101230, 101234, 101240, 
+    101244, 101250, 101254, 101258, 101265, 101272, 101289, 101293, 101297, 
+    101301, 101305, 101309, 101321, 101324, 101329, 101334, 101349, 101359, 
+    101371, 101375, 101379, 101383, 101389, 101396, 101403, 101413, 101425, 
+    101431, 101437, 101446, 101450, 101454, 101461, 101471, 101478, 101484, 
+    101488, 101492, 101499, 101505, 101509, 101515, 101519, 101527, 101533, 
+    101537, 101545, 101553, 101560, 101566, 101573, 101580, 101590, 101600, 
+    101604, 101608, 101612, 101616, 101622, 101629, 101635, 101642, 101649, 
+    101656, 101665, 101672, 101679, 101685, 101692, 101699, 101706, 101713, 
+    101720, 101727, 101733, 101740, 101747, 101754, 101763, 101770, 101777, 
+    101781, 101787, 101791, 101797, 101804, 101811, 101818, 101822, 101826, 
+    101830, 101834, 101838, 101845, 101849, 101853, 101859, 101867, 101871, 
+    101875, 101879, 101883, 101890, 101894, 101898, 101906, 101910, 101914, 
+    101918, 101922, 101928, 101932, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 101936, 101942, 101948, 101955, 101962, 101969, 101976, 101983, 
+    101990, 101996, 102003, 102010, 102017, 102024, 102031, 102038, 102044, 
+    102050, 102056, 102062, 102068, 102074, 102080, 102086, 102092, 102099, 
+    102106, 102113, 102120, 102127, 102134, 102140, 102146, 102152, 102159, 
+    102166, 102172, 102178, 102187, 102194, 102201, 102208, 102215, 102222, 
+    102229, 102235, 102241, 102247, 102256, 102263, 102270, 102281, 102292, 
+    102298, 102304, 102310, 102319, 102326, 102333, 102343, 102353, 102364, 
+    102375, 102387, 102400, 102411, 102422, 102434, 102447, 102458, 102469, 
+    102480, 102491, 102502, 102514, 102522, 102530, 102539, 102548, 102557, 
+    102563, 102569, 102575, 102582, 102592, 102599, 102609, 102614, 102619, 
+    102625, 102631, 102639, 102647, 102656, 102667, 102678, 102686, 102694, 
+    102703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102712, 102723, 102730, 
+    102738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102746, 102750, 102754, 
+    102758, 102762, 102766, 102770, 102774, 102778, 102782, 102786, 102790, 
+    102794, 102798, 102802, 102806, 102810, 102814, 102818, 102822, 102826, 
+    102830, 102834, 102838, 102842, 102846, 102850, 102854, 102858, 102862, 
+    102866, 102870, 102874, 102878, 102882, 102886, 102890, 102894, 102898, 
+    102902, 102906, 102910, 102914, 102918, 102922, 102926, 102930, 102934, 
+    102938, 102942, 102946, 102950, 102954, 102958, 102962, 102966, 102970, 
+    102974, 102978, 102982, 102986, 102990, 102994, 102998, 103002, 103006, 
+    103010, 103014, 103018, 103022, 103026, 103030, 103034, 103038, 103042, 
+    103046, 103050, 103054, 103058, 103062, 103066, 103070, 103074, 103078, 
+    103082, 103086, 103090, 103094, 103098, 103102, 103106, 103110, 103114, 
+    103118, 103122, 103126, 103130, 103134, 103138, 103142, 103146, 103150, 
+    103154, 103158, 103162, 103166, 103170, 103174, 103178, 103182, 103186, 
+    103190, 103194, 103198, 103202, 103206, 103210, 103214, 103218, 103222, 
+    103226, 103230, 103234, 103238, 103242, 103246, 103250, 103254, 103258, 
+    103262, 103266, 103270, 103274, 103278, 103282, 103286, 103290, 103294, 
+    103298, 103302, 103306, 103310, 103314, 103318, 103322, 103326, 103330, 
+    103334, 103338, 103342, 103346, 103350, 103354, 103358, 103362, 103366, 
+    103370, 103374, 103378, 103382, 103386, 103390, 103394, 103398, 103402, 
+    103406, 103410, 103414, 103418, 103422, 103426, 103430, 103434, 103438, 
+    103442, 103446, 103450, 103454, 103458, 103462, 103466, 103470, 103474, 
+    103478, 103482, 103486, 103490, 103494, 103498, 103502, 103506, 103510, 
+    103514, 103518, 103522, 103526, 103530, 103534, 103538, 103542, 103546, 
+    103550, 103554, 103558, 103562, 103566, 103570, 103574, 103578, 103582, 
+    103586, 103590, 103594, 103598, 103602, 103606, 103610, 103614, 103618, 
+    103622, 103626, 103630, 103634, 103638, 103642, 103646, 103650, 103654, 
+    103658, 103662, 103666, 103670, 103674, 103678, 103682, 103686, 103690, 
+    103694, 103698, 103702, 103706, 103710, 103714, 103718, 103722, 103726, 
+    103730, 103734, 103738, 103742, 103746, 103750, 103754, 103758, 103762, 
+    103766, 103770, 103774, 103778, 103782, 103786, 103790, 103794, 103798, 
+    103802, 103806, 103810, 103814, 103818, 103822, 103826, 103830, 103834, 
+    103838, 103842, 103846, 103850, 103854, 103858, 103862, 103866, 103870, 
+    103874, 103878, 103882, 103886, 103890, 103894, 103898, 103902, 103906, 
+    103910, 103914, 103918, 103922, 103926, 103930, 103934, 103938, 103942, 
+    103946, 103950, 103954, 103958, 103962, 103966, 103970, 103974, 103978, 
+    103982, 103986, 103990, 103994, 103998, 104002, 104006, 104010, 104014, 
+    104018, 104022, 104026, 104030, 104034, 104038, 104042, 104046, 104050, 
+    104054, 104058, 104062, 104066, 104070, 104074, 104078, 104082, 104086, 
+    104090, 104094, 104098, 104102, 104106, 104110, 104114, 104118, 104122, 
+    104126, 104130, 104134, 104138, 104142, 104146, 104150, 104154, 104158, 
+    104162, 104166, 104170, 104174, 104178, 104182, 104186, 104190, 104194, 
+    104198, 104202, 104206, 104210, 104214, 104218, 104222, 104226, 104230, 
+    104234, 104238, 104242, 104246, 104250, 104254, 104258, 104262, 104266, 
+    104270, 104274, 104278, 104282, 104286, 104290, 104294, 104298, 104302, 
+    104306, 104310, 104314, 104318, 104322, 104326, 104330, 104334, 104338, 
+    104342, 104346, 104350, 104354, 104358, 104362, 104366, 104370, 104374, 
+    104378, 104382, 104386, 104390, 104394, 104398, 104402, 104406, 104410, 
+    104414, 104418, 104422, 104426, 104430, 104434, 104438, 104442, 104446, 
+    104450, 104454, 104458, 104462, 104466, 104470, 104474, 104478, 104482, 
+    104486, 104490, 104494, 104498, 104502, 104506, 104510, 104514, 104518, 
+    104522, 104526, 104530, 104534, 104538, 104542, 104546, 104550, 104554, 
+    104558, 104562, 104566, 104570, 104574, 104578, 104582, 104586, 104590, 
+    104594, 104598, 104602, 104606, 104610, 104614, 104618, 104622, 104626, 
+    104630, 104634, 104638, 104642, 104646, 104650, 104654, 104658, 104662, 
+    104666, 104670, 104674, 104678, 104682, 104686, 104690, 104694, 104698, 
+    104702, 104706, 104710, 104714, 104718, 104722, 104726, 104730, 104734, 
+    104738, 104742, 104746, 104750, 104754, 104758, 104762, 104766, 104770, 
+    104774, 104778, 104782, 104786, 104790, 104794, 104798, 104802, 104806, 
+    104810, 104814, 104818, 104822, 104826, 104830, 104834, 104838, 104842, 
+    104846, 104850, 104854, 104858, 104862, 104866, 104870, 104874, 104878, 
+    104882, 104886, 104890, 104894, 104898, 104902, 104906, 104910, 104914, 
+    104918, 104922, 104926, 104930, 104934, 104938, 104942, 104946, 104950, 
+    104954, 104958, 104962, 104966, 104970, 104974, 104978, 104982, 104986, 
+    104990, 104994, 104998, 105002, 105006, 105010, 105014, 105018, 105022, 
+    105026, 105030, 105034, 105038, 105042, 105046, 105050, 105054, 105058, 
+    105062, 105066, 105070, 105074, 105078, 105082, 105086, 105090, 105094, 
+    105098, 105102, 105106, 105110, 105114, 105118, 105122, 105126, 105130, 
+    105134, 105138, 105142, 105146, 105150, 105154, 105158, 105162, 105166, 
+    105170, 105174, 105178, 105182, 105186, 105190, 105194, 105198, 105202, 
+    105206, 105210, 105214, 105218, 105222, 105226, 105230, 105234, 105238, 
+    105242, 105246, 105250, 105254, 105258, 105262, 105266, 105270, 105274, 
+    105278, 105282, 105286, 105290, 105294, 105298, 105302, 105306, 105310, 
+    105314, 105318, 105322, 105326, 105330, 105334, 105338, 105342, 105346, 
+    105350, 105354, 105358, 105362, 105366, 105370, 105374, 105378, 105382, 
+    105386, 105390, 105394, 105398, 105402, 105406, 105410, 105414, 105418, 
+    105422, 105426, 105430, 105434, 105438, 105442, 105446, 105450, 105454, 
+    105458, 105462, 105466, 105470, 105474, 105478, 105482, 105486, 105490, 
+    105494, 105498, 105502, 105506, 105510, 105514, 105518, 105522, 105526, 
+    105530, 105534, 105538, 105542, 105546, 105550, 105554, 105558, 105562, 
+    105566, 105570, 105574, 105578, 105582, 105586, 105590, 105594, 105598, 
+    105602, 105606, 105610, 105614, 105618, 105622, 105626, 105630, 105634, 
+    105638, 105642, 105646, 105650, 105654, 105658, 105662, 105666, 105670, 
+    105674, 105678, 105682, 105686, 105690, 105694, 105698, 105702, 105706, 
+    105710, 105714, 105718, 105722, 105726, 105730, 105734, 105738, 105742, 
+    105746, 105750, 105754, 105758, 105762, 105766, 105770, 105774, 105778, 
+    105782, 105786, 105790, 105794, 105798, 105802, 105806, 105810, 105814, 
+    105818, 105822, 105826, 105830, 105834, 105838, 105842, 105846, 105850, 
+    105854, 105858, 105862, 105866, 105870, 105874, 105878, 105882, 105886, 
+    105890, 105894, 105898, 105902, 105906, 105910, 105914, 105918, 105922, 
+    105926, 105930, 105934, 105938, 105942, 105946, 105950, 105954, 105958, 
+    105962, 105966, 105970, 105974, 105978, 105982, 105986, 105990, 105994, 
+    105998, 106002, 106006, 106010, 106014, 106018, 106022, 106026, 106030, 
+    106034, 106038, 106042, 106046, 106050, 106054, 106058, 106062, 106066, 
+    106070, 106074, 106078, 106082, 106086, 106090, 106094, 106098, 106102, 
+    106106, 106110, 106114, 106118, 106122, 106126, 106130, 106134, 106138, 
+    106142, 106146, 106150, 106154, 106158, 106162, 106166, 106170, 106174, 
+    106178, 106182, 106186, 106190, 106194, 106198, 106202, 106206, 106210, 
+    106214, 106218, 106222, 106226, 106230, 106234, 106238, 106242, 106246, 
+    106250, 106254, 106258, 106262, 106266, 106270, 106274, 106278, 106282, 
+    106286, 106290, 106294, 106298, 106302, 106306, 106310, 106314, 106318, 
+    106322, 106326, 106330, 106334, 106338, 106342, 106346, 106350, 106354, 
+    106358, 106362, 106366, 106370, 106374, 106378, 106382, 106386, 106390, 
+    106394, 106398, 106402, 106406, 106410, 106414, 106418, 106422, 106426, 
+    106430, 106434, 106438, 106442, 106446, 106450, 106454, 106458, 106462, 
+    106466, 106470, 106474, 106478, 106482, 106486, 106490, 106494, 106498, 
+    106502, 106506, 106510, 106514, 106518, 106522, 106526, 106530, 106534, 
+    106538, 106542, 106546, 106550, 106554, 106558, 106562, 106566, 106570, 
+    106574, 106578, 106582, 106586, 106590, 106594, 106598, 106602, 106606, 
+    106610, 106614, 106618, 106622, 106626, 106630, 106634, 106638, 106642, 
+    106646, 106650, 106654, 106658, 106662, 106666, 106670, 106674, 106678, 
+    106682, 106686, 106690, 106694, 106698, 106702, 106706, 106710, 106714, 
+    106718, 106722, 106726, 106730, 106734, 106738, 106742, 106746, 106750, 
+    106754, 106758, 106762, 106766, 106770, 106774, 106778, 106782, 106786, 
+    106790, 106794, 106798, 106802, 106806, 106810, 106814, 106818, 106822, 
+    106826, 106830, 106834, 106838, 106842, 106846, 106850, 106854, 106858, 
+    106862, 106866, 106870, 106874, 106878, 106882, 106886, 106890, 106894, 
+    106898, 106902, 106906, 106910, 106914, 106918, 106922, 106926, 106930, 
+    106934, 106938, 106942, 106946, 106950, 106954, 106958, 106962, 106966, 
+    106970, 106974, 106978, 106982, 106986, 106990, 106994, 106998, 107002, 
+    107006, 107010, 107014, 107018, 107022, 107026, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 107007, 107014, 107021, 107030, 107039, 
-    107046, 107051, 107058, 107065, 107074, 107085, 107096, 107101, 107108, 
-    107113, 107118, 107123, 107128, 107133, 107138, 107143, 107148, 107153, 
-    107158, 107163, 107170, 107177, 107182, 107187, 107192, 107197, 107204, 
-    107211, 107219, 107224, 107231, 107236, 107241, 107246, 107251, 107256, 
-    107263, 107270, 107275, 107280, 107285, 107290, 107295, 107300, 107305, 
-    107310, 107315, 107320, 107325, 107330, 107335, 107340, 107345, 107350, 
-    107355, 107360, 107365, 107372, 107377, 107382, 107391, 107398, 107403, 
-    107408, 107413, 107418, 107423, 107428, 107433, 107438, 107443, 107448, 
-    107453, 107458, 107463, 107468, 107473, 107478, 107483, 107488, 107493, 
-    107498, 107503, 107509, 107517, 107523, 107531, 107539, 107547, 107553, 
-    107559, 107565, 107571, 107577, 107585, 107595, 107603, 107611, 107617, 
-    107623, 107631, 107639, 107645, 107653, 107661, 107669, 107675, 107681, 
-    107687, 107693, 107699, 107705, 107713, 107721, 107727, 107733, 107739, 
-    107745, 107751, 107759, 107765, 107771, 107777, 107783, 107789, 107795, 
-    107803, 107809, 107815, 107821, 107827, 107835, 107843, 107849, 107855, 
-    107861, 107866, 107872, 107878, 107885, 107890, 107895, 107900, 107905, 
-    107910, 107915, 107920, 107925, 107930, 107939, 107946, 107951, 107956, 
-    107961, 107968, 107973, 107978, 107983, 107990, 107995, 108000, 108005, 
-    108010, 108015, 108020, 108025, 108030, 108035, 108040, 108045, 108052, 
-    108057, 108064, 108069, 108074, 108081, 108086, 108091, 108096, 108101, 
-    108106, 108111, 108116, 108121, 108126, 108131, 108136, 108141, 108146, 
-    108151, 108156, 108161, 108166, 108171, 108176, 108183, 108188, 108193, 
-    108198, 108203, 108208, 108213, 108218, 108223, 108228, 108233, 108238, 
-    108243, 108248, 108255, 108260, 108265, 108272, 108277, 108282, 108287, 
-    108292, 108297, 108302, 108307, 108312, 108317, 108322, 108329, 108334, 
-    108339, 108344, 108349, 108354, 108361, 108368, 108373, 108378, 108383, 
-    108388, 108393, 108398, 108403, 108408, 108413, 108418, 108423, 108428, 
-    108433, 108438, 108443, 108448, 108453, 108458, 108463, 108468, 108473, 
-    108478, 108483, 108488, 108493, 108498, 108503, 108508, 108513, 108518, 
-    108523, 108528, 108533, 108538, 108543, 108548, 108555, 108560, 108565, 
-    108570, 108575, 108580, 108585, 108590, 108595, 108600, 108605, 108610, 
-    108615, 108620, 108625, 108630, 108635, 108640, 108645, 108650, 108655, 
-    108660, 108665, 108670, 108675, 108680, 108685, 108690, 108695, 108700, 
-    108705, 108710, 108715, 108720, 108725, 108730, 108735, 108740, 108745, 
-    108750, 108755, 108760, 108765, 108770, 108775, 108780, 108785, 108790, 
-    108795, 108800, 108805, 108810, 108815, 108820, 108825, 108830, 108835, 
-    108840, 108845, 108852, 108857, 108862, 108867, 108872, 108877, 108882, 
-    108886, 108891, 108896, 108901, 108906, 108911, 108916, 108921, 108926, 
-    108931, 108936, 108941, 108946, 108951, 108956, 108963, 108968, 108973, 
-    108979, 108984, 108989, 108994, 108999, 109004, 109009, 109014, 109019, 
-    109024, 109029, 109034, 109039, 109044, 109049, 109054, 109059, 109064, 
-    109069, 109074, 109079, 109084, 109089, 109094, 109099, 109104, 109109, 
-    109114, 109119, 109124, 109129, 109134, 109139, 109144, 109149, 109154, 
-    109159, 109164, 109169, 109174, 109179, 109184, 109189, 109194, 109201, 
-    109206, 109211, 109218, 109225, 109230, 109235, 109240, 109245, 109250, 
-    109255, 109260, 109265, 109270, 109275, 109280, 109285, 109290, 109295, 
-    109300, 109305, 109310, 109315, 109320, 109325, 109330, 109335, 109340, 
-    109345, 109350, 109357, 109362, 109367, 109372, 109377, 109382, 109387, 
-    109392, 109397, 109402, 109407, 109412, 109417, 109422, 109427, 109432, 
-    109437, 109442, 109447, 109454, 109459, 109464, 109469, 109474, 109479, 
-    109484, 109489, 109495, 109500, 109505, 109510, 109515, 109520, 109525, 
-    109530, 109535, 109542, 109549, 109554, 109559, 109563, 109568, 109572, 
-    109576, 109581, 109588, 109593, 109598, 109607, 109612, 109617, 109622, 
-    109627, 109634, 109641, 109646, 109651, 109656, 109661, 109668, 109673, 
-    109678, 109683, 109688, 109693, 109698, 109703, 109708, 109713, 109718, 
-    109723, 109728, 109735, 109739, 109744, 109749, 109754, 109759, 109763, 
-    109768, 109773, 109778, 109783, 109788, 109793, 109798, 109803, 109808, 
-    109814, 109820, 109826, 109832, 109838, 109844, 109850, 109856, 109862, 
-    109868, 109874, 109880, 109885, 109891, 109897, 109903, 109909, 109915, 
-    109921, 109927, 109933, 109939, 109945, 109951, 109956, 109962, 109968, 
-    109974, 109980, 109986, 109992, 109998, 110004, 110010, 110016, 110022, 
-    110028, 110034, 110040, 110046, 110052, 110058, 110064, 110070, 110076, 
-    110081, 110087, 110093, 110099, 110105, 110111, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 107030, 107037, 107044, 107053, 107062, 107069, 107074, 107081, 
+    107088, 107097, 107108, 107119, 107124, 107131, 107136, 107141, 107146, 
+    107151, 107156, 107161, 107166, 107171, 107176, 107181, 107186, 107193, 
+    107200, 107205, 107210, 107215, 107220, 107227, 107234, 107242, 107247, 
+    107254, 107259, 107264, 107269, 107274, 107279, 107286, 107293, 107298, 
+    107303, 107308, 107313, 107318, 107323, 107328, 107333, 107338, 107343, 
+    107348, 107353, 107358, 107363, 107368, 107373, 107378, 107383, 107388, 
+    107395, 107400, 107405, 107414, 107421, 107426, 107431, 107436, 107441, 
+    107446, 107451, 107456, 107461, 107466, 107471, 107476, 107481, 107486, 
+    107491, 107496, 107501, 107506, 107511, 107516, 107521, 107526, 107532, 
+    107540, 107546, 107554, 107562, 107570, 107576, 107582, 107588, 107594, 
+    107600, 107608, 107618, 107626, 107634, 107640, 107646, 107654, 107662, 
+    107668, 107676, 107684, 107692, 107698, 107704, 107710, 107716, 107722, 
+    107728, 107736, 107744, 107750, 107756, 107762, 107768, 107774, 107782, 
+    107788, 107794, 107800, 107806, 107812, 107818, 107826, 107832, 107838, 
+    107844, 107850, 107858, 107866, 107872, 107878, 107884, 107889, 107895, 
+    107901, 107908, 107913, 107918, 107923, 107928, 107933, 107938, 107943, 
+    107948, 107953, 107962, 107969, 107974, 107979, 107984, 107991, 107996, 
+    108001, 108006, 108013, 108018, 108023, 108028, 108033, 108038, 108043, 
+    108048, 108053, 108058, 108063, 108068, 108075, 108080, 108087, 108092, 
+    108097, 108104, 108109, 108114, 108119, 108124, 108129, 108134, 108139, 
+    108144, 108149, 108154, 108159, 108164, 108169, 108174, 108179, 108184, 
+    108189, 108194, 108199, 108206, 108211, 108216, 108221, 108226, 108231, 
+    108236, 108241, 108246, 108251, 108256, 108261, 108266, 108271, 108278, 
+    108283, 108288, 108295, 108300, 108305, 108310, 108315, 108320, 108325, 
+    108330, 108335, 108340, 108345, 108352, 108357, 108362, 108367, 108372, 
+    108377, 108384, 108391, 108396, 108401, 108406, 108411, 108416, 108421, 
+    108426, 108431, 108436, 108441, 108446, 108451, 108456, 108461, 108466, 
+    108471, 108476, 108481, 108486, 108491, 108496, 108501, 108506, 108511, 
+    108516, 108521, 108526, 108531, 108536, 108541, 108546, 108551, 108556, 
+    108561, 108566, 108571, 108578, 108583, 108588, 108593, 108598, 108603, 
+    108608, 108613, 108618, 108623, 108628, 108633, 108638, 108643, 108648, 
+    108653, 108658, 108663, 108668, 108673, 108678, 108683, 108688, 108693, 
+    108698, 108703, 108708, 108713, 108718, 108723, 108728, 108733, 108738, 
+    108743, 108748, 108753, 108758, 108763, 108768, 108773, 108778, 108783, 
+    108788, 108793, 108798, 108803, 108808, 108813, 108818, 108823, 108828, 
+    108833, 108838, 108843, 108848, 108853, 108858, 108863, 108868, 108875, 
+    108880, 108885, 108890, 108895, 108900, 108905, 108909, 108914, 108919, 
+    108924, 108929, 108934, 108939, 108944, 108949, 108954, 108959, 108964, 
+    108969, 108974, 108979, 108986, 108991, 108996, 109002, 109007, 109012, 
+    109017, 109022, 109027, 109032, 109037, 109042, 109047, 109052, 109057, 
+    109062, 109067, 109072, 109077, 109082, 109087, 109092, 109097, 109102, 
+    109107, 109112, 109117, 109122, 109127, 109132, 109137, 109142, 109147, 
+    109152, 109157, 109162, 109167, 109172, 109177, 109182, 109187, 109192, 
+    109197, 109202, 109207, 109212, 109217, 109224, 109229, 109234, 109241, 
+    109248, 109253, 109258, 109263, 109268, 109273, 109278, 109283, 109288, 
+    109293, 109298, 109303, 109308, 109313, 109318, 109323, 109328, 109333, 
+    109338, 109343, 109348, 109353, 109358, 109363, 109368, 109373, 109380, 
+    109385, 109390, 109395, 109400, 109405, 109410, 109415, 109420, 109425, 
+    109430, 109435, 109440, 109445, 109450, 109455, 109460, 109465, 109470, 
+    109477, 109482, 109487, 109492, 109497, 109502, 109507, 109512, 109518, 
+    109523, 109528, 109533, 109538, 109543, 109548, 109553, 109558, 109565, 
+    109572, 109577, 109582, 109586, 109591, 109595, 109599, 109604, 109611, 
+    109616, 109621, 109630, 109635, 109640, 109645, 109650, 109657, 109664, 
+    109669, 109674, 109679, 109684, 109691, 109696, 109701, 109706, 109711, 
+    109716, 109721, 109726, 109731, 109736, 109741, 109746, 109751, 109758, 
+    109762, 109767, 109772, 109777, 109782, 109786, 109791, 109796, 109801, 
+    109806, 109811, 109816, 109821, 109826, 109831, 109837, 109843, 109849, 
+    109855, 109861, 109867, 109873, 109879, 109885, 109891, 109897, 109903, 
+    109908, 109914, 109920, 109926, 109932, 109938, 109944, 109950, 109956, 
+    109962, 109968, 109974, 109979, 109985, 109991, 109997, 110003, 110009, 
+    110015, 110021, 110027, 110033, 110039, 110045, 110051, 110057, 110063, 
+    110069, 110075, 110081, 110087, 110093, 110099, 110104, 110110, 110116, 
+    110122, 110128, 110134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110117, 110120, 110124, 
-    110128, 110132, 110135, 110139, 110144, 110148, 110152, 110156, 110160, 
-    110164, 110169, 110174, 110178, 110182, 110185, 110189, 110194, 110199, 
-    110203, 110207, 110211, 110215, 110219, 110223, 110227, 110231, 110235, 
-    110239, 110242, 110246, 110250, 110254, 110258, 110262, 110266, 110272, 
-    110275, 110279, 110283, 110287, 110291, 110295, 110299, 110303, 110307, 
-    110311, 110316, 110321, 110327, 110331, 110335, 110339, 110343, 110347, 
-    110351, 110356, 110359, 110363, 110367, 110371, 110375, 110381, 110385, 
-    110389, 110393, 110397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110401, 110405, 
-    110409, 110415, 110421, 110425, 110430, 110435, 110440, 110445, 110449, 
-    110454, 110459, 110464, 110468, 110473, 110478, 110483, 110487, 110492, 
-    110497, 110502, 110507, 110512, 110517, 110522, 110527, 110531, 110536, 
-    110541, 110546, 110551, 110556, 110561, 110566, 110571, 110576, 110581, 
-    110586, 110593, 110598, 110605, 110610, 110615, 110620, 110625, 110630, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110635, 110639, 110645, 
-    110648, 110651, 110655, 110659, 110663, 110667, 110671, 110675, 110679, 
-    110685, 110691, 110697, 110703, 110709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 110140, 110143, 110147, 110151, 110155, 110158, 
+    110162, 110167, 110171, 110175, 110179, 110183, 110187, 110192, 110197, 
+    110201, 110205, 110208, 110212, 110217, 110222, 110226, 110230, 110234, 
+    110238, 110242, 110246, 110250, 110254, 110258, 110262, 110265, 110269, 
+    110273, 110277, 110281, 110285, 110289, 110295, 110298, 110302, 110306, 
+    110310, 110314, 110318, 110322, 110326, 110330, 110334, 110339, 110344, 
+    110350, 110354, 110358, 110362, 110366, 110370, 110374, 110379, 110382, 
+    110386, 110390, 110394, 110398, 110404, 110408, 110412, 110416, 110420, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110424, 110428, 110432, 110438, 110444, 
+    110448, 110453, 110458, 110463, 110468, 110472, 110477, 110482, 110487, 
+    110491, 110496, 110501, 110506, 110510, 110515, 110520, 110525, 110530, 
+    110535, 110540, 110545, 110550, 110554, 110559, 110564, 110569, 110574, 
+    110579, 110584, 110589, 110594, 110599, 110604, 110609, 110616, 110621, 
+    110628, 110633, 110638, 110643, 110648, 110653, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 110658, 110662, 110668, 110671, 110674, 110678, 
+    110682, 110686, 110690, 110694, 110698, 110702, 110708, 110714, 110720, 
+    110726, 110732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110715, 110720, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 110738, 110743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110749, 110754, 110759, 
+    110764, 110771, 110778, 110785, 110792, 110797, 110802, 110807, 110812, 
+    110819, 110824, 110831, 110838, 110843, 110848, 110853, 110860, 110865, 
+    110870, 110877, 110884, 110889, 110894, 110899, 110906, 110913, 110920, 
+    110925, 110930, 110937, 110944, 110951, 110958, 110963, 110968, 110973, 
+    110980, 110985, 110990, 110995, 111002, 111011, 111018, 111023, 111028, 
+    111033, 111038, 111043, 111048, 111057, 111064, 111069, 111076, 111083, 
+    111088, 111093, 111098, 111105, 111110, 111117, 111124, 111129, 111134, 
+    111139, 111146, 111153, 111158, 111163, 111170, 111177, 111184, 111189, 
+    111194, 111199, 111204, 111211, 111220, 111229, 111234, 111241, 111250, 
+    111255, 111260, 111265, 111270, 111277, 111284, 111291, 111298, 111303, 
+    111308, 111313, 111320, 111327, 111334, 111339, 111344, 111351, 111356, 
+    111363, 111368, 111375, 111380, 111387, 111394, 111399, 111404, 111409, 
+    111414, 111419, 111424, 111429, 111434, 111439, 111446, 111453, 111460, 
+    111467, 111474, 111483, 111488, 111493, 111500, 111507, 111512, 111519, 
+    111526, 111533, 111540, 111547, 111554, 111559, 111564, 111569, 111574, 
+    111579, 111588, 111597, 111606, 111615, 111624, 111633, 111642, 111651, 
+    111656, 111667, 111678, 111687, 111692, 111697, 111702, 111707, 111716, 
+    111723, 111730, 111737, 111744, 111751, 111758, 111767, 111776, 111787, 
+    111796, 111807, 111816, 111823, 111832, 111843, 111852, 111861, 111870, 
+    111879, 111886, 111893, 111900, 111909, 111918, 111929, 111938, 111947, 
+    111958, 111963, 111968, 111979, 111987, 111996, 112005, 112014, 112025, 
+    112034, 112043, 112054, 112065, 112076, 112087, 112098, 112109, 112116, 
+    112123, 112130, 112137, 112148, 112157, 112164, 112171, 112178, 112189, 
+    112200, 112211, 112222, 112233, 112244, 112255, 112266, 112273, 112280, 
+    112289, 112298, 112305, 112312, 112319, 112328, 112337, 112346, 112353, 
+    112362, 112371, 112380, 112387, 112394, 112399, 112405, 112412, 112419, 
+    112426, 112433, 112440, 112447, 112456, 112465, 112474, 112483, 112490, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112499, 112505, 112510, 112515, 112522, 
+    112528, 112534, 112540, 112546, 112552, 112558, 112564, 112568, 112572, 
+    112578, 112584, 112590, 112594, 112599, 112604, 112608, 112612, 112615, 
+    112621, 112627, 112633, 112639, 112645, 112651, 112657, 112663, 112669, 
+    112679, 112689, 112695, 112701, 112711, 112721, 112727, 0, 0, 112733, 
+    112741, 112746, 112751, 112757, 112763, 112769, 112775, 112781, 112787, 
+    112794, 112801, 112807, 112813, 112819, 112825, 112831, 112837, 112843, 
+    112849, 112854, 112860, 112866, 112872, 112878, 112884, 112893, 112899, 
+    112904, 112912, 112919, 112926, 112935, 112944, 112953, 112962, 112971, 
+    112980, 112989, 112998, 113008, 113018, 113026, 113034, 113043, 113052, 
+    113058, 113064, 113070, 113076, 113084, 113092, 113096, 113102, 113107, 
+    113113, 113119, 113125, 113131, 113137, 113146, 113151, 113158, 113163, 
+    113168, 113173, 113179, 113185, 113191, 113198, 113203, 113208, 113213, 
+    113218, 113223, 113229, 113235, 113241, 113247, 113253, 113259, 113265, 
+    113271, 113276, 113281, 113286, 113291, 113296, 113301, 113306, 113311, 
+    113317, 113323, 113328, 113333, 113338, 113343, 113348, 113354, 113361, 
+    113365, 113369, 113373, 113377, 113381, 113385, 113389, 113393, 113401, 
+    113411, 113415, 113419, 113425, 113431, 113437, 113443, 113449, 113455, 
+    113461, 113467, 113473, 113479, 113485, 113491, 113497, 113503, 113507, 
+    113511, 113518, 113524, 113530, 113536, 113541, 113548, 113553, 113559, 
+    113565, 113571, 113577, 113582, 113586, 113592, 113596, 113600, 113604, 
+    113610, 113616, 113620, 113626, 113632, 113638, 113644, 113650, 113658, 
+    113666, 113672, 113678, 113684, 113690, 113702, 113714, 113728, 113740, 
+    113752, 113766, 113780, 113794, 113798, 113806, 113814, 113819, 113823, 
+    113827, 113831, 113835, 113839, 113843, 113847, 113853, 113859, 113865, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113871, 113877, 113883, 113889, 113895, 
+    113901, 113907, 113913, 113919, 113925, 113931, 113937, 113943, 113949, 
+    113955, 113961, 113967, 113973, 113979, 113985, 113991, 113997, 114003, 
+    114009, 114015, 114021, 114027, 114033, 114039, 114045, 114051, 114057, 
+    114063, 114069, 114075, 114081, 114087, 114093, 114099, 114105, 114111, 
+    114117, 114123, 114129, 114135, 114141, 114147, 114153, 114159, 114165, 
+    114171, 114177, 114183, 114189, 114195, 114201, 114207, 114213, 114219, 
+    114225, 114231, 114237, 114243, 114249, 114255, 114261, 114267, 114272, 
+    114277, 114282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114286, 114291, 114298, 
+    114305, 114312, 114319, 114324, 114328, 114334, 114338, 114342, 114348, 
+    114352, 114356, 114360, 114366, 114373, 114377, 114381, 114385, 114389, 
+    114393, 114397, 114403, 114407, 114411, 114415, 114419, 114423, 114427, 
+    114431, 114435, 114439, 114443, 114447, 114451, 114456, 114460, 114464, 
+    114468, 114472, 114476, 114480, 114484, 114488, 114492, 114499, 114503, 
+    114511, 114515, 114519, 114523, 114527, 114531, 114535, 114539, 114546, 
+    114550, 114554, 114558, 114562, 114566, 114572, 114576, 114582, 114586, 
+    114590, 114594, 114598, 114602, 114606, 114610, 114614, 114618, 114622, 
+    114626, 114630, 114634, 114638, 114642, 114646, 114650, 114654, 114658, 
+    114666, 114670, 114674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114678, 114686, 
+    114694, 114702, 114710, 114718, 114726, 114734, 114742, 114750, 114758, 
+    114766, 114774, 114782, 114790, 114798, 114806, 114814, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 114822, 114826, 114831, 114836, 114841, 114845, 
+    114850, 114855, 114860, 114864, 114869, 114874, 114878, 114882, 114887, 
+    114891, 114896, 114901, 114905, 114910, 114915, 114919, 114924, 114929, 
+    114934, 114939, 114944, 114948, 114953, 114958, 114963, 114967, 114972, 
+    114977, 114982, 114986, 114991, 114996, 115000, 115004, 115009, 115013, 
+    115018, 115023, 115027, 115032, 115037, 115041, 115046, 115051, 115056, 
+    115061, 115066, 115070, 115075, 115080, 115085, 115089, 115094, 115099, 
+    115104, 115108, 115113, 115118, 115122, 115126, 115131, 115135, 115140, 
+    115145, 115149, 115154, 115159, 115163, 115168, 115173, 115178, 115183, 
+    115188, 115192, 115197, 115202, 115207, 115211, 115216, 0, 115221, 
+    115225, 115230, 115235, 115239, 115243, 115248, 115252, 115257, 115262, 
+    115266, 115271, 115276, 115280, 115285, 115290, 115295, 115300, 115305, 
+    115310, 115316, 115322, 115328, 115333, 115339, 115345, 115351, 115356, 
+    115362, 115368, 115373, 115378, 115384, 115389, 115395, 115401, 115406, 
+    115412, 115418, 115423, 115429, 115435, 115441, 115447, 115453, 115458, 
+    115464, 115470, 115476, 115481, 115487, 115493, 115499, 115504, 115510, 
+    115516, 115521, 115526, 115532, 115537, 115543, 115549, 115554, 115560, 
+    115566, 115571, 115577, 115583, 115589, 115595, 115601, 0, 115605, 
+    115610, 0, 0, 115615, 0, 0, 115620, 115625, 0, 0, 115630, 115635, 115639, 
+    115644, 0, 115649, 115654, 115659, 115663, 115668, 115673, 115678, 
+    115683, 115688, 115692, 115697, 115702, 0, 115707, 0, 115712, 115717, 
+    115721, 115726, 115731, 115735, 115739, 0, 115744, 115749, 115754, 
+    115758, 115763, 115768, 115772, 115777, 115782, 115787, 115792, 115797, 
+    115802, 115808, 115814, 115820, 115825, 115831, 115837, 115843, 115848, 
+    115854, 115860, 115865, 115870, 115876, 115881, 115887, 115893, 115898, 
+    115904, 115910, 115915, 115921, 115927, 115933, 115939, 115945, 115950, 
+    115956, 115962, 115968, 115973, 115979, 115985, 115991, 115996, 116002, 
+    116008, 116013, 116018, 116024, 116029, 116035, 116041, 116046, 116052, 
+    116058, 116063, 116069, 116075, 116081, 116087, 116093, 116097, 0, 
+    116102, 116107, 116111, 116116, 0, 0, 116121, 116126, 116131, 116135, 
+    116139, 116144, 116148, 116153, 0, 116158, 116163, 116168, 116172, 
+    116177, 116182, 116187, 0, 116192, 116196, 116201, 116206, 116211, 
+    116215, 116220, 116225, 116230, 116234, 116239, 116244, 116248, 116252, 
+    116257, 116261, 116266, 116271, 116275, 116280, 116285, 116289, 116294, 
+    116299, 116304, 116309, 116314, 116318, 0, 116323, 116328, 116332, 
+    116337, 0, 116342, 116346, 116351, 116356, 116360, 0, 116364, 0, 0, 0, 
+    116368, 116373, 116378, 116382, 116387, 116392, 116397, 0, 116402, 
+    116406, 116411, 116416, 116421, 116425, 116430, 116435, 116440, 116444, 
+    116449, 116454, 116458, 116462, 116467, 116471, 116476, 116481, 116485, 
+    116490, 116495, 116499, 116504, 116509, 116514, 116519, 116524, 116529, 
+    116535, 116541, 116547, 116552, 116558, 116564, 116570, 116575, 116581, 
+    116587, 116592, 116597, 116603, 116608, 116614, 116620, 116625, 116631, 
+    116637, 116642, 116648, 116654, 116660, 116666, 116672, 116677, 116683, 
+    116689, 116695, 116700, 116706, 116712, 116718, 116723, 116729, 116735, 
+    116740, 116745, 116751, 116756, 116762, 116768, 116773, 116779, 116785, 
+    116790, 116796, 116802, 116808, 116814, 116820, 116824, 116829, 116834, 
+    116839, 116843, 116848, 116853, 116858, 116862, 116867, 116872, 116876, 
+    116880, 116885, 116889, 116894, 116899, 116903, 116908, 116913, 116917, 
+    116922, 116927, 116932, 116937, 116942, 116946, 116951, 116956, 116961, 
+    116965, 116970, 116975, 116980, 116984, 116989, 116994, 116998, 117002, 
+    117007, 117011, 117016, 117021, 117025, 117030, 117035, 117039, 117044, 
+    117049, 117054, 117059, 117064, 117069, 117075, 117081, 117087, 117092, 
+    117098, 117104, 117110, 117115, 117121, 117127, 117132, 117137, 117143, 
+    117148, 117154, 117160, 117165, 117171, 117177, 117182, 117188, 117194, 
+    117200, 117206, 117212, 117217, 117223, 117229, 117235, 117240, 117246, 
+    117252, 117258, 117263, 117269, 117275, 117280, 117285, 117291, 117296, 
+    117302, 117308, 117313, 117319, 117325, 117330, 117336, 117342, 117348, 
+    117354, 117360, 117365, 117371, 117377, 117383, 117388, 117394, 117400, 
+    117406, 117411, 117417, 117423, 117428, 117433, 117439, 117444, 117450, 
+    117456, 117461, 117467, 117473, 117478, 117484, 117490, 117496, 117502, 
+    117508, 117513, 117519, 117525, 117531, 117536, 117542, 117548, 117554, 
+    117559, 117565, 117571, 117576, 117581, 117587, 117592, 117598, 117604, 
+    117609, 117615, 117621, 117626, 117632, 117638, 117644, 117650, 117656, 
+    117662, 117669, 117676, 117683, 117689, 117696, 117703, 117710, 117716, 
+    117723, 117730, 117736, 117742, 117749, 117755, 117762, 117769, 117775, 
+    117782, 117789, 117795, 117802, 117809, 117816, 117823, 117830, 117836, 
+    117843, 117850, 117857, 117863, 117870, 117877, 117884, 117890, 117897, 
+    117904, 117910, 117916, 117923, 117929, 117936, 117943, 117949, 117956, 
+    117963, 117969, 117976, 117983, 117990, 117997, 118004, 118009, 118015, 
+    118021, 118027, 118032, 118038, 118044, 118050, 118055, 118061, 118067, 
+    118072, 118077, 118083, 118088, 118094, 118100, 118105, 118111, 118117, 
+    118122, 118128, 118134, 118140, 118146, 118152, 118157, 118163, 118169, 
+    118175, 118180, 118186, 118192, 118198, 118203, 118209, 118215, 118220, 
+    118225, 118231, 118236, 118242, 118248, 118253, 118259, 118265, 118270, 
+    118276, 118282, 118288, 118294, 118300, 118306, 0, 0, 118313, 118318, 
+    118323, 118328, 118333, 118338, 118343, 118348, 118353, 118358, 118363, 
+    118368, 118373, 118378, 118383, 118388, 118393, 118398, 118404, 118409, 
+    118414, 118419, 118424, 118429, 118434, 118439, 118443, 118448, 118453, 
+    118458, 118463, 118468, 118473, 118478, 118483, 118488, 118493, 118498, 
+    118503, 118508, 118513, 118518, 118523, 118528, 118534, 118539, 118544, 
+    118549, 118554, 118559, 118564, 118569, 118575, 118580, 118585, 118590, 
+    118595, 118600, 118605, 118610, 118615, 118620, 118625, 118630, 118635, 
+    118640, 118645, 118650, 118655, 118660, 118665, 118670, 118675, 118680, 
+    118685, 118690, 118696, 118701, 118706, 118711, 118716, 118721, 118726, 
+    118731, 118735, 118740, 118745, 118750, 118755, 118760, 118765, 118770, 
+    118775, 118780, 118785, 118790, 118795, 118800, 118805, 118810, 118815, 
+    118820, 118826, 118831, 118836, 118841, 118846, 118851, 118856, 118861, 
+    118867, 118872, 118877, 118882, 118887, 118892, 118897, 118903, 118909, 
+    118915, 118921, 118927, 118933, 118939, 118945, 118951, 118957, 118963, 
+    118969, 118975, 118981, 118987, 118993, 118999, 119006, 119012, 119018, 
+    119024, 119030, 119036, 119042, 119048, 119053, 119059, 119065, 119071, 
+    119077, 119083, 119089, 119095, 119101, 119107, 119113, 119119, 119125, 
+    119131, 119137, 119143, 119149, 119155, 119162, 119168, 119174, 119180, 
+    119186, 119192, 119198, 119204, 119211, 119217, 119223, 119229, 119235, 
+    119241, 119247, 119253, 119259, 119265, 119271, 119277, 119283, 119289, 
+    119295, 119301, 119307, 119313, 119319, 119325, 119331, 119337, 119343, 
+    119349, 119356, 119362, 119368, 119374, 119380, 119386, 119392, 119398, 
+    119403, 119409, 119415, 119421, 119427, 119433, 119439, 119445, 119451, 
+    119457, 119463, 119469, 119475, 119481, 119487, 119493, 119499, 119505, 
+    119512, 119518, 119524, 119530, 119536, 119542, 119548, 119554, 119561, 
+    119567, 119573, 119579, 119585, 119591, 119597, 119604, 119611, 119618, 
+    119625, 119632, 119639, 119646, 119653, 119660, 119667, 119674, 119681, 
+    119688, 119695, 119702, 119709, 119716, 119724, 119731, 119738, 119745, 
+    119752, 119759, 119766, 119773, 119779, 119786, 119793, 119800, 119807, 
+    119814, 119821, 119828, 119835, 119842, 119849, 119856, 119863, 119870, 
+    119877, 119884, 119891, 119898, 119906, 119913, 119920, 119927, 119934, 
+    119941, 119948, 119955, 119963, 119970, 119977, 119984, 119991, 119998, 
+    120005, 120010, 0, 0, 120015, 120020, 120024, 120028, 120032, 120036, 
+    120040, 120044, 120048, 120052, 120056, 120061, 120065, 120069, 120073, 
+    120077, 120081, 120085, 120089, 120093, 120097, 120102, 120106, 120110, 
+    120114, 120118, 120122, 120126, 120130, 120134, 120138, 120144, 120149, 
+    120154, 120159, 120164, 120169, 120174, 120179, 120184, 120189, 120195, 
+    120200, 120205, 120210, 120215, 120220, 120225, 120230, 120235, 120240, 
+    120244, 120248, 120252, 0, 120256, 120260, 120264, 120268, 120272, 
+    120276, 120280, 120284, 120288, 120292, 120296, 120300, 120304, 120308, 
+    120312, 120316, 120320, 120324, 120328, 120332, 120336, 120340, 120344, 
+    120348, 120354, 120360, 120366, 0, 120372, 120377, 0, 120382, 0, 0, 
+    120387, 0, 120392, 120397, 120402, 120407, 120412, 120417, 120422, 
+    120427, 120432, 120437, 0, 120442, 120447, 120452, 120457, 0, 120462, 0, 
+    120467, 0, 0, 0, 0, 0, 0, 120472, 0, 0, 0, 0, 120478, 0, 120484, 0, 
+    120490, 0, 120496, 120502, 120508, 0, 120514, 120520, 0, 120526, 0, 0, 
+    120532, 0, 120538, 0, 120544, 0, 120550, 0, 120558, 0, 120566, 120572, 0, 
+    120578, 0, 0, 120584, 120590, 120596, 120602, 0, 120608, 120614, 120620, 
+    120626, 120632, 120638, 120644, 0, 120650, 120656, 120662, 120668, 0, 
+    120674, 120680, 120686, 120692, 0, 120700, 0, 120708, 120714, 120720, 
+    120726, 120732, 120738, 120744, 120750, 120756, 120762, 0, 120768, 
+    120774, 120780, 120786, 120792, 120798, 120804, 120810, 120816, 120822, 
+    120828, 120834, 120840, 120846, 120852, 120858, 120864, 0, 0, 0, 0, 0, 
+    120870, 120875, 120880, 0, 120885, 120890, 120895, 120900, 120905, 0, 
+    120910, 120915, 120920, 120925, 120930, 120935, 120940, 120945, 120950, 
+    120955, 120960, 120965, 120970, 120975, 120980, 120985, 120990, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 120995, 121005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121013, 
+    121020, 121027, 121034, 121041, 121048, 121055, 121061, 121068, 121075, 
+    121082, 121090, 121098, 121106, 121114, 121122, 121130, 121137, 121144, 
+    121151, 121159, 121167, 121175, 121183, 121191, 121199, 121206, 121213, 
+    121220, 121228, 121236, 121244, 121252, 121260, 121268, 121273, 121278, 
+    121283, 121288, 121293, 121298, 121303, 121308, 121313, 0, 0, 0, 0, 
+    121318, 121323, 121327, 121331, 121335, 121339, 121343, 121347, 121351, 
+    121355, 121359, 121363, 121367, 121371, 121375, 121379, 121383, 121387, 
+    121391, 121395, 121399, 121403, 121407, 121411, 121415, 121419, 121423, 
+    121427, 121431, 121435, 121439, 121443, 121447, 121451, 121455, 121459, 
+    121463, 121467, 121471, 121475, 121479, 121483, 121487, 121491, 121495, 
+    121499, 121503, 121507, 121511, 121515, 121519, 121524, 121528, 121532, 
+    121536, 121540, 121544, 121548, 121552, 121556, 121560, 121564, 121568, 
+    121572, 121576, 121580, 121584, 121588, 121592, 121596, 121600, 121604, 
+    121608, 121612, 121616, 121620, 121624, 121628, 121632, 121636, 121640, 
+    121644, 121648, 121652, 121656, 121660, 121664, 121668, 121672, 121676, 
+    121680, 121684, 121688, 121692, 121696, 121700, 121704, 121708, 121712, 
+    121716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121720, 121726, 121735, 
+    121743, 121751, 121760, 121769, 121778, 121787, 121796, 121805, 121814, 
+    121823, 121832, 121841, 0, 0, 121850, 121859, 121867, 121875, 121884, 
+    121893, 121902, 121911, 121920, 121929, 121938, 121947, 121956, 121965, 
+    0, 0, 121974, 121983, 121991, 121999, 122008, 122017, 122026, 122035, 
+    122044, 122053, 122062, 122071, 122080, 122089, 122098, 0, 122105, 
+    122114, 122122, 122130, 122139, 122148, 122157, 122166, 122175, 122184, 
+    122193, 122202, 122211, 122220, 122229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122236, 
+    122243, 122248, 122252, 122256, 122260, 122265, 122270, 122275, 122280, 
+    122285, 0, 0, 0, 0, 0, 122290, 122295, 122301, 122307, 122313, 122318, 
+    122324, 122330, 122336, 122341, 122347, 122353, 122358, 122363, 122369, 
+    122374, 122380, 122386, 122391, 122397, 122403, 122408, 122414, 122420, 
+    122426, 122432, 122438, 122449, 122456, 122462, 122465, 0, 122468, 
+    122473, 122479, 122485, 122491, 122496, 122502, 122508, 122514, 122519, 
+    122525, 122531, 122536, 122541, 122547, 122552, 122558, 122564, 122569, 
+    122575, 122581, 122586, 122592, 122598, 122604, 122610, 122616, 122619, 
+    122622, 122625, 122628, 122631, 122634, 122640, 122647, 122654, 122661, 
+    122667, 122674, 122681, 122688, 122694, 122701, 122708, 122714, 122720, 
+    122727, 122733, 122740, 122747, 122753, 122760, 122767, 122773, 122780, 
+    122787, 122794, 122801, 122808, 122813, 0, 0, 0, 0, 122818, 122824, 
+    122831, 122838, 122845, 122851, 122858, 122865, 122872, 122878, 122885, 
+    122892, 122898, 122904, 122911, 122917, 122924, 122931, 122937, 122944, 
+    122951, 122957, 122964, 122971, 122978, 122985, 122992, 123001, 123005, 
+    123008, 123011, 123015, 123019, 123022, 123025, 123028, 123031, 123034, 
+    123037, 123040, 123043, 123046, 123052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123055, 123062, 123070, 
+    123078, 123086, 123093, 123101, 123109, 123117, 123124, 123132, 123140, 
+    123147, 123154, 123162, 123169, 123177, 123185, 123192, 123200, 123208, 
+    123215, 123223, 123231, 123239, 123247, 123255, 123259, 123263, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123266, 123272, 123278, 123284, 123288, 
+    123294, 123300, 123306, 123312, 123318, 123324, 123330, 123336, 123342, 
+    123348, 123354, 123360, 123366, 123372, 123378, 123384, 123390, 123396, 
+    123402, 123408, 123414, 123420, 123426, 123432, 123438, 123444, 123450, 
+    123456, 123462, 123468, 123474, 123480, 123486, 123492, 123498, 123504, 
+    123510, 123516, 0, 0, 0, 0, 0, 123522, 123533, 123544, 123555, 123566, 
+    123577, 123588, 123599, 123610, 0, 0, 0, 0, 0, 0, 0, 123621, 123625, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123629, 
+    123631, 123633, 123637, 123642, 123647, 123649, 123655, 123660, 123662, 
+    123668, 123672, 123674, 123678, 123684, 123690, 123696, 123701, 123705, 
+    123712, 123719, 123726, 123731, 123738, 123745, 123752, 123756, 123762, 
+    123771, 123780, 123787, 123792, 123796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 123800, 123802, 123804, 123808, 123812, 123816, 0, 123818, 
+    123820, 123824, 123826, 123828, 123830, 123832, 123837, 123842, 123844, 
+    123850, 123854, 123858, 123866, 123868, 123870, 123872, 123874, 123876, 
+    123878, 123880, 123882, 123884, 123886, 123890, 123894, 123896, 123898, 
+    123900, 123902, 123904, 123909, 123915, 123919, 123923, 123927, 123931, 
+    123936, 123940, 123942, 123944, 123948, 123954, 123956, 123958, 123960, 
+    123964, 123973, 123979, 123983, 123987, 123989, 123991, 123994, 123996, 
+    123998, 124000, 124004, 124006, 124010, 124015, 124017, 124022, 124028, 
+    124035, 124039, 124043, 124047, 124051, 124057, 0, 0, 0, 124061, 124063, 
+    124067, 124071, 124073, 124077, 124081, 124083, 124087, 124089, 124093, 
+    124097, 124101, 124105, 124109, 124113, 124117, 124121, 124127, 124131, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124135, 124139, 124143, 124147, 
+    124154, 124156, 124160, 124162, 124164, 124168, 124172, 124176, 124178, 
+    124182, 124186, 124190, 124194, 124198, 124200, 124204, 124206, 124212, 
+    124215, 124220, 124222, 124224, 124227, 124229, 124231, 124234, 124241, 
+    124248, 124255, 124260, 124264, 124266, 124268, 0, 124270, 124272, 
+    124276, 124280, 124284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 124286, 124290, 124295, 124299, 124305, 124311, 124313, 
+    124315, 124321, 124323, 124327, 124331, 124333, 124337, 124339, 124343, 
+    124347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124351, 124353, 
+    124355, 124357, 124361, 124363, 124365, 124367, 124369, 124371, 124373, 
+    124375, 124377, 124379, 124381, 124383, 124385, 124387, 124389, 124391, 
+    124393, 124395, 124397, 124399, 124401, 124403, 124405, 124409, 124411, 
+    124413, 124415, 124419, 124421, 124425, 124427, 124429, 124433, 124437, 
+    124443, 124445, 124447, 124449, 124451, 124455, 124459, 124461, 124465, 
+    124469, 124473, 124477, 124481, 124485, 124489, 124493, 124497, 124501, 
+    124505, 124509, 124513, 124517, 124521, 124525, 124529, 0, 124533, 0, 
+    124535, 124537, 124539, 124541, 124543, 124551, 124559, 124567, 124575, 
+    124580, 124585, 124590, 124594, 124598, 124603, 124607, 124609, 124613, 
+    124615, 124617, 124619, 124621, 124623, 124625, 124627, 124631, 124633, 
+    124635, 124637, 124641, 124645, 124649, 124653, 124657, 124659, 124665, 
+    124671, 124673, 124675, 124677, 124679, 124681, 124690, 124697, 124704, 
+    124708, 124715, 124720, 124727, 124736, 124741, 124745, 124749, 124751, 
+    124755, 124757, 124761, 124765, 124767, 124771, 124775, 124779, 124781, 
+    124783, 124789, 124791, 124793, 124795, 124799, 124803, 124805, 124809, 
+    124811, 124813, 124816, 124820, 124822, 124826, 124828, 124830, 124835, 
+    124837, 124841, 124845, 124848, 124852, 124856, 124860, 124864, 124868, 
+    124872, 124876, 124881, 124885, 124889, 124898, 124903, 124906, 124908, 
+    124911, 124914, 124919, 124921, 124924, 124929, 124933, 124936, 124940, 
+    124944, 124947, 124952, 124956, 124960, 124964, 124968, 124974, 124980, 
+    124986, 124992, 124997, 125008, 125010, 125014, 125016, 125018, 125022, 
+    125026, 125028, 125032, 125037, 125042, 125048, 125050, 125054, 125058, 
+    125065, 125072, 125076, 125078, 125080, 125084, 125086, 125090, 125094, 
+    125098, 125100, 125102, 125109, 125113, 125116, 125120, 125124, 125128, 
+    125130, 125134, 125136, 125138, 125142, 125144, 125148, 125152, 125158, 
+    125162, 125166, 125170, 125172, 125175, 125179, 125186, 125195, 125204, 
+    125212, 125220, 125222, 125226, 125228, 125232, 125243, 125247, 125253, 
+    125259, 125264, 0, 125266, 125270, 125272, 125274, 0, 0, 0, 125276, 
+    125281, 125291, 125306, 125318, 125330, 125334, 125338, 125344, 125346, 
+    125354, 125362, 125364, 125368, 125374, 125380, 125387, 125394, 125396, 
+    125398, 125401, 125403, 125409, 125411, 125414, 125418, 125424, 125430, 
+    125441, 125447, 125454, 125462, 125466, 125474, 125482, 125488, 125494, 
+    125501, 125503, 125507, 125509, 125511, 125516, 125518, 125520, 125522, 
+    125524, 125528, 125539, 125545, 125549, 125553, 125557, 125563, 125569, 
+    125575, 125581, 125586, 125591, 125597, 125603, 125610, 0, 0, 125617, 
+    125622, 125630, 125634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125643, 
+    125650, 125657, 125664, 125672, 125680, 125688, 125696, 125704, 125712, 
+    125720, 125728, 125736, 125742, 125748, 125754, 125760, 125766, 125772, 
+    125778, 125784, 125790, 125796, 125802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    110726, 110731, 110736, 110741, 110748, 110755, 110762, 110769, 110774, 
-    110779, 110784, 110789, 110796, 110801, 110808, 110815, 110820, 110825, 
-    110830, 110837, 110842, 110847, 110854, 110861, 110866, 110871, 110876, 
-    110883, 110890, 110897, 110902, 110907, 110914, 110921, 110928, 110935, 
-    110940, 110945, 110950, 110957, 110962, 110967, 110972, 110979, 110988, 
-    110995, 111000, 111005, 111010, 111015, 111020, 111025, 111034, 111041, 
-    111046, 111053, 111060, 111065, 111070, 111075, 111082, 111087, 111094, 
-    111101, 111106, 111111, 111116, 111123, 111130, 111135, 111140, 111147, 
-    111154, 111161, 111166, 111171, 111176, 111181, 111188, 111197, 111206, 
-    111211, 111218, 111227, 111232, 111237, 111242, 111247, 111254, 111261, 
-    111268, 111275, 111280, 111285, 111290, 111297, 111304, 111311, 111316, 
-    111321, 111328, 111333, 111340, 111345, 111352, 111357, 111364, 111371, 
-    111376, 111381, 111386, 111391, 111396, 111401, 111406, 111411, 111416, 
-    111423, 111430, 111437, 111444, 111451, 111460, 111465, 111470, 111477, 
-    111484, 111489, 111496, 111503, 111510, 111517, 111524, 111531, 111536, 
-    111541, 111546, 111551, 111556, 111565, 111574, 111583, 111592, 111601, 
-    111610, 111619, 111628, 111633, 111644, 111655, 111664, 111669, 111674, 
-    111679, 111684, 111693, 111700, 111707, 111714, 111721, 111728, 111735, 
-    111744, 111753, 111764, 111773, 111784, 111793, 111800, 111809, 111820, 
-    111829, 111838, 111847, 111856, 111863, 111870, 111877, 111886, 111895, 
-    111906, 111915, 111924, 111935, 111940, 111945, 111956, 111964, 111973, 
-    111982, 111991, 112002, 112011, 112020, 112031, 112042, 112053, 112064, 
-    112075, 112086, 112093, 112100, 112107, 112114, 112125, 112134, 112141, 
-    112148, 112155, 112166, 112177, 112188, 112199, 112210, 112221, 112232, 
-    112243, 112250, 112257, 112266, 112275, 112282, 112289, 112296, 112305, 
-    112314, 112323, 112330, 112339, 112348, 112357, 112364, 112371, 112376, 
-    112382, 112389, 112396, 112403, 112410, 112417, 112424, 112433, 112442, 
-    112451, 112460, 112467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112476, 112482, 
-    112487, 112492, 112499, 112505, 112511, 112517, 112523, 112529, 112535, 
-    112541, 112545, 112549, 112555, 112561, 112567, 112571, 112576, 112581, 
-    112585, 112589, 112592, 112598, 112604, 112610, 112616, 112622, 112628, 
-    112634, 112640, 112646, 112656, 112666, 112672, 112678, 112688, 112698, 
-    112704, 0, 0, 112710, 112718, 112723, 112728, 112734, 112740, 112746, 
-    112752, 112758, 112764, 112771, 112778, 112784, 112790, 112796, 112802, 
-    112808, 112814, 112820, 112826, 112831, 112837, 112843, 112849, 112855, 
-    112861, 112870, 112876, 112881, 112889, 112896, 112903, 112912, 112921, 
-    112930, 112939, 112948, 112957, 112966, 112975, 112985, 112995, 113003, 
-    113011, 113020, 113029, 113035, 113041, 113047, 113053, 113061, 113069, 
-    113073, 113079, 113084, 113090, 113096, 113102, 113108, 113114, 113123, 
-    113128, 113135, 113140, 113145, 113150, 113156, 113162, 113168, 113175, 
-    113180, 113185, 113190, 113195, 113200, 113206, 113212, 113218, 113224, 
-    113230, 113236, 113242, 113248, 113253, 113258, 113263, 113268, 113273, 
-    113278, 113283, 113288, 113294, 113300, 113305, 113310, 113315, 113320, 
-    113325, 113331, 113338, 113342, 113346, 113350, 113354, 113358, 113362, 
-    113366, 113370, 113378, 113388, 113392, 113396, 113402, 113408, 113414, 
-    113420, 113426, 113432, 113438, 113444, 113450, 113456, 113462, 113468, 
-    113474, 113480, 113484, 113488, 113495, 113501, 113507, 113513, 113518, 
-    113525, 113530, 113536, 113542, 113548, 113554, 113559, 113563, 113569, 
-    113573, 113577, 113581, 113587, 113593, 113597, 113603, 113609, 113615, 
-    113621, 113627, 113635, 113643, 113649, 113655, 113661, 113667, 113679, 
-    113691, 113705, 113717, 113729, 113743, 113757, 113771, 113775, 113783, 
-    113791, 113796, 113800, 113804, 113808, 113812, 113816, 113820, 113824, 
-    113830, 113836, 113842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113848, 113854, 
-    113860, 113866, 113872, 113878, 113884, 113890, 113896, 113902, 113908, 
-    113914, 113920, 113926, 113932, 113938, 113944, 113950, 113956, 113962, 
-    113968, 113974, 113980, 113986, 113992, 113998, 114004, 114010, 114016, 
-    114022, 114028, 114034, 114040, 114046, 114052, 114058, 114064, 114070, 
-    114076, 114082, 114088, 114094, 114100, 114106, 114112, 114118, 114124, 
-    114130, 114136, 114142, 114148, 114154, 114160, 114166, 114172, 114178, 
-    114184, 114190, 114196, 114202, 114208, 114214, 114220, 114226, 114232, 
-    114238, 114244, 114249, 114254, 114259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125808, 125812, 125816, 
+    125821, 125826, 125828, 125832, 125841, 125849, 125857, 125870, 125883, 
+    125896, 125903, 125910, 125914, 125923, 125931, 125935, 125944, 125951, 
+    125955, 125959, 125963, 125967, 125974, 125978, 125982, 125986, 125990, 
+    125997, 126006, 126015, 126022, 126034, 126046, 126050, 126054, 126058, 
+    126062, 126066, 126070, 126078, 126086, 126094, 126098, 126102, 126106, 
+    126110, 126114, 126118, 126124, 126130, 126134, 126145, 126153, 126157, 
+    126161, 126165, 126169, 126175, 126182, 126193, 126203, 126213, 126224, 
+    126233, 126244, 126250, 126256, 0, 0, 0, 0, 126262, 126271, 126278, 
+    126284, 126288, 126292, 126296, 126305, 126317, 126321, 126328, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    114263, 114268, 114275, 114282, 114289, 114296, 114301, 114305, 114311, 
-    114315, 114319, 114325, 114329, 114333, 114337, 114343, 114350, 114354, 
-    114358, 114362, 114366, 114370, 114374, 114380, 114384, 114388, 114392, 
-    114396, 114400, 114404, 114408, 114412, 114416, 114420, 114424, 114428, 
-    114433, 114437, 114441, 114445, 114449, 114453, 114457, 114461, 114465, 
-    114469, 114476, 114480, 114488, 114492, 114496, 114500, 114504, 114508, 
-    114512, 114516, 114523, 114527, 114531, 114535, 114539, 114543, 114549, 
-    114553, 114559, 114563, 114567, 114571, 114575, 114579, 114583, 114587, 
-    114591, 114595, 114599, 114603, 114607, 114611, 114615, 114619, 114623, 
-    114627, 114631, 114635, 114643, 114647, 114651, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 114655, 114663, 114671, 114679, 114687, 114695, 114703, 114711, 
-    114719, 114727, 114735, 114743, 114751, 114759, 114767, 114775, 114783, 
-    114791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114799, 114803, 114808, 
-    114813, 114818, 114822, 114827, 114832, 114837, 114841, 114846, 114851, 
-    114855, 114859, 114864, 114868, 114873, 114878, 114882, 114887, 114892, 
-    114896, 114901, 114906, 114911, 114916, 114921, 114925, 114930, 114935, 
-    114940, 114944, 114949, 114954, 114959, 114963, 114968, 114973, 114977, 
-    114981, 114986, 114990, 114995, 115000, 115004, 115009, 115014, 115018, 
-    115023, 115028, 115033, 115038, 115043, 115047, 115052, 115057, 115062, 
-    115066, 115071, 115076, 115081, 115085, 115090, 115095, 115099, 115103, 
-    115108, 115112, 115117, 115122, 115126, 115131, 115136, 115140, 115145, 
-    115150, 115155, 115160, 115165, 115169, 115174, 115179, 115184, 115188, 
-    115193, 0, 115198, 115202, 115207, 115212, 115216, 115220, 115225, 
-    115229, 115234, 115239, 115243, 115248, 115253, 115257, 115262, 115267, 
-    115272, 115277, 115282, 115287, 115293, 115299, 115305, 115310, 115316, 
-    115322, 115328, 115333, 115339, 115345, 115350, 115355, 115361, 115366, 
-    115372, 115378, 115383, 115389, 115395, 115400, 115406, 115412, 115418, 
-    115424, 115430, 115435, 115441, 115447, 115453, 115458, 115464, 115470, 
-    115476, 115481, 115487, 115493, 115498, 115503, 115509, 115514, 115520, 
-    115526, 115531, 115537, 115543, 115548, 115554, 115560, 115566, 115572, 
-    115578, 0, 115582, 115587, 0, 0, 115592, 0, 0, 115597, 115602, 0, 0, 
-    115607, 115612, 115616, 115621, 0, 115626, 115631, 115636, 115640, 
-    115645, 115650, 115655, 115660, 115665, 115669, 115674, 115679, 0, 
-    115684, 0, 115689, 115694, 115698, 115703, 115708, 115712, 115716, 0, 
-    115721, 115726, 115731, 115735, 115740, 115745, 115749, 115754, 115759, 
-    115764, 115769, 115774, 115779, 115785, 115791, 115797, 115802, 115808, 
-    115814, 115820, 115825, 115831, 115837, 115842, 115847, 115853, 115858, 
-    115864, 115870, 115875, 115881, 115887, 115892, 115898, 115904, 115910, 
-    115916, 115922, 115927, 115933, 115939, 115945, 115950, 115956, 115962, 
-    115968, 115973, 115979, 115985, 115990, 115995, 116001, 116006, 116012, 
-    116018, 116023, 116029, 116035, 116040, 116046, 116052, 116058, 116064, 
-    116070, 116074, 0, 116079, 116084, 116088, 116093, 0, 0, 116098, 116103, 
-    116108, 116112, 116116, 116121, 116125, 116130, 0, 116135, 116140, 
-    116145, 116149, 116154, 116159, 116164, 0, 116169, 116173, 116178, 
-    116183, 116188, 116192, 116197, 116202, 116207, 116211, 116216, 116221, 
-    116225, 116229, 116234, 116238, 116243, 116248, 116252, 116257, 116262, 
-    116266, 116271, 116276, 116281, 116286, 116291, 116295, 0, 116300, 
-    116305, 116309, 116314, 0, 116319, 116323, 116328, 116333, 116337, 0, 
-    116341, 0, 0, 0, 116345, 116350, 116355, 116359, 116364, 116369, 116374, 
-    0, 116379, 116383, 116388, 116393, 116398, 116402, 116407, 116412, 
-    116417, 116421, 116426, 116431, 116435, 116439, 116444, 116448, 116453, 
-    116458, 116462, 116467, 116472, 116476, 116481, 116486, 116491, 116496, 
-    116501, 116506, 116512, 116518, 116524, 116529, 116535, 116541, 116547, 
-    116552, 116558, 116564, 116569, 116574, 116580, 116585, 116591, 116597, 
-    116602, 116608, 116614, 116619, 116625, 116631, 116637, 116643, 116649, 
-    116654, 116660, 116666, 116672, 116677, 116683, 116689, 116695, 116700, 
-    116706, 116712, 116717, 116722, 116728, 116733, 116739, 116745, 116750, 
-    116756, 116762, 116767, 116773, 116779, 116785, 116791, 116797, 116801, 
-    116806, 116811, 116816, 116820, 116825, 116830, 116835, 116839, 116844, 
-    116849, 116853, 116857, 116862, 116866, 116871, 116876, 116880, 116885, 
-    116890, 116894, 116899, 116904, 116909, 116914, 116919, 116923, 116928, 
-    116933, 116938, 116942, 116947, 116952, 116957, 116961, 116966, 116971, 
-    116975, 116979, 116984, 116988, 116993, 116998, 117002, 117007, 117012, 
-    117016, 117021, 117026, 117031, 117036, 117041, 117046, 117052, 117058, 
-    117064, 117069, 117075, 117081, 117087, 117092, 117098, 117104, 117109, 
-    117114, 117120, 117125, 117131, 117137, 117142, 117148, 117154, 117159, 
-    117165, 117171, 117177, 117183, 117189, 117194, 117200, 117206, 117212, 
-    117217, 117223, 117229, 117235, 117240, 117246, 117252, 117257, 117262, 
-    117268, 117273, 117279, 117285, 117290, 117296, 117302, 117307, 117313, 
-    117319, 117325, 117331, 117337, 117342, 117348, 117354, 117360, 117365, 
-    117371, 117377, 117383, 117388, 117394, 117400, 117405, 117410, 117416, 
-    117421, 117427, 117433, 117438, 117444, 117450, 117455, 117461, 117467, 
-    117473, 117479, 117485, 117490, 117496, 117502, 117508, 117513, 117519, 
-    117525, 117531, 117536, 117542, 117548, 117553, 117558, 117564, 117569, 
-    117575, 117581, 117586, 117592, 117598, 117603, 117609, 117615, 117621, 
-    117627, 117633, 117639, 117646, 117653, 117660, 117666, 117673, 117680, 
-    117687, 117693, 117700, 117707, 117713, 117719, 117726, 117732, 117739, 
-    117746, 117752, 117759, 117766, 117772, 117779, 117786, 117793, 117800, 
-    117807, 117813, 117820, 117827, 117834, 117840, 117847, 117854, 117861, 
-    117867, 117874, 117881, 117887, 117893, 117900, 117906, 117913, 117920, 
-    117926, 117933, 117940, 117946, 117953, 117960, 117967, 117974, 117981, 
-    117986, 117992, 117998, 118004, 118009, 118015, 118021, 118027, 118032, 
-    118038, 118044, 118049, 118054, 118060, 118065, 118071, 118077, 118082, 
-    118088, 118094, 118099, 118105, 118111, 118117, 118123, 118129, 118134, 
-    118140, 118146, 118152, 118157, 118163, 118169, 118175, 118180, 118186, 
-    118192, 118197, 118202, 118208, 118213, 118219, 118225, 118230, 118236, 
-    118242, 118247, 118253, 118259, 118265, 118271, 118277, 118283, 0, 0, 
-    118290, 118295, 118300, 118305, 118310, 118315, 118320, 118325, 118330, 
-    118335, 118340, 118345, 118350, 118355, 118360, 118365, 118370, 118375, 
-    118381, 118386, 118391, 118396, 118401, 118406, 118411, 118416, 118420, 
-    118425, 118430, 118435, 118440, 118445, 118450, 118455, 118460, 118465, 
-    118470, 118475, 118480, 118485, 118490, 118495, 118500, 118505, 118511, 
-    118516, 118521, 118526, 118531, 118536, 118541, 118546, 118552, 118557, 
-    118562, 118567, 118572, 118577, 118582, 118587, 118592, 118597, 118602, 
-    118607, 118612, 118617, 118622, 118627, 118632, 118637, 118642, 118647, 
-    118652, 118657, 118662, 118667, 118673, 118678, 118683, 118688, 118693, 
-    118698, 118703, 118708, 118712, 118717, 118722, 118727, 118732, 118737, 
-    118742, 118747, 118752, 118757, 118762, 118767, 118772, 118777, 118782, 
-    118787, 118792, 118797, 118803, 118808, 118813, 118818, 118823, 118828, 
-    118833, 118838, 118844, 118849, 118854, 118859, 118864, 118869, 118874, 
-    118880, 118886, 118892, 118898, 118904, 118910, 118916, 118922, 118928, 
-    118934, 118940, 118946, 118952, 118958, 118964, 118970, 118976, 118983, 
-    118989, 118995, 119001, 119007, 119013, 119019, 119025, 119030, 119036, 
-    119042, 119048, 119054, 119060, 119066, 119072, 119078, 119084, 119090, 
-    119096, 119102, 119108, 119114, 119120, 119126, 119132, 119139, 119145, 
-    119151, 119157, 119163, 119169, 119175, 119181, 119188, 119194, 119200, 
-    119206, 119212, 119218, 119224, 119230, 119236, 119242, 119248, 119254, 
-    119260, 119266, 119272, 119278, 119284, 119290, 119296, 119302, 119308, 
-    119314, 119320, 119326, 119333, 119339, 119345, 119351, 119357, 119363, 
-    119369, 119375, 119380, 119386, 119392, 119398, 119404, 119410, 119416, 
-    119422, 119428, 119434, 119440, 119446, 119452, 119458, 119464, 119470, 
-    119476, 119482, 119489, 119495, 119501, 119507, 119513, 119519, 119525, 
-    119531, 119538, 119544, 119550, 119556, 119562, 119568, 119574, 119581, 
-    119588, 119595, 119602, 119609, 119616, 119623, 119630, 119637, 119644, 
-    119651, 119658, 119665, 119672, 119679, 119686, 119693, 119701, 119708, 
-    119715, 119722, 119729, 119736, 119743, 119750, 119756, 119763, 119770, 
-    119777, 119784, 119791, 119798, 119805, 119812, 119819, 119826, 119833, 
-    119840, 119847, 119854, 119861, 119868, 119875, 119883, 119890, 119897, 
-    119904, 119911, 119918, 119925, 119932, 119940, 119947, 119954, 119961, 
-    119968, 119975, 119982, 119987, 0, 0, 119992, 119997, 120001, 120005, 
-    120009, 120013, 120017, 120021, 120025, 120029, 120033, 120038, 120042, 
-    120046, 120050, 120054, 120058, 120062, 120066, 120070, 120074, 120079, 
-    120083, 120087, 120091, 120095, 120099, 120103, 120107, 120111, 120115, 
-    120121, 120126, 120131, 120136, 120141, 120146, 120151, 120156, 120161, 
-    120166, 120172, 120177, 120182, 120187, 120192, 120197, 120202, 120207, 
-    120212, 120217, 120221, 120225, 120229, 0, 120233, 120237, 120241, 
-    120245, 120249, 120253, 120257, 120261, 120265, 120269, 120273, 120277, 
-    120281, 120285, 120289, 120293, 120297, 120301, 120305, 120309, 120313, 
-    120317, 120321, 120325, 120331, 120337, 120343, 0, 120349, 120354, 0, 
-    120359, 0, 0, 120364, 0, 120369, 120374, 120379, 120384, 120389, 120394, 
-    120399, 120404, 120409, 120414, 0, 120419, 120424, 120429, 120434, 0, 
-    120439, 0, 120444, 0, 0, 0, 0, 0, 0, 120449, 0, 0, 0, 0, 120455, 0, 
-    120461, 0, 120467, 0, 120473, 120479, 120485, 0, 120491, 120497, 0, 
-    120503, 0, 0, 120509, 0, 120515, 0, 120521, 0, 120527, 0, 120535, 0, 
-    120543, 120549, 0, 120555, 0, 0, 120561, 120567, 120573, 120579, 0, 
-    120585, 120591, 120597, 120603, 120609, 120615, 120621, 0, 120627, 
-    120633, 120639, 120645, 0, 120651, 120657, 120663, 120669, 0, 120677, 0, 
-    120685, 120691, 120697, 120703, 120709, 120715, 120721, 120727, 120733, 
-    120739, 0, 120745, 120751, 120757, 120763, 120769, 120775, 120781, 
-    120787, 120793, 120799, 120805, 120811, 120817, 120823, 120829, 120835, 
-    120841, 0, 0, 0, 0, 0, 120847, 120852, 120857, 0, 120862, 120867, 120872, 
-    120877, 120882, 0, 120887, 120892, 120897, 120902, 120907, 120912, 
-    120917, 120922, 120927, 120932, 120937, 120942, 120947, 120952, 120957, 
-    120962, 120967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126335, 
+    126337, 126339, 126343, 126347, 126351, 126360, 126362, 126364, 126367, 
+    126369, 126371, 126375, 126377, 126381, 126383, 126387, 126389, 126391, 
+    126395, 126399, 126405, 126407, 126411, 126413, 126417, 126421, 126425, 
+    126429, 126431, 126433, 126437, 126441, 126445, 126449, 126451, 126453, 
+    126455, 126460, 126465, 126468, 126476, 126484, 126486, 126491, 126494, 
+    126499, 126510, 126517, 126522, 126527, 126529, 126533, 126535, 126539, 
+    126541, 126545, 126549, 126552, 126555, 126557, 126560, 126562, 126566, 
+    126568, 126570, 126572, 126576, 126578, 126582, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 120972, 120982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 120990, 120997, 121004, 121011, 121018, 121025, 121032, 
-    121038, 121045, 121052, 121059, 121067, 121075, 121083, 121091, 121099, 
-    121107, 121114, 121121, 121128, 121136, 121144, 121152, 121160, 121168, 
-    121176, 121183, 121190, 121197, 121205, 121213, 121221, 121229, 121237, 
-    121245, 121250, 121255, 121260, 121265, 121270, 121275, 121280, 121285, 
-    121290, 0, 0, 0, 0, 121295, 121300, 121304, 121308, 121312, 121316, 
-    121320, 121324, 121328, 121332, 121336, 121340, 121344, 121348, 121352, 
-    121356, 121360, 121364, 121368, 121372, 121376, 121380, 121384, 121388, 
-    121392, 121396, 121400, 121404, 121408, 121412, 121416, 121420, 121424, 
-    121428, 121432, 121436, 121440, 121444, 121448, 121452, 121456, 121460, 
-    121464, 121468, 121472, 121476, 121480, 121484, 121488, 121492, 121496, 
-    121501, 121505, 121509, 121513, 121517, 121521, 121525, 121529, 121533, 
-    121537, 121541, 121545, 121549, 121553, 121557, 121561, 121565, 121569, 
-    121573, 121577, 121581, 121585, 121589, 121593, 121597, 121601, 121605, 
-    121609, 121613, 121617, 121621, 121625, 121629, 121633, 121637, 121641, 
-    121645, 121649, 121653, 121657, 121661, 121665, 121669, 121673, 121677, 
-    121681, 121685, 121689, 121693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    121697, 121703, 121712, 121720, 121728, 121737, 121746, 121755, 121764, 
-    121773, 121782, 121791, 121800, 121809, 121818, 0, 0, 121827, 121836, 
-    121844, 121852, 121861, 121870, 121879, 121888, 121897, 121906, 121915, 
-    121924, 121933, 121942, 0, 0, 121951, 121960, 121968, 121976, 121985, 
-    121994, 122003, 122012, 122021, 122030, 122039, 122048, 122057, 122066, 
-    122075, 0, 122082, 122091, 122099, 122107, 122116, 122125, 122134, 
-    122143, 122152, 122161, 122170, 122179, 122188, 122197, 122206, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 122213, 122220, 122225, 122229, 122233, 122237, 122242, 
-    122247, 122252, 122257, 122262, 0, 0, 0, 0, 0, 122267, 122272, 122278, 
-    122284, 122290, 122295, 122301, 122307, 122313, 122318, 122324, 122330, 
-    122335, 122340, 122346, 122351, 122357, 122363, 122368, 122374, 122380, 
-    122385, 122391, 122397, 122403, 122409, 122415, 122426, 122433, 122439, 
-    122442, 0, 122445, 122450, 122456, 122462, 122468, 122473, 122479, 
-    122485, 122491, 122496, 122502, 122508, 122513, 122518, 122524, 122529, 
-    122535, 122541, 122546, 122552, 122558, 122563, 122569, 122575, 122581, 
-    122587, 122593, 122596, 122599, 122602, 122605, 122608, 122611, 122617, 
-    122624, 122631, 122638, 122644, 122651, 122658, 122665, 122671, 122678, 
-    122685, 122691, 122697, 122704, 122710, 122717, 122724, 122730, 122737, 
-    122744, 122750, 122757, 122764, 122771, 122778, 122785, 122790, 0, 0, 0, 
-    0, 122795, 122801, 122808, 122815, 122822, 122828, 122835, 122842, 
-    122849, 122855, 122862, 122869, 122875, 122881, 122888, 122894, 122901, 
-    122908, 122914, 122921, 122928, 122934, 122941, 122948, 122955, 122962, 
-    122969, 122978, 122982, 122985, 122988, 122992, 122996, 122999, 123002, 
-    123005, 123008, 123011, 123014, 123017, 123020, 123023, 123029, 0, 0, 0, 
+    0, 0, 126585, 126590, 126595, 126600, 126605, 126610, 126615, 126622, 
+    126629, 126636, 126643, 126648, 126653, 126658, 126663, 126670, 126676, 
+    126683, 126690, 126697, 126702, 126707, 126712, 126717, 126722, 126729, 
+    126736, 126741, 126746, 126753, 126760, 126768, 126776, 126783, 126790, 
+    126798, 126806, 126814, 126821, 126831, 126842, 126847, 126854, 126861, 
+    126868, 126876, 126884, 126895, 126903, 126911, 126919, 126924, 126929, 
+    126934, 126939, 126944, 126949, 126954, 126959, 126964, 126969, 126974, 
+    126979, 126986, 126991, 126996, 127003, 127008, 127013, 127018, 127023, 
+    127028, 127033, 127038, 127043, 127048, 127053, 127058, 127063, 127070, 
+    127078, 127083, 127088, 127095, 127100, 127105, 127110, 127117, 127122, 
+    127129, 127134, 127141, 127146, 127155, 127164, 127169, 127174, 127179, 
+    127184, 127189, 127194, 127199, 127204, 127209, 127214, 127219, 127224, 
+    127229, 127237, 127245, 127250, 127255, 127260, 127265, 127270, 127276, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127282, 127286, 127290, 127294, 
+    127298, 127302, 127306, 127310, 127314, 127318, 127322, 127326, 127330, 
+    127334, 127338, 127342, 127346, 127350, 127354, 127358, 127362, 127366, 
+    127370, 127374, 127378, 127382, 127386, 127390, 127394, 127398, 127402, 
+    127406, 127410, 127414, 127418, 127422, 127426, 127430, 127434, 127438, 
+    127442, 127446, 127450, 127454, 127458, 127462, 127466, 127470, 127474, 
+    127478, 127482, 127486, 127490, 127494, 127498, 127502, 127506, 127510, 
+    127514, 127518, 127522, 127526, 127530, 127534, 127538, 127542, 127546, 
+    127550, 127554, 127558, 127562, 127566, 127570, 127574, 127578, 127582, 
+    127586, 127590, 127594, 127598, 127602, 127606, 127610, 127614, 127618, 
+    127622, 127626, 127630, 127634, 127638, 127642, 127646, 127650, 127654, 
+    127658, 127662, 127666, 127670, 127674, 127678, 127682, 127686, 127690, 
+    127694, 127698, 127702, 127706, 127710, 127714, 127718, 127722, 127726, 
+    127730, 127734, 127738, 127742, 127746, 127750, 127754, 127758, 127762, 
+    127766, 127770, 127774, 127778, 127782, 127786, 127790, 127794, 127798, 
+    127802, 127806, 127810, 127814, 127818, 127822, 127826, 127830, 127834, 
+    127838, 127842, 127846, 127850, 127854, 127858, 127862, 127866, 127870, 
+    127874, 127878, 127882, 127886, 127890, 127894, 127898, 127902, 127906, 
+    127910, 127914, 127918, 127922, 127926, 127930, 127934, 127938, 127942, 
+    127946, 127950, 127954, 127958, 127962, 127966, 127970, 127974, 127978, 
+    127982, 127986, 127990, 127994, 127998, 128002, 128006, 128010, 128014, 
+    128018, 128022, 128026, 128030, 128034, 128038, 128042, 128046, 128050, 
+    128054, 128058, 128062, 128066, 128070, 128074, 128078, 128082, 128086, 
+    128090, 128094, 128098, 128102, 128106, 128110, 128114, 128118, 128122, 
+    128126, 128130, 128134, 128138, 128142, 128146, 128150, 128154, 128158, 
+    128162, 128166, 128170, 128174, 128178, 128182, 128186, 128190, 128194, 
+    128198, 128202, 128206, 128210, 128214, 128218, 128222, 128226, 128230, 
+    128234, 128238, 128242, 128246, 128250, 128254, 128258, 128262, 128266, 
+    128270, 128274, 128278, 128282, 128286, 128290, 128294, 128298, 128302, 
+    128306, 128310, 128314, 128318, 128322, 128326, 128330, 128334, 128338, 
+    128342, 128346, 128350, 128354, 128358, 128362, 128366, 128370, 128374, 
+    128378, 128382, 128386, 128390, 128394, 128398, 128402, 128406, 128410, 
+    128414, 128418, 128422, 128426, 128430, 128434, 128438, 128442, 128446, 
+    128450, 128454, 128458, 128462, 128466, 128470, 128474, 128478, 128482, 
+    128486, 128490, 128494, 128498, 128502, 128506, 128510, 128514, 128518, 
+    128522, 128526, 128530, 128534, 128538, 128542, 128546, 128550, 128554, 
+    128558, 128562, 128566, 128570, 128574, 128578, 128582, 128586, 128590, 
+    128594, 128598, 128602, 128606, 128610, 128614, 128618, 128622, 128626, 
+    128630, 128634, 128638, 128642, 128646, 128650, 128654, 128658, 128662, 
+    128666, 128670, 128674, 128678, 128682, 128686, 128690, 128694, 128698, 
+    128702, 128706, 128710, 128714, 128718, 128722, 128726, 128730, 128734, 
+    128738, 128742, 128746, 128750, 128754, 128758, 128762, 128766, 128770, 
+    128774, 128778, 128782, 128786, 128790, 128794, 128798, 128802, 128806, 
+    128810, 128814, 128818, 128822, 128826, 128830, 128834, 128838, 128842, 
+    128846, 128850, 128854, 128858, 128862, 128866, 128870, 128874, 128878, 
+    128882, 128886, 128890, 128894, 128898, 128902, 128906, 128910, 128914, 
+    128918, 128922, 128926, 128930, 128934, 128938, 128942, 128946, 128950, 
+    128954, 128958, 128962, 128966, 128970, 128974, 128978, 128982, 128986, 
+    128990, 128994, 128998, 129002, 129006, 129010, 129014, 129018, 129022, 
+    129026, 129030, 129034, 129038, 129042, 129046, 129050, 129054, 129058, 
+    129062, 129066, 129070, 129074, 129078, 129082, 129086, 129090, 129094, 
+    129098, 129102, 129106, 129110, 129114, 129118, 129122, 129126, 129130, 
+    129134, 129138, 129142, 129146, 129150, 129154, 129158, 129162, 129166, 
+    129170, 129174, 129178, 129182, 129186, 129190, 129194, 129198, 129202, 
+    129206, 129210, 129214, 129218, 129222, 129226, 129230, 129234, 129238, 
+    129242, 129246, 129250, 129254, 129258, 129262, 129266, 129270, 129274, 
+    129278, 129282, 129286, 129290, 129294, 129298, 129302, 129306, 129310, 
+    129314, 129318, 129322, 129326, 129330, 129334, 129338, 129342, 129346, 
+    129350, 129354, 129358, 129362, 129366, 129370, 129374, 129378, 129382, 
+    129386, 129390, 129394, 129398, 129402, 129406, 129410, 129414, 129418, 
+    129422, 129426, 129430, 129434, 129438, 129442, 129446, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    123032, 123039, 123047, 123055, 123063, 123070, 123078, 123086, 123094, 
-    123101, 123109, 123117, 123124, 123131, 123139, 123146, 123154, 123162, 
-    123169, 123177, 123185, 123192, 123200, 123208, 123216, 123224, 123232, 
-    123236, 123240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123243, 123249, 
-    123255, 123261, 123265, 123271, 123277, 123283, 123289, 123295, 123301, 
-    123307, 123313, 123319, 123325, 123331, 123337, 123343, 123349, 123355, 
-    123361, 123367, 123373, 123379, 123385, 123391, 123397, 123403, 123409, 
-    123415, 123421, 123427, 123433, 123439, 123445, 123451, 123457, 123463, 
-    123469, 123475, 123481, 123487, 123493, 0, 0, 0, 0, 0, 123499, 123510, 
-    123521, 123532, 123543, 123554, 123565, 123576, 123587, 0, 0, 0, 0, 0, 0, 
-    0, 123598, 123602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129450, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 123606, 123608, 123610, 123614, 123619, 123624, 123626, 
-    123632, 123637, 123639, 123645, 123649, 123651, 123655, 123661, 123667, 
-    123673, 123678, 123682, 123689, 123696, 123703, 123708, 123715, 123722, 
-    123729, 123733, 123739, 123748, 123757, 123764, 123769, 123773, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123777, 123779, 123781, 123785, 
-    123789, 123793, 0, 123795, 123797, 123801, 123803, 123805, 123807, 
-    123809, 123814, 123819, 123821, 123827, 123831, 123835, 123843, 123845, 
-    123847, 123849, 123851, 123853, 123855, 123857, 123859, 123861, 123863, 
-    123867, 123871, 123873, 123875, 123877, 123879, 123881, 123886, 123892, 
-    123896, 123900, 123904, 123908, 123913, 123917, 123919, 123921, 123925, 
-    123931, 123933, 123935, 123937, 123941, 123950, 123956, 123960, 123964, 
-    123966, 123968, 123971, 123973, 123975, 123977, 123981, 123983, 123987, 
-    123992, 123994, 123999, 124005, 124012, 124016, 124020, 124024, 124028, 
-    124034, 0, 0, 0, 124038, 124040, 124044, 124048, 124050, 124054, 124058, 
-    124060, 124064, 124066, 124070, 124074, 124078, 124082, 124086, 124090, 
-    124094, 124098, 124104, 124108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    124112, 124116, 124120, 124124, 124131, 124133, 124137, 124139, 124141, 
-    124145, 124149, 124153, 124155, 124159, 124163, 124167, 124171, 124175, 
-    124177, 124181, 124183, 124189, 124192, 124197, 124199, 124201, 124204, 
-    124206, 124208, 124211, 124218, 124225, 124232, 124237, 124241, 124243, 
-    124245, 0, 124247, 124249, 124253, 124257, 124261, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124263, 124267, 124272, 124276, 
-    124282, 124288, 124290, 124292, 124298, 124300, 124304, 124308, 124310, 
-    124314, 124316, 124320, 124324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 124328, 124330, 124332, 124334, 124338, 124340, 124342, 124344, 
-    124346, 124348, 124350, 124352, 124354, 124356, 124358, 124360, 124362, 
-    124364, 124366, 124368, 124370, 124372, 124374, 124376, 124378, 124380, 
-    124382, 124386, 124388, 124390, 124392, 124396, 124398, 124402, 124404, 
-    124406, 124410, 124414, 124420, 124422, 124424, 124426, 124428, 124432, 
-    124436, 124438, 124442, 124446, 124450, 124454, 124458, 124462, 124466, 
-    124470, 124474, 124478, 124482, 124486, 124490, 124494, 124498, 124502, 
-    124506, 0, 124510, 0, 124512, 124514, 124516, 124518, 124520, 124528, 
-    124536, 124544, 124552, 124557, 124562, 124567, 124571, 124575, 124580, 
-    124584, 124586, 124590, 124592, 124594, 124596, 124598, 124600, 124602, 
-    124604, 124608, 124610, 124612, 124614, 124618, 124622, 124626, 124630, 
-    124634, 124636, 124642, 124648, 124650, 124652, 124654, 124656, 124658, 
-    124667, 124674, 124681, 124685, 124692, 124697, 124704, 124713, 124718, 
-    124722, 124726, 124728, 124732, 124734, 124738, 124742, 124744, 124748, 
-    124752, 124756, 124758, 124760, 124766, 124768, 124770, 124772, 124776, 
-    124780, 124782, 124786, 124788, 124790, 124793, 124797, 124799, 124803, 
-    124805, 124807, 124812, 124814, 124818, 124822, 124825, 124829, 124833, 
-    124837, 124841, 124845, 124849, 124853, 124858, 124862, 124866, 124875, 
-    124880, 124883, 124885, 124888, 124891, 124896, 124898, 124901, 124906, 
-    124910, 124913, 124917, 124921, 124924, 124929, 124933, 124937, 124941, 
-    124945, 124951, 124957, 124963, 124969, 124974, 124985, 124987, 124991, 
-    124993, 124995, 124999, 125003, 125005, 125009, 125014, 125019, 125025, 
-    125027, 125031, 125035, 125042, 125049, 125053, 125055, 125057, 125061, 
-    125063, 125067, 125071, 125075, 125077, 125079, 125086, 125090, 125093, 
-    125097, 125101, 125105, 125107, 125111, 125113, 125115, 125119, 125121, 
-    125125, 125129, 125135, 125139, 125143, 125147, 125149, 125152, 125156, 
-    125163, 125172, 125181, 125189, 125197, 125199, 125203, 125205, 125209, 
-    125220, 125224, 125230, 125236, 125241, 0, 125243, 125247, 125249, 
-    125251, 0, 0, 0, 125253, 125258, 125268, 125283, 125295, 125307, 125311, 
-    125315, 125321, 125323, 125331, 125339, 125341, 125345, 125351, 125357, 
-    125364, 125371, 125373, 125375, 125378, 125380, 125386, 125388, 125391, 
-    125395, 125401, 125407, 125418, 125424, 125431, 125439, 125443, 125451, 
-    125459, 125465, 125471, 125478, 125480, 125484, 125486, 125488, 125493, 
-    125495, 125497, 125499, 125501, 125505, 125516, 125522, 125526, 125530, 
-    125534, 125540, 125546, 125552, 125558, 125563, 125568, 125574, 125580, 
-    125587, 0, 0, 125594, 125599, 125607, 125611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 125620, 125627, 125634, 125641, 125649, 125657, 125665, 125673, 
-    125681, 125689, 125697, 125705, 125713, 125719, 125725, 125731, 125737, 
-    125743, 125749, 125755, 125761, 125767, 125773, 125779, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 129454, 129457, 129461, 129465, 129468, 129472, 129476, 
+    129479, 129482, 129486, 129490, 129493, 129496, 129499, 129502, 129507, 
+    129510, 129514, 129517, 129520, 129523, 129526, 129529, 129532, 129535, 
+    129538, 129541, 129544, 129547, 129551, 129555, 129559, 129563, 129568, 
+    129573, 129579, 129585, 129591, 129596, 129602, 129608, 129614, 129619, 
+    129625, 129631, 129636, 129641, 129647, 129652, 129658, 129664, 129669, 
+    129675, 129681, 129686, 129692, 129698, 129704, 129710, 129716, 129720, 
+    129725, 129729, 129734, 129738, 129743, 129748, 129754, 129760, 129766, 
+    129771, 129777, 129783, 129789, 129794, 129800, 129806, 129811, 129816, 
+    129822, 129827, 129833, 129839, 129844, 129850, 129856, 129861, 129867, 
+    129873, 129879, 129885, 129891, 129896, 129900, 129905, 129907, 129911, 
+    129914, 129917, 129920, 129923, 129926, 129929, 129932, 129935, 129938, 
+    129941, 129944, 129947, 129950, 129953, 129956, 129959, 129962, 129965, 
+    129968, 129971, 129974, 129977, 129980, 129983, 129986, 129989, 129992, 
+    129995, 129998, 130001, 130004, 130007, 130010, 130013, 130016, 130019, 
+    130022, 130025, 130028, 130031, 130034, 130037, 130040, 130043, 130046, 
+    130049, 130052, 130055, 130058, 130061, 130064, 130067, 130070, 130073, 
+    130076, 130079, 130082, 130085, 130088, 130091, 130094, 130097, 130100, 
+    130103, 130106, 130109, 130112, 130115, 130118, 130121, 130124, 130127, 
+    130130, 130133, 130136, 130139, 130142, 130145, 130148, 130151, 130154, 
+    130157, 130160, 130163, 130166, 130169, 130172, 130175, 130178, 130181, 
+    130184, 130187, 130190, 130193, 130196, 130199, 130202, 130205, 130208, 
+    130211, 130214, 130217, 130220, 130223, 130226, 130229, 130232, 130235, 
+    130238, 130241, 130244, 130247, 130250, 130253, 130256, 130259, 130262, 
+    130265, 130268, 130271, 130274, 130277, 130280, 130283, 130286, 130289, 
+    130292, 130295, 130298, 130301, 130304, 130307, 130310, 130313, 130316, 
+    130319, 130322, 130325, 130328, 130331, 130334, 130337, 130340, 130343, 
+    130346, 130349, 130352, 130355, 130358, 130361, 130364, 130367, 130370, 
+    130373, 130376, 130379, 130382, 130385, 130388, 130391, 130394, 130397, 
+    130400, 130403, 130406, 130409, 130412, 130415, 130418, 130421, 130424, 
+    130427, 130430, 130433, 130436, 130439, 130442, 130445, 130448, 130451, 
+    130454, 130457, 130460, 130463, 130466, 130469, 130472, 130475, 130478, 
+    130481, 130484, 130487, 130490, 130493, 130496, 130499, 130502, 130505, 
+    130508, 130511, 130514, 130517, 130520, 130523, 130526, 130529, 130532, 
+    130535, 130538, 130541, 130544, 130547, 130550, 130553, 130556, 130559, 
+    130562, 130565, 130568, 130571, 130574, 130577, 130580, 130583, 130586, 
+    130589, 130592, 130595, 130598, 130601, 130604, 130607, 130610, 130613, 
+    130616, 130619, 130622, 130625, 130628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 130631, 130633, 130635, 130640, 130642, 130647, 130649, 
+    130654, 130656, 130661, 130663, 130665, 130667, 130669, 130671, 130673, 
+    130675, 130677, 130679, 130682, 130685, 130687, 130689, 130693, 130696, 
+    130701, 130703, 130705, 130707, 130711, 130714, 130716, 130720, 130722, 
+    130726, 130728, 130732, 130735, 130737, 130741, 130745, 130747, 130753, 
+    130755, 130760, 130762, 130767, 130769, 130774, 130776, 130781, 130783, 
+    130786, 130788, 130792, 130794, 130801, 130803, 130805, 130807, 130812, 
+    130814, 130816, 130818, 130820, 130822, 130827, 130831, 130833, 130838, 
+    130842, 130844, 130849, 130853, 130855, 130860, 130864, 130866, 130868, 
+    130870, 130872, 130876, 130878, 130883, 130885, 130891, 130893, 130899, 
+    130901, 130903, 130905, 130909, 130911, 130918, 130920, 130927, 130929, 
+    130934, 130939, 130941, 130947, 130953, 130955, 130961, 130966, 130968, 
+    130974, 130980, 130982, 130988, 130994, 130996, 131002, 131006, 131008, 
+    131013, 131015, 131017, 131022, 131024, 131026, 131032, 131034, 131039, 
+    131043, 131045, 131050, 131054, 131056, 131062, 131064, 131068, 131070, 
+    131074, 131076, 131083, 131090, 131092, 131099, 131106, 131108, 131113, 
+    131115, 131122, 131124, 131129, 131131, 131137, 131139, 131143, 131145, 
+    131151, 131153, 131157, 131159, 131165, 131167, 131169, 131171, 131176, 
+    131181, 131183, 131185, 131194, 131198, 131205, 131212, 131217, 131222, 
+    131234, 131236, 131238, 131240, 131242, 131244, 131246, 131248, 131250, 
+    131252, 131254, 131256, 131258, 131260, 131262, 131264, 131266, 131268, 
+    131270, 131272, 131274, 131276, 131282, 131289, 131294, 131299, 131310, 
+    131312, 131314, 131316, 131318, 131320, 131322, 131324, 131326, 131328, 
+    131330, 131332, 131334, 131336, 131338, 131340, 131342, 131347, 131349, 
+    131351, 131357, 131369, 131380, 131382, 131384, 131386, 131388, 131390, 
+    131392, 131394, 131396, 131398, 131400, 131402, 131404, 131406, 131408, 
+    131410, 131412, 131414, 131416, 131418, 131420, 131422, 131424, 131426, 
+    131428, 131430, 131432, 131434, 131436, 131438, 131440, 131442, 131444, 
+    131446, 131448, 131450, 131452, 131454, 131456, 131458, 131460, 131462, 
+    131464, 131466, 131468, 131470, 131472, 131474, 131476, 131478, 131480, 
+    131482, 131484, 131486, 131488, 131490, 131492, 131494, 131496, 131498, 
+    131500, 131502, 131504, 131506, 131508, 131510, 131512, 131514, 131516, 
+    131518, 131520, 131522, 131524, 131526, 131528, 131530, 131532, 131534, 
+    131536, 131538, 131540, 131542, 131544, 131546, 131548, 131550, 131552, 
+    131554, 131556, 131558, 131560, 131562, 131564, 131566, 131568, 131570, 
+    131572, 131574, 131576, 131578, 131580, 131582, 131584, 131586, 131588, 
+    131590, 131592, 131594, 131596, 131598, 131600, 131602, 131604, 131606, 
+    131608, 131610, 131612, 131614, 131616, 131618, 131620, 131622, 131624, 
+    131626, 131628, 131630, 131632, 131634, 131636, 131638, 131640, 131642, 
+    131644, 131646, 131648, 131650, 131652, 131654, 131656, 131658, 131660, 
+    131662, 131664, 131666, 131668, 131670, 131672, 131674, 131676, 131678, 
+    131680, 131682, 131684, 131686, 131688, 131690, 131692, 131694, 131696, 
+    131698, 131700, 131702, 131704, 131706, 131708, 131710, 131712, 131714, 
+    131716, 131718, 131720, 131722, 131724, 131726, 131728, 131730, 131732, 
+    131734, 131736, 131738, 131740, 131742, 131744, 131746, 131748, 131750, 
+    131752, 131754, 131756, 131758, 131760, 131762, 131764, 131766, 131768, 
+    131770, 131772, 131774, 131776, 131778, 131780, 131782, 131784, 131786, 
+    131788, 131790, 131792, 131794, 131796, 131798, 131800, 131802, 131804, 
+    131806, 131808, 131810, 131812, 131814, 131816, 131818, 131820, 131822, 
+    131824, 131826, 131828, 131830, 131832, 131834, 131836, 131838, 131840, 
+    131842, 131844, 131846, 131848, 131850, 131852, 131854, 131856, 131858, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 131860, 131870, 131880, 131889, 131898, 131911, 
+    131924, 131936, 131948, 131958, 131968, 131978, 131988, 131999, 132010, 
+    132020, 132029, 132038, 132047, 132060, 132073, 132085, 132097, 132107, 
+    132117, 132127, 132137, 132146, 132155, 132164, 132173, 132182, 132191, 
+    132200, 132209, 132218, 132227, 132236, 132245, 132256, 132266, 132276, 
+    132289, 132299, 132312, 132319, 132329, 132336, 132343, 132350, 132357, 
+    132364, 132371, 132380, 132389, 132398, 132407, 132416, 132425, 132434, 
+    132443, 132451, 132459, 132466, 132476, 132485, 132493, 132500, 132510, 
+    132519, 132529, 132539, 132550, 132560, 132569, 132579, 132588, 132598, 
+    132606, 132610, 132614, 132618, 132622, 132626, 132630, 132634, 132638, 
+    132642, 132646, 132649, 132653, 132656, 132659, 132663, 132667, 132671, 
+    132675, 132679, 132683, 132687, 132691, 132695, 132699, 132703, 132707, 
+    132711, 132715, 132719, 132723, 132727, 132731, 132735, 132739, 132743, 
+    132747, 132751, 132755, 132759, 132763, 132767, 132771, 132775, 132779, 
+    132783, 132787, 132791, 132795, 132799, 132803, 132807, 132811, 132815, 
+    132819, 132823, 132827, 132831, 132835, 132839, 132843, 132847, 132851, 
+    132855, 132859, 132863, 132867, 132871, 132875, 132879, 132883, 132887, 
+    132891, 132895, 132899, 132903, 132907, 132911, 132915, 132919, 132923, 
+    132927, 132931, 132935, 132939, 132943, 132947, 132951, 132955, 132959, 
+    132963, 132967, 132971, 132975, 132979, 132983, 132987, 132991, 132995, 
+    132999, 133002, 133006, 133010, 133014, 133018, 133022, 133026, 133030, 
+    133034, 133038, 133042, 133046, 133050, 133054, 133058, 133062, 133066, 
+    133070, 133074, 133078, 133082, 133086, 133090, 133094, 133098, 133102, 
+    133106, 133110, 133114, 133118, 133122, 133126, 133130, 133134, 133138, 
+    133142, 133146, 133150, 133154, 133158, 133162, 133166, 133170, 133174, 
+    133178, 133182, 133186, 133190, 133194, 133198, 133202, 133206, 133210, 
+    133214, 133218, 133222, 133226, 133230, 133234, 133238, 133242, 133246, 
+    133250, 133254, 133258, 133262, 133266, 133270, 133274, 133278, 133282, 
+    133286, 133290, 133294, 133298, 133302, 133306, 133310, 133314, 133318, 
+    133322, 133326, 133330, 133334, 133338, 133342, 133346, 133350, 133354, 
+    133358, 133362, 133366, 133370, 133374, 133378, 133382, 133386, 133390, 
+    133394, 133398, 133402, 133406, 133410, 133414, 133418, 133422, 133426, 
+    133430, 133434, 133438, 133442, 133446, 133450, 133454, 133458, 133462, 
+    133466, 133470, 133474, 133478, 133482, 133486, 133490, 133494, 133498, 
+    133502, 133506, 133510, 133514, 133518, 133522, 133526, 133530, 133534, 
+    133538, 133542, 133546, 133550, 133554, 133558, 133562, 133566, 133570, 
+    133574, 133578, 133582, 133586, 133590, 133594, 133598, 133602, 133606, 
+    133610, 133614, 133618, 133622, 133626, 133630, 133634, 133638, 133642, 
+    133646, 133650, 133654, 133658, 133662, 133666, 133670, 133674, 133678, 
+    133682, 133686, 133690, 133694, 133698, 133702, 133706, 133710, 133714, 
+    133718, 133722, 133726, 133730, 133734, 133738, 133742, 133746, 133750, 
+    133754, 133758, 133762, 133766, 133771, 133776, 133781, 133785, 133791, 
+    133798, 133805, 133812, 133819, 133826, 133833, 133840, 133847, 133854, 
+    133861, 133868, 133875, 133882, 133888, 133895, 133902, 133908, 133915, 
+    133922, 133929, 133936, 133943, 133950, 133957, 133964, 133971, 133978, 
+    133985, 133992, 133999, 134005, 134011, 134018, 134025, 134034, 134043, 
+    134052, 134061, 134066, 134071, 134077, 134083, 134089, 134095, 134101, 
+    134107, 134113, 134119, 134125, 134131, 134137, 134143, 134148, 134154, 
+    134164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125785, 
-    125789, 125793, 125798, 125803, 125805, 125809, 125818, 125826, 125834, 
-    125847, 125860, 125873, 125880, 125887, 125891, 125900, 125908, 125912, 
-    125921, 125928, 125932, 125936, 125940, 125944, 125951, 125955, 125959, 
-    125963, 125967, 125974, 125983, 125992, 125999, 126011, 126023, 126027, 
-    126031, 126035, 126039, 126043, 126047, 126055, 126063, 126071, 126075, 
-    126079, 126083, 126087, 126091, 126095, 126101, 126107, 126111, 126122, 
-    126130, 126134, 126138, 126142, 126146, 126152, 126159, 126170, 126180, 
-    126190, 126201, 126210, 126221, 126227, 126233, 0, 0, 0, 0, 126239, 
-    126248, 126255, 126261, 126265, 126269, 126273, 126282, 126294, 126298, 
-    126305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 126312, 126314, 126316, 126320, 126324, 126328, 126337, 126339, 
-    126341, 126344, 126346, 126348, 126352, 126354, 126358, 126360, 126364, 
-    126366, 126368, 126372, 126376, 126382, 126384, 126388, 126390, 126394, 
-    126398, 126402, 126406, 126408, 126410, 126414, 126418, 126422, 126426, 
-    126428, 126430, 126432, 126437, 126442, 126445, 126453, 126461, 126463, 
-    126468, 126471, 126476, 126487, 126494, 126499, 126504, 126506, 126510, 
-    126512, 126516, 126518, 126522, 126526, 126529, 126532, 126534, 126537, 
-    126539, 126543, 126545, 126547, 126549, 126553, 126555, 126559, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 126562, 126567, 126572, 126577, 126582, 126587, 
-    126592, 126599, 126606, 126613, 126620, 126625, 126630, 126635, 126640, 
-    126647, 126653, 126660, 126667, 126674, 126679, 126684, 126689, 126694, 
-    126699, 126706, 126713, 126718, 126723, 126730, 126737, 126745, 126753, 
-    126760, 126767, 126775, 126783, 126791, 126798, 126808, 126819, 126824, 
-    126831, 126838, 126845, 126853, 126861, 126872, 126880, 126888, 126896, 
-    126901, 126906, 126911, 126916, 126921, 126926, 126931, 126936, 126941, 
-    126946, 126951, 126956, 126963, 126968, 126973, 126980, 126985, 126990, 
-    126995, 127000, 127005, 127010, 127015, 127020, 127025, 127030, 127035, 
-    127040, 127047, 127055, 127060, 127065, 127072, 127077, 127082, 127087, 
-    127094, 127099, 127106, 127111, 127118, 127123, 127132, 127141, 127146, 
-    127151, 127156, 127161, 127166, 127171, 127176, 127181, 127186, 127191, 
-    127196, 127201, 127206, 127214, 127222, 127227, 127232, 127237, 127242, 
-    127247, 127253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127259, 127263, 
-    127267, 127271, 127275, 127279, 127283, 127287, 127291, 127295, 127299, 
-    127303, 127307, 127311, 127315, 127319, 127323, 127327, 127331, 127335, 
-    127339, 127343, 127347, 127351, 127355, 127359, 127363, 127367, 127371, 
-    127375, 127379, 127383, 127387, 127391, 127395, 127399, 127403, 127407, 
-    127411, 127415, 127419, 127423, 127427, 127431, 127435, 127439, 127443, 
-    127447, 127451, 127455, 127459, 127463, 127467, 127471, 127475, 127479, 
-    127483, 127487, 127491, 127495, 127499, 127503, 127507, 127511, 127515, 
-    127519, 127523, 127527, 127531, 127535, 127539, 127543, 127547, 127551, 
-    127555, 127559, 127563, 127567, 127571, 127575, 127579, 127583, 127587, 
-    127591, 127595, 127599, 127603, 127607, 127611, 127615, 127619, 127623, 
-    127627, 127631, 127635, 127639, 127643, 127647, 127651, 127655, 127659, 
-    127663, 127667, 127671, 127675, 127679, 127683, 127687, 127691, 127695, 
-    127699, 127703, 127707, 127711, 127715, 127719, 127723, 127727, 127731, 
-    127735, 127739, 127743, 127747, 127751, 127755, 127759, 127763, 127767, 
-    127771, 127775, 127779, 127783, 127787, 127791, 127795, 127799, 127803, 
-    127807, 127811, 127815, 127819, 127823, 127827, 127831, 127835, 127839, 
-    127843, 127847, 127851, 127855, 127859, 127863, 127867, 127871, 127875, 
-    127879, 127883, 127887, 127891, 127895, 127899, 127903, 127907, 127911, 
-    127915, 127919, 127923, 127927, 127931, 127935, 127939, 127943, 127947, 
-    127951, 127955, 127959, 127963, 127967, 127971, 127975, 127979, 127983, 
-    127987, 127991, 127995, 127999, 128003, 128007, 128011, 128015, 128019, 
-    128023, 128027, 128031, 128035, 128039, 128043, 128047, 128051, 128055, 
-    128059, 128063, 128067, 128071, 128075, 128079, 128083, 128087, 128091, 
-    128095, 128099, 128103, 128107, 128111, 128115, 128119, 128123, 128127, 
-    128131, 128135, 128139, 128143, 128147, 128151, 128155, 128159, 128163, 
-    128167, 128171, 128175, 128179, 128183, 128187, 128191, 128195, 128199, 
-    128203, 128207, 128211, 128215, 128219, 128223, 128227, 128231, 128235, 
-    128239, 128243, 128247, 128251, 128255, 128259, 128263, 128267, 128271, 
-    128275, 128279, 128283, 128287, 128291, 128295, 128299, 128303, 128307, 
-    128311, 128315, 128319, 128323, 128327, 128331, 128335, 128339, 128343, 
-    128347, 128351, 128355, 128359, 128363, 128367, 128371, 128375, 128379, 
-    128383, 128387, 128391, 128395, 128399, 128403, 128407, 128411, 128415, 
-    128419, 128423, 128427, 128431, 128435, 128439, 128443, 128447, 128451, 
-    128455, 128459, 128463, 128467, 128471, 128475, 128479, 128483, 128487, 
-    128491, 128495, 128499, 128503, 128507, 128511, 128515, 128519, 128523, 
-    128527, 128531, 128535, 128539, 128543, 128547, 128551, 128555, 128559, 
-    128563, 128567, 128571, 128575, 128579, 128583, 128587, 128591, 128595, 
-    128599, 128603, 128607, 128611, 128615, 128619, 128623, 128627, 128631, 
-    128635, 128639, 128643, 128647, 128651, 128655, 128659, 128663, 128667, 
-    128671, 128675, 128679, 128683, 128687, 128691, 128695, 128699, 128703, 
-    128707, 128711, 128715, 128719, 128723, 128727, 128731, 128735, 128739, 
-    128743, 128747, 128751, 128755, 128759, 128763, 128767, 128771, 128775, 
-    128779, 128783, 128787, 128791, 128795, 128799, 128803, 128807, 128811, 
-    128815, 128819, 128823, 128827, 128831, 128835, 128839, 128843, 128847, 
-    128851, 128855, 128859, 128863, 128867, 128871, 128875, 128879, 128883, 
-    128887, 128891, 128895, 128899, 128903, 128907, 128911, 128915, 128919, 
-    128923, 128927, 128931, 128935, 128939, 128943, 128947, 128951, 128955, 
-    128959, 128963, 128967, 128971, 128975, 128979, 128983, 128987, 128991, 
-    128995, 128999, 129003, 129007, 129011, 129015, 129019, 129023, 129027, 
-    129031, 129035, 129039, 129043, 129047, 129051, 129055, 129059, 129063, 
-    129067, 129071, 129075, 129079, 129083, 129087, 129091, 129095, 129099, 
-    129103, 129107, 129111, 129115, 129119, 129123, 129127, 129131, 129135, 
-    129139, 129143, 129147, 129151, 129155, 129159, 129163, 129167, 129171, 
-    129175, 129179, 129183, 129187, 129191, 129195, 129199, 129203, 129207, 
-    129211, 129215, 129219, 129223, 129227, 129231, 129235, 129239, 129243, 
-    129247, 129251, 129255, 129259, 129263, 129267, 129271, 129275, 129279, 
-    129283, 129287, 129291, 129295, 129299, 129303, 129307, 129311, 129315, 
-    129319, 129323, 129327, 129331, 129335, 129339, 129343, 129347, 129351, 
-    129355, 129359, 129363, 129367, 129371, 129375, 129379, 129383, 129387, 
-    129391, 129395, 129399, 129403, 129407, 129411, 129415, 129419, 129423, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 129427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129431, 129434, 129438, 129442, 129445, 
-    129449, 129453, 129456, 129459, 129463, 129467, 129470, 129473, 129476, 
-    129479, 129484, 129487, 129491, 129494, 129497, 129500, 129503, 129506, 
-    129509, 129512, 129515, 129518, 129521, 129524, 129528, 129532, 129536, 
-    129540, 129545, 129550, 129556, 129562, 129568, 129573, 129579, 129585, 
-    129591, 129596, 129602, 129608, 129613, 129618, 129624, 129629, 129635, 
-    129641, 129646, 129652, 129658, 129663, 129669, 129675, 129681, 129687, 
-    129693, 129697, 129702, 129706, 129711, 129715, 129720, 129725, 129731, 
-    129737, 129743, 129748, 129754, 129760, 129766, 129771, 129777, 129783, 
-    129788, 129793, 129799, 129804, 129810, 129816, 129821, 129827, 129833, 
-    129838, 129844, 129850, 129856, 129862, 129868, 129873, 129877, 129882, 
-    129884, 129888, 129891, 129894, 129897, 129900, 129903, 129906, 129909, 
-    129912, 129915, 129918, 129921, 129924, 129927, 129930, 129933, 129936, 
-    129939, 129942, 129945, 129948, 129951, 129954, 129957, 129960, 129963, 
-    129966, 129969, 129972, 129975, 129978, 129981, 129984, 129987, 129990, 
-    129993, 129996, 129999, 130002, 130005, 130008, 130011, 130014, 130017, 
-    130020, 130023, 130026, 130029, 130032, 130035, 130038, 130041, 130044, 
-    130047, 130050, 130053, 130056, 130059, 130062, 130065, 130068, 130071, 
-    130074, 130077, 130080, 130083, 130086, 130089, 130092, 130095, 130098, 
-    130101, 130104, 130107, 130110, 130113, 130116, 130119, 130122, 130125, 
-    130128, 130131, 130134, 130137, 130140, 130143, 130146, 130149, 130152, 
-    130155, 130158, 130161, 130164, 130167, 130170, 130173, 130176, 130179, 
-    130182, 130185, 130188, 130191, 130194, 130197, 130200, 130203, 130206, 
-    130209, 130212, 130215, 130218, 130221, 130224, 130227, 130230, 130233, 
-    130236, 130239, 130242, 130245, 130248, 130251, 130254, 130257, 130260, 
-    130263, 130266, 130269, 130272, 130275, 130278, 130281, 130284, 130287, 
-    130290, 130293, 130296, 130299, 130302, 130305, 130308, 130311, 130314, 
-    130317, 130320, 130323, 130326, 130329, 130332, 130335, 130338, 130341, 
-    130344, 130347, 130350, 130353, 130356, 130359, 130362, 130365, 130368, 
-    130371, 130374, 130377, 130380, 130383, 130386, 130389, 130392, 130395, 
-    130398, 130401, 130404, 130407, 130410, 130413, 130416, 130419, 130422, 
-    130425, 130428, 130431, 130434, 130437, 130440, 130443, 130446, 130449, 
-    130452, 130455, 130458, 130461, 130464, 130467, 130470, 130473, 130476, 
-    130479, 130482, 130485, 130488, 130491, 130494, 130497, 130500, 130503, 
-    130506, 130509, 130512, 130515, 130518, 130521, 130524, 130527, 130530, 
-    130533, 130536, 130539, 130542, 130545, 130548, 130551, 130554, 130557, 
-    130560, 130563, 130566, 130569, 130572, 130575, 130578, 130581, 130584, 
-    130587, 130590, 130593, 130596, 130599, 130602, 130605, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130608, 130610, 130612, 130617, 130619, 
-    130624, 130626, 130631, 130633, 130638, 130640, 130642, 130644, 130646, 
-    130648, 130650, 130652, 130654, 130656, 130659, 130662, 130664, 130666, 
-    130670, 130673, 130678, 130680, 130682, 130684, 130688, 130691, 130693, 
-    130697, 130699, 130703, 130705, 130709, 130712, 130714, 130718, 130722, 
-    130724, 130730, 130732, 130737, 130739, 130744, 130746, 130751, 130753, 
-    130758, 130760, 130763, 130765, 130769, 130771, 130778, 130780, 130782, 
-    130784, 130789, 130791, 130793, 130795, 130797, 130799, 130804, 130808, 
-    130810, 130815, 130819, 130821, 130826, 130830, 130832, 130837, 130841, 
-    130843, 130845, 130847, 130849, 130853, 130855, 130860, 130862, 130868, 
-    130870, 130876, 130878, 130880, 130882, 130886, 130888, 130895, 130897, 
-    130904, 130906, 130911, 130916, 130918, 130924, 130930, 130932, 130938, 
-    130943, 130945, 130951, 130957, 130959, 130965, 130971, 130973, 130979, 
-    130983, 130985, 130990, 130992, 130994, 130999, 131001, 131003, 131009, 
-    131011, 131016, 131020, 131022, 131027, 131031, 131033, 131039, 131041, 
-    131045, 131047, 131051, 131053, 131060, 131067, 131069, 131076, 131083, 
-    131085, 131090, 131092, 131099, 131101, 131106, 131108, 131114, 131116, 
-    131120, 131122, 131128, 131130, 131134, 131136, 131142, 131144, 131146, 
-    131148, 131153, 131158, 131160, 131169, 131173, 131180, 131187, 131192, 
-    131197, 131209, 131211, 131213, 131215, 131217, 131219, 131221, 131223, 
-    131225, 131227, 131229, 131231, 131233, 131235, 131237, 131239, 131241, 
-    131243, 131249, 131256, 131261, 131266, 131277, 131279, 131281, 131283, 
-    131285, 131287, 131289, 131291, 131293, 131295, 131297, 131299, 131301, 
-    131303, 131305, 131307, 131309, 131314, 131316, 131318, 131329, 131331, 
-    131333, 131335, 131337, 131339, 131341, 131343, 131345, 131347, 131349, 
-    131351, 131353, 131355, 131357, 131359, 131361, 131363, 131365, 131367, 
-    131369, 131371, 131373, 131375, 131377, 131379, 131381, 131383, 131385, 
-    131387, 131389, 131391, 131393, 131395, 131397, 131399, 131401, 131403, 
-    131405, 131407, 131409, 131411, 131413, 131415, 131417, 131419, 131421, 
-    131423, 131425, 131427, 131429, 131431, 131433, 131435, 131437, 131439, 
-    131441, 131443, 131445, 131447, 131449, 131451, 131453, 131455, 131457, 
-    131459, 131461, 131463, 131465, 131467, 131469, 131471, 131473, 131475, 
-    131477, 131479, 131481, 131483, 131485, 131487, 131489, 131491, 131493, 
-    131495, 131497, 131499, 131501, 131503, 131505, 131507, 131509, 131511, 
-    131513, 131515, 131517, 131519, 131521, 131523, 131525, 131527, 131529, 
-    131531, 131533, 131535, 131537, 131539, 131541, 131543, 131545, 131547, 
-    131549, 131551, 131553, 131555, 131557, 131559, 131561, 131563, 131565, 
-    131567, 131569, 131571, 131573, 131575, 131577, 131579, 131581, 131583, 
-    131585, 131587, 131589, 131591, 131593, 131595, 131597, 131599, 131601, 
-    131603, 131605, 131607, 131609, 131611, 131613, 131615, 131617, 131619, 
-    131621, 131623, 131625, 131627, 131629, 131631, 131633, 131635, 131637, 
-    131639, 131641, 131643, 131645, 131647, 131649, 131651, 131653, 131655, 
-    131657, 131659, 131661, 131663, 131665, 131667, 131669, 131671, 131673, 
-    131675, 131677, 131679, 131681, 131683, 131685, 131687, 131689, 131691, 
-    131693, 131695, 131697, 131699, 131701, 131703, 131705, 131707, 131709, 
-    131711, 131713, 131715, 131717, 131719, 131721, 131723, 131725, 131727, 
-    131729, 131731, 131733, 131735, 131737, 131739, 131741, 131743, 131745, 
-    131747, 131749, 131751, 131753, 131755, 131757, 131759, 131761, 131763, 
-    131765, 131767, 131769, 131771, 131773, 131775, 131777, 131779, 131781, 
-    131783, 131785, 131787, 131789, 131791, 131793, 131795, 131797, 131799, 
-    131801, 131803, 131805, 131807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    131809, 131819, 131829, 131838, 131847, 131860, 131873, 131885, 131897, 
-    131907, 131917, 131927, 131937, 131948, 131959, 131969, 131978, 131987, 
-    131996, 132009, 132022, 132034, 132046, 132056, 132066, 132076, 132086, 
-    132095, 132104, 132113, 132122, 132131, 132140, 132149, 132158, 132167, 
-    132176, 132185, 132194, 132205, 132215, 132225, 132238, 132248, 132261, 
-    132268, 132278, 132285, 132292, 132299, 132306, 132313, 132320, 132329, 
-    132338, 132347, 132356, 132365, 132374, 132383, 132392, 132400, 132408, 
-    132415, 132425, 132434, 132442, 132449, 132459, 132468, 132472, 132476, 
-    132480, 132484, 132488, 132492, 132496, 132500, 132504, 132508, 132511, 
-    132515, 132518, 132521, 132525, 132529, 132533, 132537, 132541, 132545, 
-    132549, 132553, 132557, 132561, 132565, 132569, 132573, 132577, 132581, 
-    132585, 132589, 132593, 132597, 132601, 132605, 132609, 132613, 132617, 
-    132621, 132625, 132629, 132633, 132637, 132641, 132645, 132649, 132653, 
-    132657, 132661, 132665, 132669, 132673, 132677, 132681, 132685, 132689, 
-    132693, 132697, 132701, 132705, 132709, 132713, 132717, 132721, 132725, 
-    132729, 132733, 132737, 132741, 132745, 132749, 132753, 132757, 132761, 
-    132765, 132769, 132773, 132777, 132781, 132785, 132789, 132793, 132797, 
-    132801, 132805, 132809, 132813, 132817, 132821, 132825, 132829, 132833, 
-    132837, 132841, 132845, 132849, 132853, 132857, 132861, 132864, 132868, 
-    132872, 132876, 132880, 132884, 132888, 132892, 132896, 132900, 132904, 
-    132908, 132912, 132916, 132920, 132924, 132928, 132932, 132936, 132940, 
-    132944, 132948, 132952, 132956, 132960, 132964, 132968, 132972, 132976, 
-    132980, 132984, 132988, 132992, 132996, 133000, 133004, 133008, 133012, 
-    133016, 133020, 133024, 133028, 133032, 133036, 133040, 133044, 133048, 
-    133052, 133056, 133060, 133064, 133068, 133072, 133076, 133080, 133084, 
-    133088, 133092, 133096, 133100, 133104, 133108, 133112, 133116, 133120, 
-    133124, 133128, 133132, 133136, 133140, 133144, 133148, 133152, 133156, 
-    133160, 133164, 133168, 133172, 133176, 133180, 133184, 133188, 133192, 
-    133196, 133200, 133204, 133208, 133212, 133216, 133220, 133224, 133228, 
-    133232, 133236, 133240, 133244, 133248, 133252, 133256, 133260, 133264, 
-    133268, 133272, 133276, 133280, 133284, 133288, 133292, 133296, 133300, 
-    133304, 133308, 133312, 133316, 133320, 133324, 133328, 133332, 133336, 
-    133340, 133344, 133348, 133352, 133356, 133360, 133364, 133368, 133372, 
-    133376, 133380, 133384, 133388, 133392, 133396, 133400, 133404, 133408, 
-    133412, 133416, 133420, 133424, 133428, 133432, 133436, 133440, 133444, 
-    133448, 133452, 133456, 133460, 133464, 133468, 133472, 133476, 133480, 
-    133484, 133488, 133492, 133496, 133500, 133504, 133508, 133512, 133516, 
-    133520, 133524, 133528, 133532, 133536, 133540, 133544, 133548, 133552, 
-    133556, 133560, 133564, 133568, 133572, 133576, 133580, 133584, 133588, 
-    133592, 133596, 133600, 133604, 133608, 133612, 133616, 133620, 133624, 
-    133628, 133633, 133638, 133643, 133647, 133653, 133660, 133667, 133674, 
-    133681, 133688, 133695, 133702, 133709, 133716, 133723, 133730, 133737, 
-    133744, 133750, 133757, 133764, 133770, 133777, 133784, 133791, 133798, 
-    133805, 133812, 133819, 133826, 133833, 133840, 133847, 133854, 133861, 
-    133867, 133873, 133880, 133887, 133896, 133905, 133914, 133923, 133928, 
-    133933, 133939, 133945, 133951, 133957, 133963, 133969, 133975, 133981, 
-    133987, 133993, 133999, 134005, 134010, 134016, 134026, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 };
 
 /* name->code dictionary */
 static unsigned int code_hash[] = {
     74224, 4851, 0, 78156, 78499, 128685, 7929, 0, 194682, 127766, 78500, 
-    66480, 0, 42833, 74529, 12064, 0, 596, 983812, 69850, 13192, 8651, 0, 0, 
+    66480, 0, 42833, 74529, 12064, 0, 596, 983821, 69850, 13192, 8651, 0, 0, 
     120218, 12995, 64865, 1373, 0, 0, 5816, 119067, 64810, 4231, 6825, 42897, 
     4233, 4234, 4232, 917836, 74415, 120210, 6384, 917840, 78108, 8851, 0, 
-    128553, 0, 41601, 8874, 983774, 7748, 0, 0, 0, 127939, 41603, 9784, 0, 
+    128553, 0, 41601, 8874, 983783, 7748, 0, 0, 0, 127939, 41603, 9784, 0, 
     9188, 41600, 0, 120618, 128343, 1457, 3535, 0, 0, 0, 0, 65240, 11951, 0, 
     3404, 0, 0, 0, 1759, 0, 41076, 68383, 120572, 119205, 66577, 94014, 
-    127764, 65859, 0, 7404, 0, 0, 0, 0, 65908, 9834, 3055, 9852, 983851, 
+    127764, 65859, 0, 7404, 0, 0, 0, 0, 65908, 9834, 3055, 9852, 983860, 
     65288, 0, 11398, 0, 92417, 119255, 0, 0, 603, 74398, 43548, 0, 0, 917824, 
     3350, 120817, 64318, 917828, 127089, 3390, 74483, 43265, 120599, 917830, 
     78573, 0, 1919, 3400, 120651, 127944, 11647, 917540, 66446, 64141, 8562, 
-    2121, 64138, 4043, 8712, 64134, 64133, 11297, 983679, 983152, 11966, 
-    64128, 128587, 0, 0, 64132, 10867, 64130, 64129, 983835, 43374, 9779, 
+    2121, 64138, 4043, 8712, 64134, 64133, 11297, 983688, 983152, 11966, 
+    64128, 128587, 0, 0, 64132, 10867, 64130, 64129, 983844, 43374, 9779, 
     2764, 66002, 10167, 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 93981, 65282, 
-    2843, 5355, 127928, 983956, 0, 5194, 11657, 43984, 128292, 0, 983620, 0, 
+    2843, 5355, 127928, 983965, 0, 5194, 11657, 43984, 128292, 0, 983620, 0, 
     0, 127027, 10717, 64570, 5630, 5396, 64143, 10682, 0, 10602, 800, 42499, 
     66186, 0, 0, 64930, 11631, 64146, 64145, 64144, 762, 13172, 118859, 
     194661, 64468, 10906, 1353, 6960, 0, 0, 5828, 8724, 917806, 8933, 1601, 
     42244, 858, 7080, 64109, 64108, 8090, 0, 74401, 917811, 587, 0, 128131, 
-    0, 0, 0, 78214, 2750, 74218, 556, 64158, 64157, 983940, 12213, 194678, 
+    0, 0, 0, 78214, 2750, 74218, 556, 64158, 64157, 983949, 12213, 194678, 
     2760, 0, 0, 0, 194794, 64156, 64155, 42496, 0, 64151, 64150, 12679, 
     10053, 10421, 11093, 64153, 64152, 0, 0, 4839, 0, 0, 1874, 119016, 0, 
     6577, 64125, 64124, 64123, 0, 127531, 92534, 7007, 7590, 65443, 9036, 
@@ -17116,12 +17133,12 @@
     64102, 7859, 1945, 64099, 0, 10453, 64104, 7188, 7997, 0, 7389, 983161, 
     8705, 64097, 64096, 9571, 528, 128671, 44017, 11429, 71347, 0, 983077, 
     917990, 73841, 0, 0, 9056, 64313, 6188, 120019, 6155, 64068, 1823, 64066, 
-    64065, 64072, 64071, 63, 7233, 92212, 0, 41904, 6639, 64064, 983766, 
-    128344, 0, 1176, 118959, 127930, 8162, 128667, 983822, 0, 120519, 66376, 
+    64065, 64072, 64071, 63, 7233, 92212, 0, 41904, 6639, 64064, 983775, 
+    128344, 0, 1176, 118959, 127930, 8162, 128667, 983831, 0, 120519, 66376, 
     66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, 
-    69902, 7768, 0, 4199, 64708, 983414, 0, 0, 8708, 9560, 64077, 64076, 
+    69902, 7768, 0, 4199, 64708, 983421, 0, 0, 8708, 9560, 64077, 64076, 
     8996, 4992, 4471, 42622, 64079, 64078, 92179, 0, 126570, 0, 64615, 41915, 
-    0, 12075, 70062, 0, 5174, 983216, 0, 127557, 3123, 0, 12685, 127904, 
+    0, 12075, 70062, 0, 5174, 983217, 0, 127557, 3123, 0, 12685, 127904, 
     8408, 64704, 0, 0, 9223, 0, 41616, 67999, 73797, 0, 1116, 128204, 43049, 
     7136, 43050, 8548, 120485, 0, 119061, 917999, 0, 13115, 43675, 64091, 
     9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0, 
@@ -17129,10 +17146,10 @@
     9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, 127881, 298, 0, 128114, 
     0, 42627, 0, 32, 6187, 119052, 11495, 11459, 3665, 983600, 42871, 0, 
     19923, 74335, 0, 127192, 66239, 42264, 64403, 4412, 7240, 92495, 0, 
-    983459, 65758, 12750, 4181, 8544, 0, 120199, 917897, 120198, 69809, 6181, 
+    983466, 65758, 12750, 4181, 8544, 0, 120199, 917897, 120198, 69809, 6181, 
     65014, 0, 0, 983196, 3639, 119588, 0, 0, 118904, 10073, 120206, 128862, 
     127186, 68409, 42844, 7498, 1098, 92565, 120205, 0, 983118, 10207, 8789, 
-    983224, 0, 0, 983465, 9234, 0, 6182, 983467, 65058, 0, 983471, 983468, 0, 
+    983225, 0, 0, 983472, 9234, 0, 6182, 983474, 65058, 0, 983478, 983475, 0, 
     5471, 9461, 5573, 118936, 5473, 44, 0, 66244, 94072, 0, 66238, 12844, 0, 
     1622, 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 0, 64405, 41337, 0, 
     41631, 8947, 68390, 127844, 41694, 0, 0, 7908, 0, 10408, 6579, 0, 64618, 
@@ -17140,10 +17157,10 @@
     9992, 128299, 5057, 0, 0, 74538, 5054, 118951, 194971, 78606, 0, 1437, 
     41617, 658, 3497, 128509, 7486, 5061, 5060, 4235, 127878, 0, 128529, 
     12113, 4236, 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 128134, 0, 
-    41619, 10239, 68611, 0, 66209, 0, 128700, 9748, 983947, 127524, 0, 0, 0, 
-    0, 195083, 0, 983834, 0, 0, 0, 0, 0, 9341, 119596, 2379, 11325, 0, 64668, 
-    67854, 8125, 120545, 6743, 119175, 917940, 2369, 0, 983963, 983964, 
-    119235, 74092, 73936, 7008, 43660, 0, 0, 0, 2367, 127827, 983848, 264, 
+    41619, 10239, 68611, 0, 66209, 0, 128700, 9748, 983956, 127524, 0, 0, 0, 
+    0, 195083, 0, 983843, 0, 0, 0, 0, 0, 9341, 119596, 2379, 11325, 0, 64668, 
+    67854, 8125, 120545, 6743, 119175, 917940, 2369, 0, 983972, 983973, 
+    119235, 74092, 73936, 7008, 43660, 0, 0, 0, 2367, 127827, 983857, 264, 
     2375, 8060, 6194, 119858, 1844, 119084, 0, 6019, 0, 0, 6961, 0, 118839, 
     0, 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 92333, 725, 
     65042, 118797, 120800, 983040, 12892, 0, 0, 0, 0, 0, 0, 127261, 120707, 
@@ -17161,634 +17178,634 @@
     126503, 41607, 120115, 1679, 120116, 120180, 120113, 127462, 7005, 41609, 
     9580, 0, 401, 69949, 43779, 6968, 5761, 342, 8553, 0, 8143, 127115, 
     11983, 92249, 624, 74508, 4057, 43788, 5078, 74258, 12478, 0, 5076, 0, 
-    194609, 0, 120097, 685, 9025, 1524, 12618, 0, 5539, 0, 92523, 120102, 
-    7138, 120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080, 64775, 
-    5036, 5035, 120590, 42604, 983647, 0, 8074, 275, 13291, 1907, 78838, 
-    4432, 127271, 5033, 127273, 127272, 4836, 3888, 73792, 10729, 64546, 
-    127262, 43704, 127264, 127251, 67588, 119000, 127252, 127255, 8858, 6409, 
-    127256, 120252, 128100, 0, 0, 66321, 0, 12814, 127248, 3432, 10218, 0, 
-    6094, 7641, 42445, 0, 92487, 42406, 1676, 74320, 194607, 983177, 5030, 0, 
-    0, 0, 73869, 9622, 0, 69944, 6787, 0, 0, 0, 983583, 10544, 12919, 0, 
-    92218, 0, 0, 69906, 120789, 0, 947, 119835, 194586, 194585, 10969, 
-    119935, 7613, 92562, 119936, 4795, 119930, 7018, 7376, 120181, 120192, 
-    120268, 0, 43567, 74056, 917910, 11833, 119919, 7216, 65232, 7217, 251, 
-    7218, 7895, 4395, 43538, 119926, 119929, 119928, 7213, 119922, 7214, 
-    7215, 983827, 74141, 8880, 7685, 66459, 120173, 65540, 119618, 625, 8187, 
-    42861, 1113, 7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, 10980, 
-    2489, 65624, 8150, 1359, 67652, 127329, 127330, 73756, 5042, 5041, 42769, 
-    12084, 127324, 127321, 92279, 127319, 127320, 127317, 127318, 127315, 
-    12283, 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0, 
-    3239, 127311, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 6826, 73773, 119073, 
-    5040, 0, 0, 983436, 78420, 0, 5039, 0, 78418, 0, 5038, 0, 0, 13184, 
-    74293, 0, 64648, 0, 9359, 78416, 0, 128770, 65157, 6662, 0, 0, 3863, 
-    73909, 4835, 55266, 43432, 127822, 4309, 7127, 194569, 0, 194568, 1301, 
-    0, 42589, 569, 0, 73813, 711, 4389, 7133, 0, 73880, 11610, 11368, 0, 
-    194570, 41331, 1006, 74240, 0, 1550, 8201, 73737, 7627, 5499, 5031, 
-    77908, 42738, 65784, 77907, 65267, 3758, 0, 65781, 64734, 70073, 2440, 
-    65780, 77913, 8449, 0, 5008, 983572, 2118, 0, 12121, 8255, 5512, 73875, 
-    2128, 2130, 2131, 2126, 2133, 1119, 127068, 2114, 2116, 2455, 0, 2122, 
-    2123, 2124, 2125, 127486, 8714, 983811, 2113, 0, 2115, 128177, 127907, 
-    43713, 5052, 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429, 42647, 
-    5050, 302, 388, 41115, 735, 6637, 5907, 65088, 0, 12726, 74594, 9117, 
-    983181, 12003, 5513, 6666, 5053, 74230, 5510, 78451, 0, 78447, 2470, 
-    78437, 0, 1925, 0, 92237, 74807, 0, 5048, 5047, 0, 0, 0, 92313, 0, 74497, 
-    92395, 8089, 6929, 639, 983563, 68179, 64442, 0, 92348, 4599, 41402, 
-    6674, 43397, 43294, 1476, 648, 0, 65819, 3233, 0, 41782, 6951, 94017, 
-    983967, 3530, 9750, 128317, 0, 6656, 42618, 0, 5046, 8512, 65856, 74261, 
-    8967, 0, 5045, 42026, 1916, 7986, 5044, 120556, 9006, 13128, 5043, 0, 
-    7853, 74068, 74004, 9669, 12341, 12703, 8402, 0, 119070, 917600, 41750, 
-    3586, 64508, 43148, 0, 0, 119606, 67983, 13296, 517, 0, 128534, 194946, 
-    41528, 123, 65454, 0, 0, 74478, 10531, 7784, 41526, 10829, 73991, 8057, 
-    1126, 73895, 0, 194591, 0, 3925, 4251, 8069, 10517, 120439, 489, 0, 4250, 
-    120441, 120452, 43151, 983178, 194851, 66200, 0, 0, 0, 78423, 0, 0, 8711, 
-    6183, 0, 0, 0, 120448, 7623, 118925, 118889, 9235, 12760, 74176, 69662, 
-    66445, 43540, 10062, 3743, 11514, 11078, 0, 12136, 0, 126597, 120435, 0, 
-    7726, 0, 19922, 267, 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 
-    41074, 4266, 10652, 41612, 41077, 3402, 9050, 3398, 0, 983341, 0, 3391, 
-    41075, 2476, 0, 128017, 0, 10625, 0, 12767, 13017, 78743, 64261, 64934, 
-    127537, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 983335, 0, 983871, 
-    126638, 9053, 13015, 74523, 0, 704, 66215, 6195, 983819, 6660, 78758, 
-    917760, 917793, 42212, 12629, 11435, 0, 55256, 65538, 0, 127940, 983334, 
-    74547, 126585, 65448, 78100, 12948, 119001, 195002, 119238, 195004, 
-    78099, 127085, 0, 128320, 4287, 8276, 4902, 1131, 0, 78458, 66728, 1816, 
-    0, 42533, 168, 42845, 4898, 64298, 983141, 0, 4901, 1821, 0, 578, 3653, 
-    0, 791, 9162, 6977, 0, 78889, 74561, 0, 73731, 8354, 43590, 119303, 
-    983442, 7557, 119339, 119301, 8234, 7241, 0, 120671, 119167, 194996, 
-    12811, 65925, 3946, 78078, 10998, 78080, 673, 194867, 64397, 128276, 
-    74599, 78449, 8890, 194977, 194976, 2448, 78085, 10267, 8424, 2452, 
-    78083, 128824, 8729, 78456, 0, 7845, 917917, 71302, 4408, 4122, 6772, 
-    11039, 8723, 194990, 71310, 119302, 731, 119304, 92286, 2438, 64855, 
-    119300, 119299, 1175, 0, 42135, 373, 119172, 2119, 11457, 11521, 7723, 0, 
-    0, 0, 41952, 0, 5273, 2127, 5269, 6337, 5202, 2404, 5267, 42823, 11291, 
-    19915, 5277, 12963, 127864, 6189, 4125, 1314, 12133, 120340, 118873, 
-    1271, 983631, 0, 66024, 41482, 3864, 74539, 0, 3879, 0, 12978, 4166, 
-    4574, 0, 7567, 7459, 983160, 41390, 5384, 41882, 67647, 92548, 5759, 
-    983903, 0, 41388, 64446, 41392, 64288, 41387, 0, 8706, 5552, 983187, 700, 
-    0, 5553, 0, 7088, 5356, 7499, 68007, 66596, 74066, 0, 10263, 5554, 0, 
-    12344, 10311, 78113, 6665, 92626, 0, 7618, 8517, 11455, 78440, 64632, 
-    64447, 5555, 78088, 78093, 78091, 0, 42803, 65033, 9143, 6668, 195067, 
-    67995, 195069, 656, 195071, 65037, 4577, 64624, 0, 0, 0, 983640, 4269, 
-    73885, 917775, 42846, 69644, 950, 0, 92273, 66580, 118895, 66683, 10554, 
-    917778, 119121, 0, 5098, 917770, 0, 119099, 5097, 4935, 9848, 10381, 0, 
-    128870, 983692, 3651, 0, 120730, 127556, 5102, 5101, 10269, 12983, 8138, 
-    4517, 1932, 5100, 1439, 12093, 1247, 10034, 195064, 5099, 78373, 1441, 
-    42087, 3063, 650, 0, 7838, 0, 195041, 195040, 119142, 9031, 120790, 
-    128582, 9078, 8545, 66356, 128799, 0, 9154, 9118, 126543, 0, 2676, 2277, 
-    0, 73812, 6190, 8599, 195053, 69918, 10795, 9857, 7014, 9856, 195033, 
-    92620, 12129, 0, 8481, 0, 6202, 195035, 10920, 128237, 5203, 195039, 
-    195038, 5108, 5107, 65818, 66019, 9762, 0, 5541, 74772, 0, 12613, 5284, 
-    6657, 207, 128806, 4275, 74819, 854, 68147, 74381, 0, 78786, 5103, 
-    127861, 64348, 41368, 43974, 488, 69811, 0, 71339, 10157, 0, 43034, 
-    11438, 64674, 0, 92694, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 
-    41367, 5105, 127509, 69720, 6476, 5104, 983740, 304, 3176, 119010, 0, 
-    932, 120633, 6567, 238, 69656, 195011, 194595, 19905, 120577, 195015, 
-    78870, 41044, 67640, 194902, 42055, 9912, 65939, 10670, 74093, 13273, 0, 
-    12552, 195019, 8803, 309, 6622, 8151, 10858, 78706, 67636, 0, 12568, 0, 
-    12553, 10814, 43275, 6950, 9712, 68680, 43970, 983198, 65165, 92725, 0, 
-    66466, 0, 0, 0, 66725, 6191, 11351, 10437, 11316, 67634, 43763, 0, 41754, 
-    67635, 9370, 2720, 194975, 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 
-    0, 0, 10834, 0, 0, 65732, 94095, 917547, 92682, 67679, 195020, 0, 7781, 
-    41383, 64568, 0, 120738, 12077, 0, 64586, 917620, 42396, 55255, 3475, 
-    128035, 2479, 0, 3632, 120728, 10698, 8376, 3648, 194960, 74844, 67639, 
-    3636, 67894, 3650, 8837, 65229, 1843, 42283, 43250, 41562, 9100, 74548, 
-    917630, 3640, 127190, 42321, 7284, 194974, 194973, 194950, 194949, 
-    194952, 194951, 126649, 194953, 42080, 2529, 0, 0, 0, 42083, 120678, 
-    68398, 194957, 67619, 66367, 194958, 9634, 92380, 9988, 0, 41068, 0, 
-    4295, 65264, 68006, 0, 92545, 0, 785, 8236, 128647, 9027, 68160, 67623, 
-    64383, 120265, 925, 127156, 0, 41985, 41071, 9586, 0, 41984, 9217, 0, 0, 
-    0, 9186, 2067, 4016, 983794, 0, 381, 12936, 0, 42077, 0, 69880, 5184, 
-    42078, 194947, 10810, 128531, 4585, 19943, 5860, 67633, 0, 0, 812, 3615, 
-    0, 5178, 44000, 120548, 78807, 5188, 74287, 67629, 3605, 10692, 1166, 
-    64429, 42639, 924, 0, 67631, 42616, 120670, 2442, 10703, 78789, 67632, 
-    917924, 12771, 12736, 12753, 66708, 73933, 67626, 42401, 0, 69872, 
-    127373, 42288, 12751, 0, 8542, 13145, 194963, 2468, 66706, 41294, 3626, 
-    3883, 64388, 42479, 0, 41117, 0, 92580, 0, 0, 67624, 0, 1290, 0, 65585, 
-    2715, 806, 65208, 41884, 917883, 1318, 64731, 126578, 0, 0, 66325, 3465, 
-    2405, 9240, 0, 12756, 65259, 0, 983772, 12752, 5833, 1432, 0, 41883, 
-    73912, 9799, 0, 41886, 2480, 0, 2062, 127293, 6494, 5537, 78656, 0, 
-    194587, 0, 1211, 0, 0, 0, 118832, 12318, 0, 0, 68005, 10622, 983770, 0, 
-    78654, 6566, 78659, 0, 73780, 119196, 64864, 0, 78660, 0, 8284, 13081, 0, 
-    3589, 42051, 4035, 6492, 92236, 4265, 6642, 3977, 74186, 41778, 836, 
-    119216, 2488, 0, 4582, 0, 0, 41777, 12926, 983370, 7528, 10550, 0, 92706, 
-    0, 10961, 0, 1374, 64878, 119014, 0, 42389, 41374, 2286, 0, 78492, 41377, 
-    127909, 0, 400, 12597, 120586, 0, 0, 6661, 983145, 64827, 0, 73817, 390, 
-    0, 71301, 983853, 3473, 7718, 0, 0, 0, 55285, 0, 0, 0, 11969, 983383, 
-    127841, 6365, 1887, 6763, 983363, 8080, 7006, 0, 983364, 6757, 64351, 
-    1544, 0, 6766, 64677, 120716, 983365, 6146, 0, 771, 983366, 0, 12812, 
-    13168, 42272, 12200, 917927, 7904, 0, 953, 12917, 119560, 12300, 0, 
-    11491, 9724, 10341, 983764, 9524, 7490, 11389, 7489, 3379, 0, 7487, 0, 
-    471, 7484, 7482, 6753, 7480, 5764, 7478, 7477, 6501, 7475, 6918, 7473, 
-    7472, 2474, 7470, 7468, 10232, 10615, 10213, 127288, 92357, 10049, 11834, 
-    3544, 0, 6017, 65311, 127481, 120216, 13306, 10533, 7870, 73949, 7625, 0, 
-    120544, 0, 0, 92660, 0, 0, 0, 19961, 2472, 42665, 92341, 0, 2139, 4256, 
-    120776, 74380, 0, 42675, 42658, 12845, 0, 0, 65138, 119355, 67862, 0, 
-    65671, 7083, 120008, 8066, 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 
-    445, 120566, 128308, 0, 0, 8330, 0, 0, 42797, 983150, 120215, 0, 3902, 0, 
-    1770, 0, 128866, 1560, 120209, 194972, 4584, 73843, 0, 11712, 10866, 
-    118928, 1118, 71334, 0, 0, 1081, 7436, 68420, 7252, 0, 5996, 69921, 4903, 
-    0, 41386, 5162, 119189, 1330, 0, 7139, 0, 12047, 41384, 0, 0, 1848, 4334, 
-    6324, 41975, 64777, 10674, 12308, 12186, 0, 0, 983732, 12715, 68002, 
-    983472, 126630, 2018, 66672, 41979, 66685, 119157, 68000, 92464, 0, 
-    126984, 68001, 9334, 92705, 92315, 70101, 7975, 0, 77957, 0, 66621, 4884, 
-    66597, 69732, 0, 0, 6313, 65513, 69857, 0, 0, 0, 2345, 43697, 463, 0, 0, 
-    119607, 3117, 5460, 0, 0, 983380, 0, 42279, 194577, 0, 78415, 0, 195008, 
-    983377, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 0, 0, 2482, 1471, 0, 0, 
-    42247, 12378, 73925, 69664, 0, 12374, 0, 0, 0, 983685, 2460, 0, 11944, 
-    12376, 127868, 64679, 0, 12380, 10557, 64473, 5870, 0, 2024, 127180, 0, 
-    0, 539, 0, 127765, 94052, 3853, 65180, 127923, 120796, 120245, 92324, 0, 
-    8659, 0, 12474, 92579, 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 
-    69633, 120089, 12470, 0, 74189, 2742, 12476, 11798, 10946, 127310, 5000, 
-    0, 983579, 0, 69672, 8213, 74017, 7771, 6161, 68018, 6709, 0, 78885, 
-    983699, 127971, 120582, 78547, 0, 10301, 10333, 10397, 0, 0, 73791, 0, 0, 
-    0, 0, 119123, 4014, 12842, 73952, 12015, 127290, 8275, 3893, 983257, 0, 
-    12210, 7221, 42147, 0, 74550, 74465, 64747, 118841, 0, 12516, 4444, 0, 
-    92271, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, 3591, 41969, 0, 
-    2453, 128549, 92666, 64705, 0, 0, 10349, 10413, 43591, 41962, 3202, 
-    74353, 0, 8316, 0, 0, 94060, 687, 0, 0, 0, 1840, 0, 68671, 119809, 4883, 
-    285, 4723, 70099, 92692, 4459, 74577, 42921, 41720, 11089, 240, 19906, 0, 
-    42323, 0, 9743, 120232, 13134, 126535, 0, 0, 0, 0, 42634, 983336, 43437, 
-    3081, 11463, 120154, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, 1729, 
-    0, 120236, 65221, 63883, 43334, 64852, 0, 65194, 66201, 0, 66578, 5001, 
-    41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, 
-    127915, 643, 3086, 0, 42448, 42299, 58, 0, 917952, 120083, 63873, 8491, 
-    0, 0, 0, 4530, 42409, 7126, 194575, 2721, 120074, 119096, 19929, 0, 
-    194574, 0, 4242, 4264, 120077, 120530, 66179, 42412, 65941, 13114, 64522, 
-    10740, 3094, 0, 9754, 119102, 4437, 73948, 127074, 983233, 55280, 42174, 
-    194925, 42430, 0, 0, 42355, 66026, 4306, 41380, 68432, 92586, 0, 66667, 
-    127309, 0, 126521, 42200, 42566, 0, 0, 5088, 6948, 0, 8524, 0, 0, 12385, 
-    0, 0, 69646, 1386, 64580, 11480, 6116, 65039, 65038, 12392, 65036, 8064, 
-    0, 12101, 5822, 119004, 2080, 710, 77999, 11663, 1666, 42091, 119657, 
-    12383, 43671, 42092, 68418, 4289, 0, 63896, 12061, 42096, 43621, 3362, 
-    12377, 983823, 983825, 68449, 7461, 73901, 1244, 331, 73786, 12683, 
-    10662, 0, 8112, 0, 65852, 0, 12379, 194877, 120818, 41964, 42208, 63843, 
-    2084, 41965, 0, 65866, 4327, 0, 63840, 78549, 41220, 13032, 0, 584, 
-    12933, 43177, 12373, 69855, 13000, 1351, 2935, 8698, 12665, 0, 1930, 0, 
-    78229, 12427, 66514, 69859, 13031, 0, 63901, 0, 3657, 128572, 65202, 
-    6000, 119206, 12426, 127181, 0, 41740, 12428, 41283, 41916, 119210, 0, 0, 
-    12429, 6727, 0, 7562, 0, 5170, 0, 41755, 676, 0, 66704, 66664, 9978, 
-    66491, 3536, 0, 9752, 92397, 6162, 0, 69228, 10113, 41829, 65886, 5159, 
-    12422, 41832, 439, 43077, 0, 42207, 74549, 11796, 40970, 41830, 0, 
-    917799, 8308, 917797, 917796, 0, 67864, 917801, 917800, 12336, 4135, 
-    69805, 341, 2727, 4129, 3539, 0, 63861, 0, 7913, 0, 63859, 4131, 63868, 
-    0, 63867, 4133, 11371, 210, 4600, 0, 74560, 4137, 8082, 78506, 119062, 
-    78504, 6704, 4591, 128029, 0, 0, 9680, 0, 120623, 561, 12159, 195, 78508, 
-    41501, 0, 42031, 5719, 7172, 42687, 8368, 0, 41499, 0, 0, 42242, 41498, 
-    917794, 42025, 78565, 65805, 42463, 0, 2924, 0, 120510, 0, 0, 119213, 
-    73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, 7246, 
-    42086, 126615, 2219, 0, 0, 128801, 194837, 0, 327, 0, 9042, 917777, 
-    917776, 65148, 12433, 917781, 127276, 917779, 12431, 8668, 12434, 983826, 
-    917782, 5999, 0, 7712, 12432, 128243, 43653, 1726, 1015, 0, 8212, 0, 
-    128014, 42423, 119066, 0, 128108, 66709, 0, 8811, 927, 0, 0, 12436, 
-    983240, 42021, 0, 0, 1299, 12240, 42350, 65143, 0, 195016, 0, 78197, 
-    11348, 0, 78037, 9194, 983184, 0, 19914, 12179, 983803, 2296, 194923, 
-    63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 64651, 0, 41503, 
-    127478, 11265, 0, 120756, 194922, 0, 5664, 3972, 0, 0, 0, 128508, 12416, 
-    917764, 119608, 10816, 917769, 917768, 12418, 74111, 3882, 8532, 917771, 
-    1573, 128648, 119847, 4596, 66339, 12417, 66001, 65343, 126491, 12414, 
-    8287, 68219, 195017, 68108, 1143, 119169, 119846, 12415, 6626, 42763, 0, 
-    118884, 9021, 120783, 0, 11724, 0, 0, 127104, 126619, 0, 0, 8027, 10997, 
-    9171, 12741, 11400, 71305, 194799, 0, 128239, 0, 128881, 119604, 127523, 
-    120190, 194773, 67608, 128214, 42368, 0, 7715, 3881, 41487, 12118, 42514, 
-    68651, 0, 983886, 3009, 41476, 41489, 69825, 3007, 1448, 3018, 194809, 
-    3889, 8521, 5083, 5082, 119859, 120184, 8519, 983236, 3014, 5081, 65853, 
-    120715, 0, 68014, 69951, 5079, 64802, 42210, 4597, 65532, 11828, 120185, 
-    12371, 0, 8407, 0, 10805, 8518, 10779, 120188, 71303, 983924, 12367, 
-    42170, 0, 92557, 629, 1924, 0, 12037, 74366, 5987, 8462, 8005, 12365, 
-    63933, 69735, 120815, 12369, 10649, 67981, 5077, 120174, 10880, 63927, 
-    5075, 917881, 0, 65075, 0, 11007, 983696, 66659, 92607, 0, 66684, 0, 
-    3434, 4954, 1904, 0, 5266, 126980, 5272, 10499, 4507, 9578, 63923, 
-    120177, 7979, 0, 9831, 0, 194926, 461, 9803, 0, 4504, 1505, 0, 6325, 
-    5276, 43021, 120488, 0, 55236, 0, 66461, 5177, 41324, 12055, 8722, 0, 
-    41327, 0, 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108, 
-    71311, 0, 119185, 42229, 194912, 0, 5998, 0, 42353, 74825, 0, 12587, 
-    94104, 78571, 0, 71328, 194562, 41576, 42215, 78570, 119207, 0, 8578, 
-    5995, 7573, 41575, 74789, 74752, 63944, 63949, 64767, 2670, 4167, 194796, 
-    11723, 0, 74120, 0, 65076, 938, 43414, 73854, 11737, 9721, 0, 0, 0, 
-    11742, 2419, 0, 11493, 12334, 194913, 4153, 12302, 10793, 5250, 12407, 
-    11978, 4404, 9189, 12401, 42007, 5775, 6759, 65806, 43997, 0, 42002, 
-    12404, 983553, 0, 4940, 12410, 7683, 1167, 73729, 4983, 120507, 861, 0, 
-    0, 0, 0, 43757, 43370, 0, 0, 11956, 0, 0, 0, 9616, 6631, 0, 12816, 43759, 
-    42218, 12710, 68674, 12721, 4101, 66185, 0, 5992, 7616, 195044, 0, 12577, 
-    0, 983875, 853, 42693, 195014, 0, 983638, 5016, 43535, 63893, 42835, 
-    9491, 917913, 0, 917914, 0, 12712, 7105, 127807, 65060, 120797, 9900, 
-    7750, 0, 194919, 0, 127830, 0, 64778, 12585, 10565, 128151, 12177, 0, 0, 
-    0, 77824, 0, 4900, 127874, 12878, 92630, 8984, 4119, 74768, 8971, 78593, 
-    43113, 9702, 78594, 11025, 9245, 13048, 4927, 4138, 74185, 92481, 92710, 
-    12397, 77827, 0, 13054, 12394, 0, 0, 0, 13053, 0, 3948, 10781, 1546, 0, 
-    5010, 1680, 10507, 78590, 78583, 0, 0, 0, 194915, 7267, 0, 74833, 128181, 
-    5993, 2819, 0, 12706, 77840, 1893, 7266, 63915, 7264, 7265, 0, 1363, 0, 
-    63997, 63910, 63996, 3077, 0, 0, 1512, 69929, 12589, 41479, 128313, 0, 
-    43339, 0, 9836, 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, 817, 
-    1664, 1850, 128841, 3079, 11340, 42408, 42447, 127140, 120020, 42307, 
-    12386, 42304, 917555, 0, 12389, 0, 92366, 41996, 11526, 63985, 5864, 
-    1147, 63992, 42887, 1987, 92718, 5480, 7858, 11653, 4116, 12391, 66193, 
-    0, 4939, 12384, 0, 0, 41686, 63905, 119601, 194688, 983190, 0, 12649, 0, 
-    0, 8247, 507, 91, 2042, 120775, 43643, 194689, 66028, 10036, 41844, 
-    119813, 774, 119829, 0, 119815, 5994, 12539, 0, 78375, 120597, 119833, 
-    983105, 119600, 0, 0, 7719, 6026, 2486, 128312, 119808, 162, 0, 65219, 
-    41073, 9687, 41681, 6304, 119812, 66196, 194881, 5262, 0, 55233, 12681, 
-    42379, 0, 7534, 12219, 0, 127528, 42810, 10492, 0, 983652, 0, 43119, 0, 
-    120753, 12403, 2500, 195013, 0, 4899, 12729, 0, 0, 74113, 2343, 4103, 
-    19946, 74112, 77851, 13112, 0, 195012, 12859, 70087, 120148, 66369, 5861, 
-    127758, 11999, 12400, 0, 983830, 12645, 5146, 11320, 68410, 6748, 65040, 
-    0, 64184, 12974, 64183, 67613, 120645, 5147, 0, 0, 74524, 0, 1928, 0, 
-    67649, 5991, 3445, 67609, 4976, 64176, 0, 67610, 8241, 0, 77868, 4206, 0, 
-    0, 0, 128298, 0, 10138, 0, 0, 8897, 120234, 0, 8357, 4124, 77862, 65836, 
-    120641, 127926, 77859, 0, 0, 1123, 963, 41553, 10120, 12405, 120150, 
-    92664, 398, 13278, 9723, 6366, 120311, 7945, 0, 4402, 9970, 12402, 
-    983136, 42392, 1305, 12408, 0, 44007, 0, 0, 41464, 12411, 12969, 120824, 
-    41465, 983565, 8528, 1575, 0, 63955, 165, 3024, 41467, 119163, 0, 9093, 
-    0, 9147, 128787, 63958, 0, 9148, 9692, 4096, 53, 73776, 6750, 195018, 0, 
-    9594, 0, 0, 43527, 0, 727, 194703, 195023, 5805, 0, 6726, 0, 42176, 
-    12370, 11655, 119095, 10591, 2280, 0, 12372, 120642, 120307, 0, 92343, 0, 
-    12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 194701, 10803, 4132, 
-    120306, 68474, 92473, 0, 983306, 74837, 120155, 1499, 0, 8055, 42740, 
-    63965, 0, 63962, 74042, 8924, 43123, 5988, 3660, 63969, 11781, 42718, 
-    8788, 1357, 64851, 65743, 0, 8774, 0, 127086, 9941, 120172, 0, 1933, 
-    69655, 9564, 0, 92435, 73866, 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 
-    70081, 78302, 12220, 67616, 120598, 127475, 0, 68200, 6675, 128144, 0, 
-    67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, 64663, 0, 0, 4561, 
-    2101, 1398, 0, 92554, 74034, 41569, 92684, 11406, 8167, 12127, 0, 840, 0, 
-    126518, 7101, 6967, 0, 194898, 9796, 0, 333, 69891, 0, 8144, 2117, 0, 
-    983595, 12406, 0, 19931, 119089, 6678, 7769, 0, 12621, 0, 127366, 10227, 
-    4764, 43101, 9981, 0, 40986, 4127, 66487, 0, 42202, 12754, 195022, 0, 0, 
-    94097, 67594, 2048, 12944, 4050, 67595, 917967, 43102, 10581, 12985, 
-    4533, 195021, 74003, 6490, 0, 12038, 0, 0, 120704, 65461, 9798, 69704, 0, 
-    1948, 69841, 0, 952, 128235, 0, 0, 120802, 6449, 9494, 120313, 0, 43098, 
-    4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 119973, 0, 12817, 67597, 
-    6676, 3930, 42615, 0, 0, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, 
-    0, 8500, 42222, 120142, 73743, 120400, 4317, 11543, 67676, 64676, 0, 0, 
-    67606, 119083, 0, 42217, 13102, 0, 66003, 6672, 0, 0, 0, 983738, 63841, 
-    9613, 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, 10228, 
-    64957, 11281, 0, 3807, 1469, 66640, 65381, 42197, 4988, 42372, 0, 9598, 
-    904, 352, 42225, 1451, 8061, 8453, 4134, 0, 74847, 66576, 127916, 0, 
-    10520, 8575, 9960, 1201, 127289, 12846, 127291, 127292, 11919, 64962, 
-    127287, 43739, 127281, 8511, 9460, 823, 11587, 12305, 0, 64695, 127305, 
-    12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, 65761, 
-    119585, 11606, 64784, 11702, 66498, 9821, 64304, 0, 5152, 11048, 7533, 
-    68366, 64410, 92305, 0, 4323, 120062, 92669, 71332, 127052, 42587, 42214, 
-    41394, 0, 4763, 4112, 118935, 0, 5260, 43143, 94038, 326, 120131, 68423, 
-    0, 10771, 2876, 74074, 92530, 194924, 41398, 7382, 9802, 127077, 127076, 
-    453, 41396, 120524, 42720, 12140, 9572, 0, 7003, 194883, 42334, 7704, 
-    126490, 194885, 43144, 4123, 8494, 43146, 9977, 0, 0, 65759, 10765, 
-    64061, 4465, 9808, 64056, 65582, 4126, 0, 9521, 9589, 64755, 0, 64020, 
-    126604, 10464, 0, 0, 194869, 64514, 11528, 64024, 128072, 679, 64013, 0, 
-    5850, 758, 7536, 0, 92234, 41441, 10693, 64006, 983567, 64005, 4058, 
-    119019, 126487, 64660, 0, 119050, 0, 983069, 1139, 43298, 64027, 64029, 
-    8970, 0, 9934, 983094, 10774, 128020, 42201, 12421, 128216, 0, 1852, 
-    3057, 64046, 73744, 64034, 64039, 0, 0, 0, 194899, 92322, 7645, 12854, 
-    74338, 3496, 0, 0, 0, 9102, 627, 127795, 6158, 8327, 74553, 66632, 12419, 
-    13309, 11570, 127811, 19960, 11696, 0, 1018, 118970, 194909, 194897, 
-    1682, 194896, 194911, 42756, 6765, 194906, 0, 0, 73814, 11412, 6768, 
-    10728, 194830, 71316, 118863, 43311, 64966, 11577, 0, 43040, 1833, 11576, 
-    0, 74779, 0, 185, 65085, 74533, 64754, 194848, 7535, 8085, 42525, 120387, 
-    9749, 41701, 6131, 1949, 4117, 7847, 120489, 194711, 64483, 65693, 0, 0, 
-    0, 69695, 42240, 0, 126651, 42864, 126498, 64667, 41868, 1184, 0, 815, 
-    11484, 127535, 67840, 983642, 0, 66197, 0, 10986, 64683, 983776, 0, 3455, 
-    0, 0, 9879, 0, 0, 4158, 128050, 68166, 0, 0, 0, 0, 69645, 332, 118808, 0, 
-    5142, 2407, 69643, 42199, 0, 92404, 74373, 0, 55217, 0, 63870, 43163, 0, 
-    0, 92390, 42867, 1834, 0, 92461, 69817, 10940, 65249, 119040, 8662, 0, 0, 
-    2652, 120527, 7164, 10784, 195093, 67674, 0, 92233, 92482, 194749, 74562, 
-    917505, 1828, 74474, 120327, 78620, 8531, 12499, 6280, 12324, 118854, 
-    65238, 68374, 4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, 1620, 
-    64436, 3601, 195094, 128073, 983562, 609, 11555, 983099, 12496, 127839, 
-    74181, 4343, 12505, 0, 127863, 0, 11377, 239, 0, 637, 0, 0, 42671, 0, 0, 
-    0, 43565, 71306, 126493, 12696, 128256, 0, 94062, 12929, 0, 712, 0, 4197, 
-    983205, 42818, 126632, 0, 120490, 0, 119137, 1506, 43562, 0, 92491, 0, 
-    12651, 0, 64628, 74517, 12058, 74084, 917838, 7494, 0, 4924, 65592, 
-    118844, 0, 127088, 355, 9719, 127087, 13066, 64796, 0, 0, 12033, 42178, 
-    0, 69760, 42571, 92635, 0, 0, 0, 0, 0, 127176, 3178, 0, 0, 92704, 0, 
-    9080, 127000, 120352, 0, 68209, 0, 11082, 0, 5699, 195100, 66000, 9488, 
-    65166, 119112, 0, 0, 0, 0, 71313, 0, 5265, 69235, 0, 11487, 67858, 12464, 
-    0, 43045, 0, 0, 43345, 0, 10770, 118994, 6807, 465, 9829, 0, 74348, 0, 
-    43346, 8116, 795, 0, 0, 12462, 10930, 10831, 0, 118952, 64362, 74334, 
-    983602, 120811, 0, 12468, 8607, 1008, 0, 10092, 195078, 917842, 67855, 
-    55257, 73771, 1766, 11282, 11996, 1820, 4547, 0, 0, 0, 0, 13223, 128665, 
-    64595, 127294, 0, 92311, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, 5382, 0, 
-    0, 0, 119060, 64953, 5406, 19920, 69897, 66510, 3590, 194864, 1130, 0, 0, 
-    42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 71323, 9326, 73826, 5310, 
-    74812, 78584, 92229, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816, 
-    120803, 983839, 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519, 
-    127182, 0, 73917, 7843, 69783, 11689, 5410, 5783, 10468, 8403, 5400, 
-    11594, 128247, 0, 118990, 10491, 69842, 64412, 0, 0, 5587, 42865, 64404, 
-    8268, 4923, 65086, 8981, 12382, 42133, 120755, 9706, 69738, 0, 66610, 
-    10461, 12103, 0, 8642, 0, 42766, 983857, 2210, 9983, 0, 94009, 0, 0, 0, 
-    7398, 41515, 0, 11802, 8041, 1461, 910, 119133, 0, 6749, 3658, 93964, 
-    120525, 0, 7617, 194841, 12888, 127983, 67668, 13143, 0, 9193, 11097, 
-    5703, 0, 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670, 
-    10660, 5769, 613, 7543, 120279, 477, 41083, 92521, 0, 592, 1578, 12459, 
-    43449, 0, 0, 8225, 0, 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0, 
-    126472, 12480, 43243, 0, 39, 12487, 0, 120529, 74199, 12482, 0, 12489, 0, 
-    3195, 5550, 983554, 7897, 0, 1203, 74396, 1813, 64544, 41311, 12090, 0, 
-    2877, 0, 0, 1675, 69840, 0, 0, 0, 10070, 10595, 0, 119077, 194777, 
-    983611, 0, 0, 0, 43244, 0, 0, 983907, 119561, 983078, 0, 194921, 128160, 
-    9939, 0, 983151, 77860, 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 
-    74038, 119558, 6273, 66679, 364, 9595, 194908, 0, 0, 707, 0, 0, 9282, 
-    66489, 224, 0, 68670, 9332, 4966, 68677, 0, 68644, 0, 3841, 68634, 0, 
-    10732, 68640, 850, 4972, 0, 12890, 2909, 68619, 44008, 68627, 983709, 
-    11544, 10203, 9608, 0, 0, 11962, 194694, 12507, 1196, 128687, 128311, 
-    777, 120187, 4375, 65271, 67678, 0, 12198, 0, 64824, 119343, 983231, 
-    9454, 63778, 8658, 42528, 78000, 2705, 917975, 41520, 0, 0, 11986, 7765, 
-    42502, 8280, 74520, 2701, 0, 127002, 5767, 0, 0, 9809, 8353, 63747, 
-    66701, 63772, 983805, 63745, 1748, 63770, 0, 0, 0, 65542, 63766, 55244, 
-    3061, 0, 63764, 63787, 9067, 6096, 0, 7694, 0, 7257, 63768, 3485, 12987, 
-    0, 127522, 120628, 63807, 1591, 0, 6386, 63783, 0, 0, 92535, 0, 0, 0, 
-    74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, 66691, 7624, 3138, 
-    10996, 92247, 1922, 0, 12498, 10987, 69936, 69939, 3894, 65543, 0, 
-    194842, 983588, 493, 0, 43197, 1717, 4228, 479, 10303, 74020, 0, 917935, 
-    10335, 3520, 917932, 12490, 64315, 0, 127039, 12493, 6233, 42681, 1002, 
-    12491, 0, 64911, 92615, 2096, 65120, 0, 78219, 983081, 8378, 11632, 
-    127041, 66213, 63864, 66221, 66226, 66229, 13218, 66231, 66216, 8507, 
-    66236, 66211, 66218, 92672, 66240, 78041, 66233, 8928, 983552, 7909, 
-    66234, 11605, 63759, 983645, 66208, 73999, 63799, 63803, 244, 11542, 
-    12898, 12494, 73761, 12492, 12669, 0, 0, 74153, 0, 128278, 120680, 4882, 
-    13040, 0, 8612, 4885, 74053, 0, 13042, 4880, 64662, 2429, 1360, 248, 0, 
-    63797, 92394, 42358, 0, 7292, 0, 63756, 42786, 66693, 0, 1870, 78040, 
-    470, 78038, 78035, 78036, 70028, 78034, 4579, 128090, 0, 12511, 74453, 
-    12514, 0, 74579, 7239, 7001, 8623, 94011, 128052, 128048, 7378, 12512, 
-    11615, 6104, 0, 0, 659, 6098, 0, 12234, 127307, 127067, 8311, 12510, 
-    41803, 13039, 127072, 12513, 10202, 12471, 0, 8747, 983911, 0, 0, 2323, 
-    0, 2319, 77917, 12477, 77916, 2311, 0, 4415, 237, 6281, 127280, 0, 0, 
-    2309, 1312, 8173, 128871, 12469, 0, 78505, 64335, 10609, 0, 128111, 9397, 
-    11524, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, 9388, 4932, 
-    9386, 9383, 9384, 6740, 0, 65451, 8185, 0, 917832, 43024, 43336, 67659, 
-    2313, 128167, 7948, 9236, 92571, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 
-    11998, 12082, 10924, 3147, 0, 120684, 12524, 119081, 2310, 11818, 9381, 
-    9382, 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 983769, 9372, 
-    12444, 0, 0, 13016, 8210, 983949, 42029, 11079, 12331, 43451, 42032, 
-    8744, 726, 0, 983828, 4155, 0, 0, 42030, 5007, 12522, 43088, 0, 4951, 
-    127805, 127240, 0, 9922, 43309, 983832, 12525, 983464, 12016, 65770, 
-    9548, 67665, 403, 78230, 12503, 0, 0, 11030, 0, 92567, 65691, 63998, 
-    1819, 10496, 0, 0, 119920, 0, 194668, 0, 12506, 0, 12231, 0, 12500, 
-    44023, 12509, 64393, 78830, 3389, 10589, 6608, 41047, 120321, 78395, 
-    78394, 74069, 77995, 78391, 3608, 8281, 120320, 1107, 0, 9076, 8862, 
-    69743, 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 126514, 
-    8546, 11553, 63995, 13177, 9043, 6303, 983938, 498, 64471, 120324, 
-    128567, 12529, 8042, 0, 2344, 12528, 8031, 2414, 0, 69719, 3231, 0, 6422, 
-    66512, 69653, 12530, 2537, 78405, 41429, 12658, 13036, 65772, 0, 78738, 
-    41433, 4719, 469, 0, 4363, 3313, 41428, 78407, 2023, 1772, 78224, 78225, 
-    65706, 10051, 64812, 78220, 0, 9920, 12215, 0, 4931, 1951, 12497, 119363, 
-    9607, 0, 9663, 0, 119634, 6503, 41110, 0, 1491, 0, 0, 127304, 41061, 0, 
-    194838, 127187, 65026, 41993, 41509, 11045, 65028, 78602, 66476, 41108, 
-    9738, 41995, 1075, 1958, 12535, 41992, 41506, 0, 41687, 0, 120717, 
-    127776, 9940, 127299, 7692, 983824, 8008, 41131, 330, 8566, 65083, 41133, 
-    9816, 126517, 12532, 78550, 78546, 3508, 127058, 43235, 0, 127298, 64139, 
-    78231, 6411, 12910, 78554, 66644, 13028, 6737, 12537, 0, 0, 64136, 12536, 
-    2350, 13029, 78233, 0, 983103, 13030, 6702, 4527, 0, 12538, 128810, 
-    983636, 65599, 65717, 9966, 0, 4948, 12484, 4032, 128149, 12623, 0, 6207, 
-    0, 6117, 65930, 8412, 0, 7438, 1296, 2325, 41511, 126625, 10149, 74118, 
-    0, 127286, 12481, 0, 12488, 66713, 0, 41556, 64414, 118802, 2354, 42619, 
-    73766, 0, 6295, 901, 41510, 7953, 0, 65032, 41513, 983166, 11927, 66584, 
-    78559, 78560, 78557, 78558, 0, 78556, 848, 9868, 0, 6424, 78568, 119338, 
-    69922, 74031, 78563, 78564, 2352, 78572, 893, 64576, 11289, 1407, 67973, 
-    0, 13026, 6762, 78579, 78580, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 
-    1343, 983814, 0, 9325, 6818, 6283, 11738, 0, 983925, 0, 11741, 0, 0, 
-    9216, 8263, 11279, 194752, 983816, 194754, 13021, 64494, 3136, 194758, 
-    194757, 194760, 13022, 42737, 9956, 0, 0, 74552, 10014, 0, 41260, 119340, 
-    13020, 10024, 194764, 74583, 74340, 69681, 0, 43001, 8029, 0, 0, 983771, 
-    3335, 0, 0, 9776, 120526, 194748, 5215, 42644, 3333, 1632, 194751, 64849, 
-    3342, 78582, 5363, 12957, 78581, 4156, 0, 0, 6421, 78591, 1611, 78589, 
-    13018, 74257, 78588, 74542, 3337, 4537, 67895, 11736, 0, 68608, 6482, 
-    4214, 73790, 11945, 0, 13046, 8838, 425, 4025, 10709, 78595, 2108, 2392, 
-    13047, 0, 0, 6819, 13049, 6499, 92243, 12424, 68614, 73944, 13050, 9924, 
-    194745, 6507, 127919, 94073, 128069, 3277, 8929, 4947, 41055, 0, 194722, 
-    194721, 194724, 13045, 64626, 66034, 7751, 194727, 8371, 194729, 3997, 
-    12806, 8768, 13044, 0, 12420, 4024, 194730, 41054, 1078, 9757, 69736, 
-    41057, 0, 0, 0, 0, 983782, 92210, 92411, 0, 41496, 0, 9165, 1572, 11911, 
-    0, 118842, 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 5831, 0, 0, 
-    13043, 8056, 92494, 65681, 208, 127382, 41514, 0, 0, 0, 10699, 6408, 
-    92227, 7825, 5661, 0, 120630, 3603, 41109, 2398, 3548, 126596, 0, 119933, 
-    0, 3115, 9918, 0, 11321, 42912, 0, 0, 194726, 4876, 65804, 0, 0, 43468, 
-    983267, 41558, 41471, 73950, 8158, 9944, 41472, 120298, 13051, 78689, 
-    3143, 194674, 6701, 41559, 1896, 66256, 13052, 194680, 5665, 0, 119071, 
-    7025, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 
-    194686, 73924, 1121, 78319, 63959, 0, 9942, 13231, 0, 64752, 4732, 
-    194666, 11596, 119931, 65187, 1626, 63983, 10110, 64772, 42024, 6420, 
-    42028, 0, 10509, 2795, 4910, 194728, 69231, 64753, 6275, 93957, 118830, 
-    63978, 11044, 3229, 6423, 42774, 0, 0, 0, 12823, 2331, 917810, 7085, 
-    6137, 0, 7524, 0, 917809, 8346, 0, 8338, 128315, 65043, 0, 822, 127984, 
-    9903, 64721, 42722, 69877, 194659, 78655, 78661, 194660, 78662, 41265, 
-    5311, 1795, 965, 118791, 10587, 78055, 11278, 78632, 194640, 0, 12946, 
-    194641, 119341, 120349, 6294, 3144, 194648, 194647, 65019, 194649, 73990, 
-    0, 983951, 748, 41067, 2330, 535, 3148, 12375, 78799, 194629, 10556, 
-    2475, 12388, 4889, 8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 
-    194635, 4890, 194637, 917804, 581, 4893, 983616, 6571, 65545, 4888, 4157, 
-    78048, 78049, 78046, 78047, 0, 10119, 6415, 42893, 0, 69702, 0, 0, 11375, 
-    64746, 2332, 78063, 412, 78061, 64932, 42880, 43587, 0, 0, 0, 0, 65197, 
-    78066, 12203, 78064, 78065, 8913, 65854, 4875, 65811, 120381, 120389, 
-    118888, 9344, 8826, 120386, 120395, 13104, 74781, 11997, 120393, 78075, 
-    0, 3134, 0, 65696, 92331, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0, 
-    78414, 78413, 118950, 74011, 0, 0, 0, 0, 1908, 120167, 4328, 10734, 
-    127014, 0, 127914, 7804, 78272, 10811, 6250, 11339, 4914, 11367, 0, 
-    78054, 4917, 74516, 74208, 64285, 4912, 5464, 127836, 118893, 2361, 7971, 
-    78072, 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, 40977, 
-    10960, 40962, 8305, 12573, 983608, 40980, 983955, 13202, 0, 12582, 78282, 
-    983048, 69856, 42438, 55221, 6288, 78280, 127946, 5653, 42400, 10891, 
-    7698, 5658, 74045, 70039, 0, 0, 4913, 0, 983950, 71333, 42326, 128194, 
-    12728, 92685, 42478, 2327, 0, 12563, 42287, 12705, 0, 0, 12588, 8821, 
-    6153, 2867, 194708, 66312, 698, 128007, 194606, 10356, 70017, 194713, 
-    651, 12641, 0, 0, 0, 0, 41552, 65115, 78465, 78467, 78463, 78464, 128851, 
-    78461, 194697, 74356, 64945, 4716, 43277, 0, 78474, 12340, 120568, 0, 
-    194700, 55264, 41211, 120676, 8703, 5462, 917629, 983488, 10101, 0, 
-    70049, 8479, 4151, 41933, 0, 0, 66254, 120821, 0, 0, 128654, 0, 119194, 
-    74050, 92701, 0, 0, 0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 
-    0, 2699, 0, 73845, 2985, 92568, 126475, 917845, 12192, 119314, 0, 119312, 
-    9827, 119310, 119311, 119308, 119309, 119306, 11481, 41210, 119305, 0, 
-    35, 78481, 78482, 66694, 68479, 78477, 78478, 43596, 6090, 64257, 7812, 
-    10534, 0, 78485, 73848, 67975, 4272, 0, 40967, 40964, 917825, 12704, 
-    78487, 43306, 0, 64497, 12138, 7930, 0, 2292, 68216, 0, 917826, 5244, 
-    4189, 94108, 67596, 127504, 4188, 1879, 0, 968, 0, 43743, 0, 8873, 2279, 
-    0, 917827, 65555, 12574, 0, 0, 0, 74490, 127099, 43657, 0, 0, 0, 42682, 
-    12578, 12720, 0, 41227, 0, 12346, 127101, 64848, 0, 0, 7251, 0, 0, 
-    118850, 119141, 128546, 66015, 0, 959, 8885, 12564, 66457, 78808, 9469, 
-    9632, 92323, 74761, 64323, 127335, 0, 0, 0, 310, 0, 41281, 10976, 0, 
-    71325, 0, 74266, 10054, 6497, 8574, 0, 9012, 19958, 74420, 65089, 13215, 
-    12730, 65163, 74044, 374, 43195, 816, 120161, 0, 0, 41934, 7465, 0, 
-    128168, 983261, 4715, 6101, 94106, 41936, 0, 4879, 0, 65446, 0, 307, 
-    127147, 9585, 5374, 983260, 128059, 0, 0, 126618, 120390, 0, 65567, 
-    120614, 1929, 0, 12142, 0, 12236, 41419, 194618, 120610, 12982, 194623, 
-    5378, 78791, 128679, 41421, 0, 4462, 0, 126599, 128092, 821, 0, 2498, 
-    5800, 120157, 983115, 1760, 2421, 4469, 2324, 828, 3611, 78400, 757, 
-    1185, 0, 78770, 43597, 10628, 74808, 194572, 7999, 43971, 0, 0, 10634, 
-    10942, 7713, 2348, 0, 64374, 4380, 194608, 119044, 9982, 64324, 41240, 
-    862, 65626, 78462, 1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, 
-    64688, 194593, 194592, 78092, 74357, 194597, 4748, 92228, 194598, 194601, 
-    42260, 5871, 119075, 0, 74576, 44019, 0, 128189, 3967, 194604, 13137, 
-    8775, 127945, 0, 2963, 0, 8410, 4454, 723, 127882, 966, 4449, 92330, 
-    92238, 0, 7819, 2320, 194589, 339, 4968, 194590, 120399, 8075, 55276, 0, 
-    8047, 0, 78827, 12634, 41542, 78780, 7466, 6705, 12174, 42610, 0, 74452, 
-    983754, 1584, 66645, 6045, 6729, 120640, 65218, 11559, 0, 78062, 7537, 0, 
-    11370, 0, 10330, 0, 10394, 0, 74194, 0, 127929, 9780, 0, 13092, 194576, 
-    77950, 194578, 7074, 92648, 194579, 194582, 11414, 128868, 2531, 13034, 
-    0, 0, 4211, 1259, 7517, 0, 0, 194561, 40996, 13037, 7092, 641, 5219, 
-    94034, 194566, 11064, 41129, 0, 42850, 13035, 9075, 92387, 5466, 128153, 
-    0, 64098, 65793, 4535, 194573, 4271, 78417, 128357, 6769, 41410, 983445, 
-    64262, 6767, 41407, 0, 0, 6755, 118864, 9046, 127934, 126608, 0, 0, 0, 0, 
-    67675, 0, 0, 0, 64338, 2563, 13033, 247, 118915, 0, 12338, 4651, 69895, 
-    11270, 0, 0, 11933, 0, 0, 41903, 43447, 11001, 0, 42255, 0, 92661, 69821, 
-    41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 983063, 42535, 69812, 
-    64529, 41408, 42853, 3877, 120795, 42674, 8147, 43566, 119021, 983767, 
-    10236, 65918, 43782, 0, 0, 64506, 69652, 118921, 4747, 128058, 69844, 
-    43200, 5832, 0, 0, 5141, 42600, 0, 43203, 0, 983790, 43286, 0, 128211, 
-    43778, 0, 41305, 78776, 43781, 11303, 65547, 0, 7031, 859, 0, 0, 0, 6059, 
-    126985, 55235, 0, 8535, 0, 65196, 194787, 66032, 11488, 120481, 120786, 
-    42233, 64140, 9946, 63885, 194792, 11822, 0, 43189, 983889, 0, 1788, 
-    1579, 120482, 71298, 0, 0, 0, 9028, 119571, 69234, 94055, 0, 1285, 64882, 
-    41242, 70086, 0, 12640, 0, 7401, 0, 12625, 68198, 0, 70082, 3940, 41597, 
-    43754, 3396, 12642, 8665, 0, 0, 12630, 1653, 917815, 10153, 0, 6166, 
-    120516, 118989, 0, 8815, 66673, 65046, 9285, 913, 42259, 119317, 119318, 
-    2142, 68454, 42485, 94012, 7878, 8211, 42293, 64377, 0, 92643, 0, 194673, 
-    12032, 0, 9725, 0, 78431, 5263, 12818, 78430, 41939, 10022, 65387, 78419, 
-    42777, 10139, 980, 43698, 65386, 2208, 0, 43701, 43198, 7184, 120673, 
-    194797, 917819, 10085, 119992, 0, 119993, 6634, 92373, 0, 119323, 8072, 
-    119321, 43700, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, 12395, 0, 
-    126977, 120565, 9914, 2217, 917854, 73975, 6367, 6351, 66688, 0, 78107, 
-    0, 64735, 41243, 92199, 7808, 1829, 0, 41937, 4358, 43272, 6353, 0, 0, 
-    120422, 0, 1710, 0, 0, 65607, 0, 49, 6627, 0, 6258, 10683, 78672, 9741, 
-    78329, 5649, 78441, 43443, 64418, 1643, 65213, 8405, 3470, 128225, 13213, 
-    42452, 78331, 120664, 78445, 0, 1072, 78457, 78452, 78454, 6576, 41988, 
-    41132, 65675, 1080, 120002, 9886, 55225, 1101, 68404, 12309, 55227, 0, 
-    12632, 1086, 1869, 78685, 7680, 0, 65458, 120714, 12639, 3380, 8123, 
-    1091, 12638, 7977, 4501, 41099, 0, 66309, 0, 0, 1494, 983146, 126613, 0, 
-    11693, 126513, 10494, 92655, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, 
-    73794, 0, 8022, 0, 120462, 74106, 12413, 94069, 917994, 917993, 917995, 
-    5570, 1881, 7210, 0, 1012, 43752, 0, 120709, 7208, 66442, 5569, 983237, 
-    42339, 0, 6063, 0, 78383, 119594, 6053, 65602, 0, 92201, 64727, 9160, 
-    194827, 0, 0, 92180, 10503, 118810, 6055, 3870, 4279, 8490, 120114, 4319, 
-    64786, 8602, 120110, 11326, 92204, 983116, 0, 120119, 78333, 120117, 
-    120118, 120099, 120100, 65087, 5571, 3674, 9740, 9121, 5568, 120107, 
-    120108, 42085, 10107, 42159, 42870, 120101, 589, 7050, 983791, 43281, 
-    10233, 41263, 66251, 65729, 66253, 126497, 74099, 42645, 0, 194815, 8583, 
-    0, 5847, 6928, 128074, 0, 0, 0, 0, 66592, 12204, 917962, 19966, 77856, 
-    42561, 120626, 983246, 0, 8120, 120701, 0, 0, 128012, 41063, 0, 10664, 0, 
-    8369, 0, 4551, 194964, 3369, 0, 0, 9673, 66334, 65580, 10478, 118960, 
-    12517, 557, 9457, 12034, 983662, 6355, 12519, 41004, 0, 195025, 74094, 0, 
-    0, 77970, 983560, 0, 128175, 12111, 3927, 0, 12515, 1474, 67893, 5492, 
-    6923, 92281, 10441, 73836, 0, 43990, 5493, 0, 74319, 0, 66635, 12019, 0, 
-    1618, 0, 120474, 9645, 10430, 917959, 5853, 13063, 10363, 0, 12956, 
-    128169, 120729, 11314, 917582, 12060, 0, 78392, 12826, 6329, 0, 10514, 
-    65517, 74395, 2707, 8309, 0, 127054, 78398, 43570, 2697, 43420, 78396, 
-    127057, 2695, 42171, 0, 0, 0, 67617, 118971, 0, 2693, 12125, 12766, 0, 
-    1164, 128817, 0, 41918, 983168, 127542, 8687, 66009, 12178, 7053, 128001, 
-    7469, 0, 5248, 12218, 120538, 6427, 42884, 41123, 0, 0, 42873, 41126, 
-    9991, 41128, 74371, 127031, 0, 9873, 0, 42877, 7994, 64762, 2053, 42843, 
-    6591, 9340, 0, 1589, 0, 296, 74438, 78852, 0, 67841, 74370, 0, 8922, 
-    128068, 74600, 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891, 13262, 
-    65590, 5299, 0, 11473, 5449, 1252, 0, 78404, 41431, 74369, 65373, 5295, 
-    917569, 74114, 1223, 1642, 174, 78399, 883, 4161, 12691, 42603, 41413, 
-    3212, 41459, 3211, 74810, 41425, 127029, 78412, 74450, 9728, 3846, 8070, 
-    6150, 6636, 4370, 0, 0, 74178, 74587, 74117, 0, 0, 0, 4986, 12189, 0, 
-    67648, 120499, 94001, 4257, 12104, 77942, 6220, 9004, 65561, 0, 77949, 0, 
-    68135, 917576, 77946, 0, 69679, 69684, 9890, 78561, 12971, 78453, 92556, 
-    73898, 11979, 70051, 118900, 917894, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 
-    74227, 0, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0, 
-    42916, 0, 0, 0, 7282, 78728, 65733, 4445, 127138, 128082, 3494, 74606, 
-    6555, 0, 77976, 0, 0, 78566, 0, 983189, 65898, 983239, 65312, 5447, 0, 
-    12895, 65593, 4010, 0, 41106, 0, 64448, 0, 41105, 0, 65820, 6232, 0, 
-    128280, 0, 43608, 119091, 0, 6538, 4335, 78364, 3941, 41122, 11061, 
-    78363, 64892, 9113, 1954, 12155, 983665, 42878, 11500, 0, 0, 74578, 0, 
-    65832, 0, 0, 0, 77975, 119230, 4586, 0, 350, 10951, 0, 509, 0, 0, 92307, 
-    0, 0, 5133, 0, 0, 9500, 0, 4957, 64741, 2422, 2212, 983080, 0, 0, 2496, 
-    11516, 944, 118851, 3890, 12168, 1438, 0, 983117, 0, 41947, 1220, 120828, 
-    128555, 0, 0, 1571, 42630, 41949, 42805, 8270, 943, 564, 0, 312, 41980, 
-    983935, 0, 78120, 8877, 269, 4429, 6272, 9617, 1460, 6954, 78657, 41120, 
-    65121, 10862, 6060, 41119, 41416, 74355, 4173, 0, 0, 0, 1906, 917986, 
-    11532, 74073, 127338, 0, 1985, 6296, 9582, 917895, 64287, 0, 78115, 
-    11428, 1730, 2457, 917808, 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0, 
-    92230, 0, 6129, 0, 128528, 128268, 0, 7874, 8681, 119092, 0, 13136, 0, 0, 
-    70102, 63886, 118881, 9605, 71308, 13220, 128776, 120274, 5514, 0, 9228, 
-    0, 0, 0, 5240, 9811, 10012, 3096, 0, 0, 983344, 66676, 65873, 0, 0, 0, 
-    9501, 0, 1272, 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 
-    0, 917812, 0, 118899, 12193, 0, 0, 0, 0, 983346, 19935, 0, 92162, 69676, 
-    0, 0, 0, 5275, 0, 0, 8637, 0, 0, 3789, 63880, 11471, 43554, 65862, 11474, 
-    66332, 66603, 128138, 2426, 12042, 92194, 983902, 9537, 3961, 12115, 
-    77953, 2605, 4500, 64561, 55224, 4981, 0, 0, 63876, 11667, 42686, 77973, 
-    42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 68215, 917904, 8541, 
-    78298, 70034, 41866, 0, 0, 0, 0, 69924, 43555, 2823, 9559, 10060, 41940, 
-    8299, 41945, 7132, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 0, 
-    41699, 10762, 43780, 12999, 0, 0, 8106, 4128, 0, 6274, 4494, 0, 4012, 
-    10395, 983591, 43633, 65447, 126511, 0, 11004, 695, 739, 696, 7611, 0, 
-    42755, 74802, 9227, 7506, 7510, 69937, 691, 738, 7511, 7512, 7515, 3868, 
-    688, 41847, 690, 2548, 737, 974, 8003, 7406, 917911, 0, 128688, 3985, 
-    917912, 65860, 63921, 7051, 69777, 4682, 917805, 12809, 6406, 4685, 
-    92505, 10879, 10347, 4680, 6341, 0, 3851, 8132, 74325, 0, 917907, 0, 
-    41958, 119176, 917908, 0, 0, 42657, 92468, 7643, 42373, 11714, 67587, 
-    43568, 983175, 11717, 7650, 10594, 64951, 7647, 7649, 128155, 7646, 0, 
-    78082, 9651, 0, 3891, 0, 0, 2337, 1735, 74324, 67860, 2363, 983135, 0, 
-    43561, 0, 0, 74146, 1860, 7495, 7580, 5812, 7497, 7584, 119140, 127853, 
-    0, 120347, 7727, 0, 8498, 69818, 8949, 3065, 42719, 7135, 1569, 92375, 
-    12534, 12124, 7690, 0, 12533, 983870, 6418, 4543, 78086, 6969, 0, 74800, 
-    0, 67974, 11980, 128650, 983792, 63894, 120760, 12282, 66192, 0, 74592, 
-    8850, 74275, 9238, 10617, 917545, 0, 92625, 0, 12791, 0, 0, 127843, 4447, 
-    73732, 12793, 12900, 92377, 10950, 0, 78087, 12790, 41400, 119128, 66607, 
-    12792, 42232, 194938, 1744, 12789, 10366, 12317, 41310, 983860, 41399, 0, 
-    0, 55258, 0, 12690, 0, 0, 43672, 127840, 41652, 2974, 9010, 11315, 0, 
-    278, 0, 41405, 119254, 0, 10077, 63853, 74557, 42586, 0, 0, 6002, 0, 
-    43553, 0, 67903, 0, 12787, 41308, 7934, 65306, 0, 0, 0, 8646, 983186, 
-    77829, 71360, 0, 6413, 6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678, 
-    10044, 128322, 0, 0, 68659, 6403, 5707, 10393, 127532, 0, 66614, 0, 0, 0, 
-    10297, 0, 3742, 0, 3959, 0, 0, 0, 2467, 0, 6003, 63844, 6663, 8040, 0, 
-    43758, 4182, 78171, 4676, 120501, 0, 0, 2510, 0, 10208, 78168, 92361, 
-    11540, 43546, 6692, 0, 41060, 0, 4668, 9083, 0, 0, 78144, 1559, 63831, 
-    9677, 120260, 0, 65256, 0, 74070, 0, 0, 365, 12056, 43027, 120423, 41716, 
-    128236, 0, 120472, 5516, 2845, 7717, 8036, 41717, 73827, 544, 12045, 
-    6278, 0, 5515, 0, 0, 983051, 65339, 43221, 2211, 0, 5517, 0, 0, 74841, 
-    67884, 0, 67890, 67885, 67880, 67881, 67882, 67883, 0, 0, 67879, 127188, 
-    1902, 67887, 9638, 12976, 126546, 12483, 12368, 41769, 42726, 41765, 
-    7361, 6667, 67874, 7556, 67878, 74351, 11264, 989, 42677, 67889, 0, 1311, 
-    917966, 4326, 11000, 63824, 13068, 10932, 128880, 6917, 78155, 0, 949, 
-    78162, 0, 6148, 8605, 42253, 78177, 0, 0, 42715, 0, 0, 0, 63871, 0, 
-    41796, 1269, 6530, 0, 65057, 0, 5144, 12221, 42716, 0, 4431, 4331, 
-    983720, 128675, 41834, 5279, 0, 10336, 8312, 0, 42701, 128825, 0, 78165, 
-    66036, 0, 0, 6428, 42270, 0, 983596, 43059, 42666, 5256, 1067, 255, 
-    12131, 983713, 9493, 983959, 41014, 11793, 194920, 0, 74394, 43460, 
-    10653, 42723, 983845, 119632, 0, 6560, 7016, 74274, 983615, 43556, 3929, 
-    67977, 6614, 2768, 92504, 9746, 5135, 11811, 12796, 11953, 0, 69761, 
-    5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, 127753, 74315, 74361, 
-    8253, 8817, 1136, 0, 43563, 92232, 0, 194750, 7392, 8230, 9365, 0, 0, 
-    983607, 0, 0, 4041, 0, 2357, 43240, 12786, 229, 119885, 119884, 44004, 
-    7142, 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 43795, 
-    7770, 10712, 64853, 12686, 118916, 42375, 0, 127238, 66352, 10470, 0, 
-    11059, 10791, 917944, 450, 119328, 0, 10432, 12097, 5450, 64691, 1233, 0, 
-    44009, 78284, 66338, 0, 0, 1839, 118799, 983218, 10927, 1701, 983655, 
-    2388, 41749, 41761, 5453, 8361, 119865, 41758, 5444, 41763, 64889, 7143, 
-    92493, 78677, 0, 92429, 78174, 66432, 8801, 3053, 4340, 983044, 0, 65812, 
-    917831, 0, 41824, 67985, 120203, 194800, 194803, 42700, 194805, 127980, 
-    194807, 78676, 92356, 194808, 0, 0, 4493, 4336, 0, 2314, 43602, 78826, 
-    119325, 194811, 42439, 64638, 42327, 43528, 4489, 71331, 0, 194793, 1912, 
-    42385, 10306, 10370, 0, 0, 8867, 10250, 10258, 2712, 1635, 78821, 1410, 
-    92671, 983245, 118878, 0, 0, 9919, 120528, 559, 128157, 41825, 127975, 
-    78188, 4892, 74016, 194781, 6542, 41957, 128865, 5777, 0, 759, 65749, 
-    2079, 65248, 12788, 64487, 64552, 0, 10223, 42062, 0, 0, 126573, 3668, 
-    65754, 43560, 12226, 67991, 65149, 2340, 41959, 194786, 194785, 194788, 
-    43618, 65747, 10937, 2962, 0, 2321, 3587, 65745, 92436, 8921, 9952, 0, 0, 
-    42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, 2958, 68359, 
-    41820, 2300, 2395, 128563, 9976, 120043, 120050, 120058, 68220, 128143, 
-    42809, 42807, 0, 120046, 10198, 4150, 64371, 8318, 41790, 67976, 41898, 
-    2360, 41794, 917942, 71314, 127818, 0, 0, 2418, 983098, 2411, 11336, 799, 
-    63823, 10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980, 
-    55284, 92203, 0, 10384, 983219, 0, 0, 7753, 2351, 6655, 64489, 69931, 0, 
-    77872, 4443, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, 5441, 41896, 
-    10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 78198, 2049, 10098, 0, 
-    74145, 127943, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, 41887, 0, 
-    4862, 9735, 6537, 120591, 74286, 3914, 92178, 93976, 9065, 12961, 0, 0, 
-    92253, 0, 289, 0, 4694, 11420, 4690, 0, 120514, 917978, 4693, 73893, 
-    42724, 0, 4688, 120454, 0, 0, 67994, 8238, 3110, 120162, 983899, 120163, 
-    6528, 127553, 43035, 69898, 218, 0, 1520, 0, 4786, 0, 43225, 4602, 0, 
-    78167, 10088, 6548, 0, 120156, 43978, 8988, 8888, 0, 0, 0, 0, 10666, 0, 
-    73902, 69740, 0, 0, 9975, 128039, 119902, 4689, 8932, 0, 65560, 119209, 
-    74441, 78810, 0, 0, 67987, 0, 0, 0, 67989, 0, 10065, 8207, 0, 92613, 
-    128011, 0, 662, 0, 9244, 194863, 0, 119261, 983421, 0, 0, 0, 41929, 0, 0, 
-    66674, 41926, 120408, 120443, 10513, 64637, 194862, 68013, 52, 13118, 
-    6475, 0, 120341, 12095, 10225, 4812, 92578, 0, 67992, 74085, 0, 3978, 0, 
-    917945, 127823, 11582, 120761, 12281, 0, 6544, 13241, 93961, 69782, 
-    128557, 194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500, 
-    2036, 986, 194859, 64394, 5781, 5599, 64294, 2494, 120450, 4861, 74021, 
-    64334, 78203, 127808, 0, 92266, 65102, 8961, 65842, 10243, 10245, 74191, 
-    120410, 0, 120453, 64821, 9478, 2508, 92683, 0, 202, 128246, 74131, 1242, 
-    65514, 0, 63940, 128706, 64533, 120129, 0, 67842, 11990, 92430, 63939, 
-    43375, 65440, 2504, 0, 78671, 64829, 983901, 6943, 917934, 5859, 0, 2858, 
-    983354, 74294, 983905, 69239, 0, 119027, 12992, 2753, 1936, 70078, 92574, 
+    194609, 0, 8295, 685, 9025, 1524, 12618, 0, 5539, 0, 92523, 120102, 7138, 
+    120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080, 64775, 5036, 
+    5035, 120590, 42604, 983656, 0, 8074, 275, 13291, 1907, 78838, 4432, 
+    127271, 5033, 127273, 127272, 4836, 3888, 73792, 10729, 64546, 127262, 
+    43704, 127264, 127251, 67588, 119000, 127252, 127255, 8858, 6409, 127256, 
+    120252, 128100, 0, 0, 66321, 0, 12814, 127248, 3432, 10218, 0, 6094, 
+    7641, 42445, 0, 92487, 42406, 1676, 74320, 194607, 983177, 5030, 0, 0, 0, 
+    73869, 9622, 0, 69944, 6787, 0, 0, 0, 983583, 10544, 12919, 0, 92218, 0, 
+    0, 69906, 120789, 0, 947, 119835, 194586, 194585, 10969, 119935, 7613, 
+    92562, 119936, 4795, 119930, 7018, 7376, 120181, 120192, 120268, 0, 
+    43567, 74056, 917910, 11833, 119919, 7216, 65232, 7217, 251, 7218, 7895, 
+    4395, 43538, 119926, 119929, 119928, 7213, 119922, 7214, 7215, 983836, 
+    74141, 8880, 7685, 66459, 120173, 65540, 119618, 625, 8187, 42861, 1113, 
+    7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, 10980, 2489, 65624, 
+    8150, 1359, 67652, 127329, 127330, 73756, 5042, 5041, 42769, 12084, 
+    127324, 127321, 92279, 127319, 127320, 127317, 127318, 127315, 12283, 
+    1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0, 3239, 
+    127311, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 6826, 73773, 119073, 5040, 
+    0, 0, 983443, 78420, 0, 5039, 0, 78418, 0, 5038, 0, 0, 13184, 74293, 0, 
+    64648, 0, 9359, 78416, 0, 128770, 65157, 6662, 0, 0, 3863, 73909, 4835, 
+    55266, 43432, 127822, 4309, 7127, 194569, 0, 194568, 1301, 0, 42589, 569, 
+    0, 73813, 711, 4389, 7133, 0, 73880, 11610, 11368, 0, 194570, 41331, 
+    1006, 74240, 0, 1550, 8201, 73737, 7627, 5499, 5031, 77908, 42738, 65784, 
+    77907, 65267, 3758, 0, 65781, 64734, 70073, 2440, 65780, 77913, 8449, 0, 
+    5008, 983572, 2118, 0, 12121, 8255, 5512, 73875, 2128, 2130, 2131, 2126, 
+    2133, 1119, 127068, 2114, 2116, 2455, 0, 2122, 2123, 2124, 2125, 127486, 
+    8714, 983820, 2113, 0, 2115, 128177, 127907, 43713, 5052, 66220, 5821, 
+    6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, 
+    6637, 5907, 65088, 0, 12726, 74594, 9117, 983181, 12003, 5513, 6666, 
+    5053, 74230, 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, 0, 92237, 
+    74807, 0, 5048, 5047, 0, 0, 0, 92313, 0, 74497, 92395, 8089, 6929, 639, 
+    983563, 68179, 64442, 0, 92348, 4599, 41402, 6674, 43397, 43294, 1476, 
+    648, 0, 65819, 3233, 0, 41782, 6951, 94017, 983976, 3530, 9750, 128317, 
+    0, 6656, 42618, 0, 5046, 8512, 65856, 74261, 8967, 0, 5045, 42026, 1916, 
+    7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, 74004, 9669, 
+    12341, 12703, 8402, 0, 119070, 917600, 41750, 3586, 64508, 43148, 0, 0, 
+    119606, 67983, 13296, 517, 0, 128534, 194946, 41528, 123, 65454, 0, 0, 
+    74478, 10531, 7784, 41526, 10829, 73991, 8057, 1126, 73895, 0, 194591, 0, 
+    3925, 4251, 8069, 10517, 120439, 489, 0, 4250, 120441, 120452, 43151, 
+    983178, 194851, 66200, 0, 0, 0, 78423, 0, 0, 8711, 6183, 0, 0, 0, 120448, 
+    7623, 118925, 118889, 9235, 12760, 74176, 69662, 66445, 43540, 10062, 
+    3743, 11514, 11078, 0, 12136, 0, 126597, 120435, 0, 7726, 0, 19922, 267, 
+    3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, 10652, 
+    41612, 41077, 3402, 9050, 3398, 0, 983348, 0, 3391, 41075, 2476, 0, 
+    128017, 0, 10625, 0, 12767, 13017, 78743, 64261, 64934, 127537, 13014, 
+    13013, 0, 6673, 0, 0, 0, 12438, 0, 983342, 0, 983880, 126638, 9053, 
+    13015, 74523, 0, 704, 66215, 6195, 983828, 6660, 78758, 917760, 917793, 
+    42212, 12629, 11435, 0, 55256, 65538, 0, 127940, 983341, 74547, 126585, 
+    65448, 78100, 12948, 119001, 195002, 119238, 195004, 78099, 127085, 0, 
+    128320, 4287, 8276, 4902, 1131, 0, 78458, 66728, 1816, 0, 42533, 168, 
+    42845, 4898, 64298, 983141, 0, 4901, 1821, 0, 578, 3653, 0, 791, 9162, 
+    6977, 0, 78889, 74561, 0, 73731, 8354, 43590, 119303, 983449, 7557, 
+    119339, 119301, 8234, 7241, 0, 120671, 119167, 194996, 12811, 65925, 
+    3946, 78078, 10998, 78080, 673, 194867, 64397, 128276, 74599, 78449, 
+    8890, 194977, 194976, 2448, 78085, 10267, 8424, 2452, 78083, 128824, 
+    8729, 78456, 0, 7845, 917917, 71302, 4408, 4122, 6772, 11039, 8723, 
+    194990, 71310, 119302, 731, 119304, 92286, 2438, 64855, 119300, 119299, 
+    1175, 0, 42135, 373, 119172, 2119, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 
+    5273, 2127, 5269, 6337, 5202, 2404, 5267, 42823, 11291, 19915, 5277, 
+    12963, 127864, 6189, 4125, 1314, 12133, 120340, 118873, 1271, 983640, 0, 
+    66024, 41482, 3864, 74539, 0, 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, 
+    983160, 41390, 5384, 41882, 67647, 92548, 5759, 983912, 0, 41388, 64446, 
+    41392, 64288, 41387, 0, 8706, 5552, 983187, 700, 0, 5553, 0, 7088, 5356, 
+    7499, 68007, 66596, 74066, 0, 10263, 5554, 0, 12344, 10311, 78113, 6665, 
+    92626, 0, 7618, 8517, 11455, 78440, 64632, 64447, 5555, 78088, 78093, 
+    78091, 0, 42803, 65033, 9143, 6668, 195067, 67995, 195069, 656, 195071, 
+    65037, 4577, 64624, 0, 0, 0, 983649, 4269, 73885, 917775, 42846, 69644, 
+    950, 0, 92273, 66580, 118895, 66683, 10554, 917778, 119121, 0, 5098, 
+    917770, 0, 119099, 5097, 4935, 9848, 10381, 0, 128870, 983701, 3651, 0, 
+    120730, 127556, 5102, 5101, 10269, 12983, 8138, 4517, 1932, 5100, 1439, 
+    12093, 1247, 10034, 195064, 5099, 78373, 1441, 42087, 3063, 650, 0, 7838, 
+    0, 195041, 195040, 119142, 9031, 120790, 128582, 9078, 8545, 66356, 
+    128799, 0, 9154, 9118, 126543, 0, 2676, 2277, 0, 73812, 6190, 8599, 
+    195053, 69918, 10795, 9857, 7014, 9856, 195033, 92620, 12129, 0, 8481, 0, 
+    6202, 195035, 10920, 128237, 5203, 195039, 195038, 5108, 5107, 65818, 
+    66019, 9762, 0, 5541, 74772, 0, 12613, 5284, 6657, 207, 128806, 4275, 
+    74819, 854, 68147, 74381, 0, 78786, 5103, 127861, 64348, 41368, 43974, 
+    488, 69811, 0, 71339, 10157, 0, 43034, 11438, 64674, 0, 92694, 68431, 
+    41771, 5106, 6669, 8504, 65154, 69813, 41367, 5105, 127509, 69720, 6476, 
+    5104, 983749, 304, 3176, 119010, 0, 932, 120633, 6567, 238, 69656, 
+    195011, 194595, 19905, 120577, 195015, 78870, 41044, 67640, 194902, 
+    42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, 8803, 309, 
+    6622, 8151, 10858, 78706, 67636, 0, 12568, 0, 12553, 10814, 43275, 6950, 
+    9712, 68680, 43970, 983198, 65165, 92725, 0, 66466, 0, 0, 0, 66725, 6191, 
+    11351, 10437, 11316, 67634, 43763, 0, 41754, 67635, 9370, 2720, 194975, 
+    68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, 
+    94095, 917547, 92682, 67679, 195020, 0, 7781, 41383, 64568, 0, 120738, 
+    12077, 0, 64586, 917620, 42396, 55255, 3475, 128035, 2479, 0, 3632, 
+    120728, 10698, 8376, 3648, 194960, 74844, 67639, 3636, 67894, 3650, 8837, 
+    65229, 1843, 42283, 43250, 41562, 9100, 74548, 917630, 3640, 127190, 
+    42321, 7284, 194974, 194973, 194950, 194949, 194952, 194951, 126649, 
+    194953, 42080, 2529, 0, 0, 0, 42083, 120678, 68398, 194957, 67619, 66367, 
+    194958, 9634, 92380, 9988, 0, 41068, 0, 4295, 65264, 68006, 0, 92545, 0, 
+    785, 8236, 128647, 9027, 68160, 67623, 64383, 120265, 925, 127156, 0, 
+    41985, 41071, 9586, 0, 41984, 9217, 0, 0, 0, 9186, 2067, 4016, 983803, 0, 
+    381, 12936, 0, 42077, 0, 69880, 5184, 42078, 194947, 10810, 128531, 4585, 
+    19943, 5860, 67633, 0, 0, 812, 3615, 0, 5178, 44000, 120548, 78807, 5188, 
+    74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, 0, 67631, 42616, 
+    120670, 2442, 10703, 78789, 67632, 917924, 12771, 12736, 12753, 66708, 
+    73933, 67626, 42401, 0, 69872, 127373, 42288, 12751, 0, 8542, 13145, 
+    194963, 2468, 66706, 41294, 3626, 3883, 64388, 42479, 0, 41117, 0, 92580, 
+    0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, 65208, 41884, 917883, 1318, 
+    64731, 126578, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 983781, 
+    12752, 5833, 1432, 0, 41883, 73912, 9799, 0, 41886, 2480, 0, 2062, 
+    127293, 6494, 5537, 78656, 0, 194587, 0, 1211, 0, 0, 0, 118832, 12318, 0, 
+    0, 68005, 10622, 983779, 0, 78654, 6566, 78659, 0, 73780, 119196, 64864, 
+    0, 78660, 0, 8284, 13081, 0, 3589, 42051, 4035, 6492, 92236, 4265, 6642, 
+    3977, 74186, 41778, 836, 119216, 2488, 0, 4582, 0, 0, 41777, 12926, 
+    983377, 7528, 10550, 0, 92706, 0, 10961, 0, 1374, 64878, 119014, 0, 
+    42389, 41374, 2286, 0, 78492, 41377, 127909, 0, 400, 12597, 120586, 0, 0, 
+    6661, 983145, 64827, 0, 73817, 390, 0, 71301, 983862, 3473, 7718, 0, 0, 
+    0, 55285, 0, 0, 0, 11969, 983390, 127841, 6365, 1887, 6763, 983370, 8080, 
+    7006, 0, 983371, 6757, 64351, 1544, 0, 6766, 64677, 120716, 983372, 6146, 
+    0, 771, 983373, 0, 12812, 13168, 42272, 12200, 917927, 7904, 0, 953, 
+    12917, 119560, 12300, 0, 11491, 9724, 10341, 983773, 9524, 7490, 11389, 
+    7489, 3379, 0, 7487, 0, 471, 7484, 7482, 6753, 7480, 5764, 7478, 7477, 
+    6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, 10213, 
+    127288, 92357, 10049, 11834, 3544, 0, 6017, 65311, 127481, 120216, 13306, 
+    10533, 7870, 73949, 7625, 0, 120544, 0, 0, 92660, 0, 0, 0, 19961, 2472, 
+    42665, 92341, 0, 2139, 4256, 120776, 74380, 0, 42675, 42658, 12845, 0, 0, 
+    65138, 119355, 67862, 0, 65671, 7083, 120008, 8066, 7678, 74865, 0, 0, 0, 
+    0, 7186, 0, 120555, 0, 445, 120566, 128308, 0, 0, 8330, 0, 0, 42797, 
+    983150, 120215, 0, 3902, 0, 1770, 0, 128866, 1560, 120209, 194972, 4584, 
+    73843, 0, 11712, 10866, 118928, 1118, 71334, 0, 0, 1081, 7436, 68420, 
+    7252, 0, 5996, 69921, 4903, 0, 41386, 5162, 119189, 1330, 0, 7139, 0, 
+    12047, 41384, 0, 0, 1848, 4334, 6324, 41975, 64777, 10674, 12308, 12186, 
+    0, 0, 983741, 12715, 68002, 983479, 126630, 2018, 66672, 41979, 66685, 
+    119157, 68000, 92464, 0, 126984, 68001, 9334, 92705, 92315, 70101, 7975, 
+    0, 77957, 0, 66621, 4884, 66597, 69732, 0, 0, 6313, 65513, 69857, 0, 0, 
+    0, 2345, 43697, 463, 0, 0, 119607, 3117, 5460, 0, 0, 983387, 0, 42279, 
+    194577, 0, 78415, 0, 195008, 983384, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 
+    0, 0, 2482, 1471, 0, 0, 42247, 12378, 73925, 69664, 0, 12374, 0, 0, 0, 
+    983694, 2460, 0, 11944, 12376, 127868, 64679, 0, 12380, 10557, 64473, 
+    5870, 0, 2024, 127180, 0, 0, 539, 0, 127765, 94052, 3853, 65180, 127923, 
+    120796, 120245, 92324, 0, 8659, 0, 12474, 92579, 9503, 194969, 2478, 0, 
+    4162, 0, 4260, 12953, 69633, 120089, 12470, 0, 74189, 2742, 12476, 11798, 
+    10946, 127310, 5000, 0, 983579, 0, 69672, 8213, 74017, 7771, 6161, 68018, 
+    6709, 0, 78885, 983708, 127971, 120582, 78547, 0, 10301, 10333, 10397, 0, 
+    0, 73791, 0, 0, 0, 0, 119123, 4014, 12842, 73952, 12015, 127290, 8275, 
+    3893, 983264, 0, 12210, 7221, 42147, 0, 74550, 74465, 64747, 118841, 0, 
+    12516, 4444, 0, 92271, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, 
+    3591, 41969, 0, 2453, 128549, 92666, 64705, 0, 0, 10349, 10413, 43591, 
+    41962, 3202, 74353, 0, 8316, 0, 0, 94060, 687, 0, 0, 0, 1840, 0, 68671, 
+    119809, 4883, 285, 4723, 70099, 92692, 4459, 74577, 42921, 41720, 11089, 
+    240, 19906, 0, 42323, 0, 9743, 120232, 13134, 126535, 0, 0, 0, 0, 42634, 
+    983343, 43437, 3081, 11463, 120154, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 
+    119023, 1729, 0, 120236, 65221, 63883, 43334, 64852, 0, 65194, 66201, 0, 
+    66578, 5001, 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, 5150, 
+    73889, 74182, 127915, 643, 3086, 0, 42448, 42299, 58, 0, 917952, 120083, 
+    63873, 8491, 0, 0, 983623, 4530, 42409, 7126, 194575, 2721, 120074, 
+    119096, 19929, 0, 194574, 0, 4242, 4264, 120077, 120530, 66179, 42412, 
+    65941, 13114, 64522, 10740, 3094, 0, 9754, 119102, 4437, 73948, 127074, 
+    983238, 55280, 42174, 194925, 42430, 0, 0, 42355, 66026, 4306, 41380, 
+    68432, 92586, 0, 66667, 127309, 0, 126521, 42200, 42566, 0, 0, 5088, 
+    6948, 0, 8524, 0, 0, 12385, 0, 0, 69646, 1386, 64580, 11480, 6116, 65039, 
+    65038, 12392, 65036, 8064, 0, 12101, 5822, 119004, 2080, 710, 77999, 
+    11663, 1666, 42091, 119657, 12383, 43671, 42092, 68418, 4289, 0, 63896, 
+    12061, 42096, 43621, 3362, 12377, 983832, 983834, 68449, 7461, 73901, 
+    1244, 331, 73786, 12683, 10662, 0, 8112, 0, 65852, 0, 12379, 194877, 
+    120818, 41964, 42208, 63843, 2084, 41965, 0, 65866, 4327, 0, 63840, 
+    78549, 41220, 13032, 0, 584, 12933, 43177, 12373, 69855, 13000, 1351, 
+    2935, 8698, 12665, 0, 1930, 0, 78229, 12427, 66514, 69859, 13031, 0, 
+    63901, 0, 3657, 128572, 65202, 6000, 119206, 12426, 127181, 0, 41740, 
+    12428, 41283, 41916, 119210, 0, 0, 12429, 6727, 0, 7562, 0, 5170, 0, 
+    41755, 676, 0, 66704, 66664, 9978, 66491, 3536, 0, 9752, 92397, 6162, 0, 
+    69228, 10113, 41829, 65886, 5159, 12422, 41832, 439, 43077, 0, 42207, 
+    74549, 11796, 40970, 41830, 0, 917799, 8308, 917797, 917796, 0, 67864, 
+    917801, 917800, 12336, 4135, 69805, 341, 2727, 4129, 3539, 0, 63861, 0, 
+    7913, 0, 63859, 4131, 63868, 0, 63867, 4133, 11371, 210, 4600, 0, 74560, 
+    4137, 8082, 78506, 119062, 78504, 6704, 4591, 128029, 0, 0, 9680, 0, 
+    120623, 561, 12159, 195, 78508, 41501, 0, 42031, 5719, 7172, 42687, 8368, 
+    0, 41499, 0, 0, 42242, 41498, 917794, 42025, 78565, 65805, 42463, 0, 
+    2924, 0, 120510, 0, 0, 119213, 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 
+    1992, 9652, 73977, 7246, 42086, 126615, 2219, 0, 0, 128801, 194837, 0, 
+    327, 0, 9042, 917777, 917776, 65148, 12433, 917781, 127276, 917779, 
+    12431, 8668, 12434, 983835, 917782, 5999, 0, 7712, 12432, 128243, 43653, 
+    1726, 1015, 0, 8212, 0, 128014, 42423, 119066, 0, 128108, 66709, 0, 8811, 
+    927, 0, 0, 12436, 983245, 42021, 0, 0, 1299, 12240, 42350, 65143, 0, 
+    195016, 0, 78197, 11348, 0, 78037, 9194, 983184, 0, 19914, 12179, 983812, 
+    2296, 194923, 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 
+    64651, 0, 41503, 127478, 11265, 0, 120756, 194922, 0, 5664, 3972, 0, 0, 
+    0, 128508, 12416, 917764, 119608, 10816, 917769, 917768, 12418, 74111, 
+    3882, 8532, 917771, 1573, 128648, 119847, 4596, 66339, 12417, 66001, 
+    65343, 126491, 12414, 8287, 68219, 195017, 68108, 1143, 119169, 119846, 
+    12415, 6626, 42763, 0, 118884, 9021, 120783, 0, 11724, 0, 0, 127104, 
+    126619, 0, 0, 8027, 10997, 9171, 12741, 11400, 71305, 194799, 0, 128239, 
+    0, 128881, 119604, 127523, 120190, 194773, 67608, 128214, 42368, 0, 7715, 
+    3881, 41487, 12118, 42514, 68651, 0, 983895, 3009, 41476, 41489, 69825, 
+    3007, 1448, 3018, 194809, 3889, 8521, 5083, 5082, 119859, 120184, 8519, 
+    983241, 3014, 5081, 65853, 120715, 0, 68014, 69951, 5079, 64802, 42210, 
+    4597, 65532, 11828, 120185, 12371, 0, 8407, 0, 10805, 8518, 10779, 
+    120188, 71303, 983933, 12367, 42170, 0, 92557, 629, 1924, 0, 12037, 
+    74366, 5987, 8462, 8005, 12365, 63933, 69735, 120815, 12369, 10649, 
+    67981, 5077, 120174, 10880, 63927, 5075, 917881, 0, 65075, 0, 11007, 
+    983705, 66659, 92607, 0, 66684, 0, 3434, 4954, 1904, 0, 5266, 126980, 
+    5272, 10499, 4507, 9578, 63923, 120177, 7979, 0, 9831, 0, 194926, 461, 
+    9803, 0, 4504, 1505, 0, 6325, 5276, 43021, 120488, 0, 55236, 0, 66461, 
+    5177, 41324, 12055, 8722, 0, 41327, 0, 66695, 4114, 409, 4383, 8900, 
+    8948, 41325, 0, 721, 10182, 9108, 71311, 0, 119185, 42229, 194912, 0, 
+    5998, 0, 42353, 74825, 0, 12587, 94104, 78571, 0, 71328, 194562, 41576, 
+    42215, 78570, 119207, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, 
+    63949, 64767, 2670, 4167, 194796, 11723, 0, 74120, 0, 65076, 938, 43414, 
+    73854, 11737, 9721, 0, 0, 0, 11742, 2419, 0, 11493, 12334, 194913, 4153, 
+    12302, 10793, 5250, 12407, 11978, 4404, 9189, 12401, 42007, 5775, 6759, 
+    65806, 43997, 0, 42002, 12404, 983553, 0, 4940, 12410, 7683, 1167, 73729, 
+    4983, 120507, 861, 0, 0, 0, 0, 43757, 43370, 0, 0, 11956, 0, 0, 0, 9616, 
+    6631, 0, 12816, 43759, 42218, 12710, 68674, 12721, 4101, 66185, 0, 5992, 
+    7616, 195044, 0, 12577, 0, 983884, 853, 42693, 195014, 0, 983647, 5016, 
+    43535, 63893, 42835, 9491, 917913, 0, 917914, 0, 12712, 7105, 127807, 
+    65060, 120797, 9900, 7750, 0, 194919, 0, 127830, 0, 64778, 12585, 10565, 
+    128151, 12177, 0, 0, 0, 77824, 0, 4900, 127874, 12878, 92630, 8984, 4119, 
+    74768, 8971, 78593, 43113, 9702, 78594, 11025, 9245, 13048, 4927, 4138, 
+    74185, 92481, 92710, 12397, 77827, 0, 13054, 12394, 0, 0, 0, 13053, 0, 
+    3948, 10781, 1546, 0, 5010, 1680, 10507, 78590, 78583, 0, 0, 0, 194915, 
+    7267, 0, 74833, 128181, 5993, 2819, 0, 12706, 77840, 1893, 7266, 63915, 
+    7264, 7265, 0, 1363, 0, 63997, 63910, 63996, 3077, 0, 0, 1512, 69929, 
+    12589, 41479, 128313, 0, 43339, 73776, 9836, 120727, 0, 41481, 43335, 
+    7832, 42343, 3090, 43337, 817, 1664, 1850, 128841, 3079, 11340, 42408, 
+    42447, 127140, 120020, 42307, 12386, 42304, 917555, 0, 12389, 0, 92366, 
+    41996, 11526, 63985, 5864, 1147, 63992, 42887, 1987, 92718, 5480, 7858, 
+    11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, 41686, 63905, 119601, 
+    194688, 983190, 0, 12649, 0, 0, 8247, 507, 91, 2042, 120775, 43643, 
+    194689, 66028, 10036, 41844, 119813, 774, 119829, 0, 119815, 5994, 12539, 
+    0, 78375, 120597, 119833, 983105, 119600, 0, 0, 7719, 6026, 2486, 128312, 
+    119808, 162, 0, 65219, 41073, 9687, 41681, 6304, 119812, 66196, 194881, 
+    5262, 0, 55233, 12681, 42379, 0, 7534, 12219, 0, 127528, 42810, 10492, 0, 
+    983661, 0, 43119, 0, 120753, 12403, 2500, 195013, 0, 4899, 12729, 0, 0, 
+    74113, 2343, 4103, 19946, 74112, 77851, 13112, 0, 195012, 12859, 70087, 
+    120148, 66369, 5861, 127758, 11999, 12400, 0, 983839, 12645, 5146, 11320, 
+    68410, 6748, 65040, 0, 64184, 12974, 64183, 67613, 120645, 5147, 0, 0, 
+    74524, 0, 1928, 0, 67649, 5991, 3445, 67609, 4976, 64176, 0, 67610, 8241, 
+    0, 77868, 4206, 0, 0, 0, 128298, 0, 10138, 0, 0, 8897, 120234, 0, 8357, 
+    4124, 77862, 65836, 120641, 127926, 77859, 0, 0, 1123, 963, 41553, 10120, 
+    12405, 120150, 92664, 398, 13278, 9723, 6366, 120311, 7945, 0, 4402, 
+    9970, 12402, 983136, 42392, 1305, 12408, 0, 44007, 0, 0, 41464, 12411, 
+    12969, 120824, 41465, 983565, 8528, 1575, 0, 63955, 165, 3024, 41467, 
+    119163, 0, 9093, 0, 9147, 128787, 63958, 0, 9148, 9692, 4096, 53, 8296, 
+    6750, 195018, 0, 9594, 0, 0, 43527, 0, 727, 194703, 195023, 5805, 0, 
+    6726, 0, 42176, 12370, 11655, 119095, 10591, 2280, 0, 12372, 120642, 
+    120307, 0, 92343, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 
+    194701, 10803, 4132, 120306, 68474, 92473, 0, 983313, 74837, 120155, 
+    1499, 0, 8055, 42740, 63965, 0, 63962, 74042, 8924, 43123, 5988, 3660, 
+    63969, 11781, 42718, 8788, 1357, 64851, 65743, 0, 8774, 0, 127086, 9941, 
+    120172, 0, 1933, 69655, 9564, 0, 92435, 73866, 0, 0, 2487, 67614, 3121, 
+    1804, 3311, 67615, 70081, 78302, 12220, 67616, 120598, 127475, 0, 68200, 
+    6675, 128144, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, 
+    64663, 0, 0, 4561, 2101, 1398, 0, 92554, 74034, 41569, 92684, 11406, 
+    8167, 12127, 0, 840, 0, 126518, 7101, 6967, 0, 194898, 9796, 0, 333, 
+    69891, 0, 8144, 2117, 0, 983595, 12406, 0, 19931, 119089, 6678, 7769, 0, 
+    12621, 0, 127366, 10227, 4764, 43101, 9981, 0, 40986, 4127, 66487, 0, 
+    42202, 12754, 195022, 0, 0, 94097, 67594, 2048, 12944, 4050, 67595, 
+    917967, 43102, 10581, 12985, 4533, 195021, 74003, 6490, 0, 12038, 0, 0, 
+    120704, 65461, 9798, 69704, 0, 1948, 69841, 0, 952, 128235, 0, 0, 120802, 
+    6449, 9494, 120313, 0, 43098, 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 
+    119973, 0, 12817, 67597, 6676, 3930, 42615, 0, 0, 67598, 0, 0, 0, 65591, 
+    41581, 65916, 1453, 0, 0, 0, 8500, 42222, 120142, 73743, 120400, 4317, 
+    11543, 67676, 64676, 0, 0, 67606, 119083, 0, 42217, 13102, 0, 66003, 
+    6672, 0, 0, 0, 983747, 63841, 9613, 9001, 4526, 11274, 67601, 64520, 
+    64210, 6664, 78704, 42056, 10228, 64957, 11281, 0, 3807, 1469, 66640, 
+    65381, 42197, 4988, 42372, 0, 9598, 904, 352, 42225, 1451, 8061, 8453, 
+    4134, 0, 74847, 66576, 127916, 0, 10520, 8575, 9960, 1201, 127289, 12846, 
+    127291, 127292, 11919, 64962, 127287, 43739, 127281, 8511, 9460, 823, 
+    11587, 12305, 0, 64695, 127305, 12387, 1253, 13183, 65766, 500, 42783, 
+    65765, 64208, 64369, 65760, 65761, 119585, 11606, 64784, 11702, 66498, 
+    9821, 64304, 0, 5152, 11048, 7533, 68366, 64410, 92305, 0, 4323, 120062, 
+    92669, 71332, 127052, 42587, 42214, 41394, 0, 4763, 4112, 118935, 0, 
+    5260, 43143, 94038, 326, 120131, 68423, 0, 10771, 2876, 74074, 92530, 
+    194924, 41398, 7382, 9802, 127077, 127076, 453, 41396, 120524, 42720, 
+    12140, 9572, 0, 7003, 194883, 42334, 7704, 126490, 194885, 43144, 4123, 
+    8494, 43146, 9977, 0, 0, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 
+    4126, 0, 9521, 9589, 64755, 0, 64020, 126604, 10464, 0, 0, 194869, 64514, 
+    11528, 64024, 128072, 679, 64013, 0, 5850, 758, 7536, 0, 92234, 41441, 
+    10693, 64006, 983567, 64005, 4058, 119019, 126487, 64660, 0, 119050, 0, 
+    983069, 1139, 43298, 64027, 64029, 8970, 0, 9934, 983094, 10774, 128020, 
+    42201, 12421, 128216, 0, 1852, 3057, 64046, 73744, 64034, 64039, 0, 0, 0, 
+    194899, 92322, 7645, 12854, 74338, 3496, 0, 0, 0, 9102, 627, 127795, 
+    6158, 8327, 74553, 66632, 12419, 13309, 11570, 127811, 19960, 11696, 0, 
+    1018, 118970, 194909, 194897, 1682, 194896, 194911, 42756, 6765, 194906, 
+    0, 0, 73814, 11412, 6768, 10728, 194830, 71316, 118863, 43311, 64966, 
+    11577, 0, 43040, 1833, 11576, 0, 74779, 0, 185, 65085, 74533, 64754, 
+    194848, 7535, 8085, 42525, 120387, 9749, 41701, 6131, 1949, 4117, 7847, 
+    120489, 194711, 64483, 65693, 0, 0, 0, 69695, 42240, 0, 126651, 42864, 
+    126498, 64667, 41868, 1184, 0, 815, 11484, 127535, 67840, 983651, 0, 
+    66197, 0, 10986, 64683, 983785, 0, 3455, 0, 0, 9879, 0, 0, 4158, 128050, 
+    68166, 0, 0, 0, 0, 69645, 332, 118808, 0, 5142, 2407, 69643, 42199, 0, 
+    92404, 74373, 0, 55217, 0, 63870, 43163, 0, 0, 92390, 42867, 1834, 0, 
+    92461, 69817, 10940, 65249, 119040, 8662, 0, 0, 2652, 120527, 7164, 
+    10784, 195093, 67674, 0, 92233, 92482, 194749, 74562, 917505, 1828, 
+    74474, 120327, 78620, 8531, 12499, 6280, 12324, 118854, 65238, 68374, 
+    4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, 1620, 64436, 3601, 
+    195094, 128073, 983562, 609, 11555, 983099, 12496, 127839, 74181, 4343, 
+    12505, 0, 127863, 0, 11377, 239, 0, 637, 0, 0, 42671, 0, 0, 0, 43565, 
+    71306, 126493, 12696, 128256, 0, 94062, 12929, 0, 712, 0, 4197, 983206, 
+    42818, 126632, 0, 120490, 0, 119137, 1506, 43562, 0, 92491, 0, 12651, 0, 
+    64628, 74517, 12058, 74084, 917838, 7494, 0, 4924, 65592, 118844, 0, 
+    127088, 355, 9719, 127087, 13066, 64796, 0, 0, 12033, 42178, 0, 69760, 
+    42571, 92635, 0, 0, 0, 0, 0, 127176, 3178, 0, 0, 92704, 0, 9080, 127000, 
+    120352, 0, 68209, 0, 11082, 0, 5699, 195100, 66000, 9488, 65166, 119112, 
+    0, 0, 0, 0, 71313, 0, 5265, 69235, 0, 11487, 67858, 12464, 0, 43045, 0, 
+    0, 43345, 0, 10770, 118994, 6807, 465, 9829, 0, 74348, 0, 43346, 8116, 
+    795, 0, 0, 12462, 10930, 10831, 0, 118952, 64362, 74334, 983602, 120811, 
+    0, 12468, 8607, 1008, 0, 10092, 195078, 917842, 67855, 55257, 73771, 
+    1766, 11282, 11996, 1820, 4547, 0, 0, 0, 0, 13223, 128665, 64595, 127294, 
+    0, 92311, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, 5382, 0, 0, 0, 119060, 
+    64953, 5406, 19920, 69897, 66510, 3590, 194864, 1130, 0, 0, 42016, 11823, 
+    43023, 0, 118896, 7742, 0, 13280, 71323, 9326, 73826, 5310, 74812, 78584, 
+    92229, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816, 120803, 
+    983848, 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519, 127182, 0, 
+    73917, 7843, 69783, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 128247, 
+    0, 118990, 10491, 69842, 64412, 0, 0, 5587, 42865, 64404, 8268, 4923, 
+    65086, 8981, 12382, 42133, 120755, 9706, 69738, 0, 66610, 10461, 12103, 
+    0, 8642, 0, 42766, 983866, 2210, 9983, 0, 94009, 0, 0, 0, 7398, 41515, 0, 
+    11802, 8041, 1461, 910, 119133, 0, 6749, 3658, 93964, 120525, 0, 7617, 
+    194841, 12888, 127983, 67668, 13143, 0, 9193, 11097, 5703, 0, 41517, 
+    41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670, 10660, 5769, 613, 
+    7543, 120279, 477, 41083, 92521, 0, 592, 1578, 12459, 43449, 0, 0, 8225, 
+    0, 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0, 126472, 12480, 43243, 
+    0, 39, 12487, 0, 120529, 74199, 12482, 0, 12489, 0, 3195, 5550, 983554, 
+    7897, 0, 1203, 74396, 1813, 64544, 41311, 12090, 0, 2877, 0, 0, 1675, 
+    69840, 0, 0, 0, 10070, 10595, 0, 119077, 194777, 983611, 0, 0, 0, 43244, 
+    0, 0, 983916, 119561, 983078, 0, 194921, 128160, 9939, 0, 983151, 77860, 
+    0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 74038, 119558, 6273, 66679, 
+    364, 9595, 194908, 0, 0, 707, 0, 0, 9282, 66489, 224, 0, 68670, 9332, 
+    4966, 68677, 0, 68644, 0, 3841, 68634, 0, 10732, 68640, 850, 4972, 0, 
+    12890, 2909, 68619, 44008, 68627, 983718, 11544, 10203, 9608, 0, 0, 
+    11962, 194694, 12507, 1196, 128687, 128311, 777, 120187, 4375, 65271, 
+    67678, 0, 12198, 0, 64824, 119343, 983236, 9454, 63778, 8658, 42528, 
+    78000, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 74520, 2701, 
+    0, 127002, 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 983814, 63745, 
+    1748, 63770, 0, 0, 0, 65542, 63766, 55244, 3061, 0, 63764, 63787, 9067, 
+    6096, 0, 7694, 0, 7257, 63768, 3485, 12987, 0, 127522, 120628, 63807, 
+    1591, 0, 6386, 63783, 0, 0, 92535, 0, 0, 0, 74575, 0, 65719, 13083, 
+    64574, 65012, 0, 1640, 12495, 66691, 7624, 3138, 10996, 92247, 1922, 0, 
+    12498, 10987, 69936, 69939, 3894, 65543, 0, 194842, 983588, 493, 0, 
+    43197, 1717, 4228, 479, 10303, 74020, 0, 917935, 10335, 3520, 917932, 
+    12490, 64315, 0, 127039, 12493, 6233, 42681, 1002, 12491, 0, 64911, 
+    92615, 2096, 65120, 0, 78219, 983081, 8378, 11632, 127041, 66213, 63864, 
+    66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, 
+    92672, 66240, 78041, 66233, 8928, 983552, 7909, 66234, 11605, 63759, 
+    983654, 66208, 73999, 63799, 63803, 244, 11542, 12898, 12494, 73761, 
+    12492, 12669, 0, 0, 74153, 0, 128278, 120680, 4882, 13040, 0, 8612, 4885, 
+    74053, 0, 13042, 4880, 64662, 2429, 1360, 248, 0, 63797, 92394, 42358, 0, 
+    7292, 0, 63756, 42786, 66693, 0, 1870, 78040, 470, 78038, 78035, 78036, 
+    70028, 78034, 4579, 128090, 0, 12511, 74453, 12514, 0, 74579, 7239, 7001, 
+    8623, 94011, 128052, 128048, 7378, 12512, 11615, 6104, 0, 0, 659, 6098, 
+    0, 12234, 127307, 127067, 8311, 12510, 41803, 13039, 127072, 12513, 
+    10202, 12471, 0, 8747, 983920, 0, 0, 2323, 0, 2319, 77917, 12477, 77916, 
+    2311, 0, 4415, 237, 6281, 127280, 0, 0, 2309, 1312, 8173, 128871, 12469, 
+    0, 78505, 64335, 10609, 0, 128111, 9397, 11524, 9395, 9396, 9393, 9394, 
+    9391, 9392, 9389, 6209, 9387, 9388, 4932, 9386, 9383, 9384, 6740, 0, 
+    65451, 8185, 0, 917832, 43024, 43336, 67659, 2313, 128167, 7948, 9236, 
+    92571, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, 12082, 10924, 3147, 
+    0, 120684, 12524, 119081, 2310, 11818, 9381, 9382, 9379, 9380, 9377, 
+    9378, 9375, 9376, 1683, 9374, 983778, 9372, 12444, 0, 0, 13016, 8210, 
+    983958, 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, 983837, 4155, 0, 
+    0, 42030, 5007, 12522, 43088, 0, 4951, 127805, 127240, 0, 9922, 43309, 
+    983841, 12525, 983471, 12016, 65770, 9548, 67665, 403, 78230, 12503, 0, 
+    0, 11030, 0, 92567, 65691, 63998, 1819, 10496, 0, 0, 119920, 0, 194668, 
+    0, 12506, 0, 12231, 0, 12500, 44023, 12509, 64393, 78830, 3389, 10589, 
+    6608, 41047, 120321, 78395, 78394, 74069, 77995, 78391, 3608, 8281, 
+    120320, 1107, 0, 9076, 8862, 69743, 41052, 13084, 64766, 43217, 7803, 
+    13222, 74165, 74782, 126514, 8546, 11553, 63995, 13177, 9043, 6303, 
+    983947, 498, 64471, 120324, 128567, 12529, 8042, 0, 2344, 12528, 8031, 
+    2414, 0, 69719, 3231, 0, 6422, 66512, 69653, 12530, 2537, 78405, 41429, 
+    12658, 13036, 65772, 0, 78738, 41433, 4719, 469, 0, 4363, 3313, 41428, 
+    78407, 2023, 1772, 78224, 78225, 65706, 10051, 64812, 78220, 0, 9920, 
+    12215, 0, 4931, 1951, 12497, 119363, 9607, 0, 9663, 983228, 119634, 6503, 
+    41110, 0, 1491, 0, 0, 127304, 41061, 0, 194838, 127187, 65026, 41993, 
+    41509, 11045, 65028, 78602, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 
+    41992, 41506, 0, 41687, 0, 120717, 127776, 9940, 127299, 7692, 983833, 
+    8008, 41131, 330, 8566, 65083, 41133, 9816, 126517, 12532, 78550, 78546, 
+    3508, 127058, 43235, 0, 127298, 64139, 78231, 6411, 12910, 78554, 66644, 
+    13028, 6737, 12537, 0, 0, 64136, 12536, 2350, 13029, 78233, 0, 983103, 
+    13030, 6702, 4527, 0, 12538, 128810, 983645, 65599, 65717, 9966, 0, 4948, 
+    12484, 4032, 128149, 12623, 0, 6207, 0, 6117, 65930, 8412, 0, 7438, 1296, 
+    2325, 41511, 126625, 10149, 74118, 0, 127286, 12481, 0, 12488, 66713, 0, 
+    41556, 64414, 118802, 2354, 42619, 73766, 0, 6295, 901, 41510, 7953, 0, 
+    65032, 41513, 983166, 11927, 66584, 78559, 78560, 78557, 78558, 0, 78556, 
+    848, 9868, 0, 6424, 78568, 119338, 69922, 74031, 78563, 78564, 2352, 
+    78572, 893, 64576, 11289, 1407, 67973, 0, 13026, 6762, 78579, 78580, 
+    13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 983823, 0, 9325, 6818, 
+    6283, 11738, 0, 983934, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 
+    983825, 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737, 
+    9956, 0, 0, 74552, 10014, 0, 41260, 119340, 13020, 10024, 194764, 74583, 
+    74340, 69681, 0, 43001, 8029, 0, 0, 983780, 3335, 0, 0, 9776, 120526, 
+    194748, 5215, 42644, 3333, 1632, 194751, 64849, 3342, 78582, 5363, 12957, 
+    78581, 4156, 0, 0, 6421, 78591, 1611, 78589, 13018, 74257, 78588, 74542, 
+    3337, 4537, 67895, 11736, 0, 68608, 6482, 4214, 73790, 11945, 0, 13046, 
+    8838, 425, 4025, 10709, 78595, 2108, 2392, 13047, 0, 0, 6819, 13049, 
+    6499, 92243, 12424, 68614, 73944, 13050, 9924, 194745, 6507, 127919, 
+    94073, 128069, 3277, 8929, 4947, 41055, 0, 194722, 194721, 194724, 13045, 
+    64626, 66034, 7751, 194727, 8371, 194729, 3997, 12806, 8768, 13044, 0, 
+    12420, 4024, 194730, 41054, 1078, 9757, 69736, 41057, 0, 0, 0, 0, 983791, 
+    92210, 92411, 0, 41496, 0, 9165, 1572, 11911, 0, 118842, 2346, 13270, 
+    8958, 0, 9646, 3773, 43183, 6401, 5831, 0, 0, 13043, 8056, 92494, 65681, 
+    208, 127382, 41514, 0, 0, 0, 10699, 6408, 92227, 7825, 5661, 0, 120630, 
+    3603, 41109, 2398, 3548, 126596, 0, 119933, 0, 3115, 9918, 0, 8294, 
+    42912, 0, 0, 194726, 4876, 65804, 0, 0, 43468, 983274, 41558, 41471, 
+    73950, 8158, 9944, 41472, 120298, 13051, 78689, 3143, 194674, 6701, 
+    41559, 1896, 66256, 13052, 194680, 5665, 0, 119071, 7025, 63974, 0, 
+    74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 1564, 73924, 1121, 
+    78319, 63959, 0, 9942, 13231, 0, 64752, 4732, 194666, 11596, 119931, 
+    65187, 1626, 63983, 10110, 64772, 42024, 6420, 42028, 0, 10509, 2795, 
+    4910, 194728, 69231, 64753, 6275, 93957, 118830, 63978, 11044, 3229, 
+    6423, 42774, 0, 0, 0, 12823, 2331, 917810, 7085, 6137, 0, 7524, 0, 
+    917809, 8346, 0, 8338, 128315, 65043, 0, 822, 127984, 9903, 64721, 42722, 
+    69877, 194659, 78655, 78661, 194660, 78662, 41265, 5311, 1795, 965, 
+    118791, 10587, 78055, 11278, 78632, 194640, 0, 12946, 194641, 119341, 
+    120349, 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 983960, 748, 
+    41067, 2330, 535, 3148, 12375, 78799, 194629, 10556, 2475, 12388, 4889, 
+    8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, 
+    194637, 917804, 581, 4893, 983616, 6571, 65545, 4888, 4157, 78048, 78049, 
+    78046, 78047, 0, 10119, 6415, 42893, 0, 69702, 0, 0, 11375, 64746, 2332, 
+    78063, 412, 78061, 64932, 42880, 43587, 0, 0, 0, 0, 65197, 78066, 12203, 
+    78064, 78065, 8913, 65854, 4875, 65811, 120381, 120389, 118888, 9344, 
+    8826, 120386, 120395, 13104, 74781, 11997, 120393, 78075, 0, 3134, 0, 
+    65696, 92331, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0, 78414, 78413, 
+    118950, 74011, 0, 0, 0, 0, 1908, 120167, 4328, 10734, 127014, 0, 127914, 
+    7804, 78272, 10811, 6250, 11339, 4914, 11367, 0, 78054, 4917, 74516, 
+    74208, 64285, 4912, 5464, 127836, 118893, 2361, 7971, 78072, 78073, 
+    55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, 40977, 10960, 40962, 
+    8305, 12573, 983608, 40980, 983964, 13202, 0, 12582, 78282, 983048, 
+    69856, 42438, 55221, 6288, 78280, 127946, 5653, 42400, 10891, 7698, 5658, 
+    74045, 70039, 0, 0, 4913, 0, 983959, 71333, 42326, 128194, 12728, 92685, 
+    42478, 2327, 0, 12563, 42287, 12705, 0, 0, 12588, 8821, 6153, 2867, 
+    194708, 66312, 698, 128007, 194606, 10356, 70017, 194713, 651, 12641, 0, 
+    0, 0, 0, 41552, 65115, 78465, 78467, 78463, 78464, 128851, 78461, 194697, 
+    74356, 64945, 4716, 43277, 0, 78474, 12340, 120568, 0, 194700, 55264, 
+    41211, 120676, 8703, 5462, 917629, 983495, 10101, 0, 70049, 8479, 4151, 
+    41933, 0, 0, 66254, 120821, 0, 0, 128654, 0, 119194, 74050, 92701, 0, 0, 
+    0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 0, 2699, 0, 73845, 
+    2985, 92568, 126475, 917845, 12192, 119314, 0, 119312, 9827, 119310, 
+    119311, 119308, 119309, 119306, 11481, 41210, 119305, 0, 35, 78481, 
+    78482, 66694, 68479, 78477, 78478, 43596, 6090, 64257, 7812, 10534, 0, 
+    78485, 73848, 67975, 4272, 0, 40967, 40964, 917825, 12704, 78487, 43306, 
+    0, 64497, 12138, 7930, 0, 2292, 68216, 0, 917826, 5244, 4189, 94108, 
+    67596, 127504, 4188, 1879, 0, 968, 0, 43743, 0, 8873, 2279, 0, 917827, 
+    65555, 12574, 0, 0, 0, 74490, 127099, 43657, 0, 0, 0, 42682, 12578, 
+    12720, 0, 41227, 0, 12346, 127101, 64848, 0, 0, 7251, 0, 0, 118850, 
+    119141, 128546, 66015, 0, 959, 8885, 12564, 66457, 78808, 9469, 9632, 
+    92323, 74761, 64323, 127335, 0, 0, 0, 310, 0, 41281, 10976, 0, 71325, 0, 
+    74266, 10054, 6497, 8574, 0, 9012, 19958, 74420, 65089, 13215, 12730, 
+    65163, 74044, 374, 43195, 816, 120161, 0, 0, 41934, 7465, 0, 128168, 
+    983268, 4715, 6101, 94106, 41936, 0, 4879, 0, 65446, 0, 307, 127147, 
+    9585, 5374, 983267, 128059, 0, 0, 126618, 120390, 0, 65567, 120614, 1929, 
+    0, 12142, 0, 12236, 41419, 194618, 120610, 12982, 194623, 5378, 78791, 
+    128679, 41421, 0, 4462, 0, 126599, 128092, 821, 0, 2498, 5800, 120157, 
+    983115, 1760, 2421, 4469, 2324, 828, 3611, 78400, 757, 1185, 0, 78770, 
+    43597, 10628, 74808, 194572, 7999, 43971, 0, 0, 10634, 10942, 7713, 2348, 
+    0, 64374, 4380, 194608, 119044, 9982, 64324, 41240, 862, 65626, 78462, 
+    1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, 64688, 194593, 194592, 
+    78092, 74357, 194597, 4748, 92228, 194598, 194601, 42260, 5871, 119075, 
+    0, 74576, 44019, 0, 128189, 3967, 194604, 13137, 8775, 127945, 0, 2963, 
+    0, 8410, 4454, 723, 127882, 966, 4449, 92330, 92238, 0, 7819, 2320, 
+    194589, 339, 4968, 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634, 
+    41542, 78780, 7466, 6705, 12174, 42610, 0, 74452, 983763, 1584, 66645, 
+    6045, 6729, 120640, 65218, 11559, 0, 78062, 7537, 0, 11370, 0, 10330, 0, 
+    10394, 0, 74194, 0, 127929, 9780, 0, 13092, 194576, 77950, 194578, 7074, 
+    92648, 194579, 194582, 11414, 128868, 2531, 13034, 0, 0, 4211, 1259, 
+    7517, 0, 0, 194561, 40996, 13037, 7092, 641, 5219, 94034, 194566, 11064, 
+    41129, 0, 42850, 13035, 9075, 92387, 5466, 128153, 0, 64098, 65793, 4535, 
+    194573, 4271, 78417, 128357, 6769, 41410, 983452, 64262, 6767, 41407, 0, 
+    0, 6755, 118864, 9046, 127934, 126608, 0, 0, 0, 0, 67675, 0, 0, 0, 64338, 
+    2563, 13033, 247, 118915, 0, 12338, 4651, 69895, 11270, 0, 0, 11933, 0, 
+    0, 41903, 43447, 11001, 0, 42255, 0, 92661, 69821, 41905, 0, 0, 10775, 
+    9793, 5009, 0, 42269, 64587, 983063, 42535, 69812, 64529, 41408, 42853, 
+    3877, 120795, 42674, 8147, 43566, 119021, 983776, 10236, 65918, 43782, 0, 
+    0, 64506, 69652, 118921, 4747, 128058, 69844, 43200, 5832, 0, 0, 5141, 
+    42600, 0, 43203, 0, 983799, 43286, 0, 128211, 43778, 0, 41305, 78776, 
+    43781, 11303, 65547, 0, 7031, 859, 0, 0, 0, 6059, 126985, 55235, 0, 8535, 
+    0, 65196, 194787, 66032, 11488, 120481, 120786, 42233, 64140, 9946, 
+    63885, 194792, 11822, 0, 43189, 983898, 0, 1788, 1579, 120482, 71298, 0, 
+    0, 0, 9028, 119571, 69234, 94055, 0, 1285, 64882, 41242, 70086, 0, 12640, 
+    0, 7401, 0, 12625, 68198, 0, 70082, 3940, 41597, 43754, 3396, 12642, 
+    8665, 0, 0, 12630, 1653, 917815, 10153, 0, 6166, 120516, 118989, 0, 8815, 
+    66673, 65046, 9285, 913, 42259, 119317, 119318, 2142, 68454, 42485, 
+    94012, 7878, 8211, 42293, 64377, 0, 92643, 0, 194673, 12032, 0, 9725, 0, 
+    78431, 5263, 12818, 78430, 41939, 10022, 65387, 78419, 42777, 10139, 980, 
+    43698, 65386, 2208, 0, 43701, 43198, 7184, 120673, 194797, 917819, 10085, 
+    119992, 0, 119993, 6634, 92373, 0, 119323, 8072, 119321, 43700, 0, 8872, 
+    7783, 917992, 12398, 8237, 0, 0, 12395, 0, 126977, 120565, 9914, 2217, 
+    917854, 73975, 6367, 6351, 66688, 0, 78107, 0, 64735, 41243, 92199, 7808, 
+    1829, 0, 41937, 4358, 43272, 6353, 0, 0, 120422, 0, 1710, 0, 0, 65607, 0, 
+    49, 6627, 0, 6258, 10683, 78672, 9741, 78329, 5649, 78441, 43443, 64418, 
+    1643, 65213, 8405, 3470, 128225, 13213, 42452, 78331, 120664, 78445, 0, 
+    1072, 78457, 78452, 78454, 6576, 41988, 41132, 65675, 1080, 120002, 9886, 
+    55225, 1101, 68404, 12309, 55227, 0, 12632, 1086, 1869, 78685, 7680, 0, 
+    65458, 120714, 12639, 3380, 8123, 1091, 12638, 7977, 4501, 41099, 0, 
+    66309, 0, 0, 1494, 983146, 126613, 0, 11693, 126513, 10494, 92655, 65872, 
+    12363, 11386, 0, 0, 0, 0, 64582, 0, 73794, 0, 8022, 0, 120462, 74106, 
+    12413, 94069, 917994, 917993, 917995, 5570, 1881, 7210, 0, 1012, 43752, 
+    0, 120709, 7208, 66442, 5569, 983242, 42339, 0, 6063, 0, 78383, 119594, 
+    6053, 65602, 0, 92201, 64727, 9160, 194827, 0, 0, 92180, 10503, 118810, 
+    6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 92204, 
+    983116, 0, 120119, 78333, 120117, 120118, 120099, 120100, 65087, 5571, 
+    3674, 9740, 9121, 5568, 120107, 120108, 42085, 10107, 42159, 42870, 
+    120101, 589, 7050, 983800, 43281, 10233, 41263, 66251, 65729, 66253, 
+    126497, 74099, 42645, 0, 194815, 8583, 0, 5847, 6928, 128074, 0, 0, 0, 0, 
+    66592, 12204, 917962, 19966, 77856, 42561, 120626, 983251, 0, 8120, 
+    120701, 0, 0, 128012, 41063, 0, 10664, 0, 8369, 0, 4551, 194964, 3369, 0, 
+    0, 9673, 66334, 65580, 10478, 118960, 12517, 557, 9457, 12034, 983671, 
+    6355, 12519, 41004, 0, 195025, 74094, 0, 0, 77970, 983560, 0, 128175, 
+    12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 92281, 10441, 73836, 0, 
+    43990, 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 120474, 9645, 10430, 
+    917959, 5853, 13063, 10363, 0, 12956, 128169, 120729, 11314, 917582, 
+    12060, 0, 78392, 12826, 6329, 0, 10514, 65517, 74395, 2707, 8309, 0, 
+    127054, 78398, 43570, 2697, 43420, 78396, 127057, 2695, 42171, 0, 0, 0, 
+    67617, 118971, 0, 2693, 12125, 12766, 0, 1164, 128817, 0, 41918, 983168, 
+    127542, 8687, 66009, 12178, 7053, 128001, 7469, 0, 5248, 12218, 120538, 
+    6427, 42884, 41123, 0, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, 
+    9873, 0, 42877, 7994, 64762, 2053, 42843, 6591, 9340, 0, 1589, 0, 296, 
+    74438, 78852, 0, 67841, 74370, 0, 8922, 128068, 74600, 12700, 74836, 0, 
+    12579, 0, 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, 
+    1252, 0, 78404, 41431, 74369, 65373, 5295, 917569, 74114, 1223, 1642, 
+    174, 78399, 883, 4161, 12691, 42603, 41413, 3212, 41459, 3211, 74810, 
+    41425, 127029, 78412, 74450, 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, 
+    74178, 74587, 74117, 0, 0, 0, 4986, 12189, 0, 67648, 120499, 94001, 4257, 
+    12104, 77942, 6220, 9004, 65561, 0, 77949, 0, 68135, 917576, 77946, 0, 
+    69679, 69684, 9890, 78561, 12971, 78453, 92556, 73898, 11979, 70051, 
+    118900, 917894, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, 65304, 
+    4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0, 42916, 0, 0, 0, 7282, 
+    78728, 65733, 4445, 127138, 128082, 3494, 74606, 6555, 0, 77976, 0, 0, 
+    78566, 0, 983189, 65898, 983244, 65312, 5447, 0, 12895, 65593, 4010, 0, 
+    41106, 0, 64448, 0, 41105, 0, 65820, 6232, 0, 128280, 0, 43608, 119091, 
+    0, 6538, 4335, 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, 
+    12155, 983674, 42878, 11500, 0, 0, 74578, 0, 65832, 0, 0, 0, 77975, 
+    119230, 4586, 0, 350, 10951, 0, 509, 0, 0, 92307, 0, 0, 5133, 0, 0, 9500, 
+    0, 4957, 64741, 2422, 2212, 983080, 0, 0, 2496, 11516, 944, 118851, 3890, 
+    12168, 1438, 0, 983117, 0, 41947, 1220, 120828, 128555, 0, 0, 1571, 
+    42630, 41949, 42805, 8270, 943, 564, 0, 312, 41980, 983944, 0, 78120, 
+    8877, 269, 4429, 6272, 9617, 1460, 6954, 78657, 41120, 65121, 10862, 
+    6060, 41119, 41416, 74355, 4173, 0, 0, 0, 1906, 917986, 11532, 74073, 
+    127338, 0, 1985, 6296, 9582, 917895, 64287, 0, 78115, 11428, 1730, 2457, 
+    917808, 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0, 92230, 0, 6129, 0, 
+    128528, 128268, 0, 7874, 8681, 119092, 0, 13136, 0, 0, 70102, 63886, 
+    118881, 9605, 71308, 13220, 128776, 120274, 5514, 0, 9228, 0, 0, 0, 5240, 
+    9811, 10012, 3096, 0, 0, 983351, 66676, 65873, 0, 0, 0, 9501, 0, 1272, 
+    64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 0, 917812, 0, 
+    118899, 12193, 0, 0, 0, 0, 983353, 19935, 0, 92162, 69676, 0, 0, 0, 5275, 
+    0, 0, 8637, 0, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, 
+    128138, 2426, 12042, 92194, 983911, 9537, 3961, 12115, 77953, 2605, 4500, 
+    64561, 55224, 4981, 0, 0, 63876, 11667, 42686, 77973, 42362, 64686, 4499, 
+    41649, 7589, 0, 0, 3237, 0, 68215, 917904, 8541, 78298, 70034, 41866, 0, 
+    0, 0, 0, 69924, 43555, 2823, 9559, 10060, 41940, 8299, 41945, 7132, 
+    41941, 3308, 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, 43780, 
+    12999, 0, 0, 8106, 4128, 0, 6274, 4494, 0, 4012, 10395, 983591, 43633, 
+    65447, 126511, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, 
+    7506, 7510, 69937, 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, 
+    2548, 737, 974, 8003, 7406, 917911, 0, 128688, 3985, 917912, 65860, 
+    63921, 7051, 69777, 4682, 917805, 12809, 6406, 4685, 92505, 10879, 10347, 
+    4680, 6341, 0, 3851, 8132, 74325, 0, 917907, 0, 41958, 119176, 917908, 0, 
+    0, 42657, 92468, 7643, 42373, 11714, 67587, 43568, 983175, 11717, 7650, 
+    10594, 64951, 7647, 7649, 128155, 7646, 0, 78082, 9651, 0, 3891, 0, 0, 
+    2337, 1735, 74324, 67860, 2363, 983135, 0, 43561, 0, 0, 74146, 1860, 
+    7495, 7580, 5812, 7497, 7584, 119140, 127853, 0, 120347, 7727, 0, 8498, 
+    69818, 8949, 3065, 42719, 7135, 1569, 92375, 12534, 12124, 7690, 0, 
+    12533, 983879, 6418, 4543, 78086, 6969, 0, 74800, 0, 67974, 11980, 
+    128650, 983801, 63894, 120760, 12282, 66192, 0, 74592, 8850, 74275, 9238, 
+    10617, 917545, 0, 92625, 0, 12791, 0, 0, 127843, 4447, 73732, 12793, 
+    12900, 92377, 10950, 0, 78087, 12790, 41400, 119128, 66607, 12792, 42232, 
+    194938, 1744, 12789, 10366, 12317, 41310, 983869, 41399, 0, 0, 55258, 0, 
+    12690, 0, 0, 43672, 127840, 41652, 2974, 9010, 11315, 0, 278, 0, 41405, 
+    119254, 0, 10077, 63853, 74557, 42586, 0, 0, 6002, 0, 43553, 0, 67903, 0, 
+    12787, 41308, 7934, 65306, 0, 0, 0, 8646, 983186, 77829, 71360, 0, 6413, 
+    6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678, 10044, 128322, 0, 0, 
+    68659, 6403, 5707, 10393, 127532, 0, 66614, 0, 0, 0, 10297, 0, 3742, 0, 
+    3959, 0, 0, 0, 2467, 0, 6003, 63844, 6663, 8040, 0, 43758, 4182, 78171, 
+    4676, 120501, 0, 0, 2510, 0, 10208, 78168, 92361, 11540, 43546, 6692, 0, 
+    41060, 0, 4668, 9083, 0, 0, 78144, 1559, 63831, 9677, 120260, 0, 65256, 
+    0, 74070, 0, 0, 365, 12056, 43027, 120423, 41716, 128236, 0, 120472, 
+    5516, 2845, 7717, 8036, 41717, 73827, 544, 12045, 6278, 0, 5515, 0, 0, 
+    983051, 65339, 43221, 2211, 0, 5517, 0, 0, 74841, 67884, 0, 67890, 67885, 
+    67880, 67881, 67882, 67883, 0, 0, 67879, 127188, 1902, 67887, 9638, 
+    12976, 126546, 12483, 12368, 41769, 42726, 41765, 7361, 6667, 67874, 
+    7556, 67878, 74351, 11264, 989, 42677, 67889, 0, 1311, 917966, 4326, 
+    11000, 63824, 13068, 10932, 128880, 6917, 78155, 0, 949, 78162, 0, 6148, 
+    8605, 42253, 78177, 0, 0, 42715, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, 
+    65057, 0, 5144, 12221, 42716, 0, 4431, 4331, 983729, 128675, 41834, 5279, 
+    0, 10336, 8312, 0, 42701, 128825, 0, 78165, 66036, 0, 0, 6428, 42270, 0, 
+    983596, 43059, 42666, 5256, 1067, 255, 12131, 983722, 9493, 983968, 
+    41014, 11793, 194920, 0, 74394, 43460, 10653, 42723, 983854, 119632, 0, 
+    6560, 7016, 74274, 983615, 43556, 3929, 67977, 6614, 2768, 92504, 9746, 
+    5135, 11811, 12796, 11953, 0, 69761, 5139, 346, 74303, 6305, 12795, 4675, 
+    5168, 78552, 127753, 74315, 74361, 8253, 8817, 1136, 0, 43563, 92232, 0, 
+    194750, 7392, 8230, 9365, 0, 0, 983607, 0, 0, 4041, 0, 2357, 43240, 
+    12786, 229, 119885, 119884, 44004, 7142, 119881, 12350, 65554, 119882, 
+    119877, 119876, 12785, 63863, 43795, 7770, 10712, 64853, 12686, 118916, 
+    42375, 0, 127238, 66352, 10470, 0, 11059, 10791, 917944, 450, 119328, 0, 
+    10432, 12097, 5450, 64691, 1233, 0, 44009, 78284, 66338, 0, 0, 1839, 
+    118799, 983219, 10927, 1701, 983664, 2388, 41749, 41761, 5453, 8361, 
+    119865, 41758, 5444, 41763, 64889, 7143, 92493, 78677, 0, 92429, 78174, 
+    66432, 8801, 3053, 4340, 983044, 0, 65812, 917831, 0, 41824, 67985, 
+    120203, 194800, 194803, 42700, 194805, 127980, 194807, 78676, 92356, 
+    194808, 0, 0, 4493, 4336, 0, 2314, 43602, 78826, 119325, 194811, 42439, 
+    64638, 42327, 43528, 4489, 71331, 0, 194793, 1912, 42385, 10306, 10370, 
+    0, 0, 8867, 10250, 10258, 2712, 1635, 78821, 1410, 92671, 983250, 118878, 
+    0, 0, 9919, 120528, 559, 128157, 41825, 127975, 78188, 4892, 74016, 
+    194781, 6542, 41957, 128865, 5777, 0, 759, 65749, 2079, 65248, 12788, 
+    64487, 64552, 0, 10223, 42062, 0, 0, 126573, 3668, 65754, 43560, 12226, 
+    67991, 65149, 2340, 41959, 194786, 194785, 194788, 43618, 65747, 10937, 
+    2962, 0, 2321, 3587, 65745, 92436, 8921, 9952, 0, 0, 42714, 9951, 43409, 
+    194770, 2949, 66012, 194775, 194774, 2958, 68359, 41820, 2300, 2395, 
+    128563, 9976, 120043, 120050, 120058, 68220, 128143, 42809, 42807, 0, 
+    120046, 10198, 4150, 64371, 8318, 41790, 67976, 41898, 2360, 41794, 
+    917942, 71314, 127818, 0, 0, 2418, 983098, 2411, 11336, 799, 63823, 
+    10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980, 55284, 
+    92203, 0, 10384, 983220, 0, 0, 7753, 2351, 6655, 64489, 69931, 0, 77872, 
+    4443, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, 5441, 41896, 10288, 
+    10320, 0, 855, 7046, 6109, 65045, 63839, 78198, 2049, 10098, 0, 74145, 
+    127943, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, 41887, 0, 4862, 
+    9735, 6537, 120591, 74286, 3914, 92178, 93976, 9065, 12961, 0, 0, 92253, 
+    0, 289, 0, 4694, 11420, 4690, 0, 120514, 917978, 4693, 73893, 42724, 0, 
+    4688, 120454, 0, 0, 67994, 8238, 3110, 120162, 983908, 120163, 6528, 
+    127553, 43035, 69898, 218, 0, 1520, 0, 4786, 0, 43225, 4602, 0, 78167, 
+    10088, 6548, 0, 120156, 43978, 8988, 8888, 0, 0, 0, 0, 10666, 0, 73902, 
+    69740, 0, 0, 9975, 128039, 119902, 4689, 8932, 0, 65560, 119209, 74441, 
+    78810, 0, 0, 67987, 0, 0, 0, 67989, 0, 10065, 8207, 0, 92613, 128011, 0, 
+    662, 0, 9244, 194863, 0, 119261, 983428, 0, 0, 0, 41929, 0, 0, 66674, 
+    41926, 120408, 120443, 10513, 64637, 194862, 68013, 52, 13118, 6475, 0, 
+    120341, 12095, 10225, 4812, 92578, 0, 67992, 74085, 0, 3978, 0, 917945, 
+    127823, 11582, 120761, 12281, 0, 6544, 13241, 93961, 69782, 128557, 
+    194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, 
+    194859, 64394, 5781, 5599, 64294, 2494, 120450, 4861, 74021, 64334, 
+    78203, 127808, 0, 92266, 65102, 8961, 65842, 10243, 10245, 74191, 120410, 
+    0, 120453, 64821, 9478, 2508, 92683, 0, 202, 128246, 74131, 1242, 65514, 
+    0, 63940, 128706, 64533, 120129, 0, 67842, 11990, 92430, 63939, 43375, 
+    65440, 2504, 0, 78671, 64829, 983910, 6943, 917934, 5859, 0, 2858, 
+    983361, 74294, 983914, 69239, 0, 119027, 12992, 2753, 1936, 70078, 92574, 
     2751, 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 0, 0, 0, 
     63920, 74128, 2856, 119910, 47, 69908, 126986, 65858, 0, 0, 0, 7899, 0, 
     8417, 43798, 7072, 0, 0, 4033, 128164, 43992, 0, 0, 212, 64600, 1903, 
@@ -17799,23 +17816,23 @@
     12624, 0, 1673, 4811, 92383, 5986, 9338, 3046, 74480, 5985, 917928, 
     119598, 9820, 0, 12187, 0, 0, 5984, 0, 43308, 4393, 67650, 0, 0, 0, 0, 
     74826, 64733, 0, 0, 3491, 0, 0, 128219, 3514, 65485, 0, 7492, 0, 74605, 
-    92483, 7514, 983360, 0, 194731, 7502, 7587, 68353, 0, 0, 63925, 0, 7610, 
+    92483, 7514, 983367, 0, 194731, 7502, 7587, 68353, 0, 0, 63925, 0, 7610, 
     219, 0, 0, 692, 43588, 74433, 41635, 43241, 9688, 7147, 9535, 0, 93991, 
     0, 64530, 0, 64610, 11804, 0, 7149, 7453, 0, 8013, 0, 92301, 0, 8895, 
     5253, 70025, 5458, 0, 2866, 0, 127860, 65111, 68433, 6700, 120484, 0, 
-    120583, 0, 8962, 77960, 9641, 43694, 7059, 983668, 0, 9604, 78700, 7441, 
-    63826, 67970, 118941, 64392, 194735, 983678, 2844, 983932, 41974, 0, 
-    12139, 67971, 0, 0, 3358, 65295, 0, 3104, 194734, 0, 194765, 983228, 
+    120583, 0, 8962, 77960, 9641, 43694, 7059, 983677, 0, 9604, 78700, 7441, 
+    63826, 67970, 118941, 64392, 194735, 983687, 2844, 983941, 41974, 0, 
+    12139, 67971, 0, 0, 3358, 65295, 0, 3104, 194734, 0, 194765, 983233, 
     5308, 0, 290, 0, 0, 2862, 2792, 195088, 983070, 0, 3268, 66591, 0, 6552, 
     42367, 7035, 120558, 0, 0, 1814, 0, 10240, 92338, 74305, 0, 74528, 65903, 
     0, 42646, 7606, 2591, 2837, 4341, 77956, 64482, 127337, 8163, 65270, 0, 
     77932, 0, 9112, 74431, 863, 9490, 119898, 128349, 43323, 120513, 119897, 
     9071, 127333, 0, 3654, 7789, 9637, 0, 2535, 65504, 7653, 40993, 119899, 
-    66587, 195098, 0, 92401, 983885, 11006, 12927, 7807, 8073, 0, 10629, 0, 
+    66587, 195098, 0, 92401, 983894, 11006, 12927, 7807, 8073, 0, 10629, 0, 
     74088, 3056, 10823, 128797, 127327, 8762, 10508, 69689, 73770, 43969, 
     43193, 10737, 3463, 983065, 0, 66633, 8695, 4815, 11322, 5811, 12345, 
     7049, 119911, 5195, 195081, 0, 66639, 0, 0, 0, 128041, 0, 92385, 1262, 0, 
-    6561, 19939, 0, 0, 128535, 119906, 0, 0, 983097, 0, 983658, 119907, 
+    6561, 19939, 0, 0, 128535, 119906, 0, 0, 983097, 0, 983667, 119907, 
     64612, 11991, 0, 0, 0, 1502, 917568, 0, 9107, 127316, 5702, 3655, 67661, 
     8430, 0, 74132, 120758, 0, 74057, 9603, 0, 5254, 120742, 7724, 74388, 
     68375, 10796, 5129, 0, 0, 590, 7579, 5614, 5893, 92280, 11720, 92496, 
@@ -17829,17 +17846,17 @@
     0, 65558, 65946, 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 71345, 586, 
     74414, 64359, 1267, 128269, 65468, 0, 65731, 0, 127179, 3621, 120473, 
     66666, 64211, 0, 6562, 12928, 0, 1228, 65490, 11383, 0, 0, 0, 1714, 
-    74406, 127831, 0, 983912, 0, 66225, 0, 0, 42660, 11436, 2070, 64, 120694, 
+    74406, 127831, 0, 983921, 0, 66225, 0, 0, 42660, 11436, 2070, 64, 120694, 
     0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 42710, 0, 42011, 41999, 
-    92164, 12206, 5839, 1702, 1240, 74065, 6286, 0, 983960, 65833, 77848, 0, 
+    92164, 12206, 5839, 1702, 1240, 74065, 6286, 0, 983969, 65833, 77848, 0, 
     1765, 0, 0, 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 194704, 10479, 
     64959, 2852, 0, 0, 0, 0, 128586, 917951, 6963, 0, 12667, 64540, 74786, 
     10147, 12935, 127568, 126483, 0, 0, 0, 78757, 0, 0, 0, 0, 9994, 12467, 
     2864, 64719, 1148, 10435, 11462, 41675, 7084, 2765, 0, 43382, 0, 120719, 
     128188, 92516, 66662, 0, 78133, 9364, 194685, 74416, 0, 0, 77988, 263, 
-    10449, 41288, 0, 41839, 78387, 983733, 77986, 0, 6931, 69722, 64355, 
+    10449, 41288, 0, 41839, 78387, 983742, 77986, 0, 6931, 69722, 64355, 
     7177, 70105, 0, 0, 0, 4262, 10285, 10722, 42020, 126575, 6806, 6992, 
-    42019, 0, 41290, 983707, 750, 0, 71304, 10163, 63913, 71300, 7032, 5954, 
+    42019, 0, 41290, 983716, 750, 0, 71304, 10163, 63913, 71300, 7032, 5954, 
     64931, 4314, 0, 198, 68453, 730, 120094, 63907, 77993, 78891, 13165, 
     7107, 74171, 42804, 678, 8240, 78015, 128784, 41378, 11008, 6938, 70026, 
     92637, 2097, 66246, 120560, 0, 0, 0, 3892, 68632, 69642, 6712, 66045, 
@@ -17847,31 +17864,31 @@
     69669, 43254, 73831, 0, 10293, 5952, 1281, 43747, 0, 0, 10677, 604, 
     41097, 9182, 1859, 0, 92603, 3425, 127488, 0, 2836, 0, 0, 9707, 0, 43202, 
     0, 0, 65199, 1738, 917818, 128158, 2832, 92702, 9670, 12937, 0, 66374, 
-    917956, 0, 2822, 68122, 4436, 92519, 983714, 73752, 0, 64872, 92340, 
+    917956, 0, 2822, 68122, 4436, 92519, 983723, 73752, 0, 64872, 92340, 
     1331, 0, 0, 0, 12708, 0, 5090, 5089, 127977, 0, 119109, 0, 128681, 319, 
     118847, 43479, 9477, 0, 0, 5087, 92325, 7640, 96, 5086, 0, 92379, 0, 
     5085, 64286, 92665, 0, 41422, 0, 119901, 42356, 3772, 0, 0, 5011, 0, 0, 
     126587, 0, 127165, 127241, 6677, 7601, 0, 591, 64419, 118953, 92262, 0, 
     118923, 70084, 0, 10939, 6106, 6933, 41271, 6760, 71343, 4534, 41270, 
     128876, 0, 65574, 0, 9224, 69853, 3671, 8976, 126474, 0, 41275, 6372, 
-    128084, 55261, 7963, 6371, 0, 568, 0, 41273, 983721, 0, 6728, 0, 9715, 0, 
+    128084, 55261, 7963, 6371, 0, 568, 0, 41273, 983730, 0, 6728, 0, 9715, 0, 
     8258, 11753, 74820, 0, 9602, 118919, 42, 0, 43688, 0, 0, 7458, 0, 0, 
     65385, 119900, 0, 11958, 0, 917822, 0, 6254, 42721, 66336, 8045, 11550, 
     0, 0, 983597, 42858, 11789, 65868, 5557, 10133, 9737, 13109, 0, 9467, 
     5558, 8878, 128136, 195036, 7451, 6706, 10146, 0, 9086, 64566, 0, 64584, 
     7437, 7454, 12594, 128690, 68362, 4546, 7731, 0, 70048, 74243, 0, 3805, 
-    0, 194565, 44001, 41008, 0, 6307, 19949, 983781, 7544, 983045, 43469, 0, 
+    0, 194565, 44001, 41008, 0, 6307, 19949, 983790, 7544, 983045, 43469, 0, 
     0, 10152, 64422, 65091, 119113, 7602, 64729, 0, 43521, 0, 42302, 43711, 
     43523, 41447, 5559, 0, 8704, 2397, 5556, 0, 0, 0, 9011, 9630, 92633, 0, 
     93998, 5506, 0, 1911, 66652, 0, 9961, 8845, 66698, 0, 10792, 8889, 0, 
-    2098, 0, 64751, 0, 66622, 0, 0, 74364, 0, 0, 983796, 74365, 7552, 0, 0, 
+    2098, 0, 64751, 0, 66622, 0, 0, 74364, 0, 0, 983805, 74365, 7552, 0, 0, 
     65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, 64501, 1210, 195077, 
-    65175, 10184, 43140, 43654, 0, 0, 0, 38, 8533, 66669, 119124, 983286, 
-    983783, 0, 4357, 0, 119837, 917863, 74233, 9967, 78884, 42860, 119838, 
+    65175, 10184, 43140, 43654, 0, 0, 0, 38, 8533, 66669, 119124, 983293, 
+    983792, 0, 4357, 0, 119837, 917863, 74233, 9967, 78884, 42860, 119838, 
     10941, 65721, 6962, 0, 0, 119324, 0, 11014, 127972, 8942, 12000, 69224, 
     92267, 128536, 11974, 92213, 42772, 127518, 11650, 5013, 92663, 126583, 
-    66210, 118914, 6613, 92476, 0, 43819, 983761, 0, 64714, 0, 0, 12162, 
-    12120, 43476, 983757, 11024, 74811, 66228, 10563, 0, 127196, 43522, 2462, 
+    66210, 118914, 6613, 92476, 0, 43819, 983770, 0, 64714, 0, 0, 12162, 
+    12120, 43476, 983766, 11024, 74811, 66228, 10563, 0, 127196, 43522, 2462, 
     0, 1837, 0, 63972, 6957, 0, 120559, 4952, 65718, 65827, 5504, 65720, 
     65714, 65715, 65716, 0, 127005, 127119, 3109, 63975, 74028, 0, 8107, 
     119234, 1127, 455, 0, 63968, 127924, 3483, 119593, 1989, 0, 69678, 9104, 
@@ -17884,7 +17901,7 @@
     41869, 12619, 0, 10154, 983043, 74439, 2039, 0, 7446, 1684, 63979, 10974, 
     458, 120620, 0, 69791, 127161, 11916, 65016, 0, 69671, 42115, 983133, 
     12288, 78057, 0, 1493, 42111, 7553, 4097, 128199, 13080, 0, 65808, 6610, 
-    6030, 8059, 7508, 13131, 0, 983424, 0, 8794, 41278, 41629, 12154, 128192, 
+    6030, 8059, 7508, 13131, 0, 983431, 0, 8794, 41278, 41629, 12154, 128192, 
     41277, 64658, 0, 64380, 6625, 74354, 19904, 0, 0, 0, 65371, 7078, 0, 833, 
     0, 6369, 0, 10979, 41953, 0, 41434, 6062, 0, 0, 19916, 6913, 933, 1341, 
     9842, 6720, 65744, 0, 983592, 128295, 0, 7405, 10105, 65810, 0, 41632, 
@@ -17899,23 +17916,23 @@
     6741, 43047, 0, 13180, 128517, 418, 917972, 64495, 10295, 10327, 10391, 
     41752, 74339, 8641, 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, 
     41751, 69776, 8941, 983556, 4554, 0, 9023, 11685, 0, 9928, 78617, 0, 
-    11437, 43741, 92163, 120700, 63967, 983476, 41206, 120724, 9049, 41185, 
+    11437, 43741, 92163, 120700, 63967, 983483, 41206, 120724, 9049, 41185, 
     43166, 0, 11680, 92619, 11686, 78544, 65224, 4565, 4655, 119553, 0, 
     92183, 64523, 10343, 10407, 0, 66671, 11466, 0, 128003, 42890, 74013, 
     12050, 68201, 2860, 0, 0, 0, 42792, 5743, 10424, 12065, 42872, 0, 92342, 
     0, 8875, 0, 0, 917991, 7531, 12847, 2413, 0, 78635, 962, 0, 12855, 41196, 
-    42564, 0, 1582, 983706, 5508, 0, 0, 0, 10801, 69876, 92354, 0, 7173, 496, 
+    42564, 0, 1582, 983715, 5508, 0, 0, 0, 10801, 69876, 92354, 0, 7173, 496, 
     10439, 4313, 64607, 69638, 7860, 0, 906, 42793, 2842, 6405, 64722, 13132, 
     798, 64694, 12801, 8406, 1153, 92173, 64788, 0, 8054, 9174, 128652, 
     917976, 9964, 74409, 41611, 4642, 66574, 11556, 917982, 0, 78857, 42089, 
     78855, 9008, 0, 126592, 195096, 42079, 917981, 77924, 42513, 77927, 
-    42842, 73985, 65285, 118974, 127003, 983693, 0, 0, 0, 11335, 64069, 
-    42093, 3920, 0, 0, 0, 0, 4580, 41967, 983723, 64384, 92167, 93984, 3021, 
+    42842, 73985, 65285, 118974, 127003, 983702, 0, 0, 0, 11335, 64069, 
+    42093, 3920, 0, 0, 0, 0, 4580, 41967, 983732, 64384, 92167, 93984, 3021, 
     42004, 0, 0, 42317, 41998, 0, 6946, 0, 0, 0, 128193, 65204, 0, 68113, 
     42690, 9880, 42010, 74824, 64589, 10111, 64875, 127880, 68399, 43998, 
     11360, 0, 0, 0, 118826, 42149, 0, 0, 0, 64941, 77919, 120421, 128077, 0, 
     55247, 4110, 66005, 6959, 10929, 119110, 0, 66703, 77921, 8617, 41982, 
-    6025, 69242, 983176, 0, 0, 0, 9597, 42099, 43172, 983369, 10117, 983169, 
+    6025, 69242, 983176, 0, 0, 0, 9597, 42099, 43172, 983376, 10117, 983169, 
     92297, 41636, 0, 0, 120681, 8301, 0, 0, 187, 0, 65669, 128339, 4963, 0, 
     127517, 0, 8964, 65676, 7775, 0, 41948, 0, 0, 0, 41942, 65449, 3160, 
     10081, 13226, 42121, 42475, 42663, 128210, 41766, 119114, 65882, 78849, 
@@ -17925,20 +17942,20 @@
     3103, 0, 41753, 128540, 0, 0, 78844, 78845, 41739, 78843, 42515, 10931, 
     41756, 43347, 42560, 5391, 41746, 119147, 92591, 41259, 5561, 69930, 
     2691, 0, 65553, 7933, 5562, 69800, 128265, 41262, 128146, 64421, 74846, 
-    41251, 0, 0, 3979, 0, 0, 74813, 983730, 0, 0, 0, 92524, 41266, 0, 66566, 
+    41251, 0, 0, 3979, 0, 0, 74813, 983739, 0, 0, 0, 92524, 41266, 0, 66566, 
     128836, 10585, 65741, 41737, 9574, 2666, 0, 41738, 831, 419, 13126, 
     10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 128106, 69932, 916, 769, 
     41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 
     126537, 4497, 3754, 127056, 120424, 9039, 0, 41776, 0, 8716, 1595, 41615, 
-    0, 0, 74260, 0, 42854, 43219, 128709, 983453, 12185, 128879, 70072, 
-    68355, 68357, 0, 42856, 8634, 0, 983390, 4209, 120702, 0, 65879, 41538, 
-    65612, 127543, 669, 5679, 0, 69786, 92540, 0, 983457, 5678, 11821, 0, 
-    6711, 460, 0, 0, 983454, 0, 120747, 0, 0, 78050, 119022, 0, 983455, 0, 
+    0, 0, 74260, 0, 42854, 43219, 128709, 983460, 12185, 128879, 70072, 
+    68355, 68357, 0, 42856, 8634, 0, 983397, 4209, 120702, 0, 65879, 41538, 
+    65612, 127543, 669, 5679, 0, 69786, 92540, 0, 983464, 5678, 11821, 0, 
+    6711, 460, 0, 0, 983461, 0, 120747, 0, 0, 78050, 119022, 0, 983462, 0, 
     7782, 9044, 4974, 11760, 78494, 7577, 65711, 41912, 1216, 0, 128079, 
-    5792, 0, 0, 78501, 0, 2933, 12244, 0, 5683, 983385, 0, 78119, 1549, 0, 0, 
+    5792, 0, 0, 78501, 0, 2933, 12244, 0, 5683, 983392, 0, 78119, 1549, 0, 0, 
     120398, 5682, 6206, 8670, 10256, 5680, 69935, 10001, 128512, 69768, 1449, 
     10241, 78290, 128228, 0, 10552, 64342, 41922, 128548, 8584, 68030, 5567, 
-    2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 983249, 128026, 0, 65708, 
+    2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 983256, 128026, 0, 65708, 
     65709, 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468, 
     120561, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 
     78702, 78703, 78690, 457, 78502, 65701, 1934, 43006, 119903, 8802, 78710, 
@@ -17952,14 +17969,14 @@
     119570, 42239, 8536, 78740, 78324, 78726, 74432, 724, 0, 1455, 78749, 
     7183, 64583, 78747, 68443, 4175, 78741, 43614, 69801, 939, 0, 43520, 
     68613, 74569, 917958, 0, 78763, 78764, 78760, 10788, 6088, 78759, 78755, 
-    190, 0, 12593, 0, 8188, 64408, 0, 4417, 983212, 92261, 6370, 0, 7827, 
+    190, 0, 12593, 0, 8188, 64408, 0, 4417, 983213, 92261, 6370, 0, 7827, 
     68441, 6965, 0, 0, 13201, 128205, 69896, 0, 74382, 73781, 7918, 73988, 0, 
-    0, 917884, 1728, 0, 43764, 178, 12972, 92679, 0, 917887, 92563, 983374, 
+    0, 917884, 1728, 0, 43764, 178, 12972, 92679, 0, 917887, 92563, 983381, 
     0, 78327, 120405, 65690, 0, 0, 119054, 0, 9252, 917889, 4652, 68371, 0, 
     0, 0, 13065, 9923, 10806, 0, 11763, 70016, 120688, 6723, 78187, 0, 6993, 
-    0, 0, 8333, 0, 0, 11390, 0, 74464, 0, 92320, 74080, 983308, 69911, 11910, 
+    0, 0, 8333, 0, 0, 11390, 0, 74464, 0, 92320, 74080, 983315, 69911, 11910, 
     92559, 8278, 8963, 4034, 128560, 0, 65344, 120517, 41747, 0, 0, 8677, 0, 
-    12707, 9350, 66037, 128180, 8836, 12315, 12747, 8300, 983741, 0, 7491, 
+    12707, 9350, 66037, 128180, 8836, 12315, 12747, 8300, 983750, 0, 7491, 
     8856, 71361, 0, 43150, 127768, 120404, 65389, 120402, 120403, 10813, 
     2592, 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321, 
     120391, 120388, 55287, 10007, 120246, 9588, 120248, 1596, 120383, 41994, 
@@ -17984,27 +18001,27 @@
     116, 12998, 122, 121, 120, 111, 110, 109, 108, 115, 114, 113, 112, 103, 
     102, 101, 100, 107, 106, 105, 104, 6436, 73974, 534, 41212, 77931, 1536, 
     64093, 73970, 77930, 127157, 0, 6020, 12716, 127112, 12744, 475, 120394, 
-    13266, 127813, 127111, 0, 73926, 0, 10645, 1212, 6543, 983300, 8134, 
-    128028, 2913, 73870, 127113, 1866, 0, 195095, 0, 8923, 1645, 12059, 
+    13266, 127813, 127111, 0, 73926, 0, 10645, 1212, 6543, 983307, 8134, 
+    128028, 2913, 73870, 127113, 1866, 983229, 195095, 0, 8923, 1645, 12059, 
     66585, 71297, 3196, 0, 0, 5935, 1250, 127066, 8174, 9787, 6733, 9859, 
     7916, 9861, 9860, 5258, 1882, 1892, 6731, 10882, 405, 11454, 73911, 0, 
     128781, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, 12157, 0, 0, 0, 
-    41172, 7855, 0, 0, 10480, 0, 0, 77936, 8264, 12610, 983301, 645, 126616, 
+    41172, 7855, 0, 0, 10480, 0, 0, 77936, 8264, 12610, 983308, 645, 126616, 
     7609, 40973, 69943, 73833, 69948, 5824, 984, 77918, 10688, 5851, 0, 7729, 
     73982, 120518, 0, 195086, 43369, 0, 128140, 68415, 983093, 4538, 120406, 
-    43141, 0, 983209, 74214, 73886, 0, 0, 118902, 43005, 78448, 9552, 0, 0, 
+    43141, 0, 983210, 74214, 73886, 0, 0, 118902, 43005, 78448, 9552, 0, 0, 
     983159, 12997, 0, 0, 0, 0, 2381, 12883, 10994, 10529, 41906, 0, 0, 0, 
     12425, 10661, 10856, 9614, 2428, 41478, 8582, 10064, 73930, 0, 0, 0, 
-    64896, 119162, 1952, 92181, 8455, 10082, 11575, 983483, 119566, 0, 12808, 
+    64896, 119162, 1952, 92181, 8455, 10082, 11575, 983490, 119566, 0, 12808, 
     12183, 6145, 118955, 64929, 92433, 0, 983193, 43186, 42509, 0, 3922, 
     9187, 983614, 0, 10191, 119057, 11752, 3353, 9358, 0, 71366, 66680, 
-    120090, 8248, 7931, 8558, 9795, 68380, 983290, 0, 120082, 120081, 120084, 
+    120090, 8248, 7931, 8558, 9795, 68380, 983297, 0, 120082, 120081, 120084, 
     41027, 120086, 0, 120088, 7366, 7019, 120073, 0, 11751, 120078, 78294, 
     64657, 8657, 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 
     43154, 41029, 0, 11332, 65380, 7728, 94077, 11294, 0, 66665, 7851, 0, 
-    8375, 8699, 0, 42524, 0, 9085, 94041, 7504, 9327, 6160, 128095, 983855, 
+    8375, 8699, 0, 42524, 0, 9085, 94041, 7504, 9327, 6160, 128095, 983864, 
     0, 8088, 0, 74012, 92500, 0, 4439, 6926, 983047, 12924, 128227, 42369, 
-    4350, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 983276, 0, 0, 
+    4350, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 983283, 0, 0, 
     65825, 9577, 68199, 0, 64670, 983121, 78056, 6793, 11295, 0, 78053, 
     73872, 0, 0, 10902, 0, 0, 78070, 78068, 10472, 2995, 0, 0, 64682, 2371, 
     78069, 120808, 259, 1009, 92171, 2402, 2333, 6440, 194741, 0, 65125, 
@@ -18012,19 +18029,19 @@
     127070, 41261, 119362, 43640, 8613, 0, 94049, 6736, 195092, 41492, 12005, 
     69927, 0, 1890, 120056, 0, 0, 0, 7293, 7991, 0, 10578, 0, 78076, 194738, 
     78077, 69928, 0, 78800, 92653, 64445, 42668, 6635, 0, 6164, 65170, 0, 0, 
-    7676, 11664, 0, 983649, 69707, 0, 118812, 0, 0, 128045, 9175, 11925, 
+    7676, 11664, 0, 983658, 69707, 0, 118812, 0, 0, 128045, 9175, 11925, 
     78045, 9088, 0, 64545, 1396, 0, 7546, 3847, 127177, 127835, 4985, 13288, 
     672, 8098, 43196, 194746, 983096, 128126, 42655, 74043, 65072, 1577, 
     11772, 13041, 5928, 4525, 10658, 65911, 1266, 10180, 0, 128584, 12622, 0, 
     0, 0, 194714, 127139, 13310, 773, 19933, 1539, 0, 126983, 42731, 67972, 
     0, 0, 0, 3051, 5862, 7823, 92478, 0, 120411, 3250, 43991, 69687, 66649, 
-    9510, 66237, 983295, 0, 41066, 64673, 917963, 917964, 0, 3505, 8707, 
+    9510, 66237, 983302, 0, 41066, 64673, 917963, 917964, 0, 3505, 8707, 
     917968, 6725, 128013, 917971, 92314, 3471, 917970, 5479, 882, 6686, 
-    119584, 11613, 120772, 42754, 0, 983299, 92696, 0, 0, 0, 128523, 3225, 
+    119584, 11613, 120772, 42754, 0, 983306, 92696, 0, 0, 0, 128523, 3225, 
     917996, 4433, 41156, 43973, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 
     64879, 917949, 917950, 127848, 13227, 0, 10021, 5160, 1387, 0, 917953, 
     41418, 0, 65914, 6721, 217, 917955, 917960, 917961, 10443, 10789, 41158, 
-    119257, 4274, 983293, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232, 
+    119257, 4274, 983300, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232, 
     0, 41252, 66682, 0, 119637, 41249, 1366, 64635, 65047, 12466, 0, 0, 4397, 
     128037, 128336, 41296, 9545, 41291, 128049, 0, 41485, 3511, 41282, 5923, 
     10400, 0, 128818, 760, 0, 12088, 5786, 0, 42256, 119869, 119860, 417, 
@@ -18034,15 +18051,15 @@
     119576, 0, 0, 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 69845, 
     120794, 7840, 0, 43630, 10252, 0, 128104, 43185, 0, 4396, 0, 119880, 
     10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025, 
-    10299, 0, 0, 120608, 66326, 983440, 127794, 0, 43811, 9330, 120596, 7222, 
-    10283, 10315, 10379, 4996, 983773, 13281, 66517, 7865, 10087, 78343, 0, 
+    10299, 0, 0, 120608, 66326, 983447, 127794, 0, 43811, 9330, 120596, 7222, 
+    10283, 10315, 10379, 4996, 983782, 13281, 66517, 7865, 10087, 78343, 0, 
     78347, 0, 0, 7565, 66363, 12952, 64806, 43180, 77928, 7414, 77929, 43982, 
     74288, 622, 74023, 885, 43405, 1602, 0, 0, 852, 0, 12160, 0, 10212, 
     65435, 0, 12071, 9609, 12156, 917983, 917984, 43586, 11035, 10411, 
     917988, 10255, 6710, 10279, 4194, 10375, 73900, 0, 4315, 12644, 127516, 
     77937, 43639, 43343, 78777, 917998, 11501, 41177, 128689, 0, 917792, 0, 
     92413, 8715, 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, 127103, 
-    73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 77943, 4186, 92531, 127106, 
+    73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 77943, 4186, 92531, 119967, 
     127105, 6718, 0, 4406, 74601, 8480, 9192, 9747, 126530, 4413, 92196, 
     42268, 3198, 5924, 5920, 92469, 6921, 78081, 74007, 42869, 8418, 11681, 
     43169, 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682, 
@@ -18065,7 +18082,7 @@
     7830, 11651, 13093, 64002, 0, 65742, 12874, 119597, 11590, 0, 74048, 
     128350, 8595, 0, 917947, 43703, 13097, 0, 64643, 13283, 12697, 0, 12381, 
     3488, 5933, 10033, 73738, 66241, 65570, 0, 12297, 119153, 1955, 0, 5349, 
-    42538, 0, 0, 7411, 9462, 917554, 0, 0, 0, 42736, 0, 5756, 983220, 7638, 
+    42538, 0, 0, 7411, 9462, 917554, 0, 0, 0, 42736, 0, 5756, 983221, 7638, 
     41642, 42764, 0, 43109, 7637, 5752, 74037, 0, 73832, 128827, 120635, 
     128231, 78334, 0, 7636, 65171, 9124, 0, 78892, 120798, 291, 0, 0, 2027, 
     66230, 10080, 78136, 10403, 0, 4640, 64713, 10224, 120429, 42512, 120431, 
@@ -18077,17 +18094,17 @@
     78270, 127982, 983172, 64728, 0, 78673, 78674, 1659, 919, 42784, 1671, 
     195089, 6069, 9219, 128558, 1661, 13120, 63784, 69819, 10140, 9713, 
     119143, 0, 0, 94050, 2306, 10485, 118943, 6068, 10612, 195099, 119567, 
-    195101, 92561, 41462, 120470, 195079, 5422, 128234, 0, 0, 0, 10229, 
+    195101, 92561, 41462, 120470, 195079, 5422, 128234, 983629, 0, 0, 10229, 
     10635, 826, 128081, 195082, 195085, 195084, 195087, 6483, 92211, 1808, 
     7848, 0, 8100, 78227, 78669, 78670, 13301, 78667, 9667, 78665, 78872, 0, 
     11003, 9904, 0, 0, 120690, 9144, 10921, 0, 78680, 9840, 65131, 78678, 
     77841, 10313, 0, 0, 64320, 10265, 78686, 10962, 78684, 43008, 8945, 
     78683, 0, 41, 195072, 1792, 120515, 195073, 8655, 195075, 92544, 77951, 
-    12066, 0, 385, 4152, 2585, 127804, 119068, 3126, 0, 74136, 10957, 983694, 
+    12066, 0, 385, 4152, 2585, 127804, 119068, 3126, 0, 74136, 10957, 983703, 
     43258, 119116, 127873, 13157, 0, 917544, 3570, 0, 7443, 0, 44006, 6997, 
     68004, 126631, 7879, 8739, 11075, 0, 65216, 0, 69795, 2593, 8463, 7810, 
     917862, 7839, 119913, 78806, 119912, 9691, 4411, 78802, 0, 0, 43442, 
-    69851, 65254, 10066, 983880, 0, 0, 0, 13061, 8016, 78687, 19932, 64831, 
+    69851, 65254, 10066, 983889, 0, 0, 0, 13061, 8016, 78687, 19932, 64831, 
     0, 119923, 12390, 119171, 1634, 68115, 0, 11056, 983574, 119925, 0, 
     41165, 11328, 12450, 0, 41166, 0, 12456, 119914, 171, 5941, 12452, 
     194709, 12458, 12531, 78779, 43013, 63800, 74162, 127569, 120483, 9969, 
@@ -18102,7 +18119,7 @@
     13244, 120466, 42167, 7435, 78193, 5380, 119086, 69225, 1155, 11365, 
     43126, 77972, 0, 65684, 0, 5601, 65192, 42765, 63752, 0, 7987, 128543, 
     1172, 69799, 6786, 43601, 120476, 74126, 5603, 0, 4473, 0, 194823, 0, 
-    65347, 65346, 65345, 0, 127384, 5347, 69802, 983623, 73868, 118944, 
+    65347, 65346, 65345, 0, 127384, 5347, 69802, 983632, 73868, 118944, 
     10588, 0, 0, 63755, 0, 5343, 78422, 120661, 4555, 5341, 0, 70071, 128670, 
     5351, 78675, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, 
     917888, 127510, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, 
@@ -18112,14 +18129,14 @@
     0, 4916, 0, 380, 10958, 66563, 77955, 69773, 9773, 13167, 12918, 41096, 
     73980, 69245, 78254, 917893, 10684, 0, 917896, 0, 7946, 12541, 8182, 
     67586, 69780, 0, 0, 0, 0, 9005, 1225, 6630, 0, 0, 0, 68011, 8847, 0, 
-    65876, 5535, 8329, 74590, 983207, 92609, 0, 0, 3127, 2595, 65713, 42013, 
-    983849, 5607, 41089, 0, 0, 74256, 2665, 11304, 43751, 74200, 4970, 8764, 
+    65876, 5535, 8329, 74590, 983208, 92609, 0, 0, 3127, 2595, 65713, 42013, 
+    983858, 5607, 41089, 0, 0, 74256, 2665, 11304, 43751, 74200, 4970, 8764, 
     120459, 8934, 92726, 41566, 4492, 0, 65011, 41090, 0, 0, 1188, 7254, 
     1100, 0, 128301, 41081, 2912, 11749, 69792, 0, 68019, 3572, 10023, 4959, 
-    13079, 0, 983269, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450, 
-    13304, 128290, 127260, 41451, 0, 11095, 8273, 127533, 3451, 983302, 972, 
-    41453, 983435, 0, 73883, 68022, 73945, 983726, 2288, 19955, 9538, 0, 
-    69807, 0, 0, 0, 0, 11396, 983433, 11019, 0, 0, 0, 68020, 41078, 71365, 
+    13079, 0, 983276, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450, 
+    13304, 128290, 127260, 41451, 0, 11095, 8273, 127533, 3451, 983309, 972, 
+    41453, 983442, 0, 73883, 68022, 73945, 983735, 2288, 19955, 9538, 0, 
+    69807, 0, 0, 0, 0, 11396, 983440, 11019, 0, 0, 0, 68020, 41078, 71365, 
     261, 5927, 7791, 0, 7362, 0, 10696, 0, 6073, 9838, 118920, 0, 6075, 
     93995, 282, 126510, 6437, 74078, 128000, 9801, 0, 74177, 0, 0, 3474, 
     118787, 0, 120655, 6081, 0, 78874, 74076, 78879, 0, 0, 0, 0, 0, 8751, 
@@ -18140,7 +18157,7 @@
     4564, 0, 0, 74271, 73753, 8374, 983156, 0, 6829, 5225, 128807, 127385, 0, 
     0, 119615, 0, 74793, 5626, 73807, 11771, 74075, 127236, 128019, 42614, 
     5353, 5625, 74179, 0, 0, 1010, 64572, 41780, 42623, 64277, 69942, 6952, 
-    983265, 120752, 78762, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 
+    983272, 120752, 78762, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 
     120038, 120027, 120028, 120025, 5628, 120031, 970, 120029, 4772, 2400, 
     5627, 120017, 120018, 120023, 64275, 120021, 8786, 0, 203, 0, 0, 0, 0, 
     78350, 0, 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 
@@ -18152,9 +18169,9 @@
     1168, 9251, 9082, 119964, 64055, 42781, 3866, 12323, 41512, 73805, 68121, 
     0, 41494, 92316, 4660, 0, 10405, 0, 78803, 0, 0, 42040, 73918, 119627, 
     7944, 41454, 12605, 0, 42205, 41455, 236, 64051, 78867, 8214, 0, 0, 0, 
-    41457, 983961, 119589, 1969, 2384, 8097, 917864, 7413, 68012, 78029, 
+    41457, 983970, 119589, 1969, 2384, 8097, 917864, 7413, 68012, 78029, 
     8766, 0, 78079, 5854, 127974, 10583, 0, 119989, 0, 10416, 917869, 3872, 
-    917868, 0, 8429, 0, 118806, 2838, 128802, 0, 917866, 0, 0, 0, 983958, 
+    917868, 0, 8429, 0, 118806, 2838, 128802, 0, 917866, 0, 0, 0, 983967, 
     94005, 11096, 120813, 10553, 1662, 8483, 120396, 43605, 5892, 43418, 0, 
     73742, 66, 65, 68, 67, 70, 69, 72, 71, 74, 73, 76, 75, 78, 77, 80, 79, 
     82, 81, 84, 83, 86, 85, 88, 87, 90, 89, 119862, 10357, 7385, 8170, 1704, 
@@ -18169,7 +18186,7 @@
     12472, 0, 69864, 7699, 12393, 0, 0, 0, 74518, 8223, 0, 4261, 0, 0, 0, 0, 
     0, 128302, 0, 128046, 43419, 0, 64554, 10574, 3878, 0, 42352, 1752, 
     73785, 0, 42506, 128541, 10199, 0, 0, 68021, 65919, 0, 6695, 720, 324, 0, 
-    0, 43406, 983727, 1464, 40985, 0, 7974, 0, 43474, 0, 64488, 0, 0, 64041, 
+    0, 43406, 983736, 1464, 40985, 0, 7974, 0, 43474, 0, 64488, 0, 0, 64041, 
     74787, 0, 78865, 92258, 65597, 0, 78863, 0, 1302, 0, 78861, 119134, 0, 0, 
     5204, 74774, 43404, 11835, 0, 3995, 68360, 65608, 3714, 92190, 0, 0, 
     10999, 11750, 0, 43251, 68660, 43301, 0, 120557, 8130, 8672, 10845, 
@@ -18177,22 +18194,22 @@
     612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 983163, 12280, 0, 540, 
     74564, 119017, 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667, 
     0, 64684, 126992, 3359, 7800, 69934, 65177, 6226, 353, 12396, 0, 119612, 
-    64742, 128682, 120282, 0, 983443, 12412, 19941, 0, 120277, 78847, 1884, 
+    64742, 128682, 120282, 0, 983450, 12412, 19941, 0, 120277, 78847, 1884, 
     9481, 42418, 70059, 41157, 0, 1195, 64898, 7924, 0, 41151, 2010, 0, 
     41328, 42344, 0, 12409, 0, 4360, 127009, 9739, 128550, 69933, 73921, 0, 
-    42521, 8539, 983716, 0, 118986, 0, 4788, 0, 68023, 65734, 983448, 43790, 
+    42521, 8539, 983725, 0, 118986, 0, 4788, 0, 68023, 65734, 983455, 43790, 
     0, 13075, 74429, 94063, 64569, 43532, 10837, 2492, 127197, 118901, 68637, 
     41136, 43785, 11813, 9649, 41154, 119617, 5128, 4038, 41143, 65604, 
     64859, 41592, 6771, 1648, 5435, 917837, 6734, 41343, 119848, 65439, 
     12709, 6986, 92364, 68015, 0, 41349, 70021, 12581, 10374, 5175, 0, 73806, 
     10254, 0, 10278, 10262, 69858, 41346, 0, 607, 0, 119852, 128846, 12923, 
     10314, 10282, 65477, 10378, 120297, 40976, 8265, 0, 119834, 40975, 5840, 
-    42838, 0, 40978, 983888, 119840, 0, 983071, 0, 66444, 10538, 0, 2550, 
+    42838, 0, 40978, 983897, 119840, 0, 983071, 0, 66444, 10538, 0, 2550, 
     119836, 6779, 0, 0, 3525, 6824, 118886, 0, 0, 5619, 65822, 126567, 
     194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0, 120551, 42380, 
     64895, 43693, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, 0, 11350, 
     5617, 0, 9225, 64639, 127073, 9145, 128060, 1338, 120581, 983158, 12739, 
-    4603, 3084, 983155, 92484, 9858, 6037, 0, 3974, 78213, 10290, 983695, 
+    4603, 3084, 983155, 92484, 9858, 6037, 0, 3974, 78213, 10290, 983704, 
     3083, 10322, 0, 0, 0, 41036, 0, 0, 43321, 65606, 0, 41032, 42388, 0, 
     64700, 10011, 1445, 40961, 0, 119105, 0, 40960, 0, 194891, 0, 40963, 
     64952, 10402, 0, 0, 92304, 10603, 0, 0, 983113, 0, 6714, 10083, 127069, 
@@ -18204,9 +18221,9 @@
     41976, 9720, 917606, 11767, 41970, 194596, 5836, 12358, 0, 4355, 9048, 
     12180, 65027, 64680, 13038, 43699, 0, 41488, 128087, 8527, 194917, 12362, 
     12435, 12360, 41053, 3266, 0, 12356, 8616, 41466, 0, 92588, 11450, 0, 
-    3638, 12354, 0, 3216, 0, 2358, 92606, 8633, 0, 983736, 119182, 69244, 0, 
+    3638, 12354, 0, 3216, 0, 2358, 92606, 8633, 0, 983745, 119182, 69244, 0, 
     0, 11759, 194903, 6368, 74823, 0, 41423, 8078, 10504, 127558, 41698, 
-    42237, 0, 7002, 983669, 41430, 42267, 41051, 41484, 0, 0, 41050, 41473, 
+    42237, 0, 7002, 983678, 41430, 42267, 41051, 41484, 0, 0, 41050, 41473, 
     10466, 13099, 0, 0, 0, 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, 3625, 
     78157, 41409, 0, 69639, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, 
     41424, 917598, 120546, 0, 128212, 0, 41417, 1261, 0, 0, 12102, 119662, 
@@ -18216,9 +18233,9 @@
     41461, 128823, 0, 127912, 0, 8819, 12663, 0, 41184, 74014, 232, 74835, 
     120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 68425, 0, 1064, 42467, 
     128044, 10115, 19924, 92711, 0, 7862, 64551, 13224, 8516, 41862, 66650, 
-    7561, 78618, 69793, 1878, 0, 983262, 2911, 0, 41178, 5427, 64823, 0, 0, 
+    7561, 78618, 69793, 1878, 0, 983269, 2911, 0, 41178, 5427, 64823, 0, 0, 
     3787, 41174, 0, 41458, 0, 41463, 42413, 11292, 2406, 775, 0, 65584, 
-    69923, 6074, 9618, 128668, 983943, 43440, 0, 194901, 41436, 3656, 0, 
+    69923, 6074, 9618, 128668, 983952, 43440, 0, 194901, 41436, 3656, 0, 
     120600, 41456, 0, 1599, 11333, 0, 6703, 8513, 0, 1613, 0, 68456, 12598, 
     983191, 120734, 78745, 74500, 41460, 10145, 10542, 9937, 78746, 70029, 
     9905, 0, 65730, 0, 120374, 8427, 120375, 55246, 120376, 0, 11497, 64687, 
@@ -18238,21 +18255,21 @@
     41287, 92610, 0, 0, 42219, 128257, 0, 41987, 41676, 983059, 120823, 
     983144, 41670, 0, 92590, 2796, 55291, 11683, 9902, 74521, 67988, 11451, 
     983111, 128822, 42631, 2359, 0, 67844, 74164, 41238, 548, 11405, 13133, 
-    64368, 983234, 128795, 0, 397, 43622, 42139, 9547, 9590, 128238, 1614, 
+    64368, 983239, 128795, 0, 397, 43622, 42139, 9547, 9590, 128238, 1614, 
     43661, 64356, 66307, 6651, 1358, 0, 428, 9620, 1466, 78112, 10982, 
     118831, 1333, 7104, 407, 6425, 128834, 74253, 0, 0, 0, 5804, 11976, 8554, 
     92721, 0, 0, 9057, 42294, 41218, 0, 0, 78137, 1883, 10952, 8048, 78142, 
-    41225, 92621, 42915, 983667, 128684, 0, 4407, 0, 65809, 119074, 194821, 
+    41225, 92621, 42915, 983676, 128684, 0, 4407, 0, 65809, 119074, 194821, 
     8448, 7141, 74183, 0, 12675, 12659, 0, 42363, 120624, 194824, 55273, 
     10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, 120500, 119158, 
     7140, 10977, 127378, 4164, 9081, 0, 120569, 42049, 42042, 8709, 128283, 
     126477, 120637, 42419, 64799, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 
-    983751, 74300, 0, 127308, 74840, 0, 0, 128791, 92224, 8736, 1414, 42643, 
+    983760, 74300, 0, 127308, 74840, 0, 0, 128791, 92224, 8736, 1414, 42643, 
     9683, 43486, 74344, 0, 2536, 0, 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 69945, 
     66315, 2106, 120222, 11273, 0, 43004, 7541, 0, 0, 961, 64307, 66324, 
     64906, 128591, 3106, 65917, 41284, 1696, 0, 891, 12105, 0, 42624, 12802, 
     3264, 8824, 13268, 43003, 10936, 0, 0, 0, 194826, 92688, 0, 2322, 120371, 
-    983584, 11449, 128187, 42868, 41285, 3547, 0, 0, 128793, 983391, 43216, 
+    983584, 11449, 128187, 42868, 41285, 3547, 0, 0, 128793, 983398, 43216, 
     6089, 78682, 0, 120578, 4170, 1029, 127761, 127036, 119224, 42374, 0, 
     744, 0, 0, 0, 65823, 127826, 0, 3551, 0, 0, 4623, 55268, 0, 4598, 983162, 
     65136, 127136, 0, 0, 10851, 0, 6179, 92602, 6180, 0, 11952, 120778, 
@@ -18262,10 +18279,10 @@
     2308, 0, 74149, 0, 2318, 983183, 66361, 8198, 0, 64360, 12601, 42536, 
     65266, 120827, 74307, 92462, 6970, 5404, 43332, 3667, 7936, 12925, 
     126989, 6385, 0, 0, 118949, 10874, 65505, 128083, 0, 42053, 2075, 42057, 
-    11083, 42052, 0, 0, 67651, 0, 9665, 92300, 983657, 13181, 0, 0, 0, 70088, 
-    74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, 94096, 983937, 
+    11083, 42052, 0, 0, 67651, 0, 9665, 92300, 983666, 13181, 0, 0, 0, 70088, 
+    74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, 94096, 983946, 
     41148, 8683, 7594, 127519, 0, 119090, 10869, 43458, 41146, 92407, 11441, 
-    0, 3512, 119633, 983700, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 
+    0, 3512, 119633, 983709, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 
     69742, 41544, 65146, 0, 0, 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 
     3271, 73804, 64711, 0, 94064, 0, 0, 3804, 13070, 11557, 42044, 0, 1095, 
     0, 3599, 127774, 0, 128861, 8514, 0, 0, 0, 74346, 66697, 0, 11684, 0, 
@@ -18274,23 +18291,23 @@
     0, 127772, 0, 917542, 0, 0, 6539, 0, 0, 0, 194856, 0, 120492, 41190, 
     3973, 119365, 4575, 41193, 7982, 429, 0, 127194, 0, 194854, 65792, 0, 
     118968, 6417, 118918, 78178, 0, 194850, 0, 0, 4919, 10590, 128556, 7755, 
-    0, 0, 64548, 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 983659, 
+    0, 0, 64548, 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 983668, 
     1617, 8050, 0, 5015, 0, 119174, 42590, 194871, 1756, 78181, 0, 65768, 
     6352, 41892, 0, 7555, 13103, 5408, 2817, 1214, 69919, 92335, 983125, 0, 
     0, 0, 127195, 7957, 8689, 64723, 1056, 42896, 74147, 194813, 0, 55286, 
-    7073, 65850, 12327, 983939, 119028, 0, 0, 0, 2341, 8450, 8484, 8474, 
-    983253, 0, 70079, 8461, 128102, 12153, 12799, 0, 43709, 43708, 9451, 
-    7571, 13073, 0, 0, 681, 983247, 703, 0, 3272, 8781, 12894, 70077, 11709, 
+    7073, 65850, 12327, 983948, 119028, 0, 0, 0, 2341, 8450, 8484, 8474, 
+    983260, 0, 70079, 8461, 128102, 12153, 12799, 0, 43709, 43708, 9451, 
+    7571, 13073, 0, 0, 681, 983252, 703, 0, 3272, 8781, 12894, 70077, 11709, 
     92288, 74446, 0, 92532, 0, 11338, 120768, 3276, 0, 0, 65928, 0, 0, 65021, 
     64795, 74574, 0, 10047, 78814, 3262, 78811, 42711, 0, 0, 68478, 163, 576, 
     9895, 1655, 78817, 74591, 78815, 78816, 983122, 0, 0, 0, 10039, 0, 
-    983936, 5623, 5717, 5776, 0, 0, 0, 41591, 11036, 65252, 92382, 0, 0, 0, 
+    983945, 5623, 5717, 5776, 0, 0, 0, 41591, 11036, 65252, 92382, 0, 0, 0, 
     67848, 0, 0, 0, 8887, 127521, 7295, 11031, 0, 43157, 0, 8946, 10348, 
-    10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, 983702, 8810, 74499, 686, 
+    10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, 983711, 8810, 74499, 686, 
     0, 71362, 4619, 118954, 6654, 73769, 74426, 0, 12040, 65689, 10128, 
-    65118, 0, 119151, 74205, 92651, 0, 2401, 68144, 8792, 983639, 0, 65455, 
+    65118, 0, 119151, 74205, 92651, 0, 2401, 68144, 8792, 983648, 0, 65455, 
     0, 92246, 0, 119129, 0, 12886, 127920, 66624, 0, 43557, 10300, 10161, 
-    10396, 74135, 983446, 118945, 78118, 73851, 3010, 6441, 78122, 1458, 
+    10396, 74135, 983453, 118945, 78118, 73851, 3010, 6441, 78122, 1458, 
     41475, 128672, 93975, 0, 11479, 0, 120356, 6350, 12864, 69674, 78114, 
     1061, 64780, 2001, 43111, 55230, 128686, 4052, 0, 7626, 0, 0, 1045, 0, 
     5631, 41113, 0, 0, 43707, 74127, 0, 0, 8486, 0, 73758, 2335, 4362, 
@@ -18306,8 +18323,8 @@
     92245, 440, 0, 13085, 9233, 74216, 0, 0, 9957, 128285, 66447, 8046, 
     64963, 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, 93965, 10487, 
     69878, 12527, 0, 7970, 0, 128660, 0, 65769, 5243, 9849, 5239, 65771, 
-    983230, 0, 5237, 69714, 0, 10103, 5247, 4769, 0, 118977, 12873, 2283, 
-    983232, 0, 3008, 4896, 0, 12087, 0, 55231, 41103, 0, 64565, 4773, 0, 
+    983235, 0, 5237, 69714, 0, 10103, 5247, 4769, 0, 118977, 12873, 2283, 
+    983237, 0, 3008, 4896, 0, 12087, 0, 55231, 41103, 0, 64565, 4773, 0, 
     92717, 70074, 4770, 0, 917567, 8731, 65378, 127362, 120619, 9122, 128033, 
     126600, 4774, 3019, 9997, 12834, 0, 9456, 10215, 120547, 0, 0, 0, 0, 
     74776, 4281, 4768, 0, 41535, 4099, 9017, 0, 0, 78095, 0, 78096, 0, 0, 0, 
@@ -18321,10 +18338,10 @@
     7634, 65167, 9845, 0, 0, 5701, 9722, 41490, 983153, 1426, 68217, 0, 
     68447, 42204, 55270, 8571, 194991, 78067, 0, 78818, 92719, 43182, 12184, 
     0, 42022, 0, 10281, 0, 5650, 43194, 64712, 10744, 0, 990, 5647, 0, 7387, 
-    78734, 41114, 11477, 5646, 12879, 11018, 983921, 3945, 92589, 0, 0, 0, 0, 
+    78734, 41114, 11477, 5646, 12879, 11018, 983930, 3945, 92589, 0, 0, 0, 0, 
     78212, 127746, 1020, 73763, 0, 78731, 5648, 64748, 194910, 78733, 10205, 
-    3545, 983585, 6984, 0, 74051, 983646, 43242, 120458, 2667, 0, 0, 0, 9911, 
-    0, 65020, 10097, 119166, 127145, 983653, 118836, 983739, 78427, 1140, 
+    3545, 983585, 6984, 0, 74051, 983655, 43242, 120458, 2667, 0, 0, 0, 9911, 
+    0, 65020, 10097, 119166, 127145, 983662, 118836, 983748, 78427, 1140, 
     78426, 0, 10159, 0, 0, 8128, 0, 0, 917965, 1815, 19910, 890, 0, 3267, 
     92291, 0, 10123, 0, 4410, 1041, 10576, 6354, 92581, 580, 74232, 0, 
     128347, 0, 0, 0, 19938, 65906, 127819, 0, 0, 3298, 5375, 10142, 0, 8215, 
@@ -18335,16 +18352,16 @@
     41521, 118934, 494, 13250, 0, 65098, 6364, 956, 0, 12830, 10462, 73740, 
     73734, 0, 0, 0, 66449, 13263, 74281, 69217, 13171, 127796, 0, 0, 92294, 
     0, 1044, 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, 
-    11829, 68197, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 983447, 7098, 0, 
+    11829, 68197, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 983454, 7098, 0, 
     0, 1057, 566, 42696, 0, 3016, 42274, 43464, 66490, 12921, 66571, 78472, 
     92510, 3006, 4620, 127237, 983578, 0, 0, 64659, 0, 127749, 55253, 6357, 
     6362, 8626, 71337, 2216, 9090, 65377, 41596, 0, 42920, 1698, 0, 64477, 0, 
     43813, 1053, 0, 78269, 0, 126586, 1052, 1051, 459, 1060, 74349, 66479, 0, 
     0, 0, 0, 42490, 689, 6508, 4163, 42298, 8639, 66641, 4246, 0, 0, 12130, 
-    0, 42337, 64596, 64375, 66481, 127850, 0, 0, 6359, 0, 43471, 983759, 0, 
+    0, 42337, 64596, 64375, 66481, 127850, 0, 0, 6359, 0, 43471, 983768, 0, 
     0, 127274, 0, 6358, 6361, 1926, 6356, 92627, 7898, 8110, 10935, 0, 10069, 
-    5830, 0, 43685, 0, 0, 0, 0, 8693, 78611, 119565, 983799, 120413, 0, 
-    127257, 65894, 0, 0, 0, 983914, 0, 0, 119187, 2135, 78868, 0, 0, 78869, 
+    5830, 0, 43685, 0, 0, 0, 0, 8693, 78611, 119565, 983808, 120413, 0, 
+    127257, 65894, 0, 0, 0, 983923, 0, 0, 119187, 2135, 78868, 0, 0, 78869, 
     42313, 5579, 92412, 0, 983082, 94002, 0, 5578, 41774, 128115, 42023, 
     6234, 5669, 92275, 0, 0, 0, 127506, 68202, 5583, 0, 0, 42426, 5580, 
     42276, 2923, 892, 2220, 42465, 41330, 194987, 5795, 65512, 119006, 65702, 
@@ -18354,7 +18371,7 @@
     64900, 7153, 6095, 41865, 0, 3015, 128023, 126465, 5211, 983083, 6400, 0, 
     194983, 70054, 8189, 11276, 0, 0, 372, 128829, 0, 118874, 42102, 41585, 
     128202, 0, 42101, 276, 78402, 0, 33, 74226, 127303, 9007, 118796, 41588, 
-    66033, 427, 10763, 118819, 0, 127884, 0, 1031, 6257, 0, 42104, 0, 983971, 
+    66033, 427, 10763, 118819, 0, 127884, 0, 1031, 6257, 0, 42104, 0, 983980, 
     2328, 92409, 1071, 42899, 0, 74848, 0, 983580, 0, 1047, 0, 0, 64790, 0, 
     69723, 10651, 0, 0, 0, 0, 92206, 119181, 5711, 41633, 12098, 65571, 9166, 
     0, 5710, 0, 6790, 65168, 13216, 0, 69716, 69726, 0, 64611, 41623, 195001, 
@@ -18363,119 +18380,119 @@
     9196, 69670, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0, 120010, 0, 8701, 68130, 
     119616, 120522, 0, 42477, 194994, 12123, 4495, 43569, 0, 0, 0, 64946, 
     10992, 0, 120009, 0, 0, 9318, 93986, 13249, 65679, 73808, 0, 65457, 
-    42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0, 983957, 
+    42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0, 983966, 
     5084, 0, 0, 118861, 0, 733, 917876, 78014, 78436, 78435, 41677, 0, 9218, 
-    1731, 0, 983737, 0, 67990, 0, 0, 0, 120001, 127018, 92492, 5155, 120000, 
-    5358, 983735, 0, 917767, 64424, 983226, 3840, 64314, 41432, 0, 78315, 
+    1731, 0, 983746, 0, 67990, 0, 0, 0, 120001, 127018, 92492, 5155, 120000, 
+    5358, 983744, 0, 917767, 64424, 983231, 3840, 64314, 41432, 0, 78315, 
     68430, 67980, 43253, 65943, 0, 3371, 10988, 0, 8771, 1479, 0, 0, 1109, 
-    11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, 67978, 74842, 983277, 
-    983712, 12149, 13088, 551, 0, 10156, 12119, 92572, 0, 2544, 65074, 
+    11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, 67978, 74842, 983284, 
+    983721, 12149, 13088, 551, 0, 10156, 12119, 92572, 0, 2544, 65074, 
     119211, 0, 0, 78011, 351, 119149, 0, 0, 55229, 0, 74268, 0, 0, 0, 42377, 
-    0, 0, 0, 983915, 0, 9013, 4054, 0, 983570, 0, 0, 73960, 5585, 65881, 
+    0, 0, 0, 983924, 0, 9013, 4054, 0, 983570, 983628, 0, 73960, 5585, 65881, 
     2549, 74469, 0, 0, 5584, 8358, 0, 64215, 92219, 10919, 0, 7980, 126601, 
-    983775, 2218, 41800, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, 
+    983784, 2218, 41800, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, 
     43452, 78609, 0, 42573, 67856, 0, 78129, 0, 0, 74392, 8135, 6450, 10055, 
     77996, 0, 0, 119225, 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 92573, 
     120799, 0, 0, 5652, 10945, 0, 66486, 0, 3661, 7863, 0, 0, 0, 74509, 
-    983843, 5659, 0, 78692, 66729, 5655, 0, 42168, 0, 1055, 917628, 127792, 
-    66310, 74030, 0, 12146, 73955, 73956, 11618, 0, 126990, 0, 10272, 10304, 
-    10368, 42518, 594, 10244, 10248, 7407, 983878, 64870, 0, 3467, 983882, 0, 
-    3331, 946, 10231, 1495, 8131, 74330, 0, 9562, 69222, 65927, 0, 70036, 
-    69696, 69769, 64656, 983717, 0, 94020, 70056, 5666, 65227, 5318, 63994, 
-    0, 9091, 10798, 0, 128166, 10186, 0, 7732, 983715, 64556, 0, 0, 5668, 
-    74445, 0, 128663, 5670, 126610, 127297, 11820, 2992, 7826, 5667, 19952, 
-    120807, 0, 12749, 74551, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 
-    128286, 94004, 0, 0, 3571, 13247, 0, 7973, 66353, 68435, 78278, 67896, 
-    43192, 0, 78265, 553, 120653, 0, 128554, 5829, 0, 4587, 78285, 65912, 0, 
-    12746, 0, 0, 119924, 5633, 119927, 94101, 94102, 94099, 64905, 94105, 
-    9512, 94103, 12742, 6443, 983797, 0, 9135, 0, 41564, 0, 55219, 128832, 
-    983842, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 127270, 
-    0, 118880, 2425, 65182, 128769, 43636, 5221, 78410, 328, 0, 983800, 
-    69815, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, 43223, 43760, 5635, 
-    3373, 2986, 78292, 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, 0, 0, 
-    1657, 41561, 78299, 78295, 5639, 2954, 5660, 5640, 78303, 983676, 78300, 
-    42227, 0, 0, 41637, 67872, 0, 78310, 41625, 43362, 78309, 120713, 11705, 
-    5642, 0, 5486, 0, 4356, 11710, 0, 12051, 69938, 0, 5641, 8259, 0, 1058, 
-    0, 67630, 0, 0, 1144, 78750, 0, 42228, 0, 73890, 118972, 0, 2800, 0, 
-    5645, 64964, 8652, 2547, 66484, 43634, 0, 5608, 65890, 43808, 0, 67621, 
-    119934, 9000, 0, 0, 92673, 1865, 0, 5613, 69950, 0, 0, 5610, 0, 0, 65826, 
-    2069, 0, 10787, 43999, 2997, 0, 5609, 78316, 65319, 78313, 12316, 65376, 
-    2412, 0, 8186, 9807, 74269, 92547, 13130, 65874, 0, 5807, 0, 10030, 5306, 
-    12364, 128064, 0, 11704, 0, 92583, 10211, 0, 0, 0, 0, 11706, 9710, 0, 0, 
-    0, 413, 65623, 7118, 0, 9133, 74262, 0, 1042, 0, 64779, 12171, 119240, 
-    6185, 64776, 4984, 0, 708, 11391, 0, 12241, 92720, 983890, 1308, 0, 2534, 
-    810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 92443, 74470, 66618, 
-    65680, 120779, 10027, 0, 128154, 12337, 120722, 127368, 983167, 2980, 
-    755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 92276, 44011, 
-    8730, 983067, 127854, 78312, 7274, 119250, 0, 7275, 78304, 935, 0, 65840, 
-    377, 42325, 11649, 127363, 65253, 64301, 128835, 78308, 42341, 65284, 
-    2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, 119217, 7248, 0, 
-    128346, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 127876, 78226, 128775, 
-    127512, 0, 0, 0, 0, 43689, 127911, 13142, 78812, 42415, 66575, 4542, 
-    69909, 43547, 0, 0, 7677, 2991, 4946, 42454, 11565, 7949, 0, 983909, 
-    11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 92724, 6478, 9898, 
-    43673, 65237, 6241, 7106, 4877, 983786, 6238, 0, 10548, 127049, 4409, 0, 
-    0, 64798, 0, 5346, 0, 94047, 6237, 4874, 0, 9176, 0, 126553, 65231, 
-    65884, 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 0, 0, 5685, 
-    0, 2461, 11052, 7091, 5342, 8317, 0, 68163, 5340, 0, 127820, 43635, 
-    73928, 127529, 0, 0, 0, 128510, 65482, 0, 9142, 0, 126470, 0, 10938, 0, 
-    118790, 1182, 2542, 4826, 0, 0, 128176, 529, 8580, 0, 0, 10586, 10790, 
-    10839, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, 0, 0, 983929, 11376, 
-    74379, 10721, 67664, 3438, 42097, 127267, 11084, 3194, 41870, 266, 78305, 
-    120183, 41873, 120575, 11324, 120531, 0, 8420, 64918, 128844, 41871, 
-    41338, 3734, 7734, 43683, 8750, 66605, 66011, 92514, 40965, 127937, 0, 
-    5161, 10572, 0, 0, 0, 64349, 7287, 42162, 127552, 0, 126605, 11948, 
-    69220, 12359, 43429, 41369, 1697, 12191, 0, 68633, 7286, 0, 68635, 10031, 
-    0, 9870, 68645, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, 42678, 0, 
-    43677, 41583, 0, 65799, 92623, 0, 0, 983927, 78169, 66199, 0, 3609, 
+    983852, 5659, 0, 78692, 66729, 5655, 983626, 42168, 0, 1055, 917628, 
+    127792, 66310, 74030, 0, 12146, 73955, 73956, 11618, 0, 126990, 0, 10272, 
+    10304, 10368, 42518, 594, 10244, 10248, 7407, 983887, 64870, 0, 3467, 
+    983891, 0, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, 69222, 65927, 0, 
+    70036, 69696, 69769, 64656, 983726, 0, 94020, 70056, 5666, 65227, 5318, 
+    63994, 0, 9091, 10798, 0, 128166, 10186, 0, 7732, 983724, 64556, 0, 0, 
+    5668, 74445, 0, 128663, 5670, 126610, 127297, 11820, 2992, 7826, 5667, 
+    19952, 120807, 0, 12749, 74551, 0, 0, 66496, 4361, 119260, 1306, 9286, 
+    1497, 128286, 94004, 0, 0, 3571, 13247, 0, 7973, 66353, 68435, 78278, 
+    67896, 43192, 0, 78265, 553, 120653, 0, 128554, 5829, 0, 4587, 78285, 
+    65912, 0, 12746, 0, 0, 119924, 5633, 119927, 94101, 94102, 94099, 64905, 
+    94105, 9512, 94103, 12742, 6443, 983806, 0, 9135, 0, 41564, 0, 55219, 
+    128832, 983851, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 
+    127270, 0, 118880, 2425, 65182, 128769, 43636, 5221, 78410, 328, 0, 
+    983809, 69815, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, 43223, 43760, 
+    5635, 3373, 2986, 78292, 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, 
+    0, 0, 1657, 41561, 78299, 78295, 5639, 2954, 5660, 5640, 78303, 983685, 
+    78300, 42227, 0, 0, 41637, 67872, 0, 78310, 41625, 43362, 78309, 120713, 
+    11705, 5642, 0, 5486, 0, 4356, 11710, 0, 12051, 69938, 0, 5641, 8259, 0, 
+    1058, 0, 67630, 0, 0, 1144, 78750, 0, 42228, 0, 73890, 118972, 0, 2800, 
+    0, 5645, 64964, 8652, 2547, 66484, 43634, 0, 5608, 65890, 43808, 0, 
+    67621, 119934, 9000, 0, 0, 92673, 1865, 0, 5613, 69950, 0, 0, 5610, 0, 0, 
+    65826, 2069, 0, 10787, 43999, 2997, 0, 5609, 78316, 65319, 78313, 12316, 
+    65376, 2412, 0, 8186, 9807, 74269, 92547, 13130, 65874, 0, 5807, 0, 
+    10030, 5306, 12364, 128064, 0, 11704, 0, 92583, 10211, 0, 0, 0, 0, 11706, 
+    9710, 0, 0, 0, 413, 65623, 7118, 0, 9133, 74262, 0, 1042, 0, 64779, 
+    12171, 119240, 6185, 64776, 4984, 0, 708, 11391, 0, 12241, 92720, 983899, 
+    1308, 0, 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 92443, 
+    74470, 66618, 65680, 120779, 10027, 0, 128154, 12337, 120722, 127368, 
+    983167, 2980, 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 
+    92276, 44011, 8730, 983067, 127854, 78312, 7274, 119250, 0, 7275, 78304, 
+    935, 0, 65840, 377, 42325, 11649, 127363, 65253, 64301, 128835, 78308, 
+    42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, 
+    119217, 7248, 0, 128346, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 127876, 
+    78226, 128775, 127512, 0, 0, 0, 0, 43689, 127911, 13142, 78812, 42415, 
+    66575, 4542, 69909, 43547, 0, 0, 7677, 2991, 4946, 42454, 11565, 7949, 0, 
+    983918, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 92724, 6478, 
+    9898, 43673, 65237, 6241, 7106, 4877, 983795, 6238, 0, 10548, 127049, 
+    4409, 0, 0, 64798, 0, 5346, 0, 94047, 6237, 4874, 0, 9176, 0, 126553, 
+    65231, 65884, 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 0, 
+    0, 5685, 0, 2461, 11052, 7091, 5342, 8317, 0, 68163, 5340, 0, 127820, 
+    43635, 73928, 127529, 0, 0, 0, 128510, 65482, 0, 9142, 0, 126470, 0, 
+    10938, 0, 118790, 1182, 2542, 4826, 0, 0, 128176, 529, 8580, 0, 0, 10586, 
+    10790, 10839, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, 0, 0, 983938, 
+    11376, 74379, 10721, 67664, 3438, 42097, 127267, 11084, 3194, 41870, 266, 
+    78305, 120183, 41873, 120575, 11324, 120531, 0, 8420, 64918, 128844, 
+    41871, 41338, 3734, 7734, 43683, 8750, 66605, 66011, 92514, 40965, 
+    127937, 0, 5161, 10572, 0, 0, 0, 64349, 7287, 42162, 127552, 0, 126605, 
+    11948, 69220, 12359, 43429, 41369, 1697, 12191, 0, 68633, 7286, 0, 68635, 
+    10031, 0, 9870, 68645, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, 42678, 
+    0, 43677, 41583, 0, 65799, 92623, 0, 0, 983936, 78169, 66199, 0, 3609, 
     68624, 0, 832, 120693, 120770, 78473, 66007, 78471, 65703, 0, 0, 42732, 
     5180, 92699, 41395, 41530, 11691, 64773, 92214, 74002, 0, 0, 128645, 
-    6348, 243, 13200, 983804, 6024, 92309, 9979, 10037, 41529, 10648, 8538, 
+    6348, 243, 13200, 983813, 6024, 92309, 9979, 10037, 41529, 10648, 8538, 
     43687, 0, 0, 4285, 66195, 0, 4230, 0, 7367, 43256, 92353, 7563, 42376, 0, 
     68442, 120512, 0, 0, 214, 0, 0, 78466, 65893, 12208, 9973, 0, 66311, 
     65589, 128277, 2603, 0, 0, 0, 70047, 0, 6022, 0, 2884, 0, 11620, 0, 43, 
     0, 66453, 1016, 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 0, 
-    2074, 0, 78283, 0, 12453, 128128, 983817, 74241, 126568, 6791, 12457, 
+    2074, 0, 78283, 0, 12453, 128128, 983826, 74241, 126568, 6791, 12457, 
     78268, 0, 0, 0, 78279, 0, 0, 92358, 66637, 7995, 8759, 43421, 78277, 
     12449, 128552, 0, 0, 8752, 3197, 4720, 10165, 0, 119249, 0, 11595, 64893, 
     0, 43435, 0, 0, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, 4639, 983147, 
     1990, 66589, 4498, 78664, 119183, 0, 0, 69734, 2960, 73779, 0, 8969, 
     128117, 43424, 127059, 0, 2950, 119579, 6210, 65753, 370, 0, 0, 0, 4953, 
-    983673, 0, 0, 0, 69230, 0, 0, 65688, 983241, 5063, 3517, 2964, 43663, 
+    983682, 0, 0, 0, 69230, 0, 0, 65688, 983246, 5063, 3517, 2964, 43663, 
     917762, 6344, 74791, 10566, 10144, 66333, 8252, 729, 66016, 78253, 0, 
     71317, 64923, 128040, 43669, 9032, 78263, 78264, 0, 41215, 0, 65883, 0, 
     917774, 120602, 3761, 0, 0, 70068, 0, 12912, 119012, 3850, 128191, 0, 0, 
     0, 0, 908, 0, 8611, 0, 0, 127555, 43691, 41197, 0, 8978, 120540, 119135, 
     41586, 10527, 0, 917848, 3848, 78739, 194937, 127536, 65241, 5336, 
-    983252, 128786, 663, 0, 10780, 0, 0, 78767, 983250, 127163, 68193, 347, 
+    983259, 128786, 663, 0, 10780, 0, 0, 78767, 983257, 127163, 68193, 347, 
     0, 0, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 78769, 12143, 
     69657, 78512, 0, 43441, 41804, 78523, 0, 78525, 0, 128859, 41584, 10681, 
-    0, 983686, 73938, 0, 128022, 4800, 66661, 0, 66306, 64715, 78534, 9518, 
-    6609, 10434, 0, 11319, 1097, 0, 917850, 41730, 983213, 0, 73847, 78761, 
-    65172, 41728, 41721, 0, 0, 0, 41203, 917612, 13110, 41726, 983846, 0, 
+    0, 983695, 73938, 0, 128022, 4800, 66661, 0, 66306, 64715, 78534, 9518, 
+    6609, 10434, 0, 11319, 1097, 0, 917850, 41730, 983214, 0, 73847, 78761, 
+    65172, 41728, 41721, 0, 0, 0, 41203, 917612, 13110, 41726, 983855, 0, 
     1000, 69651, 0, 41140, 1209, 73978, 0, 73750, 1073, 6321, 77878, 41138, 
     0, 68213, 0, 12167, 1115, 41605, 9794, 127062, 67671, 55248, 12237, 
     78787, 66314, 6587, 9290, 78782, 78783, 9231, 78781, 2959, 7926, 0, 0, 0, 
-    64398, 0, 119970, 12311, 983718, 78796, 78798, 78794, 78795, 68434, 
+    64398, 0, 119970, 12311, 983727, 78796, 78798, 78794, 78795, 68434, 
     78793, 66670, 0, 0, 12290, 120169, 0, 119873, 42142, 9968, 8205, 0, 5131, 
-    0, 9627, 78536, 78542, 78535, 983211, 1944, 1248, 10148, 127755, 119990, 
+    0, 9627, 78536, 78542, 78535, 983212, 1944, 1248, 10148, 127755, 119990, 
     119991, 12701, 78376, 11308, 119995, 0, 119997, 119998, 65305, 65100, 
     4031, 42794, 120003, 7075, 8154, 119985, 120007, 41817, 73934, 42275, 
     120011, 120012, 78526, 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364, 
     0, 0, 64332, 0, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 78455, 7279, 
-    12041, 1418, 10885, 12673, 0, 0, 9660, 983273, 13012, 4571, 0, 0, 120164, 
+    12041, 1418, 10885, 12673, 0, 0, 9660, 983280, 13012, 4571, 0, 0, 120164, 
     12078, 2970, 0, 10933, 0, 77870, 0, 127015, 0, 41599, 0, 128831, 0, 
     12950, 92160, 3486, 0, 78311, 4239, 0, 127799, 66511, 0, 2637, 64629, 
-    8460, 127053, 8476, 983966, 0, 0, 0, 65673, 1019, 78495, 4148, 0, 12289, 
-    0, 4316, 0, 13119, 8488, 5412, 66243, 9935, 0, 73864, 983202, 41734, 
+    8460, 127053, 8476, 983975, 0, 0, 0, 65673, 1019, 78495, 4148, 0, 12289, 
+    0, 4316, 0, 13119, 8488, 5412, 66243, 9935, 0, 73864, 983203, 41734, 
     8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 7120, 41736, 92546, 
     41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, 127284, 0, 73963, 
     41855, 41867, 65564, 11277, 65892, 11536, 10620, 92272, 7115, 66030, 
     73932, 5498, 73942, 41536, 0, 68204, 92587, 3459, 8997, 0, 0, 0, 0, 
-    92512, 0, 66377, 69781, 0, 983690, 78511, 3161, 295, 120207, 0, 92223, 
+    92512, 0, 66377, 69781, 0, 983699, 78511, 3161, 295, 120207, 0, 92223, 
     127856, 78742, 9016, 43454, 63903, 63902, 43641, 0, 3971, 0, 70063, 2952, 
     78765, 11038, 10901, 63900, 63899, 63898, 94043, 667, 12332, 63887, 6086, 
-    41722, 0, 5172, 0, 983271, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, 
+    41722, 0, 5172, 0, 983278, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, 
     8555, 63878, 63877, 42460, 6050, 42708, 63881, 63872, 0, 42421, 0, 41723, 
     63875, 63874, 11460, 7432, 1913, 41913, 63852, 126636, 0, 42348, 73892, 
     6752, 446, 41911, 127906, 63851, 63850, 41910, 0, 63846, 2972, 12932, 
@@ -18490,8 +18507,8 @@
     7583, 7679, 2903, 0, 3001, 1158, 8745, 43746, 73748, 63866, 78626, 1915, 
     4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 69238, 64438, 12070, 
     8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, 63834, 0, 78240, 
-    12225, 63838, 63837, 983844, 983795, 63833, 6042, 66360, 8083, 0, 0, 
-    63821, 63820, 63819, 63818, 983895, 5227, 9047, 63822, 127162, 6091, 0, 
+    12225, 63838, 63837, 983853, 983804, 63833, 6042, 66360, 8083, 0, 0, 
+    63821, 63820, 63819, 63818, 983904, 5227, 9047, 63822, 127162, 6091, 0, 
     10691, 560, 5643, 8226, 119578, 63812, 63811, 63810, 63809, 2289, 63815, 
     63814, 63813, 6047, 1597, 120143, 780, 206, 77925, 4936, 65147, 8168, 
     63930, 2076, 1093, 9882, 63934, 2082, 63932, 128150, 63929, 3546, 1605, 
@@ -18509,262 +18526,262 @@
     43659, 12951, 120638, 9906, 2054, 2334, 78515, 63916, 5483, 63914, 69737, 
     63911, 5484, 63909, 63908, 2539, 0, 43980, 5485, 0, 42697, 9061, 5534, 
     10672, 4502, 0, 253, 0, 68208, 0, 9203, 74231, 0, 11530, 92542, 68668, 0, 
-    118907, 0, 10474, 43426, 13257, 42354, 128099, 983689, 70044, 195065, 0, 
-    8413, 983807, 0, 5693, 7272, 0, 13209, 64470, 65831, 74350, 195063, 0, 0, 
-    0, 126639, 0, 0, 94078, 128133, 127767, 66608, 3111, 41863, 8804, 42913, 
-    92187, 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, 55226, 128353, 
-    63982, 7393, 12807, 43413, 63906, 1598, 63904, 0, 0, 41729, 4423, 1307, 
-    0, 10515, 41589, 128698, 0, 6218, 0, 1430, 0, 0, 120606, 78754, 5413, 
-    7619, 3255, 3493, 74032, 11549, 10735, 41743, 73937, 6801, 983624, 4518, 
-    10990, 65073, 5167, 4481, 3771, 120158, 2710, 0, 69243, 41724, 0, 43073, 
-    41690, 12479, 983626, 0, 0, 983809, 70046, 1628, 127149, 983480, 983722, 
-    65262, 6333, 10783, 42315, 0, 63855, 94056, 0, 0, 5339, 74323, 0, 13004, 
-    0, 4457, 0, 0, 0, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 68464, 12633, 
-    12870, 69705, 65183, 5688, 11926, 6033, 6310, 5686, 0, 74251, 0, 120647, 
-    0, 50, 10558, 9871, 42612, 43655, 0, 0, 0, 66468, 0, 13259, 4448, 0, 
-    983836, 0, 70043, 67853, 0, 10640, 11539, 1151, 0, 917607, 127544, 
-    127079, 195050, 127852, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, 
-    11538, 8673, 12650, 11020, 0, 66467, 2105, 8087, 78163, 69632, 9894, 0, 
-    0, 0, 4636, 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 128284, 
-    12277, 194627, 11995, 92553, 0, 12158, 0, 8741, 10197, 0, 92426, 0, 6531, 
-    0, 127846, 473, 43415, 0, 983641, 1873, 1087, 0, 0, 0, 78527, 66439, 
-    43218, 983123, 194716, 7237, 12504, 74282, 0, 983571, 0, 9489, 0, 0, 
-    4384, 74220, 63845, 2058, 128863, 13295, 43191, 128030, 0, 1154, 3857, 
-    1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, 0, 495, 
-    119007, 41712, 7983, 0, 93997, 0, 6347, 120165, 7654, 41710, 4196, 0, 
-    437, 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, 4999, 
-    194642, 0, 126582, 4711, 120769, 0, 2739, 0, 8044, 74834, 194643, 41789, 
-    128142, 10809, 0, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, 13058, 
-    120449, 12875, 0, 92186, 13229, 0, 10575, 43399, 0, 0, 41791, 1104, 0, 0, 
-    10655, 0, 0, 0, 0, 1082, 195049, 8428, 6569, 0, 0, 0, 69849, 6783, 0, 
-    12993, 8049, 41548, 44021, 6458, 983798, 128882, 4761, 63828, 4766, 
-    64623, 1273, 43407, 0, 118876, 195045, 6912, 1313, 6322, 10483, 983603, 
-    41545, 0, 92449, 0, 0, 0, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, 
-    0, 66320, 983802, 0, 0, 0, 41537, 69683, 8303, 8282, 11817, 73857, 10003, 
-    73859, 65904, 7363, 1686, 0, 78406, 11467, 3664, 65921, 64299, 194664, 0, 
-    0, 4324, 126, 42246, 119152, 0, 74378, 65926, 7744, 194636, 74277, 74302, 
-    78052, 43817, 6966, 43822, 8136, 0, 65600, 1633, 0, 0, 4762, 1103, 0, 0, 
-    4765, 983485, 13078, 0, 4760, 63827, 2050, 10871, 43199, 1102, 0, 42236, 
-    128867, 194667, 11546, 74794, 337, 0, 42591, 8627, 12279, 1111, 0, 92161, 
-    4707, 68206, 10143, 7883, 127081, 7880, 4522, 8645, 5704, 13010, 0, 8304, 
-    917561, 0, 119575, 2293, 0, 66654, 0, 92676, 0, 13008, 0, 4385, 0, 13011, 
-    0, 92569, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, 120141, 
-    41792, 42770, 94054, 65762, 118829, 43821, 5709, 0, 94053, 43816, 0, 0, 
-    1079, 3867, 5708, 0, 0, 43797, 5706, 64768, 5705, 8791, 4005, 0, 10237, 
-    10991, 128816, 43459, 9173, 917581, 917580, 13170, 12540, 917577, 42605, 
-    120765, 126617, 68647, 917572, 10058, 0, 74867, 194654, 127078, 3339, 
-    11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, 917589, 
-    917588, 120541, 10605, 1309, 63966, 120743, 1754, 92226, 13246, 864, 0, 
-    118926, 8972, 0, 7849, 120092, 92533, 13240, 195068, 5192, 4338, 67982, 
-    10948, 917601, 13199, 92575, 1236, 13208, 13261, 13189, 13188, 93993, 0, 
-    7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, 
-    63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 983906, 92168, 
-    983763, 917858, 11354, 94071, 0, 42795, 0, 119195, 11394, 194646, 13236, 
-    13272, 13194, 1334, 69926, 4479, 1178, 65586, 120663, 66681, 119193, 
-    4601, 0, 0, 983756, 0, 0, 194658, 0, 6809, 63786, 6031, 0, 63791, 63790, 
-    1145, 63788, 7910, 63785, 43153, 754, 10192, 13105, 8183, 120741, 2037, 
-    0, 0, 10747, 125, 0, 64890, 0, 983131, 0, 41719, 63758, 3523, 1074, 
-    13258, 9536, 74077, 0, 4427, 74242, 63757, 43145, 12217, 63754, 41532, 
-    1349, 63750, 63749, 0, 0, 0, 63753, 63802, 41084, 120622, 68133, 41930, 
-    63805, 63804, 43632, 63801, 41082, 8140, 63798, 6260, 0, 0, 94074, 63793, 
-    11988, 3898, 128241, 10201, 12238, 63795, 42194, 10367, 12521, 10431, 
-    42114, 41932, 1068, 0, 12523, 12945, 983322, 42203, 7950, 10804, 63771, 
-    42787, 4386, 12224, 6973, 2793, 12475, 0, 0, 63769, 9530, 983119, 12232, 
-    13135, 8596, 5681, 63762, 4595, 63760, 792, 0, 64803, 0, 8742, 0, 11053, 
-    128796, 63744, 128107, 0, 7588, 63748, 1693, 63746, 43204, 5055, 68426, 
-    917853, 1090, 120679, 128356, 11665, 74133, 4558, 65685, 9523, 0, 0, 
-    78681, 11513, 0, 6157, 63775, 63774, 63773, 13191, 12170, 3500, 3139, 0, 
-    3170, 12485, 0, 10872, 78271, 13006, 64433, 0, 0, 941, 0, 0, 0, 65541, 
-    11063, 0, 8228, 0, 42065, 0, 0, 94039, 0, 92455, 7386, 0, 64444, 0, 
-    119863, 43603, 94075, 65397, 288, 0, 0, 0, 10025, 69915, 2918, 0, 65300, 
-    119871, 9883, 64726, 2790, 65395, 3793, 0, 127829, 65393, 0, 74138, 0, 0, 
-    0, 74139, 92712, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, 1282, 
-    120771, 0, 0, 10888, 983604, 65242, 0, 3330, 0, 0, 983965, 0, 0, 74259, 
-    3304, 42753, 0, 0, 0, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794, 0, 
-    43094, 70023, 43650, 94037, 0, 9035, 0, 0, 128005, 0, 92207, 68125, 0, 
-    164, 0, 94067, 94000, 6958, 0, 43116, 0, 70019, 13245, 0, 0, 127376, 0, 
-    70031, 127756, 12666, 13175, 13207, 120414, 66014, 120428, 7447, 5929, 0, 
-    65509, 0, 7449, 11306, 0, 73920, 3180, 0, 63808, 9054, 971, 13062, 0, 0, 
-    65195, 10164, 92252, 74428, 0, 78146, 92611, 0, 0, 0, 10045, 12882, 
-    13275, 128161, 11057, 0, 13276, 0, 41525, 78150, 7271, 11444, 0, 0, 0, 
-    12229, 41523, 0, 43411, 73751, 0, 64813, 0, 0, 10476, 3858, 0, 3932, 
-    64958, 0, 0, 73989, 68192, 0, 69847, 369, 0, 41784, 0, 64163, 0, 0, 0, 
-    65474, 4796, 12292, 126595, 65479, 0, 41781, 10486, 41480, 43002, 9899, 
-    0, 0, 404, 12821, 3741, 0, 5788, 8092, 68212, 41222, 1831, 66020, 3982, 
-    0, 4388, 0, 746, 120784, 0, 0, 12018, 65294, 0, 0, 0, 0, 4422, 4708, 
-    3799, 74292, 119357, 0, 74430, 0, 11700, 4374, 0, 128179, 1364, 0, 8038, 
-    0, 917597, 12868, 69814, 0, 6735, 73979, 13174, 73968, 13225, 0, 69808, 
-    65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, 0, 66438, 41785, 
-    12617, 64172, 13173, 4372, 119354, 0, 983568, 0, 0, 92402, 128062, 12965, 
-    384, 64512, 10404, 10340, 119352, 1556, 5274, 13210, 120125, 10017, 9733, 
-    41787, 983238, 126994, 41373, 78039, 12303, 0, 13232, 13233, 349, 4863, 
-    41371, 11656, 0, 120703, 119883, 12861, 4398, 8543, 65618, 128018, 1096, 
-    0, 0, 42688, 12441, 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 
-    13237, 12719, 126646, 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 
-    0, 120785, 119874, 94107, 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 
-    119879, 66590, 128123, 41533, 66337, 0, 92184, 0, 4965, 43445, 917536, 
-    73849, 0, 43638, 78537, 128287, 6261, 119342, 43147, 66570, 1957, 10420, 
-    982, 2756, 13292, 13206, 128828, 0, 2925, 73809, 13056, 127559, 13212, 
-    43238, 0, 13190, 13187, 92541, 13198, 118793, 0, 5242, 119179, 64476, 
-    1694, 8216, 71369, 6770, 43331, 0, 65620, 983719, 43544, 126466, 0, 
-    41444, 65621, 69955, 9197, 5246, 119106, 13185, 9709, 120323, 120322, 
-    12314, 65616, 5238, 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 
-    128537, 3936, 119331, 11699, 41347, 127249, 13235, 8842, 41248, 0, 4379, 
-    13239, 12692, 7969, 127266, 7219, 127250, 128251, 120509, 0, 66224, 734, 
-    2979, 120303, 65619, 9872, 957, 64921, 1846, 66631, 41477, 119256, 
-    120310, 74511, 41770, 1670, 6442, 120317, 42446, 5379, 120318, 41163, 
-    74832, 120315, 120314, 11506, 0, 42841, 13267, 0, 0, 41775, 0, 7130, 
-    41773, 0, 10663, 0, 0, 0, 6151, 12110, 42673, 65572, 65293, 65250, 13265, 
-    13264, 64518, 0, 6100, 0, 92647, 5808, 65922, 0, 12967, 66041, 5612, 
-    4583, 0, 0, 68097, 64575, 126637, 11965, 0, 68358, 0, 69789, 0, 92260, 
-    68102, 9698, 7814, 74476, 119651, 128514, 0, 41921, 118858, 9756, 6985, 
-    119258, 78490, 74219, 0, 0, 118997, 8012, 5674, 12353, 0, 12361, 5677, 
-    5588, 0, 41925, 128124, 41920, 5673, 120534, 5676, 41923, 12694, 118978, 
-    5672, 1294, 0, 78059, 0, 42511, 1727, 120725, 42436, 0, 0, 0, 74222, 
-    8718, 3550, 736, 10268, 4505, 10316, 74090, 5826, 55232, 5813, 0, 120712, 
-    5841, 5837, 55234, 0, 3105, 12829, 5838, 5796, 0, 119592, 5793, 0, 5866, 
-    5797, 41011, 5865, 120091, 7956, 598, 0, 64649, 5806, 42398, 0, 9037, 
-    5671, 120041, 0, 0, 0, 128855, 0, 847, 128242, 9529, 0, 66657, 6980, 
-    78483, 120035, 78484, 983484, 0, 120033, 78486, 0, 0, 120039, 42683, 0, 
-    983055, 7114, 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 
-    6792, 43201, 0, 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 69727, 
-    68141, 8372, 0, 65116, 0, 120022, 10175, 10388, 42799, 94100, 41013, 
-    10568, 0, 983618, 2869, 0, 41015, 194692, 2785, 4366, 0, 10954, 41802, 0, 
-    42608, 78469, 9884, 4759, 0, 0, 10266, 41359, 1170, 43365, 69810, 73908, 
-    1609, 902, 0, 63936, 128875, 11661, 8122, 5818, 0, 0, 3861, 9540, 11028, 
-    2554, 5158, 5714, 2213, 0, 0, 807, 43079, 0, 78475, 976, 5511, 64553, 0, 
-    42155, 0, 41356, 74110, 118801, 126614, 0, 8676, 983284, 0, 5582, 451, 
-    63941, 5798, 9349, 42018, 127858, 0, 0, 43609, 5906, 120553, 1440, 0, 
-    128853, 120016, 74283, 11005, 0, 66656, 66044, 0, 194698, 0, 0, 43393, 
-    10094, 0, 11529, 10857, 120643, 66436, 6546, 93, 8102, 0, 68405, 0, 0, 
-    8171, 0, 119097, 127064, 917543, 383, 7154, 41656, 92634, 94040, 0, 5187, 
-    71296, 127277, 11286, 68620, 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 
-    983818, 8292, 195074, 4980, 8860, 73947, 10028, 65291, 7076, 13182, 
-    194705, 0, 0, 10631, 66031, 7972, 0, 78785, 0, 7900, 0, 11309, 3806, 
-    4198, 42725, 0, 67656, 9995, 0, 92552, 0, 12931, 0, 42684, 74285, 2088, 
-    64213, 64366, 65156, 8814, 42238, 74771, 0, 0, 12836, 0, 0, 74342, 8593, 
-    0, 0, 68445, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 127144, 0, 9342, 
-    120464, 0, 64516, 0, 78792, 10129, 41007, 74375, 0, 40995, 12209, 41012, 
-    119136, 0, 0, 69724, 40992, 92264, 127153, 68653, 43558, 5522, 0, 61, 0, 
-    74105, 3633, 983891, 65162, 41234, 12089, 78281, 9771, 983896, 13251, 
-    128701, 0, 6262, 2784, 42743, 0, 8126, 66483, 0, 0, 441, 42621, 0, 0, 
-    41002, 40999, 119623, 43266, 7108, 194779, 10890, 74481, 65834, 8324, 
-    119103, 64417, 74817, 127465, 64737, 0, 983650, 8930, 66678, 74249, 1193, 
-    10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, 77904, 92640, 77905, 
-    9034, 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 0, 
-    41966, 0, 127471, 0, 11792, 43064, 41025, 911, 7539, 0, 0, 120339, 65159, 
-    64390, 0, 0, 5520, 11662, 0, 65330, 42812, 0, 0, 12326, 983847, 0, 42808, 
-    128337, 9348, 64901, 983852, 0, 0, 0, 0, 0, 917584, 43702, 983576, 5857, 
-    65342, 92727, 119120, 120079, 8644, 0, 0, 0, 74296, 41909, 0, 120332, 
-    2791, 69663, 1891, 69824, 0, 41907, 66647, 118939, 8761, 12942, 5748, 0, 
-    10773, 0, 0, 8796, 78149, 6412, 2061, 8520, 13146, 127185, 63931, 0, 
-    65902, 2882, 0, 0, 12843, 4520, 120345, 92459, 0, 983651, 0, 73860, 0, 0, 
-    64345, 0, 9201, 128314, 194940, 0, 0, 43679, 917585, 65117, 92270, 0, 
-    10427, 0, 3844, 120675, 9755, 1110, 6612, 12222, 0, 128789, 0, 0, 783, 
-    194935, 0, 0, 983064, 194720, 65056, 3620, 41180, 68378, 4556, 0, 0, 
-    194933, 74250, 0, 67657, 10510, 4382, 66482, 0, 0, 127527, 9177, 8902, 
-    93958, 9839, 0, 12891, 983746, 983627, 63999, 2016, 41917, 9788, 63928, 
-    0, 1862, 65800, 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, 
-    66017, 4508, 64883, 92456, 92522, 127814, 0, 64592, 74276, 120080, 6784, 
-    78788, 68181, 0, 0, 0, 127534, 12147, 9024, 66378, 66472, 983920, 64289, 
-    65289, 78151, 66658, 194929, 64509, 78152, 0, 126505, 11051, 983289, 0, 
-    11355, 65885, 0, 128310, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, 
-    9963, 68649, 126609, 4040, 120570, 6167, 0, 63922, 6594, 983731, 0, 0, 
-    3624, 43036, 0, 6387, 63990, 19947, 63988, 41955, 0, 63993, 10440, 9611, 
-    65605, 6803, 0, 7738, 63986, 11446, 63984, 92641, 3435, 78164, 43814, 
-    43810, 7029, 64258, 41292, 118898, 12748, 42742, 9517, 11518, 0, 78790, 
-    0, 67993, 63956, 42458, 63954, 63953, 63960, 9591, 4516, 10217, 68370, 
-    11469, 69697, 42306, 2723, 118947, 0, 0, 0, 0, 0, 11397, 2880, 0, 0, 
-    2872, 0, 0, 3498, 4378, 917539, 4270, 0, 65551, 68205, 6633, 43387, 0, 
-    5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, 0, 126479, 415, 63964, 63963, 
-    42345, 92310, 5183, 1877, 42498, 0, 2927, 0, 63961, 4472, 0, 0, 78159, 
-    69699, 917936, 42340, 4756, 128078, 7081, 10730, 7691, 10331, 63830, 
-    119625, 42922, 42103, 8628, 9813, 0, 42453, 1604, 9565, 10539, 69701, 
-    65764, 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, 0, 0, 63980, 
-    11801, 3622, 983124, 64336, 12017, 10463, 63981, 4967, 64189, 1966, 
-    43628, 0, 983285, 0, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, 
-    402, 0, 13147, 128692, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 
-    0, 11302, 6259, 43395, 0, 0, 194670, 0, 92351, 0, 74425, 11299, 1561, 0, 
-    92359, 64942, 983559, 194733, 983677, 194732, 0, 74301, 0, 11280, 0, 
-    69784, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, 5409, 127379, 
-    194669, 7402, 5399, 9685, 74089, 7952, 5401, 0, 66616, 68421, 983910, 0, 
-    5405, 127875, 64866, 0, 119583, 128345, 78784, 74248, 11330, 194723, 
-    64690, 3254, 0, 0, 128207, 42390, 43678, 194725, 983900, 65077, 0, 6388, 
-    3355, 9508, 9867, 5723, 11520, 5611, 0, 3377, 0, 0, 0, 0, 78228, 0, 
-    983753, 42691, 917886, 127198, 74767, 0, 127075, 1379, 246, 0, 983752, 
-    3788, 983106, 11041, 92549, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 
-    983688, 10656, 0, 65214, 119242, 42567, 92217, 13163, 983203, 120831, 
-    74597, 3182, 0, 0, 0, 65034, 65889, 42169, 4755, 74244, 194621, 11443, 0, 
-    66319, 74598, 608, 600, 0, 1219, 3934, 64206, 11483, 74510, 0, 74485, 
-    42442, 65470, 983898, 64202, 13160, 7759, 42482, 485, 128006, 0, 9828, 0, 
-    0, 42280, 0, 9351, 7778, 64379, 7496, 42431, 6916, 1208, 0, 119631, 
-    11002, 42470, 0, 118946, 0, 0, 74041, 0, 70045, 43539, 5411, 42196, 0, 0, 
-    0, 9150, 0, 42393, 13086, 1310, 194687, 9337, 12052, 10643, 55271, 
-    983179, 12166, 2546, 194683, 213, 118852, 65611, 0, 0, 194756, 74310, 
-    6554, 0, 11914, 5452, 0, 0, 0, 0, 0, 194681, 92560, 2713, 0, 9650, 43330, 
-    0, 194675, 1406, 0, 0, 92659, 0, 68223, 4143, 194677, 0, 65748, 4141, 
-    9682, 65287, 1508, 127013, 8779, 10569, 8725, 13299, 66638, 65750, 42263, 
-    4145, 6380, 65751, 66613, 43994, 65738, 55250, 9185, 9550, 0, 43403, 0, 
-    0, 0, 65736, 41951, 64816, 65756, 983204, 12955, 10596, 2888, 194645, 0, 
-    0, 9657, 9019, 194766, 0, 2878, 5390, 0, 194961, 0, 68679, 43552, 7501, 
-    6328, 0, 10429, 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986, 
-    126542, 10632, 11934, 11452, 1332, 0, 0, 126647, 0, 118887, 1791, 5191, 
-    9288, 64822, 2892, 0, 43394, 555, 0, 0, 66646, 0, 119002, 13151, 74512, 
-    7289, 74055, 64161, 8854, 64162, 5858, 41927, 10582, 0, 1784, 1361, 
-    195047, 0, 7905, 0, 64868, 128813, 13158, 92166, 7211, 0, 9371, 73973, 
-    917553, 6828, 1625, 92302, 0, 1342, 68440, 64171, 126704, 10903, 983487, 
-    0, 0, 0, 0, 4482, 41606, 0, 128569, 983112, 0, 64381, 0, 0, 195090, 
-    42245, 126467, 41972, 0, 444, 0, 9127, 66687, 66619, 126489, 78025, 0, 
-    11349, 40991, 917570, 0, 119599, 120830, 0, 1197, 128282, 1149, 194970, 
-    0, 0, 40990, 43765, 0, 3492, 0, 127942, 0, 0, 0, 12838, 983969, 19948, 0, 
-    3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 41309, 0, 0, 8152, 0, 41550, 
-    12227, 983613, 0, 12828, 127511, 0, 0, 120708, 0, 0, 10386, 119574, 0, 0, 
-    92680, 983780, 68154, 0, 1743, 0, 0, 92239, 65186, 917571, 0, 9606, 0, 0, 
-    64439, 0, 0, 92686, 0, 0, 194967, 0, 0, 3395, 9362, 10878, 0, 0, 78362, 
-    64830, 0, 126557, 41091, 3426, 1344, 8870, 0, 0, 4735, 127017, 6119, 
-    12822, 42699, 0, 983815, 74818, 1423, 0, 42637, 41080, 0, 12039, 10559, 
-    0, 118892, 0, 9472, 0, 11929, 0, 7170, 9596, 6130, 128826, 43629, 11579, 
-    78713, 0, 194740, 128691, 92185, 66699, 64440, 1004, 92584, 194737, 
-    43234, 66008, 12627, 0, 68414, 0, 43619, 43303, 11300, 43304, 9686, 5890, 
-    11776, 7558, 127158, 65627, 0, 10718, 13154, 3461, 9139, 0, 0, 0, 0, 
-    65365, 73877, 65628, 78019, 120319, 0, 41708, 12860, 2641, 12069, 10838, 
-    5403, 10352, 70085, 10061, 43237, 0, 5140, 209, 128847, 41704, 41056, 
-    43078, 128125, 118809, 0, 10899, 65469, 92362, 0, 0, 2410, 993, 0, 
-    120589, 120689, 78693, 0, 0, 7232, 0, 119253, 0, 7110, 74462, 2066, 
-    10489, 42166, 43463, 10659, 3600, 0, 4224, 1336, 41518, 0, 0, 0, 0, 
-    41139, 64820, 92538, 12966, 41134, 0, 0, 0, 0, 272, 4263, 8793, 0, 0, 
-    41502, 0, 983, 12549, 0, 0, 1190, 4109, 1335, 841, 5888, 41358, 64863, 
-    9544, 43481, 0, 194806, 70027, 2099, 5120, 2409, 7799, 0, 74424, 0, 0, 
-    4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, 0, 64914, 917787, 
-    65101, 0, 11694, 92475, 11690, 5835, 127164, 66625, 10842, 41354, 42123, 
-    43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0, 0, 9972, 73865, 4519, 
-    6114, 10898, 43072, 0, 0, 93960, 983315, 126581, 10695, 0, 7540, 0, 881, 
-    7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, 64321, 8359, 0, 12689, 
-    0, 194594, 0, 983305, 983872, 68183, 0, 983307, 1287, 5436, 0, 983310, 
-    74142, 92328, 74152, 119078, 6051, 10497, 69668, 8985, 12109, 983316, 0, 
-    127242, 0, 0, 3652, 10537, 0, 1276, 120440, 6549, 279, 73745, 0, 0, 0, 
-    1489, 0, 0, 0, 3899, 1007, 42124, 983557, 42122, 92337, 92367, 0, 11985, 
-    1345, 78600, 0, 0, 8956, 43083, 94057, 42138, 78610, 0, 12151, 78608, 
-    78604, 78605, 6285, 78603, 78612, 78613, 65942, 492, 8685, 0, 983750, 0, 
-    78622, 43712, 2582, 11470, 64538, 7444, 78615, 78616, 2297, 0, 73837, 
-    119823, 2527, 119824, 197, 2799, 92594, 41944, 120276, 9933, 0, 66515, 
-    767, 5524, 7028, 0, 0, 119827, 119817, 119828, 78633, 10896, 0, 1799, 
-    120497, 6971, 74336, 128342, 0, 65340, 118979, 41551, 2434, 94018, 0, 
-    120579, 0, 4631, 0, 0, 6407, 0, 6338, 43214, 0, 7570, 0, 3192, 0, 8414, 
-    0, 93983, 0, 0, 0, 9164, 66612, 93959, 3171, 6623, 4961, 68396, 886, 
-    55216, 8654, 78832, 9993, 74390, 64603, 70066, 69241, 9599, 78629, 43084, 
-    78627, 78628, 78625, 2399, 69693, 8994, 10944, 41208, 983704, 41168, 
-    8178, 0, 3367, 92334, 42510, 78641, 78636, 6804, 78634, 1947, 0, 0, 
-    92681, 42759, 11068, 1705, 9331, 0, 74798, 9181, 65359, 0, 8017, 119831, 
-    65096, 66720, 0, 43475, 0, 4909, 12126, 128673, 120696, 4904, 983326, 
-    69650, 1365, 9253, 42757, 43436, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, 
-    5398, 0, 127386, 93953, 0, 0, 119015, 0, 0, 9476, 0, 983768, 12763, 
-    126603, 3629, 0, 13005, 0, 3628, 0, 0, 92502, 3469, 42107, 42116, 917578, 
-    64809, 2928, 4905, 9853, 851, 9040, 0, 64665, 43086, 9114, 0, 42583, 
-    9315, 4822, 4906, 3852, 2847, 119821, 3236, 11317, 1251, 7777, 41852, 
-    11410, 10964, 0, 43222, 12646, 120269, 10259, 9865, 65821, 0, 6018, 
-    92290, 0, 12276, 0, 68372, 0, 92259, 119244, 0, 983225, 10467, 0, 2443, 
-    10918, 78217, 119825, 1001, 9241, 1927, 0, 0, 73987, 127885, 0, 0, 
+    118907, 0, 10474, 43426, 13257, 42354, 128099, 983698, 70044, 195065, 0, 
+    8413, 983816, 0, 5693, 7272, 0, 13209, 64470, 65831, 74350, 195063, 0, 0, 
+    0, 126639, 120097, 0, 94078, 128133, 127767, 66608, 3111, 41863, 8804, 
+    42913, 92187, 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, 55226, 
+    128353, 63982, 7393, 12807, 43413, 63906, 1598, 63904, 0, 0, 41729, 4423, 
+    1307, 0, 10515, 41589, 128698, 0, 6218, 0, 1430, 0, 0, 120606, 78754, 
+    5413, 7619, 3255, 3493, 74032, 11549, 10735, 41743, 73937, 6801, 983633, 
+    4518, 10990, 65073, 5167, 4481, 3771, 120158, 2710, 0, 69243, 41724, 0, 
+    43073, 41690, 12479, 983635, 0, 0, 983818, 70046, 1628, 127149, 983487, 
+    983731, 65262, 6333, 10783, 42315, 0, 63855, 94056, 0, 0, 5339, 74323, 0, 
+    13004, 0, 4457, 0, 0, 194818, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 
+    68464, 12633, 12870, 69705, 65183, 5688, 11926, 6033, 6310, 5686, 0, 
+    74251, 0, 120647, 0, 50, 10558, 9871, 42612, 43655, 0, 0, 0, 66468, 0, 
+    13259, 4448, 0, 983845, 0, 70043, 67853, 0, 10640, 11539, 1151, 0, 
+    917607, 127544, 127079, 195050, 127852, 0, 0, 0, 12501, 64604, 0, 11527, 
+    118870, 8812, 0, 11538, 8673, 12650, 11020, 0, 66467, 2105, 8087, 78163, 
+    69632, 9894, 0, 0, 0, 4636, 55262, 78513, 4515, 2382, 0, 127055, 0, 
+    120495, 0, 128284, 12277, 194627, 11995, 92553, 0, 12158, 0, 8741, 10197, 
+    0, 92426, 0, 6531, 0, 127846, 473, 43415, 0, 983650, 1873, 1087, 0, 0, 0, 
+    78527, 66439, 43218, 983123, 194716, 7237, 12504, 74282, 0, 983571, 0, 
+    9489, 0, 0, 4384, 74220, 63845, 2058, 128863, 13295, 43191, 128030, 0, 
+    1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, 
+    0, 495, 119007, 41712, 7983, 0, 93997, 0, 6347, 120165, 7654, 41710, 
+    4196, 0, 437, 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, 
+    4999, 194642, 0, 126582, 4711, 120769, 0, 2739, 0, 8044, 74834, 194643, 
+    41789, 128142, 10809, 0, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, 
+    13058, 120449, 12875, 0, 92186, 13229, 0, 10575, 43399, 0, 0, 41791, 
+    1104, 0, 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, 6569, 0, 0, 0, 69849, 
+    6783, 0, 12993, 8049, 41548, 44021, 6458, 983807, 128882, 4761, 63828, 
+    4766, 64623, 1273, 43407, 0, 118876, 195045, 6912, 1313, 6322, 10483, 
+    983603, 41545, 0, 92449, 0, 0, 0, 0, 78624, 3484, 74337, 0, 0, 8503, 
+    5122, 41527, 0, 66320, 983811, 0, 0, 0, 41537, 69683, 8303, 8282, 11817, 
+    73857, 10003, 73859, 65904, 7363, 1686, 0, 78406, 11467, 3664, 65921, 
+    64299, 194664, 0, 0, 4324, 126, 42246, 119152, 0, 74378, 65926, 7744, 
+    194636, 74277, 74302, 78052, 43817, 6966, 43822, 8136, 0, 65600, 1633, 0, 
+    0, 4762, 1103, 0, 0, 4765, 983492, 13078, 0, 4760, 63827, 2050, 10871, 
+    43199, 1102, 0, 42236, 128867, 194667, 11546, 74794, 337, 0, 42591, 8627, 
+    12279, 1111, 0, 92161, 4707, 68206, 10143, 7883, 127081, 7880, 4522, 
+    8645, 5704, 13010, 0, 8304, 917561, 0, 119575, 2293, 0, 66654, 0, 92676, 
+    0, 13008, 0, 4385, 0, 13011, 0, 92569, 119161, 13009, 160, 2677, 0, 0, 
+    41793, 65763, 74221, 120141, 41792, 42770, 94054, 65762, 118829, 43821, 
+    5709, 0, 94053, 43816, 0, 0, 1079, 3867, 5708, 0, 0, 43797, 5706, 64768, 
+    5705, 8791, 4005, 0, 10237, 10991, 128816, 43459, 9173, 917581, 917580, 
+    13170, 12540, 917577, 42605, 120765, 126617, 68647, 917572, 10058, 0, 
+    74867, 194654, 127078, 3339, 11448, 1106, 917591, 917590, 917593, 3340, 
+    917587, 917586, 917589, 917588, 120541, 10605, 1309, 63966, 120743, 1754, 
+    92226, 13246, 864, 0, 118926, 8972, 0, 7849, 120092, 92533, 13240, 
+    195068, 5192, 4338, 67982, 10948, 917601, 13199, 92575, 1236, 13208, 
+    13261, 13189, 13188, 93993, 0, 7440, 0, 120153, 9553, 1590, 63777, 63776, 
+    13178, 63782, 63781, 63780, 63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, 
+    41522, 983915, 92168, 983772, 917858, 11354, 94071, 0, 42795, 0, 119195, 
+    11394, 194646, 13236, 13272, 13194, 1334, 69926, 4479, 1178, 65586, 
+    120663, 66681, 119193, 4601, 0, 0, 983765, 0, 0, 194658, 0, 6809, 63786, 
+    6031, 0, 63791, 63790, 1145, 63788, 7910, 63785, 43153, 754, 10192, 
+    13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 64890, 0, 983131, 0, 
+    41719, 63758, 3523, 1074, 13258, 9536, 74077, 0, 4427, 74242, 63757, 
+    43145, 12217, 63754, 41532, 1349, 63750, 63749, 0, 0, 0, 63753, 63802, 
+    41084, 120622, 68133, 41930, 63805, 63804, 43632, 63801, 41082, 8140, 
+    63798, 6260, 0, 0, 94074, 63793, 11988, 3898, 128241, 10201, 12238, 
+    63795, 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 
+    983329, 42203, 7950, 10804, 63771, 42787, 4386, 12224, 6973, 2793, 12475, 
+    0, 0, 63769, 9530, 983119, 12232, 13135, 8596, 5681, 63762, 4595, 63760, 
+    792, 0, 64803, 0, 8742, 0, 11053, 128796, 63744, 128107, 0, 7588, 63748, 
+    1693, 63746, 43204, 5055, 68426, 917853, 1090, 120679, 128356, 11665, 
+    74133, 4558, 65685, 9523, 0, 0, 78681, 11513, 0, 6157, 63775, 63774, 
+    63773, 13191, 12170, 3500, 3139, 0, 3170, 12485, 0, 10872, 78271, 13006, 
+    64433, 0, 0, 941, 0, 0, 0, 65541, 11063, 0, 8228, 0, 42065, 0, 0, 94039, 
+    0, 92455, 7386, 0, 64444, 0, 119863, 43603, 94075, 65397, 288, 0, 0, 0, 
+    10025, 69915, 2918, 0, 65300, 119871, 9883, 64726, 2790, 65395, 3793, 0, 
+    127829, 65393, 0, 74138, 0, 0, 0, 74139, 92712, 65394, 11548, 5270, 0, 
+    65396, 0, 65813, 13256, 1282, 120771, 0, 0, 10888, 983604, 65242, 0, 
+    3330, 0, 0, 983974, 0, 0, 74259, 3304, 42753, 0, 0, 0, 1627, 0, 0, 0, 
+    5371, 13116, 0, 1826, 118794, 0, 43094, 70023, 43650, 94037, 0, 9035, 0, 
+    0, 128005, 0, 92207, 68125, 0, 164, 0, 94067, 94000, 6958, 0, 43116, 0, 
+    70019, 13245, 0, 0, 127376, 0, 70031, 127756, 12666, 13175, 13207, 
+    120414, 66014, 120428, 7447, 5929, 0, 65509, 0, 7449, 11306, 0, 73920, 
+    3180, 0, 63808, 9054, 971, 13062, 0, 0, 65195, 10164, 92252, 74428, 0, 
+    78146, 92611, 0, 0, 0, 10045, 12882, 13275, 128161, 11057, 0, 13276, 0, 
+    41525, 78150, 7271, 11444, 0, 0, 0, 12229, 41523, 0, 43411, 73751, 0, 
+    64813, 0, 0, 10476, 3858, 0, 3932, 64958, 0, 0, 73989, 68192, 0, 69847, 
+    369, 0, 41784, 0, 64163, 0, 0, 0, 65474, 4796, 12292, 126595, 65479, 0, 
+    41781, 10486, 41480, 43002, 9899, 0, 0, 404, 12821, 3741, 0, 5788, 8092, 
+    68212, 41222, 1831, 66020, 3982, 0, 4388, 0, 746, 120784, 0, 0, 12018, 
+    65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, 
+    4374, 0, 128179, 1364, 0, 8038, 0, 917597, 12868, 69814, 0, 6735, 73979, 
+    13174, 73968, 13225, 0, 69808, 65835, 0, 2365, 7841, 0, 42855, 118856, 
+    42866, 0, 0, 0, 66438, 41785, 12617, 64172, 13173, 4372, 119354, 0, 
+    983568, 0, 0, 92402, 128062, 12965, 384, 64512, 10404, 10340, 119352, 
+    1556, 5274, 13210, 120125, 10017, 9733, 41787, 983243, 126994, 41373, 
+    78039, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703, 
+    119883, 12861, 4398, 8543, 65618, 128018, 1096, 0, 0, 42688, 12441, 
+    12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 126646, 
+    119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 119874, 
+    94107, 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 
+    128123, 41533, 66337, 0, 92184, 0, 4965, 43445, 917536, 73849, 0, 43638, 
+    78537, 128287, 6261, 119342, 43147, 66570, 1957, 10420, 982, 2756, 13292, 
+    13206, 128828, 0, 2925, 73809, 13056, 127559, 13212, 43238, 0, 13190, 
+    13187, 92541, 13198, 118793, 0, 5242, 119179, 64476, 1694, 8216, 71369, 
+    6770, 43331, 0, 65620, 983728, 43544, 126466, 0, 41444, 65621, 69955, 
+    9197, 5246, 119106, 13185, 9709, 120323, 120322, 12314, 65616, 5238, 
+    119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 128537, 3936, 119331, 
+    11699, 41347, 127249, 13235, 8842, 41248, 0, 4379, 13239, 12692, 7969, 
+    127266, 7219, 127250, 128251, 120509, 0, 66224, 734, 2979, 120303, 65619, 
+    9872, 957, 64921, 1846, 66631, 41477, 119256, 120310, 74511, 41770, 1670, 
+    6442, 120317, 42446, 5379, 120318, 41163, 74832, 120315, 120314, 11506, 
+    0, 42841, 13267, 0, 0, 41775, 0, 7130, 41773, 0, 10663, 0, 0, 0, 6151, 
+    12110, 42673, 65572, 65293, 65250, 13265, 13264, 64518, 0, 6100, 0, 
+    92647, 5808, 65922, 0, 12967, 66041, 5612, 4583, 0, 0, 68097, 64575, 
+    126637, 11965, 0, 68358, 0, 69789, 0, 92260, 68102, 9698, 7814, 74476, 
+    119651, 128514, 0, 41921, 118858, 9756, 6985, 119258, 78490, 74219, 0, 0, 
+    118997, 8012, 5674, 12353, 0, 12361, 5677, 5588, 0, 41925, 128124, 41920, 
+    5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, 42511, 
+    1727, 120725, 42436, 0, 0, 0, 74222, 8718, 3550, 736, 10268, 4505, 10316, 
+    74090, 5826, 55232, 5813, 0, 120712, 5841, 5837, 55234, 0, 3105, 12829, 
+    5838, 5796, 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, 120091, 7956, 
+    598, 0, 64649, 5806, 42398, 0, 9037, 5671, 120041, 983255, 0, 0, 128855, 
+    0, 847, 128242, 9529, 0, 66657, 6980, 78483, 120035, 78484, 983491, 0, 
+    120033, 78486, 0, 0, 120039, 42683, 0, 983055, 7114, 0, 0, 43190, 65463, 
+    1554, 0, 42611, 42563, 0, 5651, 2929, 6792, 43201, 0, 19963, 5698, 0, 0, 
+    0, 0, 5644, 10292, 65546, 69727, 68141, 8372, 0, 65116, 0, 120022, 10175, 
+    10388, 42799, 94100, 41013, 10568, 0, 983618, 2869, 0, 41015, 194692, 
+    2785, 4366, 0, 10954, 41802, 0, 42608, 78469, 9884, 4759, 0, 0, 10266, 
+    41359, 1170, 43365, 69810, 73908, 1609, 902, 0, 63936, 128875, 11661, 
+    8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 2213, 0, 0, 807, 
+    43079, 0, 78475, 976, 5511, 64553, 0, 42155, 0, 41356, 74110, 118801, 
+    126614, 0, 8676, 983291, 0, 5582, 451, 63941, 5798, 9349, 42018, 127858, 
+    0, 0, 43609, 5906, 120553, 1440, 0, 128853, 120016, 74283, 11005, 0, 
+    66656, 66044, 0, 194698, 0, 0, 43393, 10094, 0, 11529, 10857, 120643, 
+    66436, 6546, 93, 8102, 0, 68405, 0, 0, 8171, 0, 119097, 127064, 917543, 
+    383, 7154, 41656, 92634, 94040, 0, 5187, 71296, 127277, 11286, 68620, 
+    64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 983827, 8292, 195074, 4980, 
+    8860, 73947, 10028, 65291, 7076, 13182, 194705, 0, 0, 10631, 66031, 7972, 
+    0, 78785, 0, 7900, 0, 11309, 3806, 4198, 42725, 0, 67656, 9995, 0, 92552, 
+    0, 12931, 0, 42684, 74285, 2088, 64213, 64366, 65156, 8814, 42238, 74771, 
+    0, 0, 12836, 0, 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0, 65865, 
+    0, 194650, 127144, 0, 9342, 120464, 0, 64516, 0, 78792, 10129, 41007, 
+    74375, 0, 40995, 12209, 41012, 119136, 0, 0, 69724, 40992, 92264, 127153, 
+    68653, 43558, 5522, 0, 61, 0, 74105, 3633, 983900, 65162, 41234, 12089, 
+    78281, 9771, 983905, 13251, 128701, 0, 6262, 2784, 42743, 0, 8126, 66483, 
+    0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, 7108, 194779, 10890, 
+    74481, 65834, 8324, 119103, 64417, 74817, 127465, 64737, 0, 983659, 8930, 
+    66678, 74249, 1193, 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, 
+    77904, 92640, 77905, 9034, 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, 
+    0, 0, 0, 42815, 0, 41966, 0, 127471, 0, 11792, 43064, 41025, 911, 7539, 
+    0, 0, 120339, 65159, 64390, 0, 0, 5520, 11662, 0, 65330, 42812, 0, 0, 
+    12326, 983856, 0, 42808, 128337, 9348, 64901, 983861, 0, 0, 0, 0, 0, 
+    917584, 43702, 983576, 5857, 65342, 92727, 119120, 120079, 8644, 0, 0, 0, 
+    74296, 41909, 0, 120332, 2791, 69663, 1891, 69824, 0, 41907, 66647, 
+    118939, 8761, 12942, 5748, 0, 10773, 0, 0, 8796, 78149, 6412, 2061, 8520, 
+    13146, 127185, 63931, 0, 65902, 2882, 0, 0, 12843, 4520, 120345, 92459, 
+    0, 983660, 0, 73860, 0, 0, 64345, 0, 9201, 128314, 194940, 0, 0, 43679, 
+    917585, 65117, 92270, 0, 10427, 0, 3844, 120675, 9755, 1110, 6612, 12222, 
+    0, 128789, 0, 0, 783, 194935, 0, 0, 983064, 194720, 65056, 3620, 41180, 
+    68378, 4556, 0, 0, 194933, 74250, 0, 67657, 10510, 4382, 66482, 0, 0, 
+    127527, 9177, 8902, 93958, 9839, 0, 12891, 983755, 983636, 63999, 2016, 
+    41917, 9788, 63928, 0, 1862, 65800, 9155, 66623, 9786, 65082, 41919, 
+    8579, 41914, 7981, 0, 66017, 4508, 64883, 92456, 92522, 127814, 0, 64592, 
+    74276, 120080, 6784, 78788, 68181, 0, 0, 0, 127534, 12147, 9024, 66378, 
+    66472, 983929, 64289, 65289, 78151, 66658, 194929, 64509, 78152, 0, 
+    126505, 11051, 983296, 0, 11355, 65885, 0, 128310, 41214, 0, 12299, 0, 
+    7500, 4506, 7773, 0, 0, 9963, 68649, 126609, 4040, 120570, 6167, 0, 
+    63922, 6594, 983740, 0, 0, 3624, 43036, 0, 6387, 63990, 19947, 63988, 
+    41955, 0, 63993, 10440, 9611, 65605, 6803, 0, 7738, 63986, 11446, 63984, 
+    92641, 3435, 78164, 43814, 43810, 7029, 64258, 41292, 118898, 12748, 
+    42742, 9517, 11518, 0, 78790, 0, 67993, 63956, 42458, 63954, 63953, 
+    63960, 9591, 4516, 10217, 68370, 11469, 69697, 42306, 2723, 118947, 0, 0, 
+    0, 0, 0, 11397, 2880, 0, 0, 2872, 0, 0, 3498, 4378, 917539, 4270, 0, 
+    65551, 68205, 6633, 43387, 0, 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, 
+    0, 126479, 415, 63964, 63963, 42345, 92310, 5183, 1877, 42498, 0, 2927, 
+    0, 63961, 4472, 0, 0, 78159, 69699, 917936, 42340, 4756, 128078, 7081, 
+    10730, 7691, 10331, 63830, 119625, 42922, 42103, 8628, 9813, 0, 42453, 
+    1604, 9565, 10539, 69701, 65764, 41415, 65767, 0, 8457, 42301, 11372, 
+    64873, 11992, 0, 0, 63980, 11801, 3622, 983124, 64336, 12017, 10463, 
+    63981, 4967, 64189, 1966, 43628, 0, 983292, 0, 0, 63971, 4347, 4416, 
+    42098, 11009, 10694, 63973, 402, 0, 13147, 128692, 42100, 64646, 13228, 
+    0, 41875, 3515, 74252, 11805, 0, 11302, 6259, 43395, 0, 0, 194670, 0, 
+    92351, 0, 74425, 11299, 1561, 0, 92359, 64942, 983559, 194733, 983686, 
+    194732, 0, 74301, 0, 11280, 0, 69784, 74060, 0, 0, 119664, 5145, 12486, 
+    65018, 66516, 5409, 127379, 194669, 7402, 5399, 9685, 74089, 7952, 5401, 
+    0, 66616, 68421, 983919, 0, 5405, 127875, 64866, 0, 119583, 128345, 
+    78784, 74248, 11330, 194723, 64690, 3254, 0, 0, 128207, 42390, 43678, 
+    194725, 983909, 65077, 0, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 0, 
+    3377, 0, 0, 0, 0, 78228, 0, 983762, 42691, 917886, 127198, 74767, 0, 
+    127075, 1379, 246, 0, 983761, 3788, 983106, 11041, 92549, 66304, 0, 0, 
+    8917, 42403, 301, 0, 0, 0, 0, 0, 983697, 10656, 0, 65214, 119242, 42567, 
+    92217, 13163, 983204, 120831, 74597, 3182, 0, 0, 0, 65034, 65889, 42169, 
+    4755, 74244, 194621, 11443, 0, 66319, 74598, 608, 600, 0, 1219, 3934, 
+    64206, 11483, 74510, 0, 74485, 42442, 65470, 983907, 64202, 13160, 7759, 
+    42482, 485, 128006, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, 
+    42431, 6916, 1208, 0, 119631, 11002, 42470, 0, 118946, 0, 0, 74041, 0, 
+    70045, 43539, 5411, 42196, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 
+    9337, 12052, 10643, 55271, 983179, 12166, 2546, 194683, 213, 118852, 
+    65611, 0, 0, 194756, 74310, 6554, 0, 11914, 5452, 0, 0, 0, 0, 0, 194681, 
+    92560, 2713, 0, 9650, 43330, 0, 194675, 1406, 0, 0, 92659, 0, 68223, 
+    4143, 194677, 0, 65748, 4141, 9682, 65287, 1508, 127013, 8779, 10569, 
+    8725, 13299, 66638, 65750, 42263, 4145, 6380, 65751, 66613, 43994, 65738, 
+    55250, 9185, 9550, 0, 43403, 0, 0, 0, 65736, 41951, 64816, 65756, 983205, 
+    12955, 10596, 2888, 194645, 0, 0, 9657, 9019, 194766, 0, 2878, 5390, 0, 
+    194961, 0, 68679, 43552, 7501, 6328, 0, 10429, 10365, 0, 0, 41946, 7503, 
+    5235, 803, 68381, 0, 0, 8986, 126542, 10632, 11934, 11452, 1332, 0, 0, 
+    126647, 0, 118887, 1791, 5191, 9288, 64822, 2892, 0, 43394, 555, 0, 0, 
+    66646, 0, 119002, 13151, 74512, 7289, 74055, 64161, 8854, 64162, 5858, 
+    41927, 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 128813, 13158, 
+    92166, 7211, 0, 9371, 73973, 917553, 6828, 1625, 92302, 0, 1342, 68440, 
+    64171, 126704, 10903, 983494, 0, 0, 0, 0, 4482, 41606, 0, 128569, 983112, 
+    0, 64381, 0, 0, 195090, 42245, 126467, 41972, 0, 444, 0, 9127, 66687, 
+    66619, 126489, 78025, 0, 11349, 40991, 917570, 0, 119599, 120830, 0, 
+    1197, 128282, 1149, 194970, 0, 0, 40990, 43765, 0, 3492, 0, 127942, 0, 0, 
+    0, 12838, 983978, 19948, 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 
+    41309, 0, 0, 8152, 0, 41550, 12227, 983613, 0, 12828, 127511, 0, 0, 
+    120708, 0, 0, 10386, 119574, 0, 0, 92680, 983789, 68154, 0, 1743, 0, 0, 
+    92239, 65186, 917571, 0, 9606, 0, 0, 64439, 0, 0, 92686, 0, 0, 194967, 0, 
+    0, 3395, 9362, 10878, 0, 0, 78362, 64830, 0, 126557, 41091, 3426, 1344, 
+    8870, 0, 0, 4735, 127017, 6119, 12822, 42699, 0, 983824, 74818, 1423, 0, 
+    42637, 41080, 0, 12039, 10559, 0, 118892, 0, 9472, 0, 11929, 0, 7170, 
+    9596, 6130, 128826, 43629, 11579, 78713, 0, 194740, 128691, 92185, 66699, 
+    64440, 1004, 92584, 194737, 43234, 66008, 12627, 0, 68414, 0, 43619, 
+    43303, 11300, 43304, 9686, 5890, 11776, 7558, 127158, 65627, 0, 10718, 
+    13154, 3461, 9139, 0, 0, 0, 0, 65365, 73877, 65628, 78019, 120319, 0, 
+    41708, 12860, 2641, 12069, 10838, 5403, 10352, 70085, 10061, 43237, 0, 
+    5140, 209, 128847, 41704, 41056, 43078, 128125, 118809, 0, 10899, 65469, 
+    92362, 0, 0, 2410, 993, 0, 120589, 120689, 78693, 0, 0, 7232, 0, 119253, 
+    0, 7110, 74462, 2066, 10489, 42166, 43463, 10659, 3600, 0, 4224, 1336, 
+    41518, 0, 0, 0, 0, 41139, 64820, 92538, 12966, 41134, 0, 0, 0, 0, 272, 
+    4263, 8793, 0, 0, 41502, 0, 983, 12549, 0, 0, 1190, 4109, 1335, 841, 
+    5888, 41358, 64863, 9544, 43481, 0, 194806, 70027, 2099, 5120, 2409, 
+    7799, 0, 74424, 0, 0, 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, 
+    0, 64914, 917787, 65101, 0, 11694, 92475, 11690, 5835, 127164, 66625, 
+    10842, 41354, 42123, 43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0, 
+    0, 9972, 73865, 4519, 6114, 10898, 43072, 0, 0, 93960, 983322, 126581, 
+    10695, 0, 7540, 0, 881, 7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, 
+    64321, 8359, 0, 12689, 0, 194594, 0, 983312, 983881, 68183, 0, 983314, 
+    1287, 5436, 0, 983317, 74142, 92328, 74152, 119078, 6051, 10497, 69668, 
+    8985, 12109, 983323, 0, 127242, 0, 0, 3652, 10537, 0, 1276, 120440, 6549, 
+    279, 73745, 0, 0, 0, 1489, 0, 0, 0, 3899, 1007, 42124, 983557, 42122, 
+    92337, 92367, 0, 11985, 1345, 78600, 0, 0, 8956, 43083, 94057, 42138, 
+    78610, 0, 12151, 78608, 78604, 78605, 6285, 78603, 78612, 78613, 65942, 
+    492, 8685, 0, 983759, 0, 78622, 43712, 2582, 11470, 64538, 7444, 78615, 
+    78616, 2297, 0, 73837, 119823, 2527, 119824, 197, 2799, 92594, 41944, 
+    120276, 9933, 0, 66515, 767, 5524, 7028, 0, 0, 119827, 119817, 119828, 
+    78633, 10896, 0, 1799, 120497, 6971, 74336, 128342, 0, 65340, 118979, 
+    41551, 2434, 94018, 0, 120579, 0, 4631, 0, 0, 6407, 0, 6338, 43214, 0, 
+    7570, 0, 3192, 0, 8414, 0, 93983, 0, 0, 0, 9164, 66612, 93959, 3171, 
+    6623, 4961, 68396, 886, 55216, 8654, 78832, 9993, 74390, 64603, 70066, 
+    69241, 9599, 78629, 43084, 78627, 78628, 78625, 2399, 69693, 8994, 10944, 
+    41208, 983713, 41168, 8178, 0, 3367, 92334, 42510, 78641, 78636, 6804, 
+    78634, 1947, 0, 0, 92681, 42759, 11068, 1705, 9331, 0, 74798, 9181, 
+    65359, 0, 8017, 119831, 65096, 66720, 0, 43475, 0, 4909, 12126, 128673, 
+    120696, 4904, 983333, 69650, 1365, 9253, 42757, 43436, 7462, 0, 0, 0, 0, 
+    119587, 64415, 0, 0, 5398, 0, 127386, 93953, 0, 0, 119015, 0, 0, 9476, 0, 
+    983777, 12763, 126603, 3629, 0, 13005, 0, 3628, 0, 0, 92502, 3469, 42107, 
+    42116, 917578, 64809, 2928, 4905, 9853, 851, 9040, 0, 64665, 43086, 9114, 
+    0, 42583, 9315, 4822, 4906, 3852, 2847, 119821, 3236, 11317, 1251, 7777, 
+    41852, 11410, 10964, 0, 43222, 12646, 120269, 10259, 9865, 65821, 0, 
+    6018, 92290, 0, 12276, 0, 68372, 0, 92259, 119244, 0, 983230, 10467, 0, 
+    2443, 10918, 78217, 119825, 1001, 9241, 1927, 0, 0, 73987, 127885, 0, 0, 
     118828, 120271, 65678, 12867, 0, 8260, 77945, 7519, 11505, 12274, 8904, 
     518, 65857, 0, 128674, 13204, 4387, 857, 0, 65369, 0, 92336, 43125, 
     120592, 0, 0, 0, 0, 5136, 1968, 983041, 126627, 1337, 64967, 1629, 0, 
@@ -18779,44 +18796,44 @@
     78698, 78697, 78696, 78695, 8710, 42495, 118956, 0, 4051, 10460, 43364, 
     118917, 1356, 12161, 42713, 128857, 127268, 1619, 9703, 43152, 42489, 
     42112, 127978, 1875, 10808, 42109, 120284, 41860, 64862, 13305, 64907, 
-    5289, 13144, 128658, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 983270, 
+    5289, 13144, 128658, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 983277, 
     119830, 43236, 3382, 42449, 6498, 1658, 11936, 78232, 0, 11269, 10151, 
     73759, 43100, 69888, 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 74753, 
     65178, 4684, 78701, 119653, 0, 126551, 0, 6048, 74460, 42110, 73965, 
     10870, 8557, 11054, 68664, 119049, 9681, 4475, 0, 41142, 2100, 0, 120731, 
-    6035, 0, 7651, 10296, 64443, 0, 983288, 917987, 0, 118966, 74144, 40997, 
+    6035, 0, 7651, 10296, 64443, 0, 983295, 917987, 0, 118966, 74144, 40997, 
     0, 10392, 10328, 40998, 43462, 74488, 0, 9800, 8979, 0, 13307, 41000, 0, 
     119239, 6487, 3386, 0, 10344, 0, 65299, 5394, 43246, 78243, 10220, 66505, 
     41200, 128583, 4425, 0, 0, 0, 43074, 73799, 983200, 78147, 0, 12173, 
     78545, 0, 127011, 65338, 0, 0, 119582, 4474, 0, 43093, 128644, 1587, 0, 
-    127372, 64475, 128098, 1369, 983663, 9959, 7927, 0, 4560, 0, 0, 92277, 0, 
-    64948, 4430, 74347, 42601, 4514, 66434, 93955, 8194, 65462, 10626, 10965, 
-    0, 8893, 983294, 12542, 0, 65341, 0, 65829, 7925, 119822, 10475, 0, 0, 
-    1352, 11069, 7707, 127560, 126486, 65279, 127102, 68207, 127100, 7099, 
-    6040, 127097, 10071, 0, 9336, 43750, 0, 8899, 7798, 64474, 64259, 69873, 
-    65188, 7820, 43018, 127082, 0, 7746, 1492, 78551, 10884, 77982, 0, 5127, 
-    11285, 42501, 5495, 4273, 43095, 41426, 10849, 5730, 2999, 6342, 68636, 
-    74304, 371, 64373, 6023, 169, 5497, 11708, 0, 0, 6323, 194684, 8224, 0, 
-    8938, 6043, 12738, 0, 983076, 5321, 0, 194798, 0, 2589, 74332, 1689, 
-    7802, 4683, 74318, 42704, 120296, 11905, 0, 0, 128516, 128163, 74513, 
-    6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 71312, 5731, 1381, 2387, 
-    0, 0, 8289, 64525, 65817, 2881, 43142, 0, 9601, 2879, 9668, 9766, 0, 
-    5729, 917833, 74410, 6036, 64881, 4026, 9361, 127091, 2887, 0, 3526, 
-    6298, 0, 77897, 120095, 78519, 0, 8572, 6021, 77896, 128288, 77895, 
-    43155, 0, 119849, 3146, 10959, 9483, 0, 77893, 10981, 166, 917841, 8635, 
-    983606, 10623, 408, 119058, 127507, 13298, 0, 7426, 41641, 12717, 0, 
-    7607, 10639, 43396, 0, 0, 41643, 74134, 983054, 8713, 41640, 10221, 
-    41645, 66712, 6645, 646, 66726, 66711, 42129, 93994, 77901, 3472, 8697, 
-    0, 0, 983806, 0, 0, 0, 5809, 1950, 119356, 92432, 74572, 0, 42136, 0, 0, 
-    0, 0, 3247, 119854, 65017, 983944, 68428, 66668, 0, 0, 10983, 0, 0, 0, 
-    41567, 0, 0, 0, 194624, 119853, 0, 0, 8285, 0, 4509, 0, 66471, 12216, 0, 
-    40988, 92592, 74809, 41727, 0, 42848, 2396, 917766, 0, 74018, 917538, 
+    127372, 64475, 128098, 1369, 983672, 9959, 7927, 0, 4560, 0, 0, 92277, 
+    983621, 64948, 4430, 74347, 42601, 4514, 66434, 93955, 8194, 65462, 
+    10626, 10965, 0, 8893, 983301, 12542, 0, 65341, 0, 65829, 7925, 119822, 
+    10475, 0, 0, 1352, 11069, 7707, 127560, 126486, 65279, 127102, 68207, 
+    127100, 7099, 6040, 127097, 10071, 0, 9336, 43750, 0, 8899, 7798, 64474, 
+    64259, 69873, 65188, 7820, 43018, 127082, 0, 7746, 1492, 78551, 10884, 
+    77982, 0, 5127, 11285, 42501, 5495, 4273, 43095, 41426, 10849, 5730, 
+    2999, 6342, 68636, 74304, 371, 64373, 6023, 169, 5497, 11708, 0, 0, 6323, 
+    194684, 8224, 0, 8938, 6043, 12738, 0, 983076, 5321, 0, 194798, 0, 2589, 
+    74332, 1689, 7802, 4683, 74318, 42704, 120296, 11905, 0, 0, 128516, 
+    128163, 74513, 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 71312, 
+    5731, 1381, 2387, 0, 0, 8289, 64525, 65817, 2881, 43142, 0, 9601, 2879, 
+    9668, 9766, 0, 5729, 917833, 74410, 6036, 64881, 4026, 9361, 127091, 
+    2887, 0, 3526, 6298, 0, 77897, 120095, 78519, 0, 8572, 6021, 77896, 
+    128288, 77895, 43155, 0, 119849, 3146, 10959, 9483, 0, 77893, 10981, 166, 
+    917841, 8635, 983606, 10623, 408, 119058, 127507, 13298, 0, 7426, 41641, 
+    12717, 0, 7607, 10639, 43396, 0, 0, 41643, 74134, 983054, 8713, 41640, 
+    10221, 41645, 66712, 6645, 646, 66726, 66711, 42129, 93994, 77901, 3472, 
+    8697, 0, 0, 983815, 0, 0, 0, 5809, 1950, 119356, 92432, 74572, 0, 42136, 
+    0, 0, 0, 0, 3247, 119854, 65017, 983953, 68428, 66668, 0, 0, 10983, 0, 0, 
+    0, 41567, 0, 0, 0, 194624, 119853, 0, 0, 8285, 0, 4509, 0, 66471, 12216, 
+    0, 40988, 92592, 74809, 41727, 0, 42848, 2396, 917766, 0, 74018, 917538, 
     64940, 7027, 3886, 0, 42457, 119008, 0, 996, 68123, 94058, 4249, 0, 
     917594, 11707, 8222, 0, 7939, 92454, 92460, 127801, 917592, 128359, 8534, 
-    127154, 40983, 0, 983235, 0, 7201, 12561, 0, 42371, 12558, 1540, 917549, 
+    127154, 40983, 0, 983240, 0, 7201, 12561, 0, 42371, 12558, 1540, 917549, 
     10052, 40982, 0, 0, 1488, 0, 0, 0, 917559, 0, 0, 1563, 128034, 9619, 
-    983931, 0, 0, 127872, 71363, 5803, 7797, 6070, 10006, 0, 2922, 6082, 0, 
-    65009, 983933, 12567, 128703, 0, 41412, 0, 0, 3607, 9200, 10046, 9612, 
+    983940, 0, 0, 127872, 71363, 5803, 7797, 6070, 10006, 0, 2922, 6082, 0, 
+    65009, 983942, 12567, 128703, 0, 41412, 0, 0, 3607, 9200, 10046, 9612, 
     42153, 8218, 9485, 0, 2032, 78354, 0, 0, 0, 0, 0, 43085, 6057, 508, 
     93968, 128015, 67968, 0, 92405, 0, 0, 638, 6083, 119072, 0, 0, 2305, 
     78348, 68096, 0, 6056, 6659, 67969, 0, 6085, 0, 0, 3915, 41634, 0, 41639, 
@@ -18824,15 +18841,15 @@
     12328, 501, 93985, 10601, 0, 583, 0, 41977, 0, 66004, 119350, 6505, 
     74010, 0, 13064, 55267, 120810, 6500, 5526, 65049, 0, 73764, 0, 92376, 
     12745, 9678, 0, 120587, 9869, 128815, 1771, 0, 8936, 0, 0, 4208, 78341, 
-    78567, 78342, 0, 983449, 74101, 0, 11762, 0, 92422, 77997, 68010, 66475, 
+    78567, 78342, 0, 983456, 74101, 0, 11762, 0, 92422, 77997, 68010, 66475, 
     0, 5027, 78172, 128878, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 
-    983248, 68639, 6331, 10079, 8931, 0, 1415, 8866, 41901, 74790, 78138, 
+    983253, 68639, 6331, 10079, 8931, 0, 1415, 8866, 41901, 74790, 78138, 
     119361, 983564, 43106, 5029, 65309, 1580, 3598, 68424, 41070, 77903, 0, 
-    3440, 78215, 1562, 128656, 127175, 119358, 1716, 983670, 10600, 917867, 
+    3440, 78215, 1562, 128656, 127175, 119358, 1716, 983679, 10600, 917867, 
     620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, 0, 5025, 
-    69892, 983208, 0, 118885, 0, 65557, 0, 74541, 983587, 11599, 128209, 
+    69892, 983209, 0, 118885, 0, 65557, 0, 74541, 983587, 11599, 128209, 
     11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, 
-    65275, 8906, 127096, 5755, 2636, 0, 10815, 11619, 2301, 41540, 7815, 
+    65275, 8906, 127096, 5755, 2636, 983227, 10815, 11619, 2301, 41540, 7815, 
     11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, 78498, 41048, 
     917763, 829, 0, 92406, 19950, 0, 126482, 6616, 0, 118875, 10953, 391, 0, 
     69785, 482, 42296, 11588, 0, 43606, 0, 68397, 66370, 74506, 42335, 
@@ -18841,9 +18858,9 @@
     11337, 78209, 917820, 63989, 3958, 12132, 1849, 0, 9921, 42451, 4253, 
     41147, 42064, 11959, 42404, 41160, 0, 3618, 78338, 0, 43300, 5156, 92629, 
     0, 929, 6827, 42035, 42437, 1555, 0, 8691, 66435, 2215, 41662, 94010, 0, 
-    0, 0, 93952, 4578, 64513, 41664, 983725, 42578, 128794, 41661, 78715, 
+    0, 0, 93952, 4578, 64513, 41664, 983734, 42578, 128794, 41661, 78715, 
     43267, 9356, 0, 0, 0, 1286, 10166, 0, 0, 64707, 983127, 42476, 7730, 
-    983850, 128522, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525, 
+    983859, 128522, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525, 
     41627, 917923, 8763, 128304, 41628, 533, 11931, 65225, 8321, 42504, 
     42581, 0, 6915, 42310, 4377, 8559, 0, 74360, 0, 13193, 64350, 11666, 
     8679, 41924, 1576, 7735, 92398, 0, 73840, 983092, 11374, 78043, 10889, 
@@ -18861,24 +18878,24 @@
     8244, 362, 92439, 0, 8037, 43777, 11535, 0, 74845, 5185, 7165, 5521, 
     10334, 2093, 71329, 10302, 128112, 10104, 1027, 5181, 0, 0, 10523, 1446, 
     42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, 5581, 42898, 3405, 
-    0, 194644, 5523, 0, 42620, 92447, 983810, 9549, 0, 10549, 55282, 9661, 
-    43682, 0, 77910, 120026, 78708, 0, 77911, 0, 41991, 983884, 0, 7630, 
+    0, 194644, 5523, 0, 42620, 92447, 983819, 9549, 0, 10549, 55282, 9661, 
+    43682, 0, 77910, 120026, 78708, 0, 77911, 0, 41991, 983893, 0, 7630, 
     9846, 7684, 10350, 0, 1174, 77981, 42733, 77978, 77980, 66485, 77977, 
     42277, 77974, 42456, 65667, 127037, 12330, 128272, 0, 42417, 42383, 
     66630, 41344, 6293, 0, 66252, 77984, 74443, 0, 10209, 8313, 4195, 74435, 
-    1316, 66690, 120032, 6332, 64894, 0, 65871, 78060, 1736, 983675, 3901, 
+    1316, 66690, 120032, 6332, 64894, 0, 65871, 78060, 1736, 983684, 3901, 
     12228, 120151, 65200, 3383, 10446, 78841, 693, 9130, 314, 64149, 42420, 
-    11949, 983660, 120152, 11026, 128788, 5332, 6940, 64154, 12635, 127007, 
+    11949, 983669, 120152, 11026, 128788, 5332, 6940, 64154, 12635, 127007, 
     42706, 1751, 273, 8165, 13166, 120763, 78840, 71368, 12824, 0, 4528, 
     5320, 6301, 43662, 6133, 9339, 9463, 42346, 10922, 64560, 3757, 0, 0, 0, 
-    65869, 73760, 2569, 0, 2326, 65740, 2565, 42459, 7596, 7921, 983859, 
-    74095, 127981, 41848, 2567, 66006, 0, 4044, 92646, 0, 12233, 983862, 
+    65869, 73760, 2569, 0, 2326, 65740, 2565, 42459, 7596, 7921, 983868, 
+    74095, 127981, 41848, 2567, 66006, 0, 4044, 92646, 0, 12233, 983871, 
     1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 127866, 42295, 0, 0, 71322, 
     92518, 9835, 66499, 0, 5417, 12275, 10895, 0, 274, 0, 1858, 0, 0, 55251, 
     10118, 3133, 128008, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 
     0, 92695, 42182, 7581, 19940, 43668, 41667, 128057, 0, 1923, 65583, 
     65802, 93970, 64597, 43444, 119184, 92197, 0, 6464, 7036, 2996, 1937, 
-    983742, 0, 41835, 4047, 41842, 0, 64107, 0, 0, 11017, 120601, 0, 293, 
+    983751, 0, 41835, 4047, 41842, 0, 64107, 0, 0, 11017, 120601, 0, 293, 
     77966, 92169, 64791, 41827, 42466, 43422, 10579, 8560, 71350, 65413, 
     77963, 4803, 12964, 1739, 1941, 3900, 0, 1713, 77969, 0, 73957, 11407, 
     42441, 41971, 6297, 120098, 64105, 128080, 42481, 11716, 66473, 7179, 
@@ -18896,337 +18913,338 @@
     3659, 9533, 184, 1553, 13107, 65484, 69648, 10502, 74457, 0, 0, 41554, 0, 
     8220, 917943, 41557, 0, 0, 11070, 119221, 5157, 4020, 73858, 41555, 9514, 
     64818, 65103, 64641, 64303, 78131, 7520, 0, 74377, 11029, 66651, 983068, 
-    0, 118930, 64527, 0, 7877, 73803, 983789, 127348, 120096, 74602, 9955, 
+    0, 118930, 64527, 0, 7877, 73803, 983798, 127348, 120096, 74602, 9955, 
     119557, 4055, 42817, 0, 65212, 11715, 12190, 12319, 78630, 0, 78631, 
     9502, 65427, 0, 65424, 12607, 0, 9734, 65425, 0, 0, 127357, 78835, 92410, 
     10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, 10477, 0, 
-    8636, 983918, 8315, 65444, 983784, 0, 74595, 6152, 0, 0, 6629, 127108, 
+    8636, 983927, 8315, 65444, 983793, 0, 74595, 6152, 0, 0, 6629, 127108, 
     120171, 0, 74589, 43993, 0, 69790, 64435, 0, 43690, 11046, 11490, 42730, 
     4485, 127107, 0, 64926, 0, 0, 0, 5869, 12437, 42728, 0, 7040, 3588, 0, 
-    12825, 0, 0, 12725, 0, 0, 78642, 223, 0, 69675, 120166, 42444, 0, 64499, 
-    65245, 0, 1171, 0, 69717, 0, 1805, 8772, 43820, 0, 9930, 65247, 78619, 
-    120111, 2338, 0, 118853, 0, 42676, 0, 64800, 65236, 67644, 68126, 1213, 
-    0, 64075, 797, 64074, 8734, 4212, 127369, 64387, 4115, 0, 5005, 64070, 
-    64073, 10679, 0, 77954, 9402, 64276, 426, 0, 0, 8251, 10136, 65436, 0, 
-    2120, 43302, 1224, 0, 65576, 74192, 10701, 1764, 3101, 127815, 12858, 
-    120159, 0, 11373, 6378, 127859, 120103, 8663, 9312, 41644, 4539, 2129, 0, 
-    9222, 983729, 0, 4259, 9092, 74567, 41961, 0, 12724, 66357, 42331, 64935, 
-    0, 0, 1293, 7947, 2132, 983758, 74593, 120308, 2454, 42717, 3613, 128837, 
-    0, 0, 65888, 8816, 10978, 10840, 0, 10668, 0, 43087, 12595, 120304, 
-    983114, 8822, 0, 1157, 64903, 8638, 0, 0, 0, 0, 69848, 8235, 120316, 
-    4405, 10086, 120247, 0, 69216, 0, 65430, 71321, 6079, 6817, 10764, 
-    127910, 64291, 128051, 998, 120312, 11062, 1317, 64327, 1558, 0, 1991, 
-    7882, 42254, 0, 41700, 530, 0, 10428, 119335, 12002, 119336, 5742, 43076, 
-    4692, 64630, 41823, 4007, 5004, 119334, 7896, 751, 6595, 6596, 120325, 
-    66373, 0, 0, 64908, 92691, 6311, 0, 12004, 119192, 12049, 43108, 120326, 
-    0, 41705, 92188, 6598, 0, 6599, 120334, 0, 42148, 118825, 66027, 0, 6597, 
-    9412, 8340, 11824, 64745, 2281, 69904, 0, 1988, 5407, 67865, 2430, 41678, 
-    0, 120243, 2336, 983894, 0, 78871, 120442, 983760, 1921, 10947, 19927, 0, 
-    65406, 0, 19913, 4284, 13217, 0, 43789, 12841, 9229, 10956, 42285, 41674, 
-    19964, 41679, 65084, 3521, 0, 5774, 8325, 0, 65403, 983089, 1854, 10794, 
-    0, 67660, 69846, 0, 78359, 5280, 0, 4344, 12905, 65433, 6076, 64793, 
-    41610, 768, 12074, 442, 0, 68162, 64081, 12934, 41682, 65432, 41693, 0, 
-    6071, 65434, 127467, 4804, 4053, 0, 127469, 194653, 41696, 467, 69823, 
-    127463, 69797, 194652, 127473, 8421, 127472, 69682, 43705, 502, 0, 65431, 
-    119056, 69954, 12043, 1303, 316, 7364, 2029, 2136, 119246, 11533, 64365, 
-    43480, 92639, 4860, 126648, 127877, 42488, 0, 9583, 128849, 5546, 8019, 
-    73856, 0, 0, 0, 5544, 2355, 12150, 65725, 5543, 77989, 63751, 12137, 
-    5548, 77985, 0, 65727, 68388, 65726, 6077, 128352, 65452, 0, 11301, 
-    78013, 78008, 78010, 9874, 78007, 0, 1319, 3050, 65410, 0, 0, 78016, 
-    78017, 42830, 43996, 66716, 128137, 4691, 92242, 9345, 621, 92709, 
-    128222, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, 10545, 
-    119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, 92363, 9996, 
-    8508, 0, 7012, 8195, 127834, 9566, 0, 3722, 0, 41707, 8493, 545, 9575, 
-    41379, 10050, 12718, 69854, 8859, 6820, 74345, 65110, 120740, 0, 0, 9119, 
-    2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 78021, 78022, 410, 
-    78020, 1802, 78018, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116, 
-    41673, 120370, 11422, 78141, 120373, 3860, 120367, 68412, 41345, 120362, 
-    120363, 11748, 42158, 7941, 11076, 8749, 120361, 2104, 64858, 361, 
-    120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 917919, 4569, 74130, 0, 
-    43487, 194630, 611, 74129, 64871, 118891, 65629, 0, 194858, 0, 0, 127545, 
-    120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921, 0, 983581, 74054, 
-    127754, 195029, 0, 839, 983312, 7695, 8769, 65246, 4829, 194663, 4859, 
-    64467, 0, 983954, 118998, 7206, 0, 6647, 43986, 0, 69766, 0, 64764, 4210, 
-    983854, 127936, 804, 0, 0, 12298, 0, 66653, 0, 64924, 10091, 73931, 9468, 
-    74245, 0, 0, 74246, 92503, 12839, 64669, 92202, 0, 1279, 1425, 6224, 
-    119229, 11049, 0, 92697, 43239, 8482, 92440, 0, 5032, 69677, 11940, 
-    67888, 664, 120437, 5034, 0, 0, 127525, 42702, 73888, 983149, 13294, 
-    67873, 64869, 6032, 0, 9115, 7430, 120377, 0, 120819, 68387, 120168, 
-    73913, 120170, 41161, 5518, 4174, 10993, 41162, 120160, 64528, 1169, 434, 
-    41437, 1905, 6034, 41164, 64744, 9528, 118867, 128800, 524, 0, 74029, 
-    788, 74027, 0, 194638, 0, 1663, 10419, 74025, 42636, 0, 69725, 0, 120656, 
-    0, 67876, 0, 0, 0, 67897, 74039, 0, 0, 11395, 0, 119107, 43612, 64344, 0, 
-    0, 10855, 5445, 9355, 0, 65198, 7391, 8989, 221, 65686, 0, 0, 8010, 7191, 
-    4962, 69772, 8855, 0, 0, 64469, 120426, 10555, 0, 43333, 92299, 0, 
-    120427, 10451, 0, 67653, 7245, 12443, 74405, 9947, 120149, 78317, 3873, 
-    8367, 0, 120146, 43433, 43649, 11987, 0, 0, 11010, 12723, 74059, 74062, 
-    6217, 5896, 0, 7682, 74049, 1462, 10235, 0, 0, 0, 0, 0, 0, 42595, 0, 
-    74402, 118860, 0, 120419, 92497, 74052, 0, 92378, 120549, 119082, 64295, 
-    120418, 0, 64765, 73923, 120417, 120662, 69920, 194702, 6216, 0, 10755, 
-    9455, 0, 8124, 127042, 9470, 6944, 127540, 0, 69680, 2828, 0, 531, 42638, 
-    0, 0, 0, 43428, 8204, 3614, 2827, 9696, 0, 0, 8728, 4354, 10904, 78562, 
-    19936, 7833, 120691, 0, 42599, 42597, 42709, 120409, 127044, 0, 8537, 0, 
-    0, 9354, 983164, 128833, 41199, 10121, 2028, 0, 983194, 69715, 0, 3062, 
-    0, 74447, 12608, 0, 66440, 7545, 9700, 12580, 92205, 120777, 120502, 
-    41155, 0, 74071, 0, 983450, 12713, 0, 0, 0, 78772, 0, 1734, 0, 0, 127040, 
-    64594, 2456, 231, 0, 74167, 542, 0, 118786, 0, 983970, 1230, 0, 0, 3597, 
-    4446, 10584, 74235, 92215, 4037, 127938, 8352, 0, 5687, 0, 64515, 0, 
-    194801, 55265, 67846, 78434, 9704, 0, 0, 70080, 71338, 0, 8660, 126495, 
-    0, 0, 78773, 74482, 4483, 1709, 69721, 9909, 6080, 0, 120358, 1746, 1315, 
-    8667, 0, 0, 13140, 65899, 10604, 0, 4480, 11266, 128152, 1226, 6930, 
-    67979, 983681, 6360, 10897, 41230, 605, 0, 74785, 69875, 0, 0, 41500, 0, 
-    311, 11453, 6221, 10608, 64943, 74280, 10877, 118868, 64885, 74272, 0, 0, 
-    128559, 120736, 74312, 345, 0, 74456, 64606, 9917, 0, 92231, 5037, 0, 
-    1776, 8422, 0, 118814, 41508, 41201, 323, 43328, 0, 42698, 1295, 194853, 
-    4625, 0, 4630, 13117, 0, 128772, 65123, 11293, 2668, 11288, 0, 42640, 
-    65666, 2519, 92369, 65420, 92479, 0, 4252, 5049, 42659, 119011, 706, 
-    7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, 66702, 0, 12670, 1013, 
-    0, 64919, 705, 0, 65422, 127803, 1183, 126519, 7017, 42852, 0, 8157, 
-    9736, 64503, 65418, 0, 983869, 74035, 0, 11913, 73874, 6696, 0, 8920, 
-    119298, 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, 0, 0, 10177, 73777, 
-    1857, 194657, 4626, 8464, 8472, 0, 4629, 8499, 78321, 78322, 4624, 7818, 
-    119173, 0, 0, 7805, 0, 94007, 6935, 92292, 78325, 78326, 78323, 43327, 
-    43989, 119046, 8492, 8250, 8459, 0, 8497, 8496, 0, 0, 78336, 78339, 9543, 
-    78335, 78332, 77832, 65849, 77831, 983952, 0, 12451, 0, 8684, 0, 6102, 0, 
-    5298, 0, 5294, 0, 0, 983452, 195062, 9949, 119826, 43617, 119215, 0, 
-    12073, 0, 0, 77863, 13108, 120617, 11439, 41468, 983748, 0, 5292, 55272, 
-    983874, 1939, 5302, 3970, 917879, 12455, 1793, 0, 0, 0, 6643, 92477, 
-    65263, 0, 78330, 41293, 78328, 65923, 0, 13219, 9569, 0, 74383, 0, 74197, 
-    0, 5500, 8813, 0, 0, 74566, 5322, 0, 78340, 43631, 5324, 66443, 3784, 
-    41614, 65269, 6230, 78349, 78345, 43324, 3360, 78344, 11523, 0, 92488, 
-    9926, 7197, 0, 68429, 42894, 41821, 1249, 78360, 78361, 78356, 78358, 
-    78353, 64899, 64763, 41149, 41807, 43162, 41815, 41150, 0, 10571, 10096, 
-    0, 0, 78074, 6947, 41152, 887, 9249, 6565, 78510, 41990, 78509, 41811, 
-    74466, 93966, 6670, 77882, 0, 0, 43092, 43325, 0, 10168, 0, 9781, 128655, 
-    9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 69860, 315, 12813, 
-    983451, 78432, 78256, 78351, 78352, 0, 983648, 0, 0, 1378, 9509, 0, 0, 
-    74475, 3066, 92220, 67847, 0, 92355, 0, 78365, 8787, 120379, 194616, 
-    41618, 194615, 78261, 194614, 0, 64652, 0, 194612, 0, 78366, 42088, 0, 
-    195061, 7176, 43756, 10137, 6121, 10995, 78259, 74534, 8119, 64874, 
-    917816, 127199, 194939, 0, 74525, 0, 0, 12930, 1394, 74514, 0, 74515, 0, 
-    118804, 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, 119100, 
-    41236, 92235, 42005, 42003, 41237, 5848, 0, 0, 3670, 128657, 194600, 0, 
-    0, 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 
-    128002, 4120, 65337, 65336, 0, 11808, 119214, 74115, 9366, 42790, 42006, 
-    119115, 65327, 65326, 65325, 10757, 1507, 42216, 65321, 65320, 65335, 
-    65334, 65333, 65332, 65331, 42059, 65329, 42689, 92427, 9128, 94045, 
-    42073, 6785, 64590, 983821, 4371, 7196, 65318, 2035, 65316, 4106, 65314, 
-    65313, 42074, 127847, 41228, 0, 65609, 41241, 7903, 41239, 43533, 78459, 
-    7189, 0, 0, 0, 12357, 42802, 78450, 8487, 9131, 0, 4615, 12695, 127752, 
-    0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 69762, 66455, 64738, 
-    3219, 68654, 983778, 0, 1037, 0, 2025, 128263, 13098, 78442, 10637, 4568, 
-    549, 1570, 0, 2835, 0, 10624, 43623, 11072, 127191, 0, 0, 12606, 78433, 
-    2825, 0, 10825, 8079, 2821, 41046, 92327, 7365, 983744, 120593, 13071, 0, 
-    452, 41049, 42840, 6346, 2831, 5461, 74596, 11465, 5212, 0, 64703, 
-    119191, 42308, 7181, 0, 41332, 0, 12333, 0, 1668, 0, 0, 0, 1187, 983378, 
-    42628, 78575, 0, 128777, 0, 3240, 128518, 12194, 0, 11591, 41065, 5323, 
-    8166, 0, 0, 0, 74535, 1623, 65297, 128856, 571, 0, 4918, 0, 5288, 127295, 
-    8916, 65048, 1909, 8864, 0, 0, 10736, 92508, 11571, 7615, 127300, 92296, 
-    4237, 92576, 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 120751, 11403, 
-    0, 0, 127146, 3796, 6800, 0, 3994, 11421, 0, 195076, 0, 983913, 0, 0, 
-    64857, 128105, 2855, 127828, 66308, 41621, 68214, 127283, 127817, 10654, 
-    0, 119226, 12164, 3246, 7906, 43972, 65847, 7182, 0, 13024, 194822, 
-    74270, 128289, 0, 0, 0, 1496, 747, 0, 942, 2378, 43136, 127905, 8466, 
-    983575, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 68373, 6382, 0, 
-    64634, 128279, 0, 11612, 0, 67600, 2374, 94066, 8475, 11609, 66313, 0, 0, 
-    5286, 119297, 0, 0, 64925, 120283, 194584, 118982, 194583, 7705, 11942, 
-    11305, 194581, 3309, 0, 0, 0, 0, 6802, 0, 41653, 1280, 1241, 7168, 12096, 
-    0, 66615, 42565, 41651, 0, 0, 0, 41650, 66507, 66470, 0, 12914, 41491, 
-    66010, 119552, 6078, 9954, 0, 1475, 119247, 9938, 6084, 917546, 41064, 
-    41062, 0, 0, 3256, 10189, 42076, 43252, 78823, 917906, 8727, 0, 65875, 0, 
-    0, 127762, 10562, 74215, 43065, 0, 0, 3248, 74297, 3261, 9015, 71351, 0, 
-    3635, 64337, 983274, 0, 0, 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0, 
-    65613, 77909, 92420, 73997, 0, 0, 119218, 7984, 8600, 74434, 127770, 
-    4176, 70050, 2034, 92551, 120805, 65891, 127038, 0, 318, 2038, 128860, 
-    78596, 0, 3649, 13149, 42145, 42798, 3634, 120291, 118927, 67677, 120124, 
-    7866, 0, 11402, 42146, 94032, 74238, 42664, 2849, 127034, 0, 7938, 12960, 
-    1761, 11812, 65379, 68386, 128185, 1159, 0, 69729, 0, 0, 7178, 194632, 0, 
-    41680, 0, 128203, 11534, 1514, 11668, 67891, 9313, 7015, 0, 67877, 
-    194567, 12989, 66474, 9368, 12848, 1624, 43270, 0, 74278, 10818, 126644, 
-    9953, 0, 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, 12871, 1551, 
-    2798, 65176, 4958, 42752, 119025, 0, 67875, 120301, 3495, 66648, 194768, 
-    0, 68364, 983223, 4891, 0, 10641, 0, 73746, 0, 68352, 0, 73787, 194829, 
-    194633, 7199, 64955, 0, 0, 0, 0, 0, 42685, 42679, 193, 0, 0, 0, 42667, 0, 
-    5271, 92318, 92517, 118882, 1362, 13297, 0, 128094, 0, 983324, 73789, 0, 
-    6658, 4426, 0, 92628, 983833, 92319, 7276, 42163, 5220, 0, 0, 983323, 
-    2416, 3310, 42703, 0, 379, 0, 43755, 0, 0, 3223, 65492, 1284, 194771, 
-    4549, 0, 0, 983154, 127763, 10807, 9558, 194613, 0, 8515, 8688, 12866, 
-    65308, 3294, 983325, 8529, 128101, 43385, 7564, 0, 43329, 0, 92458, 
-    73757, 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 42729, 92198, 3215, 0, 
-    7710, 1610, 73801, 0, 0, 65682, 0, 120537, 65924, 9974, 228, 66354, 1501, 
-    0, 64395, 5179, 7200, 6225, 0, 65794, 1725, 65533, 8196, 7476, 74399, 0, 
-    0, 7152, 8502, 5762, 1967, 7483, 0, 0, 8104, 0, 7474, 77979, 0, 126507, 
-    10414, 13001, 8141, 0, 42537, 1557, 43594, 128642, 6330, 6805, 8631, 
-    2545, 70052, 127166, 0, 74190, 0, 0, 983777, 42762, 0, 42914, 1650, 262, 
-    1637, 0, 7901, 3238, 128173, 41861, 0, 128585, 65158, 10860, 94059, 
-    43658, 7527, 0, 43319, 6419, 0, 45, 0, 64588, 93989, 0, 119810, 7194, 
-    5291, 0, 43666, 13129, 0, 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 
-    2620, 0, 0, 0, 983866, 179, 65896, 0, 64756, 2853, 78443, 118813, 983881, 
-    118996, 119009, 2850, 8084, 983085, 73850, 2801, 92284, 42069, 119839, 
-    74754, 119841, 42072, 119843, 119842, 10398, 983056, 0, 8377, 127116, 
-    8245, 68401, 3158, 92396, 3983, 43656, 923, 119857, 119856, 292, 13002, 
-    119845, 119844, 3221, 1763, 92463, 4612, 119851, 119850, 7253, 127110, 
-    68391, 0, 10782, 3637, 12996, 43542, 0, 64578, 983666, 3228, 69636, 8783, 
-    0, 119614, 2731, 0, 0, 78585, 4102, 7696, 73878, 0, 0, 78586, 43316, 
-    4177, 11283, 9089, 0, 73996, 983173, 64500, 43674, 0, 64947, 1856, 0, 0, 
-    6379, 0, 0, 0, 3208, 12975, 74775, 127380, 983922, 92389, 74072, 55269, 
-    0, 0, 983674, 2033, 78577, 78576, 195026, 55254, 7740, 0, 0, 0, 73964, 0, 
-    93988, 67612, 65674, 128244, 94110, 41689, 0, 74006, 64909, 6646, 11790, 
-    74019, 0, 128066, 128031, 8561, 4573, 0, 5326, 0, 120605, 7230, 8257, 0, 
-    8778, 41688, 0, 65776, 2071, 8314, 6459, 0, 7628, 65092, 73903, 66721, 
-    11342, 128561, 0, 0, 128226, 127001, 0, 11810, 13164, 10723, 967, 983942, 
-    126469, 11946, 0, 3257, 0, 12307, 1845, 983157, 43526, 0, 0, 1886, 42342, 
-    10089, 870, 7648, 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 
-    43692, 4563, 0, 0, 7591, 65887, 867, 9520, 872, 126607, 868, 873, 7642, 
-    0, 869, 874, 7644, 120674, 875, 790, 128303, 0, 0, 0, 66182, 983251, 
-    5429, 195055, 66180, 126480, 66181, 68452, 983282, 983243, 42067, 0, 
-    5433, 10657, 7911, 194622, 1547, 66176, 42012, 120576, 5425, 4977, 9999, 
-    5317, 5423, 4611, 0, 67637, 0, 9679, 74122, 0, 0, 0, 66194, 4418, 66184, 
-    4628, 4245, 119648, 0, 0, 1851, 0, 127189, 11908, 0, 9360, 118897, 
-    983201, 42776, 66187, 12837, 8829, 7711, 92714, 0, 92321, 43318, 0, 8809, 
-    69881, 0, 983142, 120604, 983052, 983873, 0, 983263, 0, 0, 7427, 9958, 
-    4588, 43680, 0, 74484, 194968, 2433, 0, 119622, 3352, 74363, 983876, 0, 
-    793, 74404, 0, 305, 567, 67662, 842, 128519, 8208, 0, 41695, 1647, 
-    118877, 0, 7837, 917625, 818, 5337, 194628, 917621, 41376, 119978, 
-    126576, 120594, 74086, 917615, 917614, 917613, 10973, 66359, 1372, 
-    127172, 917608, 4969, 1254, 917605, 917604, 93967, 917602, 65228, 78221, 
-    126612, 0, 2840, 0, 119982, 983930, 0, 3245, 9068, 68194, 64725, 0, 0, 
-    12991, 0, 2651, 68016, 983258, 917611, 127026, 128883, 0, 0, 43648, 
-    120812, 0, 43322, 92662, 0, 0, 64372, 92698, 3226, 655, 752, 7457, 7456, 
-    7452, 3285, 128779, 127821, 119988, 65610, 2391, 0, 92248, 671, 250, 
-    7434, 618, 668, 610, 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439, 
-    628, 3905, 73810, 0, 128266, 64749, 67850, 2107, 0, 0, 4605, 128174, 
-    983192, 43372, 65945, 128838, 0, 119590, 0, 0, 0, 987, 6927, 11572, 
-    42261, 11464, 3365, 9971, 0, 0, 128297, 0, 0, 0, 0, 11334, 43326, 12609, 
-    11519, 11503, 5530, 5210, 0, 4627, 983883, 5208, 0, 128842, 10332, 5218, 
-    7976, 9156, 0, 3244, 5529, 69647, 73894, 128852, 5432, 64965, 5527, 
-    74033, 10516, 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 9887, 0, 4000, 
-    7429, 7428, 665, 7424, 3206, 120278, 7884, 0, 128566, 917989, 128666, 
-    211, 2509, 128858, 120573, 68672, 3220, 42235, 0, 10690, 8951, 5214, 
-    42474, 8118, 0, 7048, 4590, 127258, 5852, 0, 0, 127259, 1708, 0, 983165, 
-    2623, 11943, 0, 69226, 0, 4698, 66509, 1066, 119921, 4701, 983867, 
-    120285, 74225, 94111, 8267, 0, 127265, 0, 7516, 0, 2625, 983968, 8034, 
-    74309, 0, 3631, 10955, 7850, 120293, 8416, 0, 0, 0, 43384, 12660, 0, 0, 
-    0, 74850, 41069, 0, 128156, 12099, 4310, 10032, 6252, 713, 7990, 0, 3990, 
-    0, 983255, 66368, 5017, 64956, 7071, 0, 119144, 1030, 118800, 983120, 
-    9513, 41059, 9357, 0, 1773, 0, 120350, 0, 6339, 7745, 9844, 0, 64650, 94, 
-    1880, 74766, 983829, 8908, 0, 128707, 65913, 78470, 10752, 13003, 0, 
-    126572, 41307, 8732, 120338, 0, 1757, 6964, 4696, 0, 120335, 64785, 7394, 
-    3641, 5419, 128055, 0, 127883, 0, 120344, 43988, 0, 8610, 43062, 7592, 
-    856, 74299, 936, 13289, 69894, 43171, 1459, 0, 65243, 78638, 19953, 0, 
-    1504, 70064, 0, 12913, 74206, 7529, 0, 128699, 983948, 120782, 4113, 0, 
-    2372, 336, 0, 7509, 12152, 0, 682, 66458, 41505, 0, 64743, 10593, 1703, 
-    0, 983946, 8033, 69953, 0, 9810, 127269, 0, 12970, 0, 42351, 10109, 
-    917623, 0, 194693, 0, 92690, 0, 0, 74291, 1965, 7069, 43312, 0, 73887, 0, 
-    2087, 64370, 6314, 41714, 8501, 0, 0, 74239, 41317, 92614, 2091, 74545, 
-    2090, 0, 9353, 7117, 2077, 77886, 0, 10498, 2083, 77888, 0, 0, 119236, 
-    634, 0, 0, 0, 69779, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, 983710, 
-    0, 128135, 41037, 42692, 7786, 12959, 41039, 127483, 0, 680, 2302, 
-    128200, 1181, 7056, 3174, 126516, 0, 92668, 65665, 127375, 126506, 6920, 
-    0, 92295, 0, 118965, 0, 64644, 126981, 74119, 0, 41028, 0, 6231, 2613, 
-    65302, 40989, 0, 194696, 0, 42760, 0, 983566, 0, 40987, 4667, 0, 983923, 
-    8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 92675, 0, 921, 4744, 0, 12702, 
-    242, 0, 1566, 8217, 0, 64653, 78386, 128121, 74036, 74505, 43274, 5313, 
-    951, 0, 0, 983858, 7604, 983283, 4009, 127816, 983701, 120562, 0, 983711, 
-    64860, 119138, 119069, 0, 127370, 4048, 983598, 0, 70024, 1646, 77890, 
-    64534, 73995, 120705, 0, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 
-    3441, 119894, 2975, 74442, 9822, 983926, 55220, 10084, 73943, 118840, 0, 
-    917562, 194610, 3399, 9851, 983708, 11909, 9059, 0, 7687, 0, 6789, 0, 0, 
-    0, 71367, 0, 0, 1777, 9151, 1137, 69767, 749, 42366, 0, 5385, 128574, 
-    128218, 0, 0, 5989, 0, 0, 128091, 0, 41685, 69223, 0, 9769, 41684, 
-    983215, 519, 0, 11740, 5766, 0, 0, 2600, 8848, 120138, 41297, 0, 3666, 
-    74473, 41300, 74468, 65160, 0, 69688, 69771, 74479, 0, 6558, 0, 0, 69765, 
-    120750, 252, 0, 41302, 0, 0, 0, 69763, 0, 11729, 8719, 9060, 0, 120139, 
-    10761, 0, 0, 0, 118792, 11734, 983222, 11730, 0, 9593, 5757, 2403, 64808, 
-    55275, 0, 11728, 43572, 0, 0, 7764, 983705, 11094, 120825, 0, 0, 4282, 
-    8298, 0, 0, 0, 0, 0, 64449, 0, 126650, 63854, 8456, 0, 74783, 65670, 0, 
-    78250, 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, 
-    3458, 4365, 70053, 983703, 3647, 0, 2602, 128341, 0, 194707, 41135, 0, 0, 
-    0, 64631, 172, 4971, 41219, 41137, 1889, 7238, 6545, 126476, 92193, 7597, 
-    10528, 0, 0, 3732, 73910, 194588, 5344, 0, 43366, 43363, 9062, 119252, 0, 
-    0, 0, 64479, 9232, 92596, 0, 0, 194712, 10900, 41531, 1263, 3720, 12048, 
-    0, 64292, 41524, 7227, 119635, 6099, 41534, 0, 127354, 127345, 299, 
-    917957, 8525, 127347, 3524, 917565, 8831, 127349, 92564, 3075, 67867, 
-    127352, 0, 66362, 0, 64353, 0, 0, 5845, 0, 0, 0, 2581, 8200, 65114, 
-    68460, 0, 43283, 5551, 0, 120735, 0, 6340, 118855, 0, 78134, 8680, 7204, 
-    70065, 2588, 2914, 7011, 55281, 0, 2471, 194631, 2883, 2749, 119563, 
-    73774, 10913, 0, 0, 8666, 675, 42493, 0, 43571, 0, 6219, 0, 9980, 41232, 
-    10928, 0, 41153, 41229, 118967, 0, 3738, 94016, 0, 12711, 3181, 66212, 
-    74289, 68472, 42857, 8262, 983372, 0, 983221, 0, 42347, 12092, 9615, 
-    7234, 74047, 983088, 0, 43744, 0, 0, 73846, 2934, 12722, 120762, 922, 
-    43983, 74507, 983126, 74461, 3218, 120471, 74290, 120469, 64562, 120475, 
-    8569, 11404, 11932, 73728, 3214, 120461, 120468, 12128, 3207, 65486, 
-    78729, 1901, 78727, 127326, 120460, 7425, 3205, 68003, 78737, 78736, 
-    78735, 43383, 69940, 65459, 2606, 78730, 73897, 0, 11496, 1173, 0, 41272, 
-    119661, 0, 0, 983314, 120737, 0, 983962, 983313, 378, 2610, 0, 65079, 
-    983318, 65695, 126559, 37, 7068, 0, 120480, 120479, 3209, 120477, 0, 
-    10638, 9768, 69952, 119909, 983392, 0, 0, 0, 0, 65510, 0, 0, 5233, 
-    983328, 64792, 983327, 0, 126633, 0, 7060, 9847, 120144, 1685, 595, 0, 
-    73971, 1292, 8940, 7380, 11088, 0, 10004, 126997, 0, 6541, 0, 0, 0, 3243, 
-    9014, 5606, 0, 538, 64620, 5602, 8467, 74391, 6547, 128132, 8203, 78488, 
-    983090, 8458, 65211, 8495, 119904, 0, 917552, 779, 78314, 64367, 2465, 
-    69901, 8193, 55279, 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 0, 
-    92414, 8982, 0, 0, 0, 782, 0, 10883, 0, 194852, 732, 3737, 127253, 1548, 
-    68650, 92507, 1832, 5604, 5735, 41141, 119020, 4376, 0, 11787, 3745, 0, 
-    0, 42888, 65712, 983297, 3869, 11937, 5725, 127539, 1783, 68648, 5728, 0, 
-    0, 0, 11918, 66567, 5724, 0, 5727, 78521, 0, 0, 764, 0, 128116, 43531, 0, 
-    9033, 0, 42532, 6223, 11042, 120749, 11423, 0, 119861, 71344, 43465, 0, 
-    128267, 6559, 64557, 71348, 92649, 120648, 43019, 43477, 10238, 74491, 0, 
-    43377, 92282, 71346, 1478, 9783, 11825, 2607, 64740, 0, 7739, 74543, 0, 
-    0, 0, 6132, 0, 63765, 0, 70058, 41144, 0, 92438, 43537, 6761, 10093, 
-    4369, 917791, 0, 983148, 8820, 3947, 0, 0, 11515, 526, 128103, 41295, 
-    194603, 917785, 194932, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 983375, 
-    1543, 3713, 41221, 12423, 42281, 917788, 74024, 12293, 0, 64357, 11794, 
-    42082, 0, 1737, 8987, 42081, 0, 7205, 0, 9335, 12850, 119870, 6553, 7055, 
-    0, 8277, 0, 0, 5475, 74795, 6780, 0, 0, 12990, 1160, 42084, 119650, 
-    41217, 119660, 10018, 360, 0, 0, 68176, 5863, 3137, 0, 4147, 983170, 
-    41216, 7844, 2616, 119190, 68461, 65234, 983287, 13076, 3135, 983280, 
-    78143, 119139, 3142, 92451, 94068, 10819, 119580, 10183, 0, 2608, 1470, 
-    73967, 94008, 6227, 0, 127173, 69741, 983582, 6163, 983558, 0, 127314, 0, 
-    0, 8603, 0, 119866, 3306, 10876, 43392, 119573, 127931, 5751, 0, 6222, 0, 
-    0, 12086, 7403, 1600, 64309, 64939, 0, 64783, 92658, 11310, 0, 8882, 0, 
-    0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, 6974, 0, 0, 983210, 5002, 0, 
-    41286, 69946, 127019, 0, 43585, 0, 6551, 983953, 128229, 0, 41289, 0, 
-    194602, 0, 8977, 602, 120814, 0, 128778, 128661, 0, 983368, 41279, 0, 0, 
-    0, 11081, 43615, 0, 0, 0, 983612, 12727, 0, 0, 78397, 9475, 7112, 65105, 
-    0, 9633, 10886, 43592, 7831, 983820, 194571, 0, 73915, 8076, 43048, 8290, 
-    8291, 43051, 92570, 0, 2596, 43584, 0, 13113, 0, 127757, 2393, 7058, 
-    9087, 74067, 68673, 41574, 78337, 0, 74058, 6376, 0, 0, 0, 0, 9854, 
-    127748, 64696, 0, 128220, 0, 6994, 0, 1720, 0, 0, 0, 6529, 7063, 983182, 
-    3751, 9120, 983478, 0, 1798, 709, 0, 1354, 1876, 13152, 6557, 12430, 
-    8137, 94098, 92642, 0, 0, 245, 128097, 11456, 41233, 7070, 0, 94046, 
-    6136, 917609, 65677, 8682, 41235, 92595, 42045, 9804, 118963, 432, 3595, 
-    194945, 65437, 0, 74455, 42399, 0, 0, 128274, 0, 119658, 0, 0, 0, 77894, 
-    8797, 0, 9052, 64888, 7167, 2356, 95, 74784, 10580, 0, 42286, 0, 64640, 
-    0, 94109, 0, 74137, 70035, 10063, 12652, 12199, 92480, 0, 2566, 11971, 
-    983728, 0, 1065, 0, 0, 43400, 2576, 66696, 93999, 0, 43604, 0, 0, 74082, 
-    514, 74502, 70032, 2921, 43215, 64493, 5772, 12968, 70055, 194944, 74580, 
-    43398, 2580, 983801, 41341, 41223, 6564, 1463, 41342, 0, 5293, 70020, 0, 
-    3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, 917915, 0, 
-    127025, 0, 74821, 0, 983724, 119042, 0, 127865, 13090, 66643, 0, 1270, 
-    1132, 42360, 0, 74096, 66655, 42569, 127824, 0, 64761, 0, 41021, 8510, 
-    42432, 0, 0, 194782, 0, 64496, 74109, 70030, 9915, 0, 983217, 7061, 
-    41336, 3854, 69700, 13141, 68413, 43401, 42319, 13082, 0, 7067, 68221, 0, 
-    127383, 127171, 0, 0, 127797, 9029, 43543, 119315, 2353, 6308, 0, 74792, 
-    2611, 119186, 0, 0, 0, 43664, 92399, 66627, 0, 4484, 8509, 118976, 11066, 
-    65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 0, 12107, 
-    7100, 10905, 65010, 194986, 697, 66018, 9284, 4244, 0, 0, 92644, 13121, 
-    120036, 0, 12010, 128573, 128221, 0, 0, 0, 127193, 65816, 68111, 0, 
-    127933, 65668, 92257, 6618, 118784, 66365, 0, 42234, 12648, 78110, 7123, 
-    70038, 5785, 9198, 9764, 41316, 65877, 7383, 13230, 41299, 0, 0, 68365, 
-    128258, 0, 0, 0, 13122, 0, 191, 70060, 8585, 8000, 64411, 120652, 42889, 
-    64850, 41072, 41578, 0, 41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683, 
-    396, 41580, 68146, 0, 12901, 43058, 0, 343, 7129, 42680, 41360, 78154, 0, 
-    4743, 0, 0, 74040, 74108, 8743, 1724, 1433, 119322, 0, 3739, 6263, 71349, 
-    0, 3964, 6592, 0, 128693, 66040, 0, 42568, 69806, 128113, 1778, 3956, 0, 
-    42070, 6563, 43075, 9018, 94006, 983389, 12067, 41312, 0, 5547, 74531, 
-    127969, 0, 8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 92703, 
-    118822, 1750, 0, 4394, 68368, 1807, 983879, 92298, 0, 5889, 0, 7180, 0, 
-    119145, 0, 917558, 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583, 
-    4512, 119360, 65230, 128109, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 92416, 
-    3975, 0, 74087, 0, 12672, 3798, 2703, 983599, 0, 2109, 9774, 1275, 0, 0, 
-    41095, 3962, 0, 2932, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 
-    0, 0, 41851, 128230, 41846, 0, 55238, 7633, 41849, 68385, 4320, 3224, 0, 
+    12825, 0, 0, 12725, 0, 127106, 78642, 223, 0, 69675, 120166, 42444, 0, 
+    64499, 65245, 0, 1171, 0, 69717, 0, 1805, 8772, 43820, 0, 9930, 65247, 
+    78619, 120111, 2338, 0, 118853, 0, 42676, 0, 64800, 65236, 67644, 68126, 
+    1213, 0, 64075, 797, 64074, 8734, 4212, 127369, 64387, 4115, 0, 5005, 
+    64070, 64073, 10679, 0, 77954, 9402, 64276, 426, 0, 0, 8251, 10136, 
+    65436, 0, 2120, 43302, 1224, 0, 65576, 74192, 10701, 1764, 3101, 127815, 
+    12858, 120159, 0, 11373, 6378, 127859, 120103, 8663, 9312, 41644, 4539, 
+    2129, 0, 9222, 983738, 0, 4259, 9092, 74567, 41961, 0, 12724, 66357, 
+    42331, 64935, 0, 0, 1293, 7947, 2132, 983767, 74593, 120308, 2454, 42717, 
+    3613, 128837, 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 0, 43087, 12595, 
+    120304, 983114, 8822, 0, 1157, 64903, 8638, 0, 0, 0, 0, 69848, 8235, 
+    120316, 4405, 10086, 120247, 0, 69216, 0, 65430, 71321, 6079, 6817, 
+    10764, 127910, 64291, 128051, 998, 120312, 11062, 1317, 64327, 1558, 0, 
+    1991, 7882, 42254, 0, 41700, 530, 0, 10428, 119335, 12002, 119336, 5742, 
+    43076, 4692, 64630, 41823, 4007, 5004, 119334, 7896, 751, 6595, 6596, 
+    120325, 66373, 0, 0, 64908, 92691, 6311, 0, 12004, 119192, 12049, 43108, 
+    120326, 0, 41705, 92188, 6598, 0, 6599, 120334, 0, 42148, 118825, 66027, 
+    0, 6597, 9412, 8340, 11824, 64745, 2281, 69904, 0, 1988, 5407, 67865, 
+    2430, 41678, 0, 120243, 2336, 983903, 0, 78871, 120442, 983769, 1921, 
+    10947, 19927, 0, 65406, 0, 19913, 4284, 13217, 0, 43789, 12841, 9229, 
+    10956, 42285, 41674, 19964, 41679, 65084, 3521, 0, 5774, 8325, 0, 65403, 
+    983089, 1854, 10794, 0, 67660, 69846, 0, 78359, 5280, 0, 4344, 12905, 
+    65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, 12934, 
+    41682, 65432, 41693, 0, 6071, 65434, 127467, 4804, 4053, 0, 127469, 
+    194653, 41696, 467, 69823, 127463, 69797, 194652, 127473, 8421, 127472, 
+    69682, 43705, 502, 0, 65431, 119056, 69954, 12043, 1303, 316, 7364, 2029, 
+    2136, 119246, 11533, 64365, 43480, 92639, 4860, 126648, 127877, 42488, 0, 
+    9583, 128849, 5546, 8019, 73856, 0, 0, 0, 5544, 2355, 12150, 65725, 5543, 
+    77989, 63751, 12137, 5548, 77985, 0, 65727, 68388, 65726, 6077, 128352, 
+    65452, 0, 11301, 78013, 78008, 78010, 9874, 78007, 0, 1319, 3050, 65410, 
+    0, 0, 78016, 78017, 42830, 43996, 66716, 128137, 4691, 92242, 9345, 621, 
+    92709, 128222, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, 
+    10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, 
+    92363, 9996, 8508, 0, 7012, 8195, 127834, 9566, 0, 3722, 0, 41707, 8493, 
+    545, 9575, 41379, 10050, 12718, 69854, 8859, 6820, 74345, 65110, 120740, 
+    0, 0, 9119, 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 78021, 
+    78022, 410, 78020, 1802, 78018, 74107, 0, 41659, 41671, 1827, 0, 64396, 
+    10126, 12116, 41673, 120370, 11422, 78141, 120373, 3860, 120367, 68412, 
+    41345, 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 2104, 
+    64858, 361, 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 917919, 
+    4569, 74130, 0, 43487, 194630, 611, 74129, 64871, 118891, 65629, 0, 
+    194858, 0, 0, 127545, 120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921, 
+    0, 983581, 74054, 127754, 195029, 0, 839, 983319, 7695, 8769, 65246, 
+    4829, 194663, 4859, 64467, 0, 983963, 118998, 7206, 0, 6647, 43986, 0, 
+    69766, 0, 64764, 4210, 983863, 127936, 804, 0, 0, 12298, 0, 66653, 0, 
+    64924, 10091, 73931, 9468, 74245, 0, 0, 74246, 92503, 12839, 64669, 
+    92202, 0, 1279, 1425, 6224, 119229, 11049, 0, 92697, 43239, 8482, 92440, 
+    0, 5032, 69677, 11940, 67888, 664, 120437, 5034, 0, 0, 127525, 42702, 
+    73888, 983149, 13294, 67873, 64869, 6032, 0, 9115, 7430, 120377, 0, 
+    120819, 68387, 120168, 73913, 120170, 41161, 5518, 4174, 10993, 41162, 
+    120160, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, 118867, 
+    128800, 524, 0, 74029, 788, 74027, 0, 194638, 0, 1663, 10419, 74025, 
+    42636, 0, 69725, 0, 120656, 0, 67876, 0, 0, 0, 67897, 74039, 0, 0, 11395, 
+    0, 119107, 43612, 64344, 0, 0, 10855, 5445, 9355, 0, 65198, 7391, 8989, 
+    221, 65686, 0, 0, 8010, 7191, 4962, 69772, 8855, 0, 0, 64469, 120426, 
+    10555, 0, 43333, 92299, 0, 120427, 10451, 0, 67653, 7245, 12443, 74405, 
+    9947, 120149, 78317, 3873, 8367, 0, 120146, 43433, 43649, 11987, 0, 0, 
+    11010, 12723, 74059, 74062, 6217, 5896, 0, 7682, 74049, 1462, 10235, 0, 
+    0, 0, 0, 0, 0, 42595, 0, 74402, 118860, 0, 120419, 92497, 74052, 0, 
+    92378, 120549, 119082, 64295, 120418, 0, 64765, 73923, 120417, 120662, 
+    69920, 194702, 6216, 0, 10755, 9455, 0, 8124, 127042, 9470, 6944, 127540, 
+    0, 69680, 2828, 0, 531, 42638, 0, 0, 0, 43428, 8204, 3614, 2827, 9696, 0, 
+    0, 8728, 4354, 10904, 78562, 19936, 7833, 120691, 0, 42599, 42597, 42709, 
+    120409, 127044, 0, 8537, 0, 0, 9354, 983164, 128833, 41199, 10121, 2028, 
+    0, 983194, 69715, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 12580, 
+    92205, 120777, 120502, 41155, 0, 74071, 0, 983457, 12713, 0, 0, 0, 78772, 
+    0, 1734, 0, 0, 127040, 64594, 2456, 231, 0, 74167, 542, 0, 118786, 0, 
+    983979, 1230, 0, 0, 3597, 4446, 10584, 74235, 92215, 4037, 127938, 8352, 
+    0, 5687, 0, 64515, 0, 194801, 55265, 67846, 78434, 9704, 0, 0, 70080, 
+    71338, 0, 8660, 126495, 0, 0, 78773, 74482, 4483, 1709, 69721, 9909, 
+    6080, 0, 120358, 1746, 1315, 8667, 0, 0, 13140, 65899, 10604, 0, 4480, 
+    11266, 128152, 1226, 6930, 67979, 983690, 6360, 10897, 41230, 605, 0, 
+    74785, 69875, 0, 0, 41500, 0, 311, 11453, 6221, 10608, 64943, 74280, 
+    10877, 118868, 64885, 74272, 0, 0, 128559, 120736, 74312, 345, 0, 74456, 
+    64606, 9917, 0, 92231, 5037, 0, 1776, 8422, 0, 118814, 41508, 41201, 323, 
+    43328, 0, 42698, 1295, 194853, 4625, 0, 4630, 13117, 0, 128772, 65123, 
+    11293, 2668, 11288, 0, 42640, 65666, 2519, 92369, 65420, 92479, 0, 4252, 
+    5049, 42659, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 
+    0, 66702, 0, 12670, 1013, 0, 64919, 705, 0, 65422, 127803, 1183, 126519, 
+    7017, 42852, 0, 8157, 9736, 64503, 65418, 0, 983878, 74035, 0, 11913, 
+    73874, 6696, 0, 8920, 119298, 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, 
+    0, 0, 10177, 73777, 1857, 194657, 4626, 8464, 8472, 0, 4629, 8499, 78321, 
+    78322, 4624, 7818, 119173, 0, 0, 7805, 0, 94007, 6935, 92292, 78325, 
+    78326, 78323, 43327, 43989, 119046, 8492, 8250, 8459, 0, 8497, 8496, 0, 
+    0, 78336, 78339, 9543, 78335, 78332, 77832, 65849, 77831, 983961, 0, 
+    12451, 0, 8684, 0, 6102, 0, 5298, 0, 5294, 0, 0, 983459, 195062, 9949, 
+    119826, 43617, 119215, 0, 12073, 0, 0, 77863, 13108, 120617, 11439, 
+    41468, 983757, 0, 5292, 55272, 983883, 1939, 5302, 3970, 917879, 12455, 
+    1793, 0, 0, 0, 6643, 92477, 65263, 0, 78330, 41293, 78328, 65923, 0, 
+    13219, 9569, 0, 74383, 0, 74197, 0, 5500, 8813, 0, 0, 74566, 5322, 0, 
+    78340, 43631, 5324, 66443, 3784, 41614, 65269, 6230, 78349, 78345, 43324, 
+    3360, 78344, 11523, 0, 92488, 9926, 7197, 0, 68429, 42894, 41821, 1249, 
+    78360, 78361, 78356, 78358, 78353, 64899, 64763, 41149, 41807, 43162, 
+    41815, 41150, 0, 10571, 10096, 0, 0, 78074, 6947, 41152, 887, 9249, 6565, 
+    78510, 41990, 78509, 41811, 74466, 93966, 6670, 77882, 0, 0, 43092, 
+    43325, 0, 10168, 0, 9781, 128655, 9190, 0, 9666, 8269, 65944, 74005, 
+    13019, 11670, 69860, 315, 12813, 983458, 78432, 78256, 78351, 78352, 0, 
+    983657, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 92220, 67847, 0, 92355, 0, 
+    78365, 8787, 120379, 194616, 41618, 194615, 78261, 194614, 0, 64652, 0, 
+    194612, 0, 78366, 42088, 0, 195061, 7176, 43756, 10137, 6121, 10995, 
+    78259, 74534, 8119, 64874, 917816, 127199, 194939, 0, 74525, 0, 0, 12930, 
+    1394, 74514, 0, 74515, 0, 118804, 2998, 9527, 120659, 65190, 12977, 
+    42090, 119165, 0, 119100, 41236, 92235, 42005, 42003, 41237, 5848, 0, 0, 
+    3670, 128657, 194600, 0, 0, 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, 
+    619, 4635, 65080, 0, 128002, 4120, 65337, 65336, 0, 11808, 119214, 74115, 
+    9366, 42790, 42006, 119115, 65327, 65326, 65325, 10757, 1507, 42216, 
+    65321, 65320, 65335, 65334, 65333, 65332, 65331, 42059, 65329, 42689, 
+    92427, 9128, 94045, 42073, 6785, 64590, 983830, 4371, 7196, 65318, 2035, 
+    65316, 4106, 65314, 65313, 42074, 127847, 41228, 0, 65609, 41241, 7903, 
+    41239, 43533, 78459, 7189, 0, 0, 0, 12357, 42802, 78450, 8487, 9131, 0, 
+    4615, 12695, 127752, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 
+    69762, 66455, 64738, 3219, 68654, 983787, 0, 1037, 0, 2025, 128263, 
+    13098, 78442, 10637, 4568, 549, 1570, 0, 2835, 0, 10624, 43623, 11072, 
+    127191, 0, 0, 12606, 78433, 2825, 0, 10825, 8079, 2821, 41046, 92327, 
+    7365, 983753, 120593, 13071, 0, 452, 41049, 42840, 6346, 2831, 5461, 
+    74596, 11465, 5212, 0, 64703, 119191, 42308, 7181, 0, 41332, 0, 12333, 0, 
+    1668, 0, 0, 0, 1187, 983385, 42628, 78575, 0, 128777, 0, 3240, 128518, 
+    12194, 0, 11591, 41065, 5323, 8166, 0, 0, 0, 74535, 1623, 65297, 128856, 
+    571, 0, 4918, 0, 5288, 127295, 8916, 65048, 1909, 8864, 0, 0, 10736, 
+    92508, 11571, 7615, 127300, 92296, 4237, 92576, 1035, 65815, 0, 7881, 
+    701, 65936, 3489, 0, 0, 120751, 11403, 0, 0, 127146, 3796, 6800, 0, 3994, 
+    11421, 0, 195076, 0, 983922, 0, 0, 64857, 128105, 2855, 127828, 66308, 
+    41621, 68214, 127283, 127817, 10654, 0, 119226, 12164, 3246, 7906, 43972, 
+    65847, 7182, 0, 13024, 194822, 74270, 128289, 0, 0, 0, 1496, 747, 0, 942, 
+    2378, 43136, 127905, 8466, 983575, 9320, 8001, 1232, 8139, 11617, 0, 0, 
+    11409, 68373, 6382, 0, 64634, 128279, 0, 11612, 0, 67600, 2374, 94066, 
+    8475, 11609, 66313, 0, 0, 5286, 119297, 0, 0, 64925, 120283, 194584, 
+    118982, 194583, 7705, 11942, 11305, 194581, 3309, 0, 0, 0, 0, 6802, 0, 
+    41653, 1280, 1241, 7168, 12096, 0, 66615, 42565, 41651, 0, 0, 0, 41650, 
+    66507, 66470, 0, 12914, 41491, 66010, 119552, 6078, 9954, 0, 1475, 
+    119247, 9938, 6084, 917546, 41064, 41062, 0, 0, 3256, 10189, 42076, 
+    43252, 78823, 917906, 8727, 0, 65875, 0, 0, 127762, 10562, 74215, 43065, 
+    0, 0, 3248, 74297, 3261, 9015, 71351, 0, 3635, 64337, 983281, 0, 0, 7195, 
+    0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0, 65613, 77909, 92420, 73997, 0, 0, 
+    119218, 7984, 8600, 74434, 127770, 4176, 70050, 2034, 92551, 120805, 
+    65891, 127038, 0, 318, 2038, 128860, 78596, 0, 3649, 13149, 42145, 42798, 
+    3634, 120291, 118927, 67677, 120124, 7866, 0, 11402, 42146, 94032, 74238, 
+    42664, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, 128185, 
+    1159, 0, 69729, 0, 0, 7178, 194632, 0, 41680, 0, 128203, 11534, 1514, 
+    11668, 67891, 9313, 7015, 0, 67877, 194567, 12989, 66474, 9368, 12848, 
+    1624, 43270, 0, 74278, 10818, 126644, 9953, 0, 78421, 1194, 3242, 9761, 
+    9555, 8598, 120299, 6169, 12871, 1551, 2798, 65176, 4958, 42752, 119025, 
+    0, 67875, 120301, 3495, 66648, 194768, 0, 68364, 983224, 4891, 0, 10641, 
+    0, 73746, 0, 68352, 0, 73787, 194829, 194633, 7199, 64955, 0, 0, 0, 0, 0, 
+    42685, 42679, 193, 0, 0, 0, 42667, 0, 5271, 92318, 92517, 118882, 1362, 
+    13297, 0, 128094, 0, 983331, 73789, 0, 6658, 4426, 0, 92628, 983842, 
+    92319, 7276, 42163, 5220, 0, 0, 983330, 2416, 3310, 42703, 0, 379, 0, 
+    43755, 0, 0, 3223, 65492, 1284, 194771, 4549, 0, 0, 983154, 127763, 
+    10807, 9558, 194613, 0, 8515, 8688, 12866, 65308, 3294, 983332, 8529, 
+    128101, 43385, 7564, 0, 43329, 0, 92458, 73757, 66456, 42359, 0, 2031, 0, 
+    7202, 0, 12676, 42729, 92198, 3215, 0, 7710, 1610, 73801, 0, 0, 65682, 0, 
+    120537, 65924, 9974, 228, 66354, 1501, 0, 64395, 5179, 7200, 6225, 0, 
+    65794, 1725, 65533, 8196, 7476, 74399, 0, 0, 7152, 8502, 5762, 1967, 
+    7483, 0, 0, 8104, 0, 7474, 77979, 0, 126507, 10414, 13001, 8141, 0, 
+    42537, 1557, 43594, 128642, 6330, 6805, 8631, 2545, 70052, 127166, 0, 
+    74190, 0, 0, 983786, 42762, 0, 42914, 1650, 262, 1637, 0, 7901, 3238, 
+    128173, 41861, 0, 128585, 65158, 10860, 94059, 43658, 7527, 0, 43319, 
+    6419, 0, 45, 0, 64588, 93989, 0, 119810, 7194, 5291, 0, 43666, 13129, 0, 
+    9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 2620, 0, 0, 0, 983875, 
+    179, 65896, 0, 64756, 2853, 78443, 118813, 983890, 118996, 119009, 2850, 
+    8084, 983085, 73850, 2801, 92284, 42069, 119839, 74754, 119841, 42072, 
+    119843, 119842, 10398, 983056, 0, 8377, 127116, 8245, 68401, 3158, 92396, 
+    3983, 43656, 923, 119857, 119856, 292, 13002, 119845, 119844, 3221, 1763, 
+    92463, 4612, 119851, 119850, 7253, 127110, 68391, 0, 10782, 3637, 12996, 
+    43542, 0, 64578, 983675, 3228, 69636, 8783, 0, 119614, 2731, 0, 0, 78585, 
+    4102, 7696, 73878, 0, 0, 78586, 43316, 4177, 11283, 9089, 0, 73996, 
+    983173, 64500, 43674, 0, 64947, 1856, 0, 0, 6379, 0, 0, 0, 3208, 12975, 
+    74775, 127380, 983931, 92389, 74072, 55269, 0, 0, 983683, 2033, 78577, 
+    78576, 195026, 55254, 7740, 0, 0, 0, 73964, 0, 93988, 67612, 65674, 
+    128244, 94110, 41689, 0, 74006, 64909, 6646, 11790, 74019, 0, 128066, 
+    128031, 8561, 4573, 0, 5326, 0, 120605, 7230, 8257, 0, 8778, 41688, 0, 
+    65776, 2071, 8314, 6459, 0, 7628, 65092, 73903, 66721, 11342, 128561, 0, 
+    0, 128226, 127001, 0, 11810, 13164, 10723, 967, 983951, 126469, 11946, 0, 
+    3257, 0, 12307, 1845, 983157, 43526, 0, 0, 1886, 42342, 10089, 870, 7648, 
+    3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 43692, 4563, 0, 0, 
+    7591, 65887, 867, 9520, 872, 126607, 868, 873, 7642, 0, 869, 874, 7644, 
+    120674, 875, 790, 128303, 0, 0, 0, 66182, 983258, 5429, 195055, 66180, 
+    126480, 66181, 68452, 983289, 983248, 42067, 0, 5433, 10657, 7911, 
+    194622, 1547, 66176, 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, 
+    0, 67637, 0, 9679, 74122, 0, 0, 0, 66194, 4418, 66184, 4628, 4245, 
+    119648, 0, 0, 1851, 0, 127189, 11908, 0, 9360, 118897, 983202, 42776, 
+    66187, 12837, 8829, 7711, 92714, 0, 92321, 43318, 0, 8809, 69881, 0, 
+    983142, 120604, 983052, 983882, 0, 983270, 0, 0, 7427, 9958, 4588, 43680, 
+    0, 74484, 194968, 2433, 0, 119622, 3352, 74363, 983885, 0, 793, 74404, 0, 
+    305, 567, 67662, 842, 128519, 8208, 0, 41695, 1647, 118877, 0, 7837, 
+    917625, 818, 5337, 194628, 917621, 41376, 119978, 126576, 120594, 74086, 
+    917615, 917614, 917613, 10973, 66359, 1372, 127172, 917608, 4969, 1254, 
+    917605, 917604, 93967, 917602, 65228, 78221, 126612, 0, 2840, 0, 119982, 
+    983939, 0, 3245, 9068, 68194, 64725, 0, 0, 12991, 0, 2651, 68016, 983265, 
+    917611, 127026, 128883, 0, 0, 43648, 120812, 0, 43322, 92662, 0, 0, 
+    64372, 92698, 3226, 655, 752, 7457, 7456, 7452, 3285, 128779, 127821, 
+    119988, 65610, 2391, 0, 92248, 671, 250, 7434, 618, 668, 610, 42800, 
+    7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 0, 128266, 
+    64749, 67850, 2107, 0, 0, 4605, 128174, 983192, 43372, 65945, 128838, 0, 
+    119590, 0, 0, 0, 987, 6927, 11572, 42261, 11464, 3365, 9971, 0, 0, 
+    128297, 0, 0, 0, 0, 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, 
+    4627, 983892, 5208, 0, 128842, 10332, 5218, 7976, 9156, 0, 3244, 5529, 
+    69647, 73894, 128852, 5432, 64965, 5527, 74033, 10516, 7790, 5528, 0, 
+    42140, 120281, 0, 0, 43545, 9887, 0, 4000, 7429, 7428, 665, 7424, 3206, 
+    120278, 7884, 0, 128566, 917989, 128666, 211, 2509, 128858, 120573, 
+    68672, 3220, 42235, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 
+    127258, 5852, 0, 0, 127259, 1708, 0, 983165, 2623, 11943, 0, 69226, 0, 
+    4698, 66509, 1066, 119921, 4701, 983876, 120285, 74225, 94111, 8267, 0, 
+    127265, 0, 7516, 0, 2625, 983977, 8034, 74309, 0, 3631, 10955, 7850, 
+    120293, 8416, 0, 0, 0, 43384, 12660, 0, 0, 0, 74850, 41069, 0, 128156, 
+    12099, 4310, 10032, 6252, 713, 7990, 0, 3990, 0, 983262, 66368, 5017, 
+    64956, 7071, 0, 119144, 1030, 118800, 983120, 9513, 41059, 9357, 0, 1773, 
+    0, 120350, 0, 6339, 7745, 9844, 0, 64650, 94, 1880, 74766, 983838, 8908, 
+    0, 128707, 65913, 78470, 10752, 13003, 0, 126572, 41307, 8732, 120338, 0, 
+    1757, 6964, 4696, 0, 120335, 64785, 7394, 3641, 5419, 128055, 0, 127883, 
+    0, 120344, 43988, 0, 8610, 43062, 7592, 856, 74299, 936, 13289, 69894, 
+    43171, 1459, 0, 65243, 78638, 19953, 0, 1504, 70064, 0, 12913, 74206, 
+    7529, 0, 128699, 983957, 120782, 4113, 0, 2372, 336, 0, 7509, 12152, 0, 
+    682, 66458, 41505, 0, 64743, 10593, 1703, 0, 983955, 8033, 69953, 0, 
+    9810, 127269, 0, 12970, 0, 42351, 10109, 917623, 0, 194693, 0, 92690, 0, 
+    0, 74291, 1965, 7069, 43312, 0, 73887, 0, 2087, 64370, 6314, 41714, 8501, 
+    0, 0, 74239, 41317, 92614, 2091, 74545, 2090, 0, 9353, 7117, 2077, 77886, 
+    0, 10498, 2083, 77888, 0, 0, 119236, 634, 0, 0, 0, 69779, 4165, 8746, 0, 
+    9654, 12856, 6924, 0, 7066, 983719, 0, 128135, 41037, 42692, 7786, 12959, 
+    41039, 127483, 0, 680, 2302, 128200, 1181, 7056, 3174, 126516, 0, 92668, 
+    65665, 127375, 126506, 6920, 0, 92295, 0, 118965, 0, 64644, 126981, 
+    74119, 0, 41028, 0, 6231, 2613, 65302, 40989, 0, 194696, 0, 42760, 0, 
+    983566, 0, 40987, 4667, 0, 983932, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 
+    4749, 92675, 0, 921, 4744, 0, 12702, 242, 0, 1566, 8217, 0, 64653, 78386, 
+    128121, 74036, 74505, 43274, 5313, 951, 0, 0, 983867, 7604, 983290, 4009, 
+    127816, 983710, 120562, 0, 983720, 64860, 119138, 119069, 0, 127370, 
+    4048, 983598, 0, 70024, 1646, 77890, 64534, 73995, 120705, 0, 119890, 
+    2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, 2975, 74442, 9822, 
+    983935, 55220, 10084, 73943, 118840, 0, 917562, 194610, 3399, 9851, 
+    983717, 11909, 9059, 0, 7687, 0, 6789, 0, 0, 0, 71367, 0, 0, 1777, 9151, 
+    1137, 69767, 749, 42366, 0, 5385, 128574, 128218, 0, 0, 5989, 0, 0, 
+    128091, 0, 41685, 69223, 0, 9769, 41684, 983216, 519, 0, 11740, 5766, 0, 
+    0, 2600, 8848, 120138, 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, 
+    69688, 69771, 74479, 0, 6558, 0, 0, 69765, 120750, 252, 0, 41302, 0, 0, 
+    0, 69763, 0, 11729, 8719, 9060, 0, 120139, 10761, 0, 0, 0, 118792, 11734, 
+    983223, 11730, 0, 9593, 5757, 2403, 64808, 55275, 0, 11728, 43572, 0, 0, 
+    7764, 983714, 11094, 120825, 0, 983226, 4282, 8298, 0, 0, 0, 0, 0, 64449, 
+    0, 126650, 63854, 8456, 0, 74783, 65670, 0, 78250, 0, 7774, 10607, 9792, 
+    0, 0, 0, 0, 120764, 0, 10019, 74762, 0, 3458, 4365, 70053, 983712, 3647, 
+    0, 2602, 128341, 0, 194707, 41135, 0, 0, 0, 64631, 172, 4971, 41219, 
+    41137, 1889, 7238, 6545, 126476, 92193, 7597, 10528, 0, 0, 3732, 73910, 
+    194588, 5344, 0, 43366, 43363, 9062, 119252, 0, 0, 0, 64479, 9232, 92596, 
+    0, 0, 194712, 10900, 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, 
+    119635, 6099, 41534, 0, 127354, 127345, 299, 917957, 8525, 127347, 3524, 
+    917565, 8831, 127349, 92564, 3075, 67867, 127352, 0, 66362, 0, 64353, 0, 
+    0, 5845, 0, 0, 0, 2581, 8200, 65114, 68460, 0, 43283, 5551, 0, 120735, 
+    983201, 6340, 118855, 0, 78134, 8680, 7204, 70065, 2588, 2914, 7011, 
+    55281, 0, 2471, 194631, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, 
+    675, 42493, 0, 43571, 0, 6219, 0, 9980, 41232, 10928, 0, 41153, 41229, 
+    118967, 0, 3738, 94016, 0, 12711, 3181, 66212, 74289, 68472, 42857, 8262, 
+    983379, 0, 983222, 0, 42347, 12092, 9615, 7234, 74047, 983088, 0, 43744, 
+    0, 0, 73846, 2934, 12722, 120762, 922, 43983, 74507, 983126, 74461, 3218, 
+    120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932, 73728, 3214, 
+    120461, 120468, 12128, 3207, 65486, 78729, 1901, 78727, 127326, 120460, 
+    7425, 3205, 68003, 78737, 78736, 78735, 43383, 69940, 65459, 2606, 78730, 
+    73897, 0, 11496, 1173, 0, 41272, 119661, 0, 0, 983321, 120737, 0, 983971, 
+    983320, 378, 2610, 0, 65079, 983325, 65695, 126559, 37, 7068, 0, 120480, 
+    120479, 3209, 120477, 0, 10638, 9768, 69952, 119909, 983399, 0, 0, 0, 0, 
+    65510, 0, 0, 5233, 983335, 64792, 983334, 0, 126633, 0, 7060, 9847, 
+    120144, 1685, 595, 0, 73971, 1292, 8940, 7380, 11088, 0, 10004, 126997, 
+    0, 6541, 0, 0, 0, 3243, 9014, 5606, 0, 538, 64620, 5602, 8467, 74391, 
+    6547, 128132, 8203, 78488, 983090, 8458, 65211, 8495, 119904, 0, 917552, 
+    779, 78314, 64367, 2465, 69901, 8193, 55279, 9730, 9280, 0, 7065, 74155, 
+    4346, 0, 73798, 504, 0, 92414, 8982, 0, 0, 0, 782, 0, 10883, 0, 194852, 
+    732, 3737, 127253, 1548, 68650, 92507, 1832, 5604, 5735, 41141, 119020, 
+    4376, 0, 11787, 3745, 0, 0, 42888, 65712, 983304, 3869, 11937, 5725, 
+    127539, 1783, 68648, 5728, 0, 0, 0, 11918, 66567, 5724, 0, 5727, 78521, 
+    0, 0, 764, 0, 128116, 43531, 0, 9033, 0, 42532, 6223, 11042, 120749, 
+    11423, 0, 119861, 71344, 43465, 0, 128267, 6559, 64557, 71348, 92649, 
+    120648, 43019, 43477, 10238, 74491, 0, 43377, 92282, 71346, 1478, 9783, 
+    11825, 2607, 64740, 0, 7739, 74543, 0, 0, 0, 6132, 0, 63765, 0, 70058, 
+    41144, 0, 92438, 43537, 6761, 10093, 4369, 917791, 0, 983148, 8820, 3947, 
+    0, 0, 11515, 526, 128103, 41295, 194603, 917785, 194932, 0, 7688, 917786, 
+    7686, 8288, 11815, 0, 0, 983382, 1543, 3713, 41221, 12423, 42281, 917788, 
+    74024, 12293, 0, 64357, 11794, 42082, 0, 1737, 8987, 42081, 0, 7205, 0, 
+    9335, 12850, 119870, 6553, 7055, 0, 8277, 0, 0, 5475, 74795, 6780, 0, 0, 
+    12990, 1160, 42084, 119650, 41217, 119660, 10018, 360, 0, 0, 68176, 5863, 
+    3137, 0, 4147, 983170, 41216, 7844, 2616, 119190, 68461, 65234, 983294, 
+    13076, 3135, 983287, 78143, 119139, 3142, 92451, 94068, 10819, 119580, 
+    10183, 0, 2608, 1470, 73967, 94008, 6227, 0, 127173, 69741, 983582, 6163, 
+    983558, 0, 127314, 0, 0, 8603, 0, 119866, 3306, 10876, 43392, 119573, 
+    127931, 5751, 0, 6222, 0, 0, 12086, 7403, 1600, 64309, 64939, 0, 64783, 
+    92658, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, 
+    6974, 0, 0, 983211, 5002, 0, 41286, 69946, 127019, 0, 43585, 0, 6551, 
+    983962, 128229, 0, 41289, 0, 194602, 0, 8977, 602, 120814, 0, 128778, 
+    128661, 0, 983375, 41279, 0, 0, 0, 11081, 43615, 0, 0, 0, 983612, 12727, 
+    0, 0, 78397, 9475, 7112, 65105, 0, 9633, 10886, 43592, 7831, 983829, 
+    194571, 0, 73915, 8076, 43048, 8290, 8291, 43051, 92570, 0, 2596, 43584, 
+    0, 13113, 0, 127757, 2393, 7058, 9087, 74067, 68673, 41574, 78337, 0, 
+    74058, 6376, 0, 0, 0, 0, 9854, 127748, 64696, 0, 128220, 0, 6994, 0, 
+    1720, 0, 0, 0, 6529, 7063, 983182, 3751, 9120, 983485, 0, 1798, 709, 0, 
+    1354, 1876, 13152, 6557, 12430, 8137, 94098, 92642, 0, 0, 245, 128097, 
+    11456, 41233, 7070, 0, 94046, 6136, 917609, 65677, 8682, 41235, 92595, 
+    42045, 9804, 118963, 432, 3595, 194945, 65437, 0, 74455, 42399, 0, 0, 
+    128274, 0, 119658, 0, 0, 0, 77894, 8797, 0, 9052, 64888, 7167, 2356, 95, 
+    74784, 10580, 0, 42286, 0, 64640, 0, 94109, 0, 74137, 70035, 10063, 
+    12652, 12199, 92480, 0, 2566, 11971, 983737, 0, 1065, 0, 0, 43400, 2576, 
+    66696, 93999, 0, 43604, 0, 0, 74082, 514, 74502, 70032, 2921, 43215, 
+    64493, 5772, 12968, 70055, 194944, 74580, 43398, 2580, 983810, 41341, 
+    41223, 6564, 1463, 41342, 0, 5293, 70020, 0, 3733, 11346, 0, 12054, 0, 
+    74098, 42827, 0, 13091, 0, 0, 0, 917915, 0, 127025, 0, 74821, 0, 983733, 
+    119042, 0, 127865, 13090, 66643, 0, 1270, 1132, 42360, 0, 74096, 66655, 
+    42569, 127824, 0, 64761, 0, 41021, 8510, 42432, 0, 0, 194782, 0, 64496, 
+    74109, 70030, 9915, 0, 983218, 7061, 41336, 3854, 69700, 13141, 68413, 
+    43401, 42319, 13082, 0, 7067, 68221, 0, 127383, 127171, 0, 0, 127797, 
+    9029, 43543, 119315, 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 43664, 
+    92399, 66627, 0, 4484, 8509, 118976, 11066, 65233, 0, 41224, 41017, 0, 
+    3747, 10522, 0, 0, 1691, 41226, 0, 12107, 7100, 10905, 65010, 194986, 
+    697, 66018, 9284, 4244, 0, 0, 92644, 13121, 120036, 0, 12010, 128573, 
+    128221, 0, 0, 0, 127193, 65816, 68111, 0, 127933, 65668, 92257, 6618, 
+    118784, 66365, 0, 42234, 12648, 78110, 7123, 70038, 5785, 9198, 9764, 
+    41316, 65877, 7383, 13230, 41299, 0, 0, 68365, 128258, 0, 0, 0, 13122, 0, 
+    191, 70060, 8585, 8000, 64411, 120652, 42889, 64850, 41072, 41578, 0, 
+    41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683, 396, 41580, 68146, 0, 
+    12901, 43058, 0, 343, 7129, 42680, 41360, 78154, 0, 4743, 0, 0, 74040, 
+    74108, 8743, 1724, 1433, 119322, 0, 3739, 6263, 71349, 0, 3964, 6592, 0, 
+    128693, 66040, 0, 42568, 69806, 128113, 1778, 3956, 0, 42070, 6563, 
+    43075, 9018, 94006, 983396, 12067, 41312, 0, 5547, 74531, 127969, 0, 
+    8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 92703, 118822, 1750, 
+    0, 4394, 68368, 1807, 983888, 92298, 0, 5889, 0, 7180, 0, 119145, 0, 
+    917558, 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, 
+    65230, 128109, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 92416, 3975, 0, 
+    74087, 0, 12672, 3798, 2703, 983599, 0, 2109, 9774, 1275, 0, 0, 41095, 
+    3962, 0, 2932, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 
+    41851, 128230, 41846, 0, 55238, 7633, 41849, 68385, 4320, 3224, 0, 
     128032, 0, 42531, 119108, 1510, 0, 8256, 0, 11393, 0, 8879, 128075, 
     92474, 8770, 0, 0, 78377, 1910, 8671, 78374, 4283, 0, 127117, 68361, 
     78318, 2654, 7893, 195007, 0, 0, 0, 65106, 42761, 12857, 4581, 8411, 
@@ -19238,28 +19256,28 @@
     917619, 0, 0, 10043, 0, 1186, 41571, 6999, 617, 9464, 126642, 3675, 5207, 
     65062, 5213, 194769, 2617, 41348, 41568, 128803, 3253, 120535, 0, 8630, 
     128544, 0, 5596, 5545, 7288, 2586, 64887, 0, 5217, 71336, 0, 0, 0, 64293, 
-    68098, 2635, 0, 0, 983837, 0, 983632, 7835, 70040, 0, 194988, 92285, 
+    68098, 2635, 0, 0, 983846, 0, 983641, 7835, 70040, 0, 194988, 92285, 
     64558, 127122, 0, 127121, 0, 127913, 0, 5784, 983102, 0, 0, 70033, 4011, 
-    917616, 68101, 0, 7864, 4254, 65095, 983489, 5600, 3903, 127083, 10447, 
+    917616, 68101, 0, 7864, 4254, 65095, 983496, 5600, 3903, 127083, 10447, 
     5598, 1207, 120521, 66689, 3501, 42582, 43600, 194780, 0, 1124, 5597, 
-    194778, 194772, 9321, 983477, 983474, 983475, 0, 1719, 68356, 68354, 
-    9671, 1125, 4399, 127479, 917610, 983481, 7631, 5488, 7128, 120532, 0, 
+    194778, 194772, 9321, 983484, 983481, 983482, 0, 1719, 68356, 68354, 
+    9671, 1125, 4399, 127479, 917610, 983488, 7631, 5488, 7128, 120532, 0, 
     5491, 0, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, 
     6300, 0, 7122, 0, 4390, 454, 41397, 0, 9875, 7593, 194791, 92274, 118913, 
     7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, 120037, 0, 43423, 
     128683, 11989, 0, 0, 0, 0, 0, 8249, 128172, 0, 78531, 6640, 74806, 2598, 
-    513, 0, 6586, 8656, 0, 120710, 65008, 0, 194784, 194989, 194795, 983466, 
-    92515, 68475, 93973, 0, 0, 78637, 12647, 0, 128043, 69893, 1036, 983470, 
-    92419, 1723, 128056, 74217, 0, 41579, 2444, 0, 10705, 73876, 983462, 
-    74486, 983460, 740, 119222, 194978, 194984, 0, 4238, 11071, 9459, 68437, 
+    513, 0, 6586, 8656, 0, 120710, 65008, 0, 194784, 194989, 194795, 983473, 
+    92515, 68475, 93973, 0, 0, 78637, 12647, 0, 128043, 69893, 1036, 983477, 
+    92419, 1723, 128056, 74217, 0, 41579, 2444, 0, 10705, 73876, 983469, 
+    74486, 983467, 740, 119222, 194978, 194984, 0, 4238, 11071, 9459, 68437, 
     78140, 78139, 194985, 8121, 10438, 74487, 42574, 13285, 55263, 11907, 
     195000, 5690, 92255, 93992, 0, 43181, 13095, 0, 127857, 64498, 0, 9506, 
     6978, 194993, 77992, 0, 0, 194992, 0, 127845, 1122, 317, 0, 0, 0, 0, 
     1920, 0, 10173, 827, 0, 0, 78378, 120126, 5223, 1304, 0, 119564, 5226, 
     12602, 94044, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 
     69229, 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, 233, 
-    127490, 983434, 42816, 94036, 65140, 74797, 0, 8830, 6568, 42300, 10524, 
-    41175, 983441, 983438, 983439, 5296, 983437, 42492, 43402, 92466, 3302, 
+    127490, 983441, 42816, 94036, 65140, 74797, 0, 8830, 6568, 42300, 10524, 
+    41175, 983448, 983445, 983446, 5296, 983444, 42492, 43402, 92466, 3302, 
     0, 0, 6516, 6515, 6514, 6513, 6512, 0, 7856, 8690, 0, 0, 12122, 119602, 
     43976, 0, 1785, 69925, 68622, 65153, 194810, 5138, 0, 0, 118869, 0, 4540, 
     41181, 0, 6200, 0, 5134, 0, 322, 4643, 5132, 0, 6389, 128533, 5143, 0, 
@@ -19267,7 +19285,7 @@
     127012, 10270, 10286, 10318, 10382, 43529, 66477, 0, 0, 74170, 0, 3234, 
     0, 0, 74376, 43139, 118815, 127084, 120627, 8767, 0, 74489, 9695, 120746, 
     5201, 0, 6215, 12714, 6214, 13101, 0, 194999, 65268, 0, 0, 0, 11027, 0, 
-    10059, 10511, 42075, 9767, 789, 1749, 78890, 127071, 983661, 320, 0, 
+    10059, 10511, 42075, 9767, 789, 1749, 78890, 127071, 983670, 320, 0, 
     8647, 0, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 66478, 4960, 
     5549, 127359, 127346, 8485, 4671, 5418, 127350, 3351, 127006, 127351, 
     10610, 5414, 3064, 6212, 4286, 5421, 127344, 9554, 0, 94048, 127109, 
@@ -19275,9 +19293,9 @@
     12603, 7131, 11430, 4566, 7518, 9317, 3801, 10342, 10406, 0, 119259, 
     42576, 0, 5200, 126611, 917948, 0, 9183, 127361, 74458, 73825, 395, 5482, 
     5198, 4349, 10390, 74202, 5196, 43224, 6113, 42009, 5205, 0, 43307, 0, 
-    118973, 0, 12134, 0, 0, 118843, 9126, 435, 0, 12014, 10377, 8093, 9079, 
-    3203, 192, 65109, 3385, 0, 64430, 5383, 10294, 10326, 128178, 5738, 
-    983214, 3336, 78355, 5361, 3623, 41159, 0, 68112, 7872, 8581, 0, 1260, 
+    118973, 0, 12134, 0, 0, 118843, 9126, 435, 983624, 12014, 10377, 8093, 
+    9079, 3203, 192, 65109, 3385, 0, 64430, 5383, 10294, 10326, 128178, 5738, 
+    983215, 3336, 78355, 5361, 3623, 41159, 0, 68112, 7872, 8581, 0, 1260, 
     3149, 5359, 120134, 0, 7914, 5357, 92170, 128659, 2624, 5364, 0, 11431, 
     120030, 9101, 11058, 78288, 0, 78293, 42271, 78289, 42917, 120793, 0, 
     65566, 6717, 10619, 43360, 78385, 78384, 11832, 78382, 78381, 78380, 
@@ -19312,30 +19330,30 @@
     55252, 73972, 1442, 0, 5894, 70069, 0, 41171, 92511, 74313, 0, 13162, 0, 
     3334, 195010, 118803, 77881, 66022, 0, 0, 1651, 128771, 8861, 0, 0, 1142, 
     0, 8271, 0, 983058, 126645, 12903, 0, 4002, 43626, 10442, 10676, 3344, 0, 
-    0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0, 0, 78853, 0, 78854, 
+    0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0, 194686, 78853, 0, 78854, 
     120360, 0, 11784, 0, 78012, 4700, 66366, 78858, 120359, 11012, 0, 78856, 
     92400, 77879, 4973, 8784, 77877, 74804, 77874, 77869, 77871, 42440, 0, 
     43118, 0, 42364, 6774, 6773, 917560, 120369, 10346, 10410, 78859, 9243, 
     2464, 74263, 6108, 3372, 0, 6247, 43117, 74526, 7121, 74166, 0, 120355, 
     92537, 0, 0, 195034, 0, 0, 0, 70083, 3354, 195037, 4192, 9289, 118999, 
     41191, 3876, 0, 70067, 120660, 43696, 43380, 0, 983091, 0, 0, 11603, 
-    983945, 0, 6589, 128588, 194679, 0, 0, 983691, 0, 0, 42572, 128264, 
+    983954, 0, 6589, 128588, 194679, 0, 0, 983700, 0, 0, 42572, 128264, 
     10630, 74827, 1963, 11622, 127098, 11654, 0, 7550, 10686, 5903, 0, 78009, 
     41329, 9662, 917937, 64698, 3366, 10399, 0, 5542, 11013, 127927, 128300, 
-    0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 983664, 43367, 64579, 
+    0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 983673, 43367, 64579, 
     917930, 7852, 0, 0, 6754, 6312, 0, 64672, 65296, 0, 118957, 0, 416, 
     12296, 68457, 73834, 68177, 11050, 10984, 92208, 0, 0, 92182, 0, 983605, 
-    9532, 66355, 0, 983229, 917925, 64343, 195032, 128281, 195031, 0, 195030, 
+    9532, 66355, 0, 983234, 917925, 64343, 195032, 128281, 195031, 0, 195030, 
     195057, 11445, 0, 2112, 195056, 128814, 10185, 1021, 128130, 9507, 10210, 
     74544, 8023, 1200, 12243, 78001, 5282, 78003, 9624, 11545, 0, 120493, 
     3343, 4424, 11047, 1885, 43268, 3896, 78444, 66497, 2947, 392, 7894, 
     4391, 68139, 983062, 13059, 74816, 77998, 3381, 7942, 0, 69219, 0, 64757, 
     0, 3913, 0, 0, 78235, 7044, 1265, 0, 6309, 7045, 7175, 7047, 78239, 
-    11791, 0, 0, 8221, 78307, 41864, 0, 0, 0, 0, 167, 983897, 78301, 983644, 
-    74211, 41897, 68477, 0, 917583, 983625, 94065, 2493, 0, 118811, 0, 0, 
+    11791, 0, 0, 8221, 78307, 41864, 0, 0, 0, 0, 167, 983906, 78301, 983653, 
+    74211, 41897, 68477, 0, 917583, 983634, 94065, 2493, 0, 118811, 0, 0, 
     64354, 0, 8777, 0, 406, 8884, 2385, 0, 92450, 0, 917573, 43030, 42027, 
     12114, 0, 917579, 64936, 194695, 0, 120629, 10561, 0, 8365, 120539, 
-    983765, 65841, 120787, 11601, 0, 74121, 0, 917575, 7834, 74159, 0, 
+    983774, 65841, 120787, 11601, 0, 74121, 0, 917575, 7834, 74159, 0, 
     917574, 10298, 6624, 4908, 917596, 1639, 0, 0, 74157, 6327, 6724, 0, 
     128086, 92566, 69910, 4817, 78446, 194759, 92536, 7043, 9600, 11022, 0, 
     0, 0, 0, 0, 0, 7548, 64794, 42050, 12291, 55289, 194761, 12343, 657, 
@@ -19345,14 +19363,14 @@
     41406, 43273, 74160, 119983, 73939, 92638, 119984, 119979, 41404, 1165, 
     119980, 4451, 13087, 0, 11284, 119987, 70097, 65155, 43014, 5439, 9363, 
     70070, 3375, 128869, 5900, 93990, 7889, 2722, 42262, 0, 0, 128774, 0, 
-    2282, 0, 127810, 11401, 983813, 0, 68459, 0, 0, 0, 0, 65438, 0, 7280, 
-    127887, 0, 127381, 4868, 119967, 119966, 118798, 0, 0, 43161, 0, 92360, 
-    0, 5182, 0, 120542, 0, 0, 4226, 119243, 12135, 5732, 4464, 0, 71330, 977, 
+    2282, 0, 127810, 11401, 983822, 0, 68459, 0, 0, 0, 0, 65438, 0, 7280, 
+    127887, 0, 127381, 4868, 8297, 119966, 118798, 0, 0, 43161, 0, 92360, 0, 
+    5182, 0, 120542, 0, 0, 4226, 119243, 12135, 5732, 4464, 0, 71330, 977, 
     4458, 0, 0, 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 92240, 0, 
     786, 0, 43174, 64340, 0, 194767, 120723, 43026, 7612, 10132, 64413, 
     65025, 0, 0, 0, 93956, 0, 68444, 0, 92437, 0, 119160, 10204, 92656, 0, 
-    127809, 983635, 1399, 983643, 65217, 0, 8852, 128571, 241, 128780, 4907, 
-    0, 983630, 7932, 9727, 128873, 74255, 8748, 0, 0, 983634, 0, 42780, 0, 0, 
+    127809, 983644, 1399, 983652, 65217, 0, 8852, 128571, 241, 128780, 4907, 
+    0, 983639, 7932, 9727, 128873, 74255, 8748, 0, 0, 983643, 0, 42780, 0, 0, 
     0, 4217, 0, 8650, 0, 0, 0, 69900, 118872, 43099, 3965, 119119, 6719, 0, 
     13300, 78439, 93971, 43057, 66588, 118991, 0, 0, 73815, 4420, 0, 6410, 
     7760, 0, 0, 0, 0, 0, 7294, 0, 0, 0, 9066, 0, 11993, 43188, 2626, 7762, 0, 
@@ -19360,45 +19378,45 @@
     66454, 9592, 42851, 126993, 1542, 92303, 0, 0, 0, 0, 74311, 78497, 0, 
     10181, 0, 43624, 0, 7779, 0, 10195, 9479, 6029, 0, 92268, 9689, 0, 65577, 
     8993, 66358, 0, 42378, 3368, 606, 127030, 7697, 69237, 69787, 2030, 0, 
-    6027, 8370, 4322, 0, 65207, 0, 983332, 983331, 983330, 983329, 2735, 
+    6027, 8370, 4322, 0, 65207, 0, 983339, 983338, 983337, 983336, 2735, 
     42831, 77935, 127120, 74866, 8881, 119047, 0, 0, 73946, 0, 0, 0, 68140, 
-    983919, 9576, 128872, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, 
-    7709, 41112, 983132, 66560, 42041, 4572, 12876, 66561, 983749, 6758, 
-    983917, 1615, 5855, 809, 0, 92283, 128316, 128004, 5799, 983321, 70100, 
-    983319, 7260, 983317, 43031, 64425, 65128, 78819, 64386, 65257, 0, 68616, 
+    983928, 9576, 128872, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, 
+    7709, 41112, 983132, 66560, 42041, 4572, 12876, 66561, 983758, 6758, 
+    983926, 1615, 5855, 809, 0, 92283, 128316, 128004, 5799, 983328, 70100, 
+    983326, 7260, 983324, 43031, 64425, 65128, 78819, 64386, 65257, 0, 68616, 
     120607, 9347, 128067, 6532, 0, 0, 0, 127060, 65828, 0, 283, 68665, 78813, 
-    532, 78663, 0, 983787, 120609, 0, 3370, 0, 11361, 5443, 78778, 8153, 
-    73767, 0, 10741, 0, 2298, 0, 983908, 65495, 64706, 983311, 43344, 983309, 
-    7144, 9466, 78866, 9824, 983304, 983303, 0, 0, 915, 43425, 0, 0, 0, 0, 
+    532, 78663, 0, 983796, 120609, 0, 3370, 0, 11361, 5443, 78778, 8153, 
+    73767, 0, 10741, 0, 2298, 0, 983917, 65495, 64706, 983318, 43344, 983316, 
+    7144, 9466, 78866, 9824, 983311, 983310, 0, 0, 915, 43425, 0, 0, 0, 0, 
     127178, 43264, 70096, 0, 0, 43038, 78864, 6730, 78862, 68161, 64550, 
     5186, 7360, 127837, 0, 12108, 0, 65124, 43127, 66043, 0, 6326, 43107, 
-    77826, 0, 42562, 0, 128821, 0, 128520, 11485, 6103, 127123, 983298, 
-    11718, 983296, 12889, 92657, 127137, 0, 0, 0, 55245, 0, 1630, 128232, 
+    77826, 0, 42562, 0, 128821, 0, 128520, 11485, 6103, 127123, 983305, 
+    11718, 983303, 12889, 92657, 127137, 0, 0, 0, 55245, 0, 1630, 128232, 
     65483, 0, 12565, 0, 65476, 120013, 0, 119554, 9283, 7700, 917537, 9690, 
     65499, 0, 64593, 512, 3376, 68210, 0, 128677, 77892, 632, 12940, 77891, 
-    42529, 78587, 0, 5957, 110593, 8926, 983292, 983291, 128273, 10745, 
+    42529, 78587, 0, 5957, 110593, 8926, 983299, 983298, 128273, 10745, 
     10174, 7379, 64581, 5386, 120686, 11713, 10633, 69708, 5056, 0, 0, 0, 
     120773, 0, 9812, 0, 4460, 0, 0, 71307, 128038, 0, 0, 127174, 64278, 
     92370, 43466, 0, 0, 64389, 2953, 73879, 1801, 12835, 119029, 0, 73823, 0, 
-    66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 983279, 983278, 
-    128570, 12106, 983275, 74207, 1755, 10482, 12863, 77898, 1163, 2951, 
+    66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 983286, 983285, 
+    128570, 12106, 983282, 74207, 1755, 10482, 12863, 77898, 1163, 2951, 
     9522, 74079, 78266, 66604, 0, 3384, 69227, 10702, 830, 77902, 77899, 
     77900, 8451, 0, 0, 0, 69739, 0, 0, 0, 0, 2908, 0, 43386, 64902, 4243, 0, 
-    12239, 0, 0, 4441, 0, 983272, 73940, 64352, 127513, 983268, 411, 983266, 
-    9199, 983264, 4056, 118992, 41890, 0, 2730, 41604, 983928, 5428, 194743, 
+    12239, 0, 0, 4441, 0, 983279, 73940, 64352, 127513, 983275, 411, 983273, 
+    9199, 983271, 4056, 118992, 41890, 0, 2730, 41604, 983937, 5428, 194743, 
     3364, 42265, 64437, 127935, 118816, 194742, 9684, 216, 0, 1401, 128053, 
     44012, 0, 0, 92585, 9158, 77842, 69905, 5768, 0, 0, 0, 484, 194739, 0, 0, 
-    65895, 0, 0, 3338, 73935, 572, 7041, 2736, 67605, 983256, 93962, 2794, 
+    65895, 0, 0, 3338, 73935, 572, 7041, 2736, 67605, 983263, 93962, 2794, 
     8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509, 
     77846, 194747, 9534, 0, 0, 0, 3430, 0, 0, 78717, 0, 981, 0, 4330, 73929, 
     120536, 1824, 10908, 0, 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, 
-    128259, 674, 63991, 983244, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 
+    128259, 674, 63991, 983249, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 
     8364, 5123, 119628, 5281, 5469, 5121, 119245, 118993, 0, 5130, 0, 0, 
     77990, 0, 120726, 1221, 2733, 11746, 77991, 5216, 0, 0, 0, 0, 3468, 7033, 
     9230, 5939, 195052, 0, 0, 120677, 68400, 7278, 10321, 10289, 64613, 
-    10385, 41706, 0, 0, 983406, 0, 11739, 983419, 41981, 0, 5938, 0, 43766, 
+    10385, 41706, 0, 0, 983413, 0, 11739, 983426, 41981, 0, 5938, 0, 43766, 
     12448, 7576, 10401, 10337, 73852, 0, 13057, 0, 126976, 0, 10009, 0, 
-    41703, 983629, 12165, 0, 0, 9885, 0, 8077, 0, 127908, 0, 0, 0, 92457, 0, 
+    41703, 983638, 12165, 0, 0, 9885, 0, 8077, 0, 127908, 0, 0, 0, 92457, 0, 
     4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 128340, 0, 0, 0, 10970, 
     11733, 0, 120792, 0, 19944, 0, 9009, 8551, 92345, 11468, 64636, 7575, 0, 
     2724, 0, 0, 12313, 110592, 515, 119947, 42791, 63987, 78286, 119943, 
@@ -19408,73 +19426,73 @@
     0, 4477, 118964, 814, 42066, 66183, 66204, 43786, 119961, 66198, 41880, 
     66188, 11623, 78148, 11955, 66190, 66191, 41111, 66189, 73788, 7788, 
     4847, 0, 127759, 0, 0, 0, 1581, 6535, 78161, 12954, 430, 78160, 55259, 
-    78158, 128036, 5278, 4945, 42883, 4950, 983431, 68625, 983429, 7269, 0, 
-    5964, 12908, 983555, 0, 74764, 74477, 119146, 194936, 4949, 983422, 443, 
-    983420, 4944, 5467, 119603, 0, 65137, 6044, 65392, 0, 4213, 0, 41303, 0, 
-    194931, 119962, 41306, 73984, 2698, 127159, 0, 12072, 3193, 0, 41304, 
-    824, 128676, 12091, 78893, 78894, 119816, 4673, 64804, 4678, 119820, 
-    119819, 65059, 0, 6739, 0, 5481, 3490, 1199, 119811, 8356, 69947, 119832, 
-    4677, 12688, 3102, 0, 4672, 78173, 78175, 5531, 68367, 42575, 78170, 
-    78166, 4674, 4548, 44005, 119949, 68658, 119946, 8025, 68630, 127024, 
-    1855, 983405, 68669, 983403, 92445, 127554, 0, 127339, 119652, 2745, 
-    11797, 983411, 128159, 9202, 4654, 983407, 983409, 68638, 73993, 10525, 
-    4649, 65209, 983410, 0, 4648, 43080, 983399, 983400, 983397, 6246, 64950, 
-    7828, 4650, 6777, 6776, 6775, 4653, 7822, 78005, 92384, 43187, 8669, 
-    983408, 6821, 65093, 0, 78881, 2716, 0, 983060, 983412, 0, 68369, 120054, 
-    11060, 8547, 2711, 42165, 78027, 78026, 7992, 0, 0, 4662, 78033, 78032, 
-    9149, 9146, 599, 2081, 78031, 78030, 194962, 4656, 10130, 68450, 7811, 
-    40994, 194965, 6414, 5967, 4658, 3725, 5713, 5814, 4661, 42434, 983404, 
-    0, 0, 64904, 9026, 10833, 74864, 7547, 4867, 0, 10008, 10222, 3054, 
-    194956, 9744, 78860, 7605, 4622, 119656, 983388, 94070, 983386, 983387, 
-    983384, 9045, 78888, 4225, 19926, 78887, 12880, 65307, 4617, 78883, 
-    983379, 41732, 4616, 10518, 10423, 10359, 983373, 5958, 0, 983426, 4215, 
-    9789, 917941, 4321, 4621, 983382, 41313, 522, 5368, 0, 65803, 0, 5366, 
-    12201, 5372, 0, 983402, 0, 7720, 7390, 2696, 983393, 0, 4638, 983398, 
-    1790, 78242, 5965, 64363, 66569, 68646, 127833, 5376, 1835, 5335, 194966, 
-    128089, 4633, 0, 68119, 1180, 4632, 128093, 5387, 5333, 0, 0, 42094, 
-    5331, 4634, 11928, 983594, 5338, 4637, 128170, 5971, 42414, 0, 1268, 
-    65097, 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, 
-    983367, 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231, 
-    74384, 983371, 68377, 6248, 983355, 983356, 983353, 42318, 92582, 5229, 
+    78158, 128036, 5278, 4945, 42883, 4950, 983438, 68625, 983436, 7269, 0, 
+    5964, 12908, 983555, 0, 74764, 74477, 119146, 194936, 4949, 983429, 443, 
+    983427, 4944, 5467, 119603, 983254, 65137, 6044, 65392, 0, 4213, 0, 
+    41303, 0, 194931, 119962, 41306, 73984, 2698, 127159, 0, 12072, 3193, 0, 
+    41304, 824, 128676, 12091, 78893, 78894, 119816, 4673, 64804, 4678, 
+    119820, 119819, 65059, 0, 6739, 0, 5481, 3490, 1199, 119811, 8356, 69947, 
+    119832, 4677, 12688, 3102, 0, 4672, 78173, 78175, 5531, 68367, 42575, 
+    78170, 78166, 4674, 4548, 44005, 119949, 68658, 119946, 8025, 68630, 
+    127024, 1855, 983412, 68669, 983410, 92445, 127554, 0, 127339, 119652, 
+    2745, 11797, 983418, 128159, 9202, 4654, 983414, 983416, 68638, 73993, 
+    10525, 4649, 65209, 983417, 0, 4648, 43080, 983406, 983407, 983404, 6246, 
+    64950, 7828, 4650, 6777, 6776, 6775, 4653, 7822, 78005, 92384, 43187, 
+    8669, 983415, 6821, 65093, 0, 78881, 2716, 0, 983060, 983419, 0, 68369, 
+    120054, 11060, 8547, 2711, 42165, 78027, 78026, 7992, 0, 0, 4662, 78033, 
+    78032, 9149, 9146, 599, 2081, 78031, 78030, 194962, 4656, 10130, 68450, 
+    7811, 40994, 194965, 6414, 5967, 4658, 3725, 5713, 5814, 4661, 42434, 
+    983411, 0, 0, 64904, 9026, 10833, 74864, 7547, 4867, 0, 10008, 10222, 
+    3054, 194956, 9744, 78860, 7605, 4622, 119656, 983395, 94070, 983393, 
+    983394, 983391, 9045, 78888, 4225, 19926, 78887, 12880, 65307, 4617, 
+    78883, 983386, 41732, 4616, 10518, 10423, 10359, 983380, 5958, 0, 983433, 
+    4215, 9789, 917941, 4321, 4621, 983389, 41313, 522, 5368, 0, 65803, 0, 
+    5366, 12201, 5372, 0, 983409, 0, 7720, 7390, 2696, 983400, 0, 4638, 
+    983405, 1790, 78242, 5965, 64363, 66569, 68646, 127833, 5376, 1835, 5335, 
+    194966, 128089, 4633, 0, 68119, 1180, 4632, 128093, 5387, 5333, 0, 0, 
+    42094, 5331, 4634, 11928, 983594, 5338, 4637, 128170, 5971, 42414, 0, 
+    1268, 65097, 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 
+    4758, 983374, 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231, 
+    74384, 983378, 68377, 6248, 983362, 983363, 983360, 42318, 92582, 5229, 
     4757, 0, 0, 2728, 4752, 64563, 65235, 5234, 0, 128145, 0, 10713, 7166, 0, 
     2622, 7460, 127302, 0, 0, 8954, 74760, 65189, 2632, 42617, 10108, 1011, 
     5574, 1853, 2709, 65139, 5577, 0, 0, 118871, 68641, 8965, 7635, 42177, 
-    5316, 0, 5314, 6451, 5572, 66464, 5312, 0, 5525, 5330, 5319, 983413, 
-    983863, 194907, 44003, 0, 983473, 983416, 120498, 127851, 195009, 983856, 
-    74022, 983415, 64609, 68643, 120634, 983482, 5721, 983394, 5519, 8632, 
-    66465, 11267, 73961, 92278, 5720, 983345, 1692, 4219, 4610, 8696, 4305, 
-    0, 4609, 43478, 4614, 541, 983348, 5287, 5309, 5285, 68389, 5961, 4647, 
-    56, 4216, 10577, 41381, 601, 4613, 983342, 983339, 77849, 4608, 64260, 
+    5316, 0, 5314, 6451, 5572, 66464, 5312, 0, 5525, 5330, 5319, 983420, 
+    983872, 194907, 44003, 0, 983480, 983423, 120498, 127851, 195009, 983865, 
+    74022, 983422, 64609, 68643, 120634, 983489, 5721, 983401, 5519, 8632, 
+    66465, 11267, 73961, 92278, 5720, 983352, 1692, 4219, 4610, 8696, 4305, 
+    0, 4609, 43478, 4614, 541, 983355, 5287, 5309, 5285, 68389, 5961, 4647, 
+    56, 4216, 10577, 41381, 601, 4613, 983349, 983346, 77849, 4608, 64260, 
     41124, 5190, 67628, 0, 68145, 7086, 0, 67998, 67620, 0, 2734, 11074, 0, 
     67627, 43593, 0, 67625, 5960, 0, 8992, 42593, 128260, 1782, 67622, 68114, 
     119939, 0, 68180, 5501, 119952, 42508, 7442, 43665, 359, 41253, 68392, 
     6239, 119956, 41256, 0, 68134, 0, 74209, 917550, 9346, 69660, 41254, 
     128047, 43291, 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 64724, 
-    7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 983831, 4869, 120563, 0, 
-    4223, 128201, 6650, 126509, 0, 983456, 127890, 4870, 120445, 68661, 6716, 
+    7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 983840, 4869, 120563, 0, 
+    4223, 128201, 6650, 126509, 0, 983463, 127890, 4870, 120445, 68661, 6716, 
     78176, 68667, 68382, 68676, 127925, 10122, 4864, 66568, 4144, 7937, 0, 
     6245, 68652, 2732, 42734, 745, 0, 195097, 92195, 4777, 7821, 0, 68631, 
-    42775, 0, 194954, 0, 3097, 0, 5966, 983479, 4778, 0, 10863, 0, 4781, 0, 
+    42775, 0, 194954, 0, 3097, 0, 5966, 983486, 4778, 0, 10863, 0, 4781, 0, 
     64407, 0, 128323, 8577, 128562, 68196, 43285, 10216, 4782, 0, 0, 120757, 
     68618, 12325, 43056, 8717, 0, 0, 4776, 73818, 11492, 8700, 0, 13176, 
     68363, 10426, 0, 917599, 10362, 194706, 1715, 4849, 8242, 9561, 73922, 
     43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, 4853, 118995, 
-    4854, 127918, 5164, 983861, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 
+    4854, 127918, 5164, 983870, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 
     92471, 12445, 3785, 234, 3199, 0, 41268, 4848, 2530, 917909, 2068, 1964, 
     0, 73762, 10458, 0, 8576, 78543, 0, 2704, 4794, 0, 68211, 8322, 4797, 
-    5753, 0, 2694, 4792, 0, 2439, 65104, 69804, 983417, 303, 983101, 92622, 
-    983418, 2437, 0, 4221, 4844, 92216, 0, 0, 0, 70042, 0, 43292, 0, 2441, 
+    5753, 0, 2694, 4792, 0, 2439, 65104, 69804, 983424, 303, 983101, 92622, 
+    983425, 2437, 0, 4221, 4844, 92216, 0, 0, 0, 70042, 0, 43292, 0, 2441, 
     10739, 65090, 0, 119327, 126541, 2451, 2714, 119326, 0, 43379, 4937, 
     43376, 753, 5849, 10597, 43089, 11722, 9248, 92555, 42879, 11725, 0, 0, 
     2726, 3107, 73958, 4941, 64937, 119233, 9140, 1408, 5261, 4607, 0, 181, 
-    983423, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 
+    983430, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 
     983601, 0, 4964, 5264, 64178, 64177, 12979, 41411, 64182, 64181, 64180, 
     64179, 9482, 4873, 41231, 1822, 42526, 128581, 12758, 3865, 0, 0, 10500, 
     0, 119024, 78028, 92408, 9830, 43642, 389, 10893, 7521, 127879, 4872, 
     5463, 0, 3125, 9567, 0, 4878, 5459, 4604, 917931, 9557, 5465, 68617, 0, 
-    11494, 126492, 9563, 10865, 74570, 43279, 64186, 983432, 78714, 64191, 
+    11494, 126492, 9563, 10865, 74570, 43279, 64186, 983439, 78714, 64191, 
     64190, 8898, 64188, 0, 41030, 78836, 0, 917835, 78820, 917834, 0, 78805, 
-    41031, 78801, 11960, 6745, 3082, 983430, 78539, 73919, 10573, 41744, 
+    41031, 78801, 11960, 6745, 3082, 983437, 78539, 73919, 10573, 41744, 
     7079, 5856, 127043, 5163, 78809, 128162, 1817, 66724, 78538, 0, 10564, 
     7763, 13077, 41813, 4400, 41745, 64207, 10275, 8925, 10371, 10307, 41814, 
     4248, 0, 0, 4541, 6299, 64204, 64203, 64201, 64200, 64199, 64198, 126471, 
@@ -19487,33 +19505,33 @@
     65222, 6998, 78180, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827, 
     1146, 5065, 69890, 78192, 68136, 78190, 43412, 5064, 2431, 0, 9450, 1809, 
     0, 78200, 78201, 5062, 1264, 64817, 13254, 11697, 126598, 9785, 64716, 0, 
-    3933, 74559, 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 983864, 
+    3933, 74559, 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 983873, 
     42130, 0, 5151, 917829, 917823, 0, 93980, 0, 7620, 3800, 65122, 0, 0, 
     8355, 7854, 0, 954, 64927, 4185, 41045, 127141, 41438, 41439, 68666, 
-    10711, 4593, 127745, 120584, 983401, 64774, 8053, 10532, 66727, 0, 0, 0, 
+    10711, 4593, 127745, 120584, 983408, 64774, 8053, 10532, 66727, 0, 0, 0, 
     64759, 6381, 5166, 9888, 127800, 5148, 42834, 0, 78205, 78206, 43787, 
     78204, 64131, 3119, 917814, 0, 3060, 64135, 9986, 0, 77876, 636, 11698, 
-    0, 983444, 9916, 11701, 7836, 42741, 64137, 8320, 78640, 8863, 92431, 
-    119960, 1477, 43289, 0, 74358, 8618, 983395, 9908, 983972, 0, 0, 3937, 
-    12312, 0, 983396, 0, 64781, 912, 6349, 4536, 93954, 74532, 126594, 6244, 
-    92209, 71341, 3935, 120665, 983469, 0, 11950, 5392, 42248, 65129, 68656, 
+    0, 983451, 9916, 11701, 7836, 42741, 64137, 8320, 78640, 8863, 92431, 
+    119960, 1477, 43289, 0, 74358, 8618, 983402, 9908, 983981, 0, 0, 3937, 
+    12312, 0, 983403, 0, 64781, 912, 6349, 4536, 93954, 74532, 126594, 6244, 
+    92209, 71341, 3935, 120665, 983476, 0, 11950, 5392, 42248, 65129, 68656, 
     5397, 0, 12046, 12599, 0, 128261, 5395, 0, 5393, 354, 68615, 119948, 
     78503, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 0, 128874, 
     0, 0, 43297, 983079, 4311, 4644, 8818, 0, 128186, 0, 7145, 3918, 66452, 
     3797, 1644, 92346, 9658, 4140, 11385, 65947, 6455, 9030, 813, 119945, 
     68131, 4146, 119957, 5360, 2466, 0, 67669, 119942, 6249, 42117, 92287, 
-    128224, 0, 0, 74046, 43745, 4911, 988, 917807, 0, 983461, 43061, 7054, 
+    128224, 0, 0, 74046, 43745, 4911, 988, 917807, 0, 983468, 43061, 7054, 
     64147, 0, 64920, 68195, 6698, 118933, 92506, 0, 120006, 11981, 12202, 0, 
     11032, 67654, 6093, 11608, 975, 68662, 65843, 170, 0, 0, 4169, 0, 41859, 
     6058, 120401, 13203, 120657, 0, 0, 68657, 9818, 10178, 10324, 42106, 
     5898, 74540, 4738, 41856, 7062, 917865, 4737, 11779, 4742, 120564, 92391, 
-    73736, 983357, 9825, 6448, 6715, 127008, 4831, 0, 92525, 0, 5300, 4741, 
-    42108, 983347, 64159, 4736, 64148, 0, 849, 92191, 78491, 43288, 0, 66620, 
-    917916, 127331, 65549, 9496, 64598, 118866, 983359, 7876, 68132, 917872, 
+    73736, 983364, 9825, 6448, 6715, 127008, 4831, 0, 92525, 0, 5300, 4741, 
+    42108, 983354, 64159, 4736, 64148, 0, 849, 92191, 78491, 43288, 0, 66620, 
+    917916, 127331, 65549, 9496, 64598, 118866, 983366, 7876, 68132, 917872, 
     3928, 917870, 43378, 10706, 7198, 0, 4842, 12053, 128129, 0, 4841, 0, 
     4171, 12008, 6251, 3923, 1490, 0, 119591, 126512, 40972, 5245, 0, 10114, 
     42001, 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, 917849, 
-    4825, 69240, 917852, 68655, 0, 983381, 0, 0, 68628, 983340, 9850, 118937, 
+    4825, 69240, 917852, 68655, 0, 983388, 0, 0, 68628, 983347, 9850, 118937, 
     367, 1472, 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, 10907, 65261, 
     11023, 119559, 4830, 9134, 78666, 64126, 43011, 0, 126626, 64101, 0, 0, 
     4824, 10614, 119659, 0, 1888, 1960, 7861, 917856, 78524, 41836, 43012, 
@@ -19522,12 +19540,12 @@
     64118, 126998, 12962, 0, 126580, 4017, 12827, 5241, 120392, 0, 41118, 
     3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844, 917564, 0, 11363, 
     12057, 11917, 1567, 74000, 4721, 126641, 66202, 8957, 4139, 0, 0, 0, 0, 
-    0, 12740, 128702, 4722, 6816, 127793, 12759, 4725, 983376, 4726, 0, 
-    194892, 0, 128321, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 0, 
-    128294, 64212, 41020, 1382, 64209, 64216, 44002, 64214, 1656, 41831, 0, 
-    0, 41843, 8720, 3908, 1452, 13111, 0, 64067, 127328, 8552, 64113, 41845, 
-    3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 119085, 0, 0, 
-    7935, 2420, 0, 1114, 92599, 67585, 70104, 120053, 92350, 120051, 3938, 
+    0, 12740, 128702, 4722, 6816, 127793, 12759, 4725, 983383, 4726, 0, 
+    194892, 983622, 128321, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 
+    0, 128294, 64212, 41020, 1382, 64209, 64216, 44002, 64214, 1656, 41831, 
+    0, 0, 41843, 8720, 3908, 1452, 13111, 0, 64067, 127328, 8552, 64113, 
+    41845, 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 119085, 0, 
+    0, 7935, 2420, 0, 1114, 92599, 67585, 70104, 120053, 92350, 120051, 3938, 
     120057, 65417, 64717, 120060, 120061, 65415, 120059, 6292, 65303, 7955, 
     6452, 4713, 128196, 66249, 917885, 917890, 917891, 65152, 719, 120044, 
     78623, 120042, 6713, 4532, 65412, 69822, 10868, 4717, 2349, 5902, 66450, 
@@ -19539,26 +19557,26 @@
     4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 71335, 414, 65404, 0, 195027, 
     6456, 73820, 0, 6691, 42193, 92225, 128171, 0, 74495, 0, 0, 0, 118820, 
     9751, 65407, 128085, 11770, 3919, 0, 0, 65061, 0, 0, 0, 12235, 0, 0, 
-    127233, 64092, 983463, 64080, 0, 64090, 0, 69913, 10162, 10310, 0, 8454, 
+    127233, 64092, 983470, 64080, 0, 64090, 0, 69913, 10162, 10310, 0, 8454, 
     127888, 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, 6732, 
-    78116, 0, 983139, 0, 983074, 8896, 0, 375, 6976, 66582, 119005, 983865, 
-    0, 983427, 119202, 119203, 12526, 43120, 2315, 0, 1938, 119197, 0, 4529, 
-    119200, 119201, 119198, 119199, 69692, 983425, 69698, 13150, 64492, 0, 0, 
+    78116, 0, 983139, 0, 983074, 8896, 0, 375, 6976, 66582, 119005, 983874, 
+    0, 983434, 119202, 119203, 12526, 43120, 2315, 0, 1938, 119197, 0, 4529, 
+    119200, 119201, 119198, 119199, 69692, 983432, 69698, 13150, 64492, 0, 0, 
     2291, 12902, 0, 42891, 66327, 74298, 917857, 10799, 69690, 2587, 66372, 
     0, 4193, 92250, 4241, 983057, 7998, 0, 0, 0, 126640, 2316, 118821, 0, 0, 
-    0, 64297, 74799, 92442, 74140, 0, 5373, 0, 983877, 3762, 10015, 120672, 
+    0, 64297, 74799, 92442, 74140, 0, 5373, 0, 983886, 3762, 10015, 120672, 
     119232, 0, 41590, 0, 70098, 3780, 7485, 5779, 0, 42037, 0, 3906, 12349, 
     0, 8326, 0, 65498, 3763, 6983, 5618, 0, 3779, 0, 43613, 0, 0, 0, 0, 0, 0, 
     280, 74558, 127332, 68138, 13072, 1894, 0, 0, 65478, 43310, 7231, 0, 
-    11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 983743, 119237, 0, 128805, 
+    11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 983752, 119237, 0, 128805, 
     4470, 11826, 917557, 7780, 5369, 118958, 5249, 0, 5367, 8756, 127143, 0, 
-    5377, 120585, 68143, 1688, 78245, 983349, 69685, 983747, 0, 0, 44020, 
+    5377, 120585, 68143, 1688, 78245, 983356, 69685, 983756, 0, 0, 44020, 
     6808, 41319, 1300, 10650, 41692, 64505, 2290, 0, 119624, 1465, 10850, 
     3943, 0, 41205, 41315, 118961, 0, 0, 5352, 0, 0, 8839, 41314, 7384, 7785, 
     41204, 127322, 41209, 69637, 92241, 43607, 0, 0, 5420, 3897, 10134, 0, 
     74417, 4018, 7150, 68127, 0, 0, 0, 0, 127526, 2561, 68621, 3542, 7148, 
     12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, 78751, 7146, 0, 65150, 
-    41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 983428, 69641, 10753, 
+    41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 983435, 69641, 10753, 
     10830, 0, 615, 64490, 7574, 92617, 77922, 0, 12909, 43016, 64559, 127028, 
     0, 0, 67996, 2020, 0, 4022, 128783, 0, 77923, 126593, 41691, 0, 0, 74329, 
     0, 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, 7000, 3904, 
@@ -19573,7 +19591,7 @@
     68675, 128054, 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 0, 
     0, 65292, 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 78208, 118879, 
     55223, 0, 128071, 41826, 8865, 6402, 0, 13279, 7917, 74755, 0, 7733, 0, 
-    4998, 983887, 92332, 41950, 0, 4268, 0, 0, 70061, 4013, 0, 10881, 0, 0, 
+    4998, 983896, 92332, 41950, 0, 4268, 0, 0, 70061, 4013, 0, 10881, 0, 0, 
     0, 74788, 2014, 0, 0, 9765, 0, 0, 0, 195059, 78357, 65281, 127825, 10949, 
     0, 0, 0, 2015, 0, 0, 0, 66318, 43233, 0, 42517, 0, 0, 0, 12698, 8094, 
     10135, 65909, 6474, 794, 0, 12656, 128122, 119353, 128270, 1665, 0, 4833, 
@@ -19592,9 +19610,9 @@
     9425, 9426, 9427, 9428, 9429, 64758, 2362, 9655, 0, 2004, 9096, 9782, 
     128848, 9172, 128545, 19965, 0, 5955, 67666, 1108, 0, 74773, 0, 0, 64782, 
     3926, 92448, 65210, 8798, 0, 92165, 1392, 0, 0, 127364, 10606, 8065, 
-    118805, 10353, 10417, 0, 0, 64524, 92418, 4019, 0, 983281, 43280, 8219, 
-    68402, 1812, 119963, 983683, 0, 126488, 42410, 74448, 119132, 6054, 
-    10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 128139, 983254, 68678, 
+    118805, 10353, 10417, 0, 0, 64524, 92418, 4019, 0, 983288, 43280, 8219, 
+    68402, 1812, 119963, 983692, 0, 126488, 42410, 74448, 119132, 6054, 
+    10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 128139, 983261, 68678, 
     0, 0, 1049, 0, 65707, 2304, 41806, 92326, 42336, 3921, 0, 11775, 64760, 
     11766, 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0, 
     5153, 41805, 0, 73735, 763, 41808, 64910, 983130, 2009, 0, 0, 127142, 
@@ -19609,7 +19627,7 @@
     78002, 0, 7513, 1863, 4710, 0, 5956, 7621, 78006, 92624, 4705, 716, 
     78004, 0, 4704, 120040, 120270, 42241, 161, 43977, 74546, 66214, 4706, 0, 
     69914, 42672, 4709, 10680, 119065, 43293, 119944, 0, 119164, 120328, 
-    92467, 10187, 1700, 119223, 0, 0, 128119, 4004, 0, 10968, 43296, 983633, 
+    92467, 10187, 1700, 119223, 0, 0, 128119, 4004, 0, 10968, 43296, 983642, 
     8506, 0, 0, 126996, 1005, 937, 78216, 4734, 2870, 0, 78218, 983109, 7463, 
     4729, 0, 235, 1384, 4728, 0, 120420, 92490, 74449, 8109, 43105, 983174, 
     4730, 447, 13186, 1513, 4733, 120415, 0, 0, 42527, 12911, 43427, 1383, 
@@ -19620,7 +19638,7 @@
     12769, 65905, 41697, 1283, 120302, 4779, 0, 3719, 4006, 983569, 19957, 
     128773, 2021, 119332, 120699, 119150, 43028, 65493, 41838, 3875, 5962, 
     64341, 92616, 9814, 43457, 5827, 3314, 7787, 78234, 65494, 68153, 0, 0, 
-    120636, 64531, 120692, 194626, 0, 0, 66316, 65467, 5771, 41298, 983785, 
+    120636, 64531, 120692, 194626, 0, 0, 66316, 65467, 5771, 41298, 983794, 
     9742, 521, 0, 10800, 92222, 8404, 194625, 483, 7096, 7089, 66323, 928, 0, 
     0, 119018, 10599, 11586, 3989, 10971, 43748, 65782, 9841, 8843, 12145, 
     92470, 10074, 78548, 0, 3769, 0, 0, 0, 983107, 9573, 0, 65290, 8849, 0, 
@@ -19628,17 +19646,17 @@
     73838, 78553, 5825, 13007, 68165, 0, 120457, 12661, 7608, 10354, 10418, 
     42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, 1390, 0, 0, 421, 
     43536, 5846, 120120, 4130, 127775, 7595, 42588, 7600, 120121, 66035, 
-    983904, 0, 65851, 42607, 128190, 92403, 3168, 0, 42134, 11831, 2370, 
+    983913, 0, 65851, 42607, 128190, 92403, 3168, 0, 42134, 11831, 2370, 
     2846, 92605, 0, 0, 120132, 0, 1836, 0, 0, 92558, 3740, 69843, 6290, 
     65374, 120451, 2390, 3944, 66628, 120434, 0, 6135, 3118, 74265, 119093, 
-    120446, 0, 0, 8127, 8975, 64739, 7943, 983734, 0, 10618, 2584, 0, 0, 0, 
+    120446, 0, 0, 8127, 8975, 64739, 7943, 983743, 0, 10618, 2584, 0, 0, 0, 
     9998, 128564, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, 4975, 70075, 
     120130, 4267, 1631, 42206, 77983, 0, 195046, 65700, 66562, 0, 64645, 0, 
-    0, 126588, 12586, 0, 9242, 127922, 0, 4523, 5842, 10495, 3122, 983788, 
+    0, 126588, 12586, 0, 9242, 127922, 0, 4523, 5842, 10495, 3122, 983797, 
     7793, 78275, 9328, 119104, 78393, 12604, 0, 6615, 2285, 92344, 3986, 
-    44025, 0, 8912, 64555, 7409, 0, 983351, 9541, 78276, 0, 11275, 8540, 
-    11498, 0, 983350, 41040, 2459, 0, 13060, 41041, 74413, 983138, 0, 0, 
-    68427, 10450, 12551, 41043, 7020, 120353, 3765, 983343, 0, 1606, 120348, 
+    44025, 0, 8912, 64555, 7409, 0, 983358, 9541, 78276, 0, 11275, 8540, 
+    11498, 0, 983357, 41040, 2459, 0, 13060, 41041, 74413, 983138, 0, 0, 
+    68427, 10450, 12551, 41043, 7020, 120353, 3765, 983350, 0, 1606, 120348, 
     120351, 3093, 68436, 0, 983061, 119613, 0, 0, 4312, 74091, 120337, 
     120336, 11923, 4023, 120333, 5763, 94015, 4827, 10894, 12810, 64406, 
     118785, 4455, 74321, 433, 119620, 66660, 2499, 0, 0, 118837, 11973, 
@@ -19648,25 +19666,25 @@
     7004, 0, 65880, 127886, 119048, 2380, 11380, 0, 93996, 2376, 0, 119320, 
     0, 5197, 127046, 127047, 127048, 2366, 127050, 127051, 120554, 120045, 0, 
     0, 0, 983084, 0, 0, 0, 74188, 71342, 983086, 983573, 120047, 128575, 0, 
-    0, 120049, 0, 1847, 0, 10339, 983358, 42384, 0, 4227, 74158, 0, 92501, 
-    43032, 0, 42365, 0, 12671, 11384, 0, 983458, 0, 64797, 983338, 5820, 
-    983337, 120052, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664, 
+    0, 120049, 0, 1847, 0, 10339, 983365, 42384, 0, 4227, 74158, 0, 92501, 
+    43032, 0, 42365, 0, 12671, 11384, 0, 983465, 0, 64797, 983345, 5820, 
+    983344, 120052, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664, 
     120063, 0, 7377, 127867, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 
-    983333, 118938, 0, 10853, 926, 983362, 74184, 983361, 120055, 0, 43175, 
+    983340, 118938, 0, 10853, 926, 983369, 74184, 983368, 120055, 0, 43175, 
     0, 43037, 41798, 41035, 11583, 127769, 41801, 119088, 119605, 520, 4200, 
-    12699, 8331, 0, 3091, 41034, 127353, 983672, 8360, 0, 78044, 321, 4229, 
+    12699, 8331, 0, 3091, 41034, 127353, 983681, 8360, 0, 78044, 321, 4229, 
     64543, 917946, 65563, 0, 917974, 2861, 43793, 10095, 0, 9195, 92386, 
     1861, 0, 73733, 0, 0, 43041, 0, 43794, 128530, 3859, 12181, 41660, 8209, 
     0, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, 0, 743, 4414, 
     120766, 0, 42632, 917973, 65161, 73896, 128589, 0, 1405, 119063, 43220, 
     43341, 0, 19919, 0, 64532, 65367, 43710, 0, 0, 3513, 0, 118883, 43342, 
     119064, 65529, 65364, 128197, 0, 6485, 1397, 0, 41986, 92678, 0, 0, 
-    74097, 0, 7471, 12079, 67997, 12682, 43287, 92317, 0, 983143, 983698, 0, 
+    74097, 0, 7471, 12079, 67997, 12682, 43287, 92317, 0, 983143, 983707, 0, 
     0, 1099, 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 65283, 67663, 
     78222, 1346, 0, 917631, 64573, 64897, 423, 1818, 65144, 0, 8272, 127812, 
-    19911, 4218, 3087, 64960, 127234, 43564, 0, 0, 9584, 10465, 983893, 
+    19911, 4218, 3087, 64960, 127234, 43564, 0, 0, 9584, 10465, 983902, 
     74359, 12626, 9106, 0, 42642, 120230, 64750, 9390, 0, 41797, 0, 0, 265, 
-    41795, 64666, 126508, 43530, 2752, 0, 0, 983486, 59, 0, 983593, 0, 92371, 
+    41795, 64666, 126508, 43530, 2752, 0, 0, 983493, 59, 0, 983593, 0, 92371, 
     77873, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, 42252, 42213, 8009, 
     3305, 43033, 511, 92700, 66255, 13127, 120067, 0, 74397, 120235, 917977, 
     65915, 1400, 41812, 10685, 194870, 2103, 10387, 4453, 43276, 917783, 
@@ -19677,17 +19695,17 @@
     0, 41841, 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 120109, 
     2851, 43017, 983589, 0, 4373, 78058, 0, 9587, 1789, 6671, 128840, 3100, 
     0, 65360, 0, 92365, 917789, 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 
-    74374, 2368, 0, 4419, 983838, 119125, 3439, 1825, 1192, 120106, 8891, 
+    74374, 2368, 0, 4419, 983847, 119125, 3439, 1825, 1192, 120106, 8891, 
     3080, 120228, 2347, 5430, 0, 8990, 2848, 0, 128223, 92528, 249, 0, 0, 0, 
     120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0, 64826, 0, 917798, 
-    128348, 0, 19945, 8091, 558, 0, 12273, 194814, 983841, 12112, 69912, 0, 
+    128348, 0, 19945, 8091, 558, 0, 12273, 194814, 983850, 12112, 69912, 0, 
     0, 74419, 12335, 120104, 917795, 3443, 3129, 0, 2102, 65445, 78258, 
     64891, 0, 7725, 65108, 78255, 0, 8624, 69246, 12446, 43295, 0, 41894, 0, 
     6277, 41672, 41893, 10010, 128678, 3540, 128649, 835, 71340, 69816, 
     119868, 74408, 0, 73959, 5426, 4258, 0, 0, 5424, 128127, 8283, 0, 5434, 
     983590, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, 11432, 128307, 3464, 
     6486, 4819, 128233, 0, 570, 8095, 3672, 119864, 1498, 67866, 0, 128539, 
-    431, 0, 0, 128182, 128096, 68167, 983654, 13096, 128643, 0, 43408, 9516, 
+    431, 0, 0, 128182, 128096, 68167, 983663, 13096, 128643, 0, 43408, 9516, 
     128538, 5268, 42230, 42220, 0, 4450, 120511, 11547, 43417, 128542, 356, 
     3477, 227, 10488, 68203, 382, 11418, 0, 195066, 0, 0, 0, 0, 6484, 2541, 
     66039, 0, 78718, 92723, 3549, 0, 9110, 119665, 2743, 0, 43290, 194812, 
@@ -19696,7 +19714,7 @@
     12849, 3953, 1897, 0, 65094, 11994, 4339, 74556, 92654, 67843, 0, 0, 0, 
     68473, 74104, 5228, 128804, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, 0, 
     1162, 917847, 2671, 0, 0, 92632, 92631, 118865, 4553, 73811, 0, 195005, 
-    0, 0, 19921, 74331, 11424, 195006, 4567, 41891, 0, 983779, 55249, 4820, 
+    0, 0, 19921, 74331, 11424, 195006, 4567, 41891, 0, 983788, 55249, 4820, 
     65239, 194662, 0, 194665, 43042, 119212, 1377, 12869, 4897, 42821, 9250, 
     0, 4438, 64385, 0, 1753, 11331, 6147, 194941, 43282, 8833, 0, 0, 6504, 
     78408, 126979, 10719, 0, 1898, 1413, 42443, 0, 802, 12141, 0, 194671, 
@@ -19705,7 +19723,7 @@
     78719, 66573, 0, 78724, 78712, 11761, 194655, 0, 41094, 0, 0, 194893, 0, 
     92689, 6196, 6945, 93969, 194890, 128184, 120491, 11816, 194943, 5733, 
     2930, 0, 0, 41098, 0, 41093, 0, 66626, 588, 9760, 0, 194717, 1238, 200, 
-    983206, 1660, 73916, 0, 118905, 74362, 0, 92485, 194651, 0, 983697, 3394, 
+    983207, 1660, 73916, 0, 118905, 74362, 0, 92485, 194651, 0, 983706, 3394, 
     194894, 120668, 0, 0, 127358, 66219, 127183, 43284, 194656, 7817, 1841, 
     11055, 120533, 194979, 194982, 1669, 10776, 194981, 7701, 194980, 0, 
     194995, 1732, 4030, 0, 3963, 66611, 127530, 41768, 6491, 0, 65324, 914, 
@@ -19713,30 +19731,30 @@
     12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 92618, 5734, 
     8960, 0, 92527, 65317, 77880, 0, 0, 0, 12304, 0, 0, 65315, 92670, 128511, 
     0, 0, 0, 119621, 92529, 74536, 12447, 64486, 127374, 126562, 983129, 0, 
-    0, 983793, 42767, 10915, 0, 12007, 43695, 120520, 11975, 194878, 0, 
+    0, 983802, 42767, 10915, 0, 12007, 43695, 120520, 11975, 194878, 0, 
     92604, 2555, 8629, 128640, 43168, 41872, 43706, 4496, 194879, 128148, 
     120241, 0, 0, 0, 0, 64730, 70041, 66714, 68222, 0, 70076, 65596, 92306, 
     11416, 4280, 67655, 8765, 12784, 7792, 1393, 126473, 67871, 74386, 0, 
     8233, 12820, 0, 6683, 194876, 3442, 12144, 2841, 12543, 0, 1473, 42820, 
     64329, 127832, 0, 68642, 6488, 357, 1048, 41100, 0, 41104, 94003, 3406, 
     1054, 71320, 1040, 65450, 0, 4434, 1069, 0, 118862, 65737, 917765, 
-    128705, 0, 983684, 9693, 41943, 126564, 41931, 41759, 12757, 4353, 0, 
-    1059, 9790, 8995, 119974, 983687, 65937, 0, 41764, 10646, 0, 118833, 
-    92372, 0, 74830, 78569, 12743, 983680, 6480, 917761, 41779, 42580, 66601, 
-    12207, 119619, 6335, 66602, 11312, 64807, 0, 0, 41767, 119629, 983755, 
-    43020, 128271, 3955, 74254, 0, 983745, 917861, 0, 77926, 9770, 9246, 
+    128705, 0, 983693, 9693, 41943, 126564, 41931, 41759, 12757, 4353, 0, 
+    1059, 9790, 8995, 119974, 983696, 65937, 0, 41764, 10646, 0, 118833, 
+    92372, 0, 74830, 78569, 12743, 983689, 6480, 917761, 41779, 42580, 66601, 
+    12207, 119619, 6335, 66602, 11312, 64807, 0, 0, 41767, 119629, 983764, 
+    43020, 128271, 3955, 74254, 0, 983754, 917861, 0, 77926, 9770, 9246, 
     12230, 0, 0, 0, 10448, 41783, 41786, 127093, 12797, 2755, 64571, 78578, 
     194927, 4857, 0, 4428, 12794, 73755, 128061, 78574, 0, 74284, 0, 5747, 
     78825, 0, 7978, 41092, 74571, 0, 11924, 43812, 42144, 65015, 0, 563, 0, 
-    983682, 12798, 11271, 57, 0, 0, 917860, 119043, 0, 94051, 43137, 694, 0, 
+    983691, 12798, 11271, 57, 0, 0, 917860, 119043, 0, 94051, 43137, 694, 0, 
     9876, 0, 119168, 0, 78822, 64537, 0, 277, 74385, 7229, 12761, 0, 0, 
     13025, 64811, 8757, 78824, 126478, 1574, 7381, 0, 2525, 4852, 5749, 
     68465, 13027, 42824, 120574, 1039, 7151, 10155, 5745, 188, 41858, 11592, 
     0, 74015, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, 2786, 0, 4856, 
     8051, 0, 119609, 71327, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 
-    983352, 73906, 128680, 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 
+    983359, 73906, 128680, 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 
     194918, 68393, 0, 3504, 119178, 0, 10822, 5149, 66029, 10226, 65142, 
-    128025, 3594, 42424, 194959, 40, 12657, 983656, 0, 386, 0, 8834, 0, 
+    128025, 3594, 42424, 194959, 40, 12657, 983665, 0, 386, 0, 8834, 0, 
     12815, 43574, 0, 73907, 0, 74196, 7220, 74504, 0, 74316, 0, 65322, 4304, 
     74503, 8160, 78707, 194753, 0, 0, 128526, 1348, 92349, 78597, 126539, 
     13303, 0, 92392, 194755, 7599, 1278, 43616, 13269, 0, 0, 74387, 78179, 
@@ -19748,25 +19766,25 @@
     42507, 1962, 43305, 78476, 42505, 11660, 0, 2072, 92312, 6995, 74173, 
     5437, 74174, 10669, 8702, 7964, 92352, 0, 199, 194843, 4105, 194845, 
     194699, 194847, 194710, 119875, 13148, 7560, 78479, 9226, 78480, 195070, 
-    6472, 65814, 73954, 0, 4724, 0, 0, 9191, 0, 64432, 983808, 983242, 
+    6472, 65814, 73954, 0, 4724, 0, 0, 9191, 0, 64432, 983817, 983247, 
     195024, 10196, 7886, 0, 6585, 0, 6680, 195042, 0, 195051, 6679, 74412, 
-    92251, 194866, 74421, 11382, 983622, 983628, 127891, 127484, 194833, 
+    92251, 194866, 74421, 11382, 983631, 983637, 127891, 127484, 194833, 
     194832, 6681, 127482, 12693, 194836, 42727, 78196, 128252, 78195, 65442, 
-    119610, 69733, 9989, 43248, 66248, 194816, 0, 194818, 128845, 194820, 
+    119610, 69733, 9989, 43248, 66248, 194816, 0, 11321, 128845, 194820, 
     194819, 5297, 7042, 13284, 6112, 7968, 194825, 73927, 92444, 194736, 
     65746, 127476, 69889, 74389, 128696, 4342, 42839, 194831, 1677, 0, 0, 
     126590, 917855, 11091, 11011, 2719, 0, 0, 119595, 10160, 0, 0, 7585, 
     65169, 2052, 4308, 92174, 43000, 7505, 543, 64916, 64736, 0, 0, 64655, 0, 
-    118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 127170, 0, 0, 0, 0, 
-    12994, 92728, 10828, 983934, 6228, 4307, 3482, 128527, 0, 0, 0, 506, 
-    74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, 983671, 8841, 0, 516, 
+    118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 127170, 0, 983625, 0, 
+    0, 12994, 92728, 10828, 983943, 6228, 4307, 3482, 128527, 0, 0, 0, 506, 
+    74573, 41194, 65735, 2055, 43255, 41195, 0, 8169, 983680, 8841, 0, 516, 
     93974, 2063, 119051, 34, 128850, 120186, 11504, 1612, 74333, 120182, 
     11827, 74308, 12001, 120178, 10242, 64564, 120179, 67986, 6584, 7749, 
     11037, 0, 1758, 127092, 10667, 10560, 120197, 92593, 1935, 11517, 120193, 
     120196, 120195, 1931, 120189, 74839, 120191, 1217, 64702, 12643, 825, 
     127838, 194905, 12294, 92428, 78834, 9138, 78831, 78833, 12631, 78829, 
     11080, 74554, 64000, 5591, 1239, 0, 11313, 0, 3403, 0, 0, 64364, 92269, 
-    0, 74582, 8998, 12988, 0, 9152, 983840, 0, 126484, 67589, 41850, 64290, 
+    0, 74582, 8998, 12988, 0, 9152, 983849, 0, 126484, 67589, 41850, 64290, 
     3433, 92393, 12615, 1594, 42192, 6914, 67603, 0, 119569, 74565, 41353, 
     67602, 67611, 4337, 0, 127296, 918, 65035, 41351, 7681, 194900, 42577, 
     41393, 12668, 194904, 2477, 127285, 0, 127301, 0, 67604, 194880, 127235, 
@@ -19778,14 +19796,14 @@
     73796, 0, 119228, 12035, 0, 2818, 0, 74411, 73793, 0, 4172, 0, 0, 8373, 
     10873, 12197, 0, 0, 92265, 69706, 0, 78210, 0, 128110, 194865, 126982, 
     74563, 64828, 11419, 194868, 766, 1257, 0, 118845, 11381, 3265, 66617, 
-    3274, 127365, 126523, 94042, 983941, 74522, 41989, 0, 0, 128798, 3263, 0, 
+    3274, 127365, 126523, 94042, 983950, 74522, 41989, 0, 0, 128798, 3263, 0, 
     65672, 0, 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 194776, 756, 
     194605, 0, 0, 0, 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612, 
-    12949, 64856, 12800, 983892, 74203, 64718, 11507, 0, 92434, 118929, 0, 
+    12949, 64856, 12800, 983901, 74203, 64718, 11507, 0, 92434, 118929, 0, 
     11578, 0, 119296, 0, 0, 0, 0, 74568, 9254, 0, 1794, 120217, 64521, 5624, 
     120220, 120221, 119958, 120223, 3617, 66636, 64886, 94061, 120212, 
     120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, 119330, 4452, 0, 
-    983762, 92526, 4511, 0, 983868, 64678, 11425, 0, 43245, 1231, 194783, 
+    983771, 92526, 4511, 0, 983877, 64678, 11425, 0, 43245, 1231, 194783, 
     69903, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 0, 0, 120478, 
     120200, 65205, 120202, 64063, 9878, 74780, 119626, 78202, 64058, 8799, 
     42131, 0, 64062, 1028, 64060, 64059, 837, 10567, 0, 43103, 0, 120754, 
@@ -19794,26 +19812,26 @@
     64032, 42735, 64038, 64037, 64036, 64035, 4291, 194928, 64015, 64014, 
     64681, 194930, 0, 78145, 0, 43090, 0, 3476, 8973, 64012, 42473, 64010, 
     64008, 64007, 2003, 7706, 64517, 78153, 2538, 64009, 204, 0, 4802, 4111, 
-    8239, 9098, 4805, 64001, 64057, 7885, 7247, 64054, 983259, 0, 4767, 9343, 
+    8239, 9098, 4805, 64001, 64057, 7885, 7247, 64054, 983266, 0, 4767, 9343, 
     64049, 64048, 120034, 1133, 64053, 64052, 43453, 64050, 41340, 118975, 
     194835, 10005, 12329, 41333, 0, 8489, 1942, 0, 194834, 42520, 128249, 0, 
     0, 10760, 64023, 64022, 64021, 6582, 43670, 0, 64025, 9167, 42151, 78244, 
-    983227, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 78252, 78248, 
+    983232, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 78252, 78248, 
     77914, 78246, 78247, 0, 77915, 78766, 6788, 13094, 77920, 7532, 41414, 
     78520, 3179, 78518, 64769, 78514, 78517, 11461, 74454, 10751, 9051, 
-    120720, 6708, 10535, 0, 68218, 55274, 2008, 64031, 64030, 294, 41874, 0, 
-    126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788, 194844, 0, 4351, 
-    6343, 43247, 119888, 0, 119886, 119891, 119892, 119889, 11433, 119895, 
-    119896, 0, 7801, 65578, 194839, 12915, 43968, 3297, 9699, 194955, 1135, 
-    0, 0, 128525, 1995, 6722, 983916, 0, 2552, 41546, 60, 68394, 8649, 41549, 
-    78496, 983320, 0, 6682, 0, 78679, 64710, 41547, 983621, 2013, 128291, 
-    78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137, 
-    7155, 8999, 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 
-    120175, 537, 0, 4179, 65119, 1998, 0, 1842, 0, 92674, 9628, 68446, 12081, 
-    9826, 64502, 1767, 0, 0, 0, 120201, 983637, 0, 0, 3059, 44024, 120204, 
-    119953, 92693, 0, 0, 92452, 4100, 920, 1811, 1355, 0, 0, 3592, 10078, 0, 
-    0, 0, 8592, 65870, 68164, 128792, 10742, 0, 42918, 1994, 9281, 3296, 
-    12865, 1997, 1895, 
+    120720, 6708, 10535, 983627, 68218, 55274, 2008, 64031, 64030, 294, 
+    41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788, 194844, 
+    0, 4351, 6343, 43247, 119888, 0, 119886, 119891, 119892, 119889, 11433, 
+    119895, 119896, 0, 7801, 65578, 194839, 12915, 43968, 3297, 9699, 194955, 
+    1135, 0, 0, 128525, 1995, 6722, 983925, 0, 2552, 41546, 60, 68394, 8649, 
+    41549, 78496, 983327, 0, 6682, 0, 78679, 64710, 41547, 983630, 2013, 
+    128291, 78530, 78532, 78528, 78529, 12832, 78493, 8081, 8362, 3537, 
+    119908, 9137, 7155, 8999, 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 
+    2002, 2000, 120175, 537, 0, 4179, 65119, 1998, 0, 1842, 0, 92674, 9628, 
+    68446, 12081, 9826, 64502, 1767, 0, 0, 0, 120201, 983646, 0, 0, 3059, 
+    44024, 120204, 119953, 92693, 0, 0, 92452, 4100, 920, 1811, 1355, 0, 0, 
+    3592, 10078, 0, 0, 0, 8592, 65870, 68164, 128792, 10742, 0, 42918, 1994, 
+    9281, 3296, 12865, 1997, 1895, 
 };
 
 #define code_magic 47
@@ -19821,7 +19839,7 @@
 #define code_poly 32771
 
 static const unsigned int aliases_start = 0xf0000;
-static const unsigned int aliases_end = 0xf01c2;
+static const unsigned int aliases_end = 0xf01c9;
 static const unsigned int name_aliases[] = {
     0x0000,
     0x0000,
@@ -19984,6 +20002,7 @@
     0x01A2,
     0x01A3,
     0x034F,
+    0x061C,
     0x0709,
     0x0CDE,
     0x0E9D,
@@ -20008,6 +20027,10 @@
     0x202F,
     0x205F,
     0x2060,
+    0x2066,
+    0x2067,
+    0x2068,
+    0x2069,
     0x2118,
     0x2448,
     0x2449,
@@ -20032,6 +20055,8 @@
     0xFEFF,
     0xFEFF,
     0xFEFF,
+    0x122D4,
+    0x122D5,
     0x1D0C5,
     0xE0100,
     0xE0101,
@@ -20281,7 +20306,7 @@
 } named_sequence;
 
 static const unsigned int named_sequences_start = 0xf0200;
-static const unsigned int named_sequences_end = 0xf03a5;
+static const unsigned int named_sequences_end = 0xf03ae;
 static const named_sequence named_sequences[] = {
     {2, {0x0100, 0x0300}},
     {2, {0x0101, 0x0300}},
@@ -20352,6 +20377,15 @@
     {2, {0x0259, 0x0301}},
     {2, {0x025A, 0x0300}},
     {2, {0x025A, 0x0301}},
+    {2, {0x0626, 0x0627}},
+    {2, {0x0626, 0x0648}},
+    {2, {0x0626, 0x0649}},
+    {2, {0x0626, 0x06C6}},
+    {2, {0x0626, 0x06C7}},
+    {2, {0x0626, 0x06C8}},
+    {2, {0x0626, 0x06D0}},
+    {2, {0x0626, 0x06D5}},
+    {2, {0x0646, 0x06A9}},
     {3, {0x0995, 0x09CD, 0x09B7}},
     {2, {0x0B95, 0x0BCD}},
     {2, {0x0B99, 0x0BCD}},
diff --git a/Modules/zipimport.c b/Modules/zipimport.c
index 633732f..8fe9195 100644
--- a/Modules/zipimport.c
+++ b/Modules/zipimport.c
@@ -14,6 +14,10 @@
     int type;
 };
 
+#ifdef ALTSEP
+_Py_IDENTIFIER(replace);
+#endif
+
 /* zip_searchorder defines how we search for a module in the Zip
    archive: we first search for a package __init__, then for
    non-package .pyc, .pyo and .py entries. The .pyc and .pyo entries
@@ -66,9 +70,6 @@
     PyObject *path, *files, *tmp;
     PyObject *filename = NULL;
     Py_ssize_t len, flen;
-#ifdef ALTSEP
-    _Py_IDENTIFIER(replace);
-#endif
 
     if (!_PyArg_NoKeywords("zipimporter()", kwds))
         return -1;
@@ -117,6 +118,8 @@
         if (flen == -1)
             break;
         filename = PyUnicode_Substring(path, 0, flen);
+        if (filename == NULL)
+            goto error;
     }
     if (filename == NULL) {
         PyErr_SetString(ZipImportError, "not a Zip file");
@@ -469,10 +472,13 @@
     if (ispackage) {
         /* add __path__ to the module *before* the code gets
            executed */
-        PyObject *pkgpath, *fullpath;
-        PyObject *subname = get_subname(fullname);
+        PyObject *pkgpath, *fullpath, *subname;
         int err;
 
+        subname = get_subname(fullname);
+        if (subname == NULL)
+            goto error;
+
         fullpath = PyUnicode_FromFormat("%U%c%U%U",
                                 self->archive, SEP,
                                 self->prefix, subname);
@@ -554,9 +560,6 @@
 {
     ZipImporter *self = (ZipImporter *)obj;
     PyObject *path, *key;
-#ifdef ALTSEP
-    _Py_IDENTIFIER(replace);
-#endif
     PyObject *toc_entry;
     Py_ssize_t path_start, path_len, len;
 
@@ -914,6 +917,8 @@
 
         /* Start of file header */
         l = PyMarshal_ReadLongFromFile(fp);
+        if (l == -1 && PyErr_Occurred())
+            goto error;
         if (l != 0x02014B50)
             break;              /* Bad: Central Dir File Header */
 
@@ -937,6 +942,9 @@
         if (fread(dummy, 1, 8, fp) != 8) /* Skip unused fields, avoid fseek */
             goto file_error;
         file_offset = PyMarshal_ReadLongFromFile(fp) + arc_offset;
+        if (PyErr_Occurred())
+            goto error;
+
         if (name_size > MAXPATHLEN)
             name_size = MAXPATHLEN;
 
@@ -1082,9 +1090,10 @@
     l = PyMarshal_ReadLongFromFile(fp);
     if (l != 0x04034B50) {
         /* Bad: Local File Header */
-        PyErr_Format(ZipImportError,
-                     "bad local file header in %U",
-                     archive);
+        if (!PyErr_Occurred())
+            PyErr_Format(ZipImportError,
+                         "bad local file header in %U",
+                         archive);
         fclose(fp);
         return NULL;
     }
@@ -1096,6 +1105,10 @@
 
     l = 30 + PyMarshal_ReadShortFromFile(fp) +
         PyMarshal_ReadShortFromFile(fp);        /* local header size */
+    if (PyErr_Occurred()) {
+        fclose(fp);
+        return NULL;
+    }
     file_offset += l;           /* Start of file data */
 
     bytes_size = compress == 0 ? data_size : data_size + 1;
diff --git a/Modules/zlib/ChangeLog b/Modules/zlib/ChangeLog
index f310bb0..f22aaba 100644
--- a/Modules/zlib/ChangeLog
+++ b/Modules/zlib/ChangeLog
@@ -1,12 +1,276 @@
 
                 ChangeLog file for zlib
 
+Changes in 1.2.8 (28 Apr 2013)
+- Update contrib/minizip/iowin32.c for Windows RT [Vollant]
+- Do not force Z_CONST for C++
+- Clean up contrib/vstudio [Ro§]
+- Correct spelling error in zlib.h
+- Fix mixed line endings in contrib/vstudio
+
+Changes in 1.2.7.3 (13 Apr 2013)
+- Fix version numbers and DLL names in contrib/vstudio/*/zlib.rc
+
+Changes in 1.2.7.2 (13 Apr 2013)
+- Change check for a four-byte type back to hexadecimal
+- Fix typo in win32/Makefile.msc
+- Add casts in gzwrite.c for pointer differences
+
+Changes in 1.2.7.1 (24 Mar 2013)
+- Replace use of unsafe string functions with snprintf if available
+- Avoid including stddef.h on Windows for Z_SOLO compile [Niessink]
+- Fix gzgetc undefine when Z_PREFIX set [Turk]
+- Eliminate use of mktemp in Makefile (not always available)
+- Fix bug in 'F' mode for gzopen()
+- Add inflateGetDictionary() function
+- Correct comment in deflate.h
+- Use _snprintf for snprintf in Microsoft C
+- On Darwin, only use /usr/bin/libtool if libtool is not Apple
+- Delete "--version" file if created by "ar --version" [Richard G.]
+- Fix configure check for veracity of compiler error return codes
+- Fix CMake compilation of static lib for MSVC2010 x64
+- Remove unused variable in infback9.c
+- Fix argument checks in gzlog_compress() and gzlog_write()
+- Clean up the usage of z_const and respect const usage within zlib
+- Clean up examples/gzlog.[ch] comparisons of different types
+- Avoid shift equal to bits in type (caused endless loop)
+- Fix unintialized value bug in gzputc() introduced by const patches
+- Fix memory allocation error in examples/zran.c [Nor]
+- Fix bug where gzopen(), gzclose() would write an empty file
+- Fix bug in gzclose() when gzwrite() runs out of memory
+- Check for input buffer malloc failure in examples/gzappend.c
+- Add note to contrib/blast to use binary mode in stdio
+- Fix comparisons of differently signed integers in contrib/blast
+- Check for invalid code length codes in contrib/puff
+- Fix serious but very rare decompression bug in inftrees.c
+- Update inflateBack() comments, since inflate() can be faster
+- Use underscored I/O function names for WINAPI_FAMILY
+- Add _tr_flush_bits to the external symbols prefixed by --zprefix
+- Add contrib/vstudio/vc10 pre-build step for static only
+- Quote --version-script argument in CMakeLists.txt
+- Don't specify --version-script on Apple platforms in CMakeLists.txt
+- Fix casting error in contrib/testzlib/testzlib.c
+- Fix types in contrib/minizip to match result of get_crc_table()
+- Simplify contrib/vstudio/vc10 with 'd' suffix
+- Add TOP support to win32/Makefile.msc
+- Suport i686 and amd64 assembler builds in CMakeLists.txt
+- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h
+- Add vc11 and vc12 build files to contrib/vstudio
+- Add gzvprintf() as an undocumented function in zlib
+- Fix configure for Sun shell
+- Remove runtime check in configure for four-byte integer type
+- Add casts and consts to ease user conversion to C++
+- Add man pages for minizip and miniunzip
+- In Makefile uninstall, don't rm if preceding cd fails
+- Do not return Z_BUF_ERROR if deflateParam() has nothing to write
+
+Changes in 1.2.7 (2 May 2012)
+- Replace use of memmove() with a simple copy for portability
+- Test for existence of strerror
+- Restore gzgetc_ for backward compatibility with 1.2.6
+- Fix build with non-GNU make on Solaris
+- Require gcc 4.0 or later on Mac OS X to use the hidden attribute
+- Include unistd.h for Watcom C
+- Use __WATCOMC__ instead of __WATCOM__
+- Do not use the visibility attribute if NO_VIZ defined
+- Improve the detection of no hidden visibility attribute
+- Avoid using __int64 for gcc or solo compilation
+- Cast to char * in gzprintf to avoid warnings [Zinser]
+- Fix make_vms.com for VAX [Zinser]
+- Don't use library or built-in byte swaps
+- Simplify test and use of gcc hidden attribute
+- Fix bug in gzclose_w() when gzwrite() fails to allocate memory
+- Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen()
+- Fix bug in test/minigzip.c for configure --solo
+- Fix contrib/vstudio project link errors [Mohanathas]
+- Add ability to choose the builder in make_vms.com [Schweda]
+- Add DESTDIR support to mingw32 win32/Makefile.gcc
+- Fix comments in win32/Makefile.gcc for proper usage
+- Allow overriding the default install locations for cmake
+- Generate and install the pkg-config file with cmake
+- Build both a static and a shared version of zlib with cmake
+- Include version symbols for cmake builds
+- If using cmake with MSVC, add the source directory to the includes
+- Remove unneeded EXTRA_CFLAGS from win32/Makefile.gcc [Truta]
+- Move obsolete emx makefile to old [Truta]
+- Allow the use of -Wundef when compiling or using zlib
+- Avoid the use of the -u option with mktemp
+- Improve inflate() documentation on the use of Z_FINISH
+- Recognize clang as gcc
+- Add gzopen_w() in Windows for wide character path names
+- Rename zconf.h in CMakeLists.txt to move it out of the way
+- Add source directory in CMakeLists.txt for building examples
+- Look in build directory for zlib.pc in CMakeLists.txt
+- Remove gzflags from zlibvc.def in vc9 and vc10
+- Fix contrib/minizip compilation in the MinGW environment
+- Update ./configure for Solaris, support --64 [Mooney]
+- Remove -R. from Solaris shared build (possible security issue)
+- Avoid race condition for parallel make (-j) running example
+- Fix type mismatch between get_crc_table() and crc_table
+- Fix parsing of version with "-" in CMakeLists.txt [Snider, Ziegler]
+- Fix the path to zlib.map in CMakeLists.txt
+- Force the native libtool in Mac OS X to avoid GNU libtool [Beebe]
+- Add instructions to win32/Makefile.gcc for shared install [Torri]
+
+Changes in 1.2.6.1 (12 Feb 2012)
+- Avoid the use of the Objective-C reserved name "id"
+- Include io.h in gzguts.h for Microsoft compilers
+- Fix problem with ./configure --prefix and gzgetc macro
+- Include gz_header definition when compiling zlib solo
+- Put gzflags() functionality back in zutil.c
+- Avoid library header include in crc32.c for Z_SOLO
+- Use name in GCC_CLASSIC as C compiler for coverage testing, if set
+- Minor cleanup in contrib/minizip/zip.c [Vollant]
+- Update make_vms.com [Zinser]
+- Remove unnecessary gzgetc_ function
+- Use optimized byte swap operations for Microsoft and GNU [Snyder]
+- Fix minor typo in zlib.h comments [Rzesniowiecki]
+
+Changes in 1.2.6 (29 Jan 2012)
+- Update the Pascal interface in contrib/pascal
+- Fix function numbers for gzgetc_ in zlibvc.def files
+- Fix configure.ac for contrib/minizip [Schiffer]
+- Fix large-entry detection in minizip on 64-bit systems [Schiffer]
+- Have ./configure use the compiler return code for error indication
+- Fix CMakeLists.txt for cross compilation [McClure]
+- Fix contrib/minizip/zip.c for 64-bit architectures [Dalsnes]
+- Fix compilation of contrib/minizip on FreeBSD [Marquez]
+- Correct suggested usages in win32/Makefile.msc [Shachar, Horvath]
+- Include io.h for Turbo C / Borland C on all platforms [Truta]
+- Make version explicit in contrib/minizip/configure.ac [Bosmans]
+- Avoid warning for no encryption in contrib/minizip/zip.c [Vollant]
+- Minor cleanup up contrib/minizip/unzip.c [Vollant]
+- Fix bug when compiling minizip with C++ [Vollant]
+- Protect for long name and extra fields in contrib/minizip [Vollant]
+- Avoid some warnings in contrib/minizip [Vollant]
+- Add -I../.. -L../.. to CFLAGS for minizip and miniunzip
+- Add missing libs to minizip linker command
+- Add support for VPATH builds in contrib/minizip
+- Add an --enable-demos option to contrib/minizip/configure
+- Add the generation of configure.log by ./configure
+- Exit when required parameters not provided to win32/Makefile.gcc
+- Have gzputc return the character written instead of the argument
+- Use the -m option on ldconfig for BSD systems [Tobias]
+- Correct in zlib.map when deflateResetKeep was added
+
+Changes in 1.2.5.3 (15 Jan 2012)
+- Restore gzgetc function for binary compatibility
+- Do not use _lseeki64 under Borland C++ [Truta]
+- Update win32/Makefile.msc to build test/*.c [Truta]
+- Remove old/visualc6 given CMakefile and other alternatives
+- Update AS400 build files and documentation [Monnerat]
+- Update win32/Makefile.gcc to build test/*.c [Truta]
+- Permit stronger flushes after Z_BLOCK flushes
+- Avoid extraneous empty blocks when doing empty flushes
+- Permit Z_NULL arguments to deflatePending
+- Allow deflatePrime() to insert bits in the middle of a stream
+- Remove second empty static block for Z_PARTIAL_FLUSH
+- Write out all of the available bits when using Z_BLOCK
+- Insert the first two strings in the hash table after a flush
+
+Changes in 1.2.5.2 (17 Dec 2011)
+- fix ld error: unable to find version dependency 'ZLIB_1.2.5'
+- use relative symlinks for shared libs
+- Avoid searching past window for Z_RLE strategy
+- Assure that high-water mark initialization is always applied in deflate
+- Add assertions to fill_window() in deflate.c to match comments
+- Update python link in README
+- Correct spelling error in gzread.c
+- Fix bug in gzgets() for a concatenated empty gzip stream
+- Correct error in comment for gz_make()
+- Change gzread() and related to ignore junk after gzip streams
+- Allow gzread() and related to continue after gzclearerr()
+- Allow gzrewind() and gzseek() after a premature end-of-file
+- Simplify gzseek() now that raw after gzip is ignored
+- Change gzgetc() to a macro for speed (~40% speedup in testing)
+- Fix gzclose() to return the actual error last encountered
+- Always add large file support for windows
+- Include zconf.h for windows large file support
+- Include zconf.h.cmakein for windows large file support
+- Update zconf.h.cmakein on make distclean
+- Merge vestigial vsnprintf determination from zutil.h to gzguts.h
+- Clarify how gzopen() appends in zlib.h comments
+- Correct documentation of gzdirect() since junk at end now ignored
+- Add a transparent write mode to gzopen() when 'T' is in the mode
+- Update python link in zlib man page
+- Get inffixed.h and MAKEFIXED result to match
+- Add a ./config --solo option to make zlib subset with no libary use
+- Add undocumented inflateResetKeep() function for CAB file decoding
+- Add --cover option to ./configure for gcc coverage testing
+- Add #define ZLIB_CONST option to use const in the z_stream interface
+- Add comment to gzdopen() in zlib.h to use dup() when using fileno()
+- Note behavior of uncompress() to provide as much data as it can
+- Add files in contrib/minizip to aid in building libminizip
+- Split off AR options in Makefile.in and configure
+- Change ON macro to Z_ARG to avoid application conflicts
+- Facilitate compilation with Borland C++ for pragmas and vsnprintf
+- Include io.h for Turbo C / Borland C++
+- Move example.c and minigzip.c to test/
+- Simplify incomplete code table filling in inflate_table()
+- Remove code from inflate.c and infback.c that is impossible to execute
+- Test the inflate code with full coverage
+- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw)
+- Add deflateResetKeep and fix inflateResetKeep to retain dictionary
+- Fix gzwrite.c to accommodate reduced memory zlib compilation
+- Have inflate() with Z_FINISH avoid the allocation of a window
+- Do not set strm->adler when doing raw inflate
+- Fix gzeof() to behave just like feof() when read is not past end of file
+- Fix bug in gzread.c when end-of-file is reached
+- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF
+- Document gzread() capability to read concurrently written files
+- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo]
+
+Changes in 1.2.5.1 (10 Sep 2011)
+- Update FAQ entry on shared builds (#13)
+- Avoid symbolic argument to chmod in Makefile.in
+- Fix bug and add consts in contrib/puff [Oberhumer]
+- Update contrib/puff/zeros.raw test file to have all block types
+- Add full coverage test for puff in contrib/puff/Makefile
+- Fix static-only-build install in Makefile.in
+- Fix bug in unzGetCurrentFileInfo() in contrib/minizip [Kuno]
+- Add libz.a dependency to shared in Makefile.in for parallel builds
+- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out
+- Replace $(...) with `...` in configure for non-bash sh [Bowler]
+- Add darwin* to Darwin* and solaris* to SunOS\ 5* in configure [Groffen]
+- Add solaris* to Linux* in configure to allow gcc use [Groffen]
+- Add *bsd* to Linux* case in configure [Bar-Lev]
+- Add inffast.obj to dependencies in win32/Makefile.msc
+- Correct spelling error in deflate.h [Kohler]
+- Change libzdll.a again to libz.dll.a (!) in win32/Makefile.gcc
+- Add test to configure for GNU C looking for gcc in output of $cc -v
+- Add zlib.pc generation to win32/Makefile.gcc [Weigelt]
+- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not
+- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense
+- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser)
+- Make stronger test in zconf.h to include unistd.h for LFS
+- Apply Darwin patches for 64-bit file offsets to contrib/minizip [Slack]
+- Fix zlib.h LFS support when Z_PREFIX used
+- Add updated as400 support (removed from old) [Monnerat]
+- Avoid deflate sensitivity to volatile input data
+- Avoid division in adler32_combine for NO_DIVIDE
+- Clarify the use of Z_FINISH with deflateBound() amount of space
+- Set binary for output file in puff.c
+- Use u4 type for crc_table to avoid conversion warnings
+- Apply casts in zlib.h to avoid conversion warnings
+- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller]
+- Improve inflateSync() documentation to note indeterminancy
+- Add deflatePending() function to return the amount of pending output
+- Correct the spelling of "specification" in FAQ [Randers-Pehrson]
+- Add a check in configure for stdarg.h, use for gzprintf()
+- Check that pointers fit in ints when gzprint() compiled old style
+- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler]
+- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt]
+- Add debug records in assmebler code [Londer]
+- Update RFC references to use http://tools.ietf.org/html/... [Li]
+- Add --archs option, use of libtool to configure for Mac OS X [Borstel]
+
 Changes in 1.2.5 (19 Apr 2010)
 - Disable visibility attribute in win32/Makefile.gcc [Bar-Lev]
 - Default to libdir as sharedlibdir in configure [Nieder]
 - Update copyright dates on modified source files
 - Update trees.c to be able to generate modified trees.h
 - Exit configure for MinGW, suggesting win32/Makefile.gcc
+- Check for NULL path in gz_open [Homurlu]
 
 Changes in 1.2.4.5 (18 Apr 2010)
 - Set sharedlibdir in configure [Torok]
@@ -261,7 +525,7 @@
 - Clear bytes after deflate lookahead to avoid use of uninitialized data
 - Change a limit in inftrees.c to be more transparent to Coverity Prevent
 - Update win32/zlib.def with exported symbols from zlib.h
-- Correct spelling error in zlib.h [Willem]
+- Correct spelling errors in zlib.h [Willem, Sobrado]
 - Allow Z_BLOCK for deflate() to force a new block
 - Allow negative bits in inflatePrime() to delete existing bit buffer
 - Add Z_TREES flush option to inflate() to return at end of trees
diff --git a/Modules/zlib/FAQ b/Modules/zlib/FAQ
index 1a22750..99b7cf9 100644
--- a/Modules/zlib/FAQ
+++ b/Modules/zlib/FAQ
@@ -44,8 +44,8 @@
 
  6. Where's the zlib documentation (man pages, etc.)?
 
-    It's in zlib.h .  Examples of zlib usage are in the files example.c and
-    minigzip.c, with more in examples/ .
+    It's in zlib.h .  Examples of zlib usage are in the files test/example.c
+    and test/minigzip.c, with more in examples/ .
 
  7. Why don't you use GNU autoconf or libtool or ...?
 
@@ -84,8 +84,10 @@
 
 13. How can I make a Unix shared library?
 
-    make clean
-    ./configure -s
+    By default a shared (and a static) library is built for Unix.  So:
+
+    make distclean
+    ./configure
     make
 
 14. How do I install a shared zlib library on Unix?
@@ -325,7 +327,7 @@
     correctly points to the zlib specification in RFC 1950 for the "deflate"
     transfer encoding, there have been reports of servers and browsers that
     incorrectly produce or expect raw deflate data per the deflate
-    specficiation in RFC 1951, most notably Microsoft.  So even though the
+    specification in RFC 1951, most notably Microsoft.  So even though the
     "deflate" transfer encoding using the zlib format would be the more
     efficient approach (and in fact exactly what the zlib format was designed
     for), using the "gzip" transfer encoding is probably more reliable due to
diff --git a/Modules/zlib/INDEX b/Modules/zlib/INDEX
index f6c51ca..2ba0641 100644
--- a/Modules/zlib/INDEX
+++ b/Modules/zlib/INDEX
@@ -7,6 +7,9 @@
 README          guess what
 configure       configure script for Unix
 make_vms.com    makefile for VMS
+test/example.c  zlib usages examples for build testing
+test/minigzip.c minimal gzip-like functionality for build testing
+test/infcover.c inf*.c code coverage for build coverage testing
 treebuild.xml   XML description of source file dependencies
 zconf.h.cmakein zconf.h template for cmake
 zconf.h.in      zconf.h template for configure
@@ -14,9 +17,11 @@
 zlib.3.pdf      Man page in PDF format
 zlib.map        Linux symbol information
 zlib.pc.in      Template for pkg-config descriptor
+zlib.pc.cmakein zlib.pc template for cmake
 zlib2ansi       perl script to convert source files for C++ compilation
 
 amiga/          makefiles for Amiga SAS C
+as400/          makefiles for AS/400
 doc/            documentation for formats and algorithms
 msdos/          makefiles for MSDOS
 nintendods/     makefile for Nintendo DS
@@ -56,10 +61,8 @@
 zutil.c
 zutil.h
 
-                source files for sample programs:
-example.c
-minigzip.c
-See examples/README.examples for more
+                source files for sample programs
+See examples/README.examples
 
-                unsupported contribution by third parties
+                unsupported contributions by third parties
 See contrib/README.contrib
diff --git a/Modules/zlib/Makefile.in b/Modules/zlib/Makefile.in
index 5b15bd0..c61aa30 100644
--- a/Modules/zlib/Makefile.in
+++ b/Modules/zlib/Makefile.in
@@ -1,5 +1,5 @@
 # Makefile for zlib
-# Copyright (C) 1995-2010 Jean-loup Gailly.
+# Copyright (C) 1995-2013 Jean-loup Gailly, Mark Adler
 # For conditions of distribution and use, see copyright notice in zlib.h
 
 # To compile and test, type:
@@ -32,11 +32,12 @@
 
 STATICLIB=libz.a
 SHAREDLIB=libz.so
-SHAREDLIBV=libz.so.1.2.5
+SHAREDLIBV=libz.so.1.2.8
 SHAREDLIBM=libz.so.1
 LIBS=$(STATICLIB) $(SHAREDLIBV)
 
-AR=ar rc
+AR=ar
+ARFLAGS=rc
 RANLIB=ranlib
 LDCONFIG=ldconfig
 LDSHAREDLIBC=-lc
@@ -53,11 +54,13 @@
 man3dir = ${mandir}/man3
 pkgconfigdir = ${libdir}/pkgconfig
 
-OBJC = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \
-	gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o
+OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o
+OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o
+OBJC = $(OBJZ) $(OBJG)
 
-PIC_OBJC = adler32.lo compress.lo crc32.lo deflate.lo gzclose.lo gzlib.lo gzread.lo \
-	gzwrite.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo uncompr.lo zutil.lo
+PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo
+PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo
+PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG)
 
 # to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo
 OBJA =
@@ -80,35 +83,49 @@
 test: all teststatic testshared
 
 teststatic: static
-	@if echo hello world | ./minigzip | ./minigzip -d && ./example; then \
+	@TMPST=tmpst_$$; \
+	if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \
 	  echo '		*** zlib test OK ***'; \
 	else \
 	  echo '		*** zlib test FAILED ***'; false; \
-	fi
-	-@rm -f foo.gz
+	fi; \
+	rm -f $$TMPST
 
 testshared: shared
 	@LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
 	LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \
 	DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
 	SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \
-	if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh; then \
+	TMPSH=tmpsh_$$; \
+	if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \
 	  echo '		*** zlib shared test OK ***'; \
 	else \
 	  echo '		*** zlib shared test FAILED ***'; false; \
-	fi
-	-@rm -f foo.gz
+	fi; \
+	rm -f $$TMPSH
 
 test64: all64
-	@if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64; then \
+	@TMP64=tmp64_$$; \
+	if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
 	  echo '		*** zlib 64-bit test OK ***'; \
 	else \
 	  echo '		*** zlib 64-bit test FAILED ***'; false; \
-	fi
-	-@rm -f foo.gz
+	fi; \
+	rm -f $$TMP64
+
+infcover.o: test/infcover.c zlib.h zconf.h
+	$(CC) $(CFLAGS) -I. -c -o $@ test/infcover.c
+
+infcover: infcover.o libz.a
+	$(CC) $(CFLAGS) -o $@ infcover.o libz.a
+
+cover: infcover
+	rm -f *.gcda
+	./infcover
+	gcov inf*.c
 
 libz.a: $(OBJS)
-	$(AR) $@ $(OBJS)
+	$(AR) $(ARFLAGS) $@ $(OBJS)
 	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1
 
 match.o: match.S
@@ -123,11 +140,17 @@
 	mv _match.o match.lo
 	rm -f _match.s
 
-example64.o: example.c zlib.h zconf.h
-	$(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ example.c
+example.o: test/example.c zlib.h zconf.h
+	$(CC) $(CFLAGS) -I. -c -o $@ test/example.c
 
-minigzip64.o: minigzip.c zlib.h zconf.h
-	$(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ minigzip.c
+minigzip.o: test/minigzip.c zlib.h zconf.h
+	$(CC) $(CFLAGS) -I. -c -o $@ test/minigzip.c
+
+example64.o: test/example.c zlib.h zconf.h
+	$(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/example.c
+
+minigzip64.o: test/minigzip.c zlib.h zconf.h
+	$(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/minigzip.c
 
 .SUFFIXES: .lo
 
@@ -136,7 +159,7 @@
 	$(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $<
 	-@mv objs/$*.o $@
 
-$(SHAREDLIBV): $(PIC_OBJS)
+placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
 	$(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
 	rm -f $(SHAREDLIB) $(SHAREDLIBM)
 	ln -s $@ $(SHAREDLIB)
@@ -168,14 +191,16 @@
 	-@if [ ! -d $(DESTDIR)$(man3dir)      ]; then mkdir -p $(DESTDIR)$(man3dir); fi
 	-@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi
 	cp $(STATICLIB) $(DESTDIR)$(libdir)
-	cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)
-	cd $(DESTDIR)$(libdir); chmod u=rw,go=r $(STATICLIB)
-	-@(cd $(DESTDIR)$(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1
-	-@cd $(DESTDIR)$(sharedlibdir); if test "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
-	  chmod 755 $(SHAREDLIBV); \
-	  rm -f $(SHAREDLIB) $(SHAREDLIBM); \
-	  ln -s $(SHAREDLIBV) $(SHAREDLIB); \
-	  ln -s $(SHAREDLIBV) $(SHAREDLIBM); \
+	chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB)
+	-@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1
+	-@if test -n "$(SHAREDLIBV)"; then \
+	  cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \
+	  echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \
+	  chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
+	  echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \
+	  rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
+	  ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \
+	  ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
 	  ($(LDCONFIG) || true)  >/dev/null 2>&1; \
 	fi
 	cp zlib.3 $(DESTDIR)$(man3dir)
@@ -191,22 +216,25 @@
 	chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
 
 uninstall:
-	cd $(DESTDIR)$(includedir); rm -f zlib.h zconf.h
-	cd $(DESTDIR)$(libdir); rm -f libz.a; \
-	if test "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
+	cd $(DESTDIR)$(includedir) && rm -f zlib.h zconf.h
+	cd $(DESTDIR)$(libdir) && rm -f libz.a; \
+	if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
 	  rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \
 	fi
-	cd $(DESTDIR)$(man3dir); rm -f zlib.3
-	cd $(DESTDIR)$(pkgconfigdir); rm -f zlib.pc
+	cd $(DESTDIR)$(man3dir) && rm -f zlib.3
+	cd $(DESTDIR)$(pkgconfigdir) && rm -f zlib.pc
 
 docs: zlib.3.pdf
 
 zlib.3.pdf: zlib.3
 	groff -mandoc -f H -T ps zlib.3 | ps2pdf - zlib.3.pdf
 
-zconf.h.in: zconf.h.cmakein
-	sed "/^#cmakedefine/D" < zconf.h.cmakein > zconf.h.in
-	touch -r zconf.h.cmakein zconf.h.in
+zconf.h.cmakein: zconf.h.in
+	-@ TEMPFILE=zconfh_$$; \
+	echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\
+	sed -f $$TEMPFILE zconf.h.in > zconf.h.cmakein &&\
+	touch -r zconf.h.in zconf.h.cmakein &&\
+	rm $$TEMPFILE
 
 zconf: zconf.h.in
 	cp -p zconf.h.in zconf.h
@@ -216,13 +244,16 @@
 	rm -f *.o *.lo *~ \
 	   example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
 	   example64$(EXE) minigzip64$(EXE) \
+	   infcover \
 	   libz.* foo.gz so_locations \
 	   _match.s maketree contrib/infback9/*.o
 	rm -rf objs
+	rm -f *.gcda *.gcno *.gcov
+	rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
 
 maintainer-clean: distclean
-distclean: clean zconf docs
-	rm -f Makefile zlib.pc
+distclean: clean zconf zconf.h.cmakein docs
+	rm -f Makefile zlib.pc configure.log
 	-@rm -f .DS_Store
 	-@printf 'all:\n\t-@echo "Please use ./configure first.  Thank you."\n' > Makefile
 	-@printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile
diff --git a/Modules/zlib/README b/Modules/zlib/README
index d4219bf..5ca9d12 100644
--- a/Modules/zlib/README
+++ b/Modules/zlib/README
@@ -1,22 +1,22 @@
 ZLIB DATA COMPRESSION LIBRARY
 
-zlib 1.2.5 is a general purpose data compression library.  All the code is
+zlib 1.2.8 is a general purpose data compression library.  All the code is
 thread safe.  The data format used by the zlib library is described by RFCs
 (Request for Comments) 1950 to 1952 in the files
-http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
-and rfc1952.txt (gzip format).
+http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
+rfc1952 (gzip format).
 
 All functions of the compression library are documented in the file zlib.h
 (volunteer to write man pages welcome, contact zlib@gzip.org).  A usage example
-of the library is given in the file example.c which also tests that the library
-is working correctly.  Another example is given in the file minigzip.c.  The
-compression library itself is composed of all source files except example.c and
-minigzip.c.
+of the library is given in the file test/example.c which also tests that
+the library is working correctly.  Another example is given in the file
+test/minigzip.c.  The compression library itself is composed of all source
+files in the root directory.
 
 To compile all files and run the test program, follow the instructions given at
 the top of Makefile.in.  In short "./configure; make test", and if that goes
-well, "make install" should work for most flavors of Unix.  For Windows, use one
-of the special makefiles in win32/ or contrib/vstudio/ .  For VMS, use
+well, "make install" should work for most flavors of Unix.  For Windows, use
+one of the special makefiles in win32/ or contrib/vstudio/ .  For VMS, use
 make_vms.com.
 
 Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
@@ -31,7 +31,7 @@
 issue of Dr.  Dobb's Journal; a copy of the article is available at
 http://marknelson.us/1997/01/01/zlib-engine/ .
 
-The changes made in version 1.2.5 are documented in the file ChangeLog.
+The changes made in version 1.2.8 are documented in the file ChangeLog.
 
 Unsupported third party contributions are provided in directory contrib/ .
 
@@ -44,7 +44,7 @@
 
 A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
 available in Python 1.5 and later versions, see
-http://www.python.org/doc/lib/module-zlib.html .
+http://docs.python.org/library/zlib.html .
 
 zlib is built into tcl: http://wiki.tcl.tk/4610 .
 
@@ -84,7 +84,7 @@
 
 Copyright notice:
 
- (C) 1995-2010 Jean-loup Gailly and Mark Adler
+ (C) 1995-2013 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
diff --git a/Modules/zlib/adler32.c b/Modules/zlib/adler32.c
index 65ad6a5..a868f07 100644
--- a/Modules/zlib/adler32.c
+++ b/Modules/zlib/adler32.c
@@ -1,5 +1,5 @@
 /* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2007 Mark Adler
+ * Copyright (C) 1995-2011 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -9,9 +9,9 @@
 
 #define local static
 
-local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2);
+local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
 
-#define BASE 65521UL    /* largest prime smaller than 65536 */
+#define BASE 65521      /* largest prime smaller than 65536 */
 #define NMAX 5552
 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
 
@@ -21,39 +21,44 @@
 #define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
 #define DO16(buf)   DO8(buf,0); DO8(buf,8);
 
-/* use NO_DIVIDE if your processor does not do division in hardware */
+/* use NO_DIVIDE if your processor does not do division in hardware --
+   try it both ways to see which is faster */
 #ifdef NO_DIVIDE
-#  define MOD(a) \
+/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
+   (thank you to John Reiser for pointing this out) */
+#  define CHOP(a) \
     do { \
-        if (a >= (BASE << 16)) a -= (BASE << 16); \
-        if (a >= (BASE << 15)) a -= (BASE << 15); \
-        if (a >= (BASE << 14)) a -= (BASE << 14); \
-        if (a >= (BASE << 13)) a -= (BASE << 13); \
-        if (a >= (BASE << 12)) a -= (BASE << 12); \
-        if (a >= (BASE << 11)) a -= (BASE << 11); \
-        if (a >= (BASE << 10)) a -= (BASE << 10); \
-        if (a >= (BASE << 9)) a -= (BASE << 9); \
-        if (a >= (BASE << 8)) a -= (BASE << 8); \
-        if (a >= (BASE << 7)) a -= (BASE << 7); \
-        if (a >= (BASE << 6)) a -= (BASE << 6); \
-        if (a >= (BASE << 5)) a -= (BASE << 5); \
-        if (a >= (BASE << 4)) a -= (BASE << 4); \
-        if (a >= (BASE << 3)) a -= (BASE << 3); \
-        if (a >= (BASE << 2)) a -= (BASE << 2); \
-        if (a >= (BASE << 1)) a -= (BASE << 1); \
+        unsigned long tmp = a >> 16; \
+        a &= 0xffffUL; \
+        a += (tmp << 4) - tmp; \
+    } while (0)
+#  define MOD28(a) \
+    do { \
+        CHOP(a); \
         if (a >= BASE) a -= BASE; \
     } while (0)
-#  define MOD4(a) \
+#  define MOD(a) \
     do { \
-        if (a >= (BASE << 4)) a -= (BASE << 4); \
-        if (a >= (BASE << 3)) a -= (BASE << 3); \
-        if (a >= (BASE << 2)) a -= (BASE << 2); \
-        if (a >= (BASE << 1)) a -= (BASE << 1); \
+        CHOP(a); \
+        MOD28(a); \
+    } while (0)
+#  define MOD63(a) \
+    do { /* this assumes a is not negative */ \
+        z_off64_t tmp = a >> 32; \
+        a &= 0xffffffffL; \
+        a += (tmp << 8) - (tmp << 5) + tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
         if (a >= BASE) a -= BASE; \
     } while (0)
 #else
 #  define MOD(a) a %= BASE
-#  define MOD4(a) a %= BASE
+#  define MOD28(a) a %= BASE
+#  define MOD63(a) a %= BASE
 #endif
 
 /* ========================================================================= */
@@ -92,7 +97,7 @@
         }
         if (adler >= BASE)
             adler -= BASE;
-        MOD4(sum2);             /* only added so many BASE's */
+        MOD28(sum2);            /* only added so many BASE's */
         return adler | (sum2 << 16);
     }
 
@@ -137,8 +142,13 @@
     unsigned long sum2;
     unsigned rem;
 
+    /* for negative len, return invalid adler32 as a clue for debugging */
+    if (len2 < 0)
+        return 0xffffffffUL;
+
     /* the derivation of this formula is left as an exercise for the reader */
-    rem = (unsigned)(len2 % BASE);
+    MOD63(len2);                /* assumes len2 >= 0 */
+    rem = (unsigned)len2;
     sum1 = adler1 & 0xffff;
     sum2 = rem * sum1;
     MOD(sum2);
diff --git a/Modules/zlib/algorithm.txt b/Modules/zlib/algorithm.txt
index b022dde..c97f495 100644
--- a/Modules/zlib/algorithm.txt
+++ b/Modules/zlib/algorithm.txt
@@ -121,7 +121,7 @@
 kbytes.  You can imagine that filling in a 2^15 entry table for a 15-bit code
 would take too long if you're only decoding several thousand symbols.  At the
 other extreme, you could make a new table for every bit in the code.  In fact,
-that's essentially a Huffman tree.  But then you spend two much time
+that's essentially a Huffman tree.  But then you spend too much time
 traversing the tree while decoding, even for short symbols.
 
 So the number of bits for the first lookup table is a trade of the time to
@@ -206,4 +206,4 @@
 pp. 337-343.
 
 ``DEFLATE Compressed Data Format Specification'' available in
-http://www.ietf.org/rfc/rfc1951.txt
+http://tools.ietf.org/html/rfc1951
diff --git a/Modules/zlib/compress.c b/Modules/zlib/compress.c
index ea4dfbe..6e97626 100644
--- a/Modules/zlib/compress.c
+++ b/Modules/zlib/compress.c
@@ -29,7 +29,7 @@
     z_stream stream;
     int err;
 
-    stream.next_in = (Bytef*)source;
+    stream.next_in = (z_const Bytef *)source;
     stream.avail_in = (uInt)sourceLen;
 #ifdef MAXSEG_64K
     /* Check for source > 64K on 16-bit machine: */
diff --git a/Modules/zlib/configure b/Modules/zlib/configure
index bd9edd2..b77a8a8 100755
--- a/Modules/zlib/configure
+++ b/Modules/zlib/configure
@@ -13,39 +13,52 @@
 # If you have problems, try without defining CC and CFLAGS before reporting
 # an error.
 
+# start off configure.log
+echo -------------------- >> configure.log
+echo $0 $* >> configure.log
+date >> configure.log
+
+# set command prefix for cross-compilation
 if [ -n "${CHOST}" ]; then
-    uname="$(echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/')"
+    uname="`echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/'`"
     CROSS_PREFIX="${CHOST}-"
 fi
 
+# destination name for static library
 STATICLIB=libz.a
-LDFLAGS="${LDFLAGS} -L. ${STATICLIB}"
+
+# extract zlib version numbers from zlib.h
 VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
 VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < zlib.h`
 VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h`
 VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h`
+
+# establish commands for library building
 if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then
     AR=${AR-"${CROSS_PREFIX}ar"}
-    test -n "${CROSS_PREFIX}" && echo Using ${AR}
+    test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
 else
     AR=${AR-"ar"}
-    test -n "${CROSS_PREFIX}" && echo Using ${AR}
+    test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
 fi
-AR_RC="${AR} rc"
+ARFLAGS=${ARFLAGS-"rc"}
 if "${CROSS_PREFIX}ranlib" --version >/dev/null 2>/dev/null || test $? -lt 126; then
     RANLIB=${RANLIB-"${CROSS_PREFIX}ranlib"}
-    test -n "${CROSS_PREFIX}" && echo Using ${RANLIB}
+    test -n "${CROSS_PREFIX}" && echo Using ${RANLIB} | tee -a configure.log
 else
     RANLIB=${RANLIB-"ranlib"}
 fi
 if "${CROSS_PREFIX}nm" --version >/dev/null 2>/dev/null || test $? -lt 126; then
     NM=${NM-"${CROSS_PREFIX}nm"}
-    test -n "${CROSS_PREFIX}" && echo Using ${NM}
+    test -n "${CROSS_PREFIX}" && echo Using ${NM} | tee -a configure.log
 else
     NM=${NM-"nm"}
 fi
+
+# set defaults before processing command line options
 LDCONFIG=${LDCONFIG-"ldconfig"}
 LDSHAREDLIBC="${LDSHAREDLIBC--lc}"
+ARCHS=
 prefix=${prefix-/usr/local}
 exec_prefix=${exec_prefix-'${prefix}'}
 libdir=${libdir-'${exec_prefix}/lib'}
@@ -54,20 +67,39 @@
 mandir=${mandir-'${prefix}/share/man'}
 shared_ext='.so'
 shared=1
+solo=0
+cover=0
 zprefix=0
+zconst=0
 build64=0
 gcc=0
 old_cc="$CC"
 old_cflags="$CFLAGS"
+OBJC='$(OBJZ) $(OBJG)'
+PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)'
 
+# leave this script, optionally in a bad way
+leave()
+{
+  if test "$*" != "0"; then
+    echo "** $0 aborting." | tee -a configure.log
+  fi
+  rm -f $test.[co] $test $test$shared_ext $test.gcno ./--version
+  echo -------------------- >> configure.log
+  echo >> configure.log
+  echo >> configure.log
+  exit $1
+}
+
+# process command line options
 while test $# -ge 1
 do
 case "$1" in
     -h* | --help)
-      echo 'usage:'
-      echo '  configure [--zprefix] [--prefix=PREFIX]  [--eprefix=EXPREFIX]'
-      echo '    [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]'
-      echo '    [--includedir=INCLUDEDIR]'
+      echo 'usage:' | tee -a configure.log
+      echo '  configure [--const] [--zprefix] [--prefix=PREFIX]  [--eprefix=EXPREFIX]' | tee -a configure.log
+      echo '    [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log
+      echo '    [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]' | tee -a configure.log
         exit 0 ;;
     -p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;;
     -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;;
@@ -81,51 +113,88 @@
     -i* | --includedir) includedir="$2"; shift; shift ;;
     -s* | --shared | --enable-shared) shared=1; shift ;;
     -t | --static) shared=0; shift ;;
+    --solo) solo=1; shift ;;
+    --cover) cover=1; shift ;;
     -z* | --zprefix) zprefix=1; shift ;;
     -6* | --64) build64=1; shift ;;
-    --sysconfdir=*) echo "ignored option: --sysconfdir"; shift ;;
-    --localstatedir=*) echo "ignored option: --localstatedir"; shift ;;
-    *) echo "unknown option: $1"; echo "$0 --help for help"; exit 1 ;;
+    -a*=* | --archs=*) ARCHS=`echo $1 | sed 's/.*=//'`; shift ;;
+    --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;;
+    --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;;
+    -c* | --const) zconst=1; shift ;;
+    *)
+      echo "unknown option: $1" | tee -a configure.log
+      echo "$0 --help for help" | tee -a configure.log
+      leave 1;;
     esac
 done
 
+# temporary file name
 test=ztest$$
+
+# put arguments in log, also put test file in log if used in arguments
+show()
+{
+  case "$*" in
+    *$test.c*)
+      echo === $test.c === >> configure.log
+      cat $test.c >> configure.log
+      echo === >> configure.log;;
+  esac
+  echo $* >> configure.log
+}
+
+# check for gcc vs. cc and set compile and link flags based on the system identified by uname
 cat > $test.c <<EOF
 extern int getchar();
 int hello() {return getchar();}
 EOF
 
-test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc...
+test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
 cc=${CC-${CROSS_PREFIX}gcc}
 cflags=${CFLAGS-"-O3"}
 # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
 case "$cc" in
   *gcc*) gcc=1 ;;
+  *clang*) gcc=1 ;;
+esac
+case `$cc -v 2>&1` in
+  *gcc*) gcc=1 ;;
 esac
 
-if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then
+show $cc -c $test.c
+if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then
+  echo ... using gcc >> configure.log
   CC="$cc"
+  CFLAGS="${CFLAGS--O3} ${ARCHS}"
   SFLAGS="${CFLAGS--O3} -fPIC"
-  CFLAGS="${CFLAGS--O3}"
+  LDFLAGS="${LDFLAGS} ${ARCHS}"
   if test $build64 -eq 1; then
     CFLAGS="${CFLAGS} -m64"
     SFLAGS="${SFLAGS} -m64"
   fi
   if test "${ZLIBGCCWARN}" = "YES"; then
-    CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
+    if test "$zconst" -eq 1; then
+      CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST"
+    else
+      CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
+    fi
   fi
   if test -z "$uname"; then
     uname=`(uname -s || echo unknown) 2>/dev/null`
   fi
   case "$uname" in
-  Linux* | linux* | GNU | GNU/* | *BSD | DragonFly) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;;
+  Linux* | linux* | GNU | GNU/* | solaris*)
+        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;;
+  *BSD | *bsd* | DragonFly)
+        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"}
+        LDCONFIG="ldconfig -m" ;;
   CYGWIN* | Cygwin* | cygwin* | OS/2*)
         EXE='.exe' ;;
-  MINGW*|mingw*)
+  MINGW* | mingw*)
 # temporary bypass
         rm -f $test.[co] $test $test$shared_ext
-        echo "Please use win32/Makefile.gcc instead."
-        exit 1
+        echo "Please use win32/Makefile.gcc instead." | tee -a configure.log
+        leave 1
         LDSHARED=${LDSHARED-"$cc -shared"}
         LDSHAREDLIBC=""
         EXE='.exe' ;;
@@ -142,17 +211,25 @@
                  shared_ext='.sl'
                  SHAREDLIB='libz.sl' ;;
          esac ;;
-  Darwin*)   shared_ext='.dylib'
+  Darwin* | darwin*)
+             shared_ext='.dylib'
              SHAREDLIB=libz$shared_ext
              SHAREDLIBV=libz.$VER$shared_ext
              SHAREDLIBM=libz.$VER1$shared_ext
-             LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"} ;;
+             LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"}
+             if libtool -V 2>&1 | grep Apple > /dev/null; then
+                 AR="libtool"
+             else
+                 AR="/usr/bin/libtool"
+             fi
+             ARFLAGS="-o" ;;
   *)             LDSHARED=${LDSHARED-"$cc -shared"} ;;
   esac
 else
   # find system name and corresponding cc options
   CC=${CC-cc}
   gcc=0
+  echo ... using $CC >> configure.log
   if test -z "$uname"; then
     uname=`(uname -sr || echo unknown) 2>/dev/null`
   fi
@@ -183,19 +260,34 @@
              CFLAGS=${CFLAGS-"-4 -O"}
              LDSHARED=${LDSHARED-"cc"}
              RANLIB=${RANLIB-"true"}
-             AR_RC="cc -A" ;;
+             AR="cc"
+             ARFLAGS="-A" ;;
   SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "}
              CFLAGS=${CFLAGS-"-O3"}
              LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;;
-  SunOS\ 5*) LDSHARED=${LDSHARED-"cc -G"}
-         case `(uname -m || echo unknown) 2>/dev/null` in
-         i86*)
-             SFLAGS=${CFLAGS-"-xpentium -fast -KPIC -R."}
-             CFLAGS=${CFLAGS-"-xpentium -fast"} ;;
-         *)
-             SFLAGS=${CFLAGS-"-fast -xcg92 -KPIC -R."}
-             CFLAGS=${CFLAGS-"-fast -xcg92"} ;;
-         esac ;;
+  SunOS\ 5* | solaris*)
+         LDSHARED=${LDSHARED-"cc -G -h libz$shared_ext.$VER1"}
+         SFLAGS=${CFLAGS-"-fast -KPIC"}
+         CFLAGS=${CFLAGS-"-fast"}
+         if test $build64 -eq 1; then
+             # old versions of SunPRO/Workshop/Studio don't support -m64,
+             # but newer ones do.  Check for it.
+             flag64=`$CC -flags | egrep -- '^-m64'`
+             if test x"$flag64" != x"" ; then
+                 CFLAGS="${CFLAGS} -m64"
+                 SFLAGS="${SFLAGS} -m64"
+             else
+                 case `(uname -m || echo unknown) 2>/dev/null` in
+                   i86*)
+                     SFLAGS="$SFLAGS -xarch=amd64"
+                     CFLAGS="$CFLAGS -xarch=amd64" ;;
+                   *)
+                     SFLAGS="$SFLAGS -xarch=v9"
+                     CFLAGS="$CFLAGS -xarch=v9" ;;
+                 esac
+             fi
+         fi
+         ;;
   SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"}
              CFLAGS=${CFLAGS-"-O2"}
              LDSHARED=${LDSHARED-"ld"} ;;
@@ -225,25 +317,79 @@
   esac
 fi
 
+# destination names for shared library if not defined above
 SHAREDLIB=${SHAREDLIB-"libz$shared_ext"}
 SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"}
 SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"}
 
+echo >> configure.log
+
+# define functions for testing compiler and library characteristics and logging the results
+
+cat > $test.c <<EOF
+#error error
+EOF
+if ($CC -c $CFLAGS $test.c) 2>/dev/null; then
+  try()
+  {
+    show $*
+    test "`( $* ) 2>&1 | tee -a configure.log`" = ""
+  }
+  echo - using any output from compiler to indicate an error >> configure.log
+else
+try()
+{
+  show $*
+  ( $* ) >> configure.log 2>&1
+  ret=$?
+  if test $ret -ne 0; then
+    echo "(exit code "$ret")" >> configure.log
+  fi
+  return $ret
+}
+fi
+
+tryboth()
+{
+  show $*
+  got=`( $* ) 2>&1`
+  ret=$?
+  printf %s "$got" >> configure.log
+  if test $ret -ne 0; then
+    return $ret
+  fi
+  test "$got" = ""
+}
+
+cat > $test.c << EOF
+int foo() { return 0; }
+EOF
+echo "Checking for obsessive-compulsive compiler options..." >> configure.log
+if try $CC -c $CFLAGS $test.c; then
+  :
+else
+  echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log
+  leave 1
+fi
+
+echo >> configure.log
+
+# see if shared library build supported
+cat > $test.c <<EOF
+extern int getchar();
+int hello() {return getchar();}
+EOF
 if test $shared -eq 1; then
-  echo Checking for shared library support...
+  echo Checking for shared library support... | tee -a configure.log
   # we must test in two steps (cc then ld), required at least on SunOS 4.x
-  if test "`($CC -w -c $SFLAGS $test.c) 2>&1`" = "" &&
-     test "`($LDSHARED $SFLAGS -o $test$shared_ext $test.o) 2>&1`" = ""; then
-    echo Building shared library $SHAREDLIBV with $CC.
+  if try $CC -w -c $SFLAGS $test.c &&
+     try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then
+    echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log
   elif test -z "$old_cc" -a -z "$old_cflags"; then
-    echo No shared library support.
+    echo No shared library support. | tee -a configure.log
     shared=0;
   else
-    echo Tested $CC -w -c $SFLAGS $test.c
-    $CC -w -c $SFLAGS $test.c
-    echo Tested $LDSHARED $SFLAGS -o $test$shared_ext $test.o
-    $LDSHARED $SFLAGS -o $test$shared_ext $test.o
-    echo 'No shared library support; try without defining CC and CFLAGS'
+    echo 'No shared library support; try without defining CC and CFLAGS' | tee -a configure.log
     shared=0;
   fi
 fi
@@ -254,25 +400,43 @@
   SHAREDLIB=""
   SHAREDLIBV=""
   SHAREDLIBM=""
-  echo Building static library $STATICLIB version $VER with $CC.
+  echo Building static library $STATICLIB version $VER with $CC. | tee -a configure.log
 else
   ALL="static shared"
   TEST="all teststatic testshared"
 fi
 
+# check for underscores in external names for use by assembler code
+CPP=${CPP-"$CC -E"}
+case $CFLAGS in
+  *ASMV*)
+    echo >> configure.log
+    show "$NM $test.o | grep _hello"
+    if test "`$NM $test.o | grep _hello | tee -a configure.log`" = ""; then
+      CPP="$CPP -DNO_UNDERLINE"
+      echo Checking for underline in external names... No. | tee -a configure.log
+    else
+      echo Checking for underline in external names... Yes. | tee -a configure.log
+    fi ;;
+esac
+
+echo >> configure.log
+
+# check for large file support, and if none, check for fseeko()
 cat > $test.c <<EOF
 #include <sys/types.h>
 off64_t dummy = 0;
 EOF
-if test "`($CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c) 2>&1`" = ""; then
+if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then
   CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1"
   SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1"
   ALL="${ALL} all64"
   TEST="${TEST} test64"
-  echo "Checking for off64_t... Yes."
-  echo "Checking for fseeko... Yes."
+  echo "Checking for off64_t... Yes." | tee -a configure.log
+  echo "Checking for fseeko... Yes." | tee -a configure.log
 else
-  echo "Checking for off64_t... No."
+  echo "Checking for off64_t... No." | tee -a configure.log
+  echo >> configure.log
   cat > $test.c <<EOF
 #include <stdio.h>
 int main(void) {
@@ -280,272 +444,335 @@
   return 0;
 }
 EOF
-  if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
-    echo "Checking for fseeko... Yes."
+  if try $CC $CFLAGS -o $test $test.c; then
+    echo "Checking for fseeko... Yes." | tee -a configure.log
   else
     CFLAGS="${CFLAGS} -DNO_FSEEKO"
     SFLAGS="${SFLAGS} -DNO_FSEEKO"
-    echo "Checking for fseeko... No."
+    echo "Checking for fseeko... No." | tee -a configure.log
   fi
 fi
 
+echo >> configure.log
+
+# check for strerror() for use by gz* functions
+cat > $test.c <<EOF
+#include <string.h>
+#include <errno.h>
+int main() { return strlen(strerror(errno)); }
+EOF
+if try $CC $CFLAGS -o $test $test.c; then
+  echo "Checking for strerror... Yes." | tee -a configure.log
+else
+  CFLAGS="${CFLAGS} -DNO_STRERROR"
+  SFLAGS="${SFLAGS} -DNO_STRERROR"
+  echo "Checking for strerror... No." | tee -a configure.log
+fi
+
+# copy clean zconf.h for subsequent edits
 cp -p zconf.h.in zconf.h
 
+echo >> configure.log
+
+# check for unistd.h and save result in zconf.h
 cat > $test.c <<EOF
 #include <unistd.h>
 int main() { return 0; }
 EOF
-if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
+if try $CC -c $CFLAGS $test.c; then
   sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
   mv zconf.temp.h zconf.h
-  echo "Checking for unistd.h... Yes."
+  echo "Checking for unistd.h... Yes." | tee -a configure.log
 else
-  echo "Checking for unistd.h... No."
+  echo "Checking for unistd.h... No." | tee -a configure.log
 fi
 
+echo >> configure.log
+
+# check for stdarg.h and save result in zconf.h
+cat > $test.c <<EOF
+#include <stdarg.h>
+int main() { return 0; }
+EOF
+if try $CC -c $CFLAGS $test.c; then
+  sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
+  mv zconf.temp.h zconf.h
+  echo "Checking for stdarg.h... Yes." | tee -a configure.log
+else
+  echo "Checking for stdarg.h... No." | tee -a configure.log
+fi
+
+# if the z_ prefix was requested, save that in zconf.h
 if test $zprefix -eq 1; then
   sed < zconf.h "/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\(.*\) may be/ 1\1 was/" > zconf.temp.h
   mv zconf.temp.h zconf.h
-  echo "Using z_ prefix on all symbols."
+  echo >> configure.log
+  echo "Using z_ prefix on all symbols." | tee -a configure.log
 fi
 
+# if --solo compilation was requested, save that in zconf.h and remove gz stuff from object lists
+if test $solo -eq 1; then
+  sed '/#define ZCONF_H/a\
+#define Z_SOLO
+
+' < zconf.h > zconf.temp.h
+  mv zconf.temp.h zconf.h
+OBJC='$(OBJZ)'
+PIC_OBJC='$(PIC_OBJZ)'
+fi
+
+# if code coverage testing was requested, use older gcc if defined, e.g. "gcc-4.2" on Mac OS X
+if test $cover -eq 1; then
+  CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage"
+  if test -n "$GCC_CLASSIC"; then
+    CC=$GCC_CLASSIC
+  fi
+fi
+
+echo >> configure.log
+
+# conduct a series of tests to resolve eight possible cases of using "vs" or "s" printf functions
+# (using stdarg or not), with or without "n" (proving size of buffer), and with or without a
+# return value.  The most secure result is vsnprintf() with a return value.  snprintf() with a
+# return value is secure as well, but then gzprintf() will be limited to 20 arguments.
 cat > $test.c <<EOF
 #include <stdio.h>
 #include <stdarg.h>
 #include "zconf.h"
-
 int main()
 {
 #ifndef STDC
   choke me
 #endif
-
   return 0;
 }
 EOF
+if try $CC -c $CFLAGS $test.c; then
+  echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | tee -a configure.log
 
-if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-  echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()."
-
+  echo >> configure.log
   cat > $test.c <<EOF
 #include <stdio.h>
 #include <stdarg.h>
-
 int mytest(const char *fmt, ...)
 {
   char buf[20];
   va_list ap;
-
   va_start(ap, fmt);
   vsnprintf(buf, sizeof(buf), fmt, ap);
   va_end(ap);
   return 0;
 }
-
 int main()
 {
   return (mytest("Hello%d\n", 1));
 }
 EOF
+  if try $CC $CFLAGS -o $test $test.c; then
+    echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log
 
-  if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
-    echo "Checking for vsnprintf() in stdio.h... Yes."
-
+    echo >> configure.log
     cat >$test.c <<EOF
 #include <stdio.h>
 #include <stdarg.h>
-
 int mytest(const char *fmt, ...)
 {
   int n;
   char buf[20];
   va_list ap;
-
   va_start(ap, fmt);
   n = vsnprintf(buf, sizeof(buf), fmt, ap);
   va_end(ap);
   return n;
 }
-
 int main()
 {
   return (mytest("Hello%d\n", 1));
 }
 EOF
 
-    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-      echo "Checking for return value of vsnprintf()... Yes."
+    if try $CC -c $CFLAGS $test.c; then
+      echo "Checking for return value of vsnprintf()... Yes." | tee -a configure.log
     else
       CFLAGS="$CFLAGS -DHAS_vsnprintf_void"
       SFLAGS="$SFLAGS -DHAS_vsnprintf_void"
-      echo "Checking for return value of vsnprintf()... No."
-      echo "  WARNING: apparently vsnprintf() does not return a value. zlib"
-      echo "  can build but will be open to possible string-format security"
-      echo "  vulnerabilities."
+      echo "Checking for return value of vsnprintf()... No." | tee -a configure.log
+      echo "  WARNING: apparently vsnprintf() does not return a value. zlib" | tee -a configure.log
+      echo "  can build but will be open to possible string-format security" | tee -a configure.log
+      echo "  vulnerabilities." | tee -a configure.log
     fi
   else
     CFLAGS="$CFLAGS -DNO_vsnprintf"
     SFLAGS="$SFLAGS -DNO_vsnprintf"
-    echo "Checking for vsnprintf() in stdio.h... No."
-    echo "  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib"
-    echo "  can build but will be open to possible buffer-overflow security"
-    echo "  vulnerabilities."
+    echo "Checking for vsnprintf() in stdio.h... No." | tee -a configure.log
+    echo "  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | tee -a configure.log
+    echo "  can build but will be open to possible buffer-overflow security" | tee -a configure.log
+    echo "  vulnerabilities." | tee -a configure.log
 
+    echo >> configure.log
     cat >$test.c <<EOF
 #include <stdio.h>
 #include <stdarg.h>
-
 int mytest(const char *fmt, ...)
 {
   int n;
   char buf[20];
   va_list ap;
-
   va_start(ap, fmt);
   n = vsprintf(buf, fmt, ap);
   va_end(ap);
   return n;
 }
-
 int main()
 {
   return (mytest("Hello%d\n", 1));
 }
 EOF
 
-    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-      echo "Checking for return value of vsprintf()... Yes."
+    if try $CC -c $CFLAGS $test.c; then
+      echo "Checking for return value of vsprintf()... Yes." | tee -a configure.log
     else
       CFLAGS="$CFLAGS -DHAS_vsprintf_void"
       SFLAGS="$SFLAGS -DHAS_vsprintf_void"
-      echo "Checking for return value of vsprintf()... No."
-      echo "  WARNING: apparently vsprintf() does not return a value. zlib"
-      echo "  can build but will be open to possible string-format security"
-      echo "  vulnerabilities."
+      echo "Checking for return value of vsprintf()... No." | tee -a configure.log
+      echo "  WARNING: apparently vsprintf() does not return a value. zlib" | tee -a configure.log
+      echo "  can build but will be open to possible string-format security" | tee -a configure.log
+      echo "  vulnerabilities." | tee -a configure.log
     fi
   fi
 else
-  echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()."
+  echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()." | tee -a configure.log
 
+  echo >> configure.log
   cat >$test.c <<EOF
 #include <stdio.h>
-
 int mytest()
 {
   char buf[20];
-
   snprintf(buf, sizeof(buf), "%s", "foo");
   return 0;
 }
-
 int main()
 {
   return (mytest());
 }
 EOF
 
-  if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
-    echo "Checking for snprintf() in stdio.h... Yes."
+  if try $CC $CFLAGS -o $test $test.c; then
+    echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log
 
+    echo >> configure.log
     cat >$test.c <<EOF
 #include <stdio.h>
-
 int mytest()
 {
   char buf[20];
-
   return snprintf(buf, sizeof(buf), "%s", "foo");
 }
-
 int main()
 {
   return (mytest());
 }
 EOF
 
-    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-      echo "Checking for return value of snprintf()... Yes."
+    if try $CC -c $CFLAGS $test.c; then
+      echo "Checking for return value of snprintf()... Yes." | tee -a configure.log
     else
       CFLAGS="$CFLAGS -DHAS_snprintf_void"
       SFLAGS="$SFLAGS -DHAS_snprintf_void"
-      echo "Checking for return value of snprintf()... No."
-      echo "  WARNING: apparently snprintf() does not return a value. zlib"
-      echo "  can build but will be open to possible string-format security"
-      echo "  vulnerabilities."
+      echo "Checking for return value of snprintf()... No." | tee -a configure.log
+      echo "  WARNING: apparently snprintf() does not return a value. zlib" | tee -a configure.log
+      echo "  can build but will be open to possible string-format security" | tee -a configure.log
+      echo "  vulnerabilities." | tee -a configure.log
     fi
   else
     CFLAGS="$CFLAGS -DNO_snprintf"
     SFLAGS="$SFLAGS -DNO_snprintf"
-    echo "Checking for snprintf() in stdio.h... No."
-    echo "  WARNING: snprintf() not found, falling back to sprintf(). zlib"
-    echo "  can build but will be open to possible buffer-overflow security"
-    echo "  vulnerabilities."
+    echo "Checking for snprintf() in stdio.h... No." | tee -a configure.log
+    echo "  WARNING: snprintf() not found, falling back to sprintf(). zlib" | tee -a configure.log
+    echo "  can build but will be open to possible buffer-overflow security" | tee -a configure.log
+    echo "  vulnerabilities." | tee -a configure.log
 
+    echo >> configure.log
     cat >$test.c <<EOF
 #include <stdio.h>
-
 int mytest()
 {
   char buf[20];
-
   return sprintf(buf, "%s", "foo");
 }
-
 int main()
 {
   return (mytest());
 }
 EOF
 
-    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-      echo "Checking for return value of sprintf()... Yes."
+    if try $CC -c $CFLAGS $test.c; then
+      echo "Checking for return value of sprintf()... Yes." | tee -a configure.log
     else
       CFLAGS="$CFLAGS -DHAS_sprintf_void"
       SFLAGS="$SFLAGS -DHAS_sprintf_void"
-      echo "Checking for return value of sprintf()... No."
-      echo "  WARNING: apparently sprintf() does not return a value. zlib"
-      echo "  can build but will be open to possible string-format security"
-      echo "  vulnerabilities."
+      echo "Checking for return value of sprintf()... No." | tee -a configure.log
+      echo "  WARNING: apparently sprintf() does not return a value. zlib" | tee -a configure.log
+      echo "  can build but will be open to possible string-format security" | tee -a configure.log
+      echo "  vulnerabilities." | tee -a configure.log
     fi
   fi
 fi
 
+# see if we can hide zlib internal symbols that are linked between separate source files
 if test "$gcc" -eq 1; then
+  echo >> configure.log
   cat > $test.c <<EOF
-#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33)
-#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
-#else
-#  define ZLIB_INTERNAL
-#endif
+#define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
 int ZLIB_INTERNAL foo;
 int main()
 {
   return 0;
 }
 EOF
-  if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-    echo "Checking for attribute(visibility) support... Yes."
+  if tryboth $CC -c $CFLAGS $test.c; then
+    CFLAGS="$CFLAGS -DHAVE_HIDDEN"
+    SFLAGS="$SFLAGS -DHAVE_HIDDEN"
+    echo "Checking for attribute(visibility) support... Yes." | tee -a configure.log
   else
-    CFLAGS="$CFLAGS -DNO_VIZ"
-    SFLAGS="$SFLAGS -DNO_VIZ"
-    echo "Checking for attribute(visibility) support... No."
+    echo "Checking for attribute(visibility) support... No." | tee -a configure.log
   fi
 fi
 
-CPP=${CPP-"$CC -E"}
-case $CFLAGS in
-  *ASMV*)
-    if test "`$NM $test.o | grep _hello`" = ""; then
-      CPP="$CPP -DNO_UNDERLINE"
-      echo Checking for underline in external names... No.
-    else
-      echo Checking for underline in external names... Yes.
-    fi ;;
-esac
+# show the results in the log
+echo >> configure.log
+echo ALL = $ALL >> configure.log
+echo AR = $AR >> configure.log
+echo ARFLAGS = $ARFLAGS >> configure.log
+echo CC = $CC >> configure.log
+echo CFLAGS = $CFLAGS >> configure.log
+echo CPP = $CPP >> configure.log
+echo EXE = $EXE >> configure.log
+echo LDCONFIG = $LDCONFIG >> configure.log
+echo LDFLAGS = $LDFLAGS >> configure.log
+echo LDSHARED = $LDSHARED >> configure.log
+echo LDSHAREDLIBC = $LDSHAREDLIBC >> configure.log
+echo OBJC = $OBJC >> configure.log
+echo PIC_OBJC = $PIC_OBJC >> configure.log
+echo RANLIB = $RANLIB >> configure.log
+echo SFLAGS = $SFLAGS >> configure.log
+echo SHAREDLIB = $SHAREDLIB >> configure.log
+echo SHAREDLIBM = $SHAREDLIBM >> configure.log
+echo SHAREDLIBV = $SHAREDLIBV >> configure.log
+echo STATICLIB = $STATICLIB >> configure.log
+echo TEST = $TEST >> configure.log
+echo VER = $VER >> configure.log
+echo Z_U4 = $Z_U4 >> configure.log
+echo exec_prefix = $exec_prefix >> configure.log
+echo includedir = $includedir >> configure.log
+echo libdir = $libdir >> configure.log
+echo mandir = $mandir >> configure.log
+echo prefix = $prefix >> configure.log
+echo sharedlibdir = $sharedlibdir >> configure.log
+echo uname = $uname >> configure.log
 
-rm -f $test.[co] $test $test$shared_ext
-
-# udpate Makefile
+# udpate Makefile with the configure results
 sed < Makefile.in "
 /^CC *=/s#=.*#=$CC#
 /^CFLAGS *=/s#=.*#=$CFLAGS#
@@ -557,7 +784,8 @@
 /^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
 /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
 /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
-/^AR *=/s#=.*#=$AR_RC#
+/^AR *=/s#=.*#=$AR#
+/^ARFLAGS *=/s#=.*#=$ARFLAGS#
 /^RANLIB *=/s#=.*#=$RANLIB#
 /^LDCONFIG *=/s#=.*#=$LDCONFIG#
 /^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC#
@@ -568,10 +796,13 @@
 /^sharedlibdir *=/s#=.*#=$sharedlibdir#
 /^includedir *=/s#=.*#=$includedir#
 /^mandir *=/s#=.*#=$mandir#
+/^OBJC *=/s#=.*#= $OBJC#
+/^PIC_OBJC *=/s#=.*#= $PIC_OBJC#
 /^all: */s#:.*#: $ALL#
 /^test: */s#:.*#: $TEST#
 " > Makefile
 
+# create zlib.pc with the configure results
 sed < zlib.pc.in "
 /^CC *=/s#=.*#=$CC#
 /^CFLAGS *=/s#=.*#=$CFLAGS#
@@ -581,7 +812,8 @@
 /^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
 /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
 /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
-/^AR *=/s#=.*#=$AR_RC#
+/^AR *=/s#=.*#=$AR#
+/^ARFLAGS *=/s#=.*#=$ARFLAGS#
 /^RANLIB *=/s#=.*#=$RANLIB#
 /^EXE *=/s#=.*#=$EXE#
 /^prefix *=/s#=.*#=$prefix#
@@ -594,3 +826,6 @@
 " | sed -e "
 s/\@VERSION\@/$VER/g;
 " > zlib.pc
+
+# done
+leave 0
diff --git a/Modules/zlib/crc32.c b/Modules/zlib/crc32.c
index 91be372..979a719 100644
--- a/Modules/zlib/crc32.c
+++ b/Modules/zlib/crc32.c
@@ -1,5 +1,5 @@
 /* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2006, 2010 Mark Adler
+ * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  *
  * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
@@ -17,6 +17,8 @@
   of the crc tables.  Therefore, if you #define DYNAMIC_CRC_TABLE, you should
   first call get_crc_table() to initialize the tables before allowing more than
   one thread to use crc32().
+
+  DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
  */
 
 #ifdef MAKECRCH
@@ -30,31 +32,11 @@
 
 #define local static
 
-/* Find a four-byte integer type for crc32_little() and crc32_big(). */
-#ifndef NOBYFOUR
-#  ifdef STDC           /* need ANSI C limits.h to determine sizes */
-#    include <limits.h>
-#    define BYFOUR
-#    if (UINT_MAX == 0xffffffffUL)
-       typedef unsigned int u4;
-#    else
-#      if (ULONG_MAX == 0xffffffffUL)
-         typedef unsigned long u4;
-#      else
-#        if (USHRT_MAX == 0xffffffffUL)
-           typedef unsigned short u4;
-#        else
-#          undef BYFOUR     /* can't find a four-byte integer type! */
-#        endif
-#      endif
-#    endif
-#  endif /* STDC */
-#endif /* !NOBYFOUR */
-
 /* Definitions for doing the crc four data bytes at a time. */
+#if !defined(NOBYFOUR) && defined(Z_U4)
+#  define BYFOUR
+#endif
 #ifdef BYFOUR
-#  define REV(w) ((((w)>>24)&0xff)+(((w)>>8)&0xff00)+ \
-                (((w)&0xff00)<<8)+(((w)&0xff)<<24))
    local unsigned long crc32_little OF((unsigned long,
                         const unsigned char FAR *, unsigned));
    local unsigned long crc32_big OF((unsigned long,
@@ -68,16 +50,16 @@
 local unsigned long gf2_matrix_times OF((unsigned long *mat,
                                          unsigned long vec));
 local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
-local uLong crc32_combine_(uLong crc1, uLong crc2, z_off64_t len2);
+local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
 
 
 #ifdef DYNAMIC_CRC_TABLE
 
 local volatile int crc_table_empty = 1;
-local unsigned long FAR crc_table[TBLS][256];
+local z_crc_t FAR crc_table[TBLS][256];
 local void make_crc_table OF((void));
 #ifdef MAKECRCH
-   local void write_table OF((FILE *, const unsigned long FAR *));
+   local void write_table OF((FILE *, const z_crc_t FAR *));
 #endif /* MAKECRCH */
 /*
   Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
@@ -107,9 +89,9 @@
 */
 local void make_crc_table()
 {
-    unsigned long c;
+    z_crc_t c;
     int n, k;
-    unsigned long poly;                 /* polynomial exclusive-or pattern */
+    z_crc_t poly;                       /* polynomial exclusive-or pattern */
     /* terms of polynomial defining this crc (except x^32): */
     static volatile int first = 1;      /* flag to limit concurrent making */
     static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
@@ -121,13 +103,13 @@
         first = 0;
 
         /* make exclusive-or pattern from polynomial (0xedb88320UL) */
-        poly = 0UL;
-        for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++)
-            poly |= 1UL << (31 - p[n]);
+        poly = 0;
+        for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
+            poly |= (z_crc_t)1 << (31 - p[n]);
 
         /* generate a crc for every 8-bit value */
         for (n = 0; n < 256; n++) {
-            c = (unsigned long)n;
+            c = (z_crc_t)n;
             for (k = 0; k < 8; k++)
                 c = c & 1 ? poly ^ (c >> 1) : c >> 1;
             crc_table[0][n] = c;
@@ -138,11 +120,11 @@
            and then the byte reversal of those as well as the first table */
         for (n = 0; n < 256; n++) {
             c = crc_table[0][n];
-            crc_table[4][n] = REV(c);
+            crc_table[4][n] = ZSWAP32(c);
             for (k = 1; k < 4; k++) {
                 c = crc_table[0][c & 0xff] ^ (c >> 8);
                 crc_table[k][n] = c;
-                crc_table[k + 4][n] = REV(c);
+                crc_table[k + 4][n] = ZSWAP32(c);
             }
         }
 #endif /* BYFOUR */
@@ -164,7 +146,7 @@
         if (out == NULL) return;
         fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
         fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
-        fprintf(out, "local const unsigned long FAR ");
+        fprintf(out, "local const z_crc_t FAR ");
         fprintf(out, "crc_table[TBLS][256] =\n{\n  {\n");
         write_table(out, crc_table[0]);
 #  ifdef BYFOUR
@@ -184,12 +166,13 @@
 #ifdef MAKECRCH
 local void write_table(out, table)
     FILE *out;
-    const unsigned long FAR *table;
+    const z_crc_t FAR *table;
 {
     int n;
 
     for (n = 0; n < 256; n++)
-        fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : "    ", table[n],
+        fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : "    ",
+                (unsigned long)(table[n]),
                 n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
 }
 #endif /* MAKECRCH */
@@ -204,13 +187,13 @@
 /* =========================================================================
  * This function can be used by asm versions of crc32()
  */
-const unsigned long FAR * ZEXPORT get_crc_table()
+const z_crc_t FAR * ZEXPORT get_crc_table()
 {
 #ifdef DYNAMIC_CRC_TABLE
     if (crc_table_empty)
         make_crc_table();
 #endif /* DYNAMIC_CRC_TABLE */
-    return (const unsigned long FAR *)crc_table;
+    return (const z_crc_t FAR *)crc_table;
 }
 
 /* ========================================================================= */
@@ -232,7 +215,7 @@
 
 #ifdef BYFOUR
     if (sizeof(void *) == sizeof(ptrdiff_t)) {
-        u4 endian;
+        z_crc_t endian;
 
         endian = 1;
         if (*((unsigned char *)(&endian)))
@@ -266,17 +249,17 @@
     const unsigned char FAR *buf;
     unsigned len;
 {
-    register u4 c;
-    register const u4 FAR *buf4;
+    register z_crc_t c;
+    register const z_crc_t FAR *buf4;
 
-    c = (u4)crc;
+    c = (z_crc_t)crc;
     c = ~c;
     while (len && ((ptrdiff_t)buf & 3)) {
         c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
         len--;
     }
 
-    buf4 = (const u4 FAR *)(const void FAR *)buf;
+    buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
     while (len >= 32) {
         DOLIT32;
         len -= 32;
@@ -306,17 +289,17 @@
     const unsigned char FAR *buf;
     unsigned len;
 {
-    register u4 c;
-    register const u4 FAR *buf4;
+    register z_crc_t c;
+    register const z_crc_t FAR *buf4;
 
-    c = REV((u4)crc);
+    c = ZSWAP32((z_crc_t)crc);
     c = ~c;
     while (len && ((ptrdiff_t)buf & 3)) {
         c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
         len--;
     }
 
-    buf4 = (const u4 FAR *)(const void FAR *)buf;
+    buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
     buf4--;
     while (len >= 32) {
         DOBIG32;
@@ -333,7 +316,7 @@
         c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
     } while (--len);
     c = ~c;
-    return (unsigned long)(REV(c));
+    return (unsigned long)(ZSWAP32(c));
 }
 
 #endif /* BYFOUR */
diff --git a/Modules/zlib/crc32.h b/Modules/zlib/crc32.h
index 8053b61..9e0c778 100644
--- a/Modules/zlib/crc32.h
+++ b/Modules/zlib/crc32.h
@@ -2,7 +2,7 @@
  * Generated automatically by crc32.c
  */
 
-local const unsigned long FAR crc_table[TBLS][256] =
+local const z_crc_t FAR crc_table[TBLS][256] =
 {
   {
     0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
diff --git a/Modules/zlib/deflate.c b/Modules/zlib/deflate.c
index bcef67c..6969577 100644
--- a/Modules/zlib/deflate.c
+++ b/Modules/zlib/deflate.c
@@ -1,5 +1,5 @@
 /* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
+ * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -37,7 +37,7 @@
  *  REFERENCES
  *
  *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
- *      Available in http://www.ietf.org/rfc/rfc1951.txt
+ *      Available in http://tools.ietf.org/html/rfc1951
  *
  *      A description of the Rabin and Karp algorithm is given in the book
  *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
@@ -52,7 +52,7 @@
 #include "deflate.h"
 
 const char deflate_copyright[] =
-   " deflate 1.2.5 Copyright 1995-2010 Jean-loup Gailly and Mark Adler ";
+   " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -155,9 +155,12 @@
 struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
 #endif
 
+/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
+#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+
 /* ===========================================================================
  * Update a hash value with the given input byte
- * IN  assertion: all calls to UPDATE_HASH are made with consecutive
+ * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
  *    input characters, so that a running hash key can be computed from the
  *    previous key instead of complete recalculation each time.
  */
@@ -170,7 +173,7 @@
  * the previous length of the hash chain.
  * If this file is compiled with -DFASTEST, the compression level is forced
  * to 1, and no hash chains are maintained.
- * IN  assertion: all calls to INSERT_STRING are made with consecutive
+ * IN  assertion: all calls to to INSERT_STRING are made with consecutive
  *    input characters and the first MIN_MATCH bytes of str are valid
  *    (except for the last MIN_MATCH-1 bytes of the input file).
  */
@@ -235,10 +238,19 @@
 
     strm->msg = Z_NULL;
     if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
         strm->zalloc = zcalloc;
         strm->opaque = (voidpf)0;
+#endif
     }
-    if (strm->zfree == (free_func)0) strm->zfree = zcfree;
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zfree = zcfree;
+#endif
 
 #ifdef FASTEST
     if (level != 0) level = 1;
@@ -293,7 +305,7 @@
     if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
         s->pending_buf == Z_NULL) {
         s->status = FINISH_STATE;
-        strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
+        strm->msg = ERR_MSG(Z_MEM_ERROR);
         deflateEnd (strm);
         return Z_MEM_ERROR;
     }
@@ -314,43 +326,70 @@
     uInt  dictLength;
 {
     deflate_state *s;
-    uInt length = dictLength;
-    uInt n;
-    IPos hash_head = 0;
+    uInt str, n;
+    int wrap;
+    unsigned avail;
+    z_const unsigned char *next;
 
-    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL ||
-        strm->state->wrap == 2 ||
-        (strm->state->wrap == 1 && strm->state->status != INIT_STATE))
+    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+        return Z_STREAM_ERROR;
+    s = strm->state;
+    wrap = s->wrap;
+    if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
         return Z_STREAM_ERROR;
 
-    s = strm->state;
-    if (s->wrap)
+    /* when using zlib wrappers, compute Adler-32 for provided dictionary */
+    if (wrap == 1)
         strm->adler = adler32(strm->adler, dictionary, dictLength);
+    s->wrap = 0;                    /* avoid computing Adler-32 in read_buf */
 
-    if (length < MIN_MATCH) return Z_OK;
-    if (length > s->w_size) {
-        length = s->w_size;
-        dictionary += dictLength - length; /* use the tail of the dictionary */
+    /* if dictionary would fill window, just replace the history */
+    if (dictLength >= s->w_size) {
+        if (wrap == 0) {            /* already empty otherwise */
+            CLEAR_HASH(s);
+            s->strstart = 0;
+            s->block_start = 0L;
+            s->insert = 0;
+        }
+        dictionary += dictLength - s->w_size;  /* use the tail */
+        dictLength = s->w_size;
     }
-    zmemcpy(s->window, dictionary, length);
-    s->strstart = length;
-    s->block_start = (long)length;
 
-    /* Insert all strings in the hash table (except for the last two bytes).
-     * s->lookahead stays null, so s->ins_h will be recomputed at the next
-     * call of fill_window.
-     */
-    s->ins_h = s->window[0];
-    UPDATE_HASH(s, s->ins_h, s->window[1]);
-    for (n = 0; n <= length - MIN_MATCH; n++) {
-        INSERT_STRING(s, n, hash_head);
+    /* insert dictionary into window and hash */
+    avail = strm->avail_in;
+    next = strm->next_in;
+    strm->avail_in = dictLength;
+    strm->next_in = (z_const Bytef *)dictionary;
+    fill_window(s);
+    while (s->lookahead >= MIN_MATCH) {
+        str = s->strstart;
+        n = s->lookahead - (MIN_MATCH-1);
+        do {
+            UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+            s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+            s->head[s->ins_h] = (Pos)str;
+            str++;
+        } while (--n);
+        s->strstart = str;
+        s->lookahead = MIN_MATCH-1;
+        fill_window(s);
     }
-    if (hash_head) hash_head = 0;  /* to make compiler happy */
+    s->strstart += s->lookahead;
+    s->block_start = (long)s->strstart;
+    s->insert = s->lookahead;
+    s->lookahead = 0;
+    s->match_length = s->prev_length = MIN_MATCH-1;
+    s->match_available = 0;
+    strm->next_in = next;
+    strm->avail_in = avail;
+    s->wrap = wrap;
     return Z_OK;
 }
 
 /* ========================================================================= */
-int ZEXPORT deflateReset (strm)
+int ZEXPORT deflateResetKeep (strm)
     z_streamp strm;
 {
     deflate_state *s;
@@ -380,12 +419,23 @@
     s->last_flush = Z_NO_FLUSH;
 
     _tr_init(s);
-    lm_init(s);
 
     return Z_OK;
 }
 
 /* ========================================================================= */
+int ZEXPORT deflateReset (strm)
+    z_streamp strm;
+{
+    int ret;
+
+    ret = deflateResetKeep(strm);
+    if (ret == Z_OK)
+        lm_init(strm->state);
+    return ret;
+}
+
+/* ========================================================================= */
 int ZEXPORT deflateSetHeader (strm, head)
     z_streamp strm;
     gz_headerp head;
@@ -397,14 +447,42 @@
 }
 
 /* ========================================================================= */
+int ZEXPORT deflatePending (strm, pending, bits)
+    unsigned *pending;
+    int *bits;
+    z_streamp strm;
+{
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (pending != Z_NULL)
+        *pending = strm->state->pending;
+    if (bits != Z_NULL)
+        *bits = strm->state->bi_valid;
+    return Z_OK;
+}
+
+/* ========================================================================= */
 int ZEXPORT deflatePrime (strm, bits, value)
     z_streamp strm;
     int bits;
     int value;
 {
+    deflate_state *s;
+    int put;
+
     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    strm->state->bi_valid = bits;
-    strm->state->bi_buf = (ush)(value & ((1 << bits) - 1));
+    s = strm->state;
+    if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+        return Z_BUF_ERROR;
+    do {
+        put = Buf_size - s->bi_valid;
+        if (put > bits)
+            put = bits;
+        s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
+        s->bi_valid += put;
+        _tr_flush_bits(s);
+        value >>= put;
+        bits -= put;
+    } while (bits);
     return Z_OK;
 }
 
@@ -435,6 +513,8 @@
         strm->total_in != 0) {
         /* Flush the last buffer: */
         err = deflate(strm, Z_BLOCK);
+        if (err == Z_BUF_ERROR && s->pending == 0)
+            err = Z_OK;
     }
     if (s->level != level) {
         s->level = level;
@@ -562,19 +642,22 @@
 local void flush_pending(strm)
     z_streamp strm;
 {
-    unsigned len = strm->state->pending;
+    unsigned len;
+    deflate_state *s = strm->state;
 
+    _tr_flush_bits(s);
+    len = s->pending;
     if (len > strm->avail_out) len = strm->avail_out;
     if (len == 0) return;
 
-    zmemcpy(strm->next_out, strm->state->pending_out, len);
+    zmemcpy(strm->next_out, s->pending_out, len);
     strm->next_out  += len;
-    strm->state->pending_out  += len;
+    s->pending_out  += len;
     strm->total_out += len;
     strm->avail_out  -= len;
-    strm->state->pending -= len;
-    if (strm->state->pending == 0) {
-        strm->state->pending_out = strm->state->pending_buf;
+    s->pending -= len;
+    if (s->pending == 0) {
+        s->pending_out = s->pending_buf;
     }
 }
 
@@ -801,7 +884,7 @@
      * flushes. For repeated and useless calls with Z_FINISH, we keep
      * returning Z_STREAM_END instead of Z_BUF_ERROR.
      */
-    } else if (strm->avail_in == 0 && flush <= old_flush &&
+    } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
                flush != Z_FINISH) {
         ERR_RETURN(strm, Z_BUF_ERROR);
     }
@@ -850,6 +933,7 @@
                     if (s->lookahead == 0) {
                         s->strstart = 0;
                         s->block_start = 0L;
+                        s->insert = 0;
                     }
                 }
             }
@@ -945,12 +1029,12 @@
 
     ss = source->state;
 
-    zmemcpy(dest, source, sizeof(z_stream));
+    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
 
     ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
     if (ds == Z_NULL) return Z_MEM_ERROR;
     dest->state = (struct internal_state FAR *) ds;
-    zmemcpy(ds, ss, sizeof(deflate_state));
+    zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
     ds->strm = dest;
 
     ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
@@ -966,8 +1050,8 @@
     }
     /* following zmemcpy do not work for 16-bit MSDOS */
     zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
-    zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
-    zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
+    zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
+    zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
     zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
 
     ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
@@ -1001,15 +1085,15 @@
 
     strm->avail_in  -= len;
 
+    zmemcpy(buf, strm->next_in, len);
     if (strm->state->wrap == 1) {
-        strm->adler = adler32(strm->adler, strm->next_in, len);
+        strm->adler = adler32(strm->adler, buf, len);
     }
 #ifdef GZIP
     else if (strm->state->wrap == 2) {
-        strm->adler = crc32(strm->adler, strm->next_in, len);
+        strm->adler = crc32(strm->adler, buf, len);
     }
 #endif
-    zmemcpy(buf, strm->next_in, len);
     strm->next_in  += len;
     strm->total_in += len;
 
@@ -1036,6 +1120,7 @@
     s->strstart = 0;
     s->block_start = 0L;
     s->lookahead = 0;
+    s->insert = 0;
     s->match_length = s->prev_length = MIN_MATCH-1;
     s->match_available = 0;
     s->ins_h = 0;
@@ -1310,6 +1395,8 @@
     unsigned more;    /* Amount of free space at the end of the window. */
     uInt wsize = s->w_size;
 
+    Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
     do {
         more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
 
@@ -1362,7 +1449,7 @@
 #endif
             more += wsize;
         }
-        if (s->strm->avail_in == 0) return;
+        if (s->strm->avail_in == 0) break;
 
         /* If there was no sliding:
          *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
@@ -1381,12 +1468,24 @@
         s->lookahead += n;
 
         /* Initialize the hash value now that we have some input: */
-        if (s->lookahead >= MIN_MATCH) {
-            s->ins_h = s->window[s->strstart];
-            UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
+        if (s->lookahead + s->insert >= MIN_MATCH) {
+            uInt str = s->strstart - s->insert;
+            s->ins_h = s->window[str];
+            UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
 #if MIN_MATCH != 3
             Call UPDATE_HASH() MIN_MATCH-3 more times
 #endif
+            while (s->insert) {
+                UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+                s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+                s->head[s->ins_h] = (Pos)str;
+                str++;
+                s->insert--;
+                if (s->lookahead + s->insert < MIN_MATCH)
+                    break;
+            }
         }
         /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
          * but this is not important since only literal bytes will be emitted.
@@ -1427,6 +1526,9 @@
             s->high_water += init;
         }
     }
+
+    Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+           "not enough room for search");
 }
 
 /* ===========================================================================
@@ -1506,8 +1608,14 @@
             FLUSH_BLOCK(s, 0);
         }
     }
-    FLUSH_BLOCK(s, flush == Z_FINISH);
-    return flush == Z_FINISH ? finish_done : block_done;
+    s->insert = 0;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if ((long)s->strstart > s->block_start)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
 }
 
 /* ===========================================================================
@@ -1603,8 +1711,14 @@
         }
         if (bflush) FLUSH_BLOCK(s, 0);
     }
-    FLUSH_BLOCK(s, flush == Z_FINISH);
-    return flush == Z_FINISH ? finish_done : block_done;
+    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
 }
 
 #ifndef FASTEST
@@ -1728,8 +1842,14 @@
         _tr_tally_lit(s, s->window[s->strstart-1], bflush);
         s->match_available = 0;
     }
-    FLUSH_BLOCK(s, flush == Z_FINISH);
-    return flush == Z_FINISH ? finish_done : block_done;
+    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
 }
 #endif /* FASTEST */
 
@@ -1749,11 +1869,11 @@
     for (;;) {
         /* Make sure that we always have enough lookahead, except
          * at the end of the input file. We need MAX_MATCH bytes
-         * for the longest encodable run.
+         * for the longest run, plus one for the unrolled loop.
          */
-        if (s->lookahead < MAX_MATCH) {
+        if (s->lookahead <= MAX_MATCH) {
             fill_window(s);
-            if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) {
+            if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
                 return need_more;
             }
             if (s->lookahead == 0) break; /* flush the current block */
@@ -1776,6 +1896,7 @@
                 if (s->match_length > s->lookahead)
                     s->match_length = s->lookahead;
             }
+            Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
         }
 
         /* Emit match if have run of MIN_MATCH or longer, else emit literal */
@@ -1796,8 +1917,14 @@
         }
         if (bflush) FLUSH_BLOCK(s, 0);
     }
-    FLUSH_BLOCK(s, flush == Z_FINISH);
-    return flush == Z_FINISH ? finish_done : block_done;
+    s->insert = 0;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
 }
 
 /* ===========================================================================
@@ -1829,6 +1956,12 @@
         s->strstart++;
         if (bflush) FLUSH_BLOCK(s, 0);
     }
-    FLUSH_BLOCK(s, flush == Z_FINISH);
-    return flush == Z_FINISH ? finish_done : block_done;
+    s->insert = 0;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
 }
diff --git a/Modules/zlib/deflate.h b/Modules/zlib/deflate.h
index cbf0d1e..ce0299e 100644
--- a/Modules/zlib/deflate.h
+++ b/Modules/zlib/deflate.h
@@ -1,5 +1,5 @@
 /* deflate.h -- internal compression state
- * Copyright (C) 1995-2010 Jean-loup Gailly
+ * Copyright (C) 1995-2012 Jean-loup Gailly
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -48,6 +48,9 @@
 #define MAX_BITS 15
 /* All codes must not exceed MAX_BITS bits */
 
+#define Buf_size 16
+/* size of bit buffer in bi_buf */
+
 #define INIT_STATE    42
 #define EXTRA_STATE   69
 #define NAME_STATE    73
@@ -101,7 +104,7 @@
     int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */
     gz_headerp  gzhead;  /* gzip header information to write */
     uInt   gzindex;      /* where in extra, name, or comment */
-    Byte  method;        /* STORED (for zip only) or DEFLATED */
+    Byte  method;        /* can only be DEFLATED */
     int   last_flush;    /* value of flush param for previous deflate call */
 
                 /* used by deflate.c: */
@@ -188,7 +191,7 @@
     int nice_match; /* Stop searching when current match exceeds this */
 
                 /* used by trees.c: */
-    /* Didn't use ct_data typedef below to supress compiler warning */
+    /* Didn't use ct_data typedef below to suppress compiler warning */
     struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
     struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
     struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
@@ -244,7 +247,7 @@
     ulg opt_len;        /* bit length of current block with optimal trees */
     ulg static_len;     /* bit length of current block with static trees */
     uInt matches;       /* number of string matches in current block */
-    int last_eob_len;   /* bit length of EOB code for last block */
+    uInt insert;        /* bytes at end of window left to insert */
 
 #ifdef DEBUG
     ulg compressed_len; /* total bit length of compressed file mod 2^32 */
@@ -294,6 +297,7 @@
 int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
 void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
                         ulg stored_len, int last));
+void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
 void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
 void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
                         ulg stored_len, int last));
diff --git a/Modules/zlib/example.c b/Modules/zlib/example.c
index 604736f..138a699 100644
--- a/Modules/zlib/example.c
+++ b/Modules/zlib/example.c
@@ -1,5 +1,5 @@
 /* example.c -- usage example of the zlib compression library
- * Copyright (C) 1995-2006 Jean-loup Gailly.
+ * Copyright (C) 1995-2006, 2011 Jean-loup Gailly.
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -26,7 +26,7 @@
     } \
 }
 
-const char hello[] = "hello, hello!";
+z_const char hello[] = "hello, hello!";
 /* "hello world" would be more standard, but the repeated "hello"
  * stresses the compression code better, sorry...
  */
@@ -34,10 +34,6 @@
 const char dictionary[] = "hello";
 uLong dictId; /* Adler32 value of the dictionary */
 
-void test_compress      OF((Byte *compr, uLong comprLen,
-                            Byte *uncompr, uLong uncomprLen));
-void test_gzio          OF((const char *fname,
-                            Byte *uncompr, uLong uncomprLen));
 void test_deflate       OF((Byte *compr, uLong comprLen));
 void test_inflate       OF((Byte *compr, uLong comprLen,
                             Byte *uncompr, uLong uncomprLen));
@@ -53,6 +49,39 @@
                             Byte *uncompr, uLong uncomprLen));
 int  main               OF((int argc, char *argv[]));
 
+
+#ifdef Z_SOLO
+
+void *myalloc OF((void *, unsigned, unsigned));
+void myfree OF((void *, void *));
+
+void *myalloc(q, n, m)
+    void *q;
+    unsigned n, m;
+{
+    q = Z_NULL;
+    return calloc(n, m);
+}
+
+void myfree(void *q, void *p)
+{
+    q = Z_NULL;
+    free(p);
+}
+
+static alloc_func zalloc = myalloc;
+static free_func zfree = myfree;
+
+#else /* !Z_SOLO */
+
+static alloc_func zalloc = (alloc_func)0;
+static free_func zfree = (free_func)0;
+
+void test_compress      OF((Byte *compr, uLong comprLen,
+                            Byte *uncompr, uLong uncomprLen));
+void test_gzio          OF((const char *fname,
+                            Byte *uncompr, uLong uncomprLen));
+
 /* ===========================================================================
  * Test compress() and uncompress()
  */
@@ -163,6 +192,8 @@
 #endif
 }
 
+#endif /* Z_SOLO */
+
 /* ===========================================================================
  * Test deflate() with small buffers
  */
@@ -174,14 +205,14 @@
     int err;
     uLong len = (uLong)strlen(hello)+1;
 
-    c_stream.zalloc = (alloc_func)0;
-    c_stream.zfree = (free_func)0;
+    c_stream.zalloc = zalloc;
+    c_stream.zfree = zfree;
     c_stream.opaque = (voidpf)0;
 
     err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
     CHECK_ERR(err, "deflateInit");
 
-    c_stream.next_in  = (Bytef*)hello;
+    c_stream.next_in  = (z_const unsigned char *)hello;
     c_stream.next_out = compr;
 
     while (c_stream.total_in != len && c_stream.total_out < comprLen) {
@@ -213,8 +244,8 @@
 
     strcpy((char*)uncompr, "garbage");
 
-    d_stream.zalloc = (alloc_func)0;
-    d_stream.zfree = (free_func)0;
+    d_stream.zalloc = zalloc;
+    d_stream.zfree = zfree;
     d_stream.opaque = (voidpf)0;
 
     d_stream.next_in  = compr;
@@ -252,8 +283,8 @@
     z_stream c_stream; /* compression stream */
     int err;
 
-    c_stream.zalloc = (alloc_func)0;
-    c_stream.zfree = (free_func)0;
+    c_stream.zalloc = zalloc;
+    c_stream.zfree = zfree;
     c_stream.opaque = (voidpf)0;
 
     err = deflateInit(&c_stream, Z_BEST_SPEED);
@@ -309,8 +340,8 @@
 
     strcpy((char*)uncompr, "garbage");
 
-    d_stream.zalloc = (alloc_func)0;
-    d_stream.zfree = (free_func)0;
+    d_stream.zalloc = zalloc;
+    d_stream.zfree = zfree;
     d_stream.opaque = (voidpf)0;
 
     d_stream.next_in  = compr;
@@ -349,14 +380,14 @@
     int err;
     uInt len = (uInt)strlen(hello)+1;
 
-    c_stream.zalloc = (alloc_func)0;
-    c_stream.zfree = (free_func)0;
+    c_stream.zalloc = zalloc;
+    c_stream.zfree = zfree;
     c_stream.opaque = (voidpf)0;
 
     err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
     CHECK_ERR(err, "deflateInit");
 
-    c_stream.next_in  = (Bytef*)hello;
+    c_stream.next_in  = (z_const unsigned char *)hello;
     c_stream.next_out = compr;
     c_stream.avail_in = 3;
     c_stream.avail_out = (uInt)*comprLen;
@@ -388,8 +419,8 @@
 
     strcpy((char*)uncompr, "garbage");
 
-    d_stream.zalloc = (alloc_func)0;
-    d_stream.zfree = (free_func)0;
+    d_stream.zalloc = zalloc;
+    d_stream.zfree = zfree;
     d_stream.opaque = (voidpf)0;
 
     d_stream.next_in  = compr;
@@ -430,22 +461,22 @@
     z_stream c_stream; /* compression stream */
     int err;
 
-    c_stream.zalloc = (alloc_func)0;
-    c_stream.zfree = (free_func)0;
+    c_stream.zalloc = zalloc;
+    c_stream.zfree = zfree;
     c_stream.opaque = (voidpf)0;
 
     err = deflateInit(&c_stream, Z_BEST_COMPRESSION);
     CHECK_ERR(err, "deflateInit");
 
     err = deflateSetDictionary(&c_stream,
-                               (const Bytef*)dictionary, sizeof(dictionary));
+                (const Bytef*)dictionary, (int)sizeof(dictionary));
     CHECK_ERR(err, "deflateSetDictionary");
 
     dictId = c_stream.adler;
     c_stream.next_out = compr;
     c_stream.avail_out = (uInt)comprLen;
 
-    c_stream.next_in = (Bytef*)hello;
+    c_stream.next_in = (z_const unsigned char *)hello;
     c_stream.avail_in = (uInt)strlen(hello)+1;
 
     err = deflate(&c_stream, Z_FINISH);
@@ -469,8 +500,8 @@
 
     strcpy((char*)uncompr, "garbage");
 
-    d_stream.zalloc = (alloc_func)0;
-    d_stream.zfree = (free_func)0;
+    d_stream.zalloc = zalloc;
+    d_stream.zfree = zfree;
     d_stream.opaque = (voidpf)0;
 
     d_stream.next_in  = compr;
@@ -491,7 +522,7 @@
                 exit(1);
             }
             err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,
-                                       sizeof(dictionary));
+                                       (int)sizeof(dictionary));
         }
         CHECK_ERR(err, "inflate with dict");
     }
@@ -540,10 +571,15 @@
         printf("out of memory\n");
         exit(1);
     }
+
+#ifdef Z_SOLO
+    argc = strlen(argv[0]);
+#else
     test_compress(compr, comprLen, uncompr, uncomprLen);
 
     test_gzio((argc > 1 ? argv[1] : TESTFILE),
               uncompr, uncomprLen);
+#endif
 
     test_deflate(compr, comprLen);
     test_inflate(compr, comprLen, uncompr, uncomprLen);
diff --git a/Modules/zlib/gzguts.h b/Modules/zlib/gzguts.h
index 0f8fb79..d87659d 100644
--- a/Modules/zlib/gzguts.h
+++ b/Modules/zlib/gzguts.h
@@ -1,5 +1,5 @@
 /* gzguts.h -- zlib internal header definitions for gz* operations
- * Copyright (C) 2004, 2005, 2010 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -12,7 +12,7 @@
 #  endif
 #endif
 
-#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)
+#ifdef HAVE_HIDDEN
 #  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
 #else
 #  define ZLIB_INTERNAL
@@ -27,13 +27,80 @@
 #endif
 #include <fcntl.h>
 
+#ifdef _WIN32
+#  include <stddef.h>
+#endif
+
+#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
+#  include <io.h>
+#endif
+
+#ifdef WINAPI_FAMILY
+#  define open _open
+#  define read _read
+#  define write _write
+#  define close _close
+#endif
+
 #ifdef NO_DEFLATE       /* for compatibility with old definition */
 #  define NO_GZCOMPRESS
 #endif
 
+#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
+#  ifndef HAVE_VSNPRINTF
+#    define HAVE_VSNPRINTF
+#  endif
+#endif
+
+#if defined(__CYGWIN__)
+#  ifndef HAVE_VSNPRINTF
+#    define HAVE_VSNPRINTF
+#  endif
+#endif
+
+#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
+#  ifndef HAVE_VSNPRINTF
+#    define HAVE_VSNPRINTF
+#  endif
+#endif
+
+#ifndef HAVE_VSNPRINTF
+#  ifdef MSDOS
+/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
+   but for now we just assume it doesn't. */
+#    define NO_vsnprintf
+#  endif
+#  ifdef __TURBOC__
+#    define NO_vsnprintf
+#  endif
+#  ifdef WIN32
+/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
+#    if !defined(vsnprintf) && !defined(NO_vsnprintf)
+#      if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
+#         define vsnprintf _vsnprintf
+#      endif
+#    endif
+#  endif
+#  ifdef __SASC
+#    define NO_vsnprintf
+#  endif
+#  ifdef VMS
+#    define NO_vsnprintf
+#  endif
+#  ifdef __OS400__
+#    define NO_vsnprintf
+#  endif
+#  ifdef __MVS__
+#    define NO_vsnprintf
+#  endif
+#endif
+
+/* unlike snprintf (which is required in C99, yet still not supported by
+   Microsoft more than a decade later!), _snprintf does not guarantee null
+   termination of the result -- however this is only used in gzlib.c where
+   the result is assured to fit in the space provided */
 #ifdef _MSC_VER
-#  include <io.h>
-#  define vsnprintf _vsnprintf
+#  define snprintf _snprintf
 #endif
 
 #ifndef local
@@ -52,7 +119,7 @@
 #  include <windows.h>
 #  define zstrerror() gz_strwinerror((DWORD)GetLastError())
 #else
-#  ifdef STDC
+#  ifndef NO_STRERROR
 #    include <errno.h>
 #    define zstrerror() strerror(errno)
 #  else
@@ -68,7 +135,15 @@
     ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
 #endif
 
-/* default i/o buffer size -- double this for output when reading */
+/* default memLevel */
+#if MAX_MEM_LEVEL >= 8
+#  define DEF_MEM_LEVEL 8
+#else
+#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+#endif
+
+/* default i/o buffer size -- double this for output when reading (this and
+   twice this must be able to fit in an unsigned type) */
 #define GZBUFSIZE 8192
 
 /* gzip modes, also provide a little integrity check on the passed structure */
@@ -84,23 +159,25 @@
 
 /* internal gzip file state data structure */
 typedef struct {
+        /* exposed contents for gzgetc() macro */
+    struct gzFile_s x;      /* "x" for exposed */
+                            /* x.have: number of bytes available at x.next */
+                            /* x.next: next output data to deliver or write */
+                            /* x.pos: current position in uncompressed data */
         /* used for both reading and writing */
     int mode;               /* see gzip modes above */
     int fd;                 /* file descriptor */
     char *path;             /* path or fd for error messages */
-    z_off64_t pos;          /* current position in uncompressed data */
     unsigned size;          /* buffer size, zero if not allocated yet */
     unsigned want;          /* requested buffer size, default is GZBUFSIZE */
     unsigned char *in;      /* input buffer */
     unsigned char *out;     /* output buffer (double-sized when reading) */
-    unsigned char *next;    /* next output data to deliver or write */
+    int direct;             /* 0 if processing gzip, 1 if transparent */
         /* just for reading */
-    unsigned have;          /* amount of output data unused at next */
-    int eof;                /* true if end of input file reached */
-    z_off64_t start;        /* where the gzip data started, for rewinding */
-    z_off64_t raw;          /* where the raw data started, for seeking */
     int how;                /* 0: get header, 1: copy, 2: decompress */
-    int direct;             /* true if last read direct, false if gzip */
+    z_off64_t start;        /* where the gzip data started, for rewinding */
+    int eof;                /* true if end of input file reached */
+    int past;               /* true if read requested past end */
         /* just for writing */
     int level;              /* compression level */
     int strategy;           /* compression strategy */
diff --git a/Modules/zlib/gzio.c b/Modules/zlib/gzio.c
deleted file mode 100644
index 7e90f49..0000000
--- a/Modules/zlib/gzio.c
+++ /dev/null
@@ -1,1026 +0,0 @@
-/* gzio.c -- IO on .gz files
- * Copyright (C) 1995-2005 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- *
- * Compile this file with -DNO_GZCOMPRESS to avoid the compression code.
- */
-
-/* @(#) $Id$ */
-
-#include <stdio.h>
-
-#include "zutil.h"
-
-#ifdef NO_DEFLATE       /* for compatibility with old definition */
-#  define NO_GZCOMPRESS
-#endif
-
-#ifndef NO_DUMMY_DECL
-struct internal_state {int dummy;}; /* for buggy compilers */
-#endif
-
-#ifndef Z_BUFSIZE
-#  ifdef MAXSEG_64K
-#    define Z_BUFSIZE 4096 /* minimize memory usage for 16-bit DOS */
-#  else
-#    define Z_BUFSIZE 16384
-#  endif
-#endif
-#ifndef Z_PRINTF_BUFSIZE
-#  define Z_PRINTF_BUFSIZE 4096
-#endif
-
-#ifdef __MVS__
-#  pragma map (fdopen , "\174\174FDOPEN")
-   FILE *fdopen(int, const char *);
-#endif
-
-#ifndef STDC
-extern voidp  malloc OF((uInt size));
-extern void   free   OF((voidpf ptr));
-#endif
-
-#define ALLOC(size) malloc(size)
-#define TRYFREE(p) {if (p) free(p);}
-
-static int const gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */
-
-/* gzip flag byte */
-#define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */
-#define HEAD_CRC     0x02 /* bit 1 set: header CRC present */
-#define EXTRA_FIELD  0x04 /* bit 2 set: extra field present */
-#define ORIG_NAME    0x08 /* bit 3 set: original file name present */
-#define COMMENT      0x10 /* bit 4 set: file comment present */
-#define RESERVED     0xE0 /* bits 5..7: reserved */
-
-typedef struct gz_stream {
-    z_stream stream;
-    int      z_err;   /* error code for last stream operation */
-    int      z_eof;   /* set if end of input file */
-    FILE     *file;   /* .gz file */
-    Byte     *inbuf;  /* input buffer */
-    Byte     *outbuf; /* output buffer */
-    uLong    crc;     /* crc32 of uncompressed data */
-    char     *msg;    /* error message */
-    char     *path;   /* path name for debugging only */
-    int      transparent; /* 1 if input file is not a .gz file */
-    char     mode;    /* 'w' or 'r' */
-    z_off_t  start;   /* start of compressed data in file (header skipped) */
-    z_off_t  in;      /* bytes into deflate or inflate */
-    z_off_t  out;     /* bytes out of deflate or inflate */
-    int      back;    /* one character push-back */
-    int      last;    /* true if push-back is last character */
-} gz_stream;
-
-
-local gzFile gz_open      OF((const char *path, const char *mode, int  fd));
-local int do_flush        OF((gzFile file, int flush));
-local int    get_byte     OF((gz_stream *s));
-local void   check_header OF((gz_stream *s));
-local int    destroy      OF((gz_stream *s));
-local void   putLong      OF((FILE *file, uLong x));
-local uLong  getLong      OF((gz_stream *s));
-
-/* ===========================================================================
-     Opens a gzip (.gz) file for reading or writing. The mode parameter
-   is as in fopen ("rb" or "wb"). The file is given either by file descriptor
-   or path name (if fd == -1).
-     gz_open returns NULL if the file could not be opened or if there was
-   insufficient memory to allocate the (de)compression state; errno
-   can be checked to distinguish the two cases (if errno is zero, the
-   zlib error is Z_MEM_ERROR).
-*/
-local gzFile gz_open (path, mode, fd)
-    const char *path;
-    const char *mode;
-    int  fd;
-{
-    int err;
-    int level = Z_DEFAULT_COMPRESSION; /* compression level */
-    int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */
-    char *p = (char*)mode;
-    gz_stream *s;
-    char fmode[80]; /* copy of mode, without the compression level */
-    char *m = fmode;
-
-    if (!path || !mode) return Z_NULL;
-
-    s = (gz_stream *)ALLOC(sizeof(gz_stream));
-    if (!s) return Z_NULL;
-
-    s->stream.zalloc = (alloc_func)0;
-    s->stream.zfree = (free_func)0;
-    s->stream.opaque = (voidpf)0;
-    s->stream.next_in = s->inbuf = Z_NULL;
-    s->stream.next_out = s->outbuf = Z_NULL;
-    s->stream.avail_in = s->stream.avail_out = 0;
-    s->file = NULL;
-    s->z_err = Z_OK;
-    s->z_eof = 0;
-    s->in = 0;
-    s->out = 0;
-    s->back = EOF;
-    s->crc = crc32(0L, Z_NULL, 0);
-    s->msg = NULL;
-    s->transparent = 0;
-
-    s->path = (char*)ALLOC(strlen(path)+1);
-    if (s->path == NULL) {
-        return destroy(s), (gzFile)Z_NULL;
-    }
-    strcpy(s->path, path); /* do this early for debugging */
-
-    s->mode = '\0';
-    do {
-        if (*p == 'r') s->mode = 'r';
-        if (*p == 'w' || *p == 'a') s->mode = 'w';
-        if (*p >= '0' && *p <= '9') {
-            level = *p - '0';
-        } else if (*p == 'f') {
-          strategy = Z_FILTERED;
-        } else if (*p == 'h') {
-          strategy = Z_HUFFMAN_ONLY;
-        } else if (*p == 'R') {
-          strategy = Z_RLE;
-        } else {
-            *m++ = *p; /* copy the mode */
-        }
-    } while (*p++ && m != fmode + sizeof(fmode));
-    if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL;
-
-    if (s->mode == 'w') {
-#ifdef NO_GZCOMPRESS
-        err = Z_STREAM_ERROR;
-#else
-        err = deflateInit2(&(s->stream), level,
-                           Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy);
-        /* windowBits is passed < 0 to suppress zlib header */
-
-        s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
-#endif
-        if (err != Z_OK || s->outbuf == Z_NULL) {
-            return destroy(s), (gzFile)Z_NULL;
-        }
-    } else {
-        s->stream.next_in  = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE);
-
-        err = inflateInit2(&(s->stream), -MAX_WBITS);
-        /* windowBits is passed < 0 to tell that there is no zlib header.
-         * Note that in this case inflate *requires* an extra "dummy" byte
-         * after the compressed stream in order to complete decompression and
-         * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are
-         * present after the compressed stream.
-         */
-        if (err != Z_OK || s->inbuf == Z_NULL) {
-            return destroy(s), (gzFile)Z_NULL;
-        }
-    }
-    s->stream.avail_out = Z_BUFSIZE;
-
-    errno = 0;
-    s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode);
-
-    if (s->file == NULL) {
-        return destroy(s), (gzFile)Z_NULL;
-    }
-    if (s->mode == 'w') {
-        /* Write a very simple .gz header:
-         */
-        fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1],
-             Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE);
-        s->start = 10L;
-        /* We use 10L instead of ftell(s->file) to because ftell causes an
-         * fflush on some systems. This version of the library doesn't use
-         * start anyway in write mode, so this initialization is not
-         * necessary.
-         */
-    } else {
-        check_header(s); /* skip the .gz header */
-        s->start = ftell(s->file) - s->stream.avail_in;
-    }
-
-    return (gzFile)s;
-}
-
-/* ===========================================================================
-     Opens a gzip (.gz) file for reading or writing.
-*/
-gzFile ZEXPORT gzopen (path, mode)
-    const char *path;
-    const char *mode;
-{
-    return gz_open (path, mode, -1);
-}
-
-/* ===========================================================================
-     Associate a gzFile with the file descriptor fd. fd is not dup'ed here
-   to mimic the behavio(u)r of fdopen.
-*/
-gzFile ZEXPORT gzdopen (fd, mode)
-    int fd;
-    const char *mode;
-{
-    char name[46];      /* allow for up to 128-bit integers */
-
-    if (fd < 0) return (gzFile)Z_NULL;
-    sprintf(name, "<fd:%d>", fd); /* for debugging */
-
-    return gz_open (name, mode, fd);
-}
-
-/* ===========================================================================
- * Update the compression level and strategy
- */
-int ZEXPORT gzsetparams (file, level, strategy)
-    gzFile file;
-    int level;
-    int strategy;
-{
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
-
-    /* Make room to allow flushing */
-    if (s->stream.avail_out == 0) {
-
-        s->stream.next_out = s->outbuf;
-        if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
-            s->z_err = Z_ERRNO;
-        }
-        s->stream.avail_out = Z_BUFSIZE;
-    }
-
-    return deflateParams (&(s->stream), level, strategy);
-}
-
-/* ===========================================================================
-     Read a byte from a gz_stream; update next_in and avail_in. Return EOF
-   for end of file.
-   IN assertion: the stream s has been sucessfully opened for reading.
-*/
-local int get_byte(s)
-    gz_stream *s;
-{
-    if (s->z_eof) return EOF;
-    if (s->stream.avail_in == 0) {
-        errno = 0;
-        s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file);
-        if (s->stream.avail_in == 0) {
-            s->z_eof = 1;
-            if (ferror(s->file)) s->z_err = Z_ERRNO;
-            return EOF;
-        }
-        s->stream.next_in = s->inbuf;
-    }
-    s->stream.avail_in--;
-    return *(s->stream.next_in)++;
-}
-
-/* ===========================================================================
-      Check the gzip header of a gz_stream opened for reading. Set the stream
-    mode to transparent if the gzip magic header is not present; set s->err
-    to Z_DATA_ERROR if the magic header is present but the rest of the header
-    is incorrect.
-    IN assertion: the stream s has already been created sucessfully;
-       s->stream.avail_in is zero for the first time, but may be non-zero
-       for concatenated .gz files.
-*/
-local void check_header(s)
-    gz_stream *s;
-{
-    int method; /* method byte */
-    int flags;  /* flags byte */
-    uInt len;
-    int c;
-
-    /* Assure two bytes in the buffer so we can peek ahead -- handle case
-       where first byte of header is at the end of the buffer after the last
-       gzip segment */
-    len = s->stream.avail_in;
-    if (len < 2) {
-        if (len) s->inbuf[0] = s->stream.next_in[0];
-        errno = 0;
-        len = (uInt)fread(s->inbuf + len, 1, Z_BUFSIZE >> len, s->file);
-        if (len == 0 && ferror(s->file)) s->z_err = Z_ERRNO;
-        s->stream.avail_in += len;
-        s->stream.next_in = s->inbuf;
-        if (s->stream.avail_in < 2) {
-            s->transparent = s->stream.avail_in;
-            return;
-        }
-    }
-
-    /* Peek ahead to check the gzip magic header */
-    if (s->stream.next_in[0] != gz_magic[0] ||
-        s->stream.next_in[1] != gz_magic[1]) {
-        s->transparent = 1;
-        return;
-    }
-    s->stream.avail_in -= 2;
-    s->stream.next_in += 2;
-
-    /* Check the rest of the gzip header */
-    method = get_byte(s);
-    flags = get_byte(s);
-    if (method != Z_DEFLATED || (flags & RESERVED) != 0) {
-        s->z_err = Z_DATA_ERROR;
-        return;
-    }
-
-    /* Discard time, xflags and OS code: */
-    for (len = 0; len < 6; len++) (void)get_byte(s);
-
-    if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */
-        len  =  (uInt)get_byte(s);
-        len += ((uInt)get_byte(s))<<8;
-        /* len is garbage if EOF but the loop below will quit anyway */
-        while (len-- != 0 && get_byte(s) != EOF) ;
-    }
-    if ((flags & ORIG_NAME) != 0) { /* skip the original file name */
-        while ((c = get_byte(s)) != 0 && c != EOF) ;
-    }
-    if ((flags & COMMENT) != 0) {   /* skip the .gz file comment */
-        while ((c = get_byte(s)) != 0 && c != EOF) ;
-    }
-    if ((flags & HEAD_CRC) != 0) {  /* skip the header crc */
-        for (len = 0; len < 2; len++) (void)get_byte(s);
-    }
-    s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK;
-}
-
- /* ===========================================================================
- * Cleanup then free the given gz_stream. Return a zlib error code.
-   Try freeing in the reverse order of allocations.
- */
-local int destroy (s)
-    gz_stream *s;
-{
-    int err = Z_OK;
-
-    if (!s) return Z_STREAM_ERROR;
-
-    TRYFREE(s->msg);
-
-    if (s->stream.state != NULL) {
-        if (s->mode == 'w') {
-#ifdef NO_GZCOMPRESS
-            err = Z_STREAM_ERROR;
-#else
-            err = deflateEnd(&(s->stream));
-#endif
-        } else if (s->mode == 'r') {
-            err = inflateEnd(&(s->stream));
-        }
-    }
-    if (s->file != NULL && fclose(s->file)) {
-#ifdef ESPIPE
-        if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */
-#endif
-            err = Z_ERRNO;
-    }
-    if (s->z_err < 0) err = s->z_err;
-
-    TRYFREE(s->inbuf);
-    TRYFREE(s->outbuf);
-    TRYFREE(s->path);
-    TRYFREE(s);
-    return err;
-}
-
-/* ===========================================================================
-     Reads the given number of uncompressed bytes from the compressed file.
-   gzread returns the number of bytes actually read (0 for end of file).
-*/
-int ZEXPORT gzread (file, buf, len)
-    gzFile file;
-    voidp buf;
-    unsigned len;
-{
-    gz_stream *s = (gz_stream*)file;
-    Bytef *start = (Bytef*)buf; /* starting point for crc computation */
-    Byte  *next_out; /* == stream.next_out but not forced far (for MSDOS) */
-
-    if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR;
-
-    if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1;
-    if (s->z_err == Z_STREAM_END) return 0;  /* EOF */
-
-    next_out = (Byte*)buf;
-    s->stream.next_out = (Bytef*)buf;
-    s->stream.avail_out = len;
-
-    if (s->stream.avail_out && s->back != EOF) {
-        *next_out++ = s->back;
-        s->stream.next_out++;
-        s->stream.avail_out--;
-        s->back = EOF;
-        s->out++;
-        start++;
-        if (s->last) {
-            s->z_err = Z_STREAM_END;
-            return 1;
-        }
-    }
-
-    while (s->stream.avail_out != 0) {
-
-        if (s->transparent) {
-            /* Copy first the lookahead bytes: */
-            uInt n = s->stream.avail_in;
-            if (n > s->stream.avail_out) n = s->stream.avail_out;
-            if (n > 0) {
-                zmemcpy(s->stream.next_out, s->stream.next_in, n);
-                next_out += n;
-                s->stream.next_out = next_out;
-                s->stream.next_in   += n;
-                s->stream.avail_out -= n;
-                s->stream.avail_in  -= n;
-            }
-            if (s->stream.avail_out > 0) {
-                s->stream.avail_out -=
-                    (uInt)fread(next_out, 1, s->stream.avail_out, s->file);
-            }
-            len -= s->stream.avail_out;
-            s->in  += len;
-            s->out += len;
-            if (len == 0) s->z_eof = 1;
-            return (int)len;
-        }
-        if (s->stream.avail_in == 0 && !s->z_eof) {
-
-            errno = 0;
-            s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file);
-            if (s->stream.avail_in == 0) {
-                s->z_eof = 1;
-                if (ferror(s->file)) {
-                    s->z_err = Z_ERRNO;
-                    break;
-                }
-            }
-            s->stream.next_in = s->inbuf;
-        }
-        s->in += s->stream.avail_in;
-        s->out += s->stream.avail_out;
-        s->z_err = inflate(&(s->stream), Z_NO_FLUSH);
-        s->in -= s->stream.avail_in;
-        s->out -= s->stream.avail_out;
-
-        if (s->z_err == Z_STREAM_END) {
-            /* Check CRC and original size */
-            s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
-            start = s->stream.next_out;
-
-            if (getLong(s) != s->crc) {
-                s->z_err = Z_DATA_ERROR;
-            } else {
-                (void)getLong(s);
-                /* The uncompressed length returned by above getlong() may be
-                 * different from s->out in case of concatenated .gz files.
-                 * Check for such files:
-                 */
-                check_header(s);
-                if (s->z_err == Z_OK) {
-                    inflateReset(&(s->stream));
-                    s->crc = crc32(0L, Z_NULL, 0);
-                }
-            }
-        }
-        if (s->z_err != Z_OK || s->z_eof) break;
-    }
-    s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
-
-    if (len == s->stream.avail_out &&
-        (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO))
-        return -1;
-    return (int)(len - s->stream.avail_out);
-}
-
-
-/* ===========================================================================
-      Reads one byte from the compressed file. gzgetc returns this byte
-   or -1 in case of end of file or error.
-*/
-int ZEXPORT gzgetc(file)
-    gzFile file;
-{
-    unsigned char c;
-
-    return gzread(file, &c, 1) == 1 ? c : -1;
-}
-
-
-/* ===========================================================================
-      Push one byte back onto the stream.
-*/
-int ZEXPORT gzungetc(c, file)
-    int c;
-    gzFile file;
-{
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL || s->mode != 'r' || c == EOF || s->back != EOF) return EOF;
-    s->back = c;
-    s->out--;
-    s->last = (s->z_err == Z_STREAM_END);
-    if (s->last) s->z_err = Z_OK;
-    s->z_eof = 0;
-    return c;
-}
-
-
-/* ===========================================================================
-      Reads bytes from the compressed file until len-1 characters are
-   read, or a newline character is read and transferred to buf, or an
-   end-of-file condition is encountered.  The string is then terminated
-   with a null character.
-      gzgets returns buf, or Z_NULL in case of error.
-
-      The current implementation is not optimized at all.
-*/
-char * ZEXPORT gzgets(file, buf, len)
-    gzFile file;
-    char *buf;
-    int len;
-{
-    char *b = buf;
-    if (buf == Z_NULL || len <= 0) return Z_NULL;
-
-    while (--len > 0 && gzread(file, buf, 1) == 1 && *buf++ != '\n') ;
-    *buf = '\0';
-    return b == buf && len > 0 ? Z_NULL : b;
-}
-
-
-#ifndef NO_GZCOMPRESS
-/* ===========================================================================
-     Writes the given number of uncompressed bytes into the compressed file.
-   gzwrite returns the number of bytes actually written (0 in case of error).
-*/
-int ZEXPORT gzwrite (file, buf, len)
-    gzFile file;
-    voidpc buf;
-    unsigned len;
-{
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
-
-    s->stream.next_in = (Bytef*)buf;
-    s->stream.avail_in = len;
-
-    while (s->stream.avail_in != 0) {
-
-        if (s->stream.avail_out == 0) {
-
-            s->stream.next_out = s->outbuf;
-            if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
-                s->z_err = Z_ERRNO;
-                break;
-            }
-            s->stream.avail_out = Z_BUFSIZE;
-        }
-        s->in += s->stream.avail_in;
-        s->out += s->stream.avail_out;
-        s->z_err = deflate(&(s->stream), Z_NO_FLUSH);
-        s->in -= s->stream.avail_in;
-        s->out -= s->stream.avail_out;
-        if (s->z_err != Z_OK) break;
-    }
-    s->crc = crc32(s->crc, (const Bytef *)buf, len);
-
-    return (int)(len - s->stream.avail_in);
-}
-
-
-/* ===========================================================================
-     Converts, formats, and writes the args to the compressed file under
-   control of the format string, as in fprintf. gzprintf returns the number of
-   uncompressed bytes actually written (0 in case of error).
-*/
-#ifdef STDC
-#include <stdarg.h>
-
-int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...)
-{
-    char buf[Z_PRINTF_BUFSIZE];
-    va_list va;
-    int len;
-
-    buf[sizeof(buf) - 1] = 0;
-    va_start(va, format);
-#ifdef NO_vsnprintf
-#  ifdef HAS_vsprintf_void
-    (void)vsprintf(buf, format, va);
-    va_end(va);
-    for (len = 0; len < sizeof(buf); len++)
-        if (buf[len] == 0) break;
-#  else
-    len = vsprintf(buf, format, va);
-    va_end(va);
-#  endif
-#else
-#  ifdef HAS_vsnprintf_void
-    (void)vsnprintf(buf, sizeof(buf), format, va);
-    va_end(va);
-    len = strlen(buf);
-#  else
-    len = vsnprintf(buf, sizeof(buf), format, va);
-    va_end(va);
-#  endif
-#endif
-    if (len <= 0 || len >= (int)sizeof(buf) || buf[sizeof(buf) - 1] != 0)
-        return 0;
-    return gzwrite(file, buf, (unsigned)len);
-}
-#else /* not ANSI C */
-
-int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
-                       a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
-    gzFile file;
-    const char *format;
-    int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
-        a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
-{
-    char buf[Z_PRINTF_BUFSIZE];
-    int len;
-
-    buf[sizeof(buf) - 1] = 0;
-#ifdef NO_snprintf
-#  ifdef HAS_sprintf_void
-    sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,
-            a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
-    for (len = 0; len < sizeof(buf); len++)
-        if (buf[len] == 0) break;
-#  else
-    len = sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,
-                a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
-#  endif
-#else
-#  ifdef HAS_snprintf_void
-    snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,
-             a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
-    len = strlen(buf);
-#  else
-    len = snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,
-                 a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
-#  endif
-#endif
-    if (len <= 0 || len >= sizeof(buf) || buf[sizeof(buf) - 1] != 0)
-        return 0;
-    return gzwrite(file, buf, len);
-}
-#endif
-
-/* ===========================================================================
-      Writes c, converted to an unsigned char, into the compressed file.
-   gzputc returns the value that was written, or -1 in case of error.
-*/
-int ZEXPORT gzputc(file, c)
-    gzFile file;
-    int c;
-{
-    unsigned char cc = (unsigned char) c; /* required for big endian systems */
-
-    return gzwrite(file, &cc, 1) == 1 ? (int)cc : -1;
-}
-
-
-/* ===========================================================================
-      Writes the given null-terminated string to the compressed file, excluding
-   the terminating null character.
-      gzputs returns the number of characters written, or -1 in case of error.
-*/
-int ZEXPORT gzputs(file, s)
-    gzFile file;
-    const char *s;
-{
-    return gzwrite(file, (char*)s, (unsigned)strlen(s));
-}
-
-
-/* ===========================================================================
-     Flushes all pending output into the compressed file. The parameter
-   flush is as in the deflate() function.
-*/
-local int do_flush (file, flush)
-    gzFile file;
-    int flush;
-{
-    uInt len;
-    int done = 0;
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
-
-    s->stream.avail_in = 0; /* should be zero already anyway */
-
-    for (;;) {
-        len = Z_BUFSIZE - s->stream.avail_out;
-
-        if (len != 0) {
-            if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) {
-                s->z_err = Z_ERRNO;
-                return Z_ERRNO;
-            }
-            s->stream.next_out = s->outbuf;
-            s->stream.avail_out = Z_BUFSIZE;
-        }
-        if (done) break;
-        s->out += s->stream.avail_out;
-        s->z_err = deflate(&(s->stream), flush);
-        s->out -= s->stream.avail_out;
-
-        /* Ignore the second of two consecutive flushes: */
-        if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK;
-
-        /* deflate has finished flushing only when it hasn't used up
-         * all the available space in the output buffer:
-         */
-        done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END);
-
-        if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break;
-    }
-    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
-}
-
-int ZEXPORT gzflush (file, flush)
-     gzFile file;
-     int flush;
-{
-    gz_stream *s = (gz_stream*)file;
-    int err = do_flush (file, flush);
-
-    if (err) return err;
-    fflush(s->file);
-    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
-}
-#endif /* NO_GZCOMPRESS */
-
-/* ===========================================================================
-      Sets the starting position for the next gzread or gzwrite on the given
-   compressed file. The offset represents a number of bytes in the
-      gzseek returns the resulting offset location as measured in bytes from
-   the beginning of the uncompressed stream, or -1 in case of error.
-      SEEK_END is not implemented, returns error.
-      In this version of the library, gzseek can be extremely slow.
-*/
-z_off_t ZEXPORT gzseek (file, offset, whence)
-    gzFile file;
-    z_off_t offset;
-    int whence;
-{
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL || whence == SEEK_END ||
-        s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) {
-        return -1L;
-    }
-
-    if (s->mode == 'w') {
-#ifdef NO_GZCOMPRESS
-        return -1L;
-#else
-        if (whence == SEEK_SET) {
-            offset -= s->in;
-        }
-        if (offset < 0) return -1L;
-
-        /* At this point, offset is the number of zero bytes to write. */
-        if (s->inbuf == Z_NULL) {
-            s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */
-            if (s->inbuf == Z_NULL) return -1L;
-            zmemzero(s->inbuf, Z_BUFSIZE);
-        }
-        while (offset > 0)  {
-            uInt size = Z_BUFSIZE;
-            if (offset < Z_BUFSIZE) size = (uInt)offset;
-
-            size = gzwrite(file, s->inbuf, size);
-            if (size == 0) return -1L;
-
-            offset -= size;
-        }
-        return s->in;
-#endif
-    }
-    /* Rest of function is for reading only */
-
-    /* compute absolute position */
-    if (whence == SEEK_CUR) {
-        offset += s->out;
-    }
-    if (offset < 0) return -1L;
-
-    if (s->transparent) {
-        /* map to fseek */
-        s->back = EOF;
-        s->stream.avail_in = 0;
-        s->stream.next_in = s->inbuf;
-        if (fseek(s->file, offset, SEEK_SET) < 0) return -1L;
-
-        s->in = s->out = offset;
-        return offset;
-    }
-
-    /* For a negative seek, rewind and use positive seek */
-    if (offset >= s->out) {
-        offset -= s->out;
-    } else if (gzrewind(file) < 0) {
-        return -1L;
-    }
-    /* offset is now the number of bytes to skip. */
-
-    if (offset != 0 && s->outbuf == Z_NULL) {
-        s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
-        if (s->outbuf == Z_NULL) return -1L;
-    }
-    if (offset && s->back != EOF) {
-        s->back = EOF;
-        s->out++;
-        offset--;
-        if (s->last) s->z_err = Z_STREAM_END;
-    }
-    while (offset > 0)  {
-        int size = Z_BUFSIZE;
-        if (offset < Z_BUFSIZE) size = (int)offset;
-
-        size = gzread(file, s->outbuf, (uInt)size);
-        if (size <= 0) return -1L;
-        offset -= size;
-    }
-    return s->out;
-}
-
-/* ===========================================================================
-     Rewinds input file.
-*/
-int ZEXPORT gzrewind (file)
-    gzFile file;
-{
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL || s->mode != 'r') return -1;
-
-    s->z_err = Z_OK;
-    s->z_eof = 0;
-    s->back = EOF;
-    s->stream.avail_in = 0;
-    s->stream.next_in = s->inbuf;
-    s->crc = crc32(0L, Z_NULL, 0);
-    if (!s->transparent) (void)inflateReset(&s->stream);
-    s->in = 0;
-    s->out = 0;
-    return fseek(s->file, s->start, SEEK_SET);
-}
-
-/* ===========================================================================
-     Returns the starting position for the next gzread or gzwrite on the
-   given compressed file. This position represents a number of bytes in the
-   uncompressed data stream.
-*/
-z_off_t ZEXPORT gztell (file)
-    gzFile file;
-{
-    return gzseek(file, 0L, SEEK_CUR);
-}
-
-/* ===========================================================================
-     Returns 1 when EOF has previously been detected reading the given
-   input stream, otherwise zero.
-*/
-int ZEXPORT gzeof (file)
-    gzFile file;
-{
-    gz_stream *s = (gz_stream*)file;
-
-    /* With concatenated compressed files that can have embedded
-     * crc trailers, z_eof is no longer the only/best indicator of EOF
-     * on a gz_stream. Handle end-of-stream error explicitly here.
-     */
-    if (s == NULL || s->mode != 'r') return 0;
-    if (s->z_eof) return 1;
-    return s->z_err == Z_STREAM_END;
-}
-
-/* ===========================================================================
-     Returns 1 if reading and doing so transparently, otherwise zero.
-*/
-int ZEXPORT gzdirect (file)
-    gzFile file;
-{
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL || s->mode != 'r') return 0;
-    return s->transparent;
-}
-
-/* ===========================================================================
-   Outputs a long in LSB order to the given file
-*/
-local void putLong (file, x)
-    FILE *file;
-    uLong x;
-{
-    int n;
-    for (n = 0; n < 4; n++) {
-        fputc((int)(x & 0xff), file);
-        x >>= 8;
-    }
-}
-
-/* ===========================================================================
-   Reads a long in LSB order from the given gz_stream. Sets z_err in case
-   of error.
-*/
-local uLong getLong (s)
-    gz_stream *s;
-{
-    uLong x = (uLong)get_byte(s);
-    int c;
-
-    x += ((uLong)get_byte(s))<<8;
-    x += ((uLong)get_byte(s))<<16;
-    c = get_byte(s);
-    if (c == EOF) s->z_err = Z_DATA_ERROR;
-    x += ((uLong)c)<<24;
-    return x;
-}
-
-/* ===========================================================================
-     Flushes all pending output if necessary, closes the compressed file
-   and deallocates all the (de)compression state.
-*/
-int ZEXPORT gzclose (file)
-    gzFile file;
-{
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL) return Z_STREAM_ERROR;
-
-    if (s->mode == 'w') {
-#ifdef NO_GZCOMPRESS
-        return Z_STREAM_ERROR;
-#else
-        if (do_flush (file, Z_FINISH) != Z_OK)
-            return destroy((gz_stream*)file);
-
-        putLong (s->file, s->crc);
-        putLong (s->file, (uLong)(s->in & 0xffffffff));
-#endif
-    }
-    return destroy((gz_stream*)file);
-}
-
-#ifdef STDC
-#  define zstrerror(errnum) strerror(errnum)
-#else
-#  define zstrerror(errnum) ""
-#endif
-
-/* ===========================================================================
-     Returns the error message for the last error which occurred on the
-   given compressed file. errnum is set to zlib error number. If an
-   error occurred in the file system and not in the compression library,
-   errnum is set to Z_ERRNO and the application may consult errno
-   to get the exact error code.
-*/
-const char * ZEXPORT gzerror (file, errnum)
-    gzFile file;
-    int *errnum;
-{
-    char *m;
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL) {
-        *errnum = Z_STREAM_ERROR;
-        return (const char*)ERR_MSG(Z_STREAM_ERROR);
-    }
-    *errnum = s->z_err;
-    if (*errnum == Z_OK) return (const char*)"";
-
-    m = (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg);
-
-    if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err);
-
-    TRYFREE(s->msg);
-    s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3);
-    if (s->msg == Z_NULL) return (const char*)ERR_MSG(Z_MEM_ERROR);
-    strcpy(s->msg, s->path);
-    strcat(s->msg, ": ");
-    strcat(s->msg, m);
-    return (const char*)s->msg;
-}
-
-/* ===========================================================================
-     Clear the error and end-of-file flags, and do the same for the real file.
-*/
-void ZEXPORT gzclearerr (file)
-    gzFile file;
-{
-    gz_stream *s = (gz_stream*)file;
-
-    if (s == NULL) return;
-    if (s->z_err != Z_STREAM_END) s->z_err = Z_OK;
-    s->z_eof = 0;
-    clearerr(s->file);
-}
diff --git a/Modules/zlib/gzlib.c b/Modules/zlib/gzlib.c
index 603e60e..fae202e 100644
--- a/Modules/zlib/gzlib.c
+++ b/Modules/zlib/gzlib.c
@@ -1,19 +1,23 @@
 /* gzlib.c -- zlib functions common to reading and writing gzip files
- * Copyright (C) 2004, 2010 Mark Adler
+ * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
 #include "gzguts.h"
 
+#if defined(_WIN32) && !defined(__BORLANDC__)
+#  define LSEEK _lseeki64
+#else
 #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
 #  define LSEEK lseek64
 #else
 #  define LSEEK lseek
 #endif
+#endif
 
 /* Local functions */
 local void gz_reset OF((gz_statep));
-local gzFile gz_open OF((const char *, int, const char *));
+local gzFile gz_open OF((const void *, int, const char *));
 
 #if defined UNDER_CE
 
@@ -71,28 +75,40 @@
 local void gz_reset(state)
     gz_statep state;
 {
+    state->x.have = 0;              /* no output data available */
     if (state->mode == GZ_READ) {   /* for reading ... */
-        state->have = 0;            /* no output data available */
         state->eof = 0;             /* not at end of file */
+        state->past = 0;            /* have not read past end yet */
         state->how = LOOK;          /* look for gzip header */
-        state->direct = 1;          /* default for empty file */
     }
     state->seek = 0;                /* no seek request pending */
     gz_error(state, Z_OK, NULL);    /* clear error */
-    state->pos = 0;                 /* no uncompressed data yet */
+    state->x.pos = 0;               /* no uncompressed data yet */
     state->strm.avail_in = 0;       /* no input data yet */
 }
 
 /* Open a gzip file either by name or file descriptor. */
 local gzFile gz_open(path, fd, mode)
-    const char *path;
+    const void *path;
     int fd;
     const char *mode;
 {
     gz_statep state;
+    size_t len;
+    int oflag;
+#ifdef O_CLOEXEC
+    int cloexec = 0;
+#endif
+#ifdef O_EXCL
+    int exclusive = 0;
+#endif
+
+    /* check input */
+    if (path == NULL)
+        return NULL;
 
     /* allocate gzFile structure to return */
-    state = malloc(sizeof(gz_state));
+    state = (gz_statep)malloc(sizeof(gz_state));
     if (state == NULL)
         return NULL;
     state->size = 0;            /* no buffers allocated yet */
@@ -103,6 +119,7 @@
     state->mode = GZ_NONE;
     state->level = Z_DEFAULT_COMPRESSION;
     state->strategy = Z_DEFAULT_STRATEGY;
+    state->direct = 0;
     while (*mode) {
         if (*mode >= '0' && *mode <= '9')
             state->level = *mode - '0';
@@ -124,6 +141,16 @@
                 return NULL;
             case 'b':       /* ignore -- will request binary anyway */
                 break;
+#ifdef O_CLOEXEC
+            case 'e':
+                cloexec = 1;
+                break;
+#endif
+#ifdef O_EXCL
+            case 'x':
+                exclusive = 1;
+                break;
+#endif
             case 'f':
                 state->strategy = Z_FILTERED;
                 break;
@@ -135,6 +162,10 @@
                 break;
             case 'F':
                 state->strategy = Z_FIXED;
+                break;
+            case 'T':
+                state->direct = 1;
+                break;
             default:        /* could consider as an error, but just ignore */
                 ;
             }
@@ -147,30 +178,71 @@
         return NULL;
     }
 
+    /* can't force transparent read */
+    if (state->mode == GZ_READ) {
+        if (state->direct) {
+            free(state);
+            return NULL;
+        }
+        state->direct = 1;      /* for empty file */
+    }
+
     /* save the path name for error messages */
-    state->path = malloc(strlen(path) + 1);
+#ifdef _WIN32
+    if (fd == -2) {
+        len = wcstombs(NULL, path, 0);
+        if (len == (size_t)-1)
+            len = 0;
+    }
+    else
+#endif
+        len = strlen((const char *)path);
+    state->path = (char *)malloc(len + 1);
     if (state->path == NULL) {
         free(state);
         return NULL;
     }
-    strcpy(state->path, path);
+#ifdef _WIN32
+    if (fd == -2)
+        if (len)
+            wcstombs(state->path, path, len + 1);
+        else
+            *(state->path) = 0;
+    else
+#endif
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+        snprintf(state->path, len + 1, "%s", (const char *)path);
+#else
+        strcpy(state->path, path);
+#endif
 
-    /* open the file with the appropriate mode (or just use fd) */
-    state->fd = fd != -1 ? fd :
-        open(path,
+    /* compute the flags for open() */
+    oflag =
 #ifdef O_LARGEFILE
-            O_LARGEFILE |
+        O_LARGEFILE |
 #endif
 #ifdef O_BINARY
-            O_BINARY |
+        O_BINARY |
 #endif
-            (state->mode == GZ_READ ?
-                O_RDONLY :
-                (O_WRONLY | O_CREAT | (
-                    state->mode == GZ_WRITE ?
-                        O_TRUNC :
-                        O_APPEND))),
-            0666);
+#ifdef O_CLOEXEC
+        (cloexec ? O_CLOEXEC : 0) |
+#endif
+        (state->mode == GZ_READ ?
+         O_RDONLY :
+         (O_WRONLY | O_CREAT |
+#ifdef O_EXCL
+          (exclusive ? O_EXCL : 0) |
+#endif
+          (state->mode == GZ_WRITE ?
+           O_TRUNC :
+           O_APPEND)));
+
+    /* open the file with the appropriate flags (or just use fd) */
+    state->fd = fd > -1 ? fd : (
+#ifdef _WIN32
+        fd == -2 ? _wopen(path, oflag, 0666) :
+#endif
+        open((const char *)path, oflag, 0666));
     if (state->fd == -1) {
         free(state->path);
         free(state);
@@ -216,15 +288,29 @@
     char *path;         /* identifier for error messages */
     gzFile gz;
 
-    if (fd == -1 || (path = malloc(7 + 3 * sizeof(int))) == NULL)
+    if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
         return NULL;
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+    snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
+#else
     sprintf(path, "<fd:%d>", fd);   /* for debugging */
+#endif
     gz = gz_open(path, fd, mode);
     free(path);
     return gz;
 }
 
 /* -- see zlib.h -- */
+#ifdef _WIN32
+gzFile ZEXPORT gzopen_w(path, mode)
+    const wchar_t *path;
+    const char *mode;
+{
+    return gz_open(path, -2, mode);
+}
+#endif
+
+/* -- see zlib.h -- */
 int ZEXPORT gzbuffer(file, size)
     gzFile file;
     unsigned size;
@@ -243,8 +329,8 @@
         return -1;
 
     /* check and set requested size */
-    if (size == 0)
-        return -1;
+    if (size < 2)
+        size = 2;               /* need two bytes to check magic header */
     state->want = size;
     return 0;
 }
@@ -261,7 +347,8 @@
     state = (gz_statep)file;
 
     /* check that we're reading and that there's no error */
-    if (state->mode != GZ_READ || state->err != Z_OK)
+    if (state->mode != GZ_READ ||
+            (state->err != Z_OK && state->err != Z_BUF_ERROR))
         return -1;
 
     /* back up and start over */
@@ -289,7 +376,7 @@
         return -1;
 
     /* check that there's no error */
-    if (state->err != Z_OK)
+    if (state->err != Z_OK && state->err != Z_BUF_ERROR)
         return -1;
 
     /* can only seek from start or relative to current position */
@@ -298,31 +385,32 @@
 
     /* normalize offset to a SEEK_CUR specification */
     if (whence == SEEK_SET)
-        offset -= state->pos;
+        offset -= state->x.pos;
     else if (state->seek)
         offset += state->skip;
     state->seek = 0;
 
     /* if within raw area while reading, just go there */
     if (state->mode == GZ_READ && state->how == COPY &&
-        state->pos + offset >= state->raw) {
-        ret = LSEEK(state->fd, offset - state->have, SEEK_CUR);
+            state->x.pos + offset >= 0) {
+        ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
         if (ret == -1)
             return -1;
-        state->have = 0;
+        state->x.have = 0;
         state->eof = 0;
+        state->past = 0;
         state->seek = 0;
         gz_error(state, Z_OK, NULL);
         state->strm.avail_in = 0;
-        state->pos += offset;
-        return state->pos;
+        state->x.pos += offset;
+        return state->x.pos;
     }
 
     /* calculate skip amount, rewinding if needed for back seek when reading */
     if (offset < 0) {
         if (state->mode != GZ_READ)         /* writing -- can't go backwards */
             return -1;
-        offset += state->pos;
+        offset += state->x.pos;
         if (offset < 0)                     /* before start of file! */
             return -1;
         if (gzrewind(file) == -1)           /* rewind, then skip to offset */
@@ -331,11 +419,11 @@
 
     /* if reading, skip what's in output buffer (one less gzgetc() check) */
     if (state->mode == GZ_READ) {
-        n = GT_OFF(state->have) || (z_off64_t)state->have > offset ?
-            (unsigned)offset : state->have;
-        state->have -= n;
-        state->next += n;
-        state->pos += n;
+        n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
+            (unsigned)offset : state->x.have;
+        state->x.have -= n;
+        state->x.next += n;
+        state->x.pos += n;
         offset -= n;
     }
 
@@ -344,7 +432,7 @@
         state->seek = 1;
         state->skip = offset;
     }
-    return state->pos + offset;
+    return state->x.pos + offset;
 }
 
 /* -- see zlib.h -- */
@@ -373,7 +461,7 @@
         return -1;
 
     /* return position */
-    return state->pos + (state->seek ? state->skip : 0);
+    return state->x.pos + (state->seek ? state->skip : 0);
 }
 
 /* -- see zlib.h -- */
@@ -433,8 +521,7 @@
         return 0;
 
     /* return end-of-file state */
-    return state->mode == GZ_READ ?
-        (state->eof && state->strm.avail_in == 0 && state->have == 0) : 0;
+    return state->mode == GZ_READ ? state->past : 0;
 }
 
 /* -- see zlib.h -- */
@@ -454,7 +541,8 @@
     /* return error information */
     if (errnum != NULL)
         *errnum = state->err;
-    return state->msg == NULL ? "" : state->msg;
+    return state->err == Z_MEM_ERROR ? "out of memory" :
+                                       (state->msg == NULL ? "" : state->msg);
 }
 
 /* -- see zlib.h -- */
@@ -471,8 +559,10 @@
         return;
 
     /* clear error and end-of-file */
-    if (state->mode == GZ_READ)
+    if (state->mode == GZ_READ) {
         state->eof = 0;
+        state->past = 0;
+    }
     gz_error(state, Z_OK, NULL);
 }
 
@@ -494,26 +584,33 @@
         state->msg = NULL;
     }
 
+    /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */
+    if (err != Z_OK && err != Z_BUF_ERROR)
+        state->x.have = 0;
+
     /* set error code, and if no message, then done */
     state->err = err;
     if (msg == NULL)
         return;
 
-    /* for an out of memory error, save as static string */
-    if (err == Z_MEM_ERROR) {
-        state->msg = (char *)msg;
+    /* for an out of memory error, return literal string when requested */
+    if (err == Z_MEM_ERROR)
         return;
-    }
 
     /* construct error message with path */
-    if ((state->msg = malloc(strlen(state->path) + strlen(msg) + 3)) == NULL) {
+    if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) ==
+            NULL) {
         state->err = Z_MEM_ERROR;
-        state->msg = (char *)"out of memory";
         return;
     }
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+    snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
+             "%s%s%s", state->path, ": ", msg);
+#else
     strcpy(state->msg, state->path);
     strcat(state->msg, ": ");
     strcat(state->msg, msg);
+#endif
     return;
 }
 
diff --git a/Modules/zlib/gzread.c b/Modules/zlib/gzread.c
index 548201a..bf4538e 100644
--- a/Modules/zlib/gzread.c
+++ b/Modules/zlib/gzread.c
@@ -1,5 +1,5 @@
 /* gzread.c -- zlib functions for reading gzip files
- * Copyright (C) 2004, 2005, 2010 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -8,10 +8,9 @@
 /* Local functions */
 local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
 local int gz_avail OF((gz_statep));
-local int gz_next4 OF((gz_statep, unsigned long *));
-local int gz_head OF((gz_statep));
+local int gz_look OF((gz_statep));
 local int gz_decomp OF((gz_statep));
-local int gz_make OF((gz_statep));
+local int gz_fetch OF((gz_statep));
 local int gz_skip OF((gz_statep, z_off64_t));
 
 /* Use read() to load a buffer -- return -1 on error, otherwise 0.  Read from
@@ -46,73 +45,54 @@
    error, 0 otherwise.  Note that the eof flag is set when the end of the input
    file is reached, even though there may be unused data in the buffer.  Once
    that data has been used, no more attempts will be made to read the file.
-   gz_avail() assumes that strm->avail_in == 0. */
+   If strm->avail_in != 0, then the current data is moved to the beginning of
+   the input buffer, and then the remainder of the buffer is loaded with the
+   available data from the input file. */
 local int gz_avail(state)
     gz_statep state;
 {
+    unsigned got;
     z_streamp strm = &(state->strm);
 
-    if (state->err != Z_OK)
+    if (state->err != Z_OK && state->err != Z_BUF_ERROR)
         return -1;
     if (state->eof == 0) {
-        if (gz_load(state, state->in, state->size,
-                (unsigned *)&(strm->avail_in)) == -1)
+        if (strm->avail_in) {       /* copy what's there to the start */
+            unsigned char *p = state->in;
+            unsigned const char *q = strm->next_in;
+            unsigned n = strm->avail_in;
+            do {
+                *p++ = *q++;
+            } while (--n);
+        }
+        if (gz_load(state, state->in + strm->avail_in,
+                    state->size - strm->avail_in, &got) == -1)
             return -1;
+        strm->avail_in += got;
         strm->next_in = state->in;
     }
     return 0;
 }
 
-/* Get next byte from input, or -1 if end or error. */
-#define NEXT() ((strm->avail_in == 0 && gz_avail(state) == -1) ? -1 : \
-                (strm->avail_in == 0 ? -1 : \
-                 (strm->avail_in--, *(strm->next_in)++)))
-
-/* Get a four-byte little-endian integer and return 0 on success and the value
-   in *ret.  Otherwise -1 is returned and *ret is not modified. */
-local int gz_next4(state, ret)
-    gz_statep state;
-    unsigned long *ret;
-{
-    int ch;
-    unsigned long val;
-    z_streamp strm = &(state->strm);
-
-    val = NEXT();
-    val += (unsigned)NEXT() << 8;
-    val += (unsigned long)NEXT() << 16;
-    ch = NEXT();
-    if (ch == -1)
-        return -1;
-    val += (unsigned long)ch << 24;
-    *ret = val;
-    return 0;
-}
-
-/* Look for gzip header, set up for inflate or copy.  state->have must be zero.
+/* Look for gzip header, set up for inflate or copy.  state->x.have must be 0.
    If this is the first time in, allocate required memory.  state->how will be
    left unchanged if there is no more input data available, will be set to COPY
    if there is no gzip header and direct copying will be performed, or it will
-   be set to GZIP for decompression, and the gzip header will be skipped so
-   that the next available input data is the raw deflate stream.  If direct
-   copying, then leftover input data from the input buffer will be copied to
-   the output buffer.  In that case, all further file reads will be directly to
-   either the output buffer or a user buffer.  If decompressing, the inflate
-   state and the check value will be initialized.  gz_head() will return 0 on
-   success or -1 on failure.  Failures may include read errors or gzip header
-   errors.  */
-local int gz_head(state)
+   be set to GZIP for decompression.  If direct copying, then leftover input
+   data from the input buffer will be copied to the output buffer.  In that
+   case, all further file reads will be directly to either the output buffer or
+   a user buffer.  If decompressing, the inflate state will be initialized.
+   gz_look() will return 0 on success or -1 on failure. */
+local int gz_look(state)
     gz_statep state;
 {
     z_streamp strm = &(state->strm);
-    int flags;
-    unsigned len;
 
     /* allocate read buffers and inflate memory */
     if (state->size == 0) {
         /* allocate buffers */
-        state->in = malloc(state->want);
-        state->out = malloc(state->want << 1);
+        state->in = (unsigned char *)malloc(state->want);
+        state->out = (unsigned char *)malloc(state->want << 1);
         if (state->in == NULL || state->out == NULL) {
             if (state->out != NULL)
                 free(state->out);
@@ -129,7 +109,7 @@
         state->strm.opaque = Z_NULL;
         state->strm.avail_in = 0;
         state->strm.next_in = Z_NULL;
-        if (inflateInit2(&(state->strm), -15) != Z_OK) {    /* raw inflate */
+        if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) {    /* gunzip */
             free(state->out);
             free(state->in);
             state->size = 0;
@@ -138,83 +118,45 @@
         }
     }
 
-    /* get some data in the input buffer */
-    if (strm->avail_in == 0) {
+    /* get at least the magic bytes in the input buffer */
+    if (strm->avail_in < 2) {
         if (gz_avail(state) == -1)
             return -1;
         if (strm->avail_in == 0)
             return 0;
     }
 
-    /* look for the gzip magic header bytes 31 and 139 */
-    if (strm->next_in[0] == 31) {
-        strm->avail_in--;
-        strm->next_in++;
-        if (strm->avail_in == 0 && gz_avail(state) == -1)
-            return -1;
-        if (strm->avail_in && strm->next_in[0] == 139) {
-            /* we have a gzip header, woo hoo! */
-            strm->avail_in--;
-            strm->next_in++;
-
-            /* skip rest of header */
-            if (NEXT() != 8) {      /* compression method */
-                gz_error(state, Z_DATA_ERROR, "unknown compression method");
-                return -1;
-            }
-            flags = NEXT();
-            if (flags & 0xe0) {     /* reserved flag bits */
-                gz_error(state, Z_DATA_ERROR, "unknown header flags set");
-                return -1;
-            }
-            NEXT();                 /* modification time */
-            NEXT();
-            NEXT();
-            NEXT();
-            NEXT();                 /* extra flags */
-            NEXT();                 /* operating system */
-            if (flags & 4) {        /* extra field */
-                len = (unsigned)NEXT();
-                len += (unsigned)NEXT() << 8;
-                while (len--)
-                    if (NEXT() < 0)
-                        break;
-            }
-            if (flags & 8)          /* file name */
-                while (NEXT() > 0)
-                    ;
-            if (flags & 16)         /* comment */
-                while (NEXT() > 0)
-                    ;
-            if (flags & 2) {        /* header crc */
-                NEXT();
-                NEXT();
-            }
-            /* an unexpected end of file is not checked for here -- it will be
-               noticed on the first request for uncompressed data */
-
-            /* set up for decompression */
-            inflateReset(strm);
-            strm->adler = crc32(0L, Z_NULL, 0);
-            state->how = GZIP;
-            state->direct = 0;
-            return 0;
-        }
-        else {
-            /* not a gzip file -- save first byte (31) and fall to raw i/o */
-            state->out[0] = 31;
-            state->have = 1;
-        }
+    /* look for gzip magic bytes -- if there, do gzip decoding (note: there is
+       a logical dilemma here when considering the case of a partially written
+       gzip file, to wit, if a single 31 byte is written, then we cannot tell
+       whether this is a single-byte file, or just a partially written gzip
+       file -- for here we assume that if a gzip file is being written, then
+       the header will be written in a single operation, so that reading a
+       single byte is sufficient indication that it is not a gzip file) */
+    if (strm->avail_in > 1 &&
+            strm->next_in[0] == 31 && strm->next_in[1] == 139) {
+        inflateReset(strm);
+        state->how = GZIP;
+        state->direct = 0;
+        return 0;
     }
 
-    /* doing raw i/o, save start of raw data for seeking, copy any leftover
-       input to output -- this assumes that the output buffer is larger than
-       the input buffer, which also assures space for gzungetc() */
-    state->raw = state->pos;
-    state->next = state->out;
+    /* no gzip header -- if we were decoding gzip before, then this is trailing
+       garbage.  Ignore the trailing garbage and finish. */
+    if (state->direct == 0) {
+        strm->avail_in = 0;
+        state->eof = 1;
+        state->x.have = 0;
+        return 0;
+    }
+
+    /* doing raw i/o, copy any leftover input to output -- this assumes that
+       the output buffer is larger than the input buffer, which also assures
+       space for gzungetc() */
+    state->x.next = state->out;
     if (strm->avail_in) {
-        memcpy(state->next + state->have, strm->next_in, strm->avail_in);
-        state->have += strm->avail_in;
+        memcpy(state->x.next, strm->next_in, strm->avail_in);
+        state->x.have = strm->avail_in;
         strm->avail_in = 0;
     }
     state->how = COPY;
@@ -223,19 +165,15 @@
 }
 
 /* Decompress from input to the provided next_out and avail_out in the state.
-   If the end of the compressed data is reached, then verify the gzip trailer
-   check value and length (modulo 2^32).  state->have and state->next are set
-   to point to the just decompressed data, and the crc is updated.  If the
-   trailer is verified, state->how is reset to LOOK to look for the next gzip
-   stream or raw data, once state->have is depleted.  Returns 0 on success, -1
-   on failure.  Failures may include invalid compressed data or a failed gzip
-   trailer verification. */
+   On return, state->x.have and state->x.next point to the just decompressed
+   data.  If the gzip stream completes, state->how is reset to LOOK to look for
+   the next gzip stream or raw data, once state->x.have is depleted.  Returns 0
+   on success, -1 on failure. */
 local int gz_decomp(state)
     gz_statep state;
 {
-    int ret;
+    int ret = Z_OK;
     unsigned had;
-    unsigned long crc, len;
     z_streamp strm = &(state->strm);
 
     /* fill output buffer up to end of deflate stream */
@@ -245,15 +183,15 @@
         if (strm->avail_in == 0 && gz_avail(state) == -1)
             return -1;
         if (strm->avail_in == 0) {
-            gz_error(state, Z_DATA_ERROR, "unexpected end of file");
-            return -1;
+            gz_error(state, Z_BUF_ERROR, "unexpected end of file");
+            break;
         }
 
         /* decompress and handle errors */
         ret = inflate(strm, Z_NO_FLUSH);
         if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
             gz_error(state, Z_STREAM_ERROR,
-                      "internal error: inflate stream corrupt");
+                     "internal error: inflate stream corrupt");
             return -1;
         }
         if (ret == Z_MEM_ERROR) {
@@ -262,67 +200,55 @@
         }
         if (ret == Z_DATA_ERROR) {              /* deflate stream invalid */
             gz_error(state, Z_DATA_ERROR,
-                      strm->msg == NULL ? "compressed data error" : strm->msg);
+                     strm->msg == NULL ? "compressed data error" : strm->msg);
             return -1;
         }
     } while (strm->avail_out && ret != Z_STREAM_END);
 
-    /* update available output and crc check value */
-    state->have = had - strm->avail_out;
-    state->next = strm->next_out - state->have;
-    strm->adler = crc32(strm->adler, state->next, state->have);
+    /* update available output */
+    state->x.have = had - strm->avail_out;
+    state->x.next = strm->next_out - state->x.have;
 
-    /* check gzip trailer if at end of deflate stream */
-    if (ret == Z_STREAM_END) {
-        if (gz_next4(state, &crc) == -1 || gz_next4(state, &len) == -1) {
-            gz_error(state, Z_DATA_ERROR, "unexpected end of file");
-            return -1;
-        }
-        if (crc != strm->adler) {
-            gz_error(state, Z_DATA_ERROR, "incorrect data check");
-            return -1;
-        }
-        if (len != (strm->total_out & 0xffffffffL)) {
-            gz_error(state, Z_DATA_ERROR, "incorrect length check");
-            return -1;
-        }
-        state->how = LOOK;      /* ready for next stream, once have is 0 (leave
-                                   state->direct unchanged to remember how) */
-    }
+    /* if the gzip stream completed successfully, look for another */
+    if (ret == Z_STREAM_END)
+        state->how = LOOK;
 
     /* good decompression */
     return 0;
 }
 
-/* Make data and put in the output buffer.  Assumes that state->have == 0.
+/* Fetch data and put it in the output buffer.  Assumes state->x.have is 0.
    Data is either copied from the input file or decompressed from the input
    file depending on state->how.  If state->how is LOOK, then a gzip header is
-   looked for (and skipped if found) to determine wither to copy or decompress.
-   Returns -1 on error, otherwise 0.  gz_make() will leave state->have as COPY
-   or GZIP unless the end of the input file has been reached and all data has
-   been processed.  */
-local int gz_make(state)
+   looked for to determine whether to copy or decompress.  Returns -1 on error,
+   otherwise 0.  gz_fetch() will leave state->how as COPY or GZIP unless the
+   end of the input file has been reached and all data has been processed.  */
+local int gz_fetch(state)
     gz_statep state;
 {
     z_streamp strm = &(state->strm);
 
-    if (state->how == LOOK) {           /* look for gzip header */
-        if (gz_head(state) == -1)
-            return -1;
-        if (state->have)                /* got some data from gz_head() */
+    do {
+        switch(state->how) {
+        case LOOK:      /* -> LOOK, COPY (only if never GZIP), or GZIP */
+            if (gz_look(state) == -1)
+                return -1;
+            if (state->how == LOOK)
+                return 0;
+            break;
+        case COPY:      /* -> COPY */
+            if (gz_load(state, state->out, state->size << 1, &(state->x.have))
+                    == -1)
+                return -1;
+            state->x.next = state->out;
             return 0;
-    }
-    if (state->how == COPY) {           /* straight copy */
-        if (gz_load(state, state->out, state->size << 1, &(state->have)) == -1)
-            return -1;
-        state->next = state->out;
-    }
-    else if (state->how == GZIP) {      /* decompress */
-        strm->avail_out = state->size << 1;
-        strm->next_out = state->out;
-        if (gz_decomp(state) == -1)
-            return -1;
-    }
+        case GZIP:      /* -> GZIP or LOOK (if end of gzip stream) */
+            strm->avail_out = state->size << 1;
+            strm->next_out = state->out;
+            if (gz_decomp(state) == -1)
+                return -1;
+        }
+    } while (state->x.have == 0 && (!state->eof || strm->avail_in));
     return 0;
 }
 
@@ -336,12 +262,12 @@
     /* skip over len bytes or reach end-of-file, whichever comes first */
     while (len)
         /* skip over whatever is in output buffer */
-        if (state->have) {
-            n = GT_OFF(state->have) || (z_off64_t)state->have > len ?
-                (unsigned)len : state->have;
-            state->have -= n;
-            state->next += n;
-            state->pos += n;
+        if (state->x.have) {
+            n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
+                (unsigned)len : state->x.have;
+            state->x.have -= n;
+            state->x.next += n;
+            state->x.pos += n;
             len -= n;
         }
 
@@ -352,7 +278,7 @@
         /* need more data to skip -- load up output buffer */
         else {
             /* get more output, looking for header if required */
-            if (gz_make(state) == -1)
+            if (gz_fetch(state) == -1)
                 return -1;
         }
     return 0;
@@ -374,14 +300,15 @@
     state = (gz_statep)file;
     strm = &(state->strm);
 
-    /* check that we're reading and that there's no error */
-    if (state->mode != GZ_READ || state->err != Z_OK)
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+            (state->err != Z_OK && state->err != Z_BUF_ERROR))
         return -1;
 
     /* since an int is returned, make sure len fits in one, otherwise return
        with an error (this avoids the flaw in the interface) */
     if ((int)len < 0) {
-        gz_error(state, Z_BUF_ERROR, "requested length does not fit in int");
+        gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
         return -1;
     }
 
@@ -400,49 +327,51 @@
     got = 0;
     do {
         /* first just try copying data from the output buffer */
-        if (state->have) {
-            n = state->have > len ? len : state->have;
-            memcpy(buf, state->next, n);
-            state->next += n;
-            state->have -= n;
+        if (state->x.have) {
+            n = state->x.have > len ? len : state->x.have;
+            memcpy(buf, state->x.next, n);
+            state->x.next += n;
+            state->x.have -= n;
         }
 
         /* output buffer empty -- return if we're at the end of the input */
-        else if (state->eof && strm->avail_in == 0)
+        else if (state->eof && strm->avail_in == 0) {
+            state->past = 1;        /* tried to read past end */
             break;
+        }
 
         /* need output data -- for small len or new stream load up our output
            buffer */
         else if (state->how == LOOK || len < (state->size << 1)) {
             /* get more output, looking for header if required */
-            if (gz_make(state) == -1)
+            if (gz_fetch(state) == -1)
                 return -1;
-            continue;       /* no progress yet -- go back to memcpy() above */
+            continue;       /* no progress yet -- go back to copy above */
             /* the copy above assures that we will leave with space in the
                output buffer, allowing at least one gzungetc() to succeed */
         }
 
         /* large len -- read directly into user buffer */
         else if (state->how == COPY) {      /* read directly */
-            if (gz_load(state, buf, len, &n) == -1)
+            if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
                 return -1;
         }
 
         /* large len -- decompress directly into user buffer */
         else {  /* state->how == GZIP */
             strm->avail_out = len;
-            strm->next_out = buf;
+            strm->next_out = (unsigned char *)buf;
             if (gz_decomp(state) == -1)
                 return -1;
-            n = state->have;
-            state->have = 0;
+            n = state->x.have;
+            state->x.have = 0;
         }
 
         /* update progress */
         len -= n;
         buf = (char *)buf + n;
         got += n;
-        state->pos += n;
+        state->x.pos += n;
     } while (len);
 
     /* return number of bytes read into user buffer (will fit in int) */
@@ -450,6 +379,11 @@
 }
 
 /* -- see zlib.h -- */
+#ifdef Z_PREFIX_SET
+#  undef z_gzgetc
+#else
+#  undef gzgetc
+#endif
 int ZEXPORT gzgetc(file)
     gzFile file;
 {
@@ -462,15 +396,16 @@
         return -1;
     state = (gz_statep)file;
 
-    /* check that we're reading and that there's no error */
-    if (state->mode != GZ_READ || state->err != Z_OK)
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+        (state->err != Z_OK && state->err != Z_BUF_ERROR))
         return -1;
 
     /* try output buffer (no need to check for skip request) */
-    if (state->have) {
-        state->have--;
-        state->pos++;
-        return *(state->next)++;
+    if (state->x.have) {
+        state->x.have--;
+        state->x.pos++;
+        return *(state->x.next)++;
     }
 
     /* nothing there -- try gzread() */
@@ -478,6 +413,12 @@
     return ret < 1 ? -1 : buf[0];
 }
 
+int ZEXPORT gzgetc_(file)
+gzFile file;
+{
+    return gzgetc(file);
+}
+
 /* -- see zlib.h -- */
 int ZEXPORT gzungetc(c, file)
     int c;
@@ -490,8 +431,9 @@
         return -1;
     state = (gz_statep)file;
 
-    /* check that we're reading and that there's no error */
-    if (state->mode != GZ_READ || state->err != Z_OK)
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+        (state->err != Z_OK && state->err != Z_BUF_ERROR))
         return -1;
 
     /* process a skip request */
@@ -506,32 +448,34 @@
         return -1;
 
     /* if output buffer empty, put byte at end (allows more pushing) */
-    if (state->have == 0) {
-        state->have = 1;
-        state->next = state->out + (state->size << 1) - 1;
-        state->next[0] = c;
-        state->pos--;
+    if (state->x.have == 0) {
+        state->x.have = 1;
+        state->x.next = state->out + (state->size << 1) - 1;
+        state->x.next[0] = c;
+        state->x.pos--;
+        state->past = 0;
         return c;
     }
 
     /* if no room, give up (must have already done a gzungetc()) */
-    if (state->have == (state->size << 1)) {
-        gz_error(state, Z_BUF_ERROR, "out of room to push characters");
+    if (state->x.have == (state->size << 1)) {
+        gz_error(state, Z_DATA_ERROR, "out of room to push characters");
         return -1;
     }
 
     /* slide output data if needed and insert byte before existing data */
-    if (state->next == state->out) {
-        unsigned char *src = state->out + state->have;
+    if (state->x.next == state->out) {
+        unsigned char *src = state->out + state->x.have;
         unsigned char *dest = state->out + (state->size << 1);
         while (src > state->out)
             *--dest = *--src;
-        state->next = dest;
+        state->x.next = dest;
     }
-    state->have++;
-    state->next--;
-    state->next[0] = c;
-    state->pos--;
+    state->x.have++;
+    state->x.next--;
+    state->x.next[0] = c;
+    state->x.pos--;
+    state->past = 0;
     return c;
 }
 
@@ -551,8 +495,9 @@
         return NULL;
     state = (gz_statep)file;
 
-    /* check that we're reading and that there's no error */
-    if (state->mode != GZ_READ || state->err != Z_OK)
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+        (state->err != Z_OK && state->err != Z_BUF_ERROR))
         return NULL;
 
     /* process a skip request */
@@ -569,32 +514,31 @@
     left = (unsigned)len - 1;
     if (left) do {
         /* assure that something is in the output buffer */
-        if (state->have == 0) {
-            if (gz_make(state) == -1)
-                return NULL;            /* error */
-            if (state->have == 0) {     /* end of file */
-                if (buf == str)         /* got bupkus */
-                    return NULL;
-                break;                  /* got something -- return it */
-            }
+        if (state->x.have == 0 && gz_fetch(state) == -1)
+            return NULL;                /* error */
+        if (state->x.have == 0) {       /* end of file */
+            state->past = 1;            /* read past end */
+            break;                      /* return what we have */
         }
 
         /* look for end-of-line in current output buffer */
-        n = state->have > left ? left : state->have;
-        eol = memchr(state->next, '\n', n);
+        n = state->x.have > left ? left : state->x.have;
+        eol = (unsigned char *)memchr(state->x.next, '\n', n);
         if (eol != NULL)
-            n = (unsigned)(eol - state->next) + 1;
+            n = (unsigned)(eol - state->x.next) + 1;
 
         /* copy through end-of-line, or remainder if not found */
-        memcpy(buf, state->next, n);
-        state->have -= n;
-        state->next += n;
-        state->pos += n;
+        memcpy(buf, state->x.next, n);
+        state->x.have -= n;
+        state->x.next += n;
+        state->x.pos += n;
         left -= n;
         buf += n;
     } while (left && eol == NULL);
 
-    /* found end-of-line or out of space -- terminate string and return it */
+    /* return terminated string, or if nothing, end of file */
+    if (buf == str)
+        return NULL;
     buf[0] = 0;
     return str;
 }
@@ -610,16 +554,12 @@
         return 0;
     state = (gz_statep)file;
 
-    /* check that we're reading */
-    if (state->mode != GZ_READ)
-        return 0;
-
     /* if the state is not known, but we can find out, then do so (this is
        mainly for right after a gzopen() or gzdopen()) */
-    if (state->how == LOOK && state->have == 0)
-        (void)gz_head(state);
+    if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
+        (void)gz_look(state);
 
-    /* return 1 if reading direct, 0 if decompressing a gzip stream */
+    /* return 1 if transparent, 0 if processing a gzip stream */
     return state->direct;
 }
 
@@ -627,7 +567,7 @@
 int ZEXPORT gzclose_r(file)
     gzFile file;
 {
-    int ret;
+    int ret, err;
     gz_statep state;
 
     /* get internal structure */
@@ -645,9 +585,10 @@
         free(state->out);
         free(state->in);
     }
+    err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
     gz_error(state, Z_OK, NULL);
     free(state->path);
     ret = close(state->fd);
     free(state);
-    return ret ? Z_ERRNO : Z_OK;
+    return ret ? Z_ERRNO : err;
 }
diff --git a/Modules/zlib/gzwrite.c b/Modules/zlib/gzwrite.c
index e8defc6..aa767fb 100644
--- a/Modules/zlib/gzwrite.c
+++ b/Modules/zlib/gzwrite.c
@@ -1,5 +1,5 @@
 /* gzwrite.c -- zlib functions for writing gzip files
- * Copyright (C) 2004, 2005, 2010 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -18,44 +18,55 @@
     int ret;
     z_streamp strm = &(state->strm);
 
-    /* allocate input and output buffers */
-    state->in = malloc(state->want);
-    state->out = malloc(state->want);
-    if (state->in == NULL || state->out == NULL) {
-        if (state->out != NULL)
-            free(state->out);
-        if (state->in != NULL)
-            free(state->in);
+    /* allocate input buffer */
+    state->in = (unsigned char *)malloc(state->want);
+    if (state->in == NULL) {
         gz_error(state, Z_MEM_ERROR, "out of memory");
         return -1;
     }
 
-    /* allocate deflate memory, set up for gzip compression */
-    strm->zalloc = Z_NULL;
-    strm->zfree = Z_NULL;
-    strm->opaque = Z_NULL;
-    ret = deflateInit2(strm, state->level, Z_DEFLATED,
-                       15 + 16, 8, state->strategy);
-    if (ret != Z_OK) {
-        free(state->in);
-        gz_error(state, Z_MEM_ERROR, "out of memory");
-        return -1;
+    /* only need output buffer and deflate state if compressing */
+    if (!state->direct) {
+        /* allocate output buffer */
+        state->out = (unsigned char *)malloc(state->want);
+        if (state->out == NULL) {
+            free(state->in);
+            gz_error(state, Z_MEM_ERROR, "out of memory");
+            return -1;
+        }
+
+        /* allocate deflate memory, set up for gzip compression */
+        strm->zalloc = Z_NULL;
+        strm->zfree = Z_NULL;
+        strm->opaque = Z_NULL;
+        ret = deflateInit2(strm, state->level, Z_DEFLATED,
+                           MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
+        if (ret != Z_OK) {
+            free(state->out);
+            free(state->in);
+            gz_error(state, Z_MEM_ERROR, "out of memory");
+            return -1;
+        }
     }
 
     /* mark state as initialized */
     state->size = state->want;
 
-    /* initialize write buffer */
-    strm->avail_out = state->size;
-    strm->next_out = state->out;
-    state->next = strm->next_out;
+    /* initialize write buffer if compressing */
+    if (!state->direct) {
+        strm->avail_out = state->size;
+        strm->next_out = state->out;
+        state->x.next = strm->next_out;
+    }
     return 0;
 }
 
 /* Compress whatever is at avail_in and next_in and write to the output file.
    Return -1 if there is an error writing to the output file, otherwise 0.
    flush is assumed to be a valid deflate() flush value.  If flush is Z_FINISH,
-   then the deflate() state is reset to start a new gzip stream. */
+   then the deflate() state is reset to start a new gzip stream.  If gz->direct
+   is true, then simply write to the output file without compressing, and
+   ignore flush. */
 local int gz_comp(state, flush)
     gz_statep state;
     int flush;
@@ -68,6 +79,17 @@
     if (state->size == 0 && gz_init(state) == -1)
         return -1;
 
+    /* write directly if requested */
+    if (state->direct) {
+        got = write(state->fd, strm->next_in, strm->avail_in);
+        if (got < 0 || (unsigned)got != strm->avail_in) {
+            gz_error(state, Z_ERRNO, zstrerror());
+            return -1;
+        }
+        strm->avail_in = 0;
+        return 0;
+    }
+
     /* run deflate() on provided input until it produces no more output */
     ret = Z_OK;
     do {
@@ -75,8 +97,8 @@
            doing Z_FINISH then don't write until we get to Z_STREAM_END */
         if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
             (flush != Z_FINISH || ret == Z_STREAM_END))) {
-            have = (unsigned)(strm->next_out - state->next);
-            if (have && ((got = write(state->fd, state->next, have)) < 0 ||
+            have = (unsigned)(strm->next_out - state->x.next);
+            if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
                          (unsigned)got != have)) {
                 gz_error(state, Z_ERRNO, zstrerror());
                 return -1;
@@ -85,7 +107,7 @@
                 strm->avail_out = state->size;
                 strm->next_out = state->out;
             }
-            state->next = strm->next_out;
+            state->x.next = strm->next_out;
         }
 
         /* compress */
@@ -131,7 +153,7 @@
         }
         strm->avail_in = n;
         strm->next_in = state->in;
-        state->pos += n;
+        state->x.pos += n;
         if (gz_comp(state, Z_NO_FLUSH) == -1)
             return -1;
         len -= n;
@@ -146,7 +168,6 @@
     unsigned len;
 {
     unsigned put = len;
-    unsigned n;
     gz_statep state;
     z_streamp strm;
 
@@ -163,7 +184,7 @@
     /* since an int is returned, make sure len fits in one, otherwise return
        with an error (this avoids the flaw in the interface) */
     if ((int)len < 0) {
-        gz_error(state, Z_BUF_ERROR, "requested length does not fit in int");
+        gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
         return 0;
     }
 
@@ -186,16 +207,19 @@
     if (len < state->size) {
         /* copy to input buffer, compress when full */
         do {
+            unsigned have, copy;
+
             if (strm->avail_in == 0)
                 strm->next_in = state->in;
-            n = state->size - strm->avail_in;
-            if (n > len)
-                n = len;
-            memcpy(strm->next_in + strm->avail_in, buf, n);
-            strm->avail_in += n;
-            state->pos += n;
-            buf = (char *)buf + n;
-            len -= n;
+            have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+            copy = state->size - have;
+            if (copy > len)
+                copy = len;
+            memcpy(state->in + have, buf, copy);
+            strm->avail_in += copy;
+            state->x.pos += copy;
+            buf = (const char *)buf + copy;
+            len -= copy;
             if (len && gz_comp(state, Z_NO_FLUSH) == -1)
                 return 0;
         } while (len);
@@ -207,8 +231,8 @@
 
         /* directly compress user buffer to file */
         strm->avail_in = len;
-        strm->next_in = (voidp)buf;
-        state->pos += len;
+        strm->next_in = (z_const Bytef *)buf;
+        state->x.pos += len;
         if (gz_comp(state, Z_NO_FLUSH) == -1)
             return 0;
     }
@@ -222,6 +246,7 @@
     gzFile file;
     int c;
 {
+    unsigned have;
     unsigned char buf[1];
     gz_statep state;
     z_streamp strm;
@@ -245,19 +270,23 @@
 
     /* try writing to input buffer for speed (state->size == 0 if buffer not
        initialized) */
-    if (strm->avail_in < state->size) {
+    if (state->size) {
         if (strm->avail_in == 0)
             strm->next_in = state->in;
-        strm->next_in[strm->avail_in++] = c;
-        state->pos++;
-        return c;
+        have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+        if (have < state->size) {
+            state->in[have] = c;
+            strm->avail_in++;
+            state->x.pos++;
+            return c & 0xff;
+        }
     }
 
     /* no room in buffer or not initialized, use gz_write() */
     buf[0] = c;
     if (gzwrite(file, buf, 1) != 1)
         return -1;
-    return c;
+    return c & 0xff;
 }
 
 /* -- see zlib.h -- */
@@ -274,16 +303,15 @@
     return ret == 0 && len != 0 ? -1 : ret;
 }
 
-#ifdef STDC
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
 #include <stdarg.h>
 
 /* -- see zlib.h -- */
-int ZEXPORTVA gzprintf (gzFile file, const char *format, ...)
+int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
 {
     int size, len;
     gz_statep state;
     z_streamp strm;
-    va_list va;
 
     /* get internal structure */
     if (file == NULL)
@@ -313,25 +341,20 @@
     /* do the printf() into the input buffer, put length in len */
     size = (int)(state->size);
     state->in[size - 1] = 0;
-    va_start(va, format);
 #ifdef NO_vsnprintf
 #  ifdef HAS_vsprintf_void
-    (void)vsprintf(state->in, format, va);
-    va_end(va);
+    (void)vsprintf((char *)(state->in), format, va);
     for (len = 0; len < size; len++)
         if (state->in[len] == 0) break;
 #  else
-    len = vsprintf(state->in, format, va);
-    va_end(va);
+    len = vsprintf((char *)(state->in), format, va);
 #  endif
 #else
 #  ifdef HAS_vsnprintf_void
-    (void)vsnprintf(state->in, size, format, va);
-    va_end(va);
-    len = strlen(state->in);
+    (void)vsnprintf((char *)(state->in), size, format, va);
+    len = strlen((char *)(state->in));
 #  else
     len = vsnprintf((char *)(state->in), size, format, va);
-    va_end(va);
 #  endif
 #endif
 
@@ -342,11 +365,22 @@
     /* update buffer and position, defer compression until needed */
     strm->avail_in = (unsigned)len;
     strm->next_in = state->in;
-    state->pos += len;
+    state->x.pos += len;
     return len;
 }
 
-#else /* !STDC */
+int ZEXPORTVA gzprintf(gzFile file, const char *format, ...)
+{
+    va_list va;
+    int ret;
+
+    va_start(va, format);
+    ret = gzvprintf(file, format, va);
+    va_end(va);
+    return ret;
+}
+
+#else /* !STDC && !Z_HAVE_STDARG_H */
 
 /* -- see zlib.h -- */
 int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
@@ -366,6 +400,10 @@
     state = (gz_statep)file;
     strm = &(state->strm);
 
+    /* check that can really pass pointer in ints */
+    if (sizeof(int) != sizeof(void *))
+        return 0;
+
     /* check that we're writing and that there's no error */
     if (state->mode != GZ_WRITE || state->err != Z_OK)
         return 0;
@@ -390,22 +428,23 @@
     state->in[size - 1] = 0;
 #ifdef NO_snprintf
 #  ifdef HAS_sprintf_void
-    sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8,
+    sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
             a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
     for (len = 0; len < size; len++)
         if (state->in[len] == 0) break;
 #  else
-    len = sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8,
-                a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+    len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
+                  a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
 #  endif
 #else
 #  ifdef HAS_snprintf_void
-    snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+    snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
              a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
-    len = strlen(state->in);
+    len = strlen((char *)(state->in));
 #  else
-    len = snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8,
-                 a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+    len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
+                   a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
+                   a19, a20);
 #  endif
 #endif
 
@@ -416,7 +455,7 @@
     /* update buffer and position, defer compression until needed */
     strm->avail_in = (unsigned)len;
     strm->next_in = state->in;
-    state->pos += len;
+    state->x.pos += len;
     return len;
 }
 
@@ -500,7 +539,7 @@
 int ZEXPORT gzclose_w(file)
     gzFile file;
 {
-    int ret = 0;
+    int ret = Z_OK;
     gz_statep state;
 
     /* get internal structure */
@@ -515,17 +554,24 @@
     /* check for seek request */
     if (state->seek) {
         state->seek = 0;
-        ret += gz_zero(state, state->skip);
+        if (gz_zero(state, state->skip) == -1)
+            ret = state->err;
     }
 
     /* flush, free memory, and close file */
-    ret += gz_comp(state, Z_FINISH);
-    (void)deflateEnd(&(state->strm));
-    free(state->out);
-    free(state->in);
+    if (gz_comp(state, Z_FINISH) == -1)
+        ret = state->err;
+    if (state->size) {
+        if (!state->direct) {
+            (void)deflateEnd(&(state->strm));
+            free(state->out);
+        }
+        free(state->in);
+    }
     gz_error(state, Z_OK, NULL);
     free(state->path);
-    ret += close(state->fd);
+    if (close(state->fd) == -1)
+        ret = Z_ERRNO;
     free(state);
-    return ret ? Z_ERRNO : Z_OK;
+    return ret;
 }
diff --git a/Modules/zlib/infback.c b/Modules/zlib/infback.c
index af3a8c9..f3833c2 100644
--- a/Modules/zlib/infback.c
+++ b/Modules/zlib/infback.c
@@ -1,5 +1,5 @@
 /* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2009 Mark Adler
+ * Copyright (C) 1995-2011 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -42,10 +42,19 @@
         return Z_STREAM_ERROR;
     strm->msg = Z_NULL;                 /* in case we return an error */
     if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
         strm->zalloc = zcalloc;
         strm->opaque = (voidpf)0;
+#endif
     }
-    if (strm->zfree == (free_func)0) strm->zfree = zcfree;
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+    strm->zfree = zcfree;
+#endif
     state = (struct inflate_state FAR *)ZALLOC(strm, 1,
                                                sizeof(struct inflate_state));
     if (state == Z_NULL) return Z_MEM_ERROR;
@@ -246,7 +255,7 @@
 void FAR *out_desc;
 {
     struct inflate_state FAR *state;
-    unsigned char FAR *next;    /* next input */
+    z_const unsigned char FAR *next;    /* next input */
     unsigned char FAR *put;     /* next output */
     unsigned have, left;        /* available input and output */
     unsigned long hold;         /* bit buffer */
@@ -394,7 +403,6 @@
                     PULLBYTE();
                 }
                 if (here.val < 16) {
-                    NEEDBITS(here.bits);
                     DROPBITS(here.bits);
                     state->lens[state->have++] = here.val;
                 }
diff --git a/Modules/zlib/inffast.c b/Modules/zlib/inffast.c
index 2f1d60b..bda59ce 100644
--- a/Modules/zlib/inffast.c
+++ b/Modules/zlib/inffast.c
@@ -1,5 +1,5 @@
 /* inffast.c -- fast decoding
- * Copyright (C) 1995-2008, 2010 Mark Adler
+ * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -69,8 +69,8 @@
 unsigned start;         /* inflate()'s starting value for strm->avail_out */
 {
     struct inflate_state FAR *state;
-    unsigned char FAR *in;      /* local strm->next_in */
-    unsigned char FAR *last;    /* while in < last, enough input available */
+    z_const unsigned char FAR *in;      /* local strm->next_in */
+    z_const unsigned char FAR *last;    /* have enough input while in < last */
     unsigned char FAR *out;     /* local strm->next_out */
     unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */
     unsigned char FAR *end;     /* while out < end, enough space available */
diff --git a/Modules/zlib/inffixed.h b/Modules/zlib/inffixed.h
index 75ed4b5..d628327 100644
--- a/Modules/zlib/inffixed.h
+++ b/Modules/zlib/inffixed.h
@@ -2,9 +2,9 @@
      * Generated automatically by makefixed().
      */
 
-    /* WARNING: this file should *not* be used by applications. It
-       is part of the implementation of the compression library and
-       is subject to change. Applications should only use zlib.h.
+    /* WARNING: this file should *not* be used by applications.
+       It is part of the implementation of this library and is
+       subject to change. Applications should only use zlib.h.
      */
 
     static const code lenfix[512] = {
diff --git a/Modules/zlib/inflate.c b/Modules/zlib/inflate.c
index a8431ab..870f89b 100644
--- a/Modules/zlib/inflate.c
+++ b/Modules/zlib/inflate.c
@@ -1,5 +1,5 @@
 /* inflate.c -- zlib decompression
- * Copyright (C) 1995-2010 Mark Adler
+ * Copyright (C) 1995-2012 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -93,14 +93,15 @@
 
 /* function prototypes */
 local void fixedtables OF((struct inflate_state FAR *state));
-local int updatewindow OF((z_streamp strm, unsigned out));
+local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
+                           unsigned copy));
 #ifdef BUILDFIXED
    void makefixed OF((void));
 #endif
-local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
+local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
                               unsigned len));
 
-int ZEXPORT inflateReset(strm)
+int ZEXPORT inflateResetKeep(strm)
 z_streamp strm;
 {
     struct inflate_state FAR *state;
@@ -109,15 +110,13 @@
     state = (struct inflate_state FAR *)strm->state;
     strm->total_in = strm->total_out = state->total = 0;
     strm->msg = Z_NULL;
-    strm->adler = 1;        /* to support ill-conceived Java test suite */
+    if (state->wrap)        /* to support ill-conceived Java test suite */
+        strm->adler = state->wrap & 1;
     state->mode = HEAD;
     state->last = 0;
     state->havedict = 0;
     state->dmax = 32768U;
     state->head = Z_NULL;
-    state->wsize = 0;
-    state->whave = 0;
-    state->wnext = 0;
     state->hold = 0;
     state->bits = 0;
     state->lencode = state->distcode = state->next = state->codes;
@@ -127,6 +126,19 @@
     return Z_OK;
 }
 
+int ZEXPORT inflateReset(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    state->wsize = 0;
+    state->whave = 0;
+    state->wnext = 0;
+    return inflateResetKeep(strm);
+}
+
 int ZEXPORT inflateReset2(strm, windowBits)
 z_streamp strm;
 int windowBits;
@@ -180,10 +192,19 @@
     if (strm == Z_NULL) return Z_STREAM_ERROR;
     strm->msg = Z_NULL;                 /* in case we return an error */
     if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
         strm->zalloc = zcalloc;
         strm->opaque = (voidpf)0;
+#endif
     }
-    if (strm->zfree == (free_func)0) strm->zfree = zcfree;
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zfree = zcfree;
+#endif
     state = (struct inflate_state FAR *)
             ZALLOC(strm, 1, sizeof(struct inflate_state));
     if (state == Z_NULL) return Z_MEM_ERROR;
@@ -321,8 +342,8 @@
     low = 0;
     for (;;) {
         if ((low % 7) == 0) printf("\n        ");
-        printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits,
-               state.lencode[low].val);
+        printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
+               state.lencode[low].bits, state.lencode[low].val);
         if (++low == size) break;
         putchar(',');
     }
@@ -355,12 +376,13 @@
    output will fall in the output data, making match copies simpler and faster.
    The advantage may be dependent on the size of the processor's data caches.
  */
-local int updatewindow(strm, out)
+local int updatewindow(strm, end, copy)
 z_streamp strm;
-unsigned out;
+const Bytef *end;
+unsigned copy;
 {
     struct inflate_state FAR *state;
-    unsigned copy, dist;
+    unsigned dist;
 
     state = (struct inflate_state FAR *)strm->state;
 
@@ -380,19 +402,18 @@
     }
 
     /* copy state->wsize or less output bytes into the circular window */
-    copy = out - strm->avail_out;
     if (copy >= state->wsize) {
-        zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
+        zmemcpy(state->window, end - state->wsize, state->wsize);
         state->wnext = 0;
         state->whave = state->wsize;
     }
     else {
         dist = state->wsize - state->wnext;
         if (dist > copy) dist = copy;
-        zmemcpy(state->window + state->wnext, strm->next_out - copy, dist);
+        zmemcpy(state->window + state->wnext, end - copy, dist);
         copy -= dist;
         if (copy) {
-            zmemcpy(state->window, strm->next_out - copy, copy);
+            zmemcpy(state->window, end - copy, copy);
             state->wnext = copy;
             state->whave = state->wsize;
         }
@@ -499,11 +520,6 @@
         bits -= bits & 7; \
     } while (0)
 
-/* Reverse the bytes in a 32-bit value */
-#define REVERSE(q) \
-    ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
-     (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
-
 /*
    inflate() uses a state machine to process as much input data and generate as
    much output data as possible before returning.  The state machine is
@@ -591,7 +607,7 @@
 int flush;
 {
     struct inflate_state FAR *state;
-    unsigned char FAR *next;    /* next input */
+    z_const unsigned char FAR *next;    /* next input */
     unsigned char FAR *put;     /* next output */
     unsigned have, left;        /* available input and output */
     unsigned long hold;         /* bit buffer */
@@ -797,7 +813,7 @@
 #endif
         case DICTID:
             NEEDBITS(32);
-            strm->adler = state->check = REVERSE(hold);
+            strm->adler = state->check = ZSWAP32(hold);
             INITBITS();
             state->mode = DICT;
         case DICT:
@@ -905,7 +921,7 @@
             while (state->have < 19)
                 state->lens[order[state->have++]] = 0;
             state->next = state->codes;
-            state->lencode = (code const FAR *)(state->next);
+            state->lencode = (const code FAR *)(state->next);
             state->lenbits = 7;
             ret = inflate_table(CODES, state->lens, 19, &(state->next),
                                 &(state->lenbits), state->work);
@@ -925,7 +941,6 @@
                     PULLBYTE();
                 }
                 if (here.val < 16) {
-                    NEEDBITS(here.bits);
                     DROPBITS(here.bits);
                     state->lens[state->have++] = here.val;
                 }
@@ -980,7 +995,7 @@
                values here (9 and 6) without reading the comments in inftrees.h
                concerning the ENOUGH constants, which depend on those values */
             state->next = state->codes;
-            state->lencode = (code const FAR *)(state->next);
+            state->lencode = (const code FAR *)(state->next);
             state->lenbits = 9;
             ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
                                 &(state->lenbits), state->work);
@@ -989,7 +1004,7 @@
                 state->mode = BAD;
                 break;
             }
-            state->distcode = (code const FAR *)(state->next);
+            state->distcode = (const code FAR *)(state->next);
             state->distbits = 6;
             ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
                             &(state->next), &(state->distbits), state->work);
@@ -1170,7 +1185,7 @@
 #ifdef GUNZIP
                      state->flags ? hold :
 #endif
-                     REVERSE(hold)) != state->check) {
+                     ZSWAP32(hold)) != state->check) {
                     strm->msg = (char *)"incorrect data check";
                     state->mode = BAD;
                     break;
@@ -1214,8 +1229,9 @@
      */
   inf_leave:
     RESTORE();
-    if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
-        if (updatewindow(strm, out)) {
+    if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
+            (state->mode < CHECK || flush != Z_FINISH)))
+        if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
             state->mode = MEM;
             return Z_MEM_ERROR;
         }
@@ -1249,13 +1265,37 @@
     return Z_OK;
 }
 
+int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+Bytef *dictionary;
+uInt *dictLength;
+{
+    struct inflate_state FAR *state;
+
+    /* check state */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* copy dictionary */
+    if (state->whave && dictionary != Z_NULL) {
+        zmemcpy(dictionary, state->window + state->wnext,
+                state->whave - state->wnext);
+        zmemcpy(dictionary + state->whave - state->wnext,
+                state->window, state->wnext);
+    }
+    if (dictLength != Z_NULL)
+        *dictLength = state->whave;
+    return Z_OK;
+}
+
 int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
 z_streamp strm;
 const Bytef *dictionary;
 uInt dictLength;
 {
     struct inflate_state FAR *state;
-    unsigned long id;
+    unsigned long dictid;
+    int ret;
 
     /* check state */
     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
@@ -1263,29 +1303,21 @@
     if (state->wrap != 0 && state->mode != DICT)
         return Z_STREAM_ERROR;
 
-    /* check for correct dictionary id */
+    /* check for correct dictionary identifier */
     if (state->mode == DICT) {
-        id = adler32(0L, Z_NULL, 0);
-        id = adler32(id, dictionary, dictLength);
-        if (id != state->check)
+        dictid = adler32(0L, Z_NULL, 0);
+        dictid = adler32(dictid, dictionary, dictLength);
+        if (dictid != state->check)
             return Z_DATA_ERROR;
     }
 
-    /* copy dictionary to window */
-    if (updatewindow(strm, strm->avail_out)) {
+    /* copy dictionary to window using updatewindow(), which will amend the
+       existing dictionary if appropriate */
+    ret = updatewindow(strm, dictionary + dictLength, dictLength);
+    if (ret) {
         state->mode = MEM;
         return Z_MEM_ERROR;
     }
-    if (dictLength > state->wsize) {
-        zmemcpy(state->window, dictionary + dictLength - state->wsize,
-                state->wsize);
-        state->whave = state->wsize;
-    }
-    else {
-        zmemcpy(state->window + state->wsize - dictLength, dictionary,
-                dictLength);
-        state->whave = dictLength;
-    }
     state->havedict = 1;
     Tracev((stderr, "inflate:   dictionary set\n"));
     return Z_OK;
@@ -1321,7 +1353,7 @@
  */
 local unsigned syncsearch(have, buf, len)
 unsigned FAR *have;
-unsigned char FAR *buf;
+const unsigned char FAR *buf;
 unsigned len;
 {
     unsigned got;
@@ -1433,8 +1465,8 @@
     }
 
     /* copy state */
-    zmemcpy(dest, source, sizeof(z_stream));
-    zmemcpy(copy, state, sizeof(struct inflate_state));
+    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+    zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
     if (state->lencode >= state->codes &&
         state->lencode <= state->codes + ENOUGH - 1) {
         copy->lencode = copy->codes + (state->lencode - state->codes);
diff --git a/Modules/zlib/inftrees.c b/Modules/zlib/inftrees.c
index 11e9c52..44d89cf 100644
--- a/Modules/zlib/inftrees.c
+++ b/Modules/zlib/inftrees.c
@@ -1,5 +1,5 @@
 /* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2010 Mark Adler
+ * Copyright (C) 1995-2013 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -9,7 +9,7 @@
 #define MAXBITS 15
 
 const char inflate_copyright[] =
-   " inflate 1.2.5 Copyright 1995-2010 Mark Adler ";
+   " inflate 1.2.8 Copyright 1995-2013 Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -62,7 +62,7 @@
         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
-        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 73, 195};
+        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
@@ -208,8 +208,8 @@
     mask = used - 1;            /* mask for comparing low */
 
     /* check available table space */
-    if ((type == LENS && used >= ENOUGH_LENS) ||
-        (type == DISTS && used >= ENOUGH_DISTS))
+    if ((type == LENS && used > ENOUGH_LENS) ||
+        (type == DISTS && used > ENOUGH_DISTS))
         return 1;
 
     /* process all codes and make table entries */
@@ -277,8 +277,8 @@
 
             /* check for enough space */
             used += 1U << curr;
-            if ((type == LENS && used >= ENOUGH_LENS) ||
-                (type == DISTS && used >= ENOUGH_DISTS))
+            if ((type == LENS && used > ENOUGH_LENS) ||
+                (type == DISTS && used > ENOUGH_DISTS))
                 return 1;
 
             /* point entry in root table to sub-table */
@@ -289,38 +289,14 @@
         }
     }
 
-    /*
-       Fill in rest of table for incomplete codes.  This loop is similar to the
-       loop above in incrementing huff for table indices.  It is assumed that
-       len is equal to curr + drop, so there is no loop needed to increment
-       through high index bits.  When the current sub-table is filled, the loop
-       drops back to the root table to fill in any remaining entries there.
-     */
-    here.op = (unsigned char)64;                /* invalid code marker */
-    here.bits = (unsigned char)(len - drop);
-    here.val = (unsigned short)0;
-    while (huff != 0) {
-        /* when done with sub-table, drop back to root table */
-        if (drop != 0 && (huff & mask) != low) {
-            drop = 0;
-            len = root;
-            next = *table;
-            here.bits = (unsigned char)len;
-        }
-
-        /* put invalid code marker in table */
-        next[huff >> drop] = here;
-
-        /* backwards increment the len-bit code huff */
-        incr = 1U << (len - 1);
-        while (huff & incr)
-            incr >>= 1;
-        if (incr != 0) {
-            huff &= incr - 1;
-            huff += incr;
-        }
-        else
-            huff = 0;
+    /* fill in remaining table entry if code is incomplete (guaranteed to have
+       at most one remaining entry, since if the code is incomplete, the
+       maximum code length that was allowed to get this far is one bit) */
+    if (huff != 0) {
+        here.op = (unsigned char)64;            /* invalid code marker */
+        here.bits = (unsigned char)(len - drop);
+        here.val = (unsigned short)0;
+        next[huff] = here;
     }
 
     /* set return parameters */
diff --git a/Modules/zlib/inftrees.h b/Modules/zlib/inftrees.h
index 24230c5..baa53a0 100644
--- a/Modules/zlib/inftrees.h
+++ b/Modules/zlib/inftrees.h
@@ -41,7 +41,7 @@
    examples/enough.c found in the zlib distribtution.  The arguments to that
    program are the number of symbols, the initial root table size, and the
    maximum bit length of a code.  "enough 286 9 15" for literal/length codes
-   returns 852, and "enough 30 6 15" for distance codes returns 592.
+   returns returns 852, and "enough 30 6 15" for distance codes returns 592.
    The initial root table size (9 or 6) is found in the fifth argument of the
    inflate_table() calls in inflate.c and infback.c.  If the root table size is
    changed, then these maximum sizes would be need to be recalculated and
diff --git a/Modules/zlib/make_vms.com b/Modules/zlib/make_vms.com
index 6576490..65e9d0c 100644
--- a/Modules/zlib/make_vms.com
+++ b/Modules/zlib/make_vms.com
@@ -3,7 +3,7 @@
 $!
 $! In case of problems with the install you might contact me at
 $! zinser@zinser.no-ip.info(preferred) or
-$! zinser@sysdev.deutsche-boerse.com (work)
+$! martin.zinser@eurexchange.com (work)
 $!
 $! Make procedure history for Zlib
 $!
@@ -14,9 +14,16 @@
 $! 0.03 20091224 Add support for large file check
 $! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite
 $! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in
+$! 0.06 20120111 Fix missing amiss_err, update zconf_h.in, fix new exmples
+$!               subdir path, update module search in makefile.in
+$! 0.07 20120115 Triggered by work done by Alexey Chupahin completly redesigned
+$!               shared image creation
+$! 0.08 20120219 Make it work on VAX again, pre-load missing symbols to shared
+$!               image
+$! 0.09 20120305 SMS.  P1 sets builder ("MMK", "MMS", " " (built-in)).
+$!               "" -> automatic, preference: MMK, MMS, built-in.
 $!
 $ on error then goto err_exit
-$ set proc/parse=ext
 $!
 $ true  = 1
 $ false = 0
@@ -32,31 +39,43 @@
 $!
 $! Setup variables holding "config" information
 $!
-$ Make    = ""
+$ Make    = "''p1'"
 $ name     = "Zlib"
 $ version  = "?.?.?"
 $ v_string = "ZLIB_VERSION"
 $ v_file   = "zlib.h"
-$ ccopt   = ""
+$ ccopt   = "/include = []"
 $ lopts   = ""
 $ dnsrl   = ""
-$ aconf_in_file = "zconf.h.in#zconf.h_in"
+$ aconf_in_file = "zconf.h.in#zconf.h_in#zconf_h.in"
 $ conf_check_string = ""
 $ linkonly = false
 $ optfile  = name + ".opt"
+$ mapfile  = name + ".map"
 $ libdefs  = ""
+$ vax      = f$getsyi("HW_MODEL").lt.1024
 $ axp      = f$getsyi("HW_MODEL").ge.1024 .and. f$getsyi("HW_MODEL").lt.4096
+$ ia64     = f$getsyi("HW_MODEL").ge.4096
 $!
-$ whoami = f$parse(f$enviornment("Procedure"),,,,"NO_CONCEAL")
+$! 2012-03-05 SMS.
+$! Why is this needed?  And if it is needed, why not simply ".not. vax"?
+$!
+$!!! if axp .or. ia64 then  set proc/parse=extended
+$!
+$ whoami = f$parse(f$environment("Procedure"),,,,"NO_CONCEAL")
 $ mydef  = F$parse(whoami,,,"DEVICE")
 $ mydir  = f$parse(whoami,,,"DIRECTORY") - "]["
 $ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type")
 $!
 $! Check for MMK/MMS
 $!
-$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS"
-$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK"
-$!
+$ if (Make .eqs. "")
+$ then
+$   If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS"
+$   If F$Type (MMK) .eqs. "STRING" Then Make = "MMK"
+$ else
+$   Make = f$edit( Make, "trim")
+$ endif
 $!
 $ gosub find_version
 $!
@@ -69,6 +88,7 @@
 $!
 $ gosub check_compiler
 $ close topt
+$ close optf
 $!
 $ if its_decc
 $ then
@@ -83,6 +103,15 @@
 $       define sys decc$library_include:
 $     endif
 $   endif
+$!
+$! 2012-03-05 SMS.
+$! Why /NAMES = AS_IS?  Why not simply ".not. vax"?  And why not on VAX?
+$!
+$   if axp .or. ia64
+$   then
+$       ccopt = ccopt + "/name=as_is/opt=(inline=speed)"
+$       s_case = true
+$   endif
 $ endif
 $ if its_vaxc .or. its_gnuc
 $ then
@@ -122,15 +151,20 @@
 $ endif
 $ goto aconf_loop
 $ACONF_EXIT:
+$ write aconf ""
+$ write aconf "/* VMS specifics added by make_vms.com: */"
 $ write aconf "#define VMS 1"
 $ write aconf "#include <unistd.h>"
 $ write aconf "#include <unixio.h>"
 $ write aconf "#ifdef _LARGEFILE"
-$ write aconf "#define off64_t __off64_t"
-$ write aconf "#define fopen64 fopen"
-$ write aconf "#define fseeko64 fseeko"
-$ write aconf "#define lseek64 lseek"
-$ write aconf "#define ftello64 ftell"
+$ write aconf "# define off64_t __off64_t"
+$ write aconf "# define fopen64 fopen"
+$ write aconf "# define fseeko64 fseeko"
+$ write aconf "# define lseek64 lseek"
+$ write aconf "# define ftello64 ftell"
+$ write aconf "#endif"
+$ write aconf "#if !defined( __VAX) && (__CRTL_VER >= 70312000)"
+$ write aconf "# define HAVE_VSNPRINTF"
 $ write aconf "#endif"
 $ close aconf_in
 $ close aconf
@@ -139,8 +173,9 @@
 $!
 $ write sys$output "Compiling Zlib sources ..."
 $ if make.eqs.""
-$  then
-$   dele example.obj;*,minigzip.obj;*
+$ then
+$   if (f$search( "example.obj;*") .nes. "") then delete example.obj;*
+$   if (f$search( "minigzip.obj;*") .nes. "") then delete minigzip.obj;*
 $   CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" -
                 adler32.c zlib.h zconf.h
 $   CALL MAKE compress.OBJ "CC ''CCOPT' compress" -
@@ -174,41 +209,34 @@
 $   write sys$output "Building Zlib ..."
 $   CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ
 $   write sys$output "Building example..."
-$   CALL MAKE example.OBJ "CC ''CCOPT' example" -
-                example.c zlib.h zconf.h
+$   CALL MAKE example.OBJ "CC ''CCOPT' [.test]example" -
+                [.test]example.c zlib.h zconf.h
 $   call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb
-$   if f$search("x11vms:xvmsutils.olb") .nes. ""
-$   then
-$     write sys$output "Building minigzip..."
-$     CALL MAKE minigzip.OBJ "CC ''CCOPT' minigzip" -
-                minigzip.c zlib.h zconf.h
-$     call make minigzip.exe -
-                "LINK minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib" -
-                minigzip.obj libz.olb
-$   endif
-$  else
+$   write sys$output "Building minigzip..."
+$   CALL MAKE minigzip.OBJ "CC ''CCOPT' [.test]minigzip" -
+              [.test]minigzip.c zlib.h zconf.h
+$   call make minigzip.exe -
+              "LINK minigzip,libz.olb/lib" -
+              minigzip.obj libz.olb
+$ else
 $   gosub crea_mms
 $   write sys$output "Make ''name' ''version' with ''Make' "
 $   'make'
-$  endif
-$!
-$! Alpha gets a shareable image
-$!
-$ If axp
-$ Then
-$   gosub crea_olist
-$   write sys$output "Creating libzshr.exe"
-$   call anal_obj_axp modules.opt _link.opt
-$   if s_case
-$   then
-$      open/append optf modules.opt
-$      write optf "case_sensitive=YES"
-$      close optf
-$   endif
-$   LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,_link.opt/opt
 $ endif
+$!
+$! Create shareable image
+$!
+$ gosub crea_olist
+$ write sys$output "Creating libzshr.exe"
+$ call map_2_shopt 'mapfile' 'optfile'
+$ LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,'optfile'/opt
 $ write sys$output "Zlib build completed"
+$ delete/nolog tmp.opt;*
 $ exit
+$AMISS_ERR:
+$ write sys$output "No source for config.hin found."
+$ write sys$output "Tried any of ''aconf_in_file'"
+$ goto err_exit
 $CC_ERR:
 $ write sys$output "C compiler required to build ''name'"
 $ goto err_exit
@@ -216,7 +244,6 @@
 $ set message/facil/ident/sever/text
 $ close/nolog optf
 $ close/nolog topt
-$ close/nolog conf_hin
 $ close/nolog aconf_in
 $ close/nolog aconf
 $ close/nolog out
@@ -397,7 +424,7 @@
 $ deck
 # descrip.mms: MMS description file for building zlib on VMS
 # written by Martin P.J. Zinser
-# <zinser@zinser.no-ip.info or zinser@sysdev.deutsche-boerse.com>
+# <zinser@zinser.no-ip.info or martin.zinser@eurexchange.com>
 
 OBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\
        gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\
@@ -407,10 +434,9 @@
 $ eod
 $ write out "CFLAGS=", ccopt
 $ write out "LOPTS=", lopts
+$ write out "all : example.exe minigzip.exe libz.olb"
 $ copy sys$input: out
 $ deck
-
-all : example.exe minigzip.exe libz.olb
         @ write sys$output " Example applications available"
 
 libz.olb : libz.olb($(OBJS))
@@ -420,7 +446,7 @@
               link $(LOPTS) example,libz.olb/lib
 
 minigzip.exe : minigzip.obj libz.olb
-              link $(LOPTS) minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib
+              link $(LOPTS) minigzip,libz.olb/lib
 
 clean :
 	delete *.obj;*,libz.olb;*,*.opt;*,*.exe;*
@@ -431,7 +457,7 @@
 compress.obj : compress.c zlib.h zconf.h
 crc32.obj    : crc32.c zutil.h zlib.h zconf.h
 deflate.obj  : deflate.c deflate.h zutil.h zlib.h zconf.h
-example.obj  : example.c zlib.h zconf.h
+example.obj  : [.test]example.c zlib.h zconf.h
 gzclose.obj  : gzclose.c zutil.h zlib.h zconf.h
 gzlib.obj    : gzlib.c zutil.h zlib.h zconf.h
 gzread.obj   : gzread.c zutil.h zlib.h zconf.h
@@ -439,7 +465,7 @@
 inffast.obj  : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h
 inflate.obj  : inflate.c zutil.h zlib.h zconf.h
 inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h
-minigzip.obj : minigzip.c zlib.h zconf.h
+minigzip.obj : [.test]minigzip.c zlib.h zconf.h
 trees.obj    : trees.c deflate.h zutil.h zlib.h zconf.h
 uncompr.obj  : uncompr.c zlib.h zconf.h
 zutil.obj    : zutil.c zutil.h zlib.h zconf.h
@@ -455,13 +481,18 @@
 $CREA_OLIST:
 $ open/read min makefile.in
 $ open/write mod modules.opt
-$ src_check = "OBJC ="
+$ src_check_list = "OBJZ =#OBJG ="
 $MRLOOP:
 $ read/end=mrdone min rec
-$ if (f$extract(0,6,rec) .nes. src_check) then goto mrloop
+$ i = 0
+$SRC_CHECK_LOOP:
+$ src_check = f$element(i, "#", src_check_list)
+$ i = i+1
+$ if src_check .eqs. "#" then goto mrloop
+$ if (f$extract(0,6,rec) .nes. src_check) then goto src_check_loop
 $ rec = rec - src_check
 $ gosub extra_filnam
-$ if (f$element(1,"\",rec) .eqs. "\") then goto mrdone
+$ if (f$element(1,"\",rec) .eqs. "\") then goto mrloop
 $MRSLOOP:
 $ read/end=mrdone min rec
 $ gosub extra_filnam
@@ -672,124 +703,6 @@
 $ return
 $!------------------------------------------------------------------------------
 $!
-$! Analyze Object files for OpenVMS AXP to extract Procedure and Data
-$! information to build a symbol vector for a shareable image
-$! All the "brains" of this logic was suggested by Hartmut Becker
-$! (Hartmut.Becker@compaq.com). All the bugs were introduced by me
-$! (zinser@zinser.no-ip.info), so if you do have problem reports please do not
-$! bother Hartmut/HP, but get in touch with me
-$!
-$! Version history
-$! 0.01 20040406 Skip over shareable images in option file
-$! 0.02 20041109 Fix option file for shareable images with case_sensitive=YES
-$! 0.03 20050107 Skip over Identification labels in option file
-$! 0.04 20060117 Add uppercase alias to code compiled with /name=as_is
-$!
-$ ANAL_OBJ_AXP: Subroutine
-$ V = 'F$Verify(0)
-$ SAY := "WRITE_ SYS$OUTPUT"
-$
-$ IF F$SEARCH("''P1'") .EQS. ""
-$ THEN
-$    SAY "ANAL_OBJ_AXP-E-NOSUCHFILE:  Error, inputfile ''p1' not available"
-$    goto exit_aa
-$ ENDIF
-$ IF "''P2'" .EQS. ""
-$ THEN
-$    SAY "ANAL_OBJ_AXP:  Error, no output file provided"
-$    goto exit_aa
-$ ENDIF
-$
-$ open/read in 'p1
-$ create a.tmp
-$ open/append atmp a.tmp
-$ loop:
-$ read/end=end_loop in line
-$ if f$locate("/SHARE",f$edit(line,"upcase")) .lt. f$length(line)
-$ then
-$   write sys$output "ANAL_SKP_SHR-i-skipshare, ''line'"
-$   goto loop
-$ endif
-$ if f$locate("IDENTIFICATION=",f$edit(line,"upcase")) .lt. f$length(line)
-$ then
-$   write sys$output "ANAL_OBJ_AXP-i-ident: Identification ", -
-                     f$element(1,"=",line)
-$   goto loop
-$ endif
-$ f= f$search(line)
-$ if f .eqs. ""
-$ then
-$	write sys$output "ANAL_OBJ_AXP-w-nosuchfile, ''line'"
-$	goto loop
-$ endif
-$ define/user sys$output nl:
-$ define/user sys$error nl:
-$ anal/obj/gsd 'f /out=x.tmp
-$ open/read xtmp x.tmp
-$ XLOOP:
-$ read/end=end_xloop xtmp xline
-$ xline = f$edit(xline,"compress")
-$ write atmp xline
-$ goto xloop
-$ END_XLOOP:
-$ close xtmp
-$ goto loop
-$ end_loop:
-$ close in
-$ close atmp
-$ if f$search("a.tmp") .eqs. "" -
-	then $ exit
-$ ! all global definitions
-$ search a.tmp "symbol:","EGSY$V_DEF 1","EGSY$V_NORM 1"/out=b.tmp
-$ ! all procedures
-$ search b.tmp "EGSY$V_NORM 1"/wind=(0,1) /out=c.tmp
-$ search c.tmp "symbol:"/out=d.tmp
-$ define/user sys$output nl:
-$ edito/edt/command=sys$input d.tmp
-sub/symbol: "/symbol_vector=(/whole
-sub/"/=PROCEDURE)/whole
-exit
-$ ! all data
-$ search b.tmp "EGSY$V_DEF 1"/wind=(0,1) /out=e.tmp
-$ search e.tmp "symbol:"/out=f.tmp
-$ define/user sys$output nl:
-$ edito/edt/command=sys$input f.tmp
-sub/symbol: "/symbol_vector=(/whole
-sub/"/=DATA)/whole
-exit
-$ sort/nodupl d.tmp,f.tmp g.tmp
-$ open/read raw_vector g.tmp
-$ open/write case_vector 'p2'
-$ RAWLOOP:
-$ read/end=end_rawloop raw_vector raw_element
-$ write case_vector raw_element
-$ if f$locate("=PROCEDURE)",raw_element) .lt. f$length(raw_element)
-$ then
-$     name = f$element(1,"=",raw_element) - "("
-$     if f$edit(name,"UPCASE") .nes. name then -
-          write case_vector f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)", -
-	                          f$edit(name,"UPCASE"), name)
-$ endif
-$ if f$locate("=DATA)",raw_element) .lt. f$length(raw_element)
-$ then
-$     name = f$element(1,"=",raw_element) - "("
-$     if f$edit(name,"UPCASE") .nes. name then -
-          write case_vector f$fao(" symbol_vector=(!AS/!AS=DATA)", -
-	                          f$edit(name,"UPCASE"), name)
-$ endif
-$ goto rawloop
-$ END_RAWLOOP:
-$ close raw_vector
-$ close case_vector
-$ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;*,g.tmp;*
-$ if f$search("x.tmp") .nes. "" -
-	then $ delete x.tmp;*
-$!
-$ EXIT_AA:
-$ if V then set verify
-$ endsubroutine
-$!------------------------------------------------------------------------------
-$!
 $! Write configuration to both permanent and temporary config file
 $!
 $! Version history
@@ -802,3 +715,153 @@
 $  close confh
 $ENDSUBROUTINE
 $!------------------------------------------------------------------------------
+$!
+$! Analyze the project map file and create the symbol vector for a shareable
+$! image from it
+$!
+$! Version history
+$! 0.01 20120128 First version
+$! 0.02 20120226 Add pre-load logic
+$!
+$ MAP_2_SHOPT: Subroutine
+$!
+$ SAY := "WRITE_ SYS$OUTPUT"
+$!
+$ IF F$SEARCH("''P1'") .EQS. ""
+$ THEN
+$    SAY "MAP_2_SHOPT-E-NOSUCHFILE:  Error, inputfile ''p1' not available"
+$    goto exit_m2s
+$ ENDIF
+$ IF "''P2'" .EQS. ""
+$ THEN
+$    SAY "MAP_2_SHOPT:  Error, no output file provided"
+$    goto exit_m2s
+$ ENDIF
+$!
+$ module1 = "deflate#deflateEnd#deflateInit_#deflateParams#deflateSetDictionary"
+$ module2 = "gzclose#gzerror#gzgetc#gzgets#gzopen#gzprintf#gzputc#gzputs#gzread"
+$ module3 = "gzseek#gztell#inflate#inflateEnd#inflateInit_#inflateSetDictionary"
+$ module4 = "inflateSync#uncompress#zlibVersion#compress"
+$ open/read map 'p1
+$ if axp .or. ia64
+$ then
+$     open/write aopt a.opt
+$     open/write bopt b.opt
+$     write aopt " CASE_SENSITIVE=YES"
+$     write bopt "SYMBOL_VECTOR= (-"
+$     mod_sym_num = 1
+$ MOD_SYM_LOOP:
+$     if f$type(module'mod_sym_num') .nes. ""
+$     then
+$         mod_in = 0
+$ MOD_SYM_IN:
+$         shared_proc = f$element(mod_in, "#", module'mod_sym_num')
+$         if shared_proc .nes. "#"
+$         then
+$             write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",-
+        		       f$edit(shared_proc,"upcase"),shared_proc)
+$             write bopt f$fao("!AS=PROCEDURE,-",shared_proc)
+$             mod_in = mod_in + 1
+$             goto mod_sym_in
+$         endif
+$         mod_sym_num = mod_sym_num + 1
+$         goto mod_sym_loop
+$     endif
+$MAP_LOOP:
+$     read/end=map_end map line
+$     if (f$locate("{",line).lt. f$length(line)) .or. -
+         (f$locate("global:", line) .lt. f$length(line))
+$     then
+$         proc = true
+$         goto map_loop
+$     endif
+$     if f$locate("}",line).lt. f$length(line) then proc = false
+$     if f$locate("local:", line) .lt. f$length(line) then proc = false
+$     if proc
+$     then
+$         shared_proc = f$edit(line,"collapse")
+$         chop_semi = f$locate(";", shared_proc)
+$         if chop_semi .lt. f$length(shared_proc) then -
+              shared_proc = f$extract(0, chop_semi, shared_proc)
+$         write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",-
+        			 f$edit(shared_proc,"upcase"),shared_proc)
+$         write bopt f$fao("!AS=PROCEDURE,-",shared_proc)
+$     endif
+$     goto map_loop
+$MAP_END:
+$     close/nolog aopt
+$     close/nolog bopt
+$     open/append libopt 'p2'
+$     open/read aopt a.opt
+$     open/read bopt b.opt
+$ALOOP:
+$     read/end=aloop_end aopt line
+$     write libopt line
+$     goto aloop
+$ALOOP_END:
+$     close/nolog aopt
+$     sv = ""
+$BLOOP:
+$     read/end=bloop_end bopt svn
+$     if (svn.nes."")
+$     then
+$        if (sv.nes."") then write libopt sv
+$        sv = svn
+$     endif
+$     goto bloop
+$BLOOP_END:
+$     write libopt f$extract(0,f$length(sv)-2,sv), "-"
+$     write libopt ")"
+$     close/nolog bopt
+$     delete/nolog/noconf a.opt;*,b.opt;*
+$ else
+$     if vax
+$     then
+$     open/append libopt 'p2'
+$     mod_sym_num = 1
+$ VMOD_SYM_LOOP:
+$     if f$type(module'mod_sym_num') .nes. ""
+$     then
+$         mod_in = 0
+$ VMOD_SYM_IN:
+$         shared_proc = f$element(mod_in, "#", module'mod_sym_num')
+$         if shared_proc .nes. "#"
+$         then
+$     	      write libopt f$fao("UNIVERSAL=!AS",-
+      	  			     f$edit(shared_proc,"upcase"))
+$             mod_in = mod_in + 1
+$             goto vmod_sym_in
+$         endif
+$         mod_sym_num = mod_sym_num + 1
+$         goto vmod_sym_loop
+$     endif
+$VMAP_LOOP:
+$     	  read/end=vmap_end map line
+$     	  if (f$locate("{",line).lt. f$length(line)) .or. -
+   	      (f$locate("global:", line) .lt. f$length(line))
+$     	  then
+$     	      proc = true
+$     	      goto vmap_loop
+$     	  endif
+$     	  if f$locate("}",line).lt. f$length(line) then proc = false
+$     	  if f$locate("local:", line) .lt. f$length(line) then proc = false
+$     	  if proc
+$     	  then
+$     	      shared_proc = f$edit(line,"collapse")
+$     	      chop_semi = f$locate(";", shared_proc)
+$     	      if chop_semi .lt. f$length(shared_proc) then -
+      	  	  shared_proc = f$extract(0, chop_semi, shared_proc)
+$     	      write libopt f$fao("UNIVERSAL=!AS",-
+      	  			     f$edit(shared_proc,"upcase"))
+$     	  endif
+$     	  goto vmap_loop
+$VMAP_END:
+$     else
+$         write sys$output "Unknown Architecture (Not VAX, AXP, or IA64)"
+$         write sys$output "No options file created"
+$     endif
+$ endif
+$ EXIT_M2S:
+$ close/nolog map
+$ close/nolog libopt
+$ endsubroutine
diff --git a/Modules/zlib/minigzip.c b/Modules/zlib/minigzip.c
index 9825ccc..b3025a4 100644
--- a/Modules/zlib/minigzip.c
+++ b/Modules/zlib/minigzip.c
@@ -1,5 +1,5 @@
 /* minigzip.c -- simulate gzip using the zlib compression library
- * Copyright (C) 1995-2006, 2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2006, 2010, 2011 Jean-loup Gailly.
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -40,6 +40,10 @@
 #  define SET_BINARY_MODE(file)
 #endif
 
+#ifdef _MSC_VER
+#  define snprintf _snprintf
+#endif
+
 #ifdef VMS
 #  define unlink delete
 #  define GZ_SUFFIX "-gz"
@@ -138,6 +142,197 @@
 #  define local
 #endif
 
+#ifdef Z_SOLO
+/* for Z_SOLO, create simplified gz* functions using deflate and inflate */
+
+#if defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE)
+#  include <unistd.h>       /* for unlink() */
+#endif
+
+void *myalloc OF((void *, unsigned, unsigned));
+void myfree OF((void *, void *));
+
+void *myalloc(q, n, m)
+    void *q;
+    unsigned n, m;
+{
+    q = Z_NULL;
+    return calloc(n, m);
+}
+
+void myfree(q, p)
+    void *q, *p;
+{
+    q = Z_NULL;
+    free(p);
+}
+
+typedef struct gzFile_s {
+    FILE *file;
+    int write;
+    int err;
+    char *msg;
+    z_stream strm;
+} *gzFile;
+
+gzFile gzopen OF((const char *, const char *));
+gzFile gzdopen OF((int, const char *));
+gzFile gz_open OF((const char *, int, const char *));
+
+gzFile gzopen(path, mode)
+const char *path;
+const char *mode;
+{
+    return gz_open(path, -1, mode);
+}
+
+gzFile gzdopen(fd, mode)
+int fd;
+const char *mode;
+{
+    return gz_open(NULL, fd, mode);
+}
+
+gzFile gz_open(path, fd, mode)
+    const char *path;
+    int fd;
+    const char *mode;
+{
+    gzFile gz;
+    int ret;
+
+    gz = malloc(sizeof(struct gzFile_s));
+    if (gz == NULL)
+        return NULL;
+    gz->write = strchr(mode, 'w') != NULL;
+    gz->strm.zalloc = myalloc;
+    gz->strm.zfree = myfree;
+    gz->strm.opaque = Z_NULL;
+    if (gz->write)
+        ret = deflateInit2(&(gz->strm), -1, 8, 15 + 16, 8, 0);
+    else {
+        gz->strm.next_in = 0;
+        gz->strm.avail_in = Z_NULL;
+        ret = inflateInit2(&(gz->strm), 15 + 16);
+    }
+    if (ret != Z_OK) {
+        free(gz);
+        return NULL;
+    }
+    gz->file = path == NULL ? fdopen(fd, gz->write ? "wb" : "rb") :
+                              fopen(path, gz->write ? "wb" : "rb");
+    if (gz->file == NULL) {
+        gz->write ? deflateEnd(&(gz->strm)) : inflateEnd(&(gz->strm));
+        free(gz);
+        return NULL;
+    }
+    gz->err = 0;
+    gz->msg = "";
+    return gz;
+}
+
+int gzwrite OF((gzFile, const void *, unsigned));
+
+int gzwrite(gz, buf, len)
+    gzFile gz;
+    const void *buf;
+    unsigned len;
+{
+    z_stream *strm;
+    unsigned char out[BUFLEN];
+
+    if (gz == NULL || !gz->write)
+        return 0;
+    strm = &(gz->strm);
+    strm->next_in = (void *)buf;
+    strm->avail_in = len;
+    do {
+        strm->next_out = out;
+        strm->avail_out = BUFLEN;
+        (void)deflate(strm, Z_NO_FLUSH);
+        fwrite(out, 1, BUFLEN - strm->avail_out, gz->file);
+    } while (strm->avail_out == 0);
+    return len;
+}
+
+int gzread OF((gzFile, void *, unsigned));
+
+int gzread(gz, buf, len)
+    gzFile gz;
+    void *buf;
+    unsigned len;
+{
+    int ret;
+    unsigned got;
+    unsigned char in[1];
+    z_stream *strm;
+
+    if (gz == NULL || gz->write)
+        return 0;
+    if (gz->err)
+        return 0;
+    strm = &(gz->strm);
+    strm->next_out = (void *)buf;
+    strm->avail_out = len;
+    do {
+        got = fread(in, 1, 1, gz->file);
+        if (got == 0)
+            break;
+        strm->next_in = in;
+        strm->avail_in = 1;
+        ret = inflate(strm, Z_NO_FLUSH);
+        if (ret == Z_DATA_ERROR) {
+            gz->err = Z_DATA_ERROR;
+            gz->msg = strm->msg;
+            return 0;
+        }
+        if (ret == Z_STREAM_END)
+            inflateReset(strm);
+    } while (strm->avail_out);
+    return len - strm->avail_out;
+}
+
+int gzclose OF((gzFile));
+
+int gzclose(gz)
+    gzFile gz;
+{
+    z_stream *strm;
+    unsigned char out[BUFLEN];
+
+    if (gz == NULL)
+        return Z_STREAM_ERROR;
+    strm = &(gz->strm);
+    if (gz->write) {
+        strm->next_in = Z_NULL;
+        strm->avail_in = 0;
+        do {
+            strm->next_out = out;
+            strm->avail_out = BUFLEN;
+            (void)deflate(strm, Z_FINISH);
+            fwrite(out, 1, BUFLEN - strm->avail_out, gz->file);
+        } while (strm->avail_out == 0);
+        deflateEnd(strm);
+    }
+    else
+        inflateEnd(strm);
+    fclose(gz->file);
+    free(gz);
+    return Z_OK;
+}
+
+const char *gzerror OF((gzFile, int *));
+
+const char *gzerror(gz, err)
+    gzFile gz;
+    int *err;
+{
+    *err = gz->err;
+    return gz->msg;
+}
+
+#endif
+
 char *prog;
 
 void error            OF((const char *msg));
@@ -272,8 +467,12 @@
         exit(1);
     }
 
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+    snprintf(outfile, sizeof(outfile), "%s%s", file, GZ_SUFFIX);
+#else
     strcpy(outfile, file);
     strcat(outfile, GZ_SUFFIX);
+#endif
 
     in = fopen(file, "rb");
     if (in == NULL) {
@@ -308,7 +507,11 @@
         exit(1);
     }
 
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+    snprintf(buf, sizeof(buf), "%s", file);
+#else
     strcpy(buf, file);
+#endif
 
     if (len > SUFFIX_LEN && strcmp(file+len-SUFFIX_LEN, GZ_SUFFIX) == 0) {
         infile = file;
@@ -317,7 +520,11 @@
     } else {
         outfile = file;
         infile = buf;
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+        snprintf(buf + len, sizeof(buf) - len, "%s", GZ_SUFFIX);
+#else
         strcat(infile, GZ_SUFFIX);
+#endif
     }
     in = gzopen(infile, "rb");
     if (in == NULL) {
@@ -355,7 +562,11 @@
     gzFile file;
     char *bname, outmode[20];
 
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+    snprintf(outmode, sizeof(outmode), "%s", "wb6 ");
+#else
     strcpy(outmode, "wb6 ");
+#endif
 
     prog = argv[0];
     bname = strrchr(argv[0], '/');
diff --git a/Modules/zlib/trees.c b/Modules/zlib/trees.c
index 56e9bb1..1fd7759 100644
--- a/Modules/zlib/trees.c
+++ b/Modules/zlib/trees.c
@@ -1,5 +1,5 @@
 /* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2010 Jean-loup Gailly
+ * Copyright (C) 1995-2012 Jean-loup Gailly
  * detect_data_type() function provided freely by Cosmin Truta, 2006
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
@@ -74,11 +74,6 @@
  * probability, to avoid transmitting the lengths for unused bit length codes.
  */
 
-#define Buf_size (8 * 2*sizeof(char))
-/* Number of bits used within bi_buf. (bi_buf might be implemented on
- * more than 16 bits on some systems.)
- */
-
 /* ===========================================================================
  * Local data. These are initialized only once.
  */
@@ -151,8 +146,8 @@
 local int  build_bl_tree  OF((deflate_state *s));
 local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
                               int blcodes));
-local void compress_block OF((deflate_state *s, ct_data *ltree,
-                              ct_data *dtree));
+local void compress_block OF((deflate_state *s, const ct_data *ltree,
+                              const ct_data *dtree));
 local int  detect_data_type OF((deflate_state *s));
 local unsigned bi_reverse OF((unsigned value, int length));
 local void bi_windup      OF((deflate_state *s));
@@ -399,7 +394,6 @@
 
     s->bi_buf = 0;
     s->bi_valid = 0;
-    s->last_eob_len = 8; /* enough lookahead for inflate */
 #ifdef DEBUG
     s->compressed_len = 0L;
     s->bits_sent = 0L;
@@ -883,15 +877,17 @@
 }
 
 /* ===========================================================================
+ * Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
+ */
+void ZLIB_INTERNAL _tr_flush_bits(s)
+    deflate_state *s;
+{
+    bi_flush(s);
+}
+
+/* ===========================================================================
  * Send one empty static block to give enough lookahead for inflate.
  * This takes 10 bits, of which 7 may remain in the bit buffer.
- * The current inflate code requires 9 bits of lookahead. If the
- * last two codes for the previous block (real code plus EOB) were coded
- * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
- * the last real code. In this case we send two empty static blocks instead
- * of one. (There are no problems if the previous block is stored or fixed.)
- * To simplify the code, we assume the worst case of last real code encoded
- * on one bit only.
  */
 void ZLIB_INTERNAL _tr_align(s)
     deflate_state *s;
@@ -902,20 +898,6 @@
     s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
 #endif
     bi_flush(s);
-    /* Of the 10 bits for the empty block, we have already sent
-     * (10 - bi_valid) bits. The lookahead for the last real code (before
-     * the EOB of the previous block) was thus at least one plus the length
-     * of the EOB plus what we have just sent of the empty static block.
-     */
-    if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
-        send_bits(s, STATIC_TREES<<1, 3);
-        send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
-        s->compressed_len += 10L;
-#endif
-        bi_flush(s);
-    }
-    s->last_eob_len = 7;
 }
 
 /* ===========================================================================
@@ -990,7 +972,8 @@
     } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
 #endif
         send_bits(s, (STATIC_TREES<<1)+last, 3);
-        compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
+        compress_block(s, (const ct_data *)static_ltree,
+                       (const ct_data *)static_dtree);
 #ifdef DEBUG
         s->compressed_len += 3 + s->static_len;
 #endif
@@ -998,7 +981,8 @@
         send_bits(s, (DYN_TREES<<1)+last, 3);
         send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
                        max_blindex+1);
-        compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
+        compress_block(s, (const ct_data *)s->dyn_ltree,
+                       (const ct_data *)s->dyn_dtree);
 #ifdef DEBUG
         s->compressed_len += 3 + s->opt_len;
 #endif
@@ -1075,8 +1059,8 @@
  */
 local void compress_block(s, ltree, dtree)
     deflate_state *s;
-    ct_data *ltree; /* literal tree */
-    ct_data *dtree; /* distance tree */
+    const ct_data *ltree; /* literal tree */
+    const ct_data *dtree; /* distance tree */
 {
     unsigned dist;      /* distance of matched string */
     int lc;             /* match length or unmatched char (if dist == 0) */
@@ -1118,7 +1102,6 @@
     } while (lx < s->last_lit);
 
     send_code(s, END_BLOCK, ltree);
-    s->last_eob_len = ltree[END_BLOCK].Len;
 }
 
 /* ===========================================================================
@@ -1226,7 +1209,6 @@
     int      header;  /* true if block header must be written */
 {
     bi_windup(s);        /* align on byte boundary */
-    s->last_eob_len = 8; /* enough lookahead for inflate */
 
     if (header) {
         put_short(s, (ush)len);
diff --git a/Modules/zlib/uncompr.c b/Modules/zlib/uncompr.c
index ad98be3..242e949 100644
--- a/Modules/zlib/uncompr.c
+++ b/Modules/zlib/uncompr.c
@@ -30,7 +30,7 @@
     z_stream stream;
     int err;
 
-    stream.next_in = (Bytef*)source;
+    stream.next_in = (z_const Bytef *)source;
     stream.avail_in = (uInt)sourceLen;
     /* Check for source > 64K on 16-bit machine: */
     if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
diff --git a/Modules/zlib/zconf.h b/Modules/zlib/zconf.h
index 02ce56c..9987a77 100644
--- a/Modules/zlib/zconf.h
+++ b/Modules/zlib/zconf.h
@@ -1,5 +1,5 @@
 /* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -15,11 +15,13 @@
  * this permanently in zconf.h using "./configure --zprefix".
  */
 #ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+#  define Z_PREFIX_SET
 
 /* all linked symbols */
 #  define _dist_code            z__dist_code
 #  define _length_code          z__length_code
 #  define _tr_align             z__tr_align
+#  define _tr_flush_bits        z__tr_flush_bits
 #  define _tr_flush_block       z__tr_flush_block
 #  define _tr_init              z__tr_init
 #  define _tr_stored_block      z__tr_stored_block
@@ -27,9 +29,11 @@
 #  define adler32               z_adler32
 #  define adler32_combine       z_adler32_combine
 #  define adler32_combine64     z_adler32_combine64
-#  define compress              z_compress
-#  define compress2             z_compress2
-#  define compressBound         z_compressBound
+#  ifndef Z_SOLO
+#    define compress              z_compress
+#    define compress2             z_compress2
+#    define compressBound         z_compressBound
+#  endif
 #  define crc32                 z_crc32
 #  define crc32_combine         z_crc32_combine
 #  define crc32_combine64       z_crc32_combine64
@@ -40,44 +44,53 @@
 #  define deflateInit2_         z_deflateInit2_
 #  define deflateInit_          z_deflateInit_
 #  define deflateParams         z_deflateParams
+#  define deflatePending        z_deflatePending
 #  define deflatePrime          z_deflatePrime
 #  define deflateReset          z_deflateReset
+#  define deflateResetKeep      z_deflateResetKeep
 #  define deflateSetDictionary  z_deflateSetDictionary
 #  define deflateSetHeader      z_deflateSetHeader
 #  define deflateTune           z_deflateTune
 #  define deflate_copyright     z_deflate_copyright
 #  define get_crc_table         z_get_crc_table
-#  define gz_error              z_gz_error
-#  define gz_intmax             z_gz_intmax
-#  define gz_strwinerror        z_gz_strwinerror
-#  define gzbuffer              z_gzbuffer
-#  define gzclearerr            z_gzclearerr
-#  define gzclose               z_gzclose
-#  define gzclose_r             z_gzclose_r
-#  define gzclose_w             z_gzclose_w
-#  define gzdirect              z_gzdirect
-#  define gzdopen               z_gzdopen
-#  define gzeof                 z_gzeof
-#  define gzerror               z_gzerror
-#  define gzflush               z_gzflush
-#  define gzgetc                z_gzgetc
-#  define gzgets                z_gzgets
-#  define gzoffset              z_gzoffset
-#  define gzoffset64            z_gzoffset64
-#  define gzopen                z_gzopen
-#  define gzopen64              z_gzopen64
-#  define gzprintf              z_gzprintf
-#  define gzputc                z_gzputc
-#  define gzputs                z_gzputs
-#  define gzread                z_gzread
-#  define gzrewind              z_gzrewind
-#  define gzseek                z_gzseek
-#  define gzseek64              z_gzseek64
-#  define gzsetparams           z_gzsetparams
-#  define gztell                z_gztell
-#  define gztell64              z_gztell64
-#  define gzungetc              z_gzungetc
-#  define gzwrite               z_gzwrite
+#  ifndef Z_SOLO
+#    define gz_error              z_gz_error
+#    define gz_intmax             z_gz_intmax
+#    define gz_strwinerror        z_gz_strwinerror
+#    define gzbuffer              z_gzbuffer
+#    define gzclearerr            z_gzclearerr
+#    define gzclose               z_gzclose
+#    define gzclose_r             z_gzclose_r
+#    define gzclose_w             z_gzclose_w
+#    define gzdirect              z_gzdirect
+#    define gzdopen               z_gzdopen
+#    define gzeof                 z_gzeof
+#    define gzerror               z_gzerror
+#    define gzflush               z_gzflush
+#    define gzgetc                z_gzgetc
+#    define gzgetc_               z_gzgetc_
+#    define gzgets                z_gzgets
+#    define gzoffset              z_gzoffset
+#    define gzoffset64            z_gzoffset64
+#    define gzopen                z_gzopen
+#    define gzopen64              z_gzopen64
+#    ifdef _WIN32
+#      define gzopen_w              z_gzopen_w
+#    endif
+#    define gzprintf              z_gzprintf
+#    define gzvprintf             z_gzvprintf
+#    define gzputc                z_gzputc
+#    define gzputs                z_gzputs
+#    define gzread                z_gzread
+#    define gzrewind              z_gzrewind
+#    define gzseek                z_gzseek
+#    define gzseek64              z_gzseek64
+#    define gzsetparams           z_gzsetparams
+#    define gztell                z_gztell
+#    define gztell64              z_gztell64
+#    define gzungetc              z_gzungetc
+#    define gzwrite               z_gzwrite
+#  endif
 #  define inflate               z_inflate
 #  define inflateBack           z_inflateBack
 #  define inflateBackEnd        z_inflateBackEnd
@@ -92,16 +105,22 @@
 #  define inflateReset          z_inflateReset
 #  define inflateReset2         z_inflateReset2
 #  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateSync           z_inflateSync
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateUndermine      z_inflateUndermine
+#  define inflateResetKeep      z_inflateResetKeep
 #  define inflate_copyright     z_inflate_copyright
 #  define inflate_fast          z_inflate_fast
 #  define inflate_table         z_inflate_table
-#  define uncompress            z_uncompress
+#  ifndef Z_SOLO
+#    define uncompress            z_uncompress
+#  endif
 #  define zError                z_zError
-#  define zcalloc               z_zcalloc
-#  define zcfree                z_zcfree
+#  ifndef Z_SOLO
+#    define zcalloc               z_zcalloc
+#    define zcfree                z_zcfree
+#  endif
 #  define zlibCompileFlags      z_zlibCompileFlags
 #  define zlibVersion           z_zlibVersion
 
@@ -111,7 +130,9 @@
 #  define alloc_func            z_alloc_func
 #  define charf                 z_charf
 #  define free_func             z_free_func
-#  define gzFile                z_gzFile
+#  ifndef Z_SOLO
+#    define gzFile                z_gzFile
+#  endif
 #  define gz_header             z_gz_header
 #  define gz_headerp            z_gz_headerp
 #  define in_func               z_in_func
@@ -197,6 +218,12 @@
 #  endif
 #endif
 
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
+#endif
+
 /* Some Mac compilers merge all .h files incorrectly: */
 #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
 #  define NO_DUMMY_DECL
@@ -243,6 +270,14 @@
 #  endif
 #endif
 
+#ifndef Z_ARG /* function prototypes for stdarg */
+#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#    define Z_ARG(args)  args
+#  else
+#    define Z_ARG(args)  ()
+#  endif
+#endif
+
 /* The following definitions for FAR are needed only for MSDOS mixed
  * model programming (small or medium model with some far allocations).
  * This was tested only with MSC; for other MSDOS compilers you may have
@@ -356,12 +391,47 @@
    typedef Byte       *voidp;
 #endif
 
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (UINT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned
+#  elif (ULONG_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned long
+#  elif (USHRT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned short
+#  endif
+#endif
+
+#ifdef Z_U4
+   typedef Z_U4 z_crc_t;
+#else
+   typedef unsigned long z_crc_t;
+#endif
+
 #ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
 #  define Z_HAVE_UNISTD_H
 #endif
 
+#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_STDARG_H
+#endif
+
 #ifdef STDC
-#  include <sys/types.h>    /* for off_t */
+#  ifndef Z_SOLO
+#    include <sys/types.h>      /* for off_t */
+#  endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+#    include <stdarg.h>         /* for va_list */
+#  endif
+#endif
+
+#ifdef _WIN32
+#  ifndef Z_SOLO
+#    include <stddef.h>         /* for wchar_t */
+#  endif
 #endif
 
 /* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
@@ -370,21 +440,38 @@
  * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
  * equivalently requesting no 64-bit operations
  */
-#if -_LARGEFILE64_SOURCE - -1 == 1
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
 #  undef _LARGEFILE64_SOURCE
 #endif
 
-#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
-#  include <unistd.h>       /* for SEEK_* and off_t */
-#  ifdef VMS
-#    include <unixio.h>     /* for off_t */
-#  endif
-#  ifndef z_off_t
-#    define z_off_t off_t
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+#  define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#    ifdef VMS
+#      include <unixio.h>       /* for off_t */
+#    endif
+#    ifndef z_off_t
+#      define z_off_t off_t
+#    endif
 #  endif
 #endif
 
-#ifndef SEEK_SET
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
 #  define SEEK_SET        0       /* Seek from beginning of file.  */
 #  define SEEK_CUR        1       /* Seek from current position.  */
 #  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
@@ -394,18 +481,14 @@
 #  define z_off_t long
 #endif
 
-#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
+#if !defined(_WIN32) && defined(Z_LARGE64)
 #  define z_off64_t off64_t
 #else
-#  define z_off64_t z_off_t
-#endif
-
-#if defined(__OS400__)
-#  define NO_vsnprintf
-#endif
-
-#if defined(__MVS__)
-#  define NO_vsnprintf
+#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
 #endif
 
 /* MVS linker does not support external names larger than 8 bytes */
diff --git a/Modules/zlib/zconf.h.cmakein b/Modules/zlib/zconf.h.cmakein
index a2f71b1..043019c 100644
--- a/Modules/zlib/zconf.h.cmakein
+++ b/Modules/zlib/zconf.h.cmakein
@@ -1,5 +1,5 @@
 /* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -17,11 +17,13 @@
  * this permanently in zconf.h using "./configure --zprefix".
  */
 #ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+#  define Z_PREFIX_SET
 
 /* all linked symbols */
 #  define _dist_code            z__dist_code
 #  define _length_code          z__length_code
 #  define _tr_align             z__tr_align
+#  define _tr_flush_bits        z__tr_flush_bits
 #  define _tr_flush_block       z__tr_flush_block
 #  define _tr_init              z__tr_init
 #  define _tr_stored_block      z__tr_stored_block
@@ -29,9 +31,11 @@
 #  define adler32               z_adler32
 #  define adler32_combine       z_adler32_combine
 #  define adler32_combine64     z_adler32_combine64
-#  define compress              z_compress
-#  define compress2             z_compress2
-#  define compressBound         z_compressBound
+#  ifndef Z_SOLO
+#    define compress              z_compress
+#    define compress2             z_compress2
+#    define compressBound         z_compressBound
+#  endif
 #  define crc32                 z_crc32
 #  define crc32_combine         z_crc32_combine
 #  define crc32_combine64       z_crc32_combine64
@@ -42,44 +46,53 @@
 #  define deflateInit2_         z_deflateInit2_
 #  define deflateInit_          z_deflateInit_
 #  define deflateParams         z_deflateParams
+#  define deflatePending        z_deflatePending
 #  define deflatePrime          z_deflatePrime
 #  define deflateReset          z_deflateReset
+#  define deflateResetKeep      z_deflateResetKeep
 #  define deflateSetDictionary  z_deflateSetDictionary
 #  define deflateSetHeader      z_deflateSetHeader
 #  define deflateTune           z_deflateTune
 #  define deflate_copyright     z_deflate_copyright
 #  define get_crc_table         z_get_crc_table
-#  define gz_error              z_gz_error
-#  define gz_intmax             z_gz_intmax
-#  define gz_strwinerror        z_gz_strwinerror
-#  define gzbuffer              z_gzbuffer
-#  define gzclearerr            z_gzclearerr
-#  define gzclose               z_gzclose
-#  define gzclose_r             z_gzclose_r
-#  define gzclose_w             z_gzclose_w
-#  define gzdirect              z_gzdirect
-#  define gzdopen               z_gzdopen
-#  define gzeof                 z_gzeof
-#  define gzerror               z_gzerror
-#  define gzflush               z_gzflush
-#  define gzgetc                z_gzgetc
-#  define gzgets                z_gzgets
-#  define gzoffset              z_gzoffset
-#  define gzoffset64            z_gzoffset64
-#  define gzopen                z_gzopen
-#  define gzopen64              z_gzopen64
-#  define gzprintf              z_gzprintf
-#  define gzputc                z_gzputc
-#  define gzputs                z_gzputs
-#  define gzread                z_gzread
-#  define gzrewind              z_gzrewind
-#  define gzseek                z_gzseek
-#  define gzseek64              z_gzseek64
-#  define gzsetparams           z_gzsetparams
-#  define gztell                z_gztell
-#  define gztell64              z_gztell64
-#  define gzungetc              z_gzungetc
-#  define gzwrite               z_gzwrite
+#  ifndef Z_SOLO
+#    define gz_error              z_gz_error
+#    define gz_intmax             z_gz_intmax
+#    define gz_strwinerror        z_gz_strwinerror
+#    define gzbuffer              z_gzbuffer
+#    define gzclearerr            z_gzclearerr
+#    define gzclose               z_gzclose
+#    define gzclose_r             z_gzclose_r
+#    define gzclose_w             z_gzclose_w
+#    define gzdirect              z_gzdirect
+#    define gzdopen               z_gzdopen
+#    define gzeof                 z_gzeof
+#    define gzerror               z_gzerror
+#    define gzflush               z_gzflush
+#    define gzgetc                z_gzgetc
+#    define gzgetc_               z_gzgetc_
+#    define gzgets                z_gzgets
+#    define gzoffset              z_gzoffset
+#    define gzoffset64            z_gzoffset64
+#    define gzopen                z_gzopen
+#    define gzopen64              z_gzopen64
+#    ifdef _WIN32
+#      define gzopen_w              z_gzopen_w
+#    endif
+#    define gzprintf              z_gzprintf
+#    define gzvprintf             z_gzvprintf
+#    define gzputc                z_gzputc
+#    define gzputs                z_gzputs
+#    define gzread                z_gzread
+#    define gzrewind              z_gzrewind
+#    define gzseek                z_gzseek
+#    define gzseek64              z_gzseek64
+#    define gzsetparams           z_gzsetparams
+#    define gztell                z_gztell
+#    define gztell64              z_gztell64
+#    define gzungetc              z_gzungetc
+#    define gzwrite               z_gzwrite
+#  endif
 #  define inflate               z_inflate
 #  define inflateBack           z_inflateBack
 #  define inflateBackEnd        z_inflateBackEnd
@@ -94,16 +107,22 @@
 #  define inflateReset          z_inflateReset
 #  define inflateReset2         z_inflateReset2
 #  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateSync           z_inflateSync
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateUndermine      z_inflateUndermine
+#  define inflateResetKeep      z_inflateResetKeep
 #  define inflate_copyright     z_inflate_copyright
 #  define inflate_fast          z_inflate_fast
 #  define inflate_table         z_inflate_table
-#  define uncompress            z_uncompress
+#  ifndef Z_SOLO
+#    define uncompress            z_uncompress
+#  endif
 #  define zError                z_zError
-#  define zcalloc               z_zcalloc
-#  define zcfree                z_zcfree
+#  ifndef Z_SOLO
+#    define zcalloc               z_zcalloc
+#    define zcfree                z_zcfree
+#  endif
 #  define zlibCompileFlags      z_zlibCompileFlags
 #  define zlibVersion           z_zlibVersion
 
@@ -113,7 +132,9 @@
 #  define alloc_func            z_alloc_func
 #  define charf                 z_charf
 #  define free_func             z_free_func
-#  define gzFile                z_gzFile
+#  ifndef Z_SOLO
+#    define gzFile                z_gzFile
+#  endif
 #  define gz_header             z_gz_header
 #  define gz_headerp            z_gz_headerp
 #  define in_func               z_in_func
@@ -199,6 +220,12 @@
 #  endif
 #endif
 
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
+#endif
+
 /* Some Mac compilers merge all .h files incorrectly: */
 #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
 #  define NO_DUMMY_DECL
@@ -245,6 +272,14 @@
 #  endif
 #endif
 
+#ifndef Z_ARG /* function prototypes for stdarg */
+#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#    define Z_ARG(args)  args
+#  else
+#    define Z_ARG(args)  ()
+#  endif
+#endif
+
 /* The following definitions for FAR are needed only for MSDOS mixed
  * model programming (small or medium model with some far allocations).
  * This was tested only with MSC; for other MSDOS compilers you may have
@@ -358,12 +393,47 @@
    typedef Byte       *voidp;
 #endif
 
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (UINT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned
+#  elif (ULONG_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned long
+#  elif (USHRT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned short
+#  endif
+#endif
+
+#ifdef Z_U4
+   typedef Z_U4 z_crc_t;
+#else
+   typedef unsigned long z_crc_t;
+#endif
+
 #ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
 #  define Z_HAVE_UNISTD_H
 #endif
 
+#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_STDARG_H
+#endif
+
 #ifdef STDC
-#  include <sys/types.h>    /* for off_t */
+#  ifndef Z_SOLO
+#    include <sys/types.h>      /* for off_t */
+#  endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+#    include <stdarg.h>         /* for va_list */
+#  endif
+#endif
+
+#ifdef _WIN32
+#  ifndef Z_SOLO
+#    include <stddef.h>         /* for wchar_t */
+#  endif
 #endif
 
 /* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
@@ -372,21 +442,38 @@
  * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
  * equivalently requesting no 64-bit operations
  */
-#if -_LARGEFILE64_SOURCE - -1 == 1
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
 #  undef _LARGEFILE64_SOURCE
 #endif
 
-#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
-#  include <unistd.h>       /* for SEEK_* and off_t */
-#  ifdef VMS
-#    include <unixio.h>     /* for off_t */
-#  endif
-#  ifndef z_off_t
-#    define z_off_t off_t
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+#  define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#    ifdef VMS
+#      include <unixio.h>       /* for off_t */
+#    endif
+#    ifndef z_off_t
+#      define z_off_t off_t
+#    endif
 #  endif
 #endif
 
-#ifndef SEEK_SET
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
 #  define SEEK_SET        0       /* Seek from beginning of file.  */
 #  define SEEK_CUR        1       /* Seek from current position.  */
 #  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
@@ -396,18 +483,14 @@
 #  define z_off_t long
 #endif
 
-#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
+#if !defined(_WIN32) && defined(Z_LARGE64)
 #  define z_off64_t off64_t
 #else
-#  define z_off64_t z_off_t
-#endif
-
-#if defined(__OS400__)
-#  define NO_vsnprintf
-#endif
-
-#if defined(__MVS__)
-#  define NO_vsnprintf
+#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
 #endif
 
 /* MVS linker does not support external names larger than 8 bytes */
diff --git a/Modules/zlib/zconf.h.in b/Modules/zlib/zconf.h.in
index 02ce56c..9987a77 100644
--- a/Modules/zlib/zconf.h.in
+++ b/Modules/zlib/zconf.h.in
@@ -1,5 +1,5 @@
 /* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -15,11 +15,13 @@
  * this permanently in zconf.h using "./configure --zprefix".
  */
 #ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+#  define Z_PREFIX_SET
 
 /* all linked symbols */
 #  define _dist_code            z__dist_code
 #  define _length_code          z__length_code
 #  define _tr_align             z__tr_align
+#  define _tr_flush_bits        z__tr_flush_bits
 #  define _tr_flush_block       z__tr_flush_block
 #  define _tr_init              z__tr_init
 #  define _tr_stored_block      z__tr_stored_block
@@ -27,9 +29,11 @@
 #  define adler32               z_adler32
 #  define adler32_combine       z_adler32_combine
 #  define adler32_combine64     z_adler32_combine64
-#  define compress              z_compress
-#  define compress2             z_compress2
-#  define compressBound         z_compressBound
+#  ifndef Z_SOLO
+#    define compress              z_compress
+#    define compress2             z_compress2
+#    define compressBound         z_compressBound
+#  endif
 #  define crc32                 z_crc32
 #  define crc32_combine         z_crc32_combine
 #  define crc32_combine64       z_crc32_combine64
@@ -40,44 +44,53 @@
 #  define deflateInit2_         z_deflateInit2_
 #  define deflateInit_          z_deflateInit_
 #  define deflateParams         z_deflateParams
+#  define deflatePending        z_deflatePending
 #  define deflatePrime          z_deflatePrime
 #  define deflateReset          z_deflateReset
+#  define deflateResetKeep      z_deflateResetKeep
 #  define deflateSetDictionary  z_deflateSetDictionary
 #  define deflateSetHeader      z_deflateSetHeader
 #  define deflateTune           z_deflateTune
 #  define deflate_copyright     z_deflate_copyright
 #  define get_crc_table         z_get_crc_table
-#  define gz_error              z_gz_error
-#  define gz_intmax             z_gz_intmax
-#  define gz_strwinerror        z_gz_strwinerror
-#  define gzbuffer              z_gzbuffer
-#  define gzclearerr            z_gzclearerr
-#  define gzclose               z_gzclose
-#  define gzclose_r             z_gzclose_r
-#  define gzclose_w             z_gzclose_w
-#  define gzdirect              z_gzdirect
-#  define gzdopen               z_gzdopen
-#  define gzeof                 z_gzeof
-#  define gzerror               z_gzerror
-#  define gzflush               z_gzflush
-#  define gzgetc                z_gzgetc
-#  define gzgets                z_gzgets
-#  define gzoffset              z_gzoffset
-#  define gzoffset64            z_gzoffset64
-#  define gzopen                z_gzopen
-#  define gzopen64              z_gzopen64
-#  define gzprintf              z_gzprintf
-#  define gzputc                z_gzputc
-#  define gzputs                z_gzputs
-#  define gzread                z_gzread
-#  define gzrewind              z_gzrewind
-#  define gzseek                z_gzseek
-#  define gzseek64              z_gzseek64
-#  define gzsetparams           z_gzsetparams
-#  define gztell                z_gztell
-#  define gztell64              z_gztell64
-#  define gzungetc              z_gzungetc
-#  define gzwrite               z_gzwrite
+#  ifndef Z_SOLO
+#    define gz_error              z_gz_error
+#    define gz_intmax             z_gz_intmax
+#    define gz_strwinerror        z_gz_strwinerror
+#    define gzbuffer              z_gzbuffer
+#    define gzclearerr            z_gzclearerr
+#    define gzclose               z_gzclose
+#    define gzclose_r             z_gzclose_r
+#    define gzclose_w             z_gzclose_w
+#    define gzdirect              z_gzdirect
+#    define gzdopen               z_gzdopen
+#    define gzeof                 z_gzeof
+#    define gzerror               z_gzerror
+#    define gzflush               z_gzflush
+#    define gzgetc                z_gzgetc
+#    define gzgetc_               z_gzgetc_
+#    define gzgets                z_gzgets
+#    define gzoffset              z_gzoffset
+#    define gzoffset64            z_gzoffset64
+#    define gzopen                z_gzopen
+#    define gzopen64              z_gzopen64
+#    ifdef _WIN32
+#      define gzopen_w              z_gzopen_w
+#    endif
+#    define gzprintf              z_gzprintf
+#    define gzvprintf             z_gzvprintf
+#    define gzputc                z_gzputc
+#    define gzputs                z_gzputs
+#    define gzread                z_gzread
+#    define gzrewind              z_gzrewind
+#    define gzseek                z_gzseek
+#    define gzseek64              z_gzseek64
+#    define gzsetparams           z_gzsetparams
+#    define gztell                z_gztell
+#    define gztell64              z_gztell64
+#    define gzungetc              z_gzungetc
+#    define gzwrite               z_gzwrite
+#  endif
 #  define inflate               z_inflate
 #  define inflateBack           z_inflateBack
 #  define inflateBackEnd        z_inflateBackEnd
@@ -92,16 +105,22 @@
 #  define inflateReset          z_inflateReset
 #  define inflateReset2         z_inflateReset2
 #  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateSync           z_inflateSync
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateUndermine      z_inflateUndermine
+#  define inflateResetKeep      z_inflateResetKeep
 #  define inflate_copyright     z_inflate_copyright
 #  define inflate_fast          z_inflate_fast
 #  define inflate_table         z_inflate_table
-#  define uncompress            z_uncompress
+#  ifndef Z_SOLO
+#    define uncompress            z_uncompress
+#  endif
 #  define zError                z_zError
-#  define zcalloc               z_zcalloc
-#  define zcfree                z_zcfree
+#  ifndef Z_SOLO
+#    define zcalloc               z_zcalloc
+#    define zcfree                z_zcfree
+#  endif
 #  define zlibCompileFlags      z_zlibCompileFlags
 #  define zlibVersion           z_zlibVersion
 
@@ -111,7 +130,9 @@
 #  define alloc_func            z_alloc_func
 #  define charf                 z_charf
 #  define free_func             z_free_func
-#  define gzFile                z_gzFile
+#  ifndef Z_SOLO
+#    define gzFile                z_gzFile
+#  endif
 #  define gz_header             z_gz_header
 #  define gz_headerp            z_gz_headerp
 #  define in_func               z_in_func
@@ -197,6 +218,12 @@
 #  endif
 #endif
 
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
+#endif
+
 /* Some Mac compilers merge all .h files incorrectly: */
 #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
 #  define NO_DUMMY_DECL
@@ -243,6 +270,14 @@
 #  endif
 #endif
 
+#ifndef Z_ARG /* function prototypes for stdarg */
+#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#    define Z_ARG(args)  args
+#  else
+#    define Z_ARG(args)  ()
+#  endif
+#endif
+
 /* The following definitions for FAR are needed only for MSDOS mixed
  * model programming (small or medium model with some far allocations).
  * This was tested only with MSC; for other MSDOS compilers you may have
@@ -356,12 +391,47 @@
    typedef Byte       *voidp;
 #endif
 
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (UINT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned
+#  elif (ULONG_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned long
+#  elif (USHRT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned short
+#  endif
+#endif
+
+#ifdef Z_U4
+   typedef Z_U4 z_crc_t;
+#else
+   typedef unsigned long z_crc_t;
+#endif
+
 #ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
 #  define Z_HAVE_UNISTD_H
 #endif
 
+#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_STDARG_H
+#endif
+
 #ifdef STDC
-#  include <sys/types.h>    /* for off_t */
+#  ifndef Z_SOLO
+#    include <sys/types.h>      /* for off_t */
+#  endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+#    include <stdarg.h>         /* for va_list */
+#  endif
+#endif
+
+#ifdef _WIN32
+#  ifndef Z_SOLO
+#    include <stddef.h>         /* for wchar_t */
+#  endif
 #endif
 
 /* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
@@ -370,21 +440,38 @@
  * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
  * equivalently requesting no 64-bit operations
  */
-#if -_LARGEFILE64_SOURCE - -1 == 1
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
 #  undef _LARGEFILE64_SOURCE
 #endif
 
-#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
-#  include <unistd.h>       /* for SEEK_* and off_t */
-#  ifdef VMS
-#    include <unixio.h>     /* for off_t */
-#  endif
-#  ifndef z_off_t
-#    define z_off_t off_t
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+#  define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#    ifdef VMS
+#      include <unixio.h>       /* for off_t */
+#    endif
+#    ifndef z_off_t
+#      define z_off_t off_t
+#    endif
 #  endif
 #endif
 
-#ifndef SEEK_SET
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
 #  define SEEK_SET        0       /* Seek from beginning of file.  */
 #  define SEEK_CUR        1       /* Seek from current position.  */
 #  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
@@ -394,18 +481,14 @@
 #  define z_off_t long
 #endif
 
-#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
+#if !defined(_WIN32) && defined(Z_LARGE64)
 #  define z_off64_t off64_t
 #else
-#  define z_off64_t z_off_t
-#endif
-
-#if defined(__OS400__)
-#  define NO_vsnprintf
-#endif
-
-#if defined(__MVS__)
-#  define NO_vsnprintf
+#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
 #endif
 
 /* MVS linker does not support external names larger than 8 bytes */
diff --git a/Modules/zlib/zconf.in.h b/Modules/zlib/zconf.in.h
deleted file mode 100644
index 03a9431..0000000
--- a/Modules/zlib/zconf.in.h
+++ /dev/null
@@ -1,332 +0,0 @@
-/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2005 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#ifndef ZCONF_H
-#define ZCONF_H
-
-/*
- * If you *really* need a unique prefix for all types and library functions,
- * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
- */
-#ifdef Z_PREFIX
-#  define deflateInit_          z_deflateInit_
-#  define deflate               z_deflate
-#  define deflateEnd            z_deflateEnd
-#  define inflateInit_          z_inflateInit_
-#  define inflate               z_inflate
-#  define inflateEnd            z_inflateEnd
-#  define deflateInit2_         z_deflateInit2_
-#  define deflateSetDictionary  z_deflateSetDictionary
-#  define deflateCopy           z_deflateCopy
-#  define deflateReset          z_deflateReset
-#  define deflateParams         z_deflateParams
-#  define deflateBound          z_deflateBound
-#  define deflatePrime          z_deflatePrime
-#  define inflateInit2_         z_inflateInit2_
-#  define inflateSetDictionary  z_inflateSetDictionary
-#  define inflateSync           z_inflateSync
-#  define inflateSyncPoint      z_inflateSyncPoint
-#  define inflateCopy           z_inflateCopy
-#  define inflateReset          z_inflateReset
-#  define inflateBack           z_inflateBack
-#  define inflateBackEnd        z_inflateBackEnd
-#  define compress              z_compress
-#  define compress2             z_compress2
-#  define compressBound         z_compressBound
-#  define uncompress            z_uncompress
-#  define adler32               z_adler32
-#  define crc32                 z_crc32
-#  define get_crc_table         z_get_crc_table
-#  define zError                z_zError
-
-#  define alloc_func            z_alloc_func
-#  define free_func             z_free_func
-#  define in_func               z_in_func
-#  define out_func              z_out_func
-#  define Byte                  z_Byte
-#  define uInt                  z_uInt
-#  define uLong                 z_uLong
-#  define Bytef                 z_Bytef
-#  define charf                 z_charf
-#  define intf                  z_intf
-#  define uIntf                 z_uIntf
-#  define uLongf                z_uLongf
-#  define voidpf                z_voidpf
-#  define voidp                 z_voidp
-#endif
-
-#if defined(__MSDOS__) && !defined(MSDOS)
-#  define MSDOS
-#endif
-#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
-#  define OS2
-#endif
-#if defined(_WINDOWS) && !defined(WINDOWS)
-#  define WINDOWS
-#endif
-#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
-#  ifndef WIN32
-#    define WIN32
-#  endif
-#endif
-#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
-#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
-#    ifndef SYS16BIT
-#      define SYS16BIT
-#    endif
-#  endif
-#endif
-
-/*
- * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
- * than 64k bytes at a time (needed on systems with 16-bit int).
- */
-#ifdef SYS16BIT
-#  define MAXSEG_64K
-#endif
-#ifdef MSDOS
-#  define UNALIGNED_OK
-#endif
-
-#ifdef __STDC_VERSION__
-#  ifndef STDC
-#    define STDC
-#  endif
-#  if __STDC_VERSION__ >= 199901L
-#    ifndef STDC99
-#      define STDC99
-#    endif
-#  endif
-#endif
-#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
-#  define STDC
-#endif
-
-#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
-#  define STDC
-#endif
-
-#ifndef STDC
-#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
-#    define const       /* note: need a more gentle solution here */
-#  endif
-#endif
-
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-#  define NO_DUMMY_DECL
-#endif
-
-/* Maximum value for memLevel in deflateInit2 */
-#ifndef MAX_MEM_LEVEL
-#  ifdef MAXSEG_64K
-#    define MAX_MEM_LEVEL 8
-#  else
-#    define MAX_MEM_LEVEL 9
-#  endif
-#endif
-
-/* Maximum value for windowBits in deflateInit2 and inflateInit2.
- * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
- * created by gzip. (Files created by minigzip can still be extracted by
- * gzip.)
- */
-#ifndef MAX_WBITS
-#  define MAX_WBITS   15 /* 32K LZ77 window */
-#endif
-
-/* The memory requirements for deflate are (in bytes):
-            (1 << (windowBits+2)) +  (1 << (memLevel+9))
- that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
- plus a few kilobytes for small objects. For example, if you want to reduce
- the default memory requirements from 256K to 128K, compile with
-     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
- Of course this will generally degrade compression (there's no free lunch).
-
-   The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
- for small objects.
-*/
-
-                        /* Type declarations */
-
-#ifndef OF /* function prototypes */
-#  ifdef STDC
-#    define OF(args)  args
-#  else
-#    define OF(args)  ()
-#  endif
-#endif
-
-/* The following definitions for FAR are needed only for MSDOS mixed
- * model programming (small or medium model with some far allocations).
- * This was tested only with MSC; for other MSDOS compilers you may have
- * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
- * just define FAR to be empty.
- */
-#ifdef SYS16BIT
-#  if defined(M_I86SM) || defined(M_I86MM)
-     /* MSC small or medium model */
-#    define SMALL_MEDIUM
-#    ifdef _MSC_VER
-#      define FAR _far
-#    else
-#      define FAR far
-#    endif
-#  endif
-#  if (defined(__SMALL__) || defined(__MEDIUM__))
-     /* Turbo C small or medium model */
-#    define SMALL_MEDIUM
-#    ifdef __BORLANDC__
-#      define FAR _far
-#    else
-#      define FAR far
-#    endif
-#  endif
-#endif
-
-#if defined(WINDOWS) || defined(WIN32)
-   /* If building or using zlib as a DLL, define ZLIB_DLL.
-    * This is not mandatory, but it offers a little performance increase.
-    */
-#  ifdef ZLIB_DLL
-#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
-#      ifdef ZLIB_INTERNAL
-#        define ZEXTERN extern __declspec(dllexport)
-#      else
-#        define ZEXTERN extern __declspec(dllimport)
-#      endif
-#    endif
-#  endif  /* ZLIB_DLL */
-   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
-    * define ZLIB_WINAPI.
-    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
-    */
-#  ifdef ZLIB_WINAPI
-#    ifdef FAR
-#      undef FAR
-#    endif
-#    include <windows.h>
-     /* No need for _export, use ZLIB.DEF instead. */
-     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
-#    define ZEXPORT WINAPI
-#    ifdef WIN32
-#      define ZEXPORTVA WINAPIV
-#    else
-#      define ZEXPORTVA FAR CDECL
-#    endif
-#  endif
-#endif
-
-#if defined (__BEOS__)
-#  ifdef ZLIB_DLL
-#    ifdef ZLIB_INTERNAL
-#      define ZEXPORT   __declspec(dllexport)
-#      define ZEXPORTVA __declspec(dllexport)
-#    else
-#      define ZEXPORT   __declspec(dllimport)
-#      define ZEXPORTVA __declspec(dllimport)
-#    endif
-#  endif
-#endif
-
-#ifndef ZEXTERN
-#  define ZEXTERN extern
-#endif
-#ifndef ZEXPORT
-#  define ZEXPORT
-#endif
-#ifndef ZEXPORTVA
-#  define ZEXPORTVA
-#endif
-
-#ifndef FAR
-#  define FAR
-#endif
-
-#if !defined(__MACTYPES__)
-typedef unsigned char  Byte;  /* 8 bits */
-#endif
-typedef unsigned int   uInt;  /* 16 bits or more */
-typedef unsigned long  uLong; /* 32 bits or more */
-
-#ifdef SMALL_MEDIUM
-   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
-#  define Bytef Byte FAR
-#else
-   typedef Byte  FAR Bytef;
-#endif
-typedef char  FAR charf;
-typedef int   FAR intf;
-typedef uInt  FAR uIntf;
-typedef uLong FAR uLongf;
-
-#ifdef STDC
-   typedef void const *voidpc;
-   typedef void FAR   *voidpf;
-   typedef void       *voidp;
-#else
-   typedef Byte const *voidpc;
-   typedef Byte FAR   *voidpf;
-   typedef Byte       *voidp;
-#endif
-
-#if 0           /* HAVE_UNISTD_H -- this line is updated by ./configure */
-#  include <sys/types.h> /* for off_t */
-#  include <unistd.h>    /* for SEEK_* and off_t */
-#  ifdef VMS
-#    include <unixio.h>   /* for off_t */
-#  endif
-#  define z_off_t off_t
-#endif
-#ifndef SEEK_SET
-#  define SEEK_SET        0       /* Seek from beginning of file.  */
-#  define SEEK_CUR        1       /* Seek from current position.  */
-#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
-#endif
-#ifndef z_off_t
-#  define z_off_t long
-#endif
-
-#if defined(__OS400__)
-#  define NO_vsnprintf
-#endif
-
-#if defined(__MVS__)
-#  define NO_vsnprintf
-#  ifdef FAR
-#    undef FAR
-#  endif
-#endif
-
-/* MVS linker does not support external names larger than 8 bytes */
-#if defined(__MVS__)
-#   pragma map(deflateInit_,"DEIN")
-#   pragma map(deflateInit2_,"DEIN2")
-#   pragma map(deflateEnd,"DEEND")
-#   pragma map(deflateBound,"DEBND")
-#   pragma map(inflateInit_,"ININ")
-#   pragma map(inflateInit2_,"ININ2")
-#   pragma map(inflateEnd,"INEND")
-#   pragma map(inflateSync,"INSY")
-#   pragma map(inflateSetDictionary,"INSEDI")
-#   pragma map(compressBound,"CMBND")
-#   pragma map(inflate_table,"INTABL")
-#   pragma map(inflate_fast,"INFA")
-#   pragma map(inflate_copyright,"INCOPY")
-#endif
-
-#endif /* ZCONF_H */
diff --git a/Modules/zlib/zlib.3 b/Modules/zlib/zlib.3
index 27adc4c..0160e62 100644
--- a/Modules/zlib/zlib.3
+++ b/Modules/zlib/zlib.3
@@ -1,4 +1,4 @@
-.TH ZLIB 3 "19 Apr 2010"
+.TH ZLIB 3 "28 Apr 2013"
 .SH NAME
 zlib \- compression/decompression library
 .SH SYNOPSIS
@@ -36,9 +36,9 @@
 .IR zlib.h .
 The distribution source includes examples of use of the library
 in the files
-.I example.c
+.I test/example.c
 and
-.IR minigzip.c,
+.IR test/minigzip.c,
 as well as other examples in the
 .IR examples/
 directory.
@@ -65,7 +65,7 @@
 written by A.M. Kuchling (amk@magnet.com),
 is available in Python 1.5 and later versions:
 .IP
-http://www.python.org/doc/lib/module-zlib.html
+http://docs.python.org/library/zlib.html
 .LP
 .I zlib
 is built into
@@ -95,11 +95,11 @@
 The data format used by the zlib library is described by RFC
 (Request for Comments) 1950 to 1952 in the files:
 .IP
-http://www.ietf.org/rfc/rfc1950.txt (for the zlib header and trailer format)
+http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format)
 .br
-http://www.ietf.org/rfc/rfc1951.txt (for the deflate compressed data format)
+http://tools.ietf.org/html/rfc1951 (for the deflate compressed data format)
 .br
-http://www.ietf.org/rfc/rfc1952.txt (for the gzip header and trailer format)
+http://tools.ietf.org/html/rfc1952 (for the gzip header and trailer format)
 .LP
 Mark Nelson wrote an article about
 .I zlib
@@ -125,8 +125,8 @@
 Send questions and/or comments to zlib@gzip.org,
 or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).
 .SH AUTHORS
-Version 1.2.5
-Copyright (C) 1995-2010 Jean-loup Gailly (jloup@gzip.org)
+Version 1.2.8
+Copyright (C) 1995-2013 Jean-loup Gailly (jloup@gzip.org)
 and Mark Adler (madler@alumni.caltech.edu).
 .LP
 This software is provided "as-is,"
diff --git a/Modules/zlib/zlib.h b/Modules/zlib/zlib.h
index 79a187c..3e0c767 100644
--- a/Modules/zlib/zlib.h
+++ b/Modules/zlib/zlib.h
@@ -1,7 +1,7 @@
 /* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.2.5, April 19th, 2010
+  version 1.2.8, April 28th, 2013
 
-  Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
+  Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -24,8 +24,8 @@
 
 
   The data format used by the zlib library is described by RFCs (Request for
-  Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt
-  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
+  Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+  (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
 */
 
 #ifndef ZLIB_H
@@ -37,11 +37,11 @@
 extern "C" {
 #endif
 
-#define ZLIB_VERSION "1.2.5"
-#define ZLIB_VERNUM 0x1250
+#define ZLIB_VERSION "1.2.8"
+#define ZLIB_VERNUM 0x1280
 #define ZLIB_VER_MAJOR 1
 #define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 5
+#define ZLIB_VER_REVISION 8
 #define ZLIB_VER_SUBREVISION 0
 
 /*
@@ -83,15 +83,15 @@
 struct internal_state;
 
 typedef struct z_stream_s {
-    Bytef    *next_in;  /* next input byte */
+    z_const Bytef *next_in;     /* next input byte */
     uInt     avail_in;  /* number of bytes available at next_in */
-    uLong    total_in;  /* total nb of input bytes read so far */
+    uLong    total_in;  /* total number of input bytes read so far */
 
     Bytef    *next_out; /* next output byte should be put there */
     uInt     avail_out; /* remaining free space at next_out */
-    uLong    total_out; /* total nb of bytes output so far */
+    uLong    total_out; /* total number of bytes output so far */
 
-    char     *msg;      /* last error message, NULL if no error */
+    z_const char *msg;  /* last error message, NULL if no error */
     struct internal_state FAR *state; /* not visible by applications */
 
     alloc_func zalloc;  /* used to allocate the internal state */
@@ -327,8 +327,9 @@
 
     Z_FINISH can be used immediately after deflateInit if all the compression
   is to be done in a single step.  In this case, avail_out must be at least the
-  value returned by deflateBound (see below).  If deflate does not return
-  Z_STREAM_END, then it must be called again as described above.
+  value returned by deflateBound (see below).  Then deflate is guaranteed to
+  return Z_STREAM_END.  If not enough output space is provided, deflate will
+  not return Z_STREAM_END, and it must be called again as described above.
 
     deflate() sets strm->adler to the adler32 checksum of all input read
   so far (that is, total_in bytes).
@@ -451,23 +452,29 @@
   error.  However if all decompression is to be performed in a single step (a
   single call of inflate), the parameter flush should be set to Z_FINISH.  In
   this case all pending input is processed and all pending output is flushed;
-  avail_out must be large enough to hold all the uncompressed data.  (The size
-  of the uncompressed data may have been saved by the compressor for this
-  purpose.) The next operation on this stream must be inflateEnd to deallocate
-  the decompression state.  The use of Z_FINISH is never required, but can be
-  used to inform inflate that a faster approach may be used for the single
-  inflate() call.
+  avail_out must be large enough to hold all of the uncompressed data for the
+  operation to complete.  (The size of the uncompressed data may have been
+  saved by the compressor for this purpose.) The use of Z_FINISH is not
+  required to perform an inflation in one step.  However it may be used to
+  inform inflate that a faster approach can be used for the single inflate()
+  call.  Z_FINISH also informs inflate to not maintain a sliding window if the
+  stream completes, which reduces inflate's memory footprint.  If the stream
+  does not complete, either because not all of the stream is provided or not
+  enough output space is provided, then a sliding window will be allocated and
+  inflate() can be called again to continue the operation as if Z_NO_FLUSH had
+  been used.
 
      In this implementation, inflate() always flushes as much output as
   possible to the output buffer, and always uses the faster approach on the
-  first call.  So the only effect of the flush parameter in this implementation
-  is on the return value of inflate(), as noted below, or when it returns early
-  because Z_BLOCK or Z_TREES is used.
+  first call.  So the effects of the flush parameter in this implementation are
+  on the return value of inflate() as noted below, when inflate() returns early
+  when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
+  memory for a sliding window when Z_FINISH is used.
 
      If a preset dictionary is needed after this call (see inflateSetDictionary
-  below), inflate sets strm->adler to the adler32 checksum of the dictionary
+  below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
   chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
-  strm->adler to the adler32 checksum of all output produced so far (that is,
+  strm->adler to the Adler-32 checksum of all output produced so far (that is,
   total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
   below.  At the end of the stream, inflate() checks that its computed adler32
   checksum is equal to that saved by the compressor and returns Z_STREAM_END
@@ -478,7 +485,9 @@
   initializing with inflateInit2().  Any information contained in the gzip
   header is not retained, so applications that need that information should
   instead use raw inflate, see inflateInit2() below, or inflateBack() and
-  perform their own processing of the gzip header and trailer.
+  perform their own processing of the gzip header and trailer.  When processing
+  gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+  producted so far.  The CRC-32 is checked against the gzip trailer.
 
     inflate() returns Z_OK if some progress has been made (more input processed
   or more output produced), Z_STREAM_END if the end of the compressed data has
@@ -580,10 +589,15 @@
                                              uInt  dictLength));
 /*
      Initializes the compression dictionary from the given byte sequence
-   without producing any compressed output.  This function must be called
-   immediately after deflateInit, deflateInit2 or deflateReset, before any call
-   of deflate.  The compressor and decompressor must use exactly the same
-   dictionary (see inflateSetDictionary).
+   without producing any compressed output.  When using the zlib format, this
+   function must be called immediately after deflateInit, deflateInit2 or
+   deflateReset, and before any call of deflate.  When doing raw deflate, this
+   function must be called either before any call of deflate, or immediately
+   after the completion of a deflate block, i.e. after all input has been
+   consumed and all output has been delivered when using any of the flush
+   options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH.  The
+   compressor and decompressor must use exactly the same dictionary (see
+   inflateSetDictionary).
 
      The dictionary should consist of strings (byte sequences) that are likely
    to be encountered later in the data to be compressed, with the most commonly
@@ -610,8 +624,8 @@
      deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
    parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
    inconsistent (for example if deflate has already been called for this stream
-   or if the compression method is bsort).  deflateSetDictionary does not
-   perform any compression: this will be done by deflate().
+   or if not at a block boundary for raw deflate).  deflateSetDictionary does
+   not perform any compression: this will be done by deflate().
 */
 
 ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
@@ -688,9 +702,29 @@
    deflation of sourceLen bytes.  It must be called after deflateInit() or
    deflateInit2(), and after deflateSetHeader(), if used.  This would be used
    to allocate an output buffer for deflation in a single pass, and so would be
-   called before deflate().
+   called before deflate().  If that first deflate() call is provided the
+   sourceLen input bytes, an output buffer allocated to the size returned by
+   deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
+   to return Z_STREAM_END.  Note that it is possible for the compressed size to
+   be larger than the value returned by deflateBound() if flush options other
+   than Z_FINISH or Z_NO_FLUSH are used.
 */
 
+ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
+                                       unsigned *pending,
+                                       int *bits));
+/*
+     deflatePending() returns the number of bytes and bits of output that have
+   been generated, but not yet provided in the available output.  The bytes not
+   provided would be due to the available output space having being consumed.
+   The number of bits of output not provided are between 0 and 7, where they
+   await more bits to join them in order to fill out a full byte.  If pending
+   or bits are Z_NULL, then those values are not set.
+
+     deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+ */
+
 ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
                                      int bits,
                                      int value));
@@ -703,8 +737,9 @@
    than or equal to 16, and that many of the least significant bits of value
    will be inserted in the output.
 
-     deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
+     deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
+   room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
+   source stream state was inconsistent.
 */
 
 ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
@@ -790,10 +825,11 @@
    if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor
    can be determined from the adler32 value returned by that call of inflate.
    The compressor and decompressor must use exactly the same dictionary (see
-   deflateSetDictionary).  For raw inflate, this function can be called
-   immediately after inflateInit2() or inflateReset() and before any call of
-   inflate() to set the dictionary.  The application must insure that the
-   dictionary that was used for compression is provided.
+   deflateSetDictionary).  For raw inflate, this function can be called at any
+   time to set the dictionary.  If the provided dictionary is smaller than the
+   window and there is already data in the window, then the provided dictionary
+   will amend what's there.  The application must insure that the dictionary
+   that was used for compression is provided.
 
      inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
    parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
@@ -803,19 +839,38 @@
    inflate().
 */
 
+ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,
+                                             Bytef *dictionary,
+                                             uInt  *dictLength));
+/*
+     Returns the sliding dictionary being maintained by inflate.  dictLength is
+   set to the number of bytes in the dictionary, and that many bytes are copied
+   to dictionary.  dictionary must have enough space, where 32768 bytes is
+   always enough.  If inflateGetDictionary() is called with dictionary equal to
+   Z_NULL, then only the dictionary length is returned, and nothing is copied.
+   Similary, if dictLength is Z_NULL, then it is not set.
+
+     inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+   stream state is inconsistent.
+*/
+
 ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
 /*
-     Skips invalid compressed data until a full flush point (see above the
-   description of deflate with Z_FULL_FLUSH) can be found, or until all
+     Skips invalid compressed data until a possible full flush point (see above
+   for the description of deflate with Z_FULL_FLUSH) can be found, or until all
    available input is skipped.  No output is provided.
 
-     inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
-   if no more input was provided, Z_DATA_ERROR if no flush point has been
-   found, or Z_STREAM_ERROR if the stream structure was inconsistent.  In the
-   success case, the application may save the current value of total_in
-   which indicates where valid compressed data was found.  In the error case,
-   the application may repeatedly call inflateSync, providing more input each
-   time, until success or end of the input data.
+     inflateSync searches for a 00 00 FF FF pattern in the compressed data.
+   All full flush points have this pattern, but not all occurrences of this
+   pattern are full flush points.
+
+     inflateSync returns Z_OK if a possible full flush point has been found,
+   Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
+   has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
+   In the success case, the application may save the current current value of
+   total_in which indicates where valid compressed data was found.  In the
+   error case, the application may repeatedly call inflateSync, providing more
+   input each time, until success or end of the input data.
 */
 
 ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
@@ -962,12 +1017,13 @@
      See inflateBack() for the usage of these routines.
 
      inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
-   the paramaters are invalid, Z_MEM_ERROR if the internal state could not be
+   the parameters are invalid, Z_MEM_ERROR if the internal state could not be
    allocated, or Z_VERSION_ERROR if the version of the library does not match
    the version of the header file.
 */
 
-typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *));
+typedef unsigned (*in_func) OF((void FAR *,
+                                z_const unsigned char FAR * FAR *));
 typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
 
 ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
@@ -975,11 +1031,12 @@
                                     out_func out, void FAR *out_desc));
 /*
      inflateBack() does a raw inflate with a single call using a call-back
-   interface for input and output.  This is more efficient than inflate() for
-   file i/o applications in that it avoids copying between the output and the
-   sliding window by simply making the window itself the output buffer.  This
-   function trusts the application to not change the output buffer passed by
-   the output function, at least until inflateBack() returns.
+   interface for input and output.  This is potentially more efficient than
+   inflate() for file i/o applications, in that it avoids copying between the
+   output and the sliding window by simply making the window itself the output
+   buffer.  inflate() can be faster on modern CPUs when used with large
+   buffers.  inflateBack() trusts the application to not change the output
+   buffer passed by the output function, at least until inflateBack() returns.
 
      inflateBackInit() must be called first to allocate the internal state
    and to initialize the state with the user-provided window buffer.
@@ -1088,6 +1145,7 @@
      27-31: 0 (reserved)
  */
 
+#ifndef Z_SOLO
 
                         /* utility functions */
 
@@ -1149,10 +1207,11 @@
 
      uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
    enough memory, Z_BUF_ERROR if there was not enough room in the output
-   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.
+   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.  In
+   the case where there is not enough room, uncompress() will fill the output
+   buffer with the uncompressed data up to that point.
 */
 
-
                         /* gzip file access functions */
 
 /*
@@ -1162,7 +1221,7 @@
    wrapper, documented in RFC 1952, wrapped around a deflate stream.
 */
 
-typedef voidp gzFile;       /* opaque gzip file descriptor */
+typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */
 
 /*
 ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
@@ -1172,13 +1231,28 @@
    a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
    compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
    for fixed code compression as in "wb9F".  (See the description of
-   deflateInit2 for more information about the strategy parameter.) Also "a"
-   can be used instead of "w" to request that the gzip stream that will be
-   written be appended to the file.  "+" will result in an error, since reading
-   and writing to the same gzip file is not supported.
+   deflateInit2 for more information about the strategy parameter.)  'T' will
+   request transparent writing or appending with no compression and not using
+   the gzip format.
+
+     "a" can be used instead of "w" to request that the gzip stream that will
+   be written be appended to the file.  "+" will result in an error, since
+   reading and writing to the same gzip file is not supported.  The addition of
+   "x" when writing will create the file exclusively, which fails if the file
+   already exists.  On systems that support it, the addition of "e" when
+   reading or writing will set the flag to close the file on an execve() call.
+
+     These functions, as well as gzip, will read and decode a sequence of gzip
+   streams in a file.  The append function of gzopen() can be used to create
+   such a file.  (Also see gzflush() for another way to do this.)  When
+   appending, gzopen does not test whether the file begins with a gzip stream,
+   nor does it look for the end of the gzip streams to begin appending.  gzopen
+   will simply append a gzip stream to the existing file.
 
      gzopen can be used to read a file which is not in gzip format; in this
-   case gzread will directly read from the file without decompression.
+   case gzread will directly read from the file without decompression.  When
+   reading, this will be detected automatically by looking for the magic two-
+   byte gzip header.
 
      gzopen returns NULL if the file could not be opened, if there was
    insufficient memory to allocate the gzFile state, or if an invalid mode was
@@ -1197,7 +1271,11 @@
    descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
    fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
    mode);.  The duplicated descriptor should be saved to avoid a leak, since
-   gzdopen does not close fd if it fails.
+   gzdopen does not close fd if it fails.  If you are using fileno() to get the
+   file descriptor from a FILE *, then you will have to use dup() to avoid
+   double-close()ing the file descriptor.  Both gzclose() and fclose() will
+   close the associated file descriptor, so they need to have different file
+   descriptors.
 
      gzdopen returns NULL if there was insufficient memory to allocate the
    gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
@@ -1235,14 +1313,26 @@
 ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
 /*
      Reads the given number of uncompressed bytes from the compressed file.  If
-   the input file was not in gzip format, gzread copies the given number of
-   bytes into the buffer.
+   the input file is not in gzip format, gzread copies the given number of
+   bytes into the buffer directly from the file.
 
      After reaching the end of a gzip stream in the input, gzread will continue
-   to read, looking for another gzip stream, or failing that, reading the rest
-   of the input file directly without decompression.  The entire input file
-   will be read if gzread is called until it returns less than the requested
-   len.
+   to read, looking for another gzip stream.  Any number of gzip streams may be
+   concatenated in the input file, and will all be decompressed by gzread().
+   If something other than a gzip stream is encountered after a gzip stream,
+   that remaining trailing garbage is ignored (and no error is returned).
+
+     gzread can be used to read a gzip file that is being concurrently written.
+   Upon reaching the end of the input, gzread will return with the available
+   data.  If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
+   gzclearerr can be used to clear the end of file indicator in order to permit
+   gzread to be tried again.  Z_OK indicates that a gzip stream was completed
+   on the last gzread.  Z_BUF_ERROR indicates that the input file ended in the
+   middle of a gzip stream.  Note that gzread does not return -1 in the event
+   of an incomplete gzip stream.  This error is deferred until gzclose(), which
+   will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
+   stream.  Alternatively, gzerror can be used before gzclose to detect this
+   case.
 
      gzread returns the number of uncompressed bytes actually read, less than
    len for end of file, or -1 for error.
@@ -1256,7 +1346,7 @@
    error.
 */
 
-ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
 /*
      Converts, formats, and writes the arguments to the compressed file under
    control of the format string, as in fprintf.  gzprintf returns the number of
@@ -1301,7 +1391,10 @@
 ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
 /*
      Reads one byte from the compressed file.  gzgetc returns this byte or -1
-   in case of end of file or error.
+   in case of end of file or error.  This is implemented as a macro for speed.
+   As such, it does not do all of the checking the other functions do.  I.e.
+   it does not check to see if file is NULL, nor whether the structure file
+   points to has been clobbered or not.
 */
 
 ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
@@ -1397,9 +1490,7 @@
 ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
 /*
      Returns true (1) if file is being copied directly while reading, or false
-   (0) if file is a gzip stream being decompressed.  This state can change from
-   false to true while reading the input file if the end of a gzip stream is
-   reached, but is followed by data that is not another gzip stream.
+   (0) if file is a gzip stream being decompressed.
 
      If the input file is empty, gzdirect() will return true, since the input
    does not contain a gzip stream.
@@ -1408,6 +1499,13 @@
    cause buffers to be allocated to allow reading the file to determine if it
    is a gzip file.  Therefore if gzbuffer() is used, it should be called before
    gzdirect().
+
+     When writing, gzdirect() returns true (1) if transparent writing was
+   requested ("wT" for the gzopen() mode), or false (0) otherwise.  (Note:
+   gzdirect() is not needed when writing.  Transparent writing must be
+   explicitly requested, so the application already knows the answer.  When
+   linking statically, using gzdirect() will include all of the zlib code for
+   gzip file reading and decompression, which may not be desired.)
 */
 
 ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
@@ -1419,7 +1517,8 @@
    must not be called more than once on the same allocation.
 
      gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
-   file operation error, or Z_OK on success.
+   file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
+   last read ended in the middle of a gzip stream, or Z_OK on success.
 */
 
 ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
@@ -1457,6 +1556,7 @@
    file that is being written concurrently.
 */
 
+#endif /* !Z_SOLO */
 
                         /* checksum functions */
 
@@ -1492,16 +1592,17 @@
      Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1
    and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
    each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of
-   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.
+   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.  Note
+   that the z_off_t type (like off_t) is a signed integer.  If len2 is
+   negative, the result has no meaning or utility.
 */
 
 ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
 /*
      Update a running CRC-32 with the bytes buf[0..len-1] and return the
    updated CRC-32.  If buf is Z_NULL, this function returns the required
-   initial value for the for the crc.  Pre- and post-conditioning (one's
-   complement) is performed within this function so it shouldn't be done by the
-   application.
+   initial value for the crc.  Pre- and post-conditioning (one's complement) is
+   performed within this function so it shouldn't be done by the application.
 
    Usage example:
 
@@ -1544,17 +1645,42 @@
                                          const char *version,
                                          int stream_size));
 #define deflateInit(strm, level) \
-        deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))
+        deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
 #define inflateInit(strm) \
-        inflateInit_((strm),                ZLIB_VERSION, sizeof(z_stream))
+        inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
 #define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
         deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
-                      (strategy),           ZLIB_VERSION, sizeof(z_stream))
+                      (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
 #define inflateInit2(strm, windowBits) \
-        inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
+        inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                      (int)sizeof(z_stream))
 #define inflateBackInit(strm, windowBits, window) \
         inflateBackInit_((strm), (windowBits), (window), \
-                                            ZLIB_VERSION, sizeof(z_stream))
+                      ZLIB_VERSION, (int)sizeof(z_stream))
+
+#ifndef Z_SOLO
+
+/* gzgetc() macro and its supporting function and exposed data structure.  Note
+ * that the real internal state is much larger than the exposed structure.
+ * This abbreviated structure exposes just enough for the gzgetc() macro.  The
+ * user should not mess with these exposed elements, since their names or
+ * behavior could change in the future, perhaps even capriciously.  They can
+ * only be used by the gzgetc() macro.  You have been warned.
+ */
+struct gzFile_s {
+    unsigned have;
+    unsigned char *next;
+    z_off64_t pos;
+};
+ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
+#ifdef Z_PREFIX_SET
+#  undef z_gzgetc
+#  define z_gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#else
+#  define gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#endif
 
 /* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
  * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
@@ -1562,7 +1688,7 @@
  * functions are changed to 64 bits) -- in case these are set on systems
  * without large file support, _LFS64_LARGEFILE must also be true
  */
-#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
+#ifdef Z_LARGE64
    ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
    ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
    ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
@@ -1571,14 +1697,23 @@
    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
 #endif
 
-#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0
-#  define gzopen gzopen64
-#  define gzseek gzseek64
-#  define gztell gztell64
-#  define gzoffset gzoffset64
-#  define adler32_combine adler32_combine64
-#  define crc32_combine crc32_combine64
-#  ifdef _LARGEFILE64_SOURCE
+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
+#  ifdef Z_PREFIX_SET
+#    define z_gzopen z_gzopen64
+#    define z_gzseek z_gzseek64
+#    define z_gztell z_gztell64
+#    define z_gzoffset z_gzoffset64
+#    define z_adler32_combine z_adler32_combine64
+#    define z_crc32_combine z_crc32_combine64
+#  else
+#    define gzopen gzopen64
+#    define gzseek gzseek64
+#    define gztell gztell64
+#    define gzoffset gzoffset64
+#    define adler32_combine adler32_combine64
+#    define crc32_combine crc32_combine64
+#  endif
+#  ifndef Z_LARGE64
      ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
      ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
      ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
@@ -1595,6 +1730,13 @@
    ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
 #endif
 
+#else /* Z_SOLO */
+
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+
+#endif /* !Z_SOLO */
+
 /* hack for buggy compilers */
 #if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
     struct internal_state {int dummy;};
@@ -1603,8 +1745,21 @@
 /* undocumented functions */
 ZEXTERN const char   * ZEXPORT zError           OF((int));
 ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
-ZEXTERN const uLongf * ZEXPORT get_crc_table    OF((void));
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));
 ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));
+ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,
+                                            const char *mode));
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+ZEXTERN int            ZEXPORTVA gzvprintf Z_ARG((gzFile file,
+                                                  const char *format,
+                                                  va_list va));
+#  endif
+#endif
 
 #ifdef __cplusplus
 }
diff --git a/Modules/zlib/zlib.map b/Modules/zlib/zlib.map
index f282d36..55c6647 100644
--- a/Modules/zlib/zlib.map
+++ b/Modules/zlib/zlib.map
@@ -66,3 +66,18 @@
     gzclose_r;
     gzclose_w;
 } ZLIB_1.2.3.4;
+
+ZLIB_1.2.5.1 {
+    deflatePending;
+} ZLIB_1.2.3.5;
+
+ZLIB_1.2.5.2 {
+    deflateResetKeep;
+    gzgetc_;
+    inflateResetKeep;
+} ZLIB_1.2.5.1;
+
+ZLIB_1.2.7.1 {
+    inflateGetDictionary;
+    gzvprintf;
+} ZLIB_1.2.5.2;
diff --git a/Modules/zlib/zutil.c b/Modules/zlib/zutil.c
index 898ed34..23d2ebe 100644
--- a/Modules/zlib/zutil.c
+++ b/Modules/zlib/zutil.c
@@ -1,17 +1,20 @@
 /* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2005, 2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
 /* @(#) $Id$ */
 
 #include "zutil.h"
+#ifndef Z_SOLO
+#  include "gzguts.h"
+#endif
 
 #ifndef NO_DUMMY_DECL
 struct internal_state      {int dummy;}; /* for buggy compilers */
 #endif
 
-const char * const z_errmsg[10] = {
+z_const char * const z_errmsg[10] = {
 "need dictionary",     /* Z_NEED_DICT       2  */
 "stream end",          /* Z_STREAM_END      1  */
 "",                    /* Z_OK              0  */
@@ -85,27 +88,27 @@
 #ifdef FASTEST
     flags += 1L << 21;
 #endif
-#ifdef STDC
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
 #  ifdef NO_vsnprintf
-        flags += 1L << 25;
+    flags += 1L << 25;
 #    ifdef HAS_vsprintf_void
-        flags += 1L << 26;
+    flags += 1L << 26;
 #    endif
 #  else
 #    ifdef HAS_vsnprintf_void
-        flags += 1L << 26;
+    flags += 1L << 26;
 #    endif
 #  endif
 #else
-        flags += 1L << 24;
+    flags += 1L << 24;
 #  ifdef NO_snprintf
-        flags += 1L << 25;
+    flags += 1L << 25;
 #    ifdef HAS_sprintf_void
-        flags += 1L << 26;
+    flags += 1L << 26;
 #    endif
 #  else
 #    ifdef HAS_snprintf_void
-        flags += 1L << 26;
+    flags += 1L << 26;
 #    endif
 #  endif
 #endif
@@ -181,6 +184,7 @@
 }
 #endif
 
+#ifndef Z_SOLO
 
 #ifdef SYS16BIT
 
@@ -316,3 +320,5 @@
 }
 
 #endif /* MY_ZCALLOC */
+
+#endif /* !Z_SOLO */
diff --git a/Modules/zlib/zutil.h b/Modules/zlib/zutil.h
index 258fa88..24ab06b 100644
--- a/Modules/zlib/zutil.h
+++ b/Modules/zlib/zutil.h
@@ -1,5 +1,5 @@
 /* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -13,7 +13,7 @@
 #ifndef ZUTIL_H
 #define ZUTIL_H
 
-#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)
+#ifdef HAVE_HIDDEN
 #  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
 #else
 #  define ZLIB_INTERNAL
@@ -21,7 +21,7 @@
 
 #include "zlib.h"
 
-#ifdef STDC
+#if defined(STDC) && !defined(Z_SOLO)
 #  if !(defined(_WIN32_WCE) && defined(_MSC_VER))
 #    include <stddef.h>
 #  endif
@@ -29,6 +29,10 @@
 #  include <stdlib.h>
 #endif
 
+#ifdef Z_SOLO
+   typedef long ptrdiff_t;  /* guess -- will be caught if guess is wrong */
+#endif
+
 #ifndef local
 #  define local static
 #endif
@@ -40,13 +44,13 @@
 typedef ush FAR ushf;
 typedef unsigned long  ulg;
 
-extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
 /* (size given to avoid silly warnings with Visual C++) */
 
 #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
 
 #define ERR_RETURN(strm,err) \
-  return (strm->msg = (char*)ERR_MSG(err), (err))
+  return (strm->msg = ERR_MSG(err), (err))
 /* To be used only when the state is known to be valid */
 
         /* common constants */
@@ -78,16 +82,18 @@
 
 #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
 #  define OS_CODE  0x00
-#  if defined(__TURBOC__) || defined(__BORLANDC__)
-#    if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
-       /* Allow compilation with ANSI keywords only enabled */
-       void _Cdecl farfree( void *block );
-       void *_Cdecl farmalloc( unsigned long nbytes );
-#    else
-#      include <alloc.h>
+#  ifndef Z_SOLO
+#    if defined(__TURBOC__) || defined(__BORLANDC__)
+#      if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
+         /* Allow compilation with ANSI keywords only enabled */
+         void _Cdecl farfree( void *block );
+         void *_Cdecl farmalloc( unsigned long nbytes );
+#      else
+#        include <alloc.h>
+#      endif
+#    else /* MSC or DJGPP */
+#      include <malloc.h>
 #    endif
-#  else /* MSC or DJGPP */
-#    include <malloc.h>
 #  endif
 #endif
 
@@ -107,18 +113,20 @@
 
 #ifdef OS2
 #  define OS_CODE  0x06
-#  ifdef M_I86
+#  if defined(M_I86) && !defined(Z_SOLO)
 #    include <malloc.h>
 #  endif
 #endif
 
 #if defined(MACOS) || defined(TARGET_OS_MAC)
 #  define OS_CODE  0x07
-#  if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
-#    include <unix.h> /* for fdopen */
-#  else
-#    ifndef fdopen
-#      define fdopen(fd,mode) NULL /* No fdopen() */
+#  ifndef Z_SOLO
+#    if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
+#      include <unix.h> /* for fdopen */
+#    else
+#      ifndef fdopen
+#        define fdopen(fd,mode) NULL /* No fdopen() */
+#      endif
 #    endif
 #  endif
 #endif
@@ -153,14 +161,15 @@
 #  endif
 #endif
 
-#if defined(__BORLANDC__)
+#if defined(__BORLANDC__) && !defined(MSDOS)
   #pragma warn -8004
   #pragma warn -8008
   #pragma warn -8066
 #endif
 
 /* provide prototypes for these when building zlib without LFS */
-#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
+#if !defined(_WIN32) && \
+    (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
     ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
 #endif
@@ -177,42 +186,7 @@
 
          /* functions */
 
-#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
-#  ifndef HAVE_VSNPRINTF
-#    define HAVE_VSNPRINTF
-#  endif
-#endif
-#if defined(__CYGWIN__)
-#  ifndef HAVE_VSNPRINTF
-#    define HAVE_VSNPRINTF
-#  endif
-#endif
-#ifndef HAVE_VSNPRINTF
-#  ifdef MSDOS
-     /* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
-        but for now we just assume it doesn't. */
-#    define NO_vsnprintf
-#  endif
-#  ifdef __TURBOC__
-#    define NO_vsnprintf
-#  endif
-#  ifdef WIN32
-     /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
-#    if !defined(vsnprintf) && !defined(NO_vsnprintf)
-#      if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
-#         define vsnprintf _vsnprintf
-#      endif
-#    endif
-#  endif
-#  ifdef __SASC
-#    define NO_vsnprintf
-#  endif
-#endif
-#ifdef VMS
-#  define NO_vsnprintf
-#endif
-
-#if defined(pyr)
+#if defined(pyr) || defined(Z_SOLO)
 #  define NO_MEMCPY
 #endif
 #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
@@ -261,14 +235,19 @@
 #  define Tracecv(c,x)
 #endif
 
-
-voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
-                        unsigned size));
-void ZLIB_INTERNAL zcfree  OF((voidpf opaque, voidpf ptr));
+#ifndef Z_SOLO
+   voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
+                                    unsigned size));
+   void ZLIB_INTERNAL zcfree  OF((voidpf opaque, voidpf ptr));
+#endif
 
 #define ZALLOC(strm, items, size) \
            (*((strm)->zalloc))((strm)->opaque, (items), (size))
 #define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
 #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
 
+/* Reverse the bytes in a 32-bit value */
+#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
+                    (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
+
 #endif /* ZUTIL_H */
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index 169903e..1b65eb0 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -8,6 +8,7 @@
 #include "structmember.h"
 #include "zlib.h"
 
+
 #ifdef WITH_THREAD
     #include "pythread.h"
     #define ENTER_ZLIB(obj) \
@@ -626,87 +627,136 @@
     return 0;
 }
 
-PyDoc_STRVAR(decomp_decompress__doc__,
-"decompress(data, max_length) -- Return a string containing the decompressed\n"
-"version of the data.\n"
+/*[clinic]
+
+module zlib
+
+zlib.decompress
+
+    data: Py_buffer
+        The binary data to decompress.
+    max_length: int = 0
+        The maximum allowable length of the decompressed data.
+        Unconsumed input data will be stored in
+        the unconsumed_tail attribute.
+    /
+
+Return a string containing the decompressed version of the data.
+
+After calling this function, some of the input data may still be stored in
+internal buffers for later processing.
+Call the flush() method to clear these buffers.
+[clinic]*/
+
+PyDoc_STRVAR(zlib_decompress__doc__,
+"Return a string containing the decompressed version of the data.\n"
+"\n"
+"zlib.decompress(data, max_length=0)\n"
+"  data\n"
+"    The binary data to decompress.\n"
+"  max_length\n"
+"    The maximum allowable length of the decompressed data.\n"
+"    Unconsumed input data will be stored in\n"
+"    the unconsumed_tail attribute.\n"
 "\n"
 "After calling this function, some of the input data may still be stored in\n"
 "internal buffers for later processing.\n"
-"Call the flush() method to clear these buffers.\n"
-"If the max_length parameter is specified then the return value will be\n"
-"no longer than max_length.  Unconsumed input data will be stored in\n"
-"the unconsumed_tail attribute.");
+"Call the flush() method to clear these buffers.");
+
+#define ZLIB_DECOMPRESS_METHODDEF    \
+    {"decompress", (PyCFunction)zlib_decompress, METH_VARARGS, zlib_decompress__doc__},
 
 static PyObject *
-PyZlib_objdecompress(compobject *self, PyObject *args)
+zlib_decompress_impl(PyObject *self, Py_buffer *data, int max_length);
+
+static PyObject *
+zlib_decompress(PyObject *self, PyObject *args)
 {
-    int err, max_length = 0;
+    PyObject *return_value = NULL;
+    Py_buffer data;
+    int max_length = 0;
+
+    if (!PyArg_ParseTuple(args,
+        "y*|i:decompress",
+        &data, &max_length))
+        goto exit;
+    return_value = zlib_decompress_impl(self, &data, max_length);
+
+exit:
+    /* Cleanup for data */
+    PyBuffer_Release(&data);
+
+    return return_value;
+}
+
+static PyObject *
+zlib_decompress_impl(PyObject *self, Py_buffer *data, int max_length)
+/*[clinic checksum: 168d093d400739dde947cca1f4fb0f9d51cdc2c9]*/
+{
+    compobject *zself = (compobject *)self;
+    int err;
     unsigned int inplen;
     Py_ssize_t old_length, length = DEFAULTALLOC;
     PyObject *RetVal = NULL;
-    Py_buffer pinput;
     Byte *input;
     unsigned long start_total_out;
 
-    if (!PyArg_ParseTuple(args, "y*|i:decompress", &pinput,
-                          &max_length))
-        return NULL;
-    if (pinput.len > UINT_MAX) {
+    if (data->len > UINT_MAX) {
         PyErr_SetString(PyExc_OverflowError,
                         "Size does not fit in an unsigned int");
-        goto error_outer;
+        return NULL;
     }
-    input = pinput.buf;
-    inplen = pinput.len;
+    input = data->buf;
+    inplen = data->len;
     if (max_length < 0) {
         PyErr_SetString(PyExc_ValueError,
                         "max_length must be greater than zero");
-        goto error_outer;
+        return NULL;
     }
 
     /* limit amount of data allocated to max_length */
     if (max_length && length > max_length)
         length = max_length;
     if (!(RetVal = PyBytes_FromStringAndSize(NULL, length)))
-        goto error_outer;
+        return NULL;
 
-    ENTER_ZLIB(self);
+    ENTER_ZLIB(zself);
 
-    start_total_out = self->zst.total_out;
-    self->zst.avail_in = inplen;
-    self->zst.next_in = input;
-    self->zst.avail_out = length;
-    self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal);
+    start_total_out = zself->zst.total_out;
+    zself->zst.avail_in = inplen;
+    zself->zst.next_in = input;
+    zself->zst.avail_out = length;
+    zself->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal);
 
     Py_BEGIN_ALLOW_THREADS
-    err = inflate(&(self->zst), Z_SYNC_FLUSH);
+    err = inflate(&(zself->zst), Z_SYNC_FLUSH);
     Py_END_ALLOW_THREADS
 
-    if (err == Z_NEED_DICT && self->zdict != NULL) {
+    if (err == Z_NEED_DICT && zself->zdict != NULL) {
         Py_buffer zdict_buf;
-        if (PyObject_GetBuffer(self->zdict, &zdict_buf, PyBUF_SIMPLE) == -1) {
+        if (PyObject_GetBuffer(zself->zdict, &zdict_buf, PyBUF_SIMPLE) == -1) {
             Py_DECREF(RetVal);
             RetVal = NULL;
             goto error;
         }
-        err = inflateSetDictionary(&(self->zst), zdict_buf.buf, zdict_buf.len);
+        err = inflateSetDictionary(&(zself->zst), zdict_buf.buf, zdict_buf.len);
         PyBuffer_Release(&zdict_buf);
         if (err != Z_OK) {
-            zlib_error(self->zst, err, "while decompressing data");
+            zlib_error(zself->zst, err, "while decompressing data");
             Py_DECREF(RetVal);
             RetVal = NULL;
             goto error;
         }
         /* Repeat the call to inflate. */
         Py_BEGIN_ALLOW_THREADS
-        err = inflate(&(self->zst), Z_SYNC_FLUSH);
+        err = inflate(&(zself->zst), Z_SYNC_FLUSH);
         Py_END_ALLOW_THREADS
     }
 
     /* While Z_OK and the output buffer is full, there might be more output.
        So extend the output buffer and try again.
     */
-    while (err == Z_OK && self->zst.avail_out == 0) {
+    while (err == Z_OK && zself->zst.avail_out == 0) {
         /* If max_length set, don't continue decompressing if we've already
            reached the limit.
         */
@@ -723,16 +773,16 @@
             Py_CLEAR(RetVal);
             goto error;
         }
-        self->zst.next_out =
+        zself->zst.next_out =
             (unsigned char *)PyBytes_AS_STRING(RetVal) + old_length;
-        self->zst.avail_out = length - old_length;
+        zself->zst.avail_out = length - old_length;
 
         Py_BEGIN_ALLOW_THREADS
-        err = inflate(&(self->zst), Z_SYNC_FLUSH);
+        err = inflate(&(zself->zst), Z_SYNC_FLUSH);
         Py_END_ALLOW_THREADS
     }
 
-    if (save_unconsumed_input(self, err) < 0) {
+    if (save_unconsumed_input(zself, err) < 0) {
         Py_DECREF(RetVal);
         RetVal = NULL;
         goto error;
@@ -741,26 +791,24 @@
     if (err == Z_STREAM_END) {
         /* This is the logical place to call inflateEnd, but the old behaviour
            of only calling it on flush() is preserved. */
-        self->eof = 1;
+        zself->eof = 1;
     } else if (err != Z_OK && err != Z_BUF_ERROR) {
         /* We will only get Z_BUF_ERROR if the output buffer was full
            but there wasn't more output when we tried again, so it is
            not an error condition.
         */
-        zlib_error(self->zst, err, "while decompressing data");
+        zlib_error(zself->zst, err, "while decompressing data");
         Py_DECREF(RetVal);
         RetVal = NULL;
         goto error;
     }
 
-    if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) {
+    if (_PyBytes_Resize(&RetVal, zself->zst.total_out - start_total_out) < 0) {
         Py_CLEAR(RetVal);
     }
 
  error:
-    LEAVE_ZLIB(self);
- error_outer:
-    PyBuffer_Release(&pinput);
+    LEAVE_ZLIB(zself);
     return RetVal;
 }
 
@@ -856,12 +904,27 @@
 }
 
 #ifdef HAVE_ZLIB_COPY
-PyDoc_STRVAR(comp_copy__doc__,
-"copy() -- Return a copy of the compression object.");
+
+/*[clinic]
+
+zlib.copy
+
+Return a copy of the compression object.
+[clinic]*/
+
+PyDoc_STRVAR(zlib_copy__doc__,
+"Return a copy of the compression object.\n"
+"\n"
+"zlib.copy()");
+
+#define ZLIB_COPY_METHODDEF    \
+    {"copy", (PyCFunction)zlib_copy, METH_NOARGS, zlib_copy__doc__},
 
 static PyObject *
-PyZlib_copy(compobject *self)
+zlib_copy(PyObject *self)
+/*[clinic checksum: 7b648de2c1f933ba2b9fa17331ff1a44d9a4a740]*/
 {
+    compobject *zself = (compobject *)self;
     compobject *retval = NULL;
     int err;
 
@@ -871,8 +934,8 @@
     /* Copy the zstream state
      * We use ENTER_ZLIB / LEAVE_ZLIB to make this thread-safe
      */
-    ENTER_ZLIB(self);
-    err = deflateCopy(&retval->zst, &self->zst);
+    ENTER_ZLIB(zself);
+    err = deflateCopy(&retval->zst, &zself->zst);
     switch(err) {
     case(Z_OK):
         break;
@@ -884,28 +947,28 @@
                         "Can't allocate memory for compression object");
         goto error;
     default:
-        zlib_error(self->zst, err, "while copying compression object");
+        zlib_error(zself->zst, err, "while copying compression object");
         goto error;
     }
-    Py_INCREF(self->unused_data);
-    Py_INCREF(self->unconsumed_tail);
-    Py_XINCREF(self->zdict);
+    Py_INCREF(zself->unused_data);
+    Py_INCREF(zself->unconsumed_tail);
+    Py_XINCREF(zself->zdict);
     Py_XDECREF(retval->unused_data);
     Py_XDECREF(retval->unconsumed_tail);
     Py_XDECREF(retval->zdict);
-    retval->unused_data = self->unused_data;
-    retval->unconsumed_tail = self->unconsumed_tail;
-    retval->zdict = self->zdict;
-    retval->eof = self->eof;
+    retval->unused_data = zself->unused_data;
+    retval->unconsumed_tail = zself->unconsumed_tail;
+    retval->zdict = zself->zdict;
+    retval->eof = zself->eof;
 
     /* Mark it as being initialized */
     retval->is_initialised = 1;
 
-    LEAVE_ZLIB(self);
+    LEAVE_ZLIB(zself);
     return (PyObject *)retval;
 
 error:
-    LEAVE_ZLIB(self);
+    LEAVE_ZLIB(zself);
     Py_XDECREF(retval);
     return NULL;
 }
@@ -1055,16 +1118,14 @@
     {"flush", (binaryfunc)PyZlib_flush, METH_VARARGS,
               comp_flush__doc__},
 #ifdef HAVE_ZLIB_COPY
-    {"copy",  (PyCFunction)PyZlib_copy, METH_NOARGS,
-              comp_copy__doc__},
+    ZLIB_COPY_METHODDEF
 #endif
     {NULL, NULL}
 };
 
 static PyMethodDef Decomp_methods[] =
 {
-    {"decompress", (binaryfunc)PyZlib_objdecompress, METH_VARARGS,
-                   decomp_decompress__doc__},
+    ZLIB_DECOMPRESS_METHODDEF
     {"flush", (binaryfunc)PyZlib_unflush, METH_VARARGS,
               decomp_flush__doc__},
 #ifdef HAVE_ZLIB_COPY
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 078b4bc..91df5da 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -82,15 +82,17 @@
     PyObject *hint, *result;
     Py_ssize_t res;
     _Py_IDENTIFIER(__length_hint__);
-    res = PyObject_Length(o);
-    if (res < 0 && PyErr_Occurred()) {
-        if (!PyErr_ExceptionMatches(PyExc_TypeError)) {
-            return -1;
+    if (_PyObject_HasLen(o)) {
+        res = PyObject_Length(o);
+        if (res < 0 && PyErr_Occurred()) {
+            if (!PyErr_ExceptionMatches(PyExc_TypeError)) {
+                return -1;
+            }
+            PyErr_Clear();
         }
-        PyErr_Clear();
-    }
-    else {
-        return res;
+        else {
+            return res;
+        }
     }
     hint = _PyObject_LookupSpecial(o, &PyId___length_hint__);
     if (hint == NULL) {
@@ -223,7 +225,7 @@
 }
 
 int
-PyObject_DelItemString(PyObject *o, char *key)
+PyObject_DelItemString(PyObject *o, const char *key)
 {
     PyObject *okey;
     int ret;
@@ -1950,7 +1952,7 @@
 #define PyMapping_Length PyMapping_Size
 
 PyObject *
-PyMapping_GetItemString(PyObject *o, char *key)
+PyMapping_GetItemString(PyObject *o, const char *key)
 {
     PyObject *okey, *r;
 
@@ -1966,7 +1968,7 @@
 }
 
 int
-PyMapping_SetItemString(PyObject *o, char *key, PyObject *value)
+PyMapping_SetItemString(PyObject *o, const char *key, PyObject *value)
 {
     PyObject *okey;
     int r;
@@ -1985,7 +1987,7 @@
 }
 
 int
-PyMapping_HasKeyString(PyObject *o, char *key)
+PyMapping_HasKeyString(PyObject *o, const char *key)
 {
     PyObject *v;
 
@@ -2142,6 +2144,8 @@
     }
     else
         args = PyTuple_New(0);
+    if (args == NULL)
+        return NULL;
 
     return call_function_tail(callable, args);
 }
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index 6ea654e..2358e05 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -150,6 +150,7 @@
     }
     Py_SIZE(new) = size;
     new->ob_alloc = alloc;
+    new->ob_start = new->ob_bytes;
     new->ob_exports = 0;
 
     return (PyObject *)new;
@@ -177,48 +178,70 @@
 PyByteArray_Resize(PyObject *self, Py_ssize_t size)
 {
     void *sval;
-    Py_ssize_t alloc = ((PyByteArrayObject *)self)->ob_alloc;
+    PyByteArrayObject *obj = ((PyByteArrayObject *)self);
+    Py_ssize_t alloc = obj->ob_alloc;
+    Py_ssize_t logical_offset = obj->ob_start - obj->ob_bytes;
 
     assert(self != NULL);
     assert(PyByteArray_Check(self));
     assert(size >= 0);
+    assert(logical_offset >= 0);
+    assert(logical_offset <= alloc);
 
     if (size == Py_SIZE(self)) {
         return 0;
     }
-    if (!_canresize((PyByteArrayObject *)self)) {
+    if (!_canresize(obj)) {
         return -1;
     }
 
-    if (size < alloc / 2) {
-        /* Major downsize; resize down to exact size */
-        alloc = size + 1;
-    }
-    else if (size < alloc) {
-        /* Within allocated size; quick exit */
-        Py_SIZE(self) = size;
-        ((PyByteArrayObject *)self)->ob_bytes[size] = '\0'; /* Trailing null */
-        return 0;
-    }
-    else if (size <= alloc * 1.125) {
-        /* Moderate upsize; overallocate similar to list_resize() */
-        alloc = size + (size >> 3) + (size < 9 ? 3 : 6);
+    if (size + logical_offset + 1 < alloc) {
+        /* Current buffer is large enough to host the requested size,
+           decide on a strategy. */
+        if (size < alloc / 2) {
+            /* Major downsize; resize down to exact size */
+            alloc = size + 1;
+        }
+        else {
+            /* Minor downsize; quick exit */
+            Py_SIZE(self) = size;
+            PyByteArray_AS_STRING(self)[size] = '\0'; /* Trailing null */
+            return 0;
+        }
     }
     else {
-        /* Major upsize; resize up to exact size */
-        alloc = size + 1;
+        /* Need growing, decide on a strategy */
+        if (size <= alloc * 1.125) {
+            /* Moderate upsize; overallocate similar to list_resize() */
+            alloc = size + (size >> 3) + (size < 9 ? 3 : 6);
+        }
+        else {
+            /* Major upsize; resize up to exact size */
+            alloc = size + 1;
+        }
     }
 
-    sval = PyObject_Realloc(((PyByteArrayObject *)self)->ob_bytes, alloc);
-    if (sval == NULL) {
-        PyErr_NoMemory();
-        return -1;
+    if (logical_offset > 0) {
+        sval = PyObject_Malloc(alloc);
+        if (sval == NULL) {
+            PyErr_NoMemory();
+            return -1;
+        }
+        memcpy(sval, PyByteArray_AS_STRING(self), Py_MIN(size, Py_SIZE(self)));
+        PyObject_Free(obj->ob_bytes);
+    }
+    else {
+        sval = PyObject_Realloc(obj->ob_bytes, alloc);
+        if (sval == NULL) {
+            PyErr_NoMemory();
+            return -1;
+        }
     }
 
-    ((PyByteArrayObject *)self)->ob_bytes = sval;
+    obj->ob_bytes = obj->ob_start = sval;
     Py_SIZE(self) = size;
-    ((PyByteArrayObject *)self)->ob_alloc = alloc;
-    ((PyByteArrayObject *)self)->ob_bytes[size] = '\0'; /* Trailing null byte */
+    obj->ob_alloc = alloc;
+    obj->ob_bytes[size] = '\0'; /* Trailing null byte */
 
     return 0;
 }
@@ -288,13 +311,13 @@
     }
     if (size < self->ob_alloc) {
         Py_SIZE(self) = size;
-        self->ob_bytes[Py_SIZE(self)] = '\0'; /* Trailing null byte */
+        PyByteArray_AS_STRING(self)[Py_SIZE(self)] = '\0'; /* Trailing null byte */
     }
     else if (PyByteArray_Resize((PyObject *)self, size) < 0) {
         PyBuffer_Release(&vo);
         return NULL;
     }
-    memcpy(self->ob_bytes + mysize, vo.buf, vo.len);
+    memcpy(PyByteArray_AS_STRING(self) + mysize, vo.buf, vo.len);
     PyBuffer_Release(&vo);
     Py_INCREF(self);
     return (PyObject *)self;
@@ -331,6 +354,7 @@
 {
     Py_ssize_t mysize;
     Py_ssize_t size;
+    char *buf;
 
     if (count < 0)
         count = 0;
@@ -338,19 +362,16 @@
     if (count > 0 && mysize > PY_SSIZE_T_MAX / count)
         return PyErr_NoMemory();
     size = mysize * count;
-    if (size < self->ob_alloc) {
-        Py_SIZE(self) = size;
-        self->ob_bytes[Py_SIZE(self)] = '\0'; /* Trailing null byte */
-    }
-    else if (PyByteArray_Resize((PyObject *)self, size) < 0)
+    if (PyByteArray_Resize((PyObject *)self, size) < 0)
         return NULL;
 
+    buf = PyByteArray_AS_STRING(self);
     if (mysize == 1)
-        memset(self->ob_bytes, self->ob_bytes[0], size);
+        memset(buf, buf[0], size);
     else {
         Py_ssize_t i;
         for (i = 1; i < count; i++)
-            memcpy(self->ob_bytes + i*mysize, self->ob_bytes, mysize);
+            memcpy(buf + i*mysize, buf, mysize);
     }
 
     Py_INCREF(self);
@@ -366,7 +387,7 @@
         PyErr_SetString(PyExc_IndexError, "bytearray index out of range");
         return NULL;
     }
-    return PyLong_FromLong((unsigned char)(self->ob_bytes[i]));
+    return PyLong_FromLong((unsigned char)(PyByteArray_AS_STRING(self)[i]));
 }
 
 static PyObject *
@@ -385,7 +406,7 @@
             PyErr_SetString(PyExc_IndexError, "bytearray index out of range");
             return NULL;
         }
-        return PyLong_FromLong((unsigned char)(self->ob_bytes[i]));
+        return PyLong_FromLong((unsigned char)(PyByteArray_AS_STRING(self)[i]));
     }
     else if (PySlice_Check(index)) {
         Py_ssize_t start, stop, step, slicelength, cur, i;
@@ -398,8 +419,8 @@
         if (slicelength <= 0)
             return PyByteArray_FromStringAndSize("", 0);
         else if (step == 1) {
-            return PyByteArray_FromStringAndSize(self->ob_bytes + start,
-                                             slicelength);
+            return PyByteArray_FromStringAndSize(
+                PyByteArray_AS_STRING(self) + start, slicelength);
         }
         else {
             char *source_buf = PyByteArray_AS_STRING(self);
@@ -425,10 +446,68 @@
 }
 
 static int
+bytearray_setslice_linear(PyByteArrayObject *self,
+                          Py_ssize_t lo, Py_ssize_t hi,
+                          char *bytes, Py_ssize_t bytes_len)
+{
+    Py_ssize_t avail = hi - lo;
+    char *buf = PyByteArray_AS_STRING(self);
+    Py_ssize_t growth = bytes_len - avail;
+    assert(avail >= 0);
+
+    if (growth != 0) {
+        if (growth < 0) {
+            if (!_canresize(self))
+                return -1;
+            if (lo == 0) {
+                /* Shrink the buffer by advancing its logical start */
+                self->ob_start -= growth;
+                /*
+                  0   lo               hi             old_size
+                  |   |<----avail----->|<-----tail------>|
+                  |      |<-bytes_len->|<-----tail------>|
+                  0    new_lo         new_hi          new_size
+                */
+            }
+            else {
+                /*
+                  0   lo               hi               old_size
+                  |   |<----avail----->|<-----tomove------>|
+                  |   |<-bytes_len->|<-----tomove------>|
+                  0   lo         new_hi              new_size
+                */
+                memmove(buf + lo + bytes_len, buf + hi,
+                        Py_SIZE(self) - hi);
+            }
+        }
+        /* XXX(nnorwitz): need to verify this can't overflow! */
+        if (PyByteArray_Resize(
+                (PyObject *)self, Py_SIZE(self) + growth) < 0)
+            return -1;
+        buf = PyByteArray_AS_STRING(self);
+        if (growth > 0) {
+            /* Make the place for the additional bytes */
+            /*
+              0   lo        hi               old_size
+              |   |<-avail->|<-----tomove------>|
+              |   |<---bytes_len-->|<-----tomove------>|
+              0   lo            new_hi              new_size
+             */
+            memmove(buf + lo + bytes_len, buf + hi,
+                    Py_SIZE(self) - lo - bytes_len);
+        }
+    }
+
+    if (bytes_len > 0)
+        memcpy(buf + lo, bytes, bytes_len);
+    return 0;
+}
+
+static int
 bytearray_setslice(PyByteArrayObject *self, Py_ssize_t lo, Py_ssize_t hi,
                PyObject *values)
 {
-    Py_ssize_t avail, needed;
+    Py_ssize_t needed;
     void *bytes;
     Py_buffer vbytes;
     int res = 0;
@@ -467,50 +546,9 @@
     if (hi > Py_SIZE(self))
         hi = Py_SIZE(self);
 
-    avail = hi - lo;
-    if (avail < 0)
-        lo = hi = avail = 0;
-
-    if (avail != needed) {
-        if (avail > needed) {
-            if (!_canresize(self)) {
-                res = -1;
-                goto finish;
-            }
-            /*
-              0   lo               hi               old_size
-              |   |<----avail----->|<-----tomove------>|
-              |   |<-needed->|<-----tomove------>|
-              0   lo      new_hi              new_size
-            */
-            memmove(self->ob_bytes + lo + needed, self->ob_bytes + hi,
-                    Py_SIZE(self) - hi);
-        }
-        /* XXX(nnorwitz): need to verify this can't overflow! */
-        if (PyByteArray_Resize((PyObject *)self,
-                           Py_SIZE(self) + needed - avail) < 0) {
-                res = -1;
-                goto finish;
-        }
-        if (avail < needed) {
-            /*
-              0   lo        hi               old_size
-              |   |<-avail->|<-----tomove------>|
-              |   |<----needed---->|<-----tomove------>|
-              0   lo            new_hi              new_size
-             */
-            memmove(self->ob_bytes + lo + needed, self->ob_bytes + hi,
-                    Py_SIZE(self) - lo - needed);
-        }
-    }
-
-    if (needed > 0)
-        memcpy(self->ob_bytes + lo, bytes, needed);
-
-
- finish:
+    res = bytearray_setslice_linear(self, lo, hi, bytes, needed);
     if (vbytes.len != -1)
-            PyBuffer_Release(&vbytes);
+        PyBuffer_Release(&vbytes);
     return res;
 }
 
@@ -533,7 +571,7 @@
     if (!_getbytevalue(value, &ival))
         return -1;
 
-    self->ob_bytes[i] = ival;
+    PyByteArray_AS_STRING(self)[i] = ival;
     return 0;
 }
 
@@ -541,7 +579,8 @@
 bytearray_ass_subscript(PyByteArrayObject *self, PyObject *index, PyObject *values)
 {
     Py_ssize_t start, stop, step, slicelen, needed;
-    char *bytes;
+    char *buf, *bytes;
+    buf = PyByteArray_AS_STRING(self);
 
     if (PyIndex_Check(index)) {
         Py_ssize_t i = PyNumber_AsSsize_t(index, PyExc_IndexError);
@@ -568,7 +607,7 @@
             int ival;
             if (!_getbytevalue(values, &ival))
                 return -1;
-            self->ob_bytes[i] = (char)ival;
+            buf[i] = (char)ival;
             return 0;
         }
     }
@@ -606,7 +645,7 @@
     }
     else {
         assert(PyByteArray_Check(values));
-        bytes = ((PyByteArrayObject *)values)->ob_bytes;
+        bytes = PyByteArray_AS_STRING(values);
         needed = Py_SIZE(values);
     }
     /* Make sure b[5:2] = ... inserts before 5, not before 2. */
@@ -614,38 +653,7 @@
         (step > 0 && start > stop))
         stop = start;
     if (step == 1) {
-        if (slicelen != needed) {
-            if (!_canresize(self))
-                return -1;
-            if (slicelen > needed) {
-                /*
-                  0   start           stop              old_size
-                  |   |<---slicelen--->|<-----tomove------>|
-                  |   |<-needed->|<-----tomove------>|
-                  0   lo      new_hi              new_size
-                */
-                memmove(self->ob_bytes + start + needed, self->ob_bytes + stop,
-                        Py_SIZE(self) - stop);
-            }
-            if (PyByteArray_Resize((PyObject *)self,
-                               Py_SIZE(self) + needed - slicelen) < 0)
-                return -1;
-            if (slicelen < needed) {
-                /*
-                  0   lo        hi               old_size
-                  |   |<-avail->|<-----tomove------>|
-                  |   |<----needed---->|<-----tomove------>|
-                  0   lo            new_hi              new_size
-                 */
-                memmove(self->ob_bytes + start + needed, self->ob_bytes + stop,
-                        Py_SIZE(self) - start - needed);
-            }
-        }
-
-        if (needed > 0)
-            memcpy(self->ob_bytes + start, bytes, needed);
-
-        return 0;
+        return bytearray_setslice_linear(self, start, stop, bytes, needed);
     }
     else {
         if (needed == 0) {
@@ -672,14 +680,14 @@
                 if (cur + step >= (size_t)PyByteArray_GET_SIZE(self))
                     lim = PyByteArray_GET_SIZE(self) - cur - 1;
 
-                memmove(self->ob_bytes + cur - i,
-                        self->ob_bytes + cur + 1, lim);
+                memmove(buf + cur - i,
+                        buf + cur + 1, lim);
             }
             /* Move the tail of the bytes, in one chunk */
             cur = start + (size_t)slicelen*step;
             if (cur < (size_t)PyByteArray_GET_SIZE(self)) {
-                memmove(self->ob_bytes + cur - slicelen,
-                        self->ob_bytes + cur,
+                memmove(buf + cur - slicelen,
+                        buf + cur,
                         PyByteArray_GET_SIZE(self) - cur);
             }
             if (PyByteArray_Resize((PyObject *)self,
@@ -701,7 +709,7 @@
                 return -1;
             }
             for (cur = start, i = 0; i < slicelen; cur += step, i++)
-                self->ob_bytes[cur] = bytes[i];
+                buf[cur] = bytes[i];
             return 0;
         }
     }
@@ -781,7 +789,7 @@
         if (count > 0) {
             if (PyByteArray_Resize((PyObject *)self, count))
                 return -1;
-            memset(self->ob_bytes, 0, count);
+            memset(PyByteArray_AS_STRING(self), 0, count);
         }
         return 0;
     }
@@ -794,7 +802,8 @@
             return -1;
         size = view.len;
         if (PyByteArray_Resize((PyObject *)self, size) < 0) goto fail;
-        if (PyBuffer_ToContiguous(self->ob_bytes, &view, size, 'C') < 0)
+        if (PyBuffer_ToContiguous(PyByteArray_AS_STRING(self),
+            &view, size, 'C') < 0)
             goto fail;
         PyBuffer_Release(&view);
         return 0;
@@ -838,7 +847,7 @@
             Py_SIZE(self)++;
         else if (PyByteArray_Resize((PyObject *)self, Py_SIZE(self)+1) < 0)
             goto error;
-        self->ob_bytes[Py_SIZE(self)-1] = value;
+        PyByteArray_AS_STRING(self)[Py_SIZE(self)-1] = value;
     }
 
     /* Clean up and return success */
@@ -863,6 +872,7 @@
     size_t newsize;
     PyObject *v;
     Py_ssize_t i;
+    char *bytes;
     char c;
     char *p;
     int quote;
@@ -899,11 +909,12 @@
         *p++ = *quote_prefix++;
     *p++ = quote;
 
+    bytes = PyByteArray_AS_STRING(self);
     for (i = 0; i < length; i++) {
         /* There's at least enough room for a hex escape
            and a closing quote. */
         assert(newsize - (p - buffer) >= 5);
-        c = self->ob_bytes[i];
+        c = bytes[i];
         if (c == '\'' || c == '\\')
             *p++ = '\\', *p++ = c;
         else if (c == '\t')
@@ -2194,7 +2205,7 @@
     Py_ssize_t i, j, n = Py_SIZE(self);
 
     j = n / 2;
-    head = self->ob_bytes;
+    head = PyByteArray_AS_STRING(self);
     tail = head + n - 1;
     for (i = 0; i < j; i++) {
         swap = *head;
@@ -2215,6 +2226,7 @@
     PyObject *value;
     int ival;
     Py_ssize_t where, n = Py_SIZE(self);
+    char *buf;
 
     if (!PyArg_ParseTuple(args, "nO:insert", &where, &value))
         return NULL;
@@ -2228,6 +2240,7 @@
         return NULL;
     if (PyByteArray_Resize((PyObject *)self, n + 1) < 0)
         return NULL;
+    buf = PyByteArray_AS_STRING(self);
 
     if (where < 0) {
         where += n;
@@ -2236,8 +2249,8 @@
     }
     if (where > n)
         where = n;
-    memmove(self->ob_bytes + where + 1, self->ob_bytes + where, n - where);
-    self->ob_bytes[where] = ival;
+    memmove(buf + where + 1, buf + where, n - where);
+    buf[where] = ival;
 
     Py_RETURN_NONE;
 }
@@ -2262,7 +2275,7 @@
     if (PyByteArray_Resize((PyObject *)self, n + 1) < 0)
         return NULL;
 
-    self->ob_bytes[n] = value;
+    PyByteArray_AS_STRING(self)[n] = value;
 
     Py_RETURN_NONE;
 }
@@ -2355,6 +2368,7 @@
 {
     int value;
     Py_ssize_t where = -1, n = Py_SIZE(self);
+    char *buf;
 
     if (!PyArg_ParseTuple(args, "|n:pop", &where))
         return NULL;
@@ -2373,8 +2387,9 @@
     if (!_canresize(self))
         return NULL;
 
-    value = self->ob_bytes[where];
-    memmove(self->ob_bytes + where, self->ob_bytes + where + 1, n - where);
+    buf = PyByteArray_AS_STRING(self);
+    value = buf[where];
+    memmove(buf + where, buf + where + 1, n - where);
     if (PyByteArray_Resize((PyObject *)self, n - 1) < 0)
         return NULL;
 
@@ -2390,12 +2405,13 @@
 {
     int value;
     Py_ssize_t where, n = Py_SIZE(self);
+    char *buf = PyByteArray_AS_STRING(self);
 
     if (! _getbytevalue(arg, &value))
         return NULL;
 
     for (where = 0; where < n; where++) {
-        if (self->ob_bytes[where] == value)
+        if (buf[where] == value)
             break;
     }
     if (where == n) {
@@ -2405,7 +2421,7 @@
     if (!_canresize(self))
         return NULL;
 
-    memmove(self->ob_bytes + where, self->ob_bytes + where + 1, n - where);
+    memmove(buf + where, buf + where + 1, n - where);
     if (PyByteArray_Resize((PyObject *)self, n - 1) < 0)
         return NULL;
 
@@ -2415,21 +2431,21 @@
 /* XXX These two helpers could be optimized if argsize == 1 */
 
 static Py_ssize_t
-lstrip_helper(unsigned char *myptr, Py_ssize_t mysize,
+lstrip_helper(char *myptr, Py_ssize_t mysize,
               void *argptr, Py_ssize_t argsize)
 {
     Py_ssize_t i = 0;
-    while (i < mysize && memchr(argptr, myptr[i], argsize))
+    while (i < mysize && memchr(argptr, (unsigned char) myptr[i], argsize))
         i++;
     return i;
 }
 
 static Py_ssize_t
-rstrip_helper(unsigned char *myptr, Py_ssize_t mysize,
+rstrip_helper(char *myptr, Py_ssize_t mysize,
               void *argptr, Py_ssize_t argsize)
 {
     Py_ssize_t i = mysize - 1;
-    while (i >= 0 && memchr(argptr, myptr[i], argsize))
+    while (i >= 0 && memchr(argptr, (unsigned char) myptr[i], argsize))
         i--;
     return i + 1;
 }
@@ -2444,7 +2460,7 @@
 bytearray_strip(PyByteArrayObject *self, PyObject *args)
 {
     Py_ssize_t left, right, mysize, argsize;
-    void *myptr, *argptr;
+    char *myptr, *argptr;
     PyObject *arg = Py_None;
     Py_buffer varg;
     if (!PyArg_ParseTuple(args, "|O:strip", &arg))
@@ -2456,10 +2472,10 @@
     else {
         if (_getbuffer(arg, &varg) < 0)
             return NULL;
-        argptr = varg.buf;
+        argptr = (char *) varg.buf;
         argsize = varg.len;
     }
-    myptr = self->ob_bytes;
+    myptr = PyByteArray_AS_STRING(self);
     mysize = Py_SIZE(self);
     left = lstrip_helper(myptr, mysize, argptr, argsize);
     if (left == mysize)
@@ -2468,7 +2484,7 @@
         right = rstrip_helper(myptr, mysize, argptr, argsize);
     if (arg != Py_None)
         PyBuffer_Release(&varg);
-    return PyByteArray_FromStringAndSize(self->ob_bytes + left, right - left);
+    return PyByteArray_FromStringAndSize(myptr + left, right - left);
 }
 
 PyDoc_STRVAR(lstrip__doc__,
@@ -2481,7 +2497,7 @@
 bytearray_lstrip(PyByteArrayObject *self, PyObject *args)
 {
     Py_ssize_t left, right, mysize, argsize;
-    void *myptr, *argptr;
+    char *myptr, *argptr;
     PyObject *arg = Py_None;
     Py_buffer varg;
     if (!PyArg_ParseTuple(args, "|O:lstrip", &arg))
@@ -2493,16 +2509,16 @@
     else {
         if (_getbuffer(arg, &varg) < 0)
             return NULL;
-        argptr = varg.buf;
+        argptr = (char *) varg.buf;
         argsize = varg.len;
     }
-    myptr = self->ob_bytes;
+    myptr = PyByteArray_AS_STRING(self);
     mysize = Py_SIZE(self);
     left = lstrip_helper(myptr, mysize, argptr, argsize);
     right = mysize;
     if (arg != Py_None)
         PyBuffer_Release(&varg);
-    return PyByteArray_FromStringAndSize(self->ob_bytes + left, right - left);
+    return PyByteArray_FromStringAndSize(myptr + left, right - left);
 }
 
 PyDoc_STRVAR(rstrip__doc__,
@@ -2515,7 +2531,7 @@
 bytearray_rstrip(PyByteArrayObject *self, PyObject *args)
 {
     Py_ssize_t right, mysize, argsize;
-    void *myptr, *argptr;
+    char *myptr, *argptr;
     PyObject *arg = Py_None;
     Py_buffer varg;
     if (!PyArg_ParseTuple(args, "|O:rstrip", &arg))
@@ -2527,15 +2543,15 @@
     else {
         if (_getbuffer(arg, &varg) < 0)
             return NULL;
-        argptr = varg.buf;
+        argptr = (char *) varg.buf;
         argsize = varg.len;
     }
-    myptr = self->ob_bytes;
+    myptr = PyByteArray_AS_STRING(self);
     mysize = Py_SIZE(self);
     right = rstrip_helper(myptr, mysize, argptr, argsize);
     if (arg != Py_None)
         PyBuffer_Release(&varg);
-    return PyByteArray_FromStringAndSize(self->ob_bytes, right);
+    return PyByteArray_FromStringAndSize(myptr, right);
 }
 
 PyDoc_STRVAR(decode_doc,
@@ -2686,6 +2702,7 @@
 {
     PyObject *dict;
     _Py_IDENTIFIER(__dict__);
+    char *buf;
 
     dict = _PyObject_GetAttrId((PyObject *)self, &PyId___dict__);
     if (dict == NULL) {
@@ -2694,19 +2711,20 @@
         Py_INCREF(dict);
     }
 
+    buf = PyByteArray_AS_STRING(self);
     if (proto < 3) {
         /* use str based reduction for backwards compatibility with Python 2.x */
         PyObject *latin1;
-        if (self->ob_bytes)
-            latin1 = PyUnicode_DecodeLatin1(self->ob_bytes, Py_SIZE(self), NULL);
+        if (Py_SIZE(self))
+            latin1 = PyUnicode_DecodeLatin1(buf, Py_SIZE(self), NULL);
         else
             latin1 = PyUnicode_FromString("");
         return Py_BuildValue("(O(Ns)N)", Py_TYPE(self), latin1, "latin-1", dict);
     }
     else {
         /* use more efficient byte based reduction */
-        if (self->ob_bytes) {
-            return Py_BuildValue("(O(y#)N)", Py_TYPE(self), self->ob_bytes, Py_SIZE(self), dict);
+        if (Py_SIZE(self)) {
+            return Py_BuildValue("(O(y#)N)", Py_TYPE(self), buf, Py_SIZE(self), dict);
         }
         else {
             return Py_BuildValue("(O()N)", Py_TYPE(self), dict);
@@ -2938,7 +2956,7 @@
 
     if (it->it_index < PyByteArray_GET_SIZE(seq)) {
         item = PyLong_FromLong(
-            (unsigned char)seq->ob_bytes[it->it_index]);
+            (unsigned char)PyByteArray_AS_STRING(seq)[it->it_index]);
         if (item != NULL)
             ++it->it_index;
         return item;
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 3a2906c..0a9d04d 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -802,6 +802,23 @@
     return PyLong_FromLong((unsigned char)a->ob_sval[i]);
 }
 
+Py_LOCAL(int)
+bytes_compare_eq(PyBytesObject *a, PyBytesObject *b)
+{
+    int cmp;
+    Py_ssize_t len;
+
+    len = Py_SIZE(a);
+    if (Py_SIZE(b) != len)
+        return 0;
+
+    if (a->ob_sval[0] != b->ob_sval[0])
+        return 0;
+
+    cmp = memcmp(a->ob_sval, b->ob_sval, len);
+    return (cmp == 0);
+}
+
 static PyObject*
 bytes_richcompare(PyBytesObject *a, PyBytesObject *b, int op)
 {
@@ -822,53 +839,55 @@
                 return NULL;
         }
         result = Py_NotImplemented;
-        goto out;
     }
-    if (a == b) {
+    else if (a == b) {
         switch (op) {
-        case Py_EQ:case Py_LE:case Py_GE:
+        case Py_EQ:
+        case Py_LE:
+        case Py_GE:
+            /* a string is equal to itself */
             result = Py_True;
-            goto out;
-        case Py_NE:case Py_LT:case Py_GT:
+            break;
+        case Py_NE:
+        case Py_LT:
+        case Py_GT:
             result = Py_False;
-            goto out;
+            break;
+        default:
+            PyErr_BadArgument();
+            return NULL;
         }
     }
-    if (op == Py_EQ) {
-        /* Supporting Py_NE here as well does not save
-           much time, since Py_NE is rarely used.  */
-        if (Py_SIZE(a) == Py_SIZE(b)
-            && (a->ob_sval[0] == b->ob_sval[0]
-            && memcmp(a->ob_sval, b->ob_sval, Py_SIZE(a)) == 0)) {
-            result = Py_True;
-        } else {
-            result = Py_False;
+    else if (op == Py_EQ || op == Py_NE) {
+        int eq = bytes_compare_eq(a, b);
+        eq ^= (op == Py_NE);
+        result = eq ? Py_True : Py_False;
+    }
+    else {
+        len_a = Py_SIZE(a);
+        len_b = Py_SIZE(b);
+        min_len = Py_MIN(len_a, len_b);
+        if (min_len > 0) {
+            c = Py_CHARMASK(*a->ob_sval) - Py_CHARMASK(*b->ob_sval);
+            if (c == 0)
+                c = memcmp(a->ob_sval, b->ob_sval, min_len);
         }
-        goto out;
+        else
+            c = 0;
+        if (c == 0)
+            c = (len_a < len_b) ? -1 : (len_a > len_b) ? 1 : 0;
+        switch (op) {
+        case Py_LT: c = c <  0; break;
+        case Py_LE: c = c <= 0; break;
+        case Py_GT: c = c >  0; break;
+        case Py_GE: c = c >= 0; break;
+        default:
+            PyErr_BadArgument();
+            return NULL;
+        }
+        result = c ? Py_True : Py_False;
     }
-    len_a = Py_SIZE(a); len_b = Py_SIZE(b);
-    min_len = (len_a < len_b) ? len_a : len_b;
-    if (min_len > 0) {
-        c = Py_CHARMASK(*a->ob_sval) - Py_CHARMASK(*b->ob_sval);
-        if (c==0)
-            c = memcmp(a->ob_sval, b->ob_sval, min_len);
-    } else
-        c = 0;
-    if (c == 0)
-        c = (len_a < len_b) ? -1 : (len_a > len_b) ? 1 : 0;
-    switch (op) {
-    case Py_LT: c = c <  0; break;
-    case Py_LE: c = c <= 0; break;
-    case Py_EQ: assert(0);  break; /* unreachable */
-    case Py_NE: c = c != 0; break;
-    case Py_GT: c = c >  0; break;
-    case Py_GE: c = c >= 0; break;
-    default:
-        result = Py_NotImplemented;
-        goto out;
-    }
-    result = c ? Py_True : Py_False;
-  out:
+
     Py_INCREF(result);
     return result;
 }
@@ -1347,7 +1366,7 @@
 {
     PyObject *sep = NULL;
 
-    if (!PyArg_ParseTuple(args, (char *)stripformat[striptype], &sep))
+    if (!PyArg_ParseTuple(args, stripformat[striptype], &sep))
         return NULL;
 
     if (sep != NULL && sep != Py_None) {
@@ -2660,9 +2679,8 @@
     return new;
 
   error:
-    /* Error handling when new != NULL */
     Py_XDECREF(it);
-    Py_DECREF(new);
+    Py_XDECREF(new);
     return NULL;
 }
 
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index 9713f61..353f414 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -74,6 +74,11 @@
         PyErr_BadInternalCall();
         return NULL;
     }
+
+    /* Ensure that the filename is a ready Unicode string */
+    if (PyUnicode_READY(filename) < 0)
+        return NULL;
+
     n_cellvars = PyTuple_GET_SIZE(cellvars);
     intern_strings(names);
     intern_strings(varnames);
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index 5747450..60a388f 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -681,7 +681,7 @@
 PyDoc_STRVAR(complex_conjugate_doc,
 "complex.conjugate() -> complex\n"
 "\n"
-"Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j.");
+"Return the complex conjugate of its argument. (3-4j).conjugate() == 3+4j.");
 
 static PyObject *
 complex_getnewargs(PyComplexObject *v)
@@ -693,7 +693,7 @@
 PyDoc_STRVAR(complex__format__doc,
 "complex.__format__() -> str\n"
 "\n"
-"Converts to a string according to format_spec.");
+"Convert to a string according to format_spec.");
 
 static PyObject *
 complex__format__(PyObject* self, PyObject* args)
@@ -773,8 +773,9 @@
             goto error;
     }
     else if (PyObject_AsCharBuffer(v, &s, &len)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "complex() argument must be a string or a number");
+        PyErr_Format(PyExc_TypeError,
+            "complex() argument must be a string or a number, not '%.200s'",
+            Py_TYPE(v)->tp_name);
         return NULL;
     }
 
@@ -953,8 +954,9 @@
         nbi = i->ob_type->tp_as_number;
     if (nbr == NULL || nbr->nb_float == NULL ||
         ((i != NULL) && (nbi == NULL || nbi->nb_float == NULL))) {
-        PyErr_SetString(PyExc_TypeError,
-                   "complex() argument must be a string or a number");
+        PyErr_Format(PyExc_TypeError,
+            "complex() argument must be a string or a number, not '%.200s'",
+            Py_TYPE(r)->tp_name);
         if (own_r) {
             Py_DECREF(r);
         }
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index bbee1a6..a5072c8 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -2160,9 +2160,31 @@
     return res;
 }
 
+/*[clinic]
+module dict
+
+@coexist
+dict.__contains__
+
+  key: object
+  /
+
+True if D has a key k, else False"
+[clinic]*/
+
+PyDoc_STRVAR(dict___contains____doc__,
+"True if D has a key k, else False\"\n"
+"\n"
+"dict.__contains__(key)");
+
+#define DICT___CONTAINS___METHODDEF    \
+    {"__contains__", (PyCFunction)dict___contains__, METH_O|METH_COEXIST, dict___contains____doc__},
+
 static PyObject *
-dict_contains(PyDictObject *mp, PyObject *key)
+dict___contains__(PyObject *self, PyObject *key)
+/*[clinic checksum: 61c5c802ea1d35699a1a754f1f3538ea9b259cf4]*/
 {
+    register PyDictObject *mp = (PyDictObject *)self;
     Py_hash_t hash;
     PyDictKeyEntry *ep;
     PyObject **value_addr;
@@ -2447,9 +2469,6 @@
     return sizeof(PyDictKeysObject) + (DK_SIZE(keys)-1) * sizeof(PyDictKeyEntry);
 }
 
-PyDoc_STRVAR(contains__doc__,
-"D.__contains__(k) -> True if D has a key k, else False");
-
 PyDoc_STRVAR(getitem__doc__, "x.__getitem__(y) <==> x[y]");
 
 PyDoc_STRVAR(sizeof__doc__,
@@ -2498,8 +2517,7 @@
              "D.values() -> an object providing a view on D's values");
 
 static PyMethodDef mapp_methods[] = {
-    {"__contains__",(PyCFunction)dict_contains,     METH_O | METH_COEXIST,
-     contains__doc__},
+    DICT___CONTAINS___METHODDEF
     {"__getitem__", (PyCFunction)dict_subscript,        METH_O | METH_COEXIST,
      getitem__doc__},
     {"__sizeof__",      (PyCFunction)dict_sizeof,       METH_NOARGS,
@@ -2718,6 +2736,15 @@
 }
 
 int
+_PyDict_DelItemId(PyObject *v, _Py_Identifier *key)
+{
+    PyObject *kv = _PyUnicode_FromId(key); /* borrowed */
+    if (kv == NULL)
+        return -1;
+    return PyDict_DelItem(v, kv);
+}
+
+int
 PyDict_DelItemString(PyObject *v, const char *key)
 {
     PyObject *kv;
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index 79bbb8f..de5d746 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -121,11 +121,11 @@
 static PyObject *
 BaseException_repr(PyBaseExceptionObject *self)
 {
-    char *name;
-    char *dot;
+    const char *name;
+    const char *dot;
 
-    name = (char *)Py_TYPE(self)->tp_name;
-    dot = strrchr(name, '.');
+    name = Py_TYPE(self)->tp_name;
+    dot = (const char *) strrchr(name, '.');
     if (dot != NULL) name = dot+1;
 
     return PyUnicode_FromFormat("%s%R", name, self->args);
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index f273b0b..596f909 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -26,8 +26,8 @@
 /* External C interface */
 
 PyObject *
-PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding,
-              char *errors, char *newline, int closefd)
+PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding,
+              const char *errors, const char *newline, int closefd)
 {
     PyObject *io, *stream;
     _Py_IDENTIFIER(open);
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 4ac99bb..abea975 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -144,8 +144,9 @@
         }
     }
     else if (PyObject_AsCharBuffer(v, &s, &len)) {
-        PyErr_SetString(PyExc_TypeError,
-            "float() argument must be a string or a number");
+        PyErr_Format(PyExc_TypeError,
+            "float() argument must be a string or a number, not '%.200s'",
+            Py_TYPE(v)->tp_name);
         return NULL;
     }
     last = s + len;
@@ -1498,9 +1499,9 @@
 PyDoc_STRVAR(float_as_integer_ratio_doc,
 "float.as_integer_ratio() -> (int, int)\n"
 "\n"
-"Returns a pair of integers, whose ratio is exactly equal to the original\n"
+"Return a pair of integers, whose ratio is exactly equal to the original\n"
 "float and with a positive denominator.\n"
-"Raises OverflowError on infinities and a ValueError on NaNs.\n"
+"Raise OverflowError on infinities and a ValueError on NaNs.\n"
 "\n"
 ">>> (10.0).as_integer_ratio()\n"
 "(10, 1)\n"
@@ -1687,7 +1688,7 @@
 "'IEEE, big-endian' or 'IEEE, little-endian', and in addition can only be\n"
 "one of the latter two if it appears to match the underlying C reality.\n"
 "\n"
-"Overrides the automatic determination of C-level floating point type.\n"
+"Override the automatic determination of C-level floating point type.\n"
 "This affects how floats are converted to and from binary strings.");
 
 static PyObject *
@@ -1726,12 +1727,12 @@
 
 static PyMethodDef float_methods[] = {
     {"conjugate",       (PyCFunction)float_float,       METH_NOARGS,
-     "Returns self, the complex conjugate of any float."},
+     "Return self, the complex conjugate of any float."},
     {"__trunc__",       (PyCFunction)float_trunc, METH_NOARGS,
-     "Returns the Integral closest to x between 0 and x."},
+     "Return the Integral closest to x between 0 and x."},
     {"__round__",       (PyCFunction)float_round, METH_VARARGS,
-     "Returns the Integral closest to x, rounding half toward even.\n"
-     "When an argument is passed, works like built-in round(x, ndigits)."},
+     "Return the Integral closest to x, rounding half toward even.\n"
+     "When an argument is passed, work like built-in round(x, ndigits)."},
     {"as_integer_ratio", (PyCFunction)float_as_integer_ratio, METH_NOARGS,
      float_as_integer_ratio_doc},
     {"fromhex", (PyCFunction)float_fromhex,
@@ -1739,14 +1740,14 @@
     {"hex", (PyCFunction)float_hex,
      METH_NOARGS, float_hex_doc},
     {"is_integer",      (PyCFunction)float_is_integer,  METH_NOARGS,
-     "Returns True if the float is an integer."},
+     "Return True if the float is an integer."},
 #if 0
     {"is_inf",          (PyCFunction)float_is_inf,      METH_NOARGS,
-     "Returns True if the float is positive or negative infinite."},
+     "Return True if the float is positive or negative infinite."},
     {"is_finite",       (PyCFunction)float_is_finite,   METH_NOARGS,
-     "Returns True if the float is finite, neither infinite nor NaN."},
+     "Return True if the float is finite, neither infinite nor NaN."},
     {"is_nan",          (PyCFunction)float_is_nan,      METH_NOARGS,
-     "Returns True if the float is not a number (NaN)."},
+     "Return True if the float is not a number (NaN)."},
 #endif
     {"__getnewargs__",          (PyCFunction)float_getnewargs,  METH_NOARGS},
     {"__getformat__",           (PyCFunction)float_getformat,
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index a62a45e..63f03a6 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -21,7 +21,8 @@
 static PyObject *
 frame_getlocals(PyFrameObject *f, void *closure)
 {
-    PyFrame_FastToLocals(f);
+    if (PyFrame_FastToLocalsWithError(f) < 0)
+        return NULL;
     Py_INCREF(f->f_locals);
     return f->f_locals;
 }
@@ -600,13 +601,13 @@
     0,                                          /* tp_dict */
 };
 
-static PyObject *builtin_object;
+_Py_IDENTIFIER(__builtins__);
 
 int _PyFrame_Init()
 {
-    builtin_object = PyUnicode_InternFromString("__builtins__");
-    if (builtin_object == NULL)
-        return 0;
+    /* Before, PyId___builtins__ was a string created explicitly in
+       this function. Now there is nothing to initialize anymore, but
+       the function is kept for backward compatibility. */
     return 1;
 }
 
@@ -627,7 +628,7 @@
     }
 #endif
     if (back == NULL || back->f_globals != globals) {
-        builtins = PyDict_GetItem(globals, builtin_object);
+        builtins = _PyDict_GetItemId(globals, &PyId___builtins__);
         if (builtins) {
             if (PyModule_Check(builtins)) {
                 builtins = PyModule_GetDict(builtins);
@@ -772,12 +773,9 @@
    If deref is true, then the values being copied are cell variables
    and the value is extracted from the cell variable before being put
    in dict.
-
-   Exceptions raised while modifying the dict are silently ignored,
-   because there is no good way to report them.
  */
 
-static void
+static int
 map_to_dict(PyObject *map, Py_ssize_t nmap, PyObject *dict, PyObject **values,
             int deref)
 {
@@ -794,14 +792,19 @@
             value = PyCell_GET(value);
         }
         if (value == NULL) {
-            if (PyObject_DelItem(dict, key) != 0)
-                PyErr_Clear();
+            if (PyObject_DelItem(dict, key) != 0) {
+                if (PyErr_ExceptionMatches(PyExc_KeyError))
+                    PyErr_Clear();
+                else
+                    return -1;
+            }
         }
         else {
             if (PyObject_SetItem(dict, key, value) != 0)
-                PyErr_Clear();
+                return -1;
         }
     }
+    return 0;
 }
 
 /* Copy values from the "locals" dict into the fast locals.
@@ -858,42 +861,49 @@
     }
 }
 
-void
-PyFrame_FastToLocals(PyFrameObject *f)
+int
+PyFrame_FastToLocalsWithError(PyFrameObject *f)
 {
     /* Merge fast locals into f->f_locals */
     PyObject *locals, *map;
     PyObject **fast;
-    PyObject *error_type, *error_value, *error_traceback;
     PyCodeObject *co;
     Py_ssize_t j;
     Py_ssize_t ncells, nfreevars;
-    if (f == NULL)
-        return;
+
+    if (f == NULL) {
+        PyErr_BadInternalCall();
+        return -1;
+    }
     locals = f->f_locals;
     if (locals == NULL) {
         locals = f->f_locals = PyDict_New();
-        if (locals == NULL) {
-            PyErr_Clear(); /* Can't report it :-( */
-            return;
-        }
+        if (locals == NULL)
+            return -1;
     }
     co = f->f_code;
     map = co->co_varnames;
-    if (!PyTuple_Check(map))
-        return;
-    PyErr_Fetch(&error_type, &error_value, &error_traceback);
+    if (!PyTuple_Check(map)) {
+        PyErr_Format(PyExc_SystemError,
+                     "co_varnames must be a tuple, not %s",
+                     Py_TYPE(map)->tp_name);
+        return -1;
+    }
     fast = f->f_localsplus;
     j = PyTuple_GET_SIZE(map);
     if (j > co->co_nlocals)
         j = co->co_nlocals;
-    if (co->co_nlocals)
-        map_to_dict(map, j, locals, fast, 0);
+    if (co->co_nlocals) {
+        if (map_to_dict(map, j, locals, fast, 0) < 0)
+            return -1;
+    }
     ncells = PyTuple_GET_SIZE(co->co_cellvars);
     nfreevars = PyTuple_GET_SIZE(co->co_freevars);
     if (ncells || nfreevars) {
-        map_to_dict(co->co_cellvars, ncells,
-                    locals, fast + co->co_nlocals, 1);
+        if (map_to_dict(co->co_cellvars, ncells,
+                        locals, fast + co->co_nlocals, 1))
+            return -1;
+
         /* If the namespace is unoptimized, then one of the
            following cases applies:
            1. It does not contain free variables, because it
@@ -903,11 +913,24 @@
            into the locals dict used by the class.
         */
         if (co->co_flags & CO_OPTIMIZED) {
-            map_to_dict(co->co_freevars, nfreevars,
-                        locals, fast + co->co_nlocals + ncells, 1);
+            if (map_to_dict(co->co_freevars, nfreevars,
+                            locals, fast + co->co_nlocals + ncells, 1) < 0)
+                return -1;
         }
     }
-    PyErr_Restore(error_type, error_value, error_traceback);
+    return 0;
+}
+
+void
+PyFrame_FastToLocals(PyFrameObject *f)
+{
+    int res;
+
+    assert(!PyErr_Occurred());
+
+    res = PyFrame_FastToLocalsWithError(f);
+    if (res < 0)
+        PyErr_Clear();
 }
 
 void
@@ -971,8 +994,6 @@
 PyFrame_Fini(void)
 {
     (void)PyFrame_ClearFreeList();
-    Py_XDECREF(builtin_object);
-    builtin_object = NULL;
 }
 
 /* Print summary info about the state of the optimized allocator */
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 8748706..a5c0d1b 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -1941,10 +1941,10 @@
  * string characters.
  */
 static PyLongObject *
-long_from_binary_base(char **str, int base)
+long_from_binary_base(const char **str, int base)
 {
-    char *p = *str;
-    char *start = p;
+    const char *p = *str;
+    const char *start = p;
     int bits_per_char;
     Py_ssize_t n;
     PyLongObject *z;
@@ -2009,10 +2009,10 @@
  * If unsuccessful, NULL will be returned.
  */
 PyObject *
-PyLong_FromString(char *str, char **pend, int base)
+PyLong_FromString(const char *str, char **pend, int base)
 {
     int sign = 1, error_if_nonzero = 0;
-    char *start, *orig_str = str;
+    const char *start, *orig_str = str;
     PyLongObject *z = NULL;
     PyObject *strobj;
     Py_ssize_t slen;
@@ -2147,7 +2147,7 @@
         int convwidth;
         twodigits convmultmax, convmult;
         digit *pz, *pzstop;
-        char* scan;
+        const char* scan;
 
         static double log_base_BASE[37] = {0.0e0,};
         static int convwidth_base[37] = {0,};
@@ -2275,12 +2275,12 @@
     if (z == NULL)
         return NULL;
     if (pend != NULL)
-        *pend = str;
+        *pend = (char *)str;
     return (PyObject *) z;
 
   onError:
     if (pend != NULL)
-        *pend = str;
+        *pend = (char *)str;
     Py_XDECREF(z);
     slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
     strobj = PyUnicode_FromStringAndSize(orig_str, slen);
@@ -3878,10 +3878,16 @@
             goto Done;
         }
 
-        /* if base < 0:
-               base = base % modulus
-           Having the base positive just makes things easier. */
-        if (Py_SIZE(a) < 0) {
+        /* Reduce base by modulus in some cases:
+           1. If base < 0.  Forcing the base non-negative makes things easier.
+           2. If base is obviously larger than the modulus.  The "small
+              exponent" case later can multiply directly by base repeatedly,
+              while the "large exponent" case multiplies directly by base 31
+              times.  It can be unboundedly faster to multiply by
+              base % modulus instead.
+           We could _always_ do this reduction, but l_divmod() isn't cheap,
+           so we only do it when it buys something. */
+        if (Py_SIZE(a) < 0 || Py_SIZE(a) > Py_SIZE(c)) {
             if (l_divmod(a, c, NULL, &temp) < 0)
                 goto Error;
             Py_DECREF(a);
diff --git a/Objects/object.c b/Objects/object.c
index 8018c6a..acc34af 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -8,6 +8,12 @@
 extern "C" {
 #endif
 
+_Py_IDENTIFIER(Py_Repr);
+_Py_IDENTIFIER(__bytes__);
+_Py_IDENTIFIER(__dir__);
+_Py_IDENTIFIER(__isabstractmethod__);
+_Py_IDENTIFIER(builtins);
+
 #ifdef Py_REF_DEBUG
 Py_ssize_t _Py_RefTotal;
 
@@ -560,7 +566,6 @@
 PyObject_Bytes(PyObject *v)
 {
     PyObject *result, *func;
-    _Py_IDENTIFIER(__bytes__);
 
     if (v == NULL)
         return PyBytes_FromString("<NULL>");
@@ -949,7 +954,6 @@
 {
     int res;
     PyObject* isabstract;
-    _Py_IDENTIFIER(__isabstractmethod__);
 
     if (obj == NULL)
         return 0;
@@ -1122,8 +1126,12 @@
 PyObject *
 _PyObject_GetBuiltin(const char *name)
 {
-    PyObject *mod, *attr;
-    mod = PyImport_ImportModule("builtins");
+    PyObject *mod_name, *mod, *attr;
+
+    mod_name = _PyUnicode_FromId(&PyId_builtins);   /* borrowed */
+    if (mod_name == NULL)
+        return NULL;
+    mod = PyImport_Import(mod_name);
     if (mod == NULL)
         return NULL;
     attr = PyObject_GetAttrString(mod, name);
@@ -1407,12 +1415,11 @@
 _dir_locals(void)
 {
     PyObject *names;
-    PyObject *locals = PyEval_GetLocals();
+    PyObject *locals;
 
-    if (locals == NULL) {
-        PyErr_SetString(PyExc_SystemError, "frame does not exist");
+    locals = PyEval_GetLocals();
+    if (locals == NULL)
         return NULL;
-    }
 
     names = PyMapping_Keys(locals);
     if (!names)
@@ -1437,7 +1444,6 @@
 _dir_object(PyObject *obj)
 {
     PyObject *result, *sorted;
-    _Py_IDENTIFIER(__dir__);
     PyObject *dirfunc = _PyObject_LookupSpecial(obj, &PyId___dir__);
 
     assert(obj);
@@ -1970,8 +1976,6 @@
    See dictobject.c and listobject.c for examples of use.
 */
 
-#define KEY "Py_Repr"
-
 int
 Py_ReprEnter(PyObject *obj)
 {
@@ -1982,12 +1986,12 @@
     dict = PyThreadState_GetDict();
     if (dict == NULL)
         return 0;
-    list = PyDict_GetItemString(dict, KEY);
+    list = _PyDict_GetItemId(dict, &PyId_Py_Repr);
     if (list == NULL) {
         list = PyList_New(0);
         if (list == NULL)
             return -1;
-        if (PyDict_SetItemString(dict, KEY, list) < 0)
+        if (_PyDict_SetItemId(dict, &PyId_Py_Repr, list) < 0)
             return -1;
         Py_DECREF(list);
     }
@@ -2015,7 +2019,7 @@
     if (dict == NULL)
         goto finally;
 
-    list = PyDict_GetItemString(dict, KEY);
+    list = _PyDict_GetItemId(dict, &PyId_Py_Repr);
     if (list == NULL || !PyList_Check(list))
         goto finally;
 
diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c
index f7b3e49..004cfaa 100644
--- a/Objects/obmalloc.c
+++ b/Objects/obmalloc.c
@@ -125,10 +125,11 @@
 
 #define PYRAW_FUNCS _PyMem_RawMalloc, _PyMem_RawRealloc, _PyMem_RawFree
 #ifdef WITH_PYMALLOC
-#define PYOBJECT_FUNCS _PyObject_Malloc, _PyObject_Realloc, _PyObject_Free
+#  define PYOBJ_FUNCS _PyObject_Malloc, _PyObject_Realloc, _PyObject_Free
 #else
-#define PYOBJECT_FUNCS PYRAW_FUNCS
+#  define PYOBJ_FUNCS PYRAW_FUNCS
 #endif
+#define PYMEM_FUNCS PYRAW_FUNCS
 
 #ifdef PYMALLOC_DEBUG
 typedef struct {
@@ -142,16 +143,16 @@
     debug_alloc_api_t obj;
 } _PyMem_Debug = {
     {'r', {NULL, PYRAW_FUNCS}},
-    {'m', {NULL, PYRAW_FUNCS}},
-    {'o', {NULL, PYOBJECT_FUNCS}}
+    {'m', {NULL, PYMEM_FUNCS}},
+    {'o', {NULL, PYOBJ_FUNCS}}
     };
 
-#define PYDEBUG_FUNCS _PyMem_DebugMalloc, _PyMem_DebugRealloc, _PyMem_DebugFree
+#define PYDBG_FUNCS _PyMem_DebugMalloc, _PyMem_DebugRealloc, _PyMem_DebugFree
 #endif
 
 static PyMemAllocator _PyMem_Raw = {
 #ifdef PYMALLOC_DEBUG
-    &_PyMem_Debug.raw, PYDEBUG_FUNCS
+    &_PyMem_Debug.raw, PYDBG_FUNCS
 #else
     NULL, PYRAW_FUNCS
 #endif
@@ -159,23 +160,24 @@
 
 static PyMemAllocator _PyMem = {
 #ifdef PYMALLOC_DEBUG
-    &_PyMem_Debug.mem, PYDEBUG_FUNCS
+    &_PyMem_Debug.mem, PYDBG_FUNCS
 #else
-    NULL, PYRAW_FUNCS
+    NULL, PYMEM_FUNCS
 #endif
     };
 
 static PyMemAllocator _PyObject = {
 #ifdef PYMALLOC_DEBUG
-    &_PyMem_Debug.obj, PYDEBUG_FUNCS
+    &_PyMem_Debug.obj, PYDBG_FUNCS
 #else
-    NULL, PYOBJECT_FUNCS
+    NULL, PYOBJ_FUNCS
 #endif
     };
 
 #undef PYRAW_FUNCS
-#undef PYOBJECT_FUNCS
-#undef PYDEBUG_FUNCS
+#undef PYMEM_FUNCS
+#undef PYOBJ_FUNCS
+#undef PYDBG_FUNCS
 
 static PyObjectArenaAllocator _PyObject_Arena = {NULL,
 #ifdef MS_WINDOWS
@@ -924,7 +926,7 @@
             return NULL;                /* overflow */
 #endif
         nbytes = numarenas * sizeof(*arenas);
-        arenaobj = (struct arena_object *)PyMem_Realloc(arenas, nbytes);
+        arenaobj = (struct arena_object *)PyMem_RawRealloc(arenas, nbytes);
         if (arenaobj == NULL)
             return NULL;
         arenas = arenaobj;
@@ -1309,7 +1311,7 @@
      * has been reached.
      */
     {
-        void *result = PyMem_Malloc(nbytes);
+        void *result = PyMem_RawMalloc(nbytes);
         if (!result)
             _Py_AllocatedBlocks--;
         return result;
@@ -1539,7 +1541,7 @@
 redirect:
 #endif
     /* We didn't allocate this address. */
-    PyMem_Free(p);
+    PyMem_RawFree(p);
 }
 
 /* realloc.  If p is NULL, this acts like malloc(nbytes).  Else if nbytes==0,
@@ -1608,14 +1610,14 @@
      * at p.  Instead we punt:  let C continue to manage this block.
      */
     if (nbytes)
-        return PyMem_Realloc(p, nbytes);
+        return PyMem_RawRealloc(p, nbytes);
     /* C doesn't define the result of realloc(p, 0) (it may or may not
      * return NULL then), but Python's docs promise that nbytes==0 never
      * returns NULL.  We don't pass 0 to realloc(), to avoid that endcase
      * to begin with.  Even then, we can't be sure that realloc() won't
      * return NULL.
      */
-    bp = PyMem_Realloc(p, 1);
+    bp = PyMem_RawRealloc(p, 1);
     return bp ? bp : p;
 }
 
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index 1a1c03e..a4d9fb3 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -139,7 +139,7 @@
 "range(stop) -> range object\n\
 range(start, stop[, step]) -> range object\n\
 \n\
-Returns a virtual sequence of numbers from start to stop by step.");
+Return a virtual sequence of numbers from start to stop by step.");
 
 static void
 range_dealloc(rangeobject *r)
@@ -672,14 +672,14 @@
 static PyObject * range_reverse(PyObject *seq);
 
 PyDoc_STRVAR(reverse_doc,
-"Returns a reverse iterator.");
+"Return a reverse iterator.");
 
 PyDoc_STRVAR(count_doc,
 "rangeobject.count(value) -> integer -- return number of occurrences of value");
 
 PyDoc_STRVAR(index_doc,
 "rangeobject.index(value, [start, [stop]]) -> integer -- return index of value.\n"
-"Raises ValueError if the value is not present.");
+"Raise ValueError if the value is not present.");
 
 static PyMethodDef range_methods[] = {
     {"__reversed__",    (PyCFunction)range_reverse, METH_NOARGS, reverse_doc},
diff --git a/Objects/stringlib/partition.h b/Objects/stringlib/partition.h
index 40cb512..ed32a6f 100644
--- a/Objects/stringlib/partition.h
+++ b/Objects/stringlib/partition.h
@@ -29,6 +29,11 @@
         PyTuple_SET_ITEM(out, 0, STRINGLIB_NEW(str, str_len));
         PyTuple_SET_ITEM(out, 1, STRINGLIB_NEW(NULL, 0));
         PyTuple_SET_ITEM(out, 2, STRINGLIB_NEW(NULL, 0));
+
+        if (PyErr_Occurred()) {
+            Py_DECREF(out);
+            return NULL;
+        }
 #else
         Py_INCREF(str_obj);
         PyTuple_SET_ITEM(out, 0, (PyObject*) str_obj);
@@ -79,6 +84,11 @@
         PyTuple_SET_ITEM(out, 0, STRINGLIB_NEW(NULL, 0));
         PyTuple_SET_ITEM(out, 1, STRINGLIB_NEW(NULL, 0));
         PyTuple_SET_ITEM(out, 2, STRINGLIB_NEW(str, str_len));
+
+        if (PyErr_Occurred()) {
+            Py_DECREF(out);
+            return NULL;
+        }
 #else
         Py_INCREF(STRINGLIB_EMPTY);
         PyTuple_SET_ITEM(out, 0, (PyObject*) STRINGLIB_EMPTY);
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 6826cf9..09f77fa 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -39,15 +39,21 @@
 static struct method_cache_entry method_cache[1 << MCACHE_SIZE_EXP];
 static unsigned int next_version_tag = 0;
 
+/* alphabetical order */
+_Py_IDENTIFIER(__abstractmethods__);
 _Py_IDENTIFIER(__class__);
+_Py_IDENTIFIER(__delitem__);
 _Py_IDENTIFIER(__dict__);
 _Py_IDENTIFIER(__doc__);
-_Py_IDENTIFIER(__getitem__);
 _Py_IDENTIFIER(__getattribute__);
+_Py_IDENTIFIER(__getitem__);
 _Py_IDENTIFIER(__hash__);
+_Py_IDENTIFIER(__len__);
 _Py_IDENTIFIER(__module__);
 _Py_IDENTIFIER(__name__);
 _Py_IDENTIFIER(__new__);
+_Py_IDENTIFIER(__setitem__);
+_Py_IDENTIFIER(builtins);
 
 static PyObject *
 slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
@@ -101,16 +107,17 @@
        needed.
      */
     PyObject *raw, *ref;
-    Py_ssize_t i, n;
+    Py_ssize_t i;
 
     if (!PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG))
         return;
 
     raw = type->tp_subclasses;
     if (raw != NULL) {
-        n = PyList_GET_SIZE(raw);
-        for (i = 0; i < n; i++) {
-            ref = PyList_GET_ITEM(raw, i);
+        assert(PyDict_CheckExact(raw));
+        i = 0;
+        while (PyDict_Next(raw, &i, NULL, &ref)) {
+            assert(PyWeakref_CheckRef(ref));
             ref = PyWeakref_GET_OBJECT(ref);
             if (ref != Py_None) {
                 PyType_Modified((PyTypeObject *)ref);
@@ -343,11 +350,10 @@
 static PyObject *
 type_module(PyTypeObject *type, void *context)
 {
-    PyObject *mod;
     char *s;
 
     if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) {
-        mod = _PyDict_GetItemId(type->tp_dict, &PyId___module__);
+        PyObject *mod = _PyDict_GetItemId(type->tp_dict, &PyId___module__);
         if (!mod) {
             PyErr_Format(PyExc_AttributeError, "__module__");
             return 0;
@@ -356,11 +362,14 @@
         return mod;
     }
     else {
+        PyObject *name;
         s = strrchr(type->tp_name, '.');
         if (s != NULL)
             return PyUnicode_FromStringAndSize(
                 type->tp_name, (Py_ssize_t)(s - type->tp_name));
-        return PyUnicode_FromString("builtins");
+        name = _PyUnicode_FromId(&PyId_builtins);
+        Py_XINCREF(name);
+        return name;
     }
 }
 
@@ -382,9 +391,11 @@
     /* type itself has an __abstractmethods__ descriptor (this). Don't return
        that. */
     if (type != &PyType_Type)
-        mod = PyDict_GetItemString(type->tp_dict, "__abstractmethods__");
+        mod = _PyDict_GetItemId(type->tp_dict, &PyId___abstractmethods__);
     if (!mod) {
-        PyErr_SetString(PyExc_AttributeError, "__abstractmethods__");
+        PyObject *message = _PyUnicode_FromId(&PyId___abstractmethods__);
+        if (message)
+            PyErr_SetObject(PyExc_AttributeError, message);
         return NULL;
     }
     Py_XINCREF(mod);
@@ -403,13 +414,15 @@
         abstract = PyObject_IsTrue(value);
         if (abstract < 0)
             return -1;
-        res = PyDict_SetItemString(type->tp_dict, "__abstractmethods__", value);
+        res = _PyDict_SetItemId(type->tp_dict, &PyId___abstractmethods__, value);
     }
     else {
         abstract = 0;
-        res = PyDict_DelItemString(type->tp_dict, "__abstractmethods__");
+        res = _PyDict_DelItemId(type->tp_dict, &PyId___abstractmethods__);
         if (res && PyErr_ExceptionMatches(PyExc_KeyError)) {
-            PyErr_SetString(PyExc_AttributeError, "__abstractmethods__");
+            PyObject *message = _PyUnicode_FromId(&PyId___abstractmethods__);
+            if (message)
+                PyErr_SetObject(PyExc_AttributeError, message);
             return -1;
         }
     }
@@ -435,6 +448,7 @@
 static int compatible_for_assignment(PyTypeObject *, PyTypeObject *, char *);
 static int add_subclass(PyTypeObject*, PyTypeObject*);
 static void remove_subclass(PyTypeObject *, PyTypeObject *);
+static void remove_all_subclasses(PyTypeObject *type, PyObject *bases);
 static void update_all_slots(PyTypeObject *);
 
 typedef int (*update_callback)(PyTypeObject *, void *);
@@ -448,15 +462,15 @@
 {
     PyTypeObject *subclass;
     PyObject *ref, *subclasses, *old_mro;
-    Py_ssize_t i, n;
+    Py_ssize_t i;
 
     subclasses = type->tp_subclasses;
     if (subclasses == NULL)
         return 0;
-    assert(PyList_Check(subclasses));
-    n = PyList_GET_SIZE(subclasses);
-    for (i = 0; i < n; i++) {
-        ref = PyList_GET_ITEM(subclasses, i);
+    assert(PyDict_CheckExact(subclasses));
+    i = 0;
+
+    while (PyDict_Next(subclasses, &i, NULL, &ref)) {
         assert(PyWeakref_CheckRef(ref));
         subclass = (PyTypeObject *)PyWeakref_GET_OBJECT(ref);
         assert(subclass != NULL);
@@ -575,13 +589,7 @@
     /* for now, sod that: just remove from all old_bases,
        add to all new_bases */
 
-    for (i = PyTuple_GET_SIZE(old_bases) - 1; i >= 0; i--) {
-        ob = PyTuple_GET_ITEM(old_bases, i);
-        if (PyType_Check(ob)) {
-            remove_subclass(
-                (PyTypeObject*)ob, type);
-        }
-    }
+    remove_all_subclasses(type, old_bases);
 
     for (i = PyTuple_GET_SIZE(value) - 1; i >= 0; i--) {
         ob = PyTuple_GET_ITEM(value, i);
@@ -711,7 +719,7 @@
         return NULL;
     }
 
-    if (mod != NULL && PyUnicode_CompareWithASCIIString(mod, "builtins"))
+    if (mod != NULL && _PyUnicode_CompareWithId(mod, &PyId_builtins))
         rtn = PyUnicode_FromFormat("<class '%U.%U'>", mod, name);
     else
         rtn = PyUnicode_FromFormat("<class '%s'>", type->tp_name);
@@ -2142,7 +2150,7 @@
             if (!valid_identifier(tmp))
                 goto error;
             assert(PyUnicode_Check(tmp));
-            if (PyUnicode_CompareWithASCIIString(tmp, "__dict__") == 0) {
+            if (_PyUnicode_CompareWithId(tmp, &PyId___dict__) == 0) {
                 if (!may_add_dict || add_dict) {
                     PyErr_SetString(PyExc_TypeError,
                         "__dict__ slot disallowed: "
@@ -2173,7 +2181,7 @@
         for (i = j = 0; i < nslots; i++) {
             tmp = PyTuple_GET_ITEM(slots, i);
             if ((add_dict &&
-                 PyUnicode_CompareWithASCIIString(tmp, "__dict__") == 0) ||
+                 _PyUnicode_CompareWithId(tmp, &PyId___dict__) == 0) ||
                 (add_weak &&
                  PyUnicode_CompareWithASCIIString(tmp, "__weakref__") == 0))
                 continue;
@@ -2733,10 +2741,14 @@
 type_dealloc(PyTypeObject *type)
 {
     PyHeapTypeObject *et;
+    PyObject *tp, *val, *tb;
 
     /* Assert this is a heap-allocated type object */
     assert(type->tp_flags & Py_TPFLAGS_HEAPTYPE);
     _PyObject_GC_UNTRACK(type);
+    PyErr_Fetch(&tp, &val, &tb);
+    remove_all_subclasses(type, type->tp_bases);
+    PyErr_Restore(tp, val, tb);
     PyObject_ClearWeakRefs((PyObject *)type);
     et = (PyHeapTypeObject *)type;
     Py_XDECREF(type->tp_base);
@@ -2761,7 +2773,7 @@
 type_subclasses(PyTypeObject *type, PyObject *args_ignored)
 {
     PyObject *list, *raw, *ref;
-    Py_ssize_t i, n;
+    Py_ssize_t i;
 
     list = PyList_New(0);
     if (list == NULL)
@@ -2769,10 +2781,9 @@
     raw = type->tp_subclasses;
     if (raw == NULL)
         return list;
-    assert(PyList_Check(raw));
-    n = PyList_GET_SIZE(raw);
-    for (i = 0; i < n; i++) {
-        ref = PyList_GET_ITEM(raw, i);
+    assert(PyDict_CheckExact(raw));
+    i = 0;
+    while (PyDict_Next(raw, &i, NULL, &ref)) {
         assert(PyWeakref_CheckRef(ref));
         ref = PyWeakref_GET_OBJECT(ref);
         if (ref != Py_None) {
@@ -2961,8 +2972,8 @@
            class's dict; the cycle will be broken that way.
 
        tp_subclasses:
-           A list of weak references can't be part of a cycle; and
-           lists have their own tp_clear.
+           A dict of weak references can't be part of a cycle; and
+           dicts have their own tp_clear.
 
        slots (in PyHeapTypeObject):
            A tuple of strings can't be part of a cycle.
@@ -3179,7 +3190,7 @@
         Py_XDECREF(mod);
         return NULL;
     }
-    if (mod != NULL && PyUnicode_CompareWithASCIIString(mod, "builtins"))
+    if (mod != NULL && _PyUnicode_CompareWithId(mod, &PyId_builtins))
         rtn = PyUnicode_FromFormat("<%U.%U object at %p>", mod, name, self);
     else
         rtn = PyUnicode_FromFormat("<%s object at %p>",
@@ -4353,51 +4364,57 @@
 static int
 add_subclass(PyTypeObject *base, PyTypeObject *type)
 {
-    Py_ssize_t i;
-    int result;
-    PyObject *list, *ref, *newobj;
+    int result = -1;
+    PyObject *dict, *key, *newobj;
 
-    list = base->tp_subclasses;
-    if (list == NULL) {
-        base->tp_subclasses = list = PyList_New(0);
-        if (list == NULL)
+    dict = base->tp_subclasses;
+    if (dict == NULL) {
+        base->tp_subclasses = dict = PyDict_New();
+        if (dict == NULL)
             return -1;
     }
-    assert(PyList_Check(list));
-    newobj = PyWeakref_NewRef((PyObject *)type, NULL);
-    if (newobj == NULL)
+    assert(PyDict_CheckExact(dict));
+    key = PyLong_FromVoidPtr((void *) type);
+    if (key == NULL)
         return -1;
-    i = PyList_GET_SIZE(list);
-    while (--i >= 0) {
-        ref = PyList_GET_ITEM(list, i);
-        assert(PyWeakref_CheckRef(ref));
-        if (PyWeakref_GET_OBJECT(ref) == Py_None)
-            return PyList_SetItem(list, i, newobj);
+    newobj = PyWeakref_NewRef((PyObject *)type, NULL);
+    if (newobj != NULL) {
+        result = PyDict_SetItem(dict, key, newobj);
+        Py_DECREF(newobj);
     }
-    result = PyList_Append(list, newobj);
-    Py_DECREF(newobj);
+    Py_DECREF(key);
     return result;
 }
 
 static void
 remove_subclass(PyTypeObject *base, PyTypeObject *type)
 {
-    Py_ssize_t i;
-    PyObject *list, *ref;
+    PyObject *dict, *key;
 
-    list = base->tp_subclasses;
-    if (list == NULL) {
+    dict = base->tp_subclasses;
+    if (dict == NULL) {
         return;
     }
-    assert(PyList_Check(list));
-    i = PyList_GET_SIZE(list);
-    while (--i >= 0) {
-        ref = PyList_GET_ITEM(list, i);
-        assert(PyWeakref_CheckRef(ref));
-        if (PyWeakref_GET_OBJECT(ref) == (PyObject*)type) {
-            /* this can't fail, right? */
-            PySequence_DelItem(list, i);
-            return;
+    assert(PyDict_CheckExact(dict));
+    key = PyLong_FromVoidPtr((void *) type);
+    if (key == NULL || PyDict_DelItem(dict, key)) {
+        /* This can happen if the type initialization errored out before
+           the base subclasses were updated (e.g. a non-str __qualname__
+           was passed in the type dict). */
+        PyErr_Clear();
+    }
+    Py_XDECREF(key);
+}
+
+static void
+remove_all_subclasses(PyTypeObject *type, PyObject *bases)
+{
+    if (bases) {
+        Py_ssize_t i;
+        for (i = 0; i < PyTuple_GET_SIZE(bases); i++) {
+            PyObject *base = PyTuple_GET_ITEM(bases, i);
+            if (PyType_Check(base))
+                remove_subclass((PyTypeObject*) base, type);
         }
     }
 }
@@ -5056,7 +5073,6 @@
 static Py_ssize_t
 slot_sq_length(PyObject *self)
 {
-    _Py_IDENTIFIER(__len__);
     PyObject *res = call_method(self, &PyId___len__, "()");
     Py_ssize_t len;
 
@@ -5117,8 +5133,6 @@
 slot_sq_ass_item(PyObject *self, Py_ssize_t index, PyObject *value)
 {
     PyObject *res;
-    _Py_IDENTIFIER(__delitem__);
-    _Py_IDENTIFIER(__setitem__);
 
     if (value == NULL)
         res = call_method(self, &PyId___delitem__, "(n)", index);
@@ -5168,8 +5182,6 @@
 slot_mp_ass_subscript(PyObject *self, PyObject *key, PyObject *value)
 {
     PyObject *res;
-    _Py_IDENTIFIER(__delitem__);
-    _Py_IDENTIFIER(__setitem__);
 
     if (value == NULL)
         res = call_method(self, &PyId___delitem__, "(O)", key);
@@ -5220,7 +5232,6 @@
     PyObject *func, *args;
     int result = -1;
     int using_len = 0;
-    _Py_IDENTIFIER(__len__);
     _Py_IDENTIFIER(__bool__);
 
     func = lookup_maybe(self, &PyId___bool__);
@@ -5324,10 +5335,10 @@
     func = lookup_method(self, &PyId___str__);
     if (func == NULL)
         return NULL;
-        res = PyEval_CallObject(func, NULL);
-        Py_DECREF(func);
-        return res;
-    }
+    res = PyEval_CallObject(func, NULL);
+    Py_DECREF(func);
+    return res;
+}
 
 static Py_hash_t
 slot_tp_hash(PyObject *self)
@@ -5622,7 +5633,6 @@
     PyObject *func;
     PyObject *newargs, *x;
     Py_ssize_t i, n;
-    _Py_IDENTIFIER(__new__);
 
     func = _PyObject_GetAttrId((PyObject *)type, &PyId___new__);
     if (func == NULL)
@@ -6173,15 +6183,14 @@
 {
     PyTypeObject *subclass;
     PyObject *ref, *subclasses, *dict;
-    Py_ssize_t i, n;
+    Py_ssize_t i;
 
     subclasses = type->tp_subclasses;
     if (subclasses == NULL)
         return 0;
-    assert(PyList_Check(subclasses));
-    n = PyList_GET_SIZE(subclasses);
-    for (i = 0; i < n; i++) {
-        ref = PyList_GET_ITEM(subclasses, i);
+    assert(PyDict_CheckExact(subclasses));
+    i = 0;
+    while (PyDict_Next(subclasses, &i, NULL, &ref)) {
         assert(PyWeakref_CheckRef(ref));
         subclass = (PyTypeObject *)PyWeakref_GET_OBJECT(ref);
         assert(subclass != NULL);
@@ -6327,8 +6336,8 @@
         /* We want __class__ to return the class of the super object
            (i.e. super, or a subclass), not the class of su->obj. */
         skip = (PyUnicode_Check(name) &&
-            PyUnicode_GET_LENGTH(name) == 9 &&
-            PyUnicode_CompareWithASCIIString(name, "__class__") == 0);
+                PyUnicode_GET_LENGTH(name) == 9 &&
+                _PyUnicode_CompareWithId(name, &PyId___class__) == 0);
     }
 
     if (!skip) {
@@ -6534,8 +6543,7 @@
         for (i = 0; i < n; i++) {
             PyObject *name = PyTuple_GET_ITEM(co->co_freevars, i);
             assert(PyUnicode_Check(name));
-            if (!PyUnicode_CompareWithASCIIString(name,
-                                                  "__class__")) {
+            if (!_PyUnicode_CompareWithId(name, &PyId___class__)) {
                 Py_ssize_t index = co->co_nlocals +
                     PyTuple_GET_SIZE(co->co_cellvars) + i;
                 PyObject *cell = f->f_localsplus[index];
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 6dc5835..224a80b 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -896,6 +896,19 @@
     if (unicode == NULL)
         return NULL;
     new_size = sizeof(Py_UNICODE) * ((size_t)length + 1);
+
+    _PyUnicode_WSTR_LENGTH(unicode) = length;
+    _PyUnicode_HASH(unicode) = -1;
+    _PyUnicode_STATE(unicode).interned = 0;
+    _PyUnicode_STATE(unicode).kind = 0;
+    _PyUnicode_STATE(unicode).compact = 0;
+    _PyUnicode_STATE(unicode).ready = 0;
+    _PyUnicode_STATE(unicode).ascii = 0;
+    _PyUnicode_DATA_ANY(unicode) = NULL;
+    _PyUnicode_LENGTH(unicode) = 0;
+    _PyUnicode_UTF8(unicode) = NULL;
+    _PyUnicode_UTF8_LENGTH(unicode) = 0;
+
     _PyUnicode_WSTR(unicode) = (Py_UNICODE*) PyObject_MALLOC(new_size);
     if (!_PyUnicode_WSTR(unicode)) {
         Py_DECREF(unicode);
@@ -912,17 +925,7 @@
      */
     _PyUnicode_WSTR(unicode)[0] = 0;
     _PyUnicode_WSTR(unicode)[length] = 0;
-    _PyUnicode_WSTR_LENGTH(unicode) = length;
-    _PyUnicode_HASH(unicode) = -1;
-    _PyUnicode_STATE(unicode).interned = 0;
-    _PyUnicode_STATE(unicode).kind = 0;
-    _PyUnicode_STATE(unicode).compact = 0;
-    _PyUnicode_STATE(unicode).ready = 0;
-    _PyUnicode_STATE(unicode).ascii = 0;
-    _PyUnicode_DATA_ANY(unicode) = NULL;
-    _PyUnicode_LENGTH(unicode) = 0;
-    _PyUnicode_UTF8(unicode) = NULL;
-    _PyUnicode_UTF8_LENGTH(unicode) = 0;
+
     assert(_PyUnicode_CheckConsistency((PyObject *)unicode, 0));
     return unicode;
 }
@@ -2980,6 +2983,9 @@
     char *l_end;
 
     if (encoding == NULL) {
+        /* 6 == strlen("utf-8") + 1 */
+        if (lower_len < 6)
+            return 0;
         strcpy(lower, "utf-8");
         return 1;
     }
@@ -3021,7 +3027,8 @@
             return PyUnicode_DecodeUTF8Stateful(s, size, errors, NULL);
         else if ((strcmp(lower, "latin-1") == 0) ||
                  (strcmp(lower, "latin1") == 0) ||
-                 (strcmp(lower, "iso-8859-1") == 0))
+                 (strcmp(lower, "iso-8859-1") == 0) ||
+                 (strcmp(lower, "iso8859-1") == 0))
             return PyUnicode_DecodeLatin1(s, size, errors);
 #ifdef HAVE_MBCS
         else if (strcmp(lower, "mbcs") == 0)
@@ -3392,7 +3399,8 @@
         }
         else if ((strcmp(lower, "latin-1") == 0) ||
                  (strcmp(lower, "latin1") == 0) ||
-                 (strcmp(lower, "iso-8859-1") == 0))
+                 (strcmp(lower, "iso-8859-1") == 0) ||
+                 (strcmp(lower, "iso8859-1") == 0))
             return _PyUnicode_AsLatin1String(unicode, errors);
 #ifdef HAVE_MBCS
         else if (strcmp(lower, "mbcs") == 0)
@@ -3766,6 +3774,7 @@
             return NULL;
         _PyUnicode_UTF8(unicode) = PyObject_MALLOC(PyBytes_GET_SIZE(bytes) + 1);
         if (_PyUnicode_UTF8(unicode) == NULL) {
+            PyErr_NoMemory();
             Py_DECREF(bytes);
             return NULL;
         }
@@ -4341,6 +4350,7 @@
                     Py_UCS4 outCh = (Py_UCS4)(base64buffer >> (base64bits-16));
                     base64bits -= 16;
                     base64buffer &= (1 << base64bits) - 1; /* clear high bits */
+                    assert(outCh <= 0xffff);
                     if (surrogate) {
                         /* expecting a second surrogate */
                         if (Py_UNICODE_IS_LOW_SURROGATE(outCh)) {
@@ -4408,6 +4418,7 @@
                 inShift = 1;
                 shiftOutStart = writer.pos;
                 base64bits = 0;
+                base64buffer = 0;
             }
         }
         else if (DECODE_DIRECT(ch)) { /* character decodes as itself */
@@ -10420,10 +10431,6 @@
     void *data1, *data2;
     Py_ssize_t len1, len2, len;
 
-    /* a string is equal to itself */
-    if (str1 == str2)
-        return 0;
-
     kind1 = PyUnicode_KIND(str1);
     kind2 = PyUnicode_KIND(str2);
     data1 = PyUnicode_DATA(str1);
@@ -10518,7 +10525,7 @@
 #undef COMPARE
 }
 
-static int
+Py_LOCAL(int)
 unicode_compare_eq(PyObject *str1, PyObject *str2)
 {
     int kind;
@@ -10526,10 +10533,6 @@
     Py_ssize_t len;
     int cmp;
 
-    /* a string is equal to itself */
-    if (str1 == str2)
-        return 1;
-
     len = PyUnicode_GET_LENGTH(str1);
     if (PyUnicode_GET_LENGTH(str2) != len)
         return 0;
@@ -10551,6 +10554,11 @@
         if (PyUnicode_READY(left) == -1 ||
             PyUnicode_READY(right) == -1)
             return -1;
+
+        /* a string is equal to itself */
+        if (left == right)
+            return 0;
+
         return unicode_compare(left, right);
     }
     PyErr_Format(PyExc_TypeError,
@@ -10561,29 +10569,59 @@
 }
 
 int
+_PyUnicode_CompareWithId(PyObject *left, _Py_Identifier *right)
+{
+    PyObject *right_str = _PyUnicode_FromId(right);   /* borrowed */
+    if (right_str == NULL)
+        return -1;
+    return PyUnicode_Compare(left, right_str);
+}
+
+int
 PyUnicode_CompareWithASCIIString(PyObject* uni, const char* str)
 {
     Py_ssize_t i;
     int kind;
-    void *data;
     Py_UCS4 chr;
 
     assert(_PyUnicode_CHECK(uni));
     if (PyUnicode_READY(uni) == -1)
         return -1;
     kind = PyUnicode_KIND(uni);
-    data = PyUnicode_DATA(uni);
-    /* Compare Unicode string and source character set string */
-    for (i = 0; (chr = PyUnicode_READ(kind, data, i)) && str[i]; i++)
-        if (chr != str[i])
-            return (chr < (unsigned char)(str[i])) ? -1 : 1;
-    /* This check keeps Python strings that end in '\0' from comparing equal
-     to C strings identical up to that point. */
-    if (PyUnicode_GET_LENGTH(uni) != i || chr)
-        return 1; /* uni is longer */
-    if (str[i])
-        return -1; /* str is longer */
-    return 0;
+    if (kind == PyUnicode_1BYTE_KIND) {
+        const void *data = PyUnicode_1BYTE_DATA(uni);
+        size_t len1 = (size_t)PyUnicode_GET_LENGTH(uni);
+        size_t len, len2 = strlen(str);
+        int cmp;
+
+        len = Py_MIN(len1, len2);
+        cmp = memcmp(data, str, len);
+        if (cmp != 0) {
+            if (cmp < 0)
+                return -1;
+            else
+                return 1;
+        }
+        if (len1 > len2)
+            return 1; /* uni is longer */
+        if (len2 > len1)
+            return -1; /* str is longer */
+        return 0;
+    }
+    else {
+        void *data = PyUnicode_DATA(uni);
+        /* Compare Unicode string and source character set string */
+        for (i = 0; (chr = PyUnicode_READ(kind, data, i)) && str[i]; i++)
+            if (chr != str[i])
+                return (chr < (unsigned char)(str[i])) ? -1 : 1;
+        /* This check keeps Python strings that end in '\0' from comparing equal
+         to C strings identical up to that point. */
+        if (PyUnicode_GET_LENGTH(uni) != i || chr)
+            return 1; /* uni is longer */
+        if (str[i])
+            return -1; /* str is longer */
+        return 0;
+    }
 }
 
 
@@ -10603,12 +10641,28 @@
         PyUnicode_READY(right) == -1)
         return NULL;
 
-    if (op == Py_EQ || op == Py_NE) {
+    if (left == right) {
+        switch (op) {
+        case Py_EQ:
+        case Py_LE:
+        case Py_GE:
+            /* a string is equal to itself */
+            v = Py_True;
+            break;
+        case Py_NE:
+        case Py_LT:
+        case Py_GT:
+            v = Py_False;
+            break;
+        default:
+            PyErr_BadArgument();
+            return NULL;
+        }
+    }
+    else if (op == Py_EQ || op == Py_NE) {
         result = unicode_compare_eq(left, right);
-        if (op == Py_EQ)
-            v = TEST_COND(result);
-        else
-            v = TEST_COND(!result);
+        result ^= (op == Py_NE);
+        v = TEST_COND(result);
     }
     else {
         result = unicode_compare(left, right);
@@ -11872,7 +11926,7 @@
 {
     PyObject *sep = NULL;
 
-    if (!PyArg_ParseTuple(args, (char *)stripformat[striptype], &sep))
+    if (!PyArg_ParseTuple(args, stripformat[striptype], &sep))
         return NULL;
 
     if (sep != NULL && sep != Py_None) {
@@ -12656,28 +12710,76 @@
     return case_operation(self, do_swapcase);
 }
 
-PyDoc_STRVAR(maketrans__doc__,
-             "str.maketrans(x[, y[, z]]) -> dict (static method)\n\
-\n\
-Return a translation table usable for str.translate().\n\
-If there is only one argument, it must be a dictionary mapping Unicode\n\
-ordinals (integers) or characters to Unicode ordinals, strings or None.\n\
-Character keys will be then converted to ordinals.\n\
-If there are two arguments, they must be strings of equal length, and\n\
-in the resulting dictionary, each character in x will be mapped to the\n\
-character at the same position in y. If there is a third argument, it\n\
-must be a string, whose characters will be mapped to None in the result.");
+/*[clinic]
+module str
 
-static PyObject*
+@staticmethod
+str.maketrans as unicode_maketrans
+
+  x: object
+
+  y: unicode=NULL
+
+  z: unicode=NULL
+
+  /
+
+Return a translation table usable for str.translate().
+
+If there is only one argument, it must be a dictionary mapping Unicode
+ordinals (integers) or characters to Unicode ordinals, strings or None.
+Character keys will be then converted to ordinals.
+If there are two arguments, they must be strings of equal length, and
+in the resulting dictionary, each character in x will be mapped to the
+character at the same position in y. If there is a third argument, it
+must be a string, whose characters will be mapped to None in the result.
+[clinic]*/
+
+PyDoc_STRVAR(unicode_maketrans__doc__,
+"Return a translation table usable for str.translate().\n"
+"\n"
+"str.maketrans(x, y=None, z=None)\n"
+"\n"
+"If there is only one argument, it must be a dictionary mapping Unicode\n"
+"ordinals (integers) or characters to Unicode ordinals, strings or None.\n"
+"Character keys will be then converted to ordinals.\n"
+"If there are two arguments, they must be strings of equal length, and\n"
+"in the resulting dictionary, each character in x will be mapped to the\n"
+"character at the same position in y. If there is a third argument, it\n"
+"must be a string, whose characters will be mapped to None in the result.");
+
+#define UNICODE_MAKETRANS_METHODDEF    \
+    {"maketrans", (PyCFunction)unicode_maketrans, METH_VARARGS|METH_STATIC, unicode_maketrans__doc__},
+
+static PyObject *
+unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z);
+
+static PyObject *
 unicode_maketrans(PyObject *null, PyObject *args)
 {
-    PyObject *x, *y = NULL, *z = NULL;
+    PyObject *return_value = NULL;
+    PyObject *x;
+    PyObject *y = NULL;
+    PyObject *z = NULL;
+
+    if (!PyArg_ParseTuple(args,
+        "O|UU:maketrans",
+        &x, &y, &z))
+        goto exit;
+    return_value = unicode_maketrans_impl(x, y, z);
+
+exit:
+    return return_value;
+}
+
+static PyObject *
+unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z)
+/*[clinic checksum: 137db9c3199e7906b7967009f511c24fa3235b5f]*/
+{
     PyObject *new = NULL, *key, *value;
     Py_ssize_t i = 0;
     int res;
 
-    if (!PyArg_ParseTuple(args, "O|UU:maketrans", &x, &y, &z))
-        return NULL;
     new = PyDict_New();
     if (!new)
         return NULL;
@@ -13317,8 +13419,7 @@
     {"format", (PyCFunction) do_string_format, METH_VARARGS | METH_KEYWORDS, format__doc__},
     {"format_map", (PyCFunction) do_string_format_map, METH_O, format_map__doc__},
     {"__format__", (PyCFunction) unicode__format__, METH_VARARGS, p_format__doc__},
-    {"maketrans", (PyCFunction) unicode_maketrans,
-     METH_VARARGS | METH_STATIC, maketrans__doc__},
+    UNICODE_MAKETRANS_METHODDEF
     {"__sizeof__", (PyCFunction) unicode__sizeof__, METH_NOARGS, sizeof__doc__},
 #if 0
     /* These methods are just used for debugging the implementation. */
diff --git a/Objects/unicodetype_db.h b/Objects/unicodetype_db.h
index 57add8f..1fdc092 100644
--- a/Objects/unicodetype_db.h
+++ b/Objects/unicodetype_db.h
@@ -1589,7 +1589,7 @@
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 
     0, 0, 0, 55, 55, 55, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 
     21, 21, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 25, 25, 25, 25, 25, 25, 25, 
-    25, 25, 25, 5, 0, 0, 5, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 
+    25, 25, 25, 5, 21, 0, 5, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 
     55, 55, 55, 96, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 25, 25, 
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 7, 8, 
@@ -1801,7 +1801,7 @@
     25, 25, 25, 25, 25, 25, 25, 25, 5, 5, 5, 96, 5, 5, 5, 5, 55, 25, 0, 0, 7, 
     8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 
     27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
-    25, 25, 25, 2, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 
+    25, 25, 25, 21, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 96, 
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 
@@ -1828,7 +1828,7 @@
     7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 132, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 
-    55, 55, 55, 55, 55, 55, 55, 25, 25, 18, 18, 18, 0, 0, 5, 5, 55, 55, 55, 
+    55, 55, 55, 55, 55, 55, 55, 25, 25, 18, 18, 25, 0, 0, 5, 5, 55, 55, 55, 
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 25, 18, 25, 
@@ -1915,7 +1915,7 @@
     5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 3, 3, 21, 21, 21, 21, 21, 2, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 18, 18, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 18, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 21, 
-    21, 21, 21, 21, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 245, 95, 0, 0, 
+    21, 21, 21, 21, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 245, 95, 0, 0, 
     246, 247, 248, 249, 250, 251, 5, 5, 5, 5, 5, 95, 245, 26, 22, 23, 246, 
     247, 248, 249, 250, 251, 5, 5, 5, 5, 5, 0, 95, 95, 95, 95, 95, 95, 95, 
     95, 95, 95, 95, 95, 95, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
@@ -2925,9 +2925,6 @@
 double _PyUnicode_ToNumeric(Py_UCS4 ch)
 {
     switch (ch) {
-    case 0x12456:
-    case 0x12457:
-        return (double) -1.0;
     case 0x0F33:
         return (double) -1.0/2.0;
     case 0x0030:
@@ -3383,6 +3380,7 @@
     case 0x12435:
     case 0x1244A:
     case 0x12450:
+    case 0x12456:
     case 0x12459:
     case 0x1D361:
     case 0x1D7D0:
@@ -3539,6 +3537,7 @@
     case 0x1243B:
     case 0x1244B:
     case 0x12451:
+    case 0x12457:
     case 0x1D362:
     case 0x1D7D1:
     case 0x1D7DB:
@@ -4294,7 +4293,6 @@
     case 0x0085:
     case 0x00A0:
     case 0x1680:
-    case 0x180E:
     case 0x2000:
     case 0x2001:
     case 0x2002:
diff --git a/PC/VS9.0/pythoncore.vcproj b/PC/VS9.0/pythoncore.vcproj
index 6524c92..cf60470 100644
--- a/PC/VS9.0/pythoncore.vcproj
+++ b/PC/VS9.0/pythoncore.vcproj
@@ -1155,6 +1155,18 @@
 				>

 			</File>

 			<File

+				RelativePath="..\..\Modules\sre.h"

+				>

+			</File>

+			<File

+				RelativePath="..\..\Modules\sre_constants.h"

+				>

+			</File>

+			<File

+				RelativePath="..\..\Modules\sre_lib.h"

+				>

+			</File>

+			<File

 				RelativePath="..\..\Modules\_stat.c"

 				>

 			</File>

@@ -1246,74 +1258,6 @@
 					>

 				</File>

 				<File

-					RelativePath="..\..\Modules\zlib\gzio.c"

-					>

-					<FileConfiguration

-						Name="Release|Win32"

-						>

-						<Tool

-							Name="VCCLCompilerTool"

-							PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"

-						/>

-					</FileConfiguration>

-					<FileConfiguration

-						Name="Release|Win64"

-						>

-						<Tool

-							Name="VCCLCompilerTool"

-							PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"

-						/>

-					</FileConfiguration>

-					<FileConfiguration

-						Name="Debug|Win32"

-						>

-						<Tool

-							Name="VCCLCompilerTool"

-							PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"

-						/>

-					</FileConfiguration>

-					<FileConfiguration

-						Name="Debug|Win64"

-						>

-						<Tool

-							Name="VCCLCompilerTool"

-							PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"

-						/>

-					</FileConfiguration>

-					<FileConfiguration

-						Name="PGInstrument|Win32"

-						>

-						<Tool

-							Name="VCCLCompilerTool"

-							PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"

-						/>

-					</FileConfiguration>

-					<FileConfiguration

-						Name="PGInstrument|Win64"

-						>

-						<Tool

-							Name="VCCLCompilerTool"

-							PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"

-						/>

-					</FileConfiguration>

-					<FileConfiguration

-						Name="PGUpdate|Win32"

-						>

-						<Tool

-							Name="VCCLCompilerTool"

-							PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"

-						/>

-					</FileConfiguration>

-					<FileConfiguration

-						Name="PGUpdate|Win64"

-						>

-						<Tool

-							Name="VCCLCompilerTool"

-							PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE"

-						/>

-					</FileConfiguration>

-				</File>

-				<File

 					RelativePath="..\..\Modules\zlib\infback.c"

 					>

 				</File>

diff --git a/PC/VS9.0/x64.vsprops b/PC/VS9.0/x64.vsprops
index 9f88d44..d06f470 100644
--- a/PC/VS9.0/x64.vsprops
+++ b/PC/VS9.0/x64.vsprops
@@ -8,7 +8,7 @@
 	>

 	<Tool

 		Name="VCCLCompilerTool"

-		AdditionalOptions="/USECL:MS_OPTERON /GS-"

+		AdditionalOptions="/GS-"

 		PreprocessorDefinitions="_WIN64;_M_X64"

 	/>

 	<Tool

diff --git a/PCbuild/_overlapped.vcxproj b/PCbuild/_overlapped.vcxproj
new file mode 100644
index 0000000..d0ee72f
--- /dev/null
+++ b/PCbuild/_overlapped.vcxproj
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|Win32">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|x64">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|Win32">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|x64">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}</ProjectGuid>
+    <RootNamespace>_overlapped</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyd.props" />
+    <Import Project="pgupdate.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyd.props" />
+    <Import Project="pginstrument.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyd.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyd_d.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyd.props" />
+    <Import Project="x64.props" />
+    <Import Project="pgupdate.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyd.props" />
+    <Import Project="x64.props" />
+    <Import Project="pginstrument.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyd.props" />
+    <Import Project="x64.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyd_d.props" />
+    <Import Project="x64.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Link>
+      <AdditionalDependencies>ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libc;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <BaseAddress>0x1D110000</BaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <Link>
+      <AdditionalDependencies>ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libc;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <BaseAddress>0x1D110000</BaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Link>
+      <AdditionalDependencies>ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libc;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <BaseAddress>0x1D110000</BaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <Link>
+      <AdditionalDependencies>ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libc;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <BaseAddress>0x1D110000</BaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'">
+    <Link>
+      <AdditionalDependencies>ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libc;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <BaseAddress>0x1D110000</BaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <Link>
+      <AdditionalDependencies>ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libc;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <BaseAddress>0x1D110000</BaseAddress>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'">
+    <Link>
+      <AdditionalDependencies>ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libc;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <BaseAddress>0x1D110000</BaseAddress>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <Link>
+      <AdditionalDependencies>ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libc;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <BaseAddress>0x1D110000</BaseAddress>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Modules\overlapped.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="pythoncore.vcxproj">
+      <Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/_testembed.vcxproj b/PCbuild/_testembed.vcxproj
new file mode 100644
index 0000000..83c7ad2
--- /dev/null
+++ b/PCbuild/_testembed.vcxproj
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{6DAC66D9-E703-4624-BE03-49112AB5AA62}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>_testembed</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyproject.props" />
+    <Import Project="debug.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyproject.props" />
+    <Import Project="debug.props" />
+    <Import Project="x64.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyproject.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyproject.props" />
+    <Import Project="x64.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Modules\_testembed.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="pythoncore.vcxproj">
+      <Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
+      <Private>true</Private>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+      <LinkLibraryDependencies>true</LinkLibraryDependencies>
+      <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/_testembed.vcxproj.filters b/PCbuild/_testembed.vcxproj.filters
new file mode 100644
index 0000000..dea54d4
--- /dev/null
+++ b/PCbuild/_testembed.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Modules\_testembed.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/pcbuild.sln b/PCbuild/pcbuild.sln
index 99398db..e431c91 100644
--- a/PCbuild/pcbuild.sln
+++ b/PCbuild/pcbuild.sln
@@ -76,6 +76,10 @@
 EndProject

 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sha3", "_sha3.vcxproj", "{254A0C05-6696-4B08-8CB2-EF7D533AEE01}"

 EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_overlapped", "_overlapped.vcxproj", "{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}"

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testembed", "_testembed.vcxproj", "{6DAC66D9-E703-4624-BE03-49112AB5AA62}"

+EndProject

 Global

 	GlobalSection(SolutionConfigurationPlatforms) = preSolution

 		Debug|Win32 = Debug|Win32

@@ -152,22 +156,6 @@
 		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.Build.0 = Release|Win32

 		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.ActiveCfg = Release|x64

 		{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.Build.0 = Release|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.ActiveCfg = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.Build.0 = Debug|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.ActiveCfg = Debug|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.Build.0 = Debug|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGInstrument|x64.Build.0 = PGInstrument|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGUpdate|x64.Build.0 = PGUpdate|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.ActiveCfg = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.Build.0 = Release|Win32

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.ActiveCfg = Release|x64

-		{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.Build.0 = Release|x64

 		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.ActiveCfg = Release|Win32

 		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.Build.0 = Release|Win32

 		{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.ActiveCfg = Release|Win32

@@ -645,6 +633,38 @@
 		{254A0C05-6696-4B08-8CB2-EF7D533AEE01}.Release|Win32.Build.0 = Release|Win32

 		{254A0C05-6696-4B08-8CB2-EF7D533AEE01}.Release|x64.ActiveCfg = Release|x64

 		{254A0C05-6696-4B08-8CB2-EF7D533AEE01}.Release|x64.Build.0 = Release|x64

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.Debug|Win32.ActiveCfg = Debug|Win32

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.Debug|Win32.Build.0 = Debug|Win32

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.Debug|x64.ActiveCfg = Debug|x64

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.Debug|x64.Build.0 = Debug|x64

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.PGInstrument|x64.Build.0 = PGInstrument|x64

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.PGUpdate|x64.Build.0 = PGUpdate|x64

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.Release|Win32.ActiveCfg = Release|Win32

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.Release|Win32.Build.0 = Release|Win32

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.Release|x64.ActiveCfg = Release|x64

+		{6DAC66D9-E703-4624-BE03-49112AB5AA62}.Release|x64.Build.0 = Release|x64

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.Debug|Win32.ActiveCfg = Debug|Win32

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.Debug|Win32.Build.0 = Debug|Win32

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.Debug|x64.ActiveCfg = Debug|x64

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.Debug|x64.Build.0 = Debug|x64

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.PGInstrument|Win32.Build.0 = PGInstrument|Win32

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.PGInstrument|x64.ActiveCfg = PGInstrument|x64

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.PGInstrument|x64.Build.0 = PGInstrument|x64

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.PGUpdate|Win32.Build.0 = PGUpdate|Win32

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.PGUpdate|x64.ActiveCfg = PGUpdate|x64

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.PGUpdate|x64.Build.0 = PGUpdate|x64

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.Release|Win32.ActiveCfg = Release|Win32

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.Release|Win32.Build.0 = Release|Win32

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.Release|x64.ActiveCfg = Release|x64

+		{EB6E69DD-04BF-4543-9B92-49FAABCEAC2E}.Release|x64.Build.0 = Release|x64

 	EndGlobalSection

 	GlobalSection(SolutionProperties) = preSolution

 		HideSolutionNode = FALSE

diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index 4882045..1b6e864 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -449,6 +449,9 @@
     <ClInclude Include="..\Include\weakrefobject.h" />
     <ClInclude Include="..\Modules\_math.h" />
     <ClInclude Include="..\Modules\rotatingtree.h" />
+    <ClInclude Include="..\Modules\sre.h" />
+    <ClInclude Include="..\Modules\sre_constants.h" />
+    <ClInclude Include="..\Modules\sre_lib.h" />
     <ClInclude Include="..\Modules\_io\_iomodule.h" />
     <ClInclude Include="..\Modules\zlib\crc32.h" />
     <ClInclude Include="..\Modules\zlib\deflate.h" />
diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters
index d762f06..e1a9301 100644
--- a/PCbuild/pythoncore.vcxproj.filters
+++ b/PCbuild/pythoncore.vcxproj.filters
@@ -300,6 +300,15 @@
     <ClInclude Include="..\Modules\rotatingtree.h">
       <Filter>Modules</Filter>
     </ClInclude>
+    <ClInclude Include="..\Modules\sre.h">
+      <Filter>Modules</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Modules\sre_constants.h">
+      <Filter>Modules</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Modules\sre_lib.h">
+      <Filter>Modules</Filter>
+    </ClInclude>
     <ClInclude Include="..\Modules\_io\_iomodule.h">
       <Filter>Modules\_io</Filter>
     </ClInclude>
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index 5e97ef1..3012971 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -1,320 +1,323 @@
-Building Python using VC++ 10.0
--------------------------------
+Building Python using Microsoft Visual C++
+------------------------------------------
 
-This directory is used to build Python for Win32 and x64 platforms, e.g. 
-Windows 2000, XP, Vista and Windows Server 2008.  In order to build 32-bit
-debug and release executables, Microsoft Visual C++ 2010 Express Edition is
-required at the very least.  In order to build 64-bit debug and release
-executables, Visual Studio 2010 Standard Edition is required at the very
-least.  In order to build all of the above, as well as generate release builds
-that make use of Profile Guided Optimisation (PG0), Visual Studio 2010
-Professional Edition is required at the very least.  The official Python
-releases are built with this version of Visual Studio.
+This directory is used to build CPython for Microsoft Windows NT version
+5.1 or higher (Windows XP, Windows Server 2003, or later) on 32 and 64
+bit platforms.  Using this directory requires an installation of
+Microsoft Visual C++ 2010 (MSVC 10.0) of any edition.  The specific
+requirements are as follows:
+Visual C++ 2010 Express Edition
+    Required for building 32-bit Debug and Release configuration builds.
+    This edition does not support "solution folders", which pcbuild.sln
+    uses; this will not prevent building.
+Visual Studio 2010 Standard Edition
+    Required for building 64-bit Debug and Release configuration builds
+Visual Studio 2010 Professional Edition
+    Required for building Release configuration builds that make use of
+    Profile Guided Optimization (PGO), on either platform.  The official
+    Python releases are built with Professional Edition using PGO.
 
-For other Windows platforms and compilers, see ../PC/readme.txt.
+All you need to do to build is open the solution "pcbuild.sln" in Visual
+Studio, select the desired combination of configuration and platform,
+then build with "Build Solution" or the F7 keyboard shortcut.  You can
+also build from the command line using the "build.bat" script in this
+directory.  The solution is configured to build the projects in the
+correct order.
 
-All you need to do is open the workspace "pcbuild.sln" in Visual Studio,
-select the desired combination of configuration and platform and eventually
-build the solution. Unless you are going to debug a problem in the core or
-you are going to create an optimized build you want to select "Release" as
-configuration.
+The solution currently supports two platforms.  The Win32 platform is
+used to build standard x86-compatible 32-bit binaries, output into this
+directory.  The x64 platform is used for building 64-bit AMD64 (aka
+x86_64 or EM64T) binaries, output into the amd64 sub-directory which
+will be created if it doesn't already exist.  The Itanium (IA-64)
+platform is no longer supported.  See the "Building for AMD64" section
+below for more information about 64-bit builds.
 
-The PCbuild directory is compatible with all versions of Visual Studio from
-VS C++ Express Edition over the standard edition up to the professional
-edition. However the express edition does not support features like solution
-folders or profile guided optimization (PGO). The missing bits and pieces
-won't stop you from building Python.
+Four configuration options are supported by the solution:
+Debug
+    Used to build Python with extra debugging capabilities, equivalent
+    to using ./configure --with-pydebug on UNIX.  All binaries built
+    using this configuration have "_d" added to their name:
+    python34_d.dll, python_d.exe, parser_d.pyd, and so on.  Both the
+    build and rt (run test) batch files in this directory accept a -d
+    option for debug builds.  If you are building Python to help with
+    development of CPython, you will most likely use this configuration.
+PGInstrument, PGUpdate
+    Used to build Python in Release configuration using PGO, which
+    requires Professional Edition of Visual Studio.  See the "Profile
+    Guided Optimization" section below for more information.  Build
+    output from each of these configurations lands in its own
+    sub-directory of this directory.  The official Python releases are
+    built using these configurations.
+Release
+    Used to build Python as it is meant to be used in production
+    settings, though without PGO.
 
-The solution is configured to build the projects in the correct order. "Build
-Solution" or F7 takes care of dependencies except for x64 builds. To make
-cross compiling x64 builds on a 32bit OS possible the x64 builds require a 
-32bit version of Python.
-
-NOTE:
-   You probably don't want to build most of the other subprojects, unless
-   you're building an entire Python distribution from scratch, or
-   specifically making changes to the subsystems they implement, or are
-   running a Python core buildbot test slave; see SUBPROJECTS below)
-
-When using the Debug setting, the output files have a _d added to
-their name:  python34_d.dll, python_d.exe, parser_d.pyd, and so on. Both
-the build and rt batch files accept a -d option for debug builds.
-
-The 32bit builds end up in the solution folder PCbuild while the x64 builds
-land in the amd64 subfolder. The PGI and PGO builds for profile guided
-optimization end up in their own folders, too.
 
 Legacy support
 --------------
 
-You can find build directories for older versions of Visual Studio and 
-Visual C++ in the PC directory. The legacy build directories are no longer
-actively maintained and may not work out of the box.
+You can find build directories for older versions of Visual Studio and
+Visual C++ in the PC directory. The legacy build directories are no
+longer actively maintained and may not work out of the box.
 
-PC/VC6/
-    Visual C++ 6.0
-PC/VS7.1/
-    Visual Studio 2003 (7.1)
-PC/VS8.0/
-    Visual Studio 2005 (8.0)
-PC/VS9.0/
-    Visual Studio 2008 (9.0)
+Currently, the only legacy build directory is PC\VS9.0, for Visual
+Studio 2008 (9.0).
 
 
-C RUNTIME
+C Runtime
 ---------
 
-Visual Studio 2010 uses version 10 of the C runtime (MSVCRT9).  The executables
-no longer use the "Side by Side" assemblies used in previous versions of the
-compiler.  This simplifies distribution of applications.
-The run time libraries are avalible under the VC/Redist folder of your visual studio
-distribution. For more info, see the Readme in the VC/Redist folder.
+Visual Studio 2010 uses version 10 of the C runtime (MSVCRT10).  The
+executables no longer use the "Side by Side" assemblies used in previous
+versions of the compiler.  This simplifies distribution of applications.
 
-SUBPROJECTS
------------
-These subprojects should build out of the box.  Subprojects other than the
-main ones (pythoncore, python, pythonw) generally build a DLL (renamed to
-.pyd) from a specific module so that users don't have to load the code
-supporting that module unless they import the module.
+The run time libraries are available under the VC/Redist folder of your
+Visual Studio distribution. For more info, see the Readme in the
+VC/Redist folder.
 
+
+Sub-Projects
+------------
+
+The CPython project is split up into several smaller sub-projects which
+are managed by the pcbuild.sln solution file.  Each sub-project is
+represented by a .vcxproj and a .vcxproj.filters file starting with the
+name of the sub-project.  These sub-projects fall into a few general
+categories:
+
+The following sub-projects represent the bare minimum required to build
+a functioning CPython interpreter.  If nothing else builds but these,
+you'll have a very limited but usable python.exe:
 pythoncore
     .dll and .lib
 python
     .exe
+kill_python
+    kill_python.exe, a small program designed to kill any instances of
+    python(_d).exe that are running and live in the build output
+    directory; this is meant to avoid build issues due to locked files
+make_buildinfo, make_versioninfo
+    helpers to provide necessary information to the build process
+
+These sub-projects provide extra executables that are useful for running
+CPython in different ways:
 pythonw
-    pythonw.exe, a variant of python.exe that doesn't pop up a DOS box
+    pythonw.exe, a variant of python.exe that doesn't open a Command
+    Prompt window
+pylauncher
+    py.exe, the Python Launcher for Windows, see
+        http://docs.python.org/3/using/windows.html#launcher
+pywlauncher
+    pyw.exe, a variant of py.exe that doesn't open a Command Prompt
+    window
+_testembed
+    _testembed.exe, a small program that embeds Python for testing
+    purposes, used by test_capi.py
+
+These are miscellaneous sub-projects that don't really fit the other
+categories.  By default, these projects do not build in Debug
+configuration:
+_freeze_importlib
+    _freeze_importlib.exe, used to regenerate Python\importlib.h after
+    changes have been made to Lib\importlib\_bootstrap.py
+bdist_wininst
+    ..\Lib\distutils\command\wininst-10.0[-amd64].exe, the base
+    executable used by the distutils bdist_wininst command
+python3dll
+    python3.dll, the PEP 384 Stable ABI dll
+xxlimited
+    builds an example module that makes use of the PEP 384 Stable ABI,
+    see Modules\xxlimited.c
+
+The following sub-projects are for individual modules of the standard
+library which are implemented in C; each one builds a DLL (renamed to
+.pyd) of the same name as the project:
+_ctypes
+_ctypes_test
+_decimal
+_elementtree
+_hashlib
+_msi
+_multiprocessing
+_overlapped
+_sha3
 _socket
-    socketmodule.c
 _testcapi
-    tests of the Python C API, run via Lib/test/test_capi.py, and
-    implemented by module Modules/_testcapimodule.c
 _testbuffer
-    buffer protocol tests, run via Lib/test/test_buffer.py, and
-    implemented by module Modules/_testbuffer.c
+_testimportmultiple
 pyexpat
-    Python wrapper for accelerated XML parsing, which incorporates stable
-    code from the Expat project:  http://sourceforge.net/projects/expat/
 select
-    selectmodule.c
 unicodedata
-    large tables of Unicode data
 winsound
-    play sounds (typically .wav files) under Windows
 
-Python-controlled subprojects that wrap external projects:
-_sqlite3
-    Wraps SQLite 3.7.4, which is currently built by sqlite3.vcproj (see below).
-_tkinter
-    Wraps the Tk windowing system.  Unlike _sqlite3, there's no
-    corresponding tcltk.vcproj-type project that builds Tcl/Tk from vcproj's
-    within our pcbuild.sln, which means this module expects to find a
-    pre-built Tcl/Tk in either ..\..\tcltk for 32-bit or ..\..\tcltk64 for
-    64-bit (relative to this directory).  See below for instructions to build
-    Tcl/Tk. 
+The following Python-controlled sub-projects wrap external projects.
+Note that these external libraries are not necessary for a working
+interpreter, but they do implement several major features.  See the
+"Getting External Sources" section below for additional information
+about getting the source for building these libraries.  The sub-projects
+are:
 _bz2
-    Python wrapper for the libbzip2 compression library.  Homepage
+    Python wrapper for version 1.0.6 of the libbzip2 compression library
+    Homepage:
         http://www.bzip.org/
-    Download the source from the python.org copy into the dist
-    directory:
-
-    svn export http://svn.python.org/projects/external/bzip2-1.0.6
-
-    ** NOTE: if you use the Tools\buildbot\external(-amd64).bat approach for
-    obtaining external sources then you don't need to manually get the source
-    above via subversion. **
-
-    A custom pre-link step in the bz2 project settings should manage to
-    build bzip2-1.0.6\libbz2.lib by magic before bz2.pyd (or bz2_d.pyd) is
-    linked in PCbuild\.
-    However, the bz2 project is not smart enough to remove anything under
-    bzip2-1.0.6\ when you do a clean, so if you want to rebuild bzip2.lib
-    you need to clean up bzip2-1.0.6\ by hand.
-
-    All of this managed to build libbz2.lib in 
-    bzip2-1.0.6\$platform-$configuration\, which the Python project links in.
 _lzma
-    Python wrapper for the liblzma compression library.
-
-    Download the pre-built Windows binaries from http://tukaani.org/xz/, and
-    extract to ..\xz-5.0.3. If you are using a more recent version of liblzma,
-    it will be necessary to rename the directory from xz-<VERSION> to xz-5.0.3.
-
+    Python wrapper for the liblzma compression library, using pre-built
+    binaries of XZ Utils version 5.0.3
+    Homepage:
+        http://tukaani.org/xz/
 _ssl
-    Python wrapper for the secure sockets library.
+    Python wrapper for version 1.0.1e of the OpenSSL secure sockets
+    library, which is built by ssl.vcxproj
+    Homepage:
+        http://www.openssl.org/
 
-    Get the source code through
+    Building OpenSSL requires nasm.exe (the Netwide Assembler), version
+    2.10 or newer from
+        http://www.nasm.us/
+    to be somewhere on your PATH.  More recent versions of OpenSSL may
+    need a later version of NASM. If OpenSSL's self tests don't pass,
+    you should first try to update NASM and do a full rebuild of
+    OpenSSL.
 
-    svn export http://svn.python.org/projects/external/openssl-1.0.1e
-
-    ** NOTE: if you use the Tools\buildbot\external(-amd64).bat approach for
-    obtaining external sources then you don't need to manually get the source
-    above via subversion. **
-
-    Alternatively, get the latest version from http://www.openssl.org.
-    You can (theoretically) use any version of OpenSSL you like - the
-    build process will automatically select the latest version.
-
-    You must install the NASM assembler 2.10 or newer from
-        http://nasm.sf.net
-    for x86 builds.  Put nasmw.exe anywhere in your PATH. More recent
-    versions of OpenSSL may need a later version of NASM. If OpenSSL's self
-    tests don't pass, you should first try to update NASM and do a full
-    rebuild of OpenSSL.
-    Note: recent releases of nasm only have nasm.exe. Just rename it to 
-    nasmw.exe.
-
-    You can also install ActivePerl from
+    If you like to use the official sources instead of the files from
+    python.org's subversion repository, Perl is required to build the
+    necessary makefiles and assembly files.  ActivePerl is available
+    from
         http://www.activestate.com/activeperl/
-    if you like to use the official sources instead of the files from 
-    python's subversion repository. The svn version contains pre-build
-    makefiles and assembly files.
+    The svn.python.org version contains pre-built makefiles and assembly
+    files.
 
-    The build process makes sure that no patented algorithms are included.
-    For now RC5, MDC2 and IDEA are excluded from the build. You may have 
-    to manually remove $(OBJ_D)\i_*.obj from ms\nt.mak if the build process
-    complains about missing files or forbidden IDEA. Again the files provided
-    in the subversion repository are already fixed.
+    The build process makes sure that no patented algorithms are
+    included.  For now RC5, MDC2 and IDEA are excluded from the build.
+    You may have to manually remove $(OBJ_D)\i_*.obj from ms\nt.mak if
+    using official sources; the svn.python.org-hosted version is already
+    fixed.
 
-    The MSVC project simply invokes PCBuild/build_ssl.py to perform
-    the build.  This Python script locates and builds your OpenSSL
-    installation, then invokes a simple makefile to build the final .pyd.
+    The ssl.vcxproj sub-project simply invokes PCbuild/build_ssl.py,
+    which locates and builds OpenSSL.
 
     build_ssl.py attempts to catch the most common errors (such as not
     being able to find OpenSSL sources, or not being able to find a Perl
-    that works with OpenSSL) and give a reasonable error message.
-    If you have a problem that doesn't seem to be handled correctly
-    (eg, you know you have ActivePerl but we can't find it), please take
-    a peek at build_ssl.py and suggest patches.  Note that build_ssl.py
+    that works with OpenSSL) and give a reasonable error message.  If
+    you have a problem that doesn't seem to be handled correctly (e.g.,
+    you know you have ActivePerl but we can't find it), please take a
+    peek at build_ssl.py and suggest patches.  Note that build_ssl.py
     should be able to be run directly from the command-line.
 
-    build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do
-    this by hand.
+    The ssl sub-project does not have the ability to clean the OpenSSL
+    build; if you need to rebuild, you'll have to clean it by hand.
+_sqlite3
+    Wraps SQLite 3.7.12, which is itself built by sqlite3.vcxproj
+    Homepage:
+        http://www.sqlite.org/
+_tkinter
+    Wraps version 8.5.11 of the Tk windowing system.
+    Homepage:
+        http://www.tcl.tk/
 
-The subprojects above wrap external projects Python doesn't control, and as
-such, a little more work is required in order to download the relevant source 
-files for each project before they can be built.  The buildbots do this each
-time they're built, so the easiest approach is to run either external.bat or 
-external-amd64.bat in the ..\Tools\buildbot directory from ..\, i.e.:
+    Unlike the other external libraries listed above, Tk must be built
+    separately before the _tkinter module can be built. This means that
+    a pre-built Tcl/Tk installation is expected in ..\..\tcltk (tcltk64
+    for 64-bit) relative to this directory.  See "Getting External
+    Sources" below for the easiest method to ensure Tcl/Tk is built.
 
-    C:\..\svn.python.org\projects\python\trunk\PCbuild>cd ..
-    C:\..\svn.python.org\projects\python\trunk>Tools\buildbot\external.bat
 
-This extracts all the external subprojects from http://svn.python.org/external
-via Subversion (so you'll need an svn.exe on your PATH) and places them in 
-..\.. (relative to this directory).  The external(-amd64).bat scripts will
-also build a debug build of Tcl/Tk; there aren't any equivalent batch files
-for building release versions of Tcl/Tk lying around in the Tools\buildbot
-directory.  If you need to build a release version of Tcl/Tk it isn't hard
-though, take a look at the relevant external(-amd64).bat file and find the
-two nmake lines, then call each one without the 'DEBUG=1' parameter, i.e.:
+Getting External Sources
+------------------------
+
+The last category of sub-projects listed above wrap external projects
+Python doesn't control, and as such a little more work is required in
+order to download the relevant source files for each project before they
+can be built.  The buildbots must ensure that all libraries are present
+before building, so the easiest approach is to run either external.bat
+or external-amd64.bat (depending on platform) in the ..\Tools\buildbot
+directory from ..\, i.e.:
+
+    C:\python\cpython\PCbuild>cd ..
+    C:\python\cpython>Tools\buildbot\external.bat
+
+This extracts all the external sub-projects from
+    http://svn.python.org/projects/external
+via Subversion (so you'll need an svn.exe on your PATH) and places them
+in ..\.. (relative to this directory).
+
+It is also possible to download sources from each project's homepage,
+though you may have to change the names of some folders in order to make
+things work.  For instance, if you were to download a version 5.0.5 of
+XZ Utils, you would need to extract the archive into ..\..\xz-5.0.3
+anyway, since that is where the solution is set to look for xz.  The
+same is true for all other external projects.
+
+The external(-amd64).bat scripts will also build a debug build of
+Tcl/Tk, but there aren't any equivalent batch files for building release
+versions of Tcl/Tk currently available.  If you need to build a release
+version of Tcl/Tk, just take a look at the relevant external(-amd64).bat
+file and find the two nmake lines, then call each one without the
+'DEBUG=1' parameter, i.e.:
 
 The external-amd64.bat file contains this for tcl:
-    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
+    nmake -f makefile.vc DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
 
 So for a release build, you'd call it as:
-    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
+    nmake -f makefile.vc MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
 
-    XXX Should we compile with OPTS=threads?
-    XXX Our installer copies a lot of stuff out of the Tcl/Tk install
-    XXX directory.  Is all of that really needed for Python use of Tcl/Tk?
+Note that the above command is called from within ..\..\tcl-8.5.11.0\win
+(relative to this directory); don't forget to build Tk as well as Tcl!
 
-This will be cleaned up in the future; ideally Tcl/Tk will be brought into our
-pcbuild.sln as custom .vcproj files, just as we've recently done with the
-sqlite3.vcproj file, which will remove the need for Tcl/Tk to be built
-separately via a batch file.
+This will be cleaned up in the future; http://bugs.python.org/issue15968
+tracks adding a new tcltk.vcxproj file that will build Tcl/Tk and Tix
+the same way the other external projects listed above are built.
 
-XXX trent.nelson 02-Apr-08:
-    Having the external subprojects in ..\.. relative to this directory is a
-    bit of a nuisance when you're working on py3k and trunk in parallel and
-    your directory layout mimics that of Python's subversion layout, e.g.:
-
-        C:\..\svn.python.org\projects\python\trunk
-        C:\..\svn.python.org\projects\python\branches\py3k
-        C:\..\svn.python.org\projects\python\branches\release25-maint
-
-    I'd like to change things so that external subprojects are fetched from
-    ..\external instead of ..\.., then provide some helper scripts or batch
-    files that would set up a new ..\external directory with svn checkouts of
-    the relevant branches in http://svn.python.org/projects/external/, or
-    alternatively, use junctions to link ..\external with a pre-existing
-    externals directory being used by another branch.  i.e. if I'm usually
-    working on trunk (and have previously created trunk\external via the
-    provided batch file), and want to do some work on py3k, I'd set up a
-    junction as follows (using the directory structure above as an example):
-
-        C:\..\python\trunk\external <- already exists and has built versions
-                                       of the external subprojects 
-
-        C:\..\python\branches\py3k>linkd.exe external ..\..\trunk\external
-        Link created at: external
-
-    Only a slight tweak would be needed to the buildbots such that bots
-    building trunk and py3k could make use of the same facility.  (2.5.x
-    builds need to be kept separate as they're using Visual Studio 7.1.)
-/XXX trent.nelson 02-Apr-08
-
-Building for Itanium
---------------------
-
-NOTE:
-Official support for Itanium builds have been dropped from the build. Please
-contact us and provide patches if you are interested in Itanium builds.
-
-The project files support a ReleaseItanium configuration which creates
-Win64/Itanium binaries. For this to work, you need to install the Platform
-SDK, in particular the 64-bit support. This includes an Itanium compiler
-(future releases of the SDK likely include an AMD64 compiler as well).
-In addition, you need the Visual Studio plugin for external C compilers,
-from http://sf.net/projects/vsextcomp. The plugin will wrap cl.exe, to
-locate the proper target compiler, and convert compiler options
-accordingly. The project files require at least version 0.9.
 
 Building for AMD64
 ------------------
 
-The build process for AMD64 / x64 is very similar to standard builds. You just
-have to set x64 as platform. In addition, the HOST_PYTHON environment variable
-must point to a Python interpreter (at least 2.4), to support cross-compilation.
+The build process for AMD64 / x64 is very similar to standard builds,
+you just have to set x64 as platform. In addition, the HOST_PYTHON
+environment variable must point to a Python interpreter (at least 2.4),
+to support cross-compilation from Win32.  Note that Visual Studio
+requires either Standard Edition or better, or Express Edition with the
+Windows SDK 64-bit compilers to be available in order to build 64-bit
+binaries.
 
-Building Python Using the free MS Toolkit Compiler
---------------------------------------------------
-
-Microsoft has withdrawn the free MS Toolkit Compiler, so this can no longer
-be considered a supported option. Instead you can use the free VS C++ Express
-Edition.
 
 Profile Guided Optimization
 ---------------------------
 
 The solution has two configurations for PGO. The PGInstrument
-configuration must be build first. The PGInstrument binaries are
-lniked against a profiling library and contain extra debug
-information. The PGUpdate configuration takes the profiling data and
-generates optimized binaries.
+configuration must be built first. The PGInstrument binaries are linked
+against a profiling library and contain extra debug information. The
+PGUpdate configuration takes the profiling data and generates optimized
+binaries.
 
-The build_pgo.bat script automates the creation of optimized binaries. It
-creates the PGI files, runs the unit test suite or PyBench with the PGI
-python and finally creates the optimized files.
+The build_pgo.bat script automates the creation of optimized binaries.
+It creates the PGI files, runs the unit test suite or PyBench with the
+PGI python, and finally creates the optimized files.
 
-http://msdn2.microsoft.com/en-us/library/e7k32f4k(VS.90).aspx
+See
+    http://msdn.microsoft.com/en-us/library/e7k32f4k(VS.100).aspx
+for more on this topic.
+
 
 Static library
 --------------
 
-The solution has no configuration for static libraries. However it is easy
-it build a static library instead of a DLL. You simply have to set the 
-"Configuration Type" to "Static Library (.lib)" and alter the preprocessor
-macro "Py_ENABLE_SHARED" to "Py_NO_ENABLE_SHARED". You may also have to
-change the "Runtime Library" from "Multi-threaded DLL (/MD)" to 
-"Multi-threaded (/MT)".
+The solution has no configuration for static libraries. However it is
+easy to build a static library instead of a DLL. You simply have to set
+the "Configuration Type" to "Static Library (.lib)" and alter the
+preprocessor macro "Py_ENABLE_SHARED" to "Py_NO_ENABLE_SHARED". You may
+also have to change the "Runtime Library" from "Multi-threaded DLL
+(/MD)" to "Multi-threaded (/MT)".
+
 
 Visual Studio properties
 ------------------------
 
-The PCbuild solution makes heavy use of Visual Studio property files 
-(*.vsprops). The properties can be viewed and altered in the Property
+The PCbuild solution makes heavy use of Visual Studio property files
+(*.props). The properties can be viewed and altered in the Property
 Manager (View -> Other Windows -> Property Manager).
 
+The property files used are (+-- = "also imports"):
  * debug (debug macro: _DEBUG)
  * pginstrument (PGO)
  * pgupdate (PGO)
@@ -327,15 +330,18 @@
     +-- pyproject
  * pyproject (base settings for all projects, user macros like PyDllName)
  * release (release macro: NDEBUG)
+ * sqlite3 (used only by sqlite3.vcxproj)
  * x64 (AMD64 / x64 platform specific settings)
 
-The pyproject propertyfile defines _WIN32 and x64 defines _WIN64 and _M_X64
-although the macros are set by the compiler, too. The GUI doesn't always know
-about the macros and confuse the user with false information.
+The pyproject property file defines _WIN32 and x64 defines _WIN64 and
+_M_X64 although the macros are set by the compiler, too. The GUI doesn't
+always know about the macros and confuse the user with false
+information.
 
-YOUR OWN EXTENSION DLLs
+
+Your Own Extension DLLs
 -----------------------
 
-If you want to create your own extension module DLL, there's an example
-with easy-to-follow instructions in ../PC/example/; read the file
-readme.txt there first.
+If you want to create your own extension module DLL (.pyd), there's an
+example with easy-to-follow instructions in ..\PC\example\; read the
+file readme.txt there first.
diff --git a/PCbuild/ssl.vcxproj b/PCbuild/ssl.vcxproj
index 41fd780..d5eac9a 100644
--- a/PCbuild/ssl.vcxproj
+++ b/PCbuild/ssl.vcxproj
@@ -122,7 +122,7 @@
 "$(PythonExe)" build_ssl.py Release $(Platform) -a
 </NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
-    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo OpenSSL must be cleaned manually if you want to rebuild it.</NMakeCleanCommandLine>
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
@@ -133,7 +133,7 @@
 "$(PythonExe)" build_ssl.py Release $(Platform) -a
 </NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
-    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">echo OpenSSL must be cleaned manually if you want to rebuild it.</NMakeCleanCommandLine>
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
@@ -144,7 +144,7 @@
 "$(PythonExe)" build_ssl.py Release $(Platform) -a
 </NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo OpenSSL must be cleaned manually if you want to rebuild it.</NMakeCleanCommandLine>
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
@@ -155,7 +155,7 @@
 "$(PythonExe)" build_ssl.py Release $(Platform) -a
 </NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
-    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">echo OpenSSL must be cleaned manually if you want to rebuild it.</NMakeCleanCommandLine>
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
@@ -166,7 +166,7 @@
 "$(PythonExe)" build_ssl.py Release $(Platform) -a
 </NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'" />
-    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'" />
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'">echo OpenSSL must be cleaned manually if you want to rebuild it.</NMakeCleanCommandLine>
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'" />
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'">$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
@@ -177,7 +177,7 @@
 "$(PythonExe)" build_ssl.py Release $(Platform) -a
 </NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'" />
-    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'" />
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'">echo OpenSSL must be cleaned manually if you want to rebuild it.</NMakeCleanCommandLine>
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'" />
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'">$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
@@ -188,7 +188,7 @@
 "$(PythonExe)" build_ssl.py Release $(Platform) -a
 </NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'" />
-    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'" />
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'">echo OpenSSL must be cleaned manually if you want to rebuild it.</NMakeCleanCommandLine>
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'" />
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'">$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
@@ -199,7 +199,7 @@
 "$(PythonExe)" build_ssl.py Release $(Platform) -a
 </NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'" />
-    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'" />
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'">echo OpenSSL must be cleaned manually if you want to rebuild it.</NMakeCleanCommandLine>
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'" />
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'">$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
diff --git a/PCbuild/x64.props b/PCbuild/x64.props
index 289d95b..985c0ef 100644
--- a/PCbuild/x64.props
+++ b/PCbuild/x64.props
@@ -5,7 +5,7 @@
   </PropertyGroup>
   <ItemDefinitionGroup>
     <ClCompile>
-      <AdditionalOptions>/USECL:MS_OPTERON /GS- %(AdditionalOptions)</AdditionalOptions>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
       <PreprocessorDefinitions>_WIN64;_M_X64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <Link>
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 5e1066f..80e432a 100755
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -519,9 +519,9 @@
             self.emit("}", depth+1)
             self.emit("len = PyList_GET_SIZE(tmp);", depth+1)
             if self.isSimpleType(field):
-                self.emit("%s = asdl_int_seq_new(len, arena);" % field.name, depth+1)
+                self.emit("%s = _Py_asdl_int_seq_new(len, arena);" % field.name, depth+1)
             else:
-                self.emit("%s = asdl_seq_new(len, arena);" % field.name, depth+1)
+                self.emit("%s = _Py_asdl_seq_new(len, arena);" % field.name, depth+1)
             self.emit("if (%s == NULL) goto failed;" % field.name, depth+1)
             self.emit("for (i = 0; i < len; i++) {", depth+1)
             self.emit("%s value;" % ctype, depth+2)
diff --git a/Parser/grammar.c b/Parser/grammar.c
index f2a25ca..d4270de 100644
--- a/Parser/grammar.c
+++ b/Parser/grammar.c
@@ -29,7 +29,7 @@
 }
 
 dfa *
-adddfa(grammar *g, int type, char *name)
+adddfa(grammar *g, int type, const char *name)
 {
     dfa *d;
 
@@ -85,7 +85,7 @@
 }
 
 int
-addlabel(labellist *ll, int type, char *str)
+addlabel(labellist *ll, int type, const char *str)
 {
     int i;
     label *lb;
@@ -111,7 +111,7 @@
 /* Same, but rather dies than adds */
 
 int
-findlabel(labellist *ll, int type, char *str)
+findlabel(labellist *ll, int type, const char *str)
 {
     int i;
 
diff --git a/Parser/myreadline.c b/Parser/myreadline.c
index 3cf334d..a1c4b5c 100644
--- a/Parser/myreadline.c
+++ b/Parser/myreadline.c
@@ -109,22 +109,26 @@
 /* Readline implementation using fgets() */
 
 char *
-PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
+PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
 {
     size_t n;
     char *p, *pr;
+
     n = 100;
-    if ((p = (char *)PyMem_MALLOC(n)) == NULL)
+    p = (char *)PyMem_RawMalloc(n);
+    if (p == NULL)
         return NULL;
+
     fflush(sys_stdout);
     if (prompt)
         fprintf(stderr, "%s", prompt);
     fflush(stderr);
+
     switch (my_fgets(p, (int)n, sys_stdin)) {
     case 0: /* Normal case */
         break;
     case 1: /* Interrupt */
-        PyMem_FREE(p);
+        PyMem_RawFree(p);
         return NULL;
     case -1: /* EOF */
     case -2: /* Error */
@@ -136,13 +140,13 @@
     while (n > 0 && p[n-1] != '\n') {
         size_t incr = n+2;
         if (incr > INT_MAX) {
-            PyMem_FREE(p);
+            PyMem_RawFree(p);
             PyErr_SetString(PyExc_OverflowError, "input line too long");
             return NULL;
         }
-        pr = (char *)PyMem_REALLOC(p, n + incr);
+        pr = (char *)PyMem_RawRealloc(p, n + incr);
         if (pr == NULL) {
-            PyMem_FREE(p);
+            PyMem_RawFree(p);
             PyErr_NoMemory();
             return NULL;
         }
@@ -151,9 +155,9 @@
             break;
         n += strlen(p+n);
     }
-    pr = (char *)PyMem_REALLOC(p, n+1);
+    pr = (char *)PyMem_RawRealloc(p, n+1);
     if (pr == NULL) {
-        PyMem_FREE(p);
+        PyMem_RawFree(p);
         PyErr_NoMemory();
         return NULL;
     }
@@ -166,15 +170,16 @@
 
    Note: Python expects in return a buffer allocated with PyMem_Malloc. */
 
-char *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, char *);
+char *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *);
 
 
 /* Interface used by tokenizer.c and bltinmodule.c */
 
 char *
-PyOS_Readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
+PyOS_Readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
 {
-    char *rv;
+    char *rv, *res;
+    size_t len;
 
     if (_PyOS_ReadlineTState == PyThreadState_GET()) {
         PyErr_SetString(PyExc_RuntimeError,
@@ -221,5 +226,14 @@
 
     _PyOS_ReadlineTState = NULL;
 
-    return rv;
+    if (rv == NULL)
+        return NULL;
+
+    len = strlen(rv) + 1;
+    res = PyMem_Malloc(len);
+    if (res != NULL)
+        memcpy(res, rv, len);
+    PyMem_RawFree(rv);
+
+    return res;
 }
diff --git a/Parser/parser.c b/Parser/parser.c
index fc102f2..56ec514 100644
--- a/Parser/parser.c
+++ b/Parser/parser.c
@@ -134,13 +134,13 @@
 /* PARSER PROPER */
 
 static int
-classify(parser_state *ps, int type, char *str)
+classify(parser_state *ps, int type, const char *str)
 {
     grammar *g = ps->p_grammar;
     int n = g->g_ll.ll_nlabels;
 
     if (type == NAME) {
-        char *s = str;
+        const char *s = str;
         label *l = g->g_ll.ll_label;
         int i;
         for (i = n; i > 0; i--, l++) {
diff --git a/Parser/parsetok.c b/Parser/parsetok.c
index 2df9159..b4957b8 100644
--- a/Parser/parsetok.c
+++ b/Parser/parsetok.c
@@ -94,7 +94,8 @@
 
 node *
 PyParser_ParseFile(FILE *fp, const char *filename, grammar *g, int start,
-                   char *ps1, char *ps2, perrdetail *err_ret)
+                   const char *ps1, const char *ps2,
+                   perrdetail *err_ret)
 {
     return PyParser_ParseFileFlags(fp, filename, NULL,
                                    g, start, ps1, ps2, err_ret, 0);
@@ -103,7 +104,8 @@
 node *
 PyParser_ParseFileFlags(FILE *fp, const char *filename, const char *enc,
                         grammar *g, int start,
-                        char *ps1, char *ps2, perrdetail *err_ret, int flags)
+                        const char *ps1, const char *ps2,
+                        perrdetail *err_ret, int flags)
 {
     int iflags = flags;
     return PyParser_ParseFileFlagsEx(fp, filename, enc, g, start, ps1,
@@ -113,15 +115,15 @@
 node *
 PyParser_ParseFileObject(FILE *fp, PyObject *filename,
                          const char *enc, grammar *g, int start,
-                         char *ps1, char *ps2, perrdetail *err_ret,
-                         int *flags)
+                         const char *ps1, const char *ps2,
+                         perrdetail *err_ret, int *flags)
 {
     struct tok_state *tok;
 
     if (initerr(err_ret, filename) < 0)
         return NULL;
 
-    if ((tok = PyTokenizer_FromFile(fp, (char *)enc, ps1, ps2)) == NULL) {
+    if ((tok = PyTokenizer_FromFile(fp, enc, ps1, ps2)) == NULL) {
         err_ret->error = E_NOMEM;
         return NULL;
     }
@@ -135,7 +137,8 @@
 node *
 PyParser_ParseFileFlagsEx(FILE *fp, const char *filename,
                           const char *enc, grammar *g, int start,
-                          char *ps1, char *ps2, perrdetail *err_ret, int *flags)
+                          const char *ps1, const char *ps2,
+                          perrdetail *err_ret, int *flags)
 {
     node *n;
     PyObject *fileobj = NULL;
diff --git a/Parser/pgenmain.c b/Parser/pgenmain.c
index a624dd2..017a4f9 100644
--- a/Parser/pgenmain.c
+++ b/Parser/pgenmain.c
@@ -138,7 +138,7 @@
 /* No-nonsense my_readline() for tokenizer.c */
 
 char *
-PyOS_Readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
+PyOS_Readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
 {
     size_t n = 1000;
     char *p = (char *)PyMem_MALLOC(n);
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index dafb4bd..5bf7e84 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -31,7 +31,7 @@
                || c == '_'\
                || (c >= 128))
 
-extern char *PyOS_Readline(FILE *, FILE *, char *);
+extern char *PyOS_Readline(FILE *, FILE *, const char *);
 /* Return malloc'ed string including trailing \n;
    empty malloc'ed string for EOF;
    NULL if interrupted */
@@ -780,7 +780,7 @@
     struct tok_state *tok = tok_new();
     if (tok == NULL)
         return NULL;
-    str = (char *)decode_str(str, exec_input, tok);
+    str = decode_str(str, exec_input, tok);
     if (str == NULL) {
         PyTokenizer_Free(tok);
         return NULL;
@@ -823,7 +823,8 @@
 /* Set up tokenizer for file */
 
 struct tok_state *
-PyTokenizer_FromFile(FILE *fp, char* enc, char *ps1, char *ps2)
+PyTokenizer_FromFile(FILE *fp, const char* enc,
+                     const char *ps1, const char *ps2)
 {
     struct tok_state *tok = tok_new();
     if (tok == NULL)
diff --git a/Parser/tokenizer.h b/Parser/tokenizer.h
index ed1f3aa..1ce6eeb 100644
--- a/Parser/tokenizer.h
+++ b/Parser/tokenizer.h
@@ -35,7 +35,7 @@
     int indstack[MAXINDENT];            /* Stack of indents */
     int atbol;          /* Nonzero if at begin of new line */
     int pendin;         /* Pending indents (if > 0) or dedents (if < 0) */
-    char *prompt, *nextprompt;          /* For interactive prompting */
+    const char *prompt, *nextprompt;          /* For interactive prompting */
     int lineno;         /* Current line number */
     int level;          /* () [] {} Parentheses nesting level */
             /* Used to allow free continuations inside them */
@@ -69,8 +69,8 @@
 
 extern struct tok_state *PyTokenizer_FromString(const char *, int);
 extern struct tok_state *PyTokenizer_FromUTF8(const char *, int);
-extern struct tok_state *PyTokenizer_FromFile(FILE *, char*,
-                                              char *, char *);
+extern struct tok_state *PyTokenizer_FromFile(FILE *, const char*,
+                                              const char *, const char *);
 extern void PyTokenizer_Free(struct tok_state *);
 extern int PyTokenizer_Get(struct tok_state *, char **, char **);
 extern char * PyTokenizer_RestoreEncoding(struct tok_state* tok,
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index afa6d2e..e07a93f 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -3612,7 +3612,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -3647,7 +3647,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -3704,7 +3704,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -3807,7 +3807,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -3831,7 +3831,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            decorator_list = asdl_seq_new(len, arena);
+            decorator_list = _Py_asdl_seq_new(len, arena);
             if (decorator_list == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -3894,7 +3894,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            bases = asdl_seq_new(len, arena);
+            bases = _Py_asdl_seq_new(len, arena);
             if (bases == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -3918,7 +3918,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            keywords = asdl_seq_new(len, arena);
+            keywords = _Py_asdl_seq_new(len, arena);
             if (keywords == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 keyword_ty value;
@@ -3962,7 +3962,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -3986,7 +3986,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            decorator_list = asdl_seq_new(len, arena);
+            decorator_list = _Py_asdl_seq_new(len, arena);
             if (decorator_list == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -4043,7 +4043,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            targets = asdl_seq_new(len, arena);
+            targets = _Py_asdl_seq_new(len, arena);
             if (targets == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -4079,7 +4079,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            targets = asdl_seq_new(len, arena);
+            targets = _Py_asdl_seq_new(len, arena);
             if (targets == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -4196,7 +4196,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4220,7 +4220,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            orelse = asdl_seq_new(len, arena);
+            orelse = _Py_asdl_seq_new(len, arena);
             if (orelse == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4268,7 +4268,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4292,7 +4292,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            orelse = asdl_seq_new(len, arena);
+            orelse = _Py_asdl_seq_new(len, arena);
             if (orelse == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4340,7 +4340,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4364,7 +4364,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            orelse = asdl_seq_new(len, arena);
+            orelse = _Py_asdl_seq_new(len, arena);
             if (orelse == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4400,7 +4400,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            items = asdl_seq_new(len, arena);
+            items = _Py_asdl_seq_new(len, arena);
             if (items == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 withitem_ty value;
@@ -4424,7 +4424,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4494,7 +4494,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4518,7 +4518,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            handlers = asdl_seq_new(len, arena);
+            handlers = _Py_asdl_seq_new(len, arena);
             if (handlers == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 excepthandler_ty value;
@@ -4542,7 +4542,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            orelse = asdl_seq_new(len, arena);
+            orelse = _Py_asdl_seq_new(len, arena);
             if (orelse == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4566,7 +4566,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            finalbody = asdl_seq_new(len, arena);
+            finalbody = _Py_asdl_seq_new(len, arena);
             if (finalbody == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -4635,7 +4635,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            names = asdl_seq_new(len, arena);
+            names = _Py_asdl_seq_new(len, arena);
             if (names == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 alias_ty value;
@@ -4682,7 +4682,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            names = asdl_seq_new(len, arena);
+            names = _Py_asdl_seq_new(len, arena);
             if (names == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 alias_ty value;
@@ -4727,7 +4727,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            names = asdl_seq_new(len, arena);
+            names = _Py_asdl_seq_new(len, arena);
             if (names == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 identifier value;
@@ -4762,7 +4762,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            names = asdl_seq_new(len, arena);
+            names = _Py_asdl_seq_new(len, arena);
             if (names == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 identifier value;
@@ -4903,7 +4903,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            values = asdl_seq_new(len, arena);
+            values = _Py_asdl_seq_new(len, arena);
             if (values == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -5099,7 +5099,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            keys = asdl_seq_new(len, arena);
+            keys = _Py_asdl_seq_new(len, arena);
             if (keys == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -5123,7 +5123,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            values = asdl_seq_new(len, arena);
+            values = _Py_asdl_seq_new(len, arena);
             if (values == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -5158,7 +5158,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            elts = asdl_seq_new(len, arena);
+            elts = _Py_asdl_seq_new(len, arena);
             if (elts == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -5205,7 +5205,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            generators = asdl_seq_new(len, arena);
+            generators = _Py_asdl_seq_new(len, arena);
             if (generators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 comprehension_ty value;
@@ -5252,7 +5252,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            generators = asdl_seq_new(len, arena);
+            generators = _Py_asdl_seq_new(len, arena);
             if (generators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 comprehension_ty value;
@@ -5311,7 +5311,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            generators = asdl_seq_new(len, arena);
+            generators = _Py_asdl_seq_new(len, arena);
             if (generators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 comprehension_ty value;
@@ -5358,7 +5358,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            generators = asdl_seq_new(len, arena);
+            generators = _Py_asdl_seq_new(len, arena);
             if (generators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 comprehension_ty value;
@@ -5449,7 +5449,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            ops = asdl_int_seq_new(len, arena);
+            ops = _Py_asdl_int_seq_new(len, arena);
             if (ops == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 cmpop_ty value;
@@ -5473,7 +5473,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            comparators = asdl_seq_new(len, arena);
+            comparators = _Py_asdl_seq_new(len, arena);
             if (comparators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -5523,7 +5523,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            args = asdl_seq_new(len, arena);
+            args = _Py_asdl_seq_new(len, arena);
             if (args == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -5547,7 +5547,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            keywords = asdl_seq_new(len, arena);
+            keywords = _Py_asdl_seq_new(len, arena);
             if (keywords == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 keyword_ty value;
@@ -5862,7 +5862,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            elts = asdl_seq_new(len, arena);
+            elts = _Py_asdl_seq_new(len, arena);
             if (elts == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -5909,7 +5909,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            elts = asdl_seq_new(len, arena);
+            elts = _Py_asdl_seq_new(len, arena);
             if (elts == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty value;
@@ -6074,7 +6074,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            dims = asdl_seq_new(len, arena);
+            dims = _Py_asdl_seq_new(len, arena);
             if (dims == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 slice_ty value;
@@ -6425,7 +6425,7 @@
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
-        ifs = asdl_seq_new(len, arena);
+        ifs = _Py_asdl_seq_new(len, arena);
         if (ifs == NULL) goto failed;
         for (i = 0; i < len; i++) {
             expr_ty value;
@@ -6520,7 +6520,7 @@
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
-            body = asdl_seq_new(len, arena);
+            body = _Py_asdl_seq_new(len, arena);
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty value;
@@ -6566,7 +6566,7 @@
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
-        args = asdl_seq_new(len, arena);
+        args = _Py_asdl_seq_new(len, arena);
         if (args == NULL) goto failed;
         for (i = 0; i < len; i++) {
             arg_ty value;
@@ -6600,7 +6600,7 @@
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
-        kwonlyargs = asdl_seq_new(len, arena);
+        kwonlyargs = _Py_asdl_seq_new(len, arena);
         if (kwonlyargs == NULL) goto failed;
         for (i = 0; i < len; i++) {
             arg_ty value;
@@ -6624,7 +6624,7 @@
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
-        kw_defaults = asdl_seq_new(len, arena);
+        kw_defaults = _Py_asdl_seq_new(len, arena);
         if (kw_defaults == NULL) goto failed;
         for (i = 0; i < len; i++) {
             expr_ty value;
@@ -6658,7 +6658,7 @@
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
-        defaults = asdl_seq_new(len, arena);
+        defaults = _Py_asdl_seq_new(len, arena);
         if (defaults == NULL) goto failed;
         for (i = 0; i < len; i++) {
             expr_ty value;
diff --git a/Python/_warnings.c b/Python/_warnings.c
index b8d4bb6..6013d7d 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -13,6 +13,8 @@
 static PyObject *_once_registry;  /* Dict */
 static PyObject *_default_action; /* String */
 
+_Py_IDENTIFIER(argv);
+_Py_IDENTIFIER(stderr);
 
 static int
 check_matched(PyObject *obj, PyObject *arg)
@@ -99,7 +101,7 @@
 
 
 /* The item is a borrowed reference. */
-static const char *
+static PyObject*
 get_filter(PyObject *category, PyObject *text, Py_ssize_t lineno,
            PyObject *module, PyObject **item)
 {
@@ -144,21 +146,28 @@
         ln_obj = PyTuple_GET_ITEM(tmp_item, 4);
 
         good_msg = check_matched(msg, text);
+        if (good_msg == -1)
+            return NULL;
+
         good_mod = check_matched(mod, module);
+        if (good_mod == -1)
+            return NULL;
+
         is_subclass = PyObject_IsSubclass(category, cat);
+        if (is_subclass == -1)
+            return NULL;
+
         ln = PyLong_AsSsize_t(ln_obj);
-        if (good_msg == -1 || good_mod == -1 || is_subclass == -1 ||
-            (ln == -1 && PyErr_Occurred()))
+        if (ln == -1 && PyErr_Occurred())
             return NULL;
 
         if (good_msg && is_subclass && good_mod && (ln == 0 || lineno == ln))
-            return _PyUnicode_AsString(action);
+            return action;
     }
 
     action = get_default_action();
-    if (action != NULL) {
-        return _PyUnicode_AsString(action);
-    }
+    if (action != NULL)
+        return action;
 
     PyErr_SetString(PyExc_ValueError,
                     MODULE_NAME ".defaultaction not found");
@@ -192,23 +201,26 @@
 normalize_module(PyObject *filename)
 {
     PyObject *module;
-    const char *mod_str;
+    int kind;
+    void *data;
     Py_ssize_t len;
 
-    int rc = PyObject_IsTrue(filename);
-    if (rc == -1)
-        return NULL;
-    else if (rc == 0)
-        return PyUnicode_FromString("<unknown>");
-
-    mod_str = _PyUnicode_AsString(filename);
-    if (mod_str == NULL)
-        return NULL;
     len = PyUnicode_GetLength(filename);
     if (len < 0)
         return NULL;
+
+    if (len == 0)
+        return PyUnicode_FromString("<unknown>");
+
+    kind = PyUnicode_KIND(filename);
+    data = PyUnicode_DATA(filename);
+
+    /* if filename.endswith(".py"): */
     if (len >= 3 &&
-        strncmp(mod_str + (len - 3), ".py", 3) == 0) {
+        PyUnicode_READ(kind, data, len-3) == '.' &&
+        PyUnicode_READ(kind, data, len-2) == 'p' &&
+        PyUnicode_READ(kind, data, len-1) == 'y')
+    {
         module = PyUnicode_Substring(filename, 0, len-3);
     }
     else {
@@ -253,39 +265,63 @@
 
     name = _PyObject_GetAttrId(category, &PyId___name__);
     if (name == NULL)  /* XXX Can an object lack a '__name__' attribute? */
-        return;
+        goto error;
 
-    f_stderr = PySys_GetObject("stderr");
+    f_stderr = _PySys_GetObjectId(&PyId_stderr);
     if (f_stderr == NULL) {
         fprintf(stderr, "lost sys.stderr\n");
-        Py_DECREF(name);
-        return;
+        goto error;
     }
 
     /* Print "filename:lineno: category: text\n" */
-    PyFile_WriteObject(filename, f_stderr, Py_PRINT_RAW);
-    PyFile_WriteString(lineno_str, f_stderr);
-    PyFile_WriteObject(name, f_stderr, Py_PRINT_RAW);
-    PyFile_WriteString(": ", f_stderr);
-    PyFile_WriteObject(text, f_stderr, Py_PRINT_RAW);
-    PyFile_WriteString("\n", f_stderr);
-    Py_XDECREF(name);
+    if (PyFile_WriteObject(filename, f_stderr, Py_PRINT_RAW) < 0)
+        goto error;
+    if (PyFile_WriteString(lineno_str, f_stderr) < 0)
+        goto error;
+    if (PyFile_WriteObject(name, f_stderr, Py_PRINT_RAW) < 0)
+        goto error;
+    if (PyFile_WriteString(": ", f_stderr) < 0)
+        goto error;
+    if (PyFile_WriteObject(text, f_stderr, Py_PRINT_RAW) < 0)
+        goto error;
+    if (PyFile_WriteString("\n", f_stderr) < 0)
+        goto error;
+    Py_CLEAR(name);
 
     /* Print "  source_line\n" */
     if (sourceline) {
-        char *source_line_str = _PyUnicode_AsString(sourceline);
-        if (source_line_str == NULL)
-                return;
-        while (*source_line_str == ' ' || *source_line_str == '\t' ||
-                *source_line_str == '\014')
-            source_line_str++;
+        int kind;
+        void *data;
+        Py_ssize_t i, len;
+        Py_UCS4 ch;
+        PyObject *truncated;
 
-        PyFile_WriteString(source_line_str, f_stderr);
+        if (PyUnicode_READY(sourceline) < 1)
+            goto error;
+
+        kind = PyUnicode_KIND(sourceline);
+        data = PyUnicode_DATA(sourceline);
+        len = PyUnicode_GET_LENGTH(sourceline);
+        for (i=0; i<len; i++) {
+            ch = PyUnicode_READ(kind, data, i);
+            if (ch != ' ' && ch != '\t' && ch != '\014')
+                break;
+        }
+
+        truncated = PyUnicode_Substring(sourceline, i, len);
+        if (truncated == NULL)
+            goto error;
+
+        PyFile_WriteObject(sourceline, f_stderr, Py_PRINT_RAW);
+        Py_DECREF(truncated);
         PyFile_WriteString("\n", f_stderr);
     }
     else {
         _Py_DisplaySourceLine(f_stderr, filename, lineno, 2);
     }
+
+error:
+    Py_XDECREF(name);
     PyErr_Clear();
 }
 
@@ -296,9 +332,16 @@
 {
     PyObject *key = NULL, *text = NULL, *result = NULL, *lineno_obj = NULL;
     PyObject *item = Py_None;
-    const char *action;
+    PyObject *action;
     int rc;
 
+    /* module can be None if a warning is emitted late during Python shutdown.
+       In this case, the Python warnings module was probably unloaded, filters
+       are no more available to choose as action. It is safer to ignore the
+       warning and do nothing. */
+    if (module == Py_None)
+        Py_RETURN_NONE;
+
     if (registry && !PyDict_Check(registry) && (registry != Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'registry' must be a dict");
         return NULL;
@@ -354,7 +397,7 @@
     if (action == NULL)
         goto cleanup;
 
-    if (strcmp(action, "error") == 0) {
+    if (PyUnicode_CompareWithASCIIString(action, "error") == 0) {
         PyErr_SetObject(category, message);
         goto cleanup;
     }
@@ -362,13 +405,13 @@
     /* Store in the registry that we've been here, *except* when the action
        is "always". */
     rc = 0;
-    if (strcmp(action, "always") != 0) {
+    if (PyUnicode_CompareWithASCIIString(action, "always") != 0) {
         if (registry != NULL && registry != Py_None &&
                 PyDict_SetItem(registry, key, Py_True) < 0)
             goto cleanup;
-        else if (strcmp(action, "ignore") == 0)
+        else if (PyUnicode_CompareWithASCIIString(action, "ignore") == 0)
             goto return_none;
-        else if (strcmp(action, "once") == 0) {
+        else if (PyUnicode_CompareWithASCIIString(action, "once") == 0) {
             if (registry == NULL || registry == Py_None) {
                 registry = get_once_registry();
                 if (registry == NULL)
@@ -377,24 +420,15 @@
             /* _once_registry[(text, category)] = 1 */
             rc = update_registry(registry, text, category, 0);
         }
-        else if (strcmp(action, "module") == 0) {
+        else if (PyUnicode_CompareWithASCIIString(action, "module") == 0) {
             /* registry[(text, category, 0)] = 1 */
             if (registry != NULL && registry != Py_None)
                 rc = update_registry(registry, text, category, 0);
         }
-        else if (strcmp(action, "default") != 0) {
-            PyObject *to_str = PyObject_Str(item);
-            const char *err_str = "???";
-
-            if (to_str != NULL) {
-                err_str = _PyUnicode_AsString(to_str);
-                if (err_str == NULL)
-                        goto cleanup;
-            }
+        else if (PyUnicode_CompareWithASCIIString(action, "default") != 0) {
             PyErr_Format(PyExc_RuntimeError,
-                        "Unrecognized action (%s) in warnings.filters:\n %s",
-                        action, err_str);
-            Py_XDECREF(to_str);
+                        "Unrecognized action (%R) in warnings.filters:\n %R",
+                        action, item);
             goto cleanup;
         }
     }
@@ -528,13 +562,12 @@
             Py_INCREF(*filename);
     }
     else {
-        const char *module_str = _PyUnicode_AsString(*module);
         *filename = NULL;
-        if (module_str == NULL)
-                goto handle_error;
-        if (strcmp(module_str, "__main__") == 0) {
-            PyObject *argv = PySys_GetObject("argv");
-            if (argv != NULL && PyList_Size(argv) > 0) {
+        if (*module != Py_None && PyUnicode_CompareWithASCIIString(*module, "__main__") == 0) {
+            PyObject *argv = _PySys_GetObjectId(&PyId_argv);
+            /* PyList_Check() is needed because sys.argv is set to None during
+               Python finalization */
+            if (argv != NULL && PyList_Check(argv) && PyList_Size(argv) > 0) {
                 int is_true;
                 *filename = PyList_GetItem(argv, 0);
                 Py_INCREF(*filename);
@@ -554,8 +587,8 @@
             else {
                 /* embedded interpreters don't have sys.argv, see bug #839151 */
                 *filename = PyUnicode_FromString("__main__");
-                    if (*filename == NULL)
-                        goto handle_error;
+                if (*filename == NULL)
+                    goto handle_error;
             }
         }
         if (*filename == NULL) {
@@ -649,7 +682,7 @@
     PyObject *registry = NULL;
     PyObject *module_globals = NULL;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOi|OOO:warn_explicit",
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOUi|OOO:warn_explicit",
                 kwd_list, &message, &category, &filename, &lineno, &module,
                 &registry, &module_globals))
         return NULL;
diff --git a/Python/asdl.c b/Python/asdl.c
index e7e3280..74fa941 100644
--- a/Python/asdl.c
+++ b/Python/asdl.c
@@ -2,7 +2,7 @@
 #include "asdl.h"
 
 asdl_seq *
-asdl_seq_new(Py_ssize_t size, PyArena *arena)
+_Py_asdl_seq_new(Py_ssize_t size, PyArena *arena)
 {
     asdl_seq *seq = NULL;
     size_t n = (size ? (sizeof(void *) * (size - 1)) : 0);
@@ -33,7 +33,7 @@
 }
 
 asdl_int_seq *
-asdl_int_seq_new(Py_ssize_t size, PyArena *arena)
+_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena)
 {
     asdl_int_seq *seq = NULL;
     size_t n = (size ? (sizeof(void *) * (size - 1)) : 0);
diff --git a/Python/ast.c b/Python/ast.c
index 073d59f..3bd24fd 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -696,7 +696,7 @@
     k = 0;
     switch (TYPE(n)) {
         case file_input:
-            stmts = asdl_seq_new(num_stmts(n), arena);
+            stmts = _Py_asdl_seq_new(num_stmts(n), arena);
             if (!stmts)
                 goto out;
             for (i = 0; i < NCH(n) - 1; i++) {
@@ -736,7 +736,7 @@
         }
         case single_input:
             if (TYPE(CHILD(n, 0)) == NEWLINE) {
-                stmts = asdl_seq_new(1, arena);
+                stmts = _Py_asdl_seq_new(1, arena);
                 if (!stmts)
                     goto out;
                 asdl_seq_SET(stmts, 0, Pass(n->n_lineno, n->n_col_offset,
@@ -748,7 +748,7 @@
             else {
                 n = CHILD(n, 0);
                 num = num_stmts(n);
-                stmts = asdl_seq_new(num, arena);
+                stmts = _Py_asdl_seq_new(num, arena);
                 if (!stmts)
                     goto out;
                 if (num == 1) {
@@ -1099,7 +1099,7 @@
     int i;
     assert(TYPE(n) == testlist || TYPE(n) == testlist_star_expr || TYPE(n) == testlist_comp);
 
-    seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
+    seq = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
     if (!seq)
         return NULL;
 
@@ -1279,22 +1279,22 @@
         if (TYPE(ch) == DOUBLESTAR) break;
         if (TYPE(ch) == tfpdef || TYPE(ch) == vfpdef) nkwonlyargs++;
     }
-    posargs = (nposargs ? asdl_seq_new(nposargs, c->c_arena) : NULL);
+    posargs = (nposargs ? _Py_asdl_seq_new(nposargs, c->c_arena) : NULL);
     if (!posargs && nposargs)
         return NULL;
     kwonlyargs = (nkwonlyargs ?
-                   asdl_seq_new(nkwonlyargs, c->c_arena) : NULL);
+                   _Py_asdl_seq_new(nkwonlyargs, c->c_arena) : NULL);
     if (!kwonlyargs && nkwonlyargs)
         return NULL;
     posdefaults = (nposdefaults ?
-                    asdl_seq_new(nposdefaults, c->c_arena) : NULL);
+                    _Py_asdl_seq_new(nposdefaults, c->c_arena) : NULL);
     if (!posdefaults && nposdefaults)
         return NULL;
     /* The length of kwonlyargs and kwdefaults are same
        since we set NULL as default for keyword only argument w/o default
        - we have sequence data structure, but no dictionary */
     kwdefaults = (nkwonlyargs ?
-                   asdl_seq_new(nkwonlyargs, c->c_arena) : NULL);
+                   _Py_asdl_seq_new(nkwonlyargs, c->c_arena) : NULL);
     if (!kwdefaults && nkwonlyargs)
         return NULL;
 
@@ -1462,7 +1462,7 @@
     int i;
 
     REQ(n, decorators);
-    decorator_seq = asdl_seq_new(NCH(n), c->c_arena);
+    decorator_seq = _Py_asdl_seq_new(NCH(n), c->c_arena);
     if (!decorator_seq)
         return NULL;
 
@@ -1658,7 +1658,7 @@
     if (n_fors == -1)
         return NULL;
 
-    comps = asdl_seq_new(n_fors, c->c_arena);
+    comps = _Py_asdl_seq_new(n_fors, c->c_arena);
     if (!comps)
         return NULL;
 
@@ -1699,7 +1699,7 @@
             if (n_ifs == -1)
                 return NULL;
 
-            ifs = asdl_seq_new(n_ifs, c->c_arena);
+            ifs = _Py_asdl_seq_new(n_ifs, c->c_arena);
             if (!ifs)
                 return NULL;
 
@@ -1921,7 +1921,7 @@
             /* it's a simple set */
             asdl_seq *elts;
             size = (NCH(ch) + 1) / 2; /* +1 in case no trailing comma */
-            elts = asdl_seq_new(size, c->c_arena);
+            elts = _Py_asdl_seq_new(size, c->c_arena);
             if (!elts)
                 return NULL;
             for (i = 0; i < NCH(ch); i += 2) {
@@ -1940,11 +1940,11 @@
         } else {
             /* it's a dict */
             size = (NCH(ch) + 1) / 4; /* +1 in case no trailing comma */
-            keys = asdl_seq_new(size, c->c_arena);
+            keys = _Py_asdl_seq_new(size, c->c_arena);
             if (!keys)
                 return NULL;
 
-            values = asdl_seq_new(size, c->c_arena);
+            values = _Py_asdl_seq_new(size, c->c_arena);
             if (!values)
                 return NULL;
 
@@ -2139,7 +2139,7 @@
             expr_ty e;
             int simple = 1;
             asdl_seq *slices, *elts;
-            slices = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
+            slices = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
             if (!slices)
                 return NULL;
             for (j = 0; j < NCH(n); j += 2) {
@@ -2155,7 +2155,7 @@
                                  Load, LINENO(n), n->n_col_offset, c->c_arena);
             }
             /* extract Index values and put them in a Tuple */
-            elts = asdl_seq_new(asdl_seq_LEN(slices), c->c_arena);
+            elts = _Py_asdl_seq_new(asdl_seq_LEN(slices), c->c_arena);
             if (!elts)
                 return NULL;
             for (j = 0; j < asdl_seq_LEN(slices); ++j) {
@@ -2288,7 +2288,7 @@
                 n = CHILD(n, 0);
                 goto loop;
             }
-            seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
+            seq = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
             if (!seq)
                 return NULL;
             for (i = 0; i < NCH(n); i += 2) {
@@ -2324,10 +2324,10 @@
                 expr_ty expression;
                 asdl_int_seq *ops;
                 asdl_seq *cmps;
-                ops = asdl_int_seq_new(NCH(n) / 2, c->c_arena);
+                ops = _Py_asdl_int_seq_new(NCH(n) / 2, c->c_arena);
                 if (!ops)
                     return NULL;
-                cmps = asdl_seq_new(NCH(n) / 2, c->c_arena);
+                cmps = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena);
                 if (!cmps) {
                     return NULL;
                 }
@@ -2453,10 +2453,10 @@
         return NULL;
     }
 
-    args = asdl_seq_new(nargs + ngens, c->c_arena);
+    args = _Py_asdl_seq_new(nargs + ngens, c->c_arena);
     if (!args)
         return NULL;
-    keywords = asdl_seq_new(nkeywords, c->c_arena);
+    keywords = _Py_asdl_seq_new(nkeywords, c->c_arena);
     if (!keywords)
         return NULL;
     nargs = 0;
@@ -2633,7 +2633,7 @@
 
         /* a normal assignment */
         REQ(CHILD(n, 1), EQUAL);
-        targets = asdl_seq_new(NCH(n) / 2, c->c_arena);
+        targets = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena);
         if (!targets)
             return NULL;
         for (i = 0; i < NCH(n) - 2; i += 2) {
@@ -2674,7 +2674,7 @@
 
     REQ(n, exprlist);
 
-    seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
+    seq = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
     if (!seq)
         return NULL;
     for (i = 0; i < NCH(n); i += 2) {
@@ -2904,7 +2904,7 @@
     if (TYPE(n) == import_name) {
         n = CHILD(n, 1);
         REQ(n, dotted_as_names);
-        aliases = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
+        aliases = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
         if (!aliases)
                 return NULL;
         for (i = 0; i < NCH(n); i += 2) {
@@ -2966,7 +2966,7 @@
             return NULL;
         }
 
-        aliases = asdl_seq_new((n_children + 1) / 2, c->c_arena);
+        aliases = _Py_asdl_seq_new((n_children + 1) / 2, c->c_arena);
         if (!aliases)
             return NULL;
 
@@ -3005,7 +3005,7 @@
     int i;
 
     REQ(n, global_stmt);
-    s = asdl_seq_new(NCH(n) / 2, c->c_arena);
+    s = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena);
     if (!s)
         return NULL;
     for (i = 1; i < NCH(n); i += 2) {
@@ -3026,7 +3026,7 @@
     int i;
 
     REQ(n, nonlocal_stmt);
-    s = asdl_seq_new(NCH(n) / 2, c->c_arena);
+    s = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena);
     if (!s)
         return NULL;
     for (i = 1; i < NCH(n); i += 2) {
@@ -3079,7 +3079,7 @@
     REQ(n, suite);
 
     total = num_stmts(n);
-    seq = asdl_seq_new(total, c->c_arena);
+    seq = _Py_asdl_seq_new(total, c->c_arena);
     if (!seq)
         return NULL;
     if (TYPE(CHILD(n, 0)) == simple_stmt) {
@@ -3198,7 +3198,7 @@
         if (has_else) {
             asdl_seq *suite_seq2;
 
-            orelse = asdl_seq_new(1, c->c_arena);
+            orelse = _Py_asdl_seq_new(1, c->c_arena);
             if (!orelse)
                 return NULL;
             expression = ast_for_expr(c, CHILD(n, NCH(n) - 6));
@@ -3222,7 +3222,7 @@
 
         for (i = 0; i < n_elif; i++) {
             int off = 5 + (n_elif - i - 1) * 4;
-            asdl_seq *newobj = asdl_seq_new(1, c->c_arena);
+            asdl_seq *newobj = _Py_asdl_seq_new(1, c->c_arena);
             if (!newobj)
                 return NULL;
             expression = ast_for_expr(c, CHILD(n, off));
@@ -3434,7 +3434,7 @@
     if (n_except > 0) {
         int i;
         /* process except statements to create a try ... except */
-        handlers = asdl_seq_new(n_except, c->c_arena);
+        handlers = _Py_asdl_seq_new(n_except, c->c_arena);
         if (handlers == NULL)
             return NULL;
 
@@ -3485,7 +3485,7 @@
     REQ(n, with_stmt);
 
     n_items = (NCH(n) - 2) / 2;
-    items = asdl_seq_new(n_items, c->c_arena);
+    items = _Py_asdl_seq_new(n_items, c->c_arena);
     if (!items)
         return NULL;
     for (i = 1; i < NCH(n) - 2; i += 2) {
@@ -3651,18 +3651,16 @@
     end = s + strlen(s) - 1;
     imflag = *end == 'j' || *end == 'J';
     if (s[0] == '0') {
-        x = (long) PyOS_strtoul((char *)s, (char **)&end, 0);
+        x = (long) PyOS_strtoul(s, (char **)&end, 0);
         if (x < 0 && errno == 0) {
-            return PyLong_FromString((char *)s,
-                                     (char **)0,
-                                     0);
+            return PyLong_FromString(s, (char **)0, 0);
         }
     }
     else
-        x = PyOS_strtol((char *)s, (char **)&end, 0);
+        x = PyOS_strtol(s, (char **)&end, 0);
     if (*end == '\0') {
         if (errno != 0)
-            return PyLong_FromString((char *)s, (char **)0, 0);
+            return PyLong_FromString(s, (char **)0, 0);
         return PyLong_FromLong(x);
     }
     /* XXX Huge floats may silently fail */
@@ -3685,8 +3683,8 @@
 static PyObject *
 decode_utf8(struct compiling *c, const char **sPtr, const char *end)
 {
-    char *s, *t;
-    t = s = (char *)*sPtr;
+    const char *s, *t;
+    t = s = *sPtr;
     /* while (s < end && *s != '\\') s++; */ /* inefficient for u".." */
     while (s < end && (*s & 0x80)) s++;
     *sPtr = s;
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 3f270b4..96ccd64 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -32,8 +32,19 @@
 int Py_HasFileSystemDefaultEncoding = 0;
 #endif
 
+_Py_IDENTIFIER(__builtins__);
+_Py_IDENTIFIER(__dict__);
+_Py_IDENTIFIER(__prepare__);
+_Py_IDENTIFIER(__round__);
+_Py_IDENTIFIER(encoding);
+_Py_IDENTIFIER(errors);
 _Py_IDENTIFIER(fileno);
 _Py_IDENTIFIER(flush);
+_Py_IDENTIFIER(metaclass);
+_Py_IDENTIFIER(sort);
+_Py_IDENTIFIER(stdin);
+_Py_IDENTIFIER(stdout);
+_Py_IDENTIFIER(stderr);
 
 static PyObject *
 builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
@@ -42,7 +53,6 @@
     PyObject *cls = NULL;
     Py_ssize_t nargs;
     int isclass;
-    _Py_IDENTIFIER(__prepare__);
 
     assert(args != NULL);
     if (!PyTuple_Check(args)) {
@@ -82,10 +92,10 @@
             Py_DECREF(bases);
             return NULL;
         }
-        meta = PyDict_GetItemString(mkw, "metaclass");
+        meta = _PyDict_GetItemId(mkw, &PyId_metaclass);
         if (meta != NULL) {
             Py_INCREF(meta);
-            if (PyDict_DelItemString(mkw, "metaclass") < 0) {
+            if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
                 Py_DECREF(meta);
                 Py_DECREF(mkw);
                 Py_DECREF(bases);
@@ -755,8 +765,11 @@
     }
     if (globals == Py_None) {
         globals = PyEval_GetGlobals();
-        if (locals == Py_None)
+        if (locals == Py_None) {
             locals = PyEval_GetLocals();
+            if (locals == NULL)
+                return NULL;
+        }
     }
     else if (locals == Py_None)
         locals = globals;
@@ -768,9 +781,9 @@
         return NULL;
     }
 
-    if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
-        if (PyDict_SetItemString(globals, "__builtins__",
-                                 PyEval_GetBuiltins()) != 0)
+    if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
+        if (_PyDict_SetItemId(globals, &PyId___builtins__,
+                              PyEval_GetBuiltins()) != 0)
             return NULL;
     }
 
@@ -820,6 +833,8 @@
         globals = PyEval_GetGlobals();
         if (locals == Py_None) {
             locals = PyEval_GetLocals();
+            if (locals == NULL)
+                return NULL;
         }
         if (!globals || !locals) {
             PyErr_SetString(PyExc_SystemError,
@@ -841,9 +856,9 @@
             locals->ob_type->tp_name);
         return NULL;
     }
-    if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
-        if (PyDict_SetItemString(globals, "__builtins__",
-                                 PyEval_GetBuiltins()) != 0)
+    if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
+        if (_PyDict_SetItemId(globals, &PyId___builtins__,
+                              PyEval_GetBuiltins()) != 0)
             return NULL;
     }
 
@@ -1335,7 +1350,7 @@
 
     if (positional)
         v = args;
-    else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
+    else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
         return NULL;
 
     emptytuple = PyTuple_New(0);
@@ -1547,7 +1562,7 @@
                                      kwlist, &sep, &end, &file, &flush))
         return NULL;
     if (file == NULL || file == Py_None) {
-        file = PySys_GetObject("stdout");
+        file = _PySys_GetObjectId(&PyId_stdout);
         if (file == NULL) {
             PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
             return NULL;
@@ -1606,7 +1621,7 @@
         if (do_flush == -1)
             return NULL;
         else if (do_flush) {
-            tmp = PyObject_CallMethod(file, "flush", "");
+            tmp = _PyObject_CallMethodId(file, &PyId_flush, "");
             if (tmp == NULL)
                 return NULL;
             else
@@ -1632,9 +1647,9 @@
 builtin_input(PyObject *self, PyObject *args)
 {
     PyObject *promptarg = NULL;
-    PyObject *fin = PySys_GetObject("stdin");
-    PyObject *fout = PySys_GetObject("stdout");
-    PyObject *ferr = PySys_GetObject("stderr");
+    PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
+    PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
+    PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
     PyObject *tmp;
     long fd;
     int tty;
@@ -1705,8 +1720,6 @@
         char *stdin_encoding_str, *stdin_errors_str;
         PyObject *result;
         size_t len;
-        _Py_IDENTIFIER(encoding);
-        _Py_IDENTIFIER(errors);
 
         stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
         stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
@@ -1835,7 +1848,6 @@
     PyObject *ndigits = NULL;
     static char *kwlist[] = {"number", "ndigits", 0};
     PyObject *number, *round, *result;
-    _Py_IDENTIFIER(__round__);
 
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
                                      kwlist, &number, &ndigits))
@@ -1878,7 +1890,6 @@
     PyObject *callable;
     static char *kwlist[] = {"iterable", "key", "reverse", 0};
     int reverse;
-    _Py_IDENTIFIER(sort);
 
     /* args 1-3 should match listsort in Objects/listobject.c */
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
@@ -1926,16 +1937,11 @@
         return NULL;
     if (v == NULL) {
         d = PyEval_GetLocals();
-        if (d == NULL) {
-            if (!PyErr_Occurred())
-                PyErr_SetString(PyExc_SystemError,
-                                "vars(): no locals!?");
-        }
-        else
-            Py_INCREF(d);
+        if (d == NULL)
+            return NULL;
+        Py_INCREF(d);
     }
     else {
-        _Py_IDENTIFIER(__dict__);
         d = _PyObject_GetAttrId(v, &PyId___dict__);
         if (d == NULL) {
             PyErr_SetString(PyExc_TypeError,
diff --git a/Python/ceval.c b/Python/ceval.c
index fcc1c24..e2e882b 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1247,7 +1247,6 @@
                    a try: finally: block uninterruptible. */
                 goto fast_next_opcode;
             }
-            tstate->tick_counter++;
 #ifdef WITH_TSC
             ticked = 1;
 #endif
@@ -1841,8 +1840,9 @@
         }
 
         TARGET(PRINT_EXPR) {
+            _Py_IDENTIFIER(displayhook);
             PyObject *value = POP();
-            PyObject *hook = PySys_GetObject("displayhook");
+            PyObject *hook = _PySys_GetObjectId(&PyId_displayhook);
             PyObject *res;
             if (hook == NULL) {
                 PyErr_SetString(PyExc_RuntimeError,
@@ -2162,7 +2162,7 @@
             }
             else {
                 v = PyObject_GetItem(locals, name);
-                if (v == NULL && PyErr_Occurred()) {
+                if (v == NULL && _PyErr_OCCURRED()) {
                     if (!PyErr_ExceptionMatches(PyExc_KeyError))
                         goto error;
                     PyErr_Clear();
@@ -2207,7 +2207,7 @@
                                        (PyDictObject *)f->f_builtins,
                                        name);
                 if (v == NULL) {
-                    if (!PyErr_Occurred())
+                    if (!_PyErr_OCCURRED())
                         format_exc_check_arg(PyExc_NameError,
                                              NAME_ERROR_MSG, name);
                     goto error;
@@ -2473,7 +2473,9 @@
         TARGET(IMPORT_STAR) {
             PyObject *from = POP(), *locals;
             int err;
-            PyFrame_FastToLocals(f);
+            if (PyFrame_FastToLocalsWithError(f) < 0)
+                goto error;
+
             locals = f->f_locals;
             if (locals == NULL) {
                 PyErr_SetString(PyExc_SystemError,
@@ -2715,7 +2717,7 @@
         }
 
         TARGET(WITH_CLEANUP) {
-            /* At the top of the stack are 1-3 values indicating
+            /* At the top of the stack are 1-6 values indicating
                how/why we entered the finally clause:
                - TOP = None
                - (TOP, SECOND) = (WHY_{RETURN,CONTINUE}), retval
@@ -2728,9 +2730,9 @@
                otherwise we must call
                  EXIT(None, None, None)
 
-               In the first two cases, we remove EXIT from the
+               In the first three cases, we remove EXIT from the
                stack, leaving the rest in the same order.  In the
-               third case, we shift the bottom 3 values of the
+               fourth case, we shift the bottom 3 values of the
                stack down, and replace the empty spot with NULL.
 
                In addition, if the stack represents an exception,
@@ -4006,9 +4008,15 @@
 PyEval_GetLocals(void)
 {
     PyFrameObject *current_frame = PyEval_GetFrame();
-    if (current_frame == NULL)
+    if (current_frame == NULL) {
+        PyErr_SetString(PyExc_SystemError, "frame does not exist");
         return NULL;
-    PyFrame_FastToLocals(current_frame);
+    }
+
+    if (PyFrame_FastToLocalsWithError(current_frame) < 0)
+        return NULL;
+
+    assert(current_frame->f_locals != NULL);
     return current_frame->f_locals;
 }
 
@@ -4018,8 +4026,9 @@
     PyFrameObject *current_frame = PyEval_GetFrame();
     if (current_frame == NULL)
         return NULL;
-    else
-        return current_frame->f_globals;
+
+    assert(current_frame->f_globals != NULL);
+    return current_frame->f_globals;
 }
 
 PyFrameObject *
diff --git a/Python/codecs.c b/Python/codecs.c
index cb9f0d8..c541ba0 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -441,7 +441,7 @@
         return -1;
     }
     return PyDict_SetItemString(interp->codec_error_registry,
-                                (char *)name, error);
+                                name, error);
 }
 
 /* Lookup the error handling callback function registered under the
@@ -457,7 +457,7 @@
 
     if (name==NULL)
         name = "strict";
-    handler = PyDict_GetItemString(interp->codec_error_registry, (char *)name);
+    handler = PyDict_GetItemString(interp->codec_error_registry, name);
     if (!handler)
         PyErr_Format(PyExc_LookupError, "unknown error handler name '%.400s'", name);
     else
diff --git a/Python/compile.c b/Python/compile.c
index 160c6fc..8b00211 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -94,6 +94,7 @@
     COMPILER_SCOPE_MODULE,
     COMPILER_SCOPE_CLASS,
     COMPILER_SCOPE_FUNCTION,
+    COMPILER_SCOPE_LAMBDA,
     COMPILER_SCOPE_COMPREHENSION,
 };
 
@@ -200,6 +201,7 @@
                                 expr_ty starargs,
                                 expr_ty kwargs);
 static int compiler_try_except(struct compiler *, stmt_ty);
+static int compiler_set_qualname(struct compiler *);
 
 static PyCodeObject *assemble(struct compiler *, int addNone);
 static PyObject *__doc__;
@@ -622,6 +624,11 @@
     if (compiler_use_new_block(c) == NULL)
         return 0;
 
+    if (u->u_scope_type != COMPILER_SCOPE_MODULE) {
+        if (!compiler_set_qualname(c))
+            return 0;
+    }
+
     return 1;
 }
 
@@ -649,57 +656,77 @@
 
 }
 
-static PyObject *
-compiler_scope_qualname(struct compiler *c)
+static int
+compiler_set_qualname(struct compiler *c)
 {
-    Py_ssize_t stack_size, i;
     _Py_static_string(dot, ".");
-    _Py_static_string(locals, "<locals>");
-    struct compiler_unit *u;
-    PyObject *capsule, *name, *seq, *dot_str, *locals_str;
+    _Py_static_string(dot_locals, ".<locals>");
+    Py_ssize_t stack_size;
+    struct compiler_unit *u = c->u;
+    PyObject *name, *base, *dot_str, *dot_locals_str;
 
-    u = c->u;
-    if (u->u_qualname != NULL) {
-        Py_INCREF(u->u_qualname);
-        return u->u_qualname;
-    }
-
-    seq = PyList_New(0);
-    if (seq == NULL)
-        return NULL;
-
+    base = NULL;
     stack_size = PyList_GET_SIZE(c->c_stack);
-    for (i = 0; i < stack_size; i++) {
-        capsule = PyList_GET_ITEM(c->c_stack, i);
-        u = (struct compiler_unit *)PyCapsule_GetPointer(capsule, COMPILER_CAPSULE_NAME_COMPILER_UNIT);
-        assert(u);
-        if (u->u_scope_type == COMPILER_SCOPE_MODULE)
-            continue;
-        if (PyList_Append(seq, u->u_name))
-            goto _error;
-        if (u->u_scope_type == COMPILER_SCOPE_FUNCTION) {
-            locals_str = _PyUnicode_FromId(&locals);
-            if (locals_str == NULL)
-                goto _error;
-            if (PyList_Append(seq, locals_str))
-                goto _error;
+    assert(stack_size >= 1);
+    if (stack_size > 1) {
+        int scope, force_global = 0;
+        struct compiler_unit *parent;
+        PyObject *mangled, *capsule;
+
+        capsule = PyList_GET_ITEM(c->c_stack, stack_size - 1);
+        parent = (struct compiler_unit *)PyCapsule_GetPointer(capsule, COMPILER_CAPSULE_NAME_COMPILER_UNIT);
+        assert(parent);
+
+        if (u->u_scope_type == COMPILER_SCOPE_FUNCTION || u->u_scope_type == COMPILER_SCOPE_CLASS) {
+            assert(u->u_name);
+            mangled = _Py_Mangle(parent->u_private, u->u_name);
+            if (!mangled)
+                return 0;
+            scope = PyST_GetScope(parent->u_ste, mangled);
+            Py_DECREF(mangled);
+            assert(scope != GLOBAL_IMPLICIT);
+            if (scope == GLOBAL_EXPLICIT)
+                force_global = 1;
+        }
+
+        if (!force_global) {
+            if (parent->u_scope_type == COMPILER_SCOPE_FUNCTION
+                || parent->u_scope_type == COMPILER_SCOPE_LAMBDA) {
+                dot_locals_str = _PyUnicode_FromId(&dot_locals);
+                if (dot_locals_str == NULL)
+                    return 0;
+                base = PyUnicode_Concat(parent->u_qualname, dot_locals_str);
+                if (base == NULL)
+                    return 0;
+            }
+            else {
+                Py_INCREF(parent->u_qualname);
+                base = parent->u_qualname;
+            }
         }
     }
-    u = c->u;
-    if (PyList_Append(seq, u->u_name))
-        goto _error;
-    dot_str = _PyUnicode_FromId(&dot);
-    if (dot_str == NULL)
-        goto _error;
-    name = PyUnicode_Join(dot_str, seq);
-    Py_DECREF(seq);
-    u->u_qualname = name;
-    Py_XINCREF(name);
-    return name;
 
-_error:
-    Py_XDECREF(seq);
-    return NULL;
+    if (base != NULL) {
+        dot_str = _PyUnicode_FromId(&dot);
+        if (dot_str == NULL) {
+            Py_DECREF(base);
+            return 0;
+        }
+        name = PyUnicode_Concat(base, dot_str);
+        Py_DECREF(base);
+        if (name == NULL)
+            return 0;
+        PyUnicode_Append(&name, u->u_name);
+        if (name == NULL)
+            return 0;
+    }
+    else {
+        Py_INCREF(u->u_name);
+        name = u->u_name;
+    }
+    u->u_qualname = name;
+
+    return 1;
 }
 
 /* Allocate a new block and return a pointer to it.
@@ -1649,9 +1676,10 @@
         VISIT_IN_SCOPE(c, stmt, st);
     }
     co = assemble(c, 1);
-    qualname = compiler_scope_qualname(c);
+    qualname = c->u->u_qualname;
+    Py_INCREF(qualname);
     compiler_exit_scope(c);
-    if (qualname == NULL || co == NULL) {
+    if (co == NULL) {
         Py_XDECREF(qualname);
         Py_XDECREF(co);
         return 0;
@@ -1721,14 +1749,8 @@
             return 0;
         }
         Py_DECREF(str);
-        /* store the __qualname__ */
-        str = compiler_scope_qualname(c);
-        if (!str) {
-            compiler_exit_scope(c);
-            return 0;
-        }
-        ADDOP_O(c, LOAD_CONST, str, consts);
-        Py_DECREF(str);
+        assert(c->u->u_qualname);
+        ADDOP_O(c, LOAD_CONST, c->u->u_qualname, consts);
         str = PyUnicode_InternFromString("__qualname__");
         if (!str || !compiler_nameop(c, str, Store)) {
             Py_XDECREF(str);
@@ -1750,6 +1772,10 @@
             }
             i = compiler_lookup_arg(c->u->u_cellvars, str);
             Py_DECREF(str);
+            if (i < 0) {
+                compiler_exit_scope(c);
+                return 0;
+            }
             assert(i == 0);
             /* Return the cell where to store __class__ */
             ADDOP_I(c, LOAD_CLOSURE, i);
@@ -1843,7 +1869,7 @@
         if (res < 0) return 0;
         kw_default_count = res;
     }
-    if (!compiler_enter_scope(c, name, COMPILER_SCOPE_FUNCTION,
+    if (!compiler_enter_scope(c, name, COMPILER_SCOPE_LAMBDA,
                               (void *)e, e->lineno))
         return 0;
 
@@ -1862,9 +1888,10 @@
         ADDOP_IN_SCOPE(c, RETURN_VALUE);
     }
     co = assemble(c, 1);
-    qualname = compiler_scope_qualname(c);
+    qualname = c->u->u_qualname;
+    Py_INCREF(qualname);
     compiler_exit_scope(c);
-    if (qualname == NULL || co == NULL)
+    if (co == NULL)
         return 0;
 
     arglength = asdl_seq_LEN(args->defaults);
@@ -3139,9 +3166,10 @@
     }
 
     co = assemble(c, 1);
-    qualname = compiler_scope_qualname(c);
+    qualname = c->u->u_qualname;
+    Py_INCREF(qualname);
     compiler_exit_scope(c);
-    if (qualname == NULL || co == NULL)
+    if (co == NULL)
         goto error;
 
     if (!compiler_make_closure(c, co, 0, qualname))
diff --git a/Python/errors.c b/Python/errors.c
index b674480..90dc729 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -20,6 +20,9 @@
 extern "C" {
 #endif
 
+_Py_IDENTIFIER(builtins);
+_Py_IDENTIFIER(stderr);
+
 
 void
 PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback)
@@ -844,7 +847,7 @@
 
     PyErr_Fetch(&t, &v, &tb);
 
-    f = PySys_GetObject("stderr");
+    f = _PySys_GetObjectId(&PyId_stderr);
     if (f == NULL || f == Py_None)
         goto done;
 
@@ -878,7 +881,7 @@
             goto done;
     }
     else {
-        if (PyUnicode_CompareWithASCIIString(moduleName, "builtins") != 0) {
+        if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0) {
             if (PyFile_WriteObject(moduleName, f, Py_PRINT_RAW) < 0)
                 goto done;
             if (PyFile_WriteString(".", f) < 0)
@@ -1014,7 +1017,7 @@
    XXX The functionality of this function is quite similar to the
    functionality in tb_displayline() in traceback.c. */
 
-PyObject *
+static PyObject *
 err_programtext(FILE *fp, int lineno)
 {
     int i;
diff --git a/Python/fileutils.c b/Python/fileutils.c
index 074888e..eecbb3b 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -566,7 +566,7 @@
 
 #endif
 
-int
+static int
 get_inheritable(int fd, int raise)
 {
 #ifdef MS_WINDOWS
diff --git a/Python/getargs.c b/Python/getargs.c
index 2c2628f..f313a37 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -376,7 +376,7 @@
                           "argument %" PY_FORMAT_SIZE_T "d", iarg);
             i = 0;
             p += strlen(p);
-            while (levels[i] > 0 && i < 32 && (int)(p-buf) < 220) {
+            while (i < 32 && levels[i] > 0 && (int)(p-buf) < 220) {
                 PyOS_snprintf(p, sizeof(buf) - (p - buf),
                               ", item %d", levels[i]-1);
                 p += strlen(p);
@@ -1590,7 +1590,6 @@
                                 "keywords must be strings");
                 return cleanreturn(0, &freelist);
             }
-            /* check that _PyUnicode_AsString() result is not NULL */
             for (i = 0; i < len; i++) {
                 if (!PyUnicode_CompareWithASCIIString(key, kwlist[i])) {
                     match = 1;
diff --git a/Python/getcopyright.c b/Python/getcopyright.c
index 2d26787..2b19622 100644
--- a/Python/getcopyright.c
+++ b/Python/getcopyright.c
@@ -2,7 +2,7 @@
 
 #include "Python.h"
 
-static char cprt[] =
+static const char cprt[] =
 "\
 Copyright (c) 2001-2013 Python Software Foundation.\n\
 All Rights Reserved.\n\
diff --git a/Python/import.c b/Python/import.c
index 1a162ee..c96106f 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -517,7 +517,7 @@
 }
 
 int
-_PyImport_FixupBuiltin(PyObject *mod, char *name)
+_PyImport_FixupBuiltin(PyObject *mod, const char *name)
 {
     int res;
     PyObject *nameobj;
@@ -656,22 +656,23 @@
  * interface.  The other two exist primarily for backward compatibility.
  */
 PyObject *
-PyImport_ExecCodeModule(char *name, PyObject *co)
+PyImport_ExecCodeModule(const char *name, PyObject *co)
 {
     return PyImport_ExecCodeModuleWithPathnames(
         name, co, (char *)NULL, (char *)NULL);
 }
 
 PyObject *
-PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
+PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)
 {
     return PyImport_ExecCodeModuleWithPathnames(
         name, co, pathname, (char *)NULL);
 }
 
 PyObject *
-PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
-                                     char *cpathname)
+PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co,
+                                     const char *pathname,
+                                     const char *cpathname)
 {
     PyObject *m = NULL;
     PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
@@ -1019,7 +1020,7 @@
     size = p->size;
     if (size < 0)
         size = -size;
-    return PyMarshal_ReadObjectFromString((char *)p->code, size);
+    return PyMarshal_ReadObjectFromString((const char *)p->code, size);
 }
 
 static PyObject *
@@ -1071,7 +1072,7 @@
     ispackage = (size < 0);
     if (ispackage)
         size = -size;
-    co = PyMarshal_ReadObjectFromString((char *)p->code, size);
+    co = PyMarshal_ReadObjectFromString((const char *)p->code, size);
     if (co == NULL)
         return -1;
     if (!PyCode_Check(co)) {
@@ -1113,7 +1114,7 @@
 }
 
 int
-PyImport_ImportFrozenModule(char *name)
+PyImport_ImportFrozenModule(const char *name)
 {
     PyObject *nameobj;
     int ret;
diff --git a/Python/importlib.h b/Python/importlib.h
index 78e9855..860b553 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -1,1630 +1,1533 @@
 /* Auto-generated by Modules/_freeze_importlib.c */
 const unsigned char _Py_M__importlib[] = {
     99,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,
-    0,64,0,0,0,115,72,4,0,0,100,0,0,90,0,0,
-    100,145,0,90,1,0,100,4,0,100,5,0,132,0,0,90,
+    0,64,0,0,0,115,84,4,0,0,100,0,0,90,0,0,
+    100,147,0,90,1,0,100,4,0,100,5,0,132,0,0,90,
     2,0,100,6,0,100,7,0,132,0,0,90,3,0,100,8,
     0,100,9,0,132,0,0,90,4,0,100,10,0,100,11,0,
     132,0,0,90,5,0,100,12,0,100,13,0,132,0,0,90,
     6,0,100,14,0,100,15,0,132,0,0,90,7,0,100,16,
     0,100,17,0,132,0,0,90,8,0,100,18,0,100,19,0,
-    132,0,0,90,9,0,100,20,0,100,21,0,100,22,0,132,
-    1,0,90,10,0,100,23,0,100,24,0,132,0,0,90,11,
-    0,101,12,0,101,11,0,106,13,0,131,1,0,90,14,0,
-    105,0,0,90,15,0,105,0,0,90,16,0,71,100,25,0,
-    100,26,0,132,0,0,100,26,0,101,17,0,131,3,0,90,
-    18,0,71,100,27,0,100,28,0,132,0,0,100,28,0,131,
-    2,0,90,19,0,71,100,29,0,100,30,0,132,0,0,100,
-    30,0,131,2,0,90,20,0,100,31,0,100,32,0,132,0,
+    132,0,0,90,9,0,100,20,0,100,21,0,132,0,0,90,
+    10,0,100,22,0,100,23,0,100,24,0,132,1,0,90,11,
+    0,100,25,0,100,26,0,132,0,0,90,12,0,101,13,0,
+    101,12,0,106,14,0,131,1,0,90,15,0,105,0,0,90,
+    16,0,105,0,0,90,17,0,71,100,27,0,100,28,0,132,
+    0,0,100,28,0,101,18,0,131,3,0,90,19,0,71,100,
+    29,0,100,30,0,132,0,0,100,30,0,131,2,0,90,20,
+    0,71,100,31,0,100,32,0,132,0,0,100,32,0,131,2,
     0,90,21,0,100,33,0,100,34,0,132,0,0,90,22,0,
-    100,35,0,100,36,0,132,0,0,90,23,0,100,37,0,106,
-    24,0,100,38,0,100,39,0,131,2,0,100,40,0,23,90,
-    25,0,101,26,0,106,27,0,101,25,0,100,39,0,131,2,
-    0,90,28,0,100,41,0,90,29,0,100,42,0,103,1,0,
-    90,30,0,100,43,0,103,1,0,90,31,0,100,44,0,103,
-    1,0,90,32,0,100,45,0,100,46,0,100,47,0,132,1,
-    0,90,33,0,100,48,0,100,49,0,132,0,0,90,34,0,
+    100,35,0,100,36,0,132,0,0,90,23,0,100,37,0,100,
+    38,0,132,0,0,90,24,0,100,39,0,106,25,0,100,40,
+    0,100,41,0,131,2,0,100,42,0,23,90,26,0,101,27,
+    0,106,28,0,101,26,0,100,41,0,131,2,0,90,29,0,
+    100,43,0,90,30,0,100,44,0,103,1,0,90,31,0,100,
+    45,0,103,1,0,90,32,0,100,46,0,103,1,0,90,33,
+    0,100,47,0,100,48,0,100,49,0,132,1,0,90,34,0,
     100,50,0,100,51,0,132,0,0,90,35,0,100,52,0,100,
-    53,0,132,0,0,90,36,0,100,54,0,100,55,0,100,56,
-    0,100,57,0,132,0,1,90,37,0,71,100,58,0,100,59,
-    0,132,0,0,100,59,0,131,2,0,90,38,0,71,100,60,
-    0,100,61,0,132,0,0,100,61,0,101,38,0,131,3,0,
-    90,39,0,100,62,0,100,63,0,100,64,0,100,65,0,132,
-    0,1,90,40,0,100,66,0,100,67,0,132,0,0,90,41,
+    53,0,132,0,0,90,36,0,100,54,0,100,55,0,132,0,
+    0,90,37,0,100,56,0,100,57,0,100,58,0,100,59,0,
+    132,0,1,90,38,0,71,100,60,0,100,61,0,132,0,0,
+    100,61,0,131,2,0,90,39,0,71,100,62,0,100,63,0,
+    132,0,0,100,63,0,101,39,0,131,3,0,90,40,0,100,
+    64,0,100,65,0,100,66,0,100,67,0,132,0,1,90,41,
     0,100,68,0,100,69,0,132,0,0,90,42,0,100,70,0,
     100,71,0,132,0,0,90,43,0,100,72,0,100,73,0,132,
     0,0,90,44,0,100,74,0,100,75,0,132,0,0,90,45,
     0,100,76,0,100,77,0,132,0,0,90,46,0,100,78,0,
     100,79,0,132,0,0,90,47,0,100,80,0,100,81,0,132,
-    0,0,90,48,0,100,45,0,100,45,0,100,45,0,100,82,
-    0,100,83,0,132,3,0,90,49,0,100,45,0,100,45,0,
-    100,45,0,100,84,0,100,85,0,132,3,0,90,50,0,100,
-    86,0,100,86,0,100,87,0,100,88,0,132,2,0,90,51,
-    0,100,89,0,100,90,0,132,0,0,90,52,0,71,100,91,
-    0,100,92,0,132,0,0,100,92,0,131,2,0,90,53,0,
-    71,100,93,0,100,94,0,132,0,0,100,94,0,131,2,0,
-    90,54,0,71,100,95,0,100,96,0,132,0,0,100,96,0,
-    131,2,0,90,55,0,71,100,97,0,100,98,0,132,0,0,
-    100,98,0,131,2,0,90,56,0,71,100,99,0,100,100,0,
-    132,0,0,100,100,0,101,56,0,131,3,0,90,57,0,71,
-    100,101,0,100,102,0,132,0,0,100,102,0,131,2,0,90,
-    58,0,71,100,103,0,100,104,0,132,0,0,100,104,0,101,
-    58,0,101,57,0,131,4,0,90,59,0,71,100,105,0,100,
-    106,0,132,0,0,100,106,0,101,58,0,101,56,0,131,4,
-    0,90,60,0,103,0,0,90,61,0,71,100,107,0,100,108,
-    0,132,0,0,100,108,0,131,2,0,90,62,0,71,100,109,
-    0,100,110,0,132,0,0,100,110,0,131,2,0,90,63,0,
-    71,100,111,0,100,112,0,132,0,0,100,112,0,131,2,0,
-    90,64,0,71,100,113,0,100,114,0,132,0,0,100,114,0,
-    131,2,0,90,65,0,71,100,115,0,100,116,0,132,0,0,
-    100,116,0,131,2,0,90,66,0,71,100,117,0,100,118,0,
-    132,0,0,100,118,0,131,2,0,90,67,0,100,119,0,100,
-    120,0,132,0,0,90,68,0,100,121,0,100,122,0,132,0,
+    0,0,90,48,0,100,82,0,100,83,0,132,0,0,90,49,
+    0,100,47,0,100,47,0,100,47,0,100,84,0,100,85,0,
+    132,3,0,90,50,0,100,47,0,100,47,0,100,47,0,100,
+    86,0,100,87,0,132,3,0,90,51,0,100,88,0,100,88,
+    0,100,89,0,100,90,0,132,2,0,90,52,0,100,91,0,
+    100,92,0,132,0,0,90,53,0,71,100,93,0,100,94,0,
+    132,0,0,100,94,0,131,2,0,90,54,0,71,100,95,0,
+    100,96,0,132,0,0,100,96,0,131,2,0,90,55,0,71,
+    100,97,0,100,98,0,132,0,0,100,98,0,131,2,0,90,
+    56,0,71,100,99,0,100,100,0,132,0,0,100,100,0,131,
+    2,0,90,57,0,71,100,101,0,100,102,0,132,0,0,100,
+    102,0,101,57,0,131,3,0,90,58,0,71,100,103,0,100,
+    104,0,132,0,0,100,104,0,131,2,0,90,59,0,71,100,
+    105,0,100,106,0,132,0,0,100,106,0,101,59,0,101,58,
+    0,131,4,0,90,60,0,71,100,107,0,100,108,0,132,0,
+    0,100,108,0,101,59,0,101,57,0,131,4,0,90,61,0,
+    103,0,0,90,62,0,71,100,109,0,100,110,0,132,0,0,
+    100,110,0,131,2,0,90,63,0,71,100,111,0,100,112,0,
+    132,0,0,100,112,0,131,2,0,90,64,0,71,100,113,0,
+    100,114,0,132,0,0,100,114,0,131,2,0,90,65,0,71,
+    100,115,0,100,116,0,132,0,0,100,116,0,131,2,0,90,
+    66,0,71,100,117,0,100,118,0,132,0,0,100,118,0,131,
+    2,0,90,67,0,71,100,119,0,100,120,0,132,0,0,100,
+    120,0,131,2,0,90,68,0,100,121,0,100,122,0,132,0,
     0,90,69,0,100,123,0,100,124,0,132,0,0,90,70,0,
-    100,125,0,90,71,0,101,71,0,100,126,0,23,90,72,0,
-    100,127,0,100,128,0,132,0,0,90,73,0,100,129,0,100,
-    130,0,132,0,0,90,74,0,100,45,0,100,86,0,100,131,
-    0,100,132,0,132,2,0,90,75,0,100,133,0,100,134,0,
-    132,0,0,90,76,0,100,135,0,100,136,0,132,0,0,90,
-    77,0,100,137,0,100,138,0,132,0,0,90,78,0,100,45,
-    0,100,45,0,102,0,0,100,86,0,100,139,0,100,140,0,
-    132,4,0,90,79,0,100,141,0,100,142,0,132,0,0,90,
-    80,0,100,143,0,100,144,0,132,0,0,90,81,0,100,45,
-    0,83,40,146,0,0,0,117,83,1,0,0,67,111,114,101,
-    32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,
-    111,102,32,105,109,112,111,114,116,46,10,10,84,104,105,115,
-    32,109,111,100,117,108,101,32,105,115,32,78,79,84,32,109,
-    101,97,110,116,32,116,111,32,98,101,32,100,105,114,101,99,
-    116,108,121,32,105,109,112,111,114,116,101,100,33,32,73,116,
-    32,104,97,115,32,98,101,101,110,32,100,101,115,105,103,110,
-    101,100,32,115,117,99,104,10,116,104,97,116,32,105,116,32,
-    99,97,110,32,98,101,32,98,111,111,116,115,116,114,97,112,
-    112,101,100,32,105,110,116,111,32,80,121,116,104,111,110,32,
-    97,115,32,116,104,101,32,105,109,112,108,101,109,101,110,116,
-    97,116,105,111,110,32,111,102,32,105,109,112,111,114,116,46,
-    32,65,115,10,115,117,99,104,32,105,116,32,114,101,113,117,
-    105,114,101,115,32,116,104,101,32,105,110,106,101,99,116,105,
-    111,110,32,111,102,32,115,112,101,99,105,102,105,99,32,109,
-    111,100,117,108,101,115,32,97,110,100,32,97,116,116,114,105,
-    98,117,116,101,115,32,105,110,32,111,114,100,101,114,32,116,
-    111,10,119,111,114,107,46,32,79,110,101,32,115,104,111,117,
-    108,100,32,117,115,101,32,105,109,112,111,114,116,108,105,98,
-    32,97,115,32,116,104,101,32,112,117,98,108,105,99,45,102,
-    97,99,105,110,103,32,118,101,114,115,105,111,110,32,111,102,
-    32,116,104,105,115,32,109,111,100,117,108,101,46,10,10,244,
-    3,0,0,0,119,105,110,244,6,0,0,0,99,121,103,119,
-    105,110,244,6,0,0,0,100,97,114,119,105,110,99,0,0,
+    100,125,0,100,126,0,132,0,0,90,71,0,100,127,0,90,
+    72,0,101,72,0,100,128,0,23,90,73,0,100,129,0,100,
+    130,0,132,0,0,90,74,0,100,131,0,100,132,0,132,0,
+    0,90,75,0,100,47,0,100,88,0,100,133,0,100,134,0,
+    132,2,0,90,76,0,100,135,0,100,136,0,132,0,0,90,
+    77,0,100,137,0,100,138,0,132,0,0,90,78,0,100,139,
+    0,100,140,0,132,0,0,90,79,0,100,47,0,100,47,0,
+    102,0,0,100,88,0,100,141,0,100,142,0,132,4,0,90,
+    80,0,100,143,0,100,144,0,132,0,0,90,81,0,100,145,
+    0,100,146,0,132,0,0,90,82,0,100,47,0,83,41,148,
+    97,83,1,0,0,67,111,114,101,32,105,109,112,108,101,109,
+    101,110,116,97,116,105,111,110,32,111,102,32,105,109,112,111,
+    114,116,46,10,10,84,104,105,115,32,109,111,100,117,108,101,
+    32,105,115,32,78,79,84,32,109,101,97,110,116,32,116,111,
+    32,98,101,32,100,105,114,101,99,116,108,121,32,105,109,112,
+    111,114,116,101,100,33,32,73,116,32,104,97,115,32,98,101,
+    101,110,32,100,101,115,105,103,110,101,100,32,115,117,99,104,
+    10,116,104,97,116,32,105,116,32,99,97,110,32,98,101,32,
+    98,111,111,116,115,116,114,97,112,112,101,100,32,105,110,116,
+    111,32,80,121,116,104,111,110,32,97,115,32,116,104,101,32,
+    105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,
+    102,32,105,109,112,111,114,116,46,32,65,115,10,115,117,99,
+    104,32,105,116,32,114,101,113,117,105,114,101,115,32,116,104,
+    101,32,105,110,106,101,99,116,105,111,110,32,111,102,32,115,
+    112,101,99,105,102,105,99,32,109,111,100,117,108,101,115,32,
+    97,110,100,32,97,116,116,114,105,98,117,116,101,115,32,105,
+    110,32,111,114,100,101,114,32,116,111,10,119,111,114,107,46,
+    32,79,110,101,32,115,104,111,117,108,100,32,117,115,101,32,
+    105,109,112,111,114,116,108,105,98,32,97,115,32,116,104,101,
+    32,112,117,98,108,105,99,45,102,97,99,105,110,103,32,118,
+    101,114,115,105,111,110,32,111,102,32,116,104,105,115,32,109,
+    111,100,117,108,101,46,10,10,218,3,119,105,110,218,6,99,
+    121,103,119,105,110,218,6,100,97,114,119,105,110,99,0,0,
     0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,
     0,0,115,49,0,0,0,116,0,0,106,1,0,106,2,0,
     116,3,0,131,1,0,114,33,0,100,1,0,100,2,0,132,
     0,0,125,0,0,110,12,0,100,3,0,100,2,0,132,0,
-    0,125,0,0,124,0,0,83,40,4,0,0,0,78,99,0,
-    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,83,
-    0,0,0,115,13,0,0,0,100,1,0,116,0,0,106,1,
-    0,107,6,0,83,40,2,0,0,0,117,53,0,0,0,84,
-    114,117,101,32,105,102,32,102,105,108,101,110,97,109,101,115,
-    32,109,117,115,116,32,98,101,32,99,104,101,99,107,101,100,
-    32,99,97,115,101,45,105,110,115,101,110,115,105,116,105,118,
-    101,108,121,46,115,12,0,0,0,80,89,84,72,79,78,67,
-    65,83,69,79,75,40,2,0,0,0,244,3,0,0,0,95,
-    111,115,116,7,0,0,0,101,110,118,105,114,111,110,168,0,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,245,29,0,
-    0,0,60,102,114,111,122,101,110,32,105,109,112,111,114,116,
-    108,105,98,46,95,98,111,111,116,115,116,114,97,112,62,244,
-    11,0,0,0,95,114,101,108,97,120,95,99,97,115,101,30,
-    0,0,0,115,2,0,0,0,0,2,117,37,0,0,0,95,
-    109,97,107,101,95,114,101,108,97,120,95,99,97,115,101,46,
-    60,108,111,99,97,108,115,62,46,95,114,101,108,97,120,95,
-    99,97,115,101,99,0,0,0,0,0,0,0,0,0,0,0,
-    0,1,0,0,0,83,0,0,0,115,4,0,0,0,100,1,
-    0,83,40,2,0,0,0,117,53,0,0,0,84,114,117,101,
-    32,105,102,32,102,105,108,101,110,97,109,101,115,32,109,117,
-    115,116,32,98,101,32,99,104,101,99,107,101,100,32,99,97,
-    115,101,45,105,110,115,101,110,115,105,116,105,118,101,108,121,
-    46,70,114,4,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,6,0,0,0,
-    34,0,0,0,115,2,0,0,0,0,2,40,4,0,0,0,
-    244,3,0,0,0,115,121,115,244,8,0,0,0,112,108,97,
-    116,102,111,114,109,244,10,0,0,0,115,116,97,114,116,115,
-    119,105,116,104,244,27,0,0,0,95,67,65,83,69,95,73,
-    78,83,69,78,83,73,84,73,86,69,95,80,76,65,84,70,
-    79,82,77,83,40,1,0,0,0,114,6,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,244,16,0,
-    0,0,95,109,97,107,101,95,114,101,108,97,120,95,99,97,
-    115,101,28,0,0,0,115,8,0,0,0,0,1,18,1,15,
-    4,12,3,114,11,0,0,0,99,1,0,0,0,0,0,0,
-    0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,
-    0,0,116,0,0,124,0,0,131,1,0,100,1,0,64,106,
-    1,0,100,2,0,100,3,0,131,2,0,83,40,4,0,0,
-    0,117,42,0,0,0,67,111,110,118,101,114,116,32,97,32,
-    51,50,45,98,105,116,32,105,110,116,101,103,101,114,32,116,
-    111,32,108,105,116,116,108,101,45,101,110,100,105,97,110,46,
-    108,3,0,0,0,255,127,255,127,3,0,233,4,0,0,0,
-    244,6,0,0,0,108,105,116,116,108,101,40,2,0,0,0,
-    244,3,0,0,0,105,110,116,244,8,0,0,0,116,111,95,
-    98,121,116,101,115,40,1,0,0,0,244,1,0,0,0,120,
-    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,
-    7,0,0,0,95,119,95,108,111,110,103,40,0,0,0,115,
-    2,0,0,0,0,2,114,17,0,0,0,99,1,0,0,0,
-    0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,
-    115,16,0,0,0,116,0,0,106,1,0,124,0,0,100,1,
-    0,131,2,0,83,40,2,0,0,0,117,47,0,0,0,67,
-    111,110,118,101,114,116,32,52,32,98,121,116,101,115,32,105,
-    110,32,108,105,116,116,108,101,45,101,110,100,105,97,110,32,
-    116,111,32,97,110,32,105,110,116,101,103,101,114,46,114,13,
-    0,0,0,40,2,0,0,0,114,14,0,0,0,244,10,0,
-    0,0,102,114,111,109,95,98,121,116,101,115,40,1,0,0,
-    0,116,9,0,0,0,105,110,116,95,98,121,116,101,115,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,7,
-    0,0,0,95,114,95,108,111,110,103,45,0,0,0,115,2,
-    0,0,0,0,2,114,19,0,0,0,99,0,0,0,0,0,
-    0,0,0,1,0,0,0,3,0,0,0,71,0,0,0,115,
-    26,0,0,0,116,0,0,106,1,0,100,1,0,100,2,0,
-    132,0,0,124,0,0,68,131,1,0,131,1,0,83,40,3,
-    0,0,0,117,31,0,0,0,82,101,112,108,97,99,101,109,
-    101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,
-    106,111,105,110,40,41,46,99,1,0,0,0,0,0,0,0,
-    2,0,0,0,4,0,0,0,83,0,0,0,115,37,0,0,
-    0,103,0,0,124,0,0,93,27,0,125,1,0,124,1,0,
-    114,6,0,124,1,0,106,0,0,116,1,0,131,1,0,145,
-    2,0,113,6,0,83,114,4,0,0,0,40,2,0,0,0,
-    244,6,0,0,0,114,115,116,114,105,112,244,15,0,0,0,
-    112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,40,
-    2,0,0,0,244,2,0,0,0,46,48,244,4,0,0,0,
-    112,97,114,116,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,245,10,0,0,0,60,108,105,115,116,99,111,109,
-    112,62,52,0,0,0,115,2,0,0,0,9,1,117,30,0,
-    0,0,95,112,97,116,104,95,106,111,105,110,46,60,108,111,
-    99,97,108,115,62,46,60,108,105,115,116,99,111,109,112,62,
-    40,2,0,0,0,244,8,0,0,0,112,97,116,104,95,115,
-    101,112,244,4,0,0,0,106,111,105,110,40,1,0,0,0,
-    244,10,0,0,0,112,97,116,104,95,112,97,114,116,115,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,10,
-    0,0,0,95,112,97,116,104,95,106,111,105,110,50,0,0,
-    0,115,4,0,0,0,0,2,15,1,114,28,0,0,0,99,
-    1,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,
-    67,0,0,0,115,134,0,0,0,116,0,0,116,1,0,131,
-    1,0,100,1,0,107,2,0,114,52,0,124,0,0,106,2,
-    0,116,3,0,131,1,0,92,3,0,125,1,0,125,2,0,
-    125,3,0,124,1,0,124,3,0,102,2,0,83,120,69,0,
-    116,4,0,124,0,0,131,1,0,68,93,55,0,125,4,0,
-    124,4,0,116,1,0,107,6,0,114,65,0,124,0,0,106,
-    5,0,124,4,0,100,2,0,100,1,0,131,1,1,92,2,
-    0,125,1,0,125,3,0,124,1,0,124,3,0,102,2,0,
-    83,113,65,0,87,100,3,0,124,0,0,102,2,0,83,40,
-    4,0,0,0,117,32,0,0,0,82,101,112,108,97,99,101,
+    0,125,0,0,124,0,0,83,41,4,78,99,0,0,0,0,
+    0,0,0,0,0,0,0,0,2,0,0,0,83,0,0,0,
+    115,13,0,0,0,100,1,0,116,0,0,106,1,0,107,6,
+    0,83,41,2,122,53,84,114,117,101,32,105,102,32,102,105,
+    108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,32,
+    99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,115,
+    101,110,115,105,116,105,118,101,108,121,46,115,12,0,0,0,
+    80,89,84,72,79,78,67,65,83,69,79,75,41,2,218,3,
+    95,111,115,90,7,101,110,118,105,114,111,110,169,0,114,4,
+    0,0,0,114,4,0,0,0,250,29,60,102,114,111,122,101,
+    110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,
+    116,115,116,114,97,112,62,218,11,95,114,101,108,97,120,95,
+    99,97,115,101,30,0,0,0,115,2,0,0,0,0,2,122,
+    37,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,
+    101,46,60,108,111,99,97,108,115,62,46,95,114,101,108,97,
+    120,95,99,97,115,101,99,0,0,0,0,0,0,0,0,0,
+    0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0,
+    100,1,0,83,41,2,122,53,84,114,117,101,32,105,102,32,
+    102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,
+    101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,
+    110,115,101,110,115,105,116,105,118,101,108,121,46,70,114,4,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,6,0,0,0,34,0,0,0,
+    115,2,0,0,0,0,2,41,4,218,3,115,121,115,218,8,
+    112,108,97,116,102,111,114,109,218,10,115,116,97,114,116,115,
+    119,105,116,104,218,27,95,67,65,83,69,95,73,78,83,69,
+    78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77,
+    83,41,1,114,6,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,218,16,95,109,97,107,101,95,114,
+    101,108,97,120,95,99,97,115,101,28,0,0,0,115,8,0,
+    0,0,0,1,18,1,15,4,12,3,114,11,0,0,0,99,
+    1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,
+    67,0,0,0,115,26,0,0,0,116,0,0,124,0,0,131,
+    1,0,100,1,0,64,106,1,0,100,2,0,100,3,0,131,
+    2,0,83,41,4,122,42,67,111,110,118,101,114,116,32,97,
+    32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,32,
+    116,111,32,108,105,116,116,108,101,45,101,110,100,105,97,110,
+    46,108,3,0,0,0,255,127,255,127,3,0,233,4,0,0,
+    0,218,6,108,105,116,116,108,101,41,2,218,3,105,110,116,
+    218,8,116,111,95,98,121,116,101,115,41,1,218,1,120,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,7,
+    95,119,95,108,111,110,103,40,0,0,0,115,2,0,0,0,
+    0,2,114,17,0,0,0,99,1,0,0,0,0,0,0,0,
+    1,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0,
+    0,116,0,0,106,1,0,124,0,0,100,1,0,131,2,0,
+    83,41,2,122,47,67,111,110,118,101,114,116,32,52,32,98,
+    121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101,
+    110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101,
+    103,101,114,46,114,13,0,0,0,41,2,114,14,0,0,0,
+    218,10,102,114,111,109,95,98,121,116,101,115,41,1,90,9,
+    105,110,116,95,98,121,116,101,115,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,218,7,95,114,95,108,111,110,
+    103,45,0,0,0,115,2,0,0,0,0,2,114,19,0,0,
+    0,99,0,0,0,0,0,0,0,0,1,0,0,0,3,0,
+    0,0,71,0,0,0,115,26,0,0,0,116,0,0,106,1,
+    0,100,1,0,100,2,0,132,0,0,124,0,0,68,131,1,
+    0,131,1,0,83,41,3,122,31,82,101,112,108,97,99,101,
     109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,
-    46,115,112,108,105,116,40,41,46,233,1,0,0,0,116,8,
-    0,0,0,109,97,120,115,112,108,105,116,244,0,0,0,0,
-    40,6,0,0,0,244,3,0,0,0,108,101,110,114,21,0,
-    0,0,244,10,0,0,0,114,112,97,114,116,105,116,105,111,
-    110,114,25,0,0,0,244,8,0,0,0,114,101,118,101,114,
-    115,101,100,244,6,0,0,0,114,115,112,108,105,116,40,5,
-    0,0,0,244,4,0,0,0,112,97,116,104,116,5,0,0,
-    0,102,114,111,110,116,244,1,0,0,0,95,244,4,0,0,
-    0,116,97,105,108,114,16,0,0,0,114,4,0,0,0,114,
-    4,0,0,0,114,5,0,0,0,244,11,0,0,0,95,112,
-    97,116,104,95,115,112,108,105,116,56,0,0,0,115,16,0,
-    0,0,0,2,18,1,24,1,10,1,19,1,12,1,27,1,
-    14,1,114,38,0,0,0,99,2,0,0,0,0,0,0,0,
-    3,0,0,0,11,0,0,0,67,0,0,0,115,61,0,0,
-    0,121,19,0,116,0,0,106,1,0,124,0,0,131,1,0,
-    125,2,0,87,110,22,0,4,116,2,0,107,10,0,114,43,
-    0,1,1,1,100,1,0,83,89,110,1,0,88,124,2,0,
-    106,3,0,100,2,0,64,124,1,0,107,2,0,83,40,3,
-    0,0,0,117,49,0,0,0,84,101,115,116,32,119,104,101,
-    116,104,101,114,32,116,104,101,32,112,97,116,104,32,105,115,
-    32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,
-    111,100,101,32,116,121,112,101,46,70,105,0,240,0,0,40,
-    4,0,0,0,114,3,0,0,0,244,4,0,0,0,115,116,
-    97,116,244,7,0,0,0,79,83,69,114,114,111,114,244,7,
-    0,0,0,115,116,95,109,111,100,101,40,3,0,0,0,114,
-    35,0,0,0,244,4,0,0,0,109,111,100,101,116,9,0,
-    0,0,115,116,97,116,95,105,110,102,111,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,244,18,0,0,0,95,
-    112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,112,
-    101,68,0,0,0,115,10,0,0,0,0,2,3,1,19,1,
-    13,1,9,1,114,43,0,0,0,99,1,0,0,0,0,0,
-    0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,13,
-    0,0,0,116,0,0,124,0,0,100,1,0,131,2,0,83,
-    40,2,0,0,0,117,31,0,0,0,82,101,112,108,97,99,
+    46,106,111,105,110,40,41,46,99,1,0,0,0,0,0,0,
+    0,2,0,0,0,4,0,0,0,83,0,0,0,115,37,0,
+    0,0,103,0,0,124,0,0,93,27,0,125,1,0,124,1,
+    0,114,6,0,124,1,0,106,0,0,116,1,0,131,1,0,
+    145,2,0,113,6,0,83,114,4,0,0,0,41,2,218,6,
+    114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112,
+    97,114,97,116,111,114,115,41,2,218,2,46,48,218,4,112,
+    97,114,116,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,250,10,60,108,105,115,116,99,111,109,112,62,52,0,
+    0,0,115,2,0,0,0,9,1,122,30,95,112,97,116,104,
+    95,106,111,105,110,46,60,108,111,99,97,108,115,62,46,60,
+    108,105,115,116,99,111,109,112,62,41,2,218,8,112,97,116,
+    104,95,115,101,112,218,4,106,111,105,110,41,1,218,10,112,
+    97,116,104,95,112,97,114,116,115,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,218,10,95,112,97,116,104,95,
+    106,111,105,110,50,0,0,0,115,4,0,0,0,0,2,15,
+    1,114,28,0,0,0,99,1,0,0,0,0,0,0,0,5,
+    0,0,0,5,0,0,0,67,0,0,0,115,134,0,0,0,
+    116,0,0,116,1,0,131,1,0,100,1,0,107,2,0,114,
+    52,0,124,0,0,106,2,0,116,3,0,131,1,0,92,3,
+    0,125,1,0,125,2,0,125,3,0,124,1,0,124,3,0,
+    102,2,0,83,120,69,0,116,4,0,124,0,0,131,1,0,
+    68,93,55,0,125,4,0,124,4,0,116,1,0,107,6,0,
+    114,65,0,124,0,0,106,5,0,124,4,0,100,2,0,100,
+    1,0,131,1,1,92,2,0,125,1,0,125,3,0,124,1,
+    0,124,3,0,102,2,0,83,113,65,0,87,100,3,0,124,
+    0,0,102,2,0,83,41,4,122,32,82,101,112,108,97,99,
     101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,
-    104,46,105,115,102,105,108,101,46,105,0,128,0,0,40,1,
-    0,0,0,114,43,0,0,0,40,1,0,0,0,114,35,0,
+    104,46,115,112,108,105,116,40,41,46,233,1,0,0,0,90,
+    8,109,97,120,115,112,108,105,116,218,0,41,6,218,3,108,
+    101,110,114,21,0,0,0,218,10,114,112,97,114,116,105,116,
+    105,111,110,114,25,0,0,0,218,8,114,101,118,101,114,115,
+    101,100,218,6,114,115,112,108,105,116,41,5,218,4,112,97,
+    116,104,90,5,102,114,111,110,116,218,1,95,218,4,116,97,
+    105,108,114,16,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,5,0,0,0,218,11,95,112,97,116,104,95,115,112,
+    108,105,116,56,0,0,0,115,16,0,0,0,0,2,18,1,
+    24,1,10,1,19,1,12,1,27,1,14,1,114,38,0,0,
+    0,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,
+    0,0,67,0,0,0,115,13,0,0,0,116,0,0,106,1,
+    0,124,0,0,131,1,0,83,41,1,122,126,83,116,97,116,
+    32,116,104,101,32,112,97,116,104,46,10,10,32,32,32,32,
+    77,97,100,101,32,97,32,115,101,112,97,114,97,116,101,32,
+    102,117,110,99,116,105,111,110,32,116,111,32,109,97,107,101,
+    32,105,116,32,101,97,115,105,101,114,32,116,111,32,111,118,
+    101,114,114,105,100,101,32,105,110,32,101,120,112,101,114,105,
+    109,101,110,116,115,10,32,32,32,32,40,101,46,103,46,32,
+    99,97,99,104,101,32,115,116,97,116,32,114,101,115,117,108,
+    116,115,41,46,10,10,32,32,32,32,41,2,114,3,0,0,
+    0,90,4,115,116,97,116,41,1,114,35,0,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,
+    112,97,116,104,95,115,116,97,116,68,0,0,0,115,2,0,
+    0,0,0,7,114,39,0,0,0,99,2,0,0,0,0,0,
+    0,0,3,0,0,0,11,0,0,0,67,0,0,0,115,58,
+    0,0,0,121,16,0,116,0,0,124,0,0,131,1,0,125,
+    2,0,87,110,22,0,4,116,1,0,107,10,0,114,40,0,
+    1,1,1,100,1,0,83,89,110,1,0,88,124,2,0,106,
+    2,0,100,2,0,64,124,1,0,107,2,0,83,41,3,122,
+    49,84,101,115,116,32,119,104,101,116,104,101,114,32,116,104,
+    101,32,112,97,116,104,32,105,115,32,116,104,101,32,115,112,
+    101,99,105,102,105,101,100,32,109,111,100,101,32,116,121,112,
+    101,46,70,105,0,240,0,0,41,3,114,39,0,0,0,218,
+    7,79,83,69,114,114,111,114,218,7,115,116,95,109,111,100,
+    101,41,3,114,35,0,0,0,218,4,109,111,100,101,90,9,
+    115,116,97,116,95,105,110,102,111,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,218,18,95,112,97,116,104,95,
+    105,115,95,109,111,100,101,95,116,121,112,101,78,0,0,0,
+    115,10,0,0,0,0,2,3,1,16,1,13,1,9,1,114,
+    43,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,
+    0,3,0,0,0,67,0,0,0,115,13,0,0,0,116,0,
+    0,124,0,0,100,1,0,131,2,0,83,41,2,122,31,82,
+    101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,
+    115,46,112,97,116,104,46,105,115,102,105,108,101,46,105,0,
+    128,0,0,41,1,114,43,0,0,0,41,1,114,35,0,0,
+    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
+    218,12,95,112,97,116,104,95,105,115,102,105,108,101,88,0,
+    0,0,115,2,0,0,0,0,2,114,44,0,0,0,99,1,
+    0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,
+    0,0,0,115,34,0,0,0,124,0,0,115,21,0,116,0,
+    0,106,1,0,131,0,0,125,0,0,110,0,0,116,2,0,
+    124,0,0,100,1,0,131,2,0,83,41,2,122,30,82,101,
+    112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,
+    46,112,97,116,104,46,105,115,100,105,114,46,105,0,64,0,
+    0,41,3,114,3,0,0,0,218,6,103,101,116,99,119,100,
+    114,43,0,0,0,41,1,114,35,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,218,11,95,112,97,
+    116,104,95,105,115,100,105,114,94,0,0,0,115,6,0,0,
+    0,0,2,6,1,15,1,114,46,0,0,0,105,182,1,0,
+    0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,0,
+    0,0,67,0,0,0,115,192,0,0,0,100,1,0,106,0,
+    0,124,0,0,116,1,0,124,0,0,131,1,0,131,2,0,
+    125,3,0,116,2,0,106,3,0,124,3,0,116,2,0,106,
+    4,0,116,2,0,106,5,0,66,116,2,0,106,6,0,66,
+    124,2,0,100,2,0,64,131,3,0,125,4,0,121,60,0,
+    116,7,0,106,8,0,124,4,0,100,3,0,131,2,0,143,
+    20,0,125,5,0,124,5,0,106,9,0,124,1,0,131,1,
+    0,1,87,100,4,0,81,88,116,2,0,106,10,0,124,3,
+    0,124,0,0,131,2,0,1,87,110,59,0,4,116,11,0,
+    107,10,0,114,187,0,1,1,1,121,17,0,116,2,0,106,
+    12,0,124,3,0,131,1,0,1,87,110,18,0,4,116,11,
+    0,107,10,0,114,179,0,1,1,1,89,110,1,0,88,130,
+    0,0,89,110,1,0,88,100,4,0,83,41,5,122,162,66,
+    101,115,116,45,101,102,102,111,114,116,32,102,117,110,99,116,
+    105,111,110,32,116,111,32,119,114,105,116,101,32,100,97,116,
+    97,32,116,111,32,97,32,112,97,116,104,32,97,116,111,109,
+    105,99,97,108,108,121,46,10,32,32,32,32,66,101,32,112,
+    114,101,112,97,114,101,100,32,116,111,32,104,97,110,100,108,
+    101,32,97,32,70,105,108,101,69,120,105,115,116,115,69,114,
+    114,111,114,32,105,102,32,99,111,110,99,117,114,114,101,110,
+    116,32,119,114,105,116,105,110,103,32,111,102,32,116,104,101,
+    10,32,32,32,32,116,101,109,112,111,114,97,114,121,32,102,
+    105,108,101,32,105,115,32,97,116,116,101,109,112,116,101,100,
+    46,122,5,123,125,46,123,125,105,182,1,0,0,90,2,119,
+    98,78,41,13,218,6,102,111,114,109,97,116,218,2,105,100,
+    114,3,0,0,0,90,4,111,112,101,110,90,6,79,95,69,
+    88,67,76,90,7,79,95,67,82,69,65,84,90,8,79,95,
+    87,82,79,78,76,89,218,3,95,105,111,218,6,70,105,108,
+    101,73,79,218,5,119,114,105,116,101,218,7,114,101,112,108,
+    97,99,101,114,40,0,0,0,90,6,117,110,108,105,110,107,
+    41,6,114,35,0,0,0,218,4,100,97,116,97,114,42,0,
+    0,0,90,8,112,97,116,104,95,116,109,112,90,2,102,100,
+    218,4,102,105,108,101,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,218,13,95,119,114,105,116,101,95,97,116,
+    111,109,105,99,101,0,0,0,115,26,0,0,0,0,5,24,
+    1,9,1,33,1,3,3,21,1,19,1,20,1,13,1,3,
+    1,17,1,13,1,5,1,114,55,0,0,0,99,2,0,0,
+    0,0,0,0,0,3,0,0,0,7,0,0,0,67,0,0,
+    0,115,95,0,0,0,120,69,0,100,1,0,100,2,0,100,
+    3,0,100,4,0,103,4,0,68,93,49,0,125,2,0,116,
+    0,0,124,1,0,124,2,0,131,2,0,114,19,0,116,1,
+    0,124,0,0,124,2,0,116,2,0,124,1,0,124,2,0,
+    131,2,0,131,3,0,1,113,19,0,113,19,0,87,124,0,
+    0,106,3,0,106,4,0,124,1,0,106,3,0,131,1,0,
+    1,100,5,0,83,41,6,122,47,83,105,109,112,108,101,32,
+    115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102,
+    117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95,
+    119,114,97,112,112,101,114,46,218,10,95,95,109,111,100,117,
+    108,101,95,95,218,8,95,95,110,97,109,101,95,95,218,12,
+    95,95,113,117,97,108,110,97,109,101,95,95,218,7,95,95,
+    100,111,99,95,95,78,41,5,218,7,104,97,115,97,116,116,
+    114,218,7,115,101,116,97,116,116,114,218,7,103,101,116,97,
+    116,116,114,218,8,95,95,100,105,99,116,95,95,218,6,117,
+    112,100,97,116,101,41,3,90,3,110,101,119,90,3,111,108,
+    100,114,52,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,218,5,95,119,114,97,112,123,0,0,0,
+    115,8,0,0,0,0,2,25,1,15,1,32,1,114,65,0,
+    0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,1,
+    0,0,0,64,0,0,0,115,16,0,0,0,101,0,0,90,
+    1,0,100,0,0,90,2,0,100,1,0,83,41,2,218,14,
+    95,68,101,97,100,108,111,99,107,69,114,114,111,114,78,41,
+    3,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
+    5,0,0,0,114,66,0,0,0,142,0,0,0,115,2,0,
+    0,0,12,1,114,66,0,0,0,99,0,0,0,0,0,0,
+    0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,82,
+    0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,
+    1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,
+    0,100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,
+    100,7,0,132,0,0,90,6,0,100,8,0,100,9,0,132,
+    0,0,90,7,0,100,10,0,100,11,0,132,0,0,90,8,
+    0,100,12,0,83,41,13,218,11,95,77,111,100,117,108,101,
+    76,111,99,107,122,169,65,32,114,101,99,117,114,115,105,118,
+    101,32,108,111,99,107,32,105,109,112,108,101,109,101,110,116,
+    97,116,105,111,110,32,119,104,105,99,104,32,105,115,32,97,
+    98,108,101,32,116,111,32,100,101,116,101,99,116,32,100,101,
+    97,100,108,111,99,107,115,10,32,32,32,32,40,101,46,103,
+    46,32,116,104,114,101,97,100,32,49,32,116,114,121,105,110,
+    103,32,116,111,32,116,97,107,101,32,108,111,99,107,115,32,
+    65,32,116,104,101,110,32,66,44,32,97,110,100,32,116,104,
+    114,101,97,100,32,50,32,116,114,121,105,110,103,32,116,111,
+    10,32,32,32,32,116,97,107,101,32,108,111,99,107,115,32,
+    66,32,116,104,101,110,32,65,41,46,10,32,32,32,32,99,
+    2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,
+    67,0,0,0,115,70,0,0,0,116,0,0,106,1,0,131,
+    0,0,124,0,0,95,2,0,116,0,0,106,1,0,131,0,
+    0,124,0,0,95,3,0,124,1,0,124,0,0,95,4,0,
+    100,0,0,124,0,0,95,5,0,100,1,0,124,0,0,95,
+    6,0,100,1,0,124,0,0,95,7,0,100,0,0,83,41,
+    2,78,233,0,0,0,0,41,8,218,7,95,116,104,114,101,
+    97,100,90,13,97,108,108,111,99,97,116,101,95,108,111,99,
+    107,218,4,108,111,99,107,218,6,119,97,107,101,117,112,218,
+    4,110,97,109,101,218,5,111,119,110,101,114,218,5,99,111,
+    117,110,116,218,7,119,97,105,116,101,114,115,41,2,218,4,
+    115,101,108,102,114,72,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,218,8,95,95,105,110,105,116,
+    95,95,152,0,0,0,115,12,0,0,0,0,1,15,1,15,
+    1,9,1,9,1,9,1,122,20,95,77,111,100,117,108,101,
+    76,111,99,107,46,95,95,105,110,105,116,95,95,99,1,0,
+    0,0,0,0,0,0,4,0,0,0,2,0,0,0,67,0,
+    0,0,115,87,0,0,0,116,0,0,106,1,0,131,0,0,
+    125,1,0,124,0,0,106,2,0,125,2,0,120,59,0,116,
+    3,0,106,4,0,124,2,0,131,1,0,125,3,0,124,3,
+    0,100,0,0,107,8,0,114,55,0,100,1,0,83,124,3,
+    0,106,2,0,125,2,0,124,2,0,124,1,0,107,2,0,
+    114,24,0,100,2,0,83,113,24,0,100,0,0,83,41,3,
+    78,70,84,41,5,114,69,0,0,0,218,9,103,101,116,95,
+    105,100,101,110,116,114,73,0,0,0,218,12,95,98,108,111,
+    99,107,105,110,103,95,111,110,218,3,103,101,116,41,4,114,
+    76,0,0,0,218,2,109,101,218,3,116,105,100,114,70,0,
     0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,244,12,0,0,0,95,112,97,116,104,95,105,115,102,105,
-    108,101,78,0,0,0,115,2,0,0,0,0,2,114,44,0,
-    0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,3,
-    0,0,0,67,0,0,0,115,34,0,0,0,124,0,0,115,
-    21,0,116,0,0,106,1,0,131,0,0,125,0,0,110,0,
-    0,116,2,0,124,0,0,100,1,0,131,2,0,83,40,2,
-    0,0,0,117,30,0,0,0,82,101,112,108,97,99,101,109,
-    101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,
-    105,115,100,105,114,46,105,0,64,0,0,40,3,0,0,0,
-    114,3,0,0,0,116,6,0,0,0,103,101,116,99,119,100,
-    114,43,0,0,0,40,1,0,0,0,114,35,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,11,
-    0,0,0,95,112,97,116,104,95,105,115,100,105,114,84,0,
-    0,0,115,6,0,0,0,0,2,6,1,15,1,114,45,0,
-    0,0,105,182,1,0,0,99,3,0,0,0,0,0,0,0,
-    6,0,0,0,17,0,0,0,67,0,0,0,115,192,0,0,
-    0,100,1,0,106,0,0,124,0,0,116,1,0,124,0,0,
-    131,1,0,131,2,0,125,3,0,116,2,0,106,3,0,124,
-    3,0,116,2,0,106,4,0,116,2,0,106,5,0,66,116,
-    2,0,106,6,0,66,124,2,0,100,2,0,64,131,3,0,
-    125,4,0,121,60,0,116,7,0,106,8,0,124,4,0,100,
-    3,0,131,2,0,143,20,0,125,5,0,124,5,0,106,9,
-    0,124,1,0,131,1,0,1,87,100,4,0,81,88,116,2,
-    0,106,10,0,124,3,0,124,0,0,131,2,0,1,87,110,
-    59,0,4,116,11,0,107,10,0,114,187,0,1,1,1,121,
-    17,0,116,2,0,106,12,0,124,3,0,131,1,0,1,87,
-    110,18,0,4,116,11,0,107,10,0,114,179,0,1,1,1,
-    89,110,1,0,88,130,0,0,89,110,1,0,88,100,4,0,
-    83,40,5,0,0,0,117,162,0,0,0,66,101,115,116,45,
-    101,102,102,111,114,116,32,102,117,110,99,116,105,111,110,32,
-    116,111,32,119,114,105,116,101,32,100,97,116,97,32,116,111,
-    32,97,32,112,97,116,104,32,97,116,111,109,105,99,97,108,
-    108,121,46,10,32,32,32,32,66,101,32,112,114,101,112,97,
-    114,101,100,32,116,111,32,104,97,110,100,108,101,32,97,32,
-    70,105,108,101,69,120,105,115,116,115,69,114,114,111,114,32,
-    105,102,32,99,111,110,99,117,114,114,101,110,116,32,119,114,
-    105,116,105,110,103,32,111,102,32,116,104,101,10,32,32,32,
-    32,116,101,109,112,111,114,97,114,121,32,102,105,108,101,32,
-    105,115,32,97,116,116,101,109,112,116,101,100,46,117,5,0,
-    0,0,123,125,46,123,125,105,182,1,0,0,116,2,0,0,
-    0,119,98,78,40,13,0,0,0,244,6,0,0,0,102,111,
-    114,109,97,116,244,2,0,0,0,105,100,114,3,0,0,0,
-    116,4,0,0,0,111,112,101,110,116,6,0,0,0,79,95,
-    69,88,67,76,116,7,0,0,0,79,95,67,82,69,65,84,
-    116,8,0,0,0,79,95,87,82,79,78,76,89,244,3,0,
-    0,0,95,105,111,244,6,0,0,0,70,105,108,101,73,79,
-    244,5,0,0,0,119,114,105,116,101,244,7,0,0,0,114,
-    101,112,108,97,99,101,114,40,0,0,0,116,6,0,0,0,
-    117,110,108,105,110,107,40,6,0,0,0,114,35,0,0,0,
-    244,4,0,0,0,100,97,116,97,114,42,0,0,0,116,8,
-    0,0,0,112,97,116,104,95,116,109,112,116,2,0,0,0,
-    102,100,244,4,0,0,0,102,105,108,101,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,244,13,0,0,0,95,
-    119,114,105,116,101,95,97,116,111,109,105,99,91,0,0,0,
-    115,26,0,0,0,0,5,24,1,9,1,33,1,3,3,21,
-    1,19,1,20,1,13,1,3,1,17,1,13,1,5,1,114,
-    54,0,0,0,99,2,0,0,0,0,0,0,0,3,0,0,
-    0,7,0,0,0,67,0,0,0,115,95,0,0,0,120,69,
-    0,100,1,0,100,2,0,100,3,0,100,4,0,103,4,0,
-    68,93,49,0,125,2,0,116,0,0,124,1,0,124,2,0,
-    131,2,0,114,19,0,116,1,0,124,0,0,124,2,0,116,
-    2,0,124,1,0,124,2,0,131,2,0,131,3,0,1,113,
-    19,0,113,19,0,87,124,0,0,106,3,0,106,4,0,124,
-    1,0,106,3,0,131,1,0,1,100,5,0,83,40,6,0,
-    0,0,117,47,0,0,0,83,105,109,112,108,101,32,115,117,
-    98,115,116,105,116,117,116,101,32,102,111,114,32,102,117,110,
-    99,116,111,111,108,115,46,117,112,100,97,116,101,95,119,114,
-    97,112,112,101,114,46,244,10,0,0,0,95,95,109,111,100,
-    117,108,101,95,95,244,8,0,0,0,95,95,110,97,109,101,
-    95,95,244,12,0,0,0,95,95,113,117,97,108,110,97,109,
-    101,95,95,244,7,0,0,0,95,95,100,111,99,95,95,78,
-    40,5,0,0,0,244,7,0,0,0,104,97,115,97,116,116,
-    114,244,7,0,0,0,115,101,116,97,116,116,114,244,7,0,
-    0,0,103,101,116,97,116,116,114,244,8,0,0,0,95,95,
-    100,105,99,116,95,95,244,6,0,0,0,117,112,100,97,116,
-    101,40,3,0,0,0,116,3,0,0,0,110,101,119,116,3,
-    0,0,0,111,108,100,114,51,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,244,5,0,0,0,95,
-    119,114,97,112,113,0,0,0,115,8,0,0,0,0,2,25,
-    1,15,1,32,1,114,64,0,0,0,99,0,0,0,0,0,
-    0,0,0,0,0,0,0,1,0,0,0,64,0,0,0,115,
-    16,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,
-    100,1,0,83,40,2,0,0,0,244,14,0,0,0,95,68,
-    101,97,100,108,111,99,107,69,114,114,111,114,78,40,3,0,
-    0,0,114,56,0,0,0,114,55,0,0,0,114,57,0,0,
-    0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,65,0,0,0,132,0,0,0,115,2,
-    0,0,0,12,1,114,65,0,0,0,99,0,0,0,0,0,
-    0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,
-    82,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,
-    100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,
-    4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6,
-    0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0,
-    132,0,0,90,7,0,100,10,0,100,11,0,132,0,0,90,
-    8,0,100,12,0,83,40,13,0,0,0,244,11,0,0,0,
-    95,77,111,100,117,108,101,76,111,99,107,117,169,0,0,0,
-    65,32,114,101,99,117,114,115,105,118,101,32,108,111,99,107,
-    32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,
-    119,104,105,99,104,32,105,115,32,97,98,108,101,32,116,111,
-    32,100,101,116,101,99,116,32,100,101,97,100,108,111,99,107,
-    115,10,32,32,32,32,40,101,46,103,46,32,116,104,114,101,
-    97,100,32,49,32,116,114,121,105,110,103,32,116,111,32,116,
-    97,107,101,32,108,111,99,107,115,32,65,32,116,104,101,110,
-    32,66,44,32,97,110,100,32,116,104,114,101,97,100,32,50,
-    32,116,114,121,105,110,103,32,116,111,10,32,32,32,32,116,
-    97,107,101,32,108,111,99,107,115,32,66,32,116,104,101,110,
-    32,65,41,46,10,32,32,32,32,99,2,0,0,0,0,0,
-    0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,70,
-    0,0,0,116,0,0,106,1,0,131,0,0,124,0,0,95,
-    2,0,116,0,0,106,1,0,131,0,0,124,0,0,95,3,
-    0,124,1,0,124,0,0,95,4,0,100,0,0,124,0,0,
-    95,5,0,100,1,0,124,0,0,95,6,0,100,1,0,124,
-    0,0,95,7,0,100,0,0,83,40,2,0,0,0,78,233,
-    0,0,0,0,40,8,0,0,0,244,7,0,0,0,95,116,
-    104,114,101,97,100,116,13,0,0,0,97,108,108,111,99,97,
-    116,101,95,108,111,99,107,244,4,0,0,0,108,111,99,107,
-    244,6,0,0,0,119,97,107,101,117,112,244,4,0,0,0,
-    110,97,109,101,244,5,0,0,0,111,119,110,101,114,244,5,
-    0,0,0,99,111,117,110,116,244,7,0,0,0,119,97,105,
-    116,101,114,115,40,2,0,0,0,244,4,0,0,0,115,101,
-    108,102,114,71,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,244,8,0,0,0,95,95,105,110,105,
-    116,95,95,142,0,0,0,115,12,0,0,0,0,1,15,1,
-    15,1,9,1,9,1,9,1,117,20,0,0,0,95,77,111,
-    100,117,108,101,76,111,99,107,46,95,95,105,110,105,116,95,
-    95,99,1,0,0,0,0,0,0,0,4,0,0,0,2,0,
-    0,0,67,0,0,0,115,87,0,0,0,116,0,0,106,1,
-    0,131,0,0,125,1,0,124,0,0,106,2,0,125,2,0,
-    120,59,0,116,3,0,106,4,0,124,2,0,131,1,0,125,
-    3,0,124,3,0,100,0,0,107,8,0,114,55,0,100,1,
-    0,83,124,3,0,106,2,0,125,2,0,124,2,0,124,1,
-    0,107,2,0,114,24,0,100,2,0,83,113,24,0,100,0,
-    0,83,40,3,0,0,0,78,70,84,40,5,0,0,0,114,
-    68,0,0,0,244,9,0,0,0,103,101,116,95,105,100,101,
-    110,116,114,72,0,0,0,244,12,0,0,0,95,98,108,111,
-    99,107,105,110,103,95,111,110,244,3,0,0,0,103,101,116,
-    40,4,0,0,0,114,75,0,0,0,244,2,0,0,0,109,
-    101,244,3,0,0,0,116,105,100,114,69,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,244,12,0,
-    0,0,104,97,115,95,100,101,97,100,108,111,99,107,150,0,
-    0,0,115,18,0,0,0,0,2,12,1,9,1,3,1,15,
-    1,12,1,4,1,9,1,12,1,117,24,0,0,0,95,77,
-    111,100,117,108,101,76,111,99,107,46,104,97,115,95,100,101,
-    97,100,108,111,99,107,99,1,0,0,0,0,0,0,0,2,
-    0,0,0,17,0,0,0,67,0,0,0,115,214,0,0,0,
-    116,0,0,106,1,0,131,0,0,125,1,0,124,0,0,116,
-    2,0,124,1,0,60,122,177,0,120,170,0,124,0,0,106,
-    3,0,143,130,0,1,124,0,0,106,4,0,100,1,0,107,
-    2,0,115,68,0,124,0,0,106,5,0,124,1,0,107,2,
-    0,114,96,0,124,1,0,124,0,0,95,5,0,124,0,0,
-    4,106,4,0,100,2,0,55,2,95,4,0,100,3,0,83,
-    124,0,0,106,6,0,131,0,0,114,127,0,116,7,0,100,
-    4,0,124,0,0,22,131,1,0,130,1,0,110,0,0,124,
-    0,0,106,8,0,106,9,0,100,5,0,131,1,0,114,163,
-    0,124,0,0,4,106,10,0,100,2,0,55,2,95,10,0,
-    110,0,0,87,100,6,0,81,88,124,0,0,106,8,0,106,
-    9,0,131,0,0,1,124,0,0,106,8,0,106,11,0,131,
-    0,0,1,113,28,0,87,100,6,0,116,2,0,124,1,0,
-    61,88,100,6,0,83,40,7,0,0,0,117,185,0,0,0,
-    10,32,32,32,32,32,32,32,32,65,99,113,117,105,114,101,
-    32,116,104,101,32,109,111,100,117,108,101,32,108,111,99,107,
-    46,32,32,73,102,32,97,32,112,111,116,101,110,116,105,97,
-    108,32,100,101,97,100,108,111,99,107,32,105,115,32,100,101,
-    116,101,99,116,101,100,44,10,32,32,32,32,32,32,32,32,
-    97,32,95,68,101,97,100,108,111,99,107,69,114,114,111,114,
-    32,105,115,32,114,97,105,115,101,100,46,10,32,32,32,32,
-    32,32,32,32,79,116,104,101,114,119,105,115,101,44,32,116,
-    104,101,32,108,111,99,107,32,105,115,32,97,108,119,97,121,
-    115,32,97,99,113,117,105,114,101,100,32,97,110,100,32,84,
-    114,117,101,32,105,115,32,114,101,116,117,114,110,101,100,46,
-    10,32,32,32,32,32,32,32,32,114,67,0,0,0,114,29,
-    0,0,0,84,117,23,0,0,0,100,101,97,100,108,111,99,
-    107,32,100,101,116,101,99,116,101,100,32,98,121,32,37,114,
-    70,78,40,12,0,0,0,114,68,0,0,0,114,77,0,0,
-    0,114,78,0,0,0,114,69,0,0,0,114,73,0,0,0,
-    114,72,0,0,0,114,82,0,0,0,114,65,0,0,0,114,
-    70,0,0,0,244,7,0,0,0,97,99,113,117,105,114,101,
-    114,74,0,0,0,244,7,0,0,0,114,101,108,101,97,115,
-    101,40,2,0,0,0,114,75,0,0,0,114,81,0,0,0,
-    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
-    83,0,0,0,162,0,0,0,115,32,0,0,0,0,6,12,
-    1,10,1,3,1,3,1,10,1,30,1,9,1,15,1,4,
-    1,12,1,19,1,18,1,24,2,13,1,20,2,117,19,0,
-    0,0,95,77,111,100,117,108,101,76,111,99,107,46,97,99,
-    113,117,105,114,101,99,1,0,0,0,0,0,0,0,2,0,
-    0,0,10,0,0,0,67,0,0,0,115,165,0,0,0,116,
-    0,0,106,1,0,131,0,0,125,1,0,124,0,0,106,2,
-    0,143,138,0,1,124,0,0,106,3,0,124,1,0,107,3,
-    0,114,52,0,116,4,0,100,1,0,131,1,0,130,1,0,
-    110,0,0,124,0,0,106,5,0,100,2,0,107,4,0,115,
-    73,0,116,6,0,130,1,0,124,0,0,4,106,5,0,100,
-    3,0,56,2,95,5,0,124,0,0,106,5,0,100,2,0,
-    107,2,0,114,155,0,100,0,0,124,0,0,95,3,0,124,
-    0,0,106,7,0,114,155,0,124,0,0,4,106,7,0,100,
-    3,0,56,2,95,7,0,124,0,0,106,8,0,106,9,0,
-    131,0,0,1,113,155,0,110,0,0,87,100,0,0,81,88,
-    100,0,0,83,40,4,0,0,0,78,117,31,0,0,0,99,
+    0,218,12,104,97,115,95,100,101,97,100,108,111,99,107,160,
+    0,0,0,115,18,0,0,0,0,2,12,1,9,1,3,1,
+    15,1,12,1,4,1,9,1,12,1,122,24,95,77,111,100,
+    117,108,101,76,111,99,107,46,104,97,115,95,100,101,97,100,
+    108,111,99,107,99,1,0,0,0,0,0,0,0,2,0,0,
+    0,17,0,0,0,67,0,0,0,115,214,0,0,0,116,0,
+    0,106,1,0,131,0,0,125,1,0,124,0,0,116,2,0,
+    124,1,0,60,122,177,0,120,170,0,124,0,0,106,3,0,
+    143,130,0,1,124,0,0,106,4,0,100,1,0,107,2,0,
+    115,68,0,124,0,0,106,5,0,124,1,0,107,2,0,114,
+    96,0,124,1,0,124,0,0,95,5,0,124,0,0,4,106,
+    4,0,100,2,0,55,2,95,4,0,100,3,0,83,124,0,
+    0,106,6,0,131,0,0,114,127,0,116,7,0,100,4,0,
+    124,0,0,22,131,1,0,130,1,0,110,0,0,124,0,0,
+    106,8,0,106,9,0,100,5,0,131,1,0,114,163,0,124,
+    0,0,4,106,10,0,100,2,0,55,2,95,10,0,110,0,
+    0,87,100,6,0,81,88,124,0,0,106,8,0,106,9,0,
+    131,0,0,1,124,0,0,106,8,0,106,11,0,131,0,0,
+    1,113,28,0,87,100,6,0,116,2,0,124,1,0,61,88,
+    100,6,0,83,41,7,122,185,10,32,32,32,32,32,32,32,
+    32,65,99,113,117,105,114,101,32,116,104,101,32,109,111,100,
+    117,108,101,32,108,111,99,107,46,32,32,73,102,32,97,32,
+    112,111,116,101,110,116,105,97,108,32,100,101,97,100,108,111,
+    99,107,32,105,115,32,100,101,116,101,99,116,101,100,44,10,
+    32,32,32,32,32,32,32,32,97,32,95,68,101,97,100,108,
+    111,99,107,69,114,114,111,114,32,105,115,32,114,97,105,115,
+    101,100,46,10,32,32,32,32,32,32,32,32,79,116,104,101,
+    114,119,105,115,101,44,32,116,104,101,32,108,111,99,107,32,
+    105,115,32,97,108,119,97,121,115,32,97,99,113,117,105,114,
+    101,100,32,97,110,100,32,84,114,117,101,32,105,115,32,114,
+    101,116,117,114,110,101,100,46,10,32,32,32,32,32,32,32,
+    32,114,68,0,0,0,114,29,0,0,0,84,122,23,100,101,
+    97,100,108,111,99,107,32,100,101,116,101,99,116,101,100,32,
+    98,121,32,37,114,70,78,41,12,114,69,0,0,0,114,78,
+    0,0,0,114,79,0,0,0,114,70,0,0,0,114,74,0,
+    0,0,114,73,0,0,0,114,83,0,0,0,114,66,0,0,
+    0,114,71,0,0,0,218,7,97,99,113,117,105,114,101,114,
+    75,0,0,0,218,7,114,101,108,101,97,115,101,41,2,114,
+    76,0,0,0,114,82,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,114,84,0,0,0,172,0,0,
+    0,115,32,0,0,0,0,6,12,1,10,1,3,1,3,1,
+    10,1,30,1,9,1,15,1,4,1,12,1,19,1,18,1,
+    24,2,13,1,20,2,122,19,95,77,111,100,117,108,101,76,
+    111,99,107,46,97,99,113,117,105,114,101,99,1,0,0,0,
+    0,0,0,0,2,0,0,0,10,0,0,0,67,0,0,0,
+    115,165,0,0,0,116,0,0,106,1,0,131,0,0,125,1,
+    0,124,0,0,106,2,0,143,138,0,1,124,0,0,106,3,
+    0,124,1,0,107,3,0,114,52,0,116,4,0,100,1,0,
+    131,1,0,130,1,0,110,0,0,124,0,0,106,5,0,100,
+    2,0,107,4,0,115,73,0,116,6,0,130,1,0,124,0,
+    0,4,106,5,0,100,3,0,56,2,95,5,0,124,0,0,
+    106,5,0,100,2,0,107,2,0,114,155,0,100,0,0,124,
+    0,0,95,3,0,124,0,0,106,7,0,114,155,0,124,0,
+    0,4,106,7,0,100,3,0,56,2,95,7,0,124,0,0,
+    106,8,0,106,9,0,131,0,0,1,113,155,0,110,0,0,
+    87,100,0,0,81,88,100,0,0,83,41,4,78,122,31,99,
     97,110,110,111,116,32,114,101,108,101,97,115,101,32,117,110,
-    45,97,99,113,117,105,114,101,100,32,108,111,99,107,114,67,
-    0,0,0,114,29,0,0,0,40,10,0,0,0,114,68,0,
-    0,0,114,77,0,0,0,114,69,0,0,0,114,72,0,0,
-    0,244,12,0,0,0,82,117,110,116,105,109,101,69,114,114,
-    111,114,114,73,0,0,0,244,14,0,0,0,65,115,115,101,
-    114,116,105,111,110,69,114,114,111,114,114,74,0,0,0,114,
-    70,0,0,0,114,84,0,0,0,40,2,0,0,0,114,75,
-    0,0,0,114,81,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,114,84,0,0,0,187,0,0,0,
-    115,22,0,0,0,0,1,12,1,10,1,15,1,15,1,21,
-    1,15,1,15,1,9,1,9,1,15,1,117,19,0,0,0,
-    95,77,111,100,117,108,101,76,111,99,107,46,114,101,108,101,
-    97,115,101,99,1,0,0,0,0,0,0,0,1,0,0,0,
-    4,0,0,0,67,0,0,0,115,25,0,0,0,100,1,0,
-    106,0,0,124,0,0,106,1,0,116,2,0,124,0,0,131,
-    1,0,131,2,0,83,40,2,0,0,0,78,117,23,0,0,
-    0,95,77,111,100,117,108,101,76,111,99,107,40,123,33,114,
-    125,41,32,97,116,32,123,125,40,3,0,0,0,114,46,0,
-    0,0,114,71,0,0,0,114,47,0,0,0,40,1,0,0,
-    0,114,75,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,244,8,0,0,0,95,95,114,101,112,114,
-    95,95,200,0,0,0,115,2,0,0,0,0,1,117,20,0,
-    0,0,95,77,111,100,117,108,101,76,111,99,107,46,95,95,
-    114,101,112,114,95,95,78,40,9,0,0,0,114,56,0,0,
-    0,114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,
-    114,76,0,0,0,114,82,0,0,0,114,83,0,0,0,114,
-    84,0,0,0,114,87,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,66,0,
-    0,0,136,0,0,0,115,12,0,0,0,12,4,6,2,12,
-    8,12,12,12,25,12,13,114,66,0,0,0,99,0,0,0,
-    0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,
-    0,115,70,0,0,0,101,0,0,90,1,0,100,0,0,90,
-    2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,
-    0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,
-    100,6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,
-    9,0,132,0,0,90,7,0,100,10,0,83,40,11,0,0,
-    0,244,16,0,0,0,95,68,117,109,109,121,77,111,100,117,
-    108,101,76,111,99,107,117,86,0,0,0,65,32,115,105,109,
-    112,108,101,32,95,77,111,100,117,108,101,76,111,99,107,32,
-    101,113,117,105,118,97,108,101,110,116,32,102,111,114,32,80,
-    121,116,104,111,110,32,98,117,105,108,100,115,32,119,105,116,
-    104,111,117,116,10,32,32,32,32,109,117,108,116,105,45,116,
-    104,114,101,97,100,105,110,103,32,115,117,112,112,111,114,116,
-    46,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,
-    0,0,67,0,0,0,115,22,0,0,0,124,1,0,124,0,
-    0,95,0,0,100,1,0,124,0,0,95,1,0,100,0,0,
-    83,40,2,0,0,0,78,114,67,0,0,0,40,2,0,0,
-    0,114,71,0,0,0,114,73,0,0,0,40,2,0,0,0,
-    114,75,0,0,0,114,71,0,0,0,114,4,0,0,0,114,
-    4,0,0,0,114,5,0,0,0,114,76,0,0,0,208,0,
-    0,0,115,4,0,0,0,0,1,9,1,117,25,0,0,0,
+    45,97,99,113,117,105,114,101,100,32,108,111,99,107,114,68,
+    0,0,0,114,29,0,0,0,41,10,114,69,0,0,0,114,
+    78,0,0,0,114,70,0,0,0,114,73,0,0,0,218,12,
+    82,117,110,116,105,109,101,69,114,114,111,114,114,74,0,0,
+    0,218,14,65,115,115,101,114,116,105,111,110,69,114,114,111,
+    114,114,75,0,0,0,114,71,0,0,0,114,85,0,0,0,
+    41,2,114,76,0,0,0,114,82,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,114,85,0,0,0,
+    197,0,0,0,115,22,0,0,0,0,1,12,1,10,1,15,
+    1,15,1,21,1,15,1,15,1,9,1,9,1,15,1,122,
+    19,95,77,111,100,117,108,101,76,111,99,107,46,114,101,108,
+    101,97,115,101,99,1,0,0,0,0,0,0,0,1,0,0,
+    0,4,0,0,0,67,0,0,0,115,25,0,0,0,100,1,
+    0,106,0,0,124,0,0,106,1,0,116,2,0,124,0,0,
+    131,1,0,131,2,0,83,41,2,78,122,23,95,77,111,100,
+    117,108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,
+    32,123,125,41,3,114,47,0,0,0,114,72,0,0,0,114,
+    48,0,0,0,41,1,114,76,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,218,8,95,95,114,101,
+    112,114,95,95,210,0,0,0,115,2,0,0,0,0,1,122,
+    20,95,77,111,100,117,108,101,76,111,99,107,46,95,95,114,
+    101,112,114,95,95,78,41,9,114,57,0,0,0,114,56,0,
+    0,0,114,58,0,0,0,114,59,0,0,0,114,77,0,0,
+    0,114,83,0,0,0,114,84,0,0,0,114,85,0,0,0,
+    114,88,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,114,67,0,0,0,146,0,
+    0,0,115,12,0,0,0,12,4,6,2,12,8,12,12,12,
+    25,12,13,114,67,0,0,0,99,0,0,0,0,0,0,0,
+    0,0,0,0,0,2,0,0,0,64,0,0,0,115,70,0,
+    0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,
+    0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,
+    100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,100,
+    7,0,132,0,0,90,6,0,100,8,0,100,9,0,132,0,
+    0,90,7,0,100,10,0,83,41,11,218,16,95,68,117,109,
+    109,121,77,111,100,117,108,101,76,111,99,107,122,86,65,32,
+    115,105,109,112,108,101,32,95,77,111,100,117,108,101,76,111,
+    99,107,32,101,113,117,105,118,97,108,101,110,116,32,102,111,
+    114,32,80,121,116,104,111,110,32,98,117,105,108,100,115,32,
+    119,105,116,104,111,117,116,10,32,32,32,32,109,117,108,116,
+    105,45,116,104,114,101,97,100,105,110,103,32,115,117,112,112,
+    111,114,116,46,99,2,0,0,0,0,0,0,0,2,0,0,
+    0,2,0,0,0,67,0,0,0,115,22,0,0,0,124,1,
+    0,124,0,0,95,0,0,100,1,0,124,0,0,95,1,0,
+    100,0,0,83,41,2,78,114,68,0,0,0,41,2,114,72,
+    0,0,0,114,74,0,0,0,41,2,114,76,0,0,0,114,
+    72,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,77,0,0,0,218,0,0,0,115,4,0,0,
+    0,0,1,9,1,122,25,95,68,117,109,109,121,77,111,100,
+    117,108,101,76,111,99,107,46,95,95,105,110,105,116,95,95,
+    99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,
+    0,67,0,0,0,115,19,0,0,0,124,0,0,4,106,0,
+    0,100,1,0,55,2,95,0,0,100,2,0,83,41,3,78,
+    114,29,0,0,0,84,41,1,114,74,0,0,0,41,1,114,
+    76,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,84,0,0,0,222,0,0,0,115,4,0,0,
+    0,0,1,15,1,122,24,95,68,117,109,109,121,77,111,100,
+    117,108,101,76,111,99,107,46,97,99,113,117,105,114,101,99,
+    1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,
+    67,0,0,0,115,49,0,0,0,124,0,0,106,0,0,100,
+    1,0,107,2,0,114,30,0,116,1,0,100,2,0,131,1,
+    0,130,1,0,110,0,0,124,0,0,4,106,0,0,100,3,
+    0,56,2,95,0,0,100,0,0,83,41,4,78,114,68,0,
+    0,0,122,31,99,97,110,110,111,116,32,114,101,108,101,97,
+    115,101,32,117,110,45,97,99,113,117,105,114,101,100,32,108,
+    111,99,107,114,29,0,0,0,41,2,114,74,0,0,0,114,
+    86,0,0,0,41,1,114,76,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,85,0,0,0,226,
+    0,0,0,115,6,0,0,0,0,1,15,1,15,1,122,24,
     95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,
-    46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,
-    0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,19,
-    0,0,0,124,0,0,4,106,0,0,100,1,0,55,2,95,
-    0,0,100,2,0,83,40,3,0,0,0,78,114,29,0,0,
-    0,84,40,1,0,0,0,114,73,0,0,0,40,1,0,0,
-    0,114,75,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,83,0,0,0,212,0,0,0,115,4,
-    0,0,0,0,1,15,1,117,24,0,0,0,95,68,117,109,
-    109,121,77,111,100,117,108,101,76,111,99,107,46,97,99,113,
-    117,105,114,101,99,1,0,0,0,0,0,0,0,1,0,0,
-    0,3,0,0,0,67,0,0,0,115,49,0,0,0,124,0,
-    0,106,0,0,100,1,0,107,2,0,114,30,0,116,1,0,
-    100,2,0,131,1,0,130,1,0,110,0,0,124,0,0,4,
-    106,0,0,100,3,0,56,2,95,0,0,100,0,0,83,40,
-    4,0,0,0,78,114,67,0,0,0,117,31,0,0,0,99,
-    97,110,110,111,116,32,114,101,108,101,97,115,101,32,117,110,
-    45,97,99,113,117,105,114,101,100,32,108,111,99,107,114,29,
-    0,0,0,40,2,0,0,0,114,73,0,0,0,114,85,0,
-    0,0,40,1,0,0,0,114,75,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,84,0,0,0,
-    216,0,0,0,115,6,0,0,0,0,1,15,1,15,1,117,
-    24,0,0,0,95,68,117,109,109,121,77,111,100,117,108,101,
-    76,111,99,107,46,114,101,108,101,97,115,101,99,1,0,0,
-    0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,
-    0,115,25,0,0,0,100,1,0,106,0,0,124,0,0,106,
-    1,0,116,2,0,124,0,0,131,1,0,131,2,0,83,40,
-    2,0,0,0,78,117,28,0,0,0,95,68,117,109,109,121,
-    77,111,100,117,108,101,76,111,99,107,40,123,33,114,125,41,
-    32,97,116,32,123,125,40,3,0,0,0,114,46,0,0,0,
-    114,71,0,0,0,114,47,0,0,0,40,1,0,0,0,114,
-    75,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,87,0,0,0,221,0,0,0,115,2,0,0,
-    0,0,1,117,25,0,0,0,95,68,117,109,109,121,77,111,
-    100,117,108,101,76,111,99,107,46,95,95,114,101,112,114,95,
-    95,78,40,8,0,0,0,114,56,0,0,0,114,55,0,0,
-    0,114,57,0,0,0,114,58,0,0,0,114,76,0,0,0,
-    114,83,0,0,0,114,84,0,0,0,114,87,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,88,0,0,0,204,0,0,0,115,10,0,0,
-    0,12,2,6,2,12,4,12,4,12,5,114,88,0,0,0,
-    99,1,0,0,0,0,0,0,0,3,0,0,0,11,0,0,
-    0,3,0,0,0,115,142,0,0,0,100,1,0,125,1,0,
-    121,17,0,116,0,0,136,0,0,25,131,0,0,125,1,0,
-    87,110,18,0,4,116,1,0,107,10,0,114,43,0,1,1,
-    1,89,110,1,0,88,124,1,0,100,1,0,107,8,0,114,
-    138,0,116,2,0,100,1,0,107,8,0,114,83,0,116,3,
-    0,136,0,0,131,1,0,125,1,0,110,12,0,116,4,0,
-    136,0,0,131,1,0,125,1,0,135,0,0,102,1,0,100,
-    2,0,100,3,0,134,0,0,125,2,0,116,5,0,106,6,
-    0,124,1,0,124,2,0,131,2,0,116,0,0,136,0,0,
-    60,110,0,0,124,1,0,83,40,4,0,0,0,117,109,0,
-    0,0,71,101,116,32,111,114,32,99,114,101,97,116,101,32,
-    116,104,101,32,109,111,100,117,108,101,32,108,111,99,107,32,
-    102,111,114,32,97,32,103,105,118,101,110,32,109,111,100,117,
-    108,101,32,110,97,109,101,46,10,10,32,32,32,32,83,104,
-    111,117,108,100,32,111,110,108,121,32,98,101,32,99,97,108,
-    108,101,100,32,119,105,116,104,32,116,104,101,32,105,109,112,
-    111,114,116,32,108,111,99,107,32,116,97,107,101,110,46,78,
-    99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,
-    0,19,0,0,0,115,11,0,0,0,116,0,0,136,0,0,
-    61,100,0,0,83,40,1,0,0,0,78,40,1,0,0,0,
-    244,13,0,0,0,95,109,111,100,117,108,101,95,108,111,99,
-    107,115,40,1,0,0,0,114,36,0,0,0,40,1,0,0,
-    0,114,71,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    244,2,0,0,0,99,98,241,0,0,0,115,2,0,0,0,
-    0,1,117,28,0,0,0,95,103,101,116,95,109,111,100,117,
-    108,101,95,108,111,99,107,46,60,108,111,99,97,108,115,62,
-    46,99,98,40,7,0,0,0,114,89,0,0,0,244,8,0,
-    0,0,75,101,121,69,114,114,111,114,114,68,0,0,0,114,
-    88,0,0,0,114,66,0,0,0,244,8,0,0,0,95,119,
-    101,97,107,114,101,102,116,3,0,0,0,114,101,102,40,3,
-    0,0,0,114,71,0,0,0,114,69,0,0,0,114,90,0,
-    0,0,114,4,0,0,0,40,1,0,0,0,114,71,0,0,
-    0,114,5,0,0,0,244,16,0,0,0,95,103,101,116,95,
-    109,111,100,117,108,101,95,108,111,99,107,227,0,0,0,115,
-    24,0,0,0,0,4,6,1,3,1,17,1,13,1,5,1,
-    12,1,12,1,15,2,12,1,18,2,25,1,114,93,0,0,
-    0,99,1,0,0,0,0,0,0,0,2,0,0,0,11,0,
-    0,0,67,0,0,0,115,71,0,0,0,116,0,0,124,0,
-    0,131,1,0,125,1,0,116,1,0,106,2,0,131,0,0,
-    1,121,14,0,124,1,0,106,3,0,131,0,0,1,87,110,
-    18,0,4,116,4,0,107,10,0,114,56,0,1,1,1,89,
-    110,11,0,88,124,1,0,106,5,0,131,0,0,1,100,1,
-    0,83,40,2,0,0,0,117,21,1,0,0,82,101,108,101,
-    97,115,101,32,116,104,101,32,103,108,111,98,97,108,32,105,
-    109,112,111,114,116,32,108,111,99,107,44,32,97,110,100,32,
-    97,99,113,117,105,114,101,115,32,116,104,101,110,32,114,101,
-    108,101,97,115,101,32,116,104,101,10,32,32,32,32,109,111,
-    100,117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,
-    103,105,118,101,110,32,109,111,100,117,108,101,32,110,97,109,
-    101,46,10,32,32,32,32,84,104,105,115,32,105,115,32,117,
-    115,101,100,32,116,111,32,101,110,115,117,114,101,32,97,32,
-    109,111,100,117,108,101,32,105,115,32,99,111,109,112,108,101,
-    116,101,108,121,32,105,110,105,116,105,97,108,105,122,101,100,
-    44,32,105,110,32,116,104,101,10,32,32,32,32,101,118,101,
-    110,116,32,105,116,32,105,115,32,98,101,105,110,103,32,105,
-    109,112,111,114,116,101,100,32,98,121,32,97,110,111,116,104,
-    101,114,32,116,104,114,101,97,100,46,10,10,32,32,32,32,
-    83,104,111,117,108,100,32,111,110,108,121,32,98,101,32,99,
-    97,108,108,101,100,32,119,105,116,104,32,116,104,101,32,105,
-    109,112,111,114,116,32,108,111,99,107,32,116,97,107,101,110,
-    46,78,40,6,0,0,0,114,93,0,0,0,244,4,0,0,
-    0,95,105,109,112,244,12,0,0,0,114,101,108,101,97,115,
-    101,95,108,111,99,107,114,83,0,0,0,114,65,0,0,0,
-    114,84,0,0,0,40,2,0,0,0,114,71,0,0,0,114,
-    69,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,244,19,0,0,0,95,108,111,99,107,95,117,110,
-    108,111,99,107,95,109,111,100,117,108,101,246,0,0,0,115,
-    14,0,0,0,0,7,12,1,10,1,3,1,14,1,13,3,
-    5,2,114,96,0,0,0,99,1,0,0,0,0,0,0,0,
-    3,0,0,0,3,0,0,0,79,0,0,0,115,13,0,0,
-    0,124,0,0,124,1,0,124,2,0,142,0,0,83,40,1,
-    0,0,0,117,46,1,0,0,114,101,109,111,118,101,95,105,
-    109,112,111,114,116,108,105,98,95,102,114,97,109,101,115,32,
-    105,110,32,105,109,112,111,114,116,46,99,32,119,105,108,108,
-    32,97,108,119,97,121,115,32,114,101,109,111,118,101,32,115,
-    101,113,117,101,110,99,101,115,10,32,32,32,32,111,102,32,
-    105,109,112,111,114,116,108,105,98,32,102,114,97,109,101,115,
-    32,116,104,97,116,32,101,110,100,32,119,105,116,104,32,97,
-    32,99,97,108,108,32,116,111,32,116,104,105,115,32,102,117,
-    110,99,116,105,111,110,10,10,32,32,32,32,85,115,101,32,
-    105,116,32,105,110,115,116,101,97,100,32,111,102,32,97,32,
-    110,111,114,109,97,108,32,99,97,108,108,32,105,110,32,112,
-    108,97,99,101,115,32,119,104,101,114,101,32,105,110,99,108,
-    117,100,105,110,103,32,116,104,101,32,105,109,112,111,114,116,
-    108,105,98,10,32,32,32,32,102,114,97,109,101,115,32,105,
-    110,116,114,111,100,117,99,101,115,32,117,110,119,97,110,116,
-    101,100,32,110,111,105,115,101,32,105,110,116,111,32,116,104,
-    101,32,116,114,97,99,101,98,97,99,107,32,40,101,46,103,
-    46,32,119,104,101,110,32,101,120,101,99,117,116,105,110,103,
-    10,32,32,32,32,109,111,100,117,108,101,32,99,111,100,101,
-    41,10,32,32,32,32,114,4,0,0,0,40,3,0,0,0,
-    244,1,0,0,0,102,244,4,0,0,0,97,114,103,115,116,
-    4,0,0,0,107,119,100,115,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,244,25,0,0,0,95,99,97,108,
-    108,95,119,105,116,104,95,102,114,97,109,101,115,95,114,101,
-    109,111,118,101,100,10,1,0,0,115,2,0,0,0,0,8,
-    114,99,0,0,0,105,208,12,0,0,233,2,0,0,0,114,
-    13,0,0,0,115,2,0,0,0,13,10,116,11,0,0,0,
-    95,95,112,121,99,97,99,104,101,95,95,117,3,0,0,0,
-    46,112,121,117,4,0,0,0,46,112,121,99,117,4,0,0,
-    0,46,112,121,111,78,99,2,0,0,0,0,0,0,0,11,
-    0,0,0,6,0,0,0,67,0,0,0,115,180,0,0,0,
-    124,1,0,100,1,0,107,8,0,114,25,0,116,0,0,106,
-    1,0,106,2,0,12,110,3,0,124,1,0,125,2,0,124,
-    2,0,114,46,0,116,3,0,125,3,0,110,6,0,116,4,
-    0,125,3,0,116,5,0,124,0,0,131,1,0,92,2,0,
-    125,4,0,125,5,0,124,5,0,106,6,0,100,2,0,131,
-    1,0,92,3,0,125,6,0,125,7,0,125,8,0,116,0,
-    0,106,7,0,106,8,0,125,9,0,124,9,0,100,1,0,
-    107,8,0,114,133,0,116,9,0,100,3,0,131,1,0,130,
-    1,0,110,0,0,100,4,0,106,10,0,124,6,0,124,7,
-    0,124,9,0,124,3,0,100,5,0,25,103,4,0,131,1,
-    0,125,10,0,116,11,0,124,4,0,116,12,0,124,10,0,
-    131,3,0,83,40,6,0,0,0,117,244,1,0,0,71,105,
-    118,101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,
-    97,32,46,112,121,32,102,105,108,101,44,32,114,101,116,117,
-    114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,105,
-    116,115,32,46,112,121,99,47,46,112,121,111,32,102,105,108,
-    101,46,10,10,32,32,32,32,84,104,101,32,46,112,121,32,
-    102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101,
-    101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105,
-    115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115,
-    32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,
-    10,32,32,32,32,46,112,121,99,47,46,112,121,111,32,102,
-    105,108,101,32,99,97,108,99,117,108,97,116,101,100,32,97,
-    115,32,105,102,32,116,104,101,32,46,112,121,32,102,105,108,
-    101,32,119,101,114,101,32,105,109,112,111,114,116,101,100,46,
-    32,32,84,104,101,32,101,120,116,101,110,115,105,111,110,10,
-    32,32,32,32,119,105,108,108,32,98,101,32,46,112,121,99,
-    32,117,110,108,101,115,115,32,115,121,115,46,102,108,97,103,
-    115,46,111,112,116,105,109,105,122,101,32,105,115,32,110,111,
-    110,45,122,101,114,111,44,32,116,104,101,110,32,105,116,32,
-    119,105,108,108,32,98,101,32,46,112,121,111,46,10,10,32,
-    32,32,32,73,102,32,100,101,98,117,103,95,111,118,101,114,
-    114,105,100,101,32,105,115,32,110,111,116,32,78,111,110,101,
-    44,32,116,104,101,110,32,105,116,32,109,117,115,116,32,98,
-    101,32,97,32,98,111,111,108,101,97,110,32,97,110,100,32,
-    105,115,32,117,115,101,100,32,105,110,10,32,32,32,32,112,
-    108,97,99,101,32,111,102,32,115,121,115,46,102,108,97,103,
-    115,46,111,112,116,105,109,105,122,101,46,10,10,32,32,32,
-    32,73,102,32,115,121,115,46,105,109,112,108,101,109,101,110,
-    116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,
-    32,105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,
-    116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,
-    114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,
-    32,32,78,244,1,0,0,0,46,117,36,0,0,0,115,121,
-    115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,
-    46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,
-    110,101,114,30,0,0,0,114,67,0,0,0,40,13,0,0,
-    0,114,7,0,0,0,244,5,0,0,0,102,108,97,103,115,
-    244,8,0,0,0,111,112,116,105,109,105,122,101,244,23,0,
-    0,0,68,69,66,85,71,95,66,89,84,69,67,79,68,69,
-    95,83,85,70,70,73,88,69,83,244,27,0,0,0,79,80,
-    84,73,77,73,90,69,68,95,66,89,84,69,67,79,68,69,
-    95,83,85,70,70,73,88,69,83,114,38,0,0,0,244,9,
-    0,0,0,112,97,114,116,105,116,105,111,110,244,14,0,0,
-    0,105,109,112,108,101,109,101,110,116,97,116,105,111,110,244,
-    9,0,0,0,99,97,99,104,101,95,116,97,103,244,19,0,
-    0,0,78,111,116,73,109,112,108,101,109,101,110,116,101,100,
-    69,114,114,111,114,114,26,0,0,0,114,28,0,0,0,244,
-    8,0,0,0,95,80,89,67,65,67,72,69,40,11,0,0,
-    0,114,35,0,0,0,116,14,0,0,0,100,101,98,117,103,
-    95,111,118,101,114,114,105,100,101,244,5,0,0,0,100,101,
-    98,117,103,244,8,0,0,0,115,117,102,102,105,120,101,115,
-    244,4,0,0,0,104,101,97,100,114,37,0,0,0,244,13,
-    0,0,0,98,97,115,101,95,102,105,108,101,110,97,109,101,
-    244,3,0,0,0,115,101,112,114,36,0,0,0,116,3,0,
-    0,0,116,97,103,244,8,0,0,0,102,105,108,101,110,97,
-    109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,244,17,0,0,0,99,97,99,104,101,95,102,114,111,109,
-    95,115,111,117,114,99,101,131,1,0,0,115,22,0,0,0,
-    0,13,31,1,6,1,9,2,6,1,18,1,24,1,12,1,
-    12,1,15,1,31,1,114,117,0,0,0,99,1,0,0,0,
-    0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,
-    115,193,0,0,0,116,0,0,106,1,0,106,2,0,100,1,
-    0,107,8,0,114,33,0,116,3,0,100,2,0,131,1,0,
-    130,1,0,110,0,0,116,4,0,124,0,0,131,1,0,92,
-    2,0,125,1,0,125,2,0,116,4,0,124,1,0,131,1,
-    0,92,2,0,125,1,0,125,3,0,124,3,0,116,5,0,
-    107,3,0,114,108,0,116,6,0,100,3,0,106,7,0,116,
-    5,0,124,0,0,131,2,0,131,1,0,130,1,0,110,0,
-    0,124,2,0,106,8,0,100,4,0,131,1,0,100,5,0,
-    107,3,0,114,153,0,116,6,0,100,6,0,106,7,0,124,
-    2,0,131,1,0,131,1,0,130,1,0,110,0,0,124,2,
-    0,106,9,0,100,4,0,131,1,0,100,7,0,25,125,4,
-    0,116,10,0,124,1,0,124,4,0,116,11,0,100,7,0,
-    25,23,131,2,0,83,40,8,0,0,0,117,121,1,0,0,
-    71,105,118,101,110,32,116,104,101,32,112,97,116,104,32,116,
-    111,32,97,32,46,112,121,99,46,47,46,112,121,111,32,102,
-    105,108,101,44,32,114,101,116,117,114,110,32,116,104,101,32,
-    112,97,116,104,32,116,111,32,105,116,115,32,46,112,121,32,
-    102,105,108,101,46,10,10,32,32,32,32,84,104,101,32,46,
-    112,121,99,47,46,112,121,111,32,102,105,108,101,32,100,111,
-    101,115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,
-    120,105,115,116,59,32,116,104,105,115,32,115,105,109,112,108,
-    121,32,114,101,116,117,114,110,115,32,116,104,101,32,112,97,
-    116,104,32,116,111,10,32,32,32,32,116,104,101,32,46,112,
-    121,32,102,105,108,101,32,99,97,108,99,117,108,97,116,101,
-    100,32,116,111,32,99,111,114,114,101,115,112,111,110,100,32,
-    116,111,32,116,104,101,32,46,112,121,99,47,46,112,121,111,
-    32,102,105,108,101,46,32,32,73,102,32,112,97,116,104,32,
-    100,111,101,115,10,32,32,32,32,110,111,116,32,99,111,110,
-    102,111,114,109,32,116,111,32,80,69,80,32,51,49,52,55,
-    32,102,111,114,109,97,116,44,32,86,97,108,117,101,69,114,
-    114,111,114,32,119,105,108,108,32,98,101,32,114,97,105,115,
-    101,100,46,32,73,102,10,32,32,32,32,115,121,115,46,105,
+    46,114,101,108,101,97,115,101,99,1,0,0,0,0,0,0,
+    0,1,0,0,0,4,0,0,0,67,0,0,0,115,25,0,
+    0,0,100,1,0,106,0,0,124,0,0,106,1,0,116,2,
+    0,124,0,0,131,1,0,131,2,0,83,41,2,78,122,28,
+    95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,
+    40,123,33,114,125,41,32,97,116,32,123,125,41,3,114,47,
+    0,0,0,114,72,0,0,0,114,48,0,0,0,41,1,114,
+    76,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,88,0,0,0,231,0,0,0,115,2,0,0,
+    0,0,1,122,25,95,68,117,109,109,121,77,111,100,117,108,
+    101,76,111,99,107,46,95,95,114,101,112,114,95,95,78,41,
+    8,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,
+    114,59,0,0,0,114,77,0,0,0,114,84,0,0,0,114,
+    85,0,0,0,114,88,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,89,0,
+    0,0,214,0,0,0,115,10,0,0,0,12,2,6,2,12,
+    4,12,4,12,5,114,89,0,0,0,99,1,0,0,0,0,
+    0,0,0,3,0,0,0,11,0,0,0,3,0,0,0,115,
+    142,0,0,0,100,1,0,125,1,0,121,17,0,116,0,0,
+    136,0,0,25,131,0,0,125,1,0,87,110,18,0,4,116,
+    1,0,107,10,0,114,43,0,1,1,1,89,110,1,0,88,
+    124,1,0,100,1,0,107,8,0,114,138,0,116,2,0,100,
+    1,0,107,8,0,114,83,0,116,3,0,136,0,0,131,1,
+    0,125,1,0,110,12,0,116,4,0,136,0,0,131,1,0,
+    125,1,0,135,0,0,102,1,0,100,2,0,100,3,0,134,
+    0,0,125,2,0,116,5,0,106,6,0,124,1,0,124,2,
+    0,131,2,0,116,0,0,136,0,0,60,110,0,0,124,1,
+    0,83,41,4,122,109,71,101,116,32,111,114,32,99,114,101,
+    97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108,
+    111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32,
+    109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32,
+    32,32,83,104,111,117,108,100,32,111,110,108,121,32,98,101,
+    32,99,97,108,108,101,100,32,119,105,116,104,32,116,104,101,
+    32,105,109,112,111,114,116,32,108,111,99,107,32,116,97,107,
+    101,110,46,78,99,1,0,0,0,0,0,0,0,1,0,0,
+    0,2,0,0,0,19,0,0,0,115,11,0,0,0,116,0,
+    0,136,0,0,61,100,0,0,83,41,1,78,41,1,218,13,
+    95,109,111,100,117,108,101,95,108,111,99,107,115,41,1,114,
+    36,0,0,0,41,1,114,72,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,218,2,99,98,251,0,0,0,115,2,0,
+    0,0,0,1,122,28,95,103,101,116,95,109,111,100,117,108,
+    101,95,108,111,99,107,46,60,108,111,99,97,108,115,62,46,
+    99,98,41,7,114,90,0,0,0,218,8,75,101,121,69,114,
+    114,111,114,114,69,0,0,0,114,89,0,0,0,114,67,0,
+    0,0,218,8,95,119,101,97,107,114,101,102,90,3,114,101,
+    102,41,3,114,72,0,0,0,114,70,0,0,0,114,91,0,
+    0,0,114,4,0,0,0,41,1,114,72,0,0,0,114,5,
+    0,0,0,218,16,95,103,101,116,95,109,111,100,117,108,101,
+    95,108,111,99,107,237,0,0,0,115,24,0,0,0,0,4,
+    6,1,3,1,17,1,13,1,5,1,12,1,12,1,15,2,
+    12,1,18,2,25,1,114,94,0,0,0,99,1,0,0,0,
+    0,0,0,0,2,0,0,0,11,0,0,0,67,0,0,0,
+    115,71,0,0,0,116,0,0,124,0,0,131,1,0,125,1,
+    0,116,1,0,106,2,0,131,0,0,1,121,14,0,124,1,
+    0,106,3,0,131,0,0,1,87,110,18,0,4,116,4,0,
+    107,10,0,114,56,0,1,1,1,89,110,11,0,88,124,1,
+    0,106,5,0,131,0,0,1,100,1,0,83,41,2,97,21,
+    1,0,0,82,101,108,101,97,115,101,32,116,104,101,32,103,
+    108,111,98,97,108,32,105,109,112,111,114,116,32,108,111,99,
+    107,44,32,97,110,100,32,97,99,113,117,105,114,101,115,32,
+    116,104,101,110,32,114,101,108,101,97,115,101,32,116,104,101,
+    10,32,32,32,32,109,111,100,117,108,101,32,108,111,99,107,
+    32,102,111,114,32,97,32,103,105,118,101,110,32,109,111,100,
+    117,108,101,32,110,97,109,101,46,10,32,32,32,32,84,104,
+    105,115,32,105,115,32,117,115,101,100,32,116,111,32,101,110,
+    115,117,114,101,32,97,32,109,111,100,117,108,101,32,105,115,
+    32,99,111,109,112,108,101,116,101,108,121,32,105,110,105,116,
+    105,97,108,105,122,101,100,44,32,105,110,32,116,104,101,10,
+    32,32,32,32,101,118,101,110,116,32,105,116,32,105,115,32,
+    98,101,105,110,103,32,105,109,112,111,114,116,101,100,32,98,
+    121,32,97,110,111,116,104,101,114,32,116,104,114,101,97,100,
+    46,10,10,32,32,32,32,83,104,111,117,108,100,32,111,110,
+    108,121,32,98,101,32,99,97,108,108,101,100,32,119,105,116,
+    104,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,
+    107,32,116,97,107,101,110,46,78,41,6,114,94,0,0,0,
+    218,4,95,105,109,112,218,12,114,101,108,101,97,115,101,95,
+    108,111,99,107,114,84,0,0,0,114,66,0,0,0,114,85,
+    0,0,0,41,2,114,72,0,0,0,114,70,0,0,0,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,19,
+    95,108,111,99,107,95,117,110,108,111,99,107,95,109,111,100,
+    117,108,101,0,1,0,0,115,14,0,0,0,0,7,12,1,
+    10,1,3,1,14,1,13,3,5,2,114,97,0,0,0,99,
+    1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
+    79,0,0,0,115,13,0,0,0,124,0,0,124,1,0,124,
+    2,0,142,0,0,83,41,1,97,46,1,0,0,114,101,109,
+    111,118,101,95,105,109,112,111,114,116,108,105,98,95,102,114,
+    97,109,101,115,32,105,110,32,105,109,112,111,114,116,46,99,
+    32,119,105,108,108,32,97,108,119,97,121,115,32,114,101,109,
+    111,118,101,32,115,101,113,117,101,110,99,101,115,10,32,32,
+    32,32,111,102,32,105,109,112,111,114,116,108,105,98,32,102,
+    114,97,109,101,115,32,116,104,97,116,32,101,110,100,32,119,
+    105,116,104,32,97,32,99,97,108,108,32,116,111,32,116,104,
+    105,115,32,102,117,110,99,116,105,111,110,10,10,32,32,32,
+    32,85,115,101,32,105,116,32,105,110,115,116,101,97,100,32,
+    111,102,32,97,32,110,111,114,109,97,108,32,99,97,108,108,
+    32,105,110,32,112,108,97,99,101,115,32,119,104,101,114,101,
+    32,105,110,99,108,117,100,105,110,103,32,116,104,101,32,105,
+    109,112,111,114,116,108,105,98,10,32,32,32,32,102,114,97,
+    109,101,115,32,105,110,116,114,111,100,117,99,101,115,32,117,
+    110,119,97,110,116,101,100,32,110,111,105,115,101,32,105,110,
+    116,111,32,116,104,101,32,116,114,97,99,101,98,97,99,107,
+    32,40,101,46,103,46,32,119,104,101,110,32,101,120,101,99,
+    117,116,105,110,103,10,32,32,32,32,109,111,100,117,108,101,
+    32,99,111,100,101,41,10,32,32,32,32,114,4,0,0,0,
+    41,3,218,1,102,218,4,97,114,103,115,90,4,107,119,100,
+    115,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
+    218,25,95,99,97,108,108,95,119,105,116,104,95,102,114,97,
+    109,101,115,95,114,101,109,111,118,101,100,20,1,0,0,115,
+    2,0,0,0,0,8,114,100,0,0,0,105,228,12,0,0,
+    233,2,0,0,0,114,13,0,0,0,115,2,0,0,0,13,
+    10,90,11,95,95,112,121,99,97,99,104,101,95,95,122,3,
+    46,112,121,122,4,46,112,121,99,122,4,46,112,121,111,78,
+    99,2,0,0,0,0,0,0,0,11,0,0,0,6,0,0,
+    0,67,0,0,0,115,180,0,0,0,124,1,0,100,1,0,
+    107,8,0,114,25,0,116,0,0,106,1,0,106,2,0,12,
+    110,3,0,124,1,0,125,2,0,124,2,0,114,46,0,116,
+    3,0,125,3,0,110,6,0,116,4,0,125,3,0,116,5,
+    0,124,0,0,131,1,0,92,2,0,125,4,0,125,5,0,
+    124,5,0,106,6,0,100,2,0,131,1,0,92,3,0,125,
+    6,0,125,7,0,125,8,0,116,0,0,106,7,0,106,8,
+    0,125,9,0,124,9,0,100,1,0,107,8,0,114,133,0,
+    116,9,0,100,3,0,131,1,0,130,1,0,110,0,0,100,
+    4,0,106,10,0,124,6,0,124,7,0,124,9,0,124,3,
+    0,100,5,0,25,103,4,0,131,1,0,125,10,0,116,11,
+    0,124,4,0,116,12,0,124,10,0,131,3,0,83,41,6,
+    97,244,1,0,0,71,105,118,101,110,32,116,104,101,32,112,
+    97,116,104,32,116,111,32,97,32,46,112,121,32,102,105,108,
+    101,44,32,114,101,116,117,114,110,32,116,104,101,32,112,97,
+    116,104,32,116,111,32,105,116,115,32,46,112,121,99,47,46,
+    112,121,111,32,102,105,108,101,46,10,10,32,32,32,32,84,
+    104,101,32,46,112,121,32,102,105,108,101,32,100,111,101,115,
+    32,110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,
+    115,116,59,32,116,104,105,115,32,115,105,109,112,108,121,32,
+    114,101,116,117,114,110,115,32,116,104,101,32,112,97,116,104,
+    32,116,111,32,116,104,101,10,32,32,32,32,46,112,121,99,
+    47,46,112,121,111,32,102,105,108,101,32,99,97,108,99,117,
+    108,97,116,101,100,32,97,115,32,105,102,32,116,104,101,32,
+    46,112,121,32,102,105,108,101,32,119,101,114,101,32,105,109,
+    112,111,114,116,101,100,46,32,32,84,104,101,32,101,120,116,
+    101,110,115,105,111,110,10,32,32,32,32,119,105,108,108,32,
+    98,101,32,46,112,121,99,32,117,110,108,101,115,115,32,115,
+    121,115,46,102,108,97,103,115,46,111,112,116,105,109,105,122,
+    101,32,105,115,32,110,111,110,45,122,101,114,111,44,32,116,
+    104,101,110,32,105,116,32,119,105,108,108,32,98,101,32,46,
+    112,121,111,46,10,10,32,32,32,32,73,102,32,100,101,98,
+    117,103,95,111,118,101,114,114,105,100,101,32,105,115,32,110,
+    111,116,32,78,111,110,101,44,32,116,104,101,110,32,105,116,
+    32,109,117,115,116,32,98,101,32,97,32,98,111,111,108,101,
+    97,110,32,97,110,100,32,105,115,32,117,115,101,100,32,105,
+    110,10,32,32,32,32,112,108,97,99,101,32,111,102,32,115,
+    121,115,46,102,108,97,103,115,46,111,112,116,105,109,105,122,
+    101,46,10,10,32,32,32,32,73,102,32,115,121,115,46,105,
     109,112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,
     99,104,101,95,116,97,103,32,105,115,32,78,111,110,101,32,
     116,104,101,110,32,78,111,116,73,109,112,108,101,109,101,110,
     116,101,100,69,114,114,111,114,32,105,115,32,114,97,105,115,
-    101,100,46,10,10,32,32,32,32,78,117,36,0,0,0,115,
+    101,100,46,10,10,32,32,32,32,78,218,1,46,122,36,115,
     121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,
     110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,
-    111,110,101,117,37,0,0,0,123,125,32,110,111,116,32,98,
-    111,116,116,111,109,45,108,101,118,101,108,32,100,105,114,101,
-    99,116,111,114,121,32,105,110,32,123,33,114,125,114,101,0,
-    0,0,114,100,0,0,0,117,28,0,0,0,101,120,112,101,
-    99,116,101,100,32,111,110,108,121,32,50,32,100,111,116,115,
-    32,105,110,32,123,33,114,125,114,67,0,0,0,40,12,0,
-    0,0,114,7,0,0,0,114,107,0,0,0,114,108,0,0,
-    0,114,109,0,0,0,114,38,0,0,0,114,110,0,0,0,
-    244,10,0,0,0,86,97,108,117,101,69,114,114,111,114,114,
-    46,0,0,0,114,73,0,0,0,114,106,0,0,0,114,28,
-    0,0,0,244,15,0,0,0,83,79,85,82,67,69,95,83,
-    85,70,70,73,88,69,83,40,5,0,0,0,114,35,0,0,
-    0,114,113,0,0,0,116,16,0,0,0,112,121,99,97,99,
-    104,101,95,102,105,108,101,110,97,109,101,116,7,0,0,0,
-    112,121,99,97,99,104,101,114,114,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,244,17,0,0,0,
-    115,111,117,114,99,101,95,102,114,111,109,95,99,97,99,104,
-    101,158,1,0,0,115,24,0,0,0,0,9,18,1,15,1,
-    18,1,18,1,12,1,3,1,24,1,21,1,3,1,21,1,
-    19,1,114,120,0,0,0,99,1,0,0,0,0,0,0,0,
-    5,0,0,0,13,0,0,0,67,0,0,0,115,164,0,0,
-    0,116,0,0,124,0,0,131,1,0,100,1,0,107,2,0,
-    114,22,0,100,2,0,83,124,0,0,106,1,0,100,3,0,
-    131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124,
-    1,0,12,115,81,0,124,3,0,106,2,0,131,0,0,100,
-    7,0,100,8,0,133,2,0,25,100,6,0,107,3,0,114,
-    85,0,124,0,0,83,121,16,0,116,3,0,124,0,0,131,
-    1,0,125,4,0,87,110,40,0,4,116,4,0,116,5,0,
-    102,2,0,107,10,0,114,143,0,1,1,1,124,0,0,100,
-    2,0,100,9,0,133,2,0,25,125,4,0,89,110,1,0,
-    88,116,6,0,124,4,0,131,1,0,114,160,0,124,4,0,
-    83,124,0,0,83,40,10,0,0,0,117,188,0,0,0,67,
-    111,110,118,101,114,116,32,97,32,98,121,116,101,99,111,100,
-    101,32,102,105,108,101,32,112,97,116,104,32,116,111,32,97,
-    32,115,111,117,114,99,101,32,112,97,116,104,32,40,105,102,
-    32,112,111,115,115,105,98,108,101,41,46,10,10,32,32,32,
-    32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,101,
-    120,105,115,116,115,32,112,117,114,101,108,121,32,102,111,114,
-    32,98,97,99,107,119,97,114,100,115,45,99,111,109,112,97,
-    116,105,98,105,108,105,116,121,32,102,111,114,10,32,32,32,
-    32,80,121,73,109,112,111,114,116,95,69,120,101,99,67,111,
-    100,101,77,111,100,117,108,101,87,105,116,104,70,105,108,101,
-    110,97,109,101,115,40,41,32,105,110,32,116,104,101,32,67,
-    32,65,80,73,46,10,10,32,32,32,32,114,67,0,0,0,
-    78,114,101,0,0,0,233,3,0,0,0,114,29,0,0,0,
-    116,2,0,0,0,112,121,233,253,255,255,255,233,255,255,255,
-    255,114,123,0,0,0,40,7,0,0,0,114,31,0,0,0,
-    114,32,0,0,0,244,5,0,0,0,108,111,119,101,114,114,
-    120,0,0,0,114,109,0,0,0,114,118,0,0,0,114,44,
-    0,0,0,40,5,0,0,0,244,13,0,0,0,98,121,116,
-    101,99,111,100,101,95,112,97,116,104,116,4,0,0,0,114,
-    101,115,116,114,36,0,0,0,116,9,0,0,0,101,120,116,
-    101,110,115,105,111,110,244,11,0,0,0,115,111,117,114,99,
-    101,95,112,97,116,104,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,244,15,0,0,0,95,103,101,116,95,115,
-    111,117,114,99,101,102,105,108,101,181,1,0,0,115,20,0,
-    0,0,0,7,18,1,4,1,24,1,35,1,4,1,3,1,
-    16,1,19,1,21,1,114,127,0,0,0,99,1,0,0,0,
-    0,0,0,0,2,0,0,0,11,0,0,0,67,0,0,0,
-    115,63,0,0,0,121,22,0,116,0,0,106,1,0,124,0,
-    0,131,1,0,106,2,0,125,1,0,87,110,24,0,4,116,
-    3,0,107,10,0,114,48,0,1,1,1,100,1,0,125,1,
+    111,110,101,114,30,0,0,0,114,68,0,0,0,41,13,114,
+    7,0,0,0,218,5,102,108,97,103,115,218,8,111,112,116,
+    105,109,105,122,101,218,23,68,69,66,85,71,95,66,89,84,
+    69,67,79,68,69,95,83,85,70,70,73,88,69,83,218,27,
+    79,80,84,73,77,73,90,69,68,95,66,89,84,69,67,79,
+    68,69,95,83,85,70,70,73,88,69,83,114,38,0,0,0,
+    218,9,112,97,114,116,105,116,105,111,110,218,14,105,109,112,
+    108,101,109,101,110,116,97,116,105,111,110,218,9,99,97,99,
+    104,101,95,116,97,103,218,19,78,111,116,73,109,112,108,101,
+    109,101,110,116,101,100,69,114,114,111,114,114,26,0,0,0,
+    114,28,0,0,0,218,8,95,80,89,67,65,67,72,69,41,
+    11,114,35,0,0,0,90,14,100,101,98,117,103,95,111,118,
+    101,114,114,105,100,101,218,5,100,101,98,117,103,218,8,115,
+    117,102,102,105,120,101,115,218,4,104,101,97,100,114,37,0,
+    0,0,218,13,98,97,115,101,95,102,105,108,101,110,97,109,
+    101,218,3,115,101,112,114,36,0,0,0,90,3,116,97,103,
+    218,8,102,105,108,101,110,97,109,101,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,218,17,99,97,99,104,101,
+    95,102,114,111,109,95,115,111,117,114,99,101,143,1,0,0,
+    115,22,0,0,0,0,13,31,1,6,1,9,2,6,1,18,
+    1,24,1,12,1,12,1,15,1,31,1,114,118,0,0,0,
+    99,1,0,0,0,0,0,0,0,5,0,0,0,5,0,0,
+    0,67,0,0,0,115,193,0,0,0,116,0,0,106,1,0,
+    106,2,0,100,1,0,107,8,0,114,33,0,116,3,0,100,
+    2,0,131,1,0,130,1,0,110,0,0,116,4,0,124,0,
+    0,131,1,0,92,2,0,125,1,0,125,2,0,116,4,0,
+    124,1,0,131,1,0,92,2,0,125,1,0,125,3,0,124,
+    3,0,116,5,0,107,3,0,114,108,0,116,6,0,100,3,
+    0,106,7,0,116,5,0,124,0,0,131,2,0,131,1,0,
+    130,1,0,110,0,0,124,2,0,106,8,0,100,4,0,131,
+    1,0,100,5,0,107,3,0,114,153,0,116,6,0,100,6,
+    0,106,7,0,124,2,0,131,1,0,131,1,0,130,1,0,
+    110,0,0,124,2,0,106,9,0,100,4,0,131,1,0,100,
+    7,0,25,125,4,0,116,10,0,124,1,0,124,4,0,116,
+    11,0,100,7,0,25,23,131,2,0,83,41,8,97,121,1,
+    0,0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,
+    32,116,111,32,97,32,46,112,121,99,46,47,46,112,121,111,
+    32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,
+    101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,
+    121,32,102,105,108,101,46,10,10,32,32,32,32,84,104,101,
+    32,46,112,121,99,47,46,112,121,111,32,102,105,108,101,32,
+    100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,
+    32,101,120,105,115,116,59,32,116,104,105,115,32,115,105,109,
+    112,108,121,32,114,101,116,117,114,110,115,32,116,104,101,32,
+    112,97,116,104,32,116,111,10,32,32,32,32,116,104,101,32,
+    46,112,121,32,102,105,108,101,32,99,97,108,99,117,108,97,
+    116,101,100,32,116,111,32,99,111,114,114,101,115,112,111,110,
+    100,32,116,111,32,116,104,101,32,46,112,121,99,47,46,112,
+    121,111,32,102,105,108,101,46,32,32,73,102,32,112,97,116,
+    104,32,100,111,101,115,10,32,32,32,32,110,111,116,32,99,
+    111,110,102,111,114,109,32,116,111,32,80,69,80,32,51,49,
+    52,55,32,102,111,114,109,97,116,44,32,86,97,108,117,101,
+    69,114,114,111,114,32,119,105,108,108,32,98,101,32,114,97,
+    105,115,101,100,46,32,73,102,10,32,32,32,32,115,121,115,
+    46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46,
+    99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,110,
+    101,32,116,104,101,110,32,78,111,116,73,109,112,108,101,109,
+    101,110,116,101,100,69,114,114,111,114,32,105,115,32,114,97,
+    105,115,101,100,46,10,10,32,32,32,32,78,122,36,115,121,
+    115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,
+    46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,
+    110,101,122,37,123,125,32,110,111,116,32,98,111,116,116,111,
+    109,45,108,101,118,101,108,32,100,105,114,101,99,116,111,114,
+    121,32,105,110,32,123,33,114,125,114,102,0,0,0,114,101,
+    0,0,0,122,28,101,120,112,101,99,116,101,100,32,111,110,
+    108,121,32,50,32,100,111,116,115,32,105,110,32,123,33,114,
+    125,114,68,0,0,0,41,12,114,7,0,0,0,114,108,0,
+    0,0,114,109,0,0,0,114,110,0,0,0,114,38,0,0,
+    0,114,111,0,0,0,218,10,86,97,108,117,101,69,114,114,
+    111,114,114,47,0,0,0,114,74,0,0,0,114,107,0,0,
+    0,114,28,0,0,0,218,15,83,79,85,82,67,69,95,83,
+    85,70,70,73,88,69,83,41,5,114,35,0,0,0,114,114,
+    0,0,0,90,16,112,121,99,97,99,104,101,95,102,105,108,
+    101,110,97,109,101,90,7,112,121,99,97,99,104,101,114,115,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,218,17,115,111,117,114,99,101,95,102,114,111,109,95,
+    99,97,99,104,101,170,1,0,0,115,24,0,0,0,0,9,
+    18,1,15,1,18,1,18,1,12,1,3,1,24,1,21,1,
+    3,1,21,1,19,1,114,121,0,0,0,99,1,0,0,0,
+    0,0,0,0,5,0,0,0,13,0,0,0,67,0,0,0,
+    115,164,0,0,0,116,0,0,124,0,0,131,1,0,100,1,
+    0,107,2,0,114,22,0,100,2,0,83,124,0,0,106,1,
+    0,100,3,0,131,1,0,92,3,0,125,1,0,125,2,0,
+    125,3,0,124,1,0,12,115,81,0,124,3,0,106,2,0,
+    131,0,0,100,7,0,100,8,0,133,2,0,25,100,6,0,
+    107,3,0,114,85,0,124,0,0,83,121,16,0,116,3,0,
+    124,0,0,131,1,0,125,4,0,87,110,40,0,4,116,4,
+    0,116,5,0,102,2,0,107,10,0,114,143,0,1,1,1,
+    124,0,0,100,2,0,100,9,0,133,2,0,25,125,4,0,
+    89,110,1,0,88,116,6,0,124,4,0,131,1,0,114,160,
+    0,124,4,0,83,124,0,0,83,41,10,122,188,67,111,110,
+    118,101,114,116,32,97,32,98,121,116,101,99,111,100,101,32,
+    102,105,108,101,32,112,97,116,104,32,116,111,32,97,32,115,
+    111,117,114,99,101,32,112,97,116,104,32,40,105,102,32,112,
+    111,115,115,105,98,108,101,41,46,10,10,32,32,32,32,84,
+    104,105,115,32,102,117,110,99,116,105,111,110,32,101,120,105,
+    115,116,115,32,112,117,114,101,108,121,32,102,111,114,32,98,
+    97,99,107,119,97,114,100,115,45,99,111,109,112,97,116,105,
+    98,105,108,105,116,121,32,102,111,114,10,32,32,32,32,80,
+    121,73,109,112,111,114,116,95,69,120,101,99,67,111,100,101,
+    77,111,100,117,108,101,87,105,116,104,70,105,108,101,110,97,
+    109,101,115,40,41,32,105,110,32,116,104,101,32,67,32,65,
+    80,73,46,10,10,32,32,32,32,114,68,0,0,0,78,114,
+    102,0,0,0,233,3,0,0,0,114,29,0,0,0,90,2,
+    112,121,233,253,255,255,255,233,255,255,255,255,114,124,0,0,
+    0,41,7,114,31,0,0,0,114,32,0,0,0,218,5,108,
+    111,119,101,114,114,121,0,0,0,114,110,0,0,0,114,119,
+    0,0,0,114,44,0,0,0,41,5,218,13,98,121,116,101,
+    99,111,100,101,95,112,97,116,104,90,4,114,101,115,116,114,
+    36,0,0,0,90,9,101,120,116,101,110,115,105,111,110,218,
+    11,115,111,117,114,99,101,95,112,97,116,104,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,218,15,95,103,101,
+    116,95,115,111,117,114,99,101,102,105,108,101,193,1,0,0,
+    115,20,0,0,0,0,7,18,1,4,1,24,1,35,1,4,
+    1,3,1,16,1,19,1,21,1,114,128,0,0,0,99,1,
+    0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,
+    0,0,0,115,60,0,0,0,121,19,0,116,0,0,124,0,
+    0,131,1,0,106,1,0,125,1,0,87,110,24,0,4,116,
+    2,0,107,10,0,114,45,0,1,1,1,100,1,0,125,1,
     0,89,110,1,0,88,124,1,0,100,2,0,79,125,1,0,
-    124,1,0,83,40,3,0,0,0,117,51,0,0,0,67,97,
-    108,99,117,108,97,116,101,32,116,104,101,32,109,111,100,101,
-    32,112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,
-    32,97,32,98,121,116,101,99,111,100,101,32,102,105,108,101,
-    46,105,182,1,0,0,233,128,0,0,0,40,4,0,0,0,
-    114,3,0,0,0,114,39,0,0,0,114,41,0,0,0,114,
-    40,0,0,0,40,2,0,0,0,114,35,0,0,0,114,42,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,244,10,0,0,0,95,99,97,108,99,95,109,111,100,
-    101,200,1,0,0,115,12,0,0,0,0,2,3,1,22,1,
-    13,1,11,3,10,1,114,129,0,0,0,244,9,0,0,0,
-    118,101,114,98,111,115,105,116,121,114,29,0,0,0,99,1,
-    0,0,0,1,0,0,0,3,0,0,0,4,0,0,0,71,
-    0,0,0,115,81,0,0,0,116,0,0,106,1,0,106,2,
-    0,124,1,0,107,5,0,114,77,0,124,0,0,106,3,0,
-    100,6,0,131,1,0,115,46,0,100,3,0,124,0,0,23,
-    125,0,0,110,0,0,116,4,0,124,0,0,106,5,0,124,
-    2,0,140,0,0,100,4,0,116,0,0,106,6,0,131,1,
-    1,1,110,0,0,100,5,0,83,40,7,0,0,0,117,61,
-    0,0,0,80,114,105,110,116,32,116,104,101,32,109,101,115,
-    115,97,103,101,32,116,111,32,115,116,100,101,114,114,32,105,
-    102,32,45,118,47,80,89,84,72,79,78,86,69,82,66,79,
-    83,69,32,105,115,32,116,117,114,110,101,100,32,111,110,46,
-    245,1,0,0,0,35,245,7,0,0,0,105,109,112,111,114,
-    116,32,117,2,0,0,0,35,32,114,53,0,0,0,78,40,
-    2,0,0,0,114,131,0,0,0,114,132,0,0,0,40,7,
-    0,0,0,114,7,0,0,0,114,102,0,0,0,244,7,0,
-    0,0,118,101,114,98,111,115,101,114,9,0,0,0,244,5,
-    0,0,0,112,114,105,110,116,114,46,0,0,0,244,6,0,
-    0,0,115,116,100,101,114,114,40,3,0,0,0,244,7,0,
-    0,0,109,101,115,115,97,103,101,114,130,0,0,0,114,98,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,244,16,0,0,0,95,118,101,114,98,111,115,101,95,
-    109,101,115,115,97,103,101,212,1,0,0,115,8,0,0,0,
-    0,2,18,1,15,1,13,1,114,137,0,0,0,99,0,0,
-    0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,
-    0,0,115,52,0,0,0,101,0,0,90,1,0,100,0,0,
-    90,2,0,100,1,0,100,2,0,132,0,0,90,3,0,100,
-    3,0,100,4,0,132,0,0,90,4,0,100,5,0,100,6,
-    0,132,0,0,90,5,0,100,7,0,83,40,8,0,0,0,
-    244,13,0,0,0,95,77,97,110,97,103,101,82,101,108,111,
-    97,100,99,2,0,0,0,0,0,0,0,2,0,0,0,2,
-    0,0,0,67,0,0,0,115,13,0,0,0,124,1,0,124,
-    0,0,95,0,0,100,0,0,83,40,1,0,0,0,78,40,
-    1,0,0,0,244,5,0,0,0,95,110,97,109,101,40,2,
-    0,0,0,114,75,0,0,0,114,71,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,114,76,0,0,
-    0,222,1,0,0,115,2,0,0,0,0,1,117,22,0,0,
-    0,95,77,97,110,97,103,101,82,101,108,111,97,100,46,95,
-    95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,
-    1,0,0,0,2,0,0,0,67,0,0,0,115,25,0,0,
-    0,124,0,0,106,0,0,116,1,0,106,2,0,107,6,0,
-    124,0,0,95,3,0,100,0,0,83,40,1,0,0,0,78,
-    40,4,0,0,0,114,139,0,0,0,114,7,0,0,0,244,
-    7,0,0,0,109,111,100,117,108,101,115,244,10,0,0,0,
-    95,105,115,95,114,101,108,111,97,100,40,1,0,0,0,114,
-    75,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,244,9,0,0,0,95,95,101,110,116,101,114,95,
-    95,225,1,0,0,115,2,0,0,0,0,1,117,23,0,0,
-    0,95,77,97,110,97,103,101,82,101,108,111,97,100,46,95,
-    95,101,110,116,101,114,95,95,99,1,0,0,0,0,0,0,
-    0,2,0,0,0,12,0,0,0,71,0,0,0,115,80,0,
-    0,0,116,0,0,100,1,0,100,2,0,132,0,0,124,1,
-    0,68,131,1,0,131,1,0,114,76,0,124,0,0,106,1,
-    0,12,114,76,0,121,17,0,116,2,0,106,3,0,124,0,
-    0,106,4,0,61,87,113,76,0,4,116,5,0,107,10,0,
-    114,72,0,1,1,1,89,113,76,0,88,110,0,0,100,0,
-    0,83,40,3,0,0,0,78,99,1,0,0,0,0,0,0,
-    0,2,0,0,0,3,0,0,0,115,0,0,0,115,27,0,
-    0,0,124,0,0,93,17,0,125,1,0,124,1,0,100,0,
-    0,107,9,0,86,1,113,3,0,100,0,0,83,40,1,0,
-    0,0,78,114,4,0,0,0,40,2,0,0,0,114,22,0,
-    0,0,116,3,0,0,0,97,114,103,114,4,0,0,0,114,
-    4,0,0,0,114,5,0,0,0,245,9,0,0,0,60,103,
-    101,110,101,120,112,114,62,229,1,0,0,115,2,0,0,0,
-    6,0,117,41,0,0,0,95,77,97,110,97,103,101,82,101,
-    108,111,97,100,46,95,95,101,120,105,116,95,95,46,60,108,
-    111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,
-    40,6,0,0,0,244,3,0,0,0,97,110,121,114,141,0,
-    0,0,114,7,0,0,0,114,140,0,0,0,114,139,0,0,
-    0,114,91,0,0,0,40,2,0,0,0,114,75,0,0,0,
-    114,98,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
-    5,0,0,0,244,8,0,0,0,95,95,101,120,105,116,95,
-    95,228,1,0,0,115,10,0,0,0,0,1,35,1,3,1,
-    17,1,13,1,117,22,0,0,0,95,77,97,110,97,103,101,
-    82,101,108,111,97,100,46,95,95,101,120,105,116,95,95,78,
-    40,6,0,0,0,114,56,0,0,0,114,55,0,0,0,114,
-    57,0,0,0,114,76,0,0,0,114,142,0,0,0,114,145,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,114,138,0,0,0,220,1,0,0,
-    115,6,0,0,0,12,2,12,3,12,3,114,138,0,0,0,
-    99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,
-    0,0,0,0,0,115,82,0,0,0,101,0,0,90,1,0,
-    100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,
-    3,0,135,0,0,102,1,0,100,4,0,100,5,0,134,0,
-    1,90,4,0,135,0,0,102,1,0,100,6,0,100,7,0,
-    134,0,0,90,5,0,135,0,0,102,1,0,100,8,0,100,
-    9,0,134,0,0,90,6,0,135,0,0,83,40,10,0,0,
-    0,244,14,0,0,0,95,77,111,100,117,108,101,77,97,110,
-    97,103,101,114,117,122,0,0,0,67,111,110,116,101,120,116,
-    32,109,97,110,97,103,101,114,32,119,104,105,99,104,32,114,
-    101,116,117,114,110,115,32,116,104,101,32,109,111,100,117,108,
-    101,32,116,111,32,98,101,32,108,111,97,100,101,100,46,10,
-    10,32,32,32,32,68,111,101,115,32,116,104,101,32,112,114,
-    111,112,101,114,32,117,110,108,111,97,100,105,110,103,32,102,
-    114,111,109,32,115,121,115,46,109,111,100,117,108,101,115,32,
-    117,112,111,110,32,102,97,105,108,117,114,101,46,10,10,32,
-    32,32,32,244,10,0,0,0,114,101,115,101,116,95,110,97,
-    109,101,84,99,2,0,0,0,1,0,0,0,3,0,0,0,
-    2,0,0,0,3,0,0,0,115,29,0,0,0,116,0,0,
-    131,0,0,106,1,0,124,1,0,131,1,0,1,124,2,0,
-    124,0,0,95,2,0,100,1,0,83,40,2,0,0,0,117,
-    183,0,0,0,80,114,101,112,97,114,101,32,116,104,101,32,
-    99,111,110,116,101,120,116,32,109,97,110,97,103,101,114,46,
-    10,10,32,32,32,32,32,32,32,32,84,104,101,32,114,101,
-    115,101,116,95,110,97,109,101,32,97,114,103,117,109,101,110,
-    116,32,115,112,101,99,105,102,105,101,115,32,119,104,101,116,
-    104,101,114,32,116,111,32,117,110,99,111,110,100,105,116,105,
-    111,110,97,108,108,121,32,114,101,115,101,116,10,32,32,32,
-    32,32,32,32,32,116,104,101,32,95,95,110,97,109,101,95,
-    95,32,97,116,116,114,105,98,117,116,101,32,105,102,32,116,
-    104,101,32,109,111,100,117,108,101,32,105,115,32,102,111,117,
-    110,100,32,116,111,32,98,101,32,97,32,114,101,108,111,97,
-    100,46,10,32,32,32,32,32,32,32,32,78,40,3,0,0,
-    0,244,5,0,0,0,115,117,112,101,114,114,76,0,0,0,
-    244,11,0,0,0,95,114,101,115,101,116,95,110,97,109,101,
-    40,3,0,0,0,114,75,0,0,0,114,71,0,0,0,114,
-    147,0,0,0,40,1,0,0,0,244,9,0,0,0,95,95,
+    124,1,0,83,41,3,122,51,67,97,108,99,117,108,97,116,
+    101,32,116,104,101,32,109,111,100,101,32,112,101,114,109,105,
+    115,115,105,111,110,115,32,102,111,114,32,97,32,98,121,116,
+    101,99,111,100,101,32,102,105,108,101,46,105,182,1,0,0,
+    233,128,0,0,0,41,3,114,39,0,0,0,114,41,0,0,
+    0,114,40,0,0,0,41,2,114,35,0,0,0,114,42,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,218,10,95,99,97,108,99,95,109,111,100,101,212,1,0,
+    0,115,12,0,0,0,0,2,3,1,19,1,13,1,11,3,
+    10,1,114,130,0,0,0,218,9,118,101,114,98,111,115,105,
+    116,121,114,29,0,0,0,99,1,0,0,0,1,0,0,0,
+    3,0,0,0,4,0,0,0,71,0,0,0,115,81,0,0,
+    0,116,0,0,106,1,0,106,2,0,124,1,0,107,5,0,
+    114,77,0,124,0,0,106,3,0,100,6,0,131,1,0,115,
+    46,0,100,3,0,124,0,0,23,125,0,0,110,0,0,116,
+    4,0,124,0,0,106,5,0,124,2,0,140,0,0,100,4,
+    0,116,0,0,106,6,0,131,1,1,1,110,0,0,100,5,
+    0,83,41,7,122,61,80,114,105,110,116,32,116,104,101,32,
+    109,101,115,115,97,103,101,32,116,111,32,115,116,100,101,114,
+    114,32,105,102,32,45,118,47,80,89,84,72,79,78,86,69,
+    82,66,79,83,69,32,105,115,32,116,117,114,110,101,100,32,
+    111,110,46,250,1,35,250,7,105,109,112,111,114,116,32,122,
+    2,35,32,114,54,0,0,0,78,41,2,114,132,0,0,0,
+    114,133,0,0,0,41,7,114,7,0,0,0,114,103,0,0,
+    0,218,7,118,101,114,98,111,115,101,114,9,0,0,0,218,
+    5,112,114,105,110,116,114,47,0,0,0,218,6,115,116,100,
+    101,114,114,41,3,218,7,109,101,115,115,97,103,101,114,131,
+    0,0,0,114,99,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,218,16,95,118,101,114,98,111,115,
+    101,95,109,101,115,115,97,103,101,224,1,0,0,115,8,0,
+    0,0,0,2,18,1,15,1,13,1,114,138,0,0,0,99,
+    0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
+    64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100,
+    0,0,90,2,0,100,1,0,100,2,0,132,0,0,90,3,
+    0,100,3,0,100,4,0,132,0,0,90,4,0,100,5,0,
+    100,6,0,132,0,0,90,5,0,100,7,0,83,41,8,218,
+    13,95,77,97,110,97,103,101,82,101,108,111,97,100,99,2,
+    0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,
+    0,0,0,115,13,0,0,0,124,1,0,124,0,0,95,0,
+    0,100,0,0,83,41,1,78,41,1,218,5,95,110,97,109,
+    101,41,2,114,76,0,0,0,114,72,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,114,77,0,0,
+    0,234,1,0,0,115,2,0,0,0,0,1,122,22,95,77,
+    97,110,97,103,101,82,101,108,111,97,100,46,95,95,105,110,
+    105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,
+    0,2,0,0,0,67,0,0,0,115,25,0,0,0,124,0,
+    0,106,0,0,116,1,0,106,2,0,107,6,0,124,0,0,
+    95,3,0,100,0,0,83,41,1,78,41,4,114,140,0,0,
+    0,114,7,0,0,0,218,7,109,111,100,117,108,101,115,218,
+    10,95,105,115,95,114,101,108,111,97,100,41,1,114,76,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,218,9,95,95,101,110,116,101,114,95,95,237,1,0,0,
+    115,2,0,0,0,0,1,122,23,95,77,97,110,97,103,101,
+    82,101,108,111,97,100,46,95,95,101,110,116,101,114,95,95,
+    99,1,0,0,0,0,0,0,0,2,0,0,0,12,0,0,
+    0,71,0,0,0,115,80,0,0,0,116,0,0,100,1,0,
+    100,2,0,132,0,0,124,1,0,68,131,1,0,131,1,0,
+    114,76,0,124,0,0,106,1,0,12,114,76,0,121,17,0,
+    116,2,0,106,3,0,124,0,0,106,4,0,61,87,113,76,
+    0,4,116,5,0,107,10,0,114,72,0,1,1,1,89,113,
+    76,0,88,110,0,0,100,0,0,83,41,3,78,99,1,0,
+    0,0,0,0,0,0,2,0,0,0,3,0,0,0,115,0,
+    0,0,115,27,0,0,0,124,0,0,93,17,0,125,1,0,
+    124,1,0,100,0,0,107,9,0,86,1,113,3,0,100,0,
+    0,83,41,1,78,114,4,0,0,0,41,2,114,22,0,0,
+    0,90,3,97,114,103,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,250,9,60,103,101,110,101,120,112,114,62,
+    241,1,0,0,115,2,0,0,0,6,0,122,41,95,77,97,
+    110,97,103,101,82,101,108,111,97,100,46,95,95,101,120,105,
+    116,95,95,46,60,108,111,99,97,108,115,62,46,60,103,101,
+    110,101,120,112,114,62,41,6,218,3,97,110,121,114,142,0,
+    0,0,114,7,0,0,0,114,141,0,0,0,114,140,0,0,
+    0,114,92,0,0,0,41,2,114,76,0,0,0,114,99,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,218,8,95,95,101,120,105,116,95,95,240,1,0,0,115,
+    10,0,0,0,0,1,35,1,3,1,17,1,13,1,122,22,
+    95,77,97,110,97,103,101,82,101,108,111,97,100,46,95,95,
+    101,120,105,116,95,95,78,41,6,114,57,0,0,0,114,56,
+    0,0,0,114,58,0,0,0,114,77,0,0,0,114,143,0,
+    0,0,114,146,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,114,139,0,0,0,
+    232,1,0,0,115,6,0,0,0,12,2,12,3,12,3,114,
+    139,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
+    0,5,0,0,0,0,0,0,0,115,82,0,0,0,101,0,
+    0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,
+    100,2,0,100,3,0,135,0,0,102,1,0,100,4,0,100,
+    5,0,134,0,1,90,4,0,135,0,0,102,1,0,100,6,
+    0,100,7,0,134,0,0,90,5,0,135,0,0,102,1,0,
+    100,8,0,100,9,0,134,0,0,90,6,0,135,0,0,83,
+    41,10,218,14,95,77,111,100,117,108,101,77,97,110,97,103,
+    101,114,122,122,67,111,110,116,101,120,116,32,109,97,110,97,
+    103,101,114,32,119,104,105,99,104,32,114,101,116,117,114,110,
+    115,32,116,104,101,32,109,111,100,117,108,101,32,116,111,32,
+    98,101,32,108,111,97,100,101,100,46,10,10,32,32,32,32,
+    68,111,101,115,32,116,104,101,32,112,114,111,112,101,114,32,
+    117,110,108,111,97,100,105,110,103,32,102,114,111,109,32,115,
+    121,115,46,109,111,100,117,108,101,115,32,117,112,111,110,32,
+    102,97,105,108,117,114,101,46,10,10,32,32,32,32,218,10,
+    114,101,115,101,116,95,110,97,109,101,84,99,2,0,0,0,
+    1,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,
+    115,29,0,0,0,116,0,0,131,0,0,106,1,0,124,1,
+    0,131,1,0,1,124,2,0,124,0,0,95,2,0,100,1,
+    0,83,41,2,122,183,80,114,101,112,97,114,101,32,116,104,
+    101,32,99,111,110,116,101,120,116,32,109,97,110,97,103,101,
+    114,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,
+    114,101,115,101,116,95,110,97,109,101,32,97,114,103,117,109,
+    101,110,116,32,115,112,101,99,105,102,105,101,115,32,119,104,
+    101,116,104,101,114,32,116,111,32,117,110,99,111,110,100,105,
+    116,105,111,110,97,108,108,121,32,114,101,115,101,116,10,32,
+    32,32,32,32,32,32,32,116,104,101,32,95,95,110,97,109,
+    101,95,95,32,97,116,116,114,105,98,117,116,101,32,105,102,
+    32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,102,
+    111,117,110,100,32,116,111,32,98,101,32,97,32,114,101,108,
+    111,97,100,46,10,32,32,32,32,32,32,32,32,78,41,3,
+    218,5,115,117,112,101,114,114,77,0,0,0,218,11,95,114,
+    101,115,101,116,95,110,97,109,101,41,3,114,76,0,0,0,
+    114,72,0,0,0,114,148,0,0,0,41,1,218,9,95,95,
     99,108,97,115,115,95,95,114,4,0,0,0,114,5,0,0,
-    0,114,76,0,0,0,245,1,0,0,115,4,0,0,0,0,
-    6,16,1,117,23,0,0,0,95,77,111,100,117,108,101,77,
-    97,110,97,103,101,114,46,95,95,105,110,105,116,95,95,99,
-    1,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,
-    3,0,0,0,115,163,0,0,0,116,0,0,131,0,0,106,
-    1,0,131,0,0,1,116,2,0,106,3,0,106,4,0,124,
-    0,0,106,5,0,131,1,0,124,0,0,95,6,0,124,0,
-    0,106,7,0,115,104,0,116,8,0,116,9,0,131,1,0,
-    124,0,0,106,5,0,131,1,0,124,0,0,95,6,0,100,
-    1,0,124,0,0,106,6,0,95,10,0,124,0,0,106,6,
-    0,116,2,0,106,3,0,124,0,0,106,5,0,60,110,52,
-    0,124,0,0,106,11,0,114,156,0,121,19,0,124,0,0,
-    106,5,0,124,0,0,106,6,0,95,12,0,87,113,156,0,
-    4,116,13,0,107,10,0,114,152,0,1,1,1,89,113,156,
-    0,88,110,0,0,124,0,0,106,6,0,83,40,2,0,0,
-    0,78,84,40,14,0,0,0,114,148,0,0,0,114,142,0,
-    0,0,114,7,0,0,0,114,140,0,0,0,114,79,0,0,
-    0,114,139,0,0,0,244,7,0,0,0,95,109,111,100,117,
-    108,101,114,141,0,0,0,244,4,0,0,0,116,121,112,101,
-    114,48,0,0,0,244,16,0,0,0,95,95,105,110,105,116,
-    105,97,108,105,122,105,110,103,95,95,114,149,0,0,0,114,
-    56,0,0,0,244,14,0,0,0,65,116,116,114,105,98,117,
-    116,101,69,114,114,111,114,40,1,0,0,0,114,75,0,0,
-    0,40,1,0,0,0,114,150,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,142,0,0,0,254,1,0,0,115,24,
-    0,0,0,0,1,13,1,24,1,9,4,24,3,12,1,22,
-    1,9,1,3,1,19,1,13,1,8,1,117,24,0,0,0,
-    95,77,111,100,117,108,101,77,97,110,97,103,101,114,46,95,
-    95,101,110,116,101,114,95,95,99,1,0,0,0,0,0,0,
-    0,2,0,0,0,2,0,0,0,7,0,0,0,115,38,0,
-    0,0,100,1,0,124,0,0,106,0,0,95,1,0,124,0,
-    0,96,0,0,116,2,0,131,0,0,106,3,0,124,1,0,
-    140,0,0,1,100,0,0,83,40,2,0,0,0,78,70,40,
-    4,0,0,0,114,151,0,0,0,114,153,0,0,0,114,148,
-    0,0,0,114,145,0,0,0,40,2,0,0,0,114,75,0,
-    0,0,114,98,0,0,0,40,1,0,0,0,114,150,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,145,0,0,0,
-    17,2,0,0,115,6,0,0,0,0,1,12,1,6,1,117,
-    23,0,0,0,95,77,111,100,117,108,101,77,97,110,97,103,
-    101,114,46,95,95,101,120,105,116,95,95,40,7,0,0,0,
-    114,56,0,0,0,114,55,0,0,0,114,57,0,0,0,114,
-    58,0,0,0,114,76,0,0,0,114,142,0,0,0,114,145,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,40,1,0,
-    0,0,114,150,0,0,0,114,5,0,0,0,114,146,0,0,
-    0,237,1,0,0,115,8,0,0,0,12,6,6,2,24,9,
-    18,19,114,146,0,0,0,114,147,0,0,0,84,99,1,0,
-    0,0,1,0,0,0,2,0,0,0,4,0,0,0,67,0,
-    0,0,115,16,0,0,0,116,0,0,124,0,0,100,1,0,
-    124,1,0,131,1,1,83,40,2,0,0,0,117,138,0,0,
-    0,82,101,116,117,114,110,32,97,32,99,111,110,116,101,120,
-    116,32,109,97,110,97,103,101,114,32,119,104,105,99,104,32,
-    112,114,111,118,105,100,101,115,32,116,104,101,32,109,111,100,
-    117,108,101,32,111,98,106,101,99,116,32,116,111,32,108,111,
-    97,100,46,10,10,32,32,32,32,73,102,32,114,101,115,101,
-    116,95,110,97,109,101,32,105,115,32,116,114,117,101,44,32,
-    114,101,115,101,116,32,116,104,101,32,109,111,100,117,108,101,
-    39,115,32,95,95,110,97,109,101,95,95,32,116,111,32,39,
-    110,97,109,101,39,46,10,32,32,32,32,114,147,0,0,0,
-    40,1,0,0,0,114,146,0,0,0,40,2,0,0,0,114,
-    71,0,0,0,114,147,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,244,14,0,0,0,109,111,100,
-    117,108,101,95,116,111,95,108,111,97,100,23,2,0,0,115,
-    2,0,0,0,0,6,114,155,0,0,0,99,2,0,0,0,
-    0,0,0,0,4,0,0,0,11,0,0,0,67,0,0,0,
-    115,102,0,0,0,124,1,0,106,0,0,125,2,0,121,19,
-    0,124,0,0,106,1,0,124,2,0,131,1,0,125,3,0,
-    87,110,18,0,4,116,2,0,107,10,0,114,48,0,1,1,
-    1,89,110,50,0,88,124,3,0,114,76,0,124,2,0,124,
-    1,0,95,3,0,103,0,0,124,1,0,95,4,0,110,22,
-    0,124,2,0,106,5,0,100,1,0,131,1,0,100,2,0,
-    25,124,1,0,95,3,0,100,3,0,83,40,4,0,0,0,
-    117,68,0,0,0,83,101,116,32,95,95,112,97,99,107,97,
-    103,101,95,95,32,97,110,100,32,95,95,112,97,116,104,95,
-    95,32,98,97,115,101,100,32,111,110,32,119,104,97,116,32,
-    108,111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,
-    101,40,41,32,115,97,121,115,46,114,101,0,0,0,114,67,
-    0,0,0,78,40,6,0,0,0,114,56,0,0,0,244,10,
-    0,0,0,105,115,95,112,97,99,107,97,103,101,244,11,0,
-    0,0,73,109,112,111,114,116,69,114,114,111,114,244,11,0,
-    0,0,95,95,112,97,99,107,97,103,101,95,95,244,8,0,
-    0,0,95,95,112,97,116,104,95,95,114,32,0,0,0,40,
-    4,0,0,0,244,6,0,0,0,108,111,97,100,101,114,244,
-    6,0,0,0,109,111,100,117,108,101,114,71,0,0,0,114,
-    156,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,244,19,0,0,0,95,105,110,105,116,95,112,97,
-    99,107,97,103,101,95,97,116,116,114,115,32,2,0,0,115,
-    18,0,0,0,0,2,9,1,3,1,19,1,13,1,5,2,
-    6,1,9,1,12,2,114,162,0,0,0,99,2,0,0,0,
-    0,0,0,0,2,0,0,0,11,0,0,0,67,0,0,0,
-    115,100,0,0,0,121,25,0,124,0,0,106,0,0,124,1,
-    0,106,1,0,131,1,0,124,1,0,95,2,0,87,110,18,
-    0,4,116,3,0,107,10,0,114,45,0,1,1,1,89,110,
-    51,0,88,124,1,0,106,1,0,124,1,0,106,4,0,107,
-    2,0,114,96,0,124,1,0,106,5,0,106,6,0,116,7,
-    0,124,1,0,106,2,0,131,1,0,100,1,0,25,131,1,
-    0,1,110,0,0,100,2,0,83,40,3,0,0,0,117,57,
-    0,0,0,83,101,116,32,95,95,102,105,108,101,95,95,32,
-    97,110,100,32,95,95,112,97,116,104,95,95,32,98,97,115,
-    101,100,32,111,110,32,108,111,97,100,101,114,46,103,101,116,
-    95,102,105,108,101,110,97,109,101,40,41,46,114,67,0,0,
-    0,78,40,8,0,0,0,244,12,0,0,0,103,101,116,95,
-    102,105,108,101,110,97,109,101,114,56,0,0,0,244,8,0,
-    0,0,95,95,102,105,108,101,95,95,114,157,0,0,0,114,
-    158,0,0,0,114,159,0,0,0,244,6,0,0,0,97,112,
-    112,101,110,100,114,38,0,0,0,40,2,0,0,0,114,160,
-    0,0,0,114,161,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,244,16,0,0,0,95,105,110,105,
-    116,95,102,105,108,101,95,97,116,116,114,115,47,2,0,0,
-    115,12,0,0,0,0,2,3,1,25,1,13,1,5,2,18,
-    1,114,166,0,0,0,99,1,0,0,0,0,0,0,0,2,
-    0,0,0,3,0,0,0,3,0,0,0,115,35,0,0,0,
-    135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,125,
-    1,0,116,0,0,124,1,0,136,0,0,131,2,0,1,124,
-    1,0,83,40,3,0,0,0,117,39,0,0,0,83,101,116,
-    32,95,95,112,97,99,107,97,103,101,95,95,32,111,110,32,
-    116,104,101,32,114,101,116,117,114,110,101,100,32,109,111,100,
-    117,108,101,46,99,0,0,0,0,0,0,0,0,3,0,0,
-    0,4,0,0,0,31,0,0,0,115,101,0,0,0,136,0,
-    0,124,0,0,124,1,0,142,0,0,125,2,0,116,0,0,
-    124,2,0,100,1,0,100,0,0,131,3,0,100,0,0,107,
-    8,0,114,97,0,124,2,0,106,1,0,124,2,0,95,2,
-    0,116,3,0,124,2,0,100,2,0,131,2,0,115,97,0,
-    124,2,0,106,2,0,106,4,0,100,3,0,131,1,0,100,
-    4,0,25,124,2,0,95,2,0,113,97,0,110,0,0,124,
-    2,0,83,40,5,0,0,0,78,114,158,0,0,0,114,159,
-    0,0,0,114,101,0,0,0,114,67,0,0,0,40,5,0,
-    0,0,114,61,0,0,0,114,56,0,0,0,114,158,0,0,
-    0,114,59,0,0,0,114,32,0,0,0,40,3,0,0,0,
-    114,98,0,0,0,244,6,0,0,0,107,119,97,114,103,115,
-    114,161,0,0,0,40,1,0,0,0,244,3,0,0,0,102,
-    120,110,114,4,0,0,0,114,5,0,0,0,244,19,0,0,
-    0,115,101,116,95,112,97,99,107,97,103,101,95,119,114,97,
-    112,112,101,114,60,2,0,0,115,12,0,0,0,0,1,15,
-    1,24,1,12,1,15,1,31,1,117,40,0,0,0,115,101,
-    116,95,112,97,99,107,97,103,101,46,60,108,111,99,97,108,
-    115,62,46,115,101,116,95,112,97,99,107,97,103,101,95,119,
-    114,97,112,112,101,114,40,1,0,0,0,114,64,0,0,0,
-    40,2,0,0,0,114,168,0,0,0,114,169,0,0,0,114,
-    4,0,0,0,40,1,0,0,0,114,168,0,0,0,114,5,
-    0,0,0,244,11,0,0,0,115,101,116,95,112,97,99,107,
-    97,103,101,58,2,0,0,115,6,0,0,0,0,2,18,7,
-    13,1,114,170,0,0,0,99,1,0,0,0,0,0,0,0,
-    2,0,0,0,3,0,0,0,3,0,0,0,115,35,0,0,
-    0,135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,
-    125,1,0,116,0,0,124,1,0,136,0,0,131,2,0,1,
-    124,1,0,83,40,3,0,0,0,117,38,0,0,0,83,101,
-    116,32,95,95,108,111,97,100,101,114,95,95,32,111,110,32,
-    116,104,101,32,114,101,116,117,114,110,101,100,32,109,111,100,
-    117,108,101,46,99,1,0,0,0,0,0,0,0,4,0,0,
-    0,4,0,0,0,31,0,0,0,115,58,0,0,0,136,0,
-    0,124,0,0,124,1,0,124,2,0,142,1,0,125,3,0,
-    116,0,0,124,3,0,100,1,0,100,0,0,131,3,0,100,
-    0,0,107,8,0,114,54,0,124,0,0,124,3,0,95,1,
-    0,110,0,0,124,3,0,83,40,2,0,0,0,78,244,10,
-    0,0,0,95,95,108,111,97,100,101,114,95,95,40,2,0,
-    0,0,114,61,0,0,0,114,171,0,0,0,40,4,0,0,
-    0,114,75,0,0,0,114,98,0,0,0,114,167,0,0,0,
-    114,161,0,0,0,40,1,0,0,0,114,168,0,0,0,114,
-    4,0,0,0,114,5,0,0,0,244,18,0,0,0,115,101,
-    116,95,108,111,97,100,101,114,95,119,114,97,112,112,101,114,
-    73,2,0,0,115,8,0,0,0,0,1,18,1,24,1,12,
-    1,117,38,0,0,0,115,101,116,95,108,111,97,100,101,114,
-    46,60,108,111,99,97,108,115,62,46,115,101,116,95,108,111,
-    97,100,101,114,95,119,114,97,112,112,101,114,40,1,0,0,
-    0,114,64,0,0,0,40,2,0,0,0,114,168,0,0,0,
-    114,172,0,0,0,114,4,0,0,0,40,1,0,0,0,114,
-    168,0,0,0,114,5,0,0,0,244,10,0,0,0,115,101,
-    116,95,108,111,97,100,101,114,71,2,0,0,115,6,0,0,
-    0,0,2,18,5,13,1,114,173,0,0,0,99,1,0,0,
-    0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,0,
-    0,115,38,0,0,0,100,1,0,135,0,0,102,1,0,100,
-    2,0,100,3,0,134,1,0,125,1,0,116,0,0,124,1,
-    0,136,0,0,131,2,0,1,124,1,0,83,40,4,0,0,
-    0,117,252,0,0,0,68,101,99,111,114,97,116,111,114,32,
-    116,111,32,118,101,114,105,102,121,32,116,104,97,116,32,116,
-    104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,
-    114,101,113,117,101,115,116,101,100,32,109,97,116,99,104,101,
-    115,32,116,104,101,32,111,110,101,32,116,104,101,10,32,32,
-    32,32,108,111,97,100,101,114,32,99,97,110,32,104,97,110,
-    100,108,101,46,10,10,32,32,32,32,84,104,101,32,102,105,
-    114,115,116,32,97,114,103,117,109,101,110,116,32,40,115,101,
-    108,102,41,32,109,117,115,116,32,100,101,102,105,110,101,32,
-    95,110,97,109,101,32,119,104,105,99,104,32,116,104,101,32,
-    115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,
-    105,115,10,32,32,32,32,99,111,109,112,97,114,101,100,32,
-    97,103,97,105,110,115,116,46,32,73,102,32,116,104,101,32,
-    99,111,109,112,97,114,105,115,111,110,32,102,97,105,108,115,
-    32,116,104,101,110,32,73,109,112,111,114,116,69,114,114,111,
-    114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,
-    32,32,78,99,2,0,0,0,0,0,0,0,4,0,0,0,
-    5,0,0,0,31,0,0,0,115,83,0,0,0,124,1,0,
-    100,0,0,107,8,0,114,24,0,124,0,0,106,0,0,125,
-    1,0,110,40,0,124,0,0,106,0,0,124,1,0,107,3,
-    0,114,64,0,116,1,0,100,1,0,124,1,0,22,100,2,
-    0,124,1,0,131,1,1,130,1,0,110,0,0,136,0,0,
-    124,0,0,124,1,0,124,2,0,124,3,0,142,2,0,83,
-    40,3,0,0,0,78,117,23,0,0,0,108,111,97,100,101,
-    114,32,99,97,110,110,111,116,32,104,97,110,100,108,101,32,
-    37,115,114,71,0,0,0,40,2,0,0,0,114,71,0,0,
-    0,114,157,0,0,0,40,4,0,0,0,114,75,0,0,0,
-    114,71,0,0,0,114,98,0,0,0,114,167,0,0,0,40,
-    1,0,0,0,244,6,0,0,0,109,101,116,104,111,100,114,
-    4,0,0,0,114,5,0,0,0,244,19,0,0,0,95,99,
-    104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,
-    114,90,2,0,0,115,10,0,0,0,0,1,12,1,12,1,
-    15,1,25,1,117,40,0,0,0,95,99,104,101,99,107,95,
-    110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,99,
-    104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,
-    114,40,1,0,0,0,114,64,0,0,0,40,2,0,0,0,
-    114,174,0,0,0,114,175,0,0,0,114,4,0,0,0,40,
-    1,0,0,0,114,174,0,0,0,114,5,0,0,0,244,11,
-    0,0,0,95,99,104,101,99,107,95,110,97,109,101,82,2,
-    0,0,115,6,0,0,0,0,8,21,6,13,1,114,176,0,
+    0,114,77,0,0,0,1,2,0,0,115,4,0,0,0,0,
+    6,16,1,122,23,95,77,111,100,117,108,101,77,97,110,97,
+    103,101,114,46,95,95,105,110,105,116,95,95,99,1,0,0,
+    0,0,0,0,0,1,0,0,0,11,0,0,0,3,0,0,
+    0,115,163,0,0,0,116,0,0,131,0,0,106,1,0,131,
+    0,0,1,116,2,0,106,3,0,106,4,0,124,0,0,106,
+    5,0,131,1,0,124,0,0,95,6,0,124,0,0,106,7,
+    0,115,104,0,116,8,0,116,9,0,131,1,0,124,0,0,
+    106,5,0,131,1,0,124,0,0,95,6,0,100,1,0,124,
+    0,0,106,6,0,95,10,0,124,0,0,106,6,0,116,2,
+    0,106,3,0,124,0,0,106,5,0,60,110,52,0,124,0,
+    0,106,11,0,114,156,0,121,19,0,124,0,0,106,5,0,
+    124,0,0,106,6,0,95,12,0,87,113,156,0,4,116,13,
+    0,107,10,0,114,152,0,1,1,1,89,113,156,0,88,110,
+    0,0,124,0,0,106,6,0,83,41,2,78,84,41,14,114,
+    149,0,0,0,114,143,0,0,0,114,7,0,0,0,114,141,
+    0,0,0,114,80,0,0,0,114,140,0,0,0,218,7,95,
+    109,111,100,117,108,101,114,142,0,0,0,218,4,116,121,112,
+    101,114,49,0,0,0,218,16,95,95,105,110,105,116,105,97,
+    108,105,122,105,110,103,95,95,114,150,0,0,0,114,57,0,
+    0,0,218,14,65,116,116,114,105,98,117,116,101,69,114,114,
+    111,114,41,1,114,76,0,0,0,41,1,114,151,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,143,0,0,0,10,
+    2,0,0,115,24,0,0,0,0,1,13,1,24,1,9,4,
+    24,3,12,1,22,1,9,1,3,1,19,1,13,1,8,1,
+    122,24,95,77,111,100,117,108,101,77,97,110,97,103,101,114,
+    46,95,95,101,110,116,101,114,95,95,99,1,0,0,0,0,
+    0,0,0,2,0,0,0,2,0,0,0,7,0,0,0,115,
+    38,0,0,0,100,1,0,124,0,0,106,0,0,95,1,0,
+    124,0,0,96,0,0,116,2,0,131,0,0,106,3,0,124,
+    1,0,140,0,0,1,100,0,0,83,41,2,78,70,41,4,
+    114,152,0,0,0,114,154,0,0,0,114,149,0,0,0,114,
+    146,0,0,0,41,2,114,76,0,0,0,114,99,0,0,0,
+    41,1,114,151,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,146,0,0,0,29,2,0,0,115,6,0,0,0,0,
+    1,12,1,6,1,122,23,95,77,111,100,117,108,101,77,97,
+    110,97,103,101,114,46,95,95,101,120,105,116,95,95,41,7,
+    114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,
+    59,0,0,0,114,77,0,0,0,114,143,0,0,0,114,146,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,41,1,114,
+    151,0,0,0,114,5,0,0,0,114,147,0,0,0,249,1,
+    0,0,115,8,0,0,0,12,6,6,2,24,9,18,19,114,
+    147,0,0,0,114,148,0,0,0,84,99,1,0,0,0,1,
+    0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,
+    16,0,0,0,116,0,0,124,0,0,100,1,0,124,1,0,
+    131,1,1,83,41,2,122,138,82,101,116,117,114,110,32,97,
+    32,99,111,110,116,101,120,116,32,109,97,110,97,103,101,114,
+    32,119,104,105,99,104,32,112,114,111,118,105,100,101,115,32,
+    116,104,101,32,109,111,100,117,108,101,32,111,98,106,101,99,
+    116,32,116,111,32,108,111,97,100,46,10,10,32,32,32,32,
+    73,102,32,114,101,115,101,116,95,110,97,109,101,32,105,115,
+    32,116,114,117,101,44,32,114,101,115,101,116,32,116,104,101,
+    32,109,111,100,117,108,101,39,115,32,95,95,110,97,109,101,
+    95,95,32,116,111,32,39,110,97,109,101,39,46,10,32,32,
+    32,32,114,148,0,0,0,41,1,114,147,0,0,0,41,2,
+    114,72,0,0,0,114,148,0,0,0,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,218,14,109,111,100,117,108,
+    101,95,116,111,95,108,111,97,100,35,2,0,0,115,2,0,
+    0,0,0,6,114,156,0,0,0,99,2,0,0,0,0,0,
+    0,0,4,0,0,0,11,0,0,0,67,0,0,0,115,102,
+    0,0,0,124,1,0,106,0,0,125,2,0,121,19,0,124,
+    0,0,106,1,0,124,2,0,131,1,0,125,3,0,87,110,
+    18,0,4,116,2,0,107,10,0,114,48,0,1,1,1,89,
+    110,50,0,88,124,3,0,114,76,0,124,2,0,124,1,0,
+    95,3,0,103,0,0,124,1,0,95,4,0,110,22,0,124,
+    2,0,106,5,0,100,1,0,131,1,0,100,2,0,25,124,
+    1,0,95,3,0,100,3,0,83,41,4,122,68,83,101,116,
+    32,95,95,112,97,99,107,97,103,101,95,95,32,97,110,100,
+    32,95,95,112,97,116,104,95,95,32,98,97,115,101,100,32,
+    111,110,32,119,104,97,116,32,108,111,97,100,101,114,46,105,
+    115,95,112,97,99,107,97,103,101,40,41,32,115,97,121,115,
+    46,114,102,0,0,0,114,68,0,0,0,78,41,6,114,57,
+    0,0,0,218,10,105,115,95,112,97,99,107,97,103,101,218,
+    11,73,109,112,111,114,116,69,114,114,111,114,218,11,95,95,
+    112,97,99,107,97,103,101,95,95,218,8,95,95,112,97,116,
+    104,95,95,114,32,0,0,0,41,4,218,6,108,111,97,100,
+    101,114,218,6,109,111,100,117,108,101,114,72,0,0,0,114,
+    157,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,218,19,95,105,110,105,116,95,112,97,99,107,97,
+    103,101,95,97,116,116,114,115,44,2,0,0,115,18,0,0,
+    0,0,2,9,1,3,1,19,1,13,1,5,2,6,1,9,
+    1,12,2,114,163,0,0,0,99,2,0,0,0,0,0,0,
+    0,2,0,0,0,11,0,0,0,67,0,0,0,115,100,0,
+    0,0,121,25,0,124,0,0,106,0,0,124,1,0,106,1,
+    0,131,1,0,124,1,0,95,2,0,87,110,18,0,4,116,
+    3,0,107,10,0,114,45,0,1,1,1,89,110,51,0,88,
+    124,1,0,106,1,0,124,1,0,106,4,0,107,2,0,114,
+    96,0,124,1,0,106,5,0,106,6,0,116,7,0,124,1,
+    0,106,2,0,131,1,0,100,1,0,25,131,1,0,1,110,
+    0,0,100,2,0,83,41,3,122,57,83,101,116,32,95,95,
+    102,105,108,101,95,95,32,97,110,100,32,95,95,112,97,116,
+    104,95,95,32,98,97,115,101,100,32,111,110,32,108,111,97,
+    100,101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,
+    40,41,46,114,68,0,0,0,78,41,8,218,12,103,101,116,
+    95,102,105,108,101,110,97,109,101,114,57,0,0,0,218,8,
+    95,95,102,105,108,101,95,95,114,158,0,0,0,114,159,0,
+    0,0,114,160,0,0,0,218,6,97,112,112,101,110,100,114,
+    38,0,0,0,41,2,114,161,0,0,0,114,162,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    16,95,105,110,105,116,95,102,105,108,101,95,97,116,116,114,
+    115,59,2,0,0,115,12,0,0,0,0,2,3,1,25,1,
+    13,1,5,2,18,1,114,167,0,0,0,99,1,0,0,0,
+    0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,
+    115,35,0,0,0,135,0,0,102,1,0,100,1,0,100,2,
+    0,134,0,0,125,1,0,116,0,0,124,1,0,136,0,0,
+    131,2,0,1,124,1,0,83,41,3,122,39,83,101,116,32,
+    95,95,112,97,99,107,97,103,101,95,95,32,111,110,32,116,
+    104,101,32,114,101,116,117,114,110,101,100,32,109,111,100,117,
+    108,101,46,99,0,0,0,0,0,0,0,0,3,0,0,0,
+    4,0,0,0,31,0,0,0,115,101,0,0,0,136,0,0,
+    124,0,0,124,1,0,142,0,0,125,2,0,116,0,0,124,
+    2,0,100,1,0,100,0,0,131,3,0,100,0,0,107,8,
+    0,114,97,0,124,2,0,106,1,0,124,2,0,95,2,0,
+    116,3,0,124,2,0,100,2,0,131,2,0,115,97,0,124,
+    2,0,106,2,0,106,4,0,100,3,0,131,1,0,100,4,
+    0,25,124,2,0,95,2,0,113,97,0,110,0,0,124,2,
+    0,83,41,5,78,114,159,0,0,0,114,160,0,0,0,114,
+    102,0,0,0,114,68,0,0,0,41,5,114,62,0,0,0,
+    114,57,0,0,0,114,159,0,0,0,114,60,0,0,0,114,
+    32,0,0,0,41,3,114,99,0,0,0,218,6,107,119,97,
+    114,103,115,114,162,0,0,0,41,1,218,3,102,120,110,114,
+    4,0,0,0,114,5,0,0,0,218,19,115,101,116,95,112,
+    97,99,107,97,103,101,95,119,114,97,112,112,101,114,72,2,
+    0,0,115,12,0,0,0,0,1,15,1,24,1,12,1,15,
+    1,31,1,122,40,115,101,116,95,112,97,99,107,97,103,101,
+    46,60,108,111,99,97,108,115,62,46,115,101,116,95,112,97,
+    99,107,97,103,101,95,119,114,97,112,112,101,114,41,1,114,
+    65,0,0,0,41,2,114,169,0,0,0,114,170,0,0,0,
+    114,4,0,0,0,41,1,114,169,0,0,0,114,5,0,0,
+    0,218,11,115,101,116,95,112,97,99,107,97,103,101,70,2,
+    0,0,115,6,0,0,0,0,2,18,7,13,1,114,171,0,
     0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,3,
     0,0,0,3,0,0,0,115,35,0,0,0,135,0,0,102,
     1,0,100,1,0,100,2,0,134,0,0,125,1,0,116,0,
-    0,124,1,0,136,0,0,131,2,0,1,124,1,0,83,40,
-    3,0,0,0,117,49,0,0,0,68,101,99,111,114,97,116,
-    111,114,32,116,111,32,118,101,114,105,102,121,32,116,104,101,
-    32,110,97,109,101,100,32,109,111,100,117,108,101,32,105,115,
-    32,98,117,105,108,116,45,105,110,46,99,2,0,0,0,0,
-    0,0,0,2,0,0,0,4,0,0,0,19,0,0,0,115,
-    58,0,0,0,124,1,0,116,0,0,106,1,0,107,7,0,
-    114,45,0,116,2,0,100,1,0,106,3,0,124,1,0,131,
-    1,0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,
-    0,136,0,0,124,0,0,124,1,0,131,2,0,83,40,3,
-    0,0,0,78,117,27,0,0,0,123,125,32,105,115,32,110,
-    111,116,32,97,32,98,117,105,108,116,45,105,110,32,109,111,
-    100,117,108,101,114,71,0,0,0,40,4,0,0,0,114,7,
-    0,0,0,244,20,0,0,0,98,117,105,108,116,105,110,95,
-    109,111,100,117,108,101,95,110,97,109,101,115,114,157,0,0,
-    0,114,46,0,0,0,40,2,0,0,0,114,75,0,0,0,
-    244,8,0,0,0,102,117,108,108,110,97,109,101,40,1,0,
-    0,0,114,168,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,244,25,0,0,0,95,114,101,113,117,105,114,101,115,95,
-    98,117,105,108,116,105,110,95,119,114,97,112,112,101,114,102,
-    2,0,0,115,8,0,0,0,0,1,15,1,18,1,12,1,
-    117,52,0,0,0,95,114,101,113,117,105,114,101,115,95,98,
-    117,105,108,116,105,110,46,60,108,111,99,97,108,115,62,46,
-    95,114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,
-    110,95,119,114,97,112,112,101,114,40,1,0,0,0,114,64,
-    0,0,0,40,2,0,0,0,114,168,0,0,0,114,179,0,
-    0,0,114,4,0,0,0,40,1,0,0,0,114,168,0,0,
-    0,114,5,0,0,0,244,17,0,0,0,95,114,101,113,117,
-    105,114,101,115,95,98,117,105,108,116,105,110,100,2,0,0,
-    115,6,0,0,0,0,2,18,5,13,1,114,180,0,0,0,
-    99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,
-    0,3,0,0,0,115,35,0,0,0,135,0,0,102,1,0,
-    100,1,0,100,2,0,134,0,0,125,1,0,116,0,0,124,
-    1,0,136,0,0,131,2,0,1,124,1,0,83,40,3,0,
-    0,0,117,47,0,0,0,68,101,99,111,114,97,116,111,114,
-    32,116,111,32,118,101,114,105,102,121,32,116,104,101,32,110,
-    97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,102,
-    114,111,122,101,110,46,99,2,0,0,0,0,0,0,0,2,
-    0,0,0,4,0,0,0,19,0,0,0,115,58,0,0,0,
-    116,0,0,106,1,0,124,1,0,131,1,0,115,45,0,116,
-    2,0,100,1,0,106,3,0,124,1,0,131,1,0,100,2,
-    0,124,1,0,131,1,1,130,1,0,110,0,0,136,0,0,
-    124,0,0,124,1,0,131,2,0,83,40,3,0,0,0,78,
-    117,25,0,0,0,123,125,32,105,115,32,110,111,116,32,97,
-    32,102,114,111,122,101,110,32,109,111,100,117,108,101,114,71,
-    0,0,0,40,4,0,0,0,114,94,0,0,0,244,9,0,
-    0,0,105,115,95,102,114,111,122,101,110,114,157,0,0,0,
-    114,46,0,0,0,40,2,0,0,0,114,75,0,0,0,114,
-    178,0,0,0,40,1,0,0,0,114,168,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,244,24,0,0,0,95,114,101,
-    113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114,
-    97,112,112,101,114,113,2,0,0,115,8,0,0,0,0,1,
-    15,1,18,1,12,1,117,50,0,0,0,95,114,101,113,117,
-    105,114,101,115,95,102,114,111,122,101,110,46,60,108,111,99,
-    97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,102,
-    114,111,122,101,110,95,119,114,97,112,112,101,114,40,1,0,
-    0,0,114,64,0,0,0,40,2,0,0,0,114,168,0,0,
-    0,114,182,0,0,0,114,4,0,0,0,40,1,0,0,0,
-    114,168,0,0,0,114,5,0,0,0,244,16,0,0,0,95,
-    114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,111,
-    2,0,0,115,6,0,0,0,0,2,18,5,13,1,114,183,
-    0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0,
-    5,0,0,0,67,0,0,0,115,87,0,0,0,124,0,0,
-    106,0,0,124,1,0,131,1,0,92,2,0,125,2,0,125,
-    3,0,124,2,0,100,1,0,107,8,0,114,83,0,116,1,
-    0,124,3,0,131,1,0,114,83,0,100,2,0,125,4,0,
-    116,2,0,106,3,0,124,4,0,106,4,0,124,3,0,100,
-    3,0,25,131,1,0,116,5,0,131,2,0,1,110,0,0,
-    124,2,0,83,40,4,0,0,0,117,86,0,0,0,84,114,
-    121,32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,
-    101,114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,
-    102,105,101,100,32,109,111,100,117,108,101,32,98,121,32,100,
-    101,108,101,103,97,116,105,110,103,32,116,111,10,32,32,32,
-    32,115,101,108,102,46,102,105,110,100,95,108,111,97,100,101,
-    114,40,41,46,78,117,44,0,0,0,78,111,116,32,105,109,
-    112,111,114,116,105,110,103,32,100,105,114,101,99,116,111,114,
-    121,32,123,125,58,32,109,105,115,115,105,110,103,32,95,95,
-    105,110,105,116,95,95,114,67,0,0,0,40,6,0,0,0,
-    244,11,0,0,0,102,105,110,100,95,108,111,97,100,101,114,
-    114,31,0,0,0,244,9,0,0,0,95,119,97,114,110,105,
-    110,103,115,244,4,0,0,0,119,97,114,110,114,46,0,0,
-    0,244,13,0,0,0,73,109,112,111,114,116,87,97,114,110,
-    105,110,103,40,5,0,0,0,114,75,0,0,0,114,178,0,
-    0,0,114,160,0,0,0,244,8,0,0,0,112,111,114,116,
-    105,111,110,115,244,3,0,0,0,109,115,103,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,244,17,0,0,0,
-    95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105,
-    109,122,2,0,0,115,10,0,0,0,0,6,21,1,24,1,
-    6,1,32,1,114,190,0,0,0,99,4,0,0,0,0,0,
-    0,0,11,0,0,0,19,0,0,0,67,0,0,0,115,243,
-    1,0,0,105,0,0,125,4,0,124,2,0,100,1,0,107,
-    9,0,114,31,0,124,2,0,124,4,0,100,2,0,60,110,
-    6,0,100,3,0,125,2,0,124,3,0,100,1,0,107,9,
-    0,114,62,0,124,3,0,124,4,0,100,4,0,60,110,0,
-    0,124,0,0,100,1,0,100,5,0,133,2,0,25,125,5,
-    0,124,0,0,100,5,0,100,6,0,133,2,0,25,125,6,
-    0,124,0,0,100,6,0,100,7,0,133,2,0,25,125,7,
-    0,124,5,0,116,0,0,107,3,0,114,168,0,100,8,0,
-    106,1,0,124,2,0,124,5,0,131,2,0,125,8,0,116,
-    2,0,124,8,0,131,1,0,1,116,3,0,124,8,0,124,
-    4,0,141,1,0,130,1,0,110,116,0,116,4,0,124,6,
-    0,131,1,0,100,5,0,107,3,0,114,226,0,100,9,0,
-    106,1,0,124,2,0,131,1,0,125,8,0,116,2,0,124,
-    8,0,131,1,0,1,116,5,0,124,8,0,131,1,0,130,
-    1,0,110,58,0,116,4,0,124,7,0,131,1,0,100,5,
-    0,107,3,0,114,28,1,100,10,0,106,1,0,124,2,0,
-    131,1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,
-    116,5,0,124,8,0,131,1,0,130,1,0,110,0,0,124,
-    1,0,100,1,0,107,9,0,114,229,1,121,20,0,116,6,
-    0,124,1,0,100,11,0,25,131,1,0,125,9,0,87,110,
-    18,0,4,116,7,0,107,10,0,114,80,1,1,1,1,89,
-    110,62,0,88,116,8,0,124,6,0,131,1,0,124,9,0,
-    107,3,0,114,142,1,100,12,0,106,1,0,124,2,0,131,
+    0,124,1,0,136,0,0,131,2,0,1,124,1,0,83,41,
+    3,122,38,83,101,116,32,95,95,108,111,97,100,101,114,95,
+    95,32,111,110,32,116,104,101,32,114,101,116,117,114,110,101,
+    100,32,109,111,100,117,108,101,46,99,1,0,0,0,0,0,
+    0,0,4,0,0,0,4,0,0,0,31,0,0,0,115,58,
+    0,0,0,136,0,0,124,0,0,124,1,0,124,2,0,142,
+    1,0,125,3,0,116,0,0,124,3,0,100,1,0,100,0,
+    0,131,3,0,100,0,0,107,8,0,114,54,0,124,0,0,
+    124,3,0,95,1,0,110,0,0,124,3,0,83,41,2,78,
+    218,10,95,95,108,111,97,100,101,114,95,95,41,2,114,62,
+    0,0,0,114,172,0,0,0,41,4,114,76,0,0,0,114,
+    99,0,0,0,114,168,0,0,0,114,162,0,0,0,41,1,
+    114,169,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    18,115,101,116,95,108,111,97,100,101,114,95,119,114,97,112,
+    112,101,114,85,2,0,0,115,8,0,0,0,0,1,18,1,
+    24,1,12,1,122,38,115,101,116,95,108,111,97,100,101,114,
+    46,60,108,111,99,97,108,115,62,46,115,101,116,95,108,111,
+    97,100,101,114,95,119,114,97,112,112,101,114,41,1,114,65,
+    0,0,0,41,2,114,169,0,0,0,114,173,0,0,0,114,
+    4,0,0,0,41,1,114,169,0,0,0,114,5,0,0,0,
+    218,10,115,101,116,95,108,111,97,100,101,114,83,2,0,0,
+    115,6,0,0,0,0,2,18,5,13,1,114,174,0,0,0,
+    99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
+    0,3,0,0,0,115,38,0,0,0,100,1,0,135,0,0,
+    102,1,0,100,2,0,100,3,0,134,1,0,125,1,0,116,
+    0,0,124,1,0,136,0,0,131,2,0,1,124,1,0,83,
+    41,4,122,252,68,101,99,111,114,97,116,111,114,32,116,111,
+    32,118,101,114,105,102,121,32,116,104,97,116,32,116,104,101,
+    32,109,111,100,117,108,101,32,98,101,105,110,103,32,114,101,
+    113,117,101,115,116,101,100,32,109,97,116,99,104,101,115,32,
+    116,104,101,32,111,110,101,32,116,104,101,10,32,32,32,32,
+    108,111,97,100,101,114,32,99,97,110,32,104,97,110,100,108,
+    101,46,10,10,32,32,32,32,84,104,101,32,102,105,114,115,
+    116,32,97,114,103,117,109,101,110,116,32,40,115,101,108,102,
+    41,32,109,117,115,116,32,100,101,102,105,110,101,32,95,110,
+    97,109,101,32,119,104,105,99,104,32,116,104,101,32,115,101,
+    99,111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,
+    10,32,32,32,32,99,111,109,112,97,114,101,100,32,97,103,
+    97,105,110,115,116,46,32,73,102,32,116,104,101,32,99,111,
+    109,112,97,114,105,115,111,110,32,102,97,105,108,115,32,116,
+    104,101,110,32,73,109,112,111,114,116,69,114,114,111,114,32,
+    105,115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,
+    78,99,2,0,0,0,0,0,0,0,4,0,0,0,5,0,
+    0,0,31,0,0,0,115,83,0,0,0,124,1,0,100,0,
+    0,107,8,0,114,24,0,124,0,0,106,0,0,125,1,0,
+    110,40,0,124,0,0,106,0,0,124,1,0,107,3,0,114,
+    64,0,116,1,0,100,1,0,124,1,0,22,100,2,0,124,
+    1,0,131,1,1,130,1,0,110,0,0,136,0,0,124,0,
+    0,124,1,0,124,2,0,124,3,0,142,2,0,83,41,3,
+    78,122,23,108,111,97,100,101,114,32,99,97,110,110,111,116,
+    32,104,97,110,100,108,101,32,37,115,114,72,0,0,0,41,
+    2,114,72,0,0,0,114,158,0,0,0,41,4,114,76,0,
+    0,0,114,72,0,0,0,114,99,0,0,0,114,168,0,0,
+    0,41,1,218,6,109,101,116,104,111,100,114,4,0,0,0,
+    114,5,0,0,0,218,19,95,99,104,101,99,107,95,110,97,
+    109,101,95,119,114,97,112,112,101,114,102,2,0,0,115,10,
+    0,0,0,0,1,12,1,12,1,15,1,25,1,122,40,95,
+    99,104,101,99,107,95,110,97,109,101,46,60,108,111,99,97,
+    108,115,62,46,95,99,104,101,99,107,95,110,97,109,101,95,
+    119,114,97,112,112,101,114,41,1,114,65,0,0,0,41,2,
+    114,175,0,0,0,114,176,0,0,0,114,4,0,0,0,41,
+    1,114,175,0,0,0,114,5,0,0,0,218,11,95,99,104,
+    101,99,107,95,110,97,109,101,94,2,0,0,115,6,0,0,
+    0,0,8,21,6,13,1,114,177,0,0,0,99,1,0,0,
+    0,0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,
+    0,115,35,0,0,0,135,0,0,102,1,0,100,1,0,100,
+    2,0,134,0,0,125,1,0,116,0,0,124,1,0,136,0,
+    0,131,2,0,1,124,1,0,83,41,3,122,49,68,101,99,
+    111,114,97,116,111,114,32,116,111,32,118,101,114,105,102,121,
+    32,116,104,101,32,110,97,109,101,100,32,109,111,100,117,108,
+    101,32,105,115,32,98,117,105,108,116,45,105,110,46,99,2,
+    0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,19,
+    0,0,0,115,58,0,0,0,124,1,0,116,0,0,106,1,
+    0,107,7,0,114,45,0,116,2,0,100,1,0,106,3,0,
+    124,1,0,131,1,0,100,2,0,124,1,0,131,1,1,130,
+    1,0,110,0,0,136,0,0,124,0,0,124,1,0,131,2,
+    0,83,41,3,78,122,27,123,125,32,105,115,32,110,111,116,
+    32,97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,
+    108,101,114,72,0,0,0,41,4,114,7,0,0,0,218,20,
+    98,117,105,108,116,105,110,95,109,111,100,117,108,101,95,110,
+    97,109,101,115,114,158,0,0,0,114,47,0,0,0,41,2,
+    114,76,0,0,0,218,8,102,117,108,108,110,97,109,101,41,
+    1,114,169,0,0,0,114,4,0,0,0,114,5,0,0,0,
+    218,25,95,114,101,113,117,105,114,101,115,95,98,117,105,108,
+    116,105,110,95,119,114,97,112,112,101,114,114,2,0,0,115,
+    8,0,0,0,0,1,15,1,18,1,12,1,122,52,95,114,
+    101,113,117,105,114,101,115,95,98,117,105,108,116,105,110,46,
+    60,108,111,99,97,108,115,62,46,95,114,101,113,117,105,114,
+    101,115,95,98,117,105,108,116,105,110,95,119,114,97,112,112,
+    101,114,41,1,114,65,0,0,0,41,2,114,169,0,0,0,
+    114,180,0,0,0,114,4,0,0,0,41,1,114,169,0,0,
+    0,114,5,0,0,0,218,17,95,114,101,113,117,105,114,101,
+    115,95,98,117,105,108,116,105,110,112,2,0,0,115,6,0,
+    0,0,0,2,18,5,13,1,114,181,0,0,0,99,1,0,
+    0,0,0,0,0,0,2,0,0,0,3,0,0,0,3,0,
+    0,0,115,35,0,0,0,135,0,0,102,1,0,100,1,0,
+    100,2,0,134,0,0,125,1,0,116,0,0,124,1,0,136,
+    0,0,131,2,0,1,124,1,0,83,41,3,122,47,68,101,
+    99,111,114,97,116,111,114,32,116,111,32,118,101,114,105,102,
+    121,32,116,104,101,32,110,97,109,101,100,32,109,111,100,117,
+    108,101,32,105,115,32,102,114,111,122,101,110,46,99,2,0,
+    0,0,0,0,0,0,2,0,0,0,4,0,0,0,19,0,
+    0,0,115,58,0,0,0,116,0,0,106,1,0,124,1,0,
+    131,1,0,115,45,0,116,2,0,100,1,0,106,3,0,124,
+    1,0,131,1,0,100,2,0,124,1,0,131,1,1,130,1,
+    0,110,0,0,136,0,0,124,0,0,124,1,0,131,2,0,
+    83,41,3,78,122,25,123,125,32,105,115,32,110,111,116,32,
+    97,32,102,114,111,122,101,110,32,109,111,100,117,108,101,114,
+    72,0,0,0,41,4,114,95,0,0,0,218,9,105,115,95,
+    102,114,111,122,101,110,114,158,0,0,0,114,47,0,0,0,
+    41,2,114,76,0,0,0,114,179,0,0,0,41,1,114,169,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,218,24,95,
+    114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,95,
+    119,114,97,112,112,101,114,125,2,0,0,115,8,0,0,0,
+    0,1,15,1,18,1,12,1,122,50,95,114,101,113,117,105,
+    114,101,115,95,102,114,111,122,101,110,46,60,108,111,99,97,
+    108,115,62,46,95,114,101,113,117,105,114,101,115,95,102,114,
+    111,122,101,110,95,119,114,97,112,112,101,114,41,1,114,65,
+    0,0,0,41,2,114,169,0,0,0,114,183,0,0,0,114,
+    4,0,0,0,41,1,114,169,0,0,0,114,5,0,0,0,
+    218,16,95,114,101,113,117,105,114,101,115,95,102,114,111,122,
+    101,110,123,2,0,0,115,6,0,0,0,0,2,18,5,13,
+    1,114,184,0,0,0,99,2,0,0,0,0,0,0,0,5,
+    0,0,0,5,0,0,0,67,0,0,0,115,87,0,0,0,
+    124,0,0,106,0,0,124,1,0,131,1,0,92,2,0,125,
+    2,0,125,3,0,124,2,0,100,1,0,107,8,0,114,83,
+    0,116,1,0,124,3,0,131,1,0,114,83,0,100,2,0,
+    125,4,0,116,2,0,106,3,0,124,4,0,106,4,0,124,
+    3,0,100,3,0,25,131,1,0,116,5,0,131,2,0,1,
+    110,0,0,124,2,0,83,41,4,122,86,84,114,121,32,116,
+    111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,
+    102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,
+    100,32,109,111,100,117,108,101,32,98,121,32,100,101,108,101,
+    103,97,116,105,110,103,32,116,111,10,32,32,32,32,115,101,
+    108,102,46,102,105,110,100,95,108,111,97,100,101,114,40,41,
+    46,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110,
+    103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32,
+    109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95,
+    114,68,0,0,0,41,6,218,11,102,105,110,100,95,108,111,
+    97,100,101,114,114,31,0,0,0,218,9,95,119,97,114,110,
+    105,110,103,115,218,4,119,97,114,110,114,47,0,0,0,218,
+    13,73,109,112,111,114,116,87,97,114,110,105,110,103,41,5,
+    114,76,0,0,0,114,179,0,0,0,114,161,0,0,0,218,
+    8,112,111,114,116,105,111,110,115,218,3,109,115,103,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,95,
+    102,105,110,100,95,109,111,100,117,108,101,95,115,104,105,109,
+    134,2,0,0,115,10,0,0,0,0,6,21,1,24,1,6,
+    1,32,1,114,191,0,0,0,99,4,0,0,0,0,0,0,
+    0,11,0,0,0,19,0,0,0,67,0,0,0,115,243,1,
+    0,0,105,0,0,125,4,0,124,2,0,100,1,0,107,9,
+    0,114,31,0,124,2,0,124,4,0,100,2,0,60,110,6,
+    0,100,3,0,125,2,0,124,3,0,100,1,0,107,9,0,
+    114,62,0,124,3,0,124,4,0,100,4,0,60,110,0,0,
+    124,0,0,100,1,0,100,5,0,133,2,0,25,125,5,0,
+    124,0,0,100,5,0,100,6,0,133,2,0,25,125,6,0,
+    124,0,0,100,6,0,100,7,0,133,2,0,25,125,7,0,
+    124,5,0,116,0,0,107,3,0,114,168,0,100,8,0,106,
+    1,0,124,2,0,124,5,0,131,2,0,125,8,0,116,2,
+    0,124,8,0,131,1,0,1,116,3,0,124,8,0,124,4,
+    0,141,1,0,130,1,0,110,116,0,116,4,0,124,6,0,
+    131,1,0,100,5,0,107,3,0,114,226,0,100,9,0,106,
+    1,0,124,2,0,131,1,0,125,8,0,116,2,0,124,8,
+    0,131,1,0,1,116,5,0,124,8,0,131,1,0,130,1,
+    0,110,58,0,116,4,0,124,7,0,131,1,0,100,5,0,
+    107,3,0,114,28,1,100,10,0,106,1,0,124,2,0,131,
     1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,116,
-    3,0,124,8,0,124,4,0,141,1,0,130,1,0,110,0,
-    0,121,18,0,124,1,0,100,13,0,25,100,14,0,64,125,
-    10,0,87,110,18,0,4,116,7,0,107,10,0,114,180,1,
-    1,1,1,89,113,229,1,88,116,8,0,124,7,0,131,1,
-    0,124,10,0,107,3,0,114,229,1,116,3,0,100,12,0,
-    106,1,0,124,2,0,131,1,0,124,4,0,141,1,0,130,
-    1,0,113,229,1,110,0,0,124,0,0,100,7,0,100,1,
-    0,133,2,0,25,83,40,15,0,0,0,117,122,1,0,0,
-    86,97,108,105,100,97,116,101,32,116,104,101,32,104,101,97,
-    100,101,114,32,111,102,32,116,104,101,32,112,97,115,115,101,
-    100,45,105,110,32,98,121,116,101,99,111,100,101,32,97,103,
-    97,105,110,115,116,32,115,111,117,114,99,101,95,115,116,97,
-    116,115,32,40,105,102,10,32,32,32,32,103,105,118,101,110,
-    41,32,97,110,100,32,114,101,116,117,114,110,105,110,103,32,
-    116,104,101,32,98,121,116,101,99,111,100,101,32,116,104,97,
-    116,32,99,97,110,32,98,101,32,99,111,109,112,105,108,101,
-    100,32,98,121,32,99,111,109,112,105,108,101,40,41,46,10,
-    10,32,32,32,32,65,108,108,32,111,116,104,101,114,32,97,
-    114,103,117,109,101,110,116,115,32,97,114,101,32,117,115,101,
-    100,32,116,111,32,101,110,104,97,110,99,101,32,101,114,114,
-    111,114,32,114,101,112,111,114,116,105,110,103,46,10,10,32,
-    32,32,32,73,109,112,111,114,116,69,114,114,111,114,32,105,
-    115,32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,
-    101,32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,
-    115,32,105,110,99,111,114,114,101,99,116,32,111,114,32,116,
-    104,101,32,98,121,116,101,99,111,100,101,32,105,115,10,32,
-    32,32,32,102,111,117,110,100,32,116,111,32,98,101,32,115,
-    116,97,108,101,46,32,69,79,70,69,114,114,111,114,32,105,
-    115,32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,
-    101,32,100,97,116,97,32,105,115,32,102,111,117,110,100,32,
-    116,111,32,98,101,10,32,32,32,32,116,114,117,110,99,97,
-    116,101,100,46,10,10,32,32,32,32,78,114,71,0,0,0,
-    117,10,0,0,0,60,98,121,116,101,99,111,100,101,62,114,
-    35,0,0,0,114,12,0,0,0,233,8,0,0,0,233,12,
-    0,0,0,117,30,0,0,0,98,97,100,32,109,97,103,105,
-    99,32,110,117,109,98,101,114,32,105,110,32,123,33,114,125,
-    58,32,123,33,114,125,117,43,0,0,0,114,101,97,99,104,
-    101,100,32,69,79,70,32,119,104,105,108,101,32,114,101,97,
-    100,105,110,103,32,116,105,109,101,115,116,97,109,112,32,105,
-    110,32,123,33,114,125,117,48,0,0,0,114,101,97,99,104,
+    5,0,124,8,0,131,1,0,130,1,0,110,0,0,124,1,
+    0,100,1,0,107,9,0,114,229,1,121,20,0,116,6,0,
+    124,1,0,100,11,0,25,131,1,0,125,9,0,87,110,18,
+    0,4,116,7,0,107,10,0,114,80,1,1,1,1,89,110,
+    62,0,88,116,8,0,124,6,0,131,1,0,124,9,0,107,
+    3,0,114,142,1,100,12,0,106,1,0,124,2,0,131,1,
+    0,125,8,0,116,2,0,124,8,0,131,1,0,1,116,3,
+    0,124,8,0,124,4,0,141,1,0,130,1,0,110,0,0,
+    121,18,0,124,1,0,100,13,0,25,100,14,0,64,125,10,
+    0,87,110,18,0,4,116,7,0,107,10,0,114,180,1,1,
+    1,1,89,113,229,1,88,116,8,0,124,7,0,131,1,0,
+    124,10,0,107,3,0,114,229,1,116,3,0,100,12,0,106,
+    1,0,124,2,0,131,1,0,124,4,0,141,1,0,130,1,
+    0,113,229,1,110,0,0,124,0,0,100,7,0,100,1,0,
+    133,2,0,25,83,41,15,97,122,1,0,0,86,97,108,105,
+    100,97,116,101,32,116,104,101,32,104,101,97,100,101,114,32,
+    111,102,32,116,104,101,32,112,97,115,115,101,100,45,105,110,
+    32,98,121,116,101,99,111,100,101,32,97,103,97,105,110,115,
+    116,32,115,111,117,114,99,101,95,115,116,97,116,115,32,40,
+    105,102,10,32,32,32,32,103,105,118,101,110,41,32,97,110,
+    100,32,114,101,116,117,114,110,105,110,103,32,116,104,101,32,
+    98,121,116,101,99,111,100,101,32,116,104,97,116,32,99,97,
+    110,32,98,101,32,99,111,109,112,105,108,101,100,32,98,121,
+    32,99,111,109,112,105,108,101,40,41,46,10,10,32,32,32,
+    32,65,108,108,32,111,116,104,101,114,32,97,114,103,117,109,
+    101,110,116,115,32,97,114,101,32,117,115,101,100,32,116,111,
+    32,101,110,104,97,110,99,101,32,101,114,114,111,114,32,114,
+    101,112,111,114,116,105,110,103,46,10,10,32,32,32,32,73,
+    109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,
+    105,115,101,100,32,119,104,101,110,32,116,104,101,32,109,97,
+    103,105,99,32,110,117,109,98,101,114,32,105,115,32,105,110,
+    99,111,114,114,101,99,116,32,111,114,32,116,104,101,32,98,
+    121,116,101,99,111,100,101,32,105,115,10,32,32,32,32,102,
+    111,117,110,100,32,116,111,32,98,101,32,115,116,97,108,101,
+    46,32,69,79,70,69,114,114,111,114,32,105,115,32,114,97,
+    105,115,101,100,32,119,104,101,110,32,116,104,101,32,100,97,
+    116,97,32,105,115,32,102,111,117,110,100,32,116,111,32,98,
+    101,10,32,32,32,32,116,114,117,110,99,97,116,101,100,46,
+    10,10,32,32,32,32,78,114,72,0,0,0,122,10,60,98,
+    121,116,101,99,111,100,101,62,114,35,0,0,0,114,12,0,
+    0,0,233,8,0,0,0,233,12,0,0,0,122,30,98,97,
+    100,32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,
+    110,32,123,33,114,125,58,32,123,33,114,125,122,43,114,101,
+    97,99,104,101,100,32,69,79,70,32,119,104,105,108,101,32,
+    114,101,97,100,105,110,103,32,116,105,109,101,115,116,97,109,
+    112,32,105,110,32,123,33,114,125,122,48,114,101,97,99,104,
     101,100,32,69,79,70,32,119,104,105,108,101,32,114,101,97,
     100,105,110,103,32,115,105,122,101,32,111,102,32,115,111,117,
-    114,99,101,32,105,110,32,123,33,114,125,244,5,0,0,0,
-    109,116,105,109,101,117,26,0,0,0,98,121,116,101,99,111,
-    100,101,32,105,115,32,115,116,97,108,101,32,102,111,114,32,
-    123,33,114,125,244,4,0,0,0,115,105,122,101,108,3,0,
-    0,0,255,127,255,127,3,0,40,9,0,0,0,244,12,0,
-    0,0,77,65,71,73,67,95,78,85,77,66,69,82,114,46,
-    0,0,0,114,137,0,0,0,114,157,0,0,0,114,31,0,
-    0,0,244,8,0,0,0,69,79,70,69,114,114,111,114,114,
-    14,0,0,0,114,91,0,0,0,114,19,0,0,0,40,11,
-    0,0,0,114,52,0,0,0,244,12,0,0,0,115,111,117,
-    114,99,101,95,115,116,97,116,115,114,71,0,0,0,114,35,
-    0,0,0,116,11,0,0,0,101,120,99,95,100,101,116,97,
-    105,108,115,116,5,0,0,0,109,97,103,105,99,116,13,0,
-    0,0,114,97,119,95,116,105,109,101,115,116,97,109,112,116,
-    8,0,0,0,114,97,119,95,115,105,122,101,114,136,0,0,
-    0,244,12,0,0,0,115,111,117,114,99,101,95,109,116,105,
-    109,101,244,11,0,0,0,115,111,117,114,99,101,95,115,105,
-    122,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,244,25,0,0,0,95,118,97,108,105,100,97,116,101,95,
-    98,121,116,101,99,111,100,101,95,104,101,97,100,101,114,135,
-    2,0,0,115,76,0,0,0,0,11,6,1,12,1,13,3,
-    6,1,12,1,13,1,16,1,16,1,16,1,12,1,18,1,
-    10,1,18,1,18,1,15,1,10,1,15,1,18,1,15,1,
-    10,1,15,1,12,1,3,1,20,1,13,1,5,2,18,1,
-    15,1,10,1,18,1,3,1,18,1,13,1,5,2,18,1,
-    15,1,15,1,114,200,0,0,0,99,4,0,0,0,0,0,
-    0,0,5,0,0,0,6,0,0,0,67,0,0,0,115,115,
-    0,0,0,116,0,0,106,1,0,124,0,0,131,1,0,125,
-    4,0,116,2,0,124,4,0,116,3,0,131,2,0,114,78,
-    0,116,4,0,100,1,0,124,2,0,131,2,0,1,124,3,
-    0,100,2,0,107,9,0,114,74,0,116,5,0,106,6,0,
-    124,4,0,124,3,0,131,2,0,1,110,0,0,124,4,0,
-    83,116,7,0,100,3,0,106,8,0,124,2,0,131,1,0,
-    100,4,0,124,1,0,100,5,0,124,2,0,131,1,2,130,
-    1,0,100,2,0,83,40,6,0,0,0,117,60,0,0,0,
-    67,111,109,112,105,108,101,32,98,121,116,101,99,111,100,101,
-    32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32,
-    95,118,97,108,105,100,97,116,101,95,98,121,116,101,99,111,
-    100,101,95,104,101,97,100,101,114,40,41,46,117,21,0,0,
-    0,99,111,100,101,32,111,98,106,101,99,116,32,102,114,111,
-    109,32,123,33,114,125,78,117,23,0,0,0,78,111,110,45,
-    99,111,100,101,32,111,98,106,101,99,116,32,105,110,32,123,
-    33,114,125,114,71,0,0,0,114,35,0,0,0,40,9,0,
-    0,0,244,7,0,0,0,109,97,114,115,104,97,108,116,5,
-    0,0,0,108,111,97,100,115,244,10,0,0,0,105,115,105,
-    110,115,116,97,110,99,101,244,10,0,0,0,95,99,111,100,
-    101,95,116,121,112,101,114,137,0,0,0,114,94,0,0,0,
-    116,16,0,0,0,95,102,105,120,95,99,111,95,102,105,108,
-    101,110,97,109,101,114,157,0,0,0,114,46,0,0,0,40,
-    5,0,0,0,114,52,0,0,0,114,71,0,0,0,114,125,
-    0,0,0,114,126,0,0,0,244,4,0,0,0,99,111,100,
-    101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    244,17,0,0,0,95,99,111,109,112,105,108,101,95,98,121,
-    116,101,99,111,100,101,190,2,0,0,115,16,0,0,0,0,
-    2,15,1,15,1,13,1,12,1,19,1,4,2,18,1,114,
-    205,0,0,0,114,67,0,0,0,99,3,0,0,0,0,0,
-    0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,76,
-    0,0,0,116,0,0,116,1,0,131,1,0,125,3,0,124,
-    3,0,106,2,0,116,3,0,124,1,0,131,1,0,131,1,
-    0,1,124,3,0,106,2,0,116,3,0,124,2,0,131,1,
-    0,131,1,0,1,124,3,0,106,2,0,116,4,0,106,5,
-    0,124,0,0,131,1,0,131,1,0,1,124,3,0,83,40,
-    1,0,0,0,117,80,0,0,0,67,111,109,112,105,108,101,
-    32,97,32,99,111,100,101,32,111,98,106,101,99,116,32,105,
-    110,116,111,32,98,121,116,101,99,111,100,101,32,102,111,114,
-    32,119,114,105,116,105,110,103,32,111,117,116,32,116,111,32,
-    97,32,98,121,116,101,45,99,111,109,112,105,108,101,100,10,
-    32,32,32,32,102,105,108,101,46,40,6,0,0,0,244,9,
-    0,0,0,98,121,116,101,97,114,114,97,121,114,195,0,0,
-    0,244,6,0,0,0,101,120,116,101,110,100,114,17,0,0,
-    0,114,201,0,0,0,116,5,0,0,0,100,117,109,112,115,
-    40,4,0,0,0,114,204,0,0,0,114,193,0,0,0,114,
-    199,0,0,0,114,52,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,244,17,0,0,0,95,99,111,
-    100,101,95,116,111,95,98,121,116,101,99,111,100,101,202,2,
-    0,0,115,10,0,0,0,0,3,12,1,19,1,19,1,22,
-    1,114,208,0,0,0,99,1,0,0,0,0,0,0,0,5,
-    0,0,0,4,0,0,0,67,0,0,0,115,89,0,0,0,
-    100,1,0,100,2,0,108,0,0,125,1,0,116,1,0,106,
-    2,0,124,0,0,131,1,0,106,3,0,125,2,0,124,1,
-    0,106,4,0,124,2,0,131,1,0,125,3,0,116,1,0,
-    106,5,0,100,2,0,100,3,0,131,2,0,125,4,0,124,
-    4,0,106,6,0,124,0,0,106,6,0,124,3,0,100,1,
-    0,25,131,1,0,131,1,0,83,40,4,0,0,0,117,121,
-    0,0,0,68,101,99,111,100,101,32,98,121,116,101,115,32,
-    114,101,112,114,101,115,101,110,116,105,110,103,32,115,111,117,
-    114,99,101,32,99,111,100,101,32,97,110,100,32,114,101,116,
-    117,114,110,32,116,104,101,32,115,116,114,105,110,103,46,10,
-    10,32,32,32,32,85,110,105,118,101,114,115,97,108,32,110,
-    101,119,108,105,110,101,32,115,117,112,112,111,114,116,32,105,
-    115,32,117,115,101,100,32,105,110,32,116,104,101,32,100,101,
-    99,111,100,105,110,103,46,10,32,32,32,32,114,67,0,0,
-    0,78,84,40,7,0,0,0,244,8,0,0,0,116,111,107,
-    101,110,105,122,101,114,48,0,0,0,116,7,0,0,0,66,
-    121,116,101,115,73,79,116,8,0,0,0,114,101,97,100,108,
-    105,110,101,116,15,0,0,0,100,101,116,101,99,116,95,101,
-    110,99,111,100,105,110,103,116,25,0,0,0,73,110,99,114,
-    101,109,101,110,116,97,108,78,101,119,108,105,110,101,68,101,
-    99,111,100,101,114,244,6,0,0,0,100,101,99,111,100,101,
-    40,5,0,0,0,244,12,0,0,0,115,111,117,114,99,101,
-    95,98,121,116,101,115,114,209,0,0,0,116,21,0,0,0,
+    114,99,101,32,105,110,32,123,33,114,125,218,5,109,116,105,
+    109,101,122,26,98,121,116,101,99,111,100,101,32,105,115,32,
+    115,116,97,108,101,32,102,111,114,32,123,33,114,125,218,4,
+    115,105,122,101,108,3,0,0,0,255,127,255,127,3,0,41,
+    9,218,12,77,65,71,73,67,95,78,85,77,66,69,82,114,
+    47,0,0,0,114,138,0,0,0,114,158,0,0,0,114,31,
+    0,0,0,218,8,69,79,70,69,114,114,111,114,114,14,0,
+    0,0,114,92,0,0,0,114,19,0,0,0,41,11,114,53,
+    0,0,0,218,12,115,111,117,114,99,101,95,115,116,97,116,
+    115,114,72,0,0,0,114,35,0,0,0,90,11,101,120,99,
+    95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,90,
+    13,114,97,119,95,116,105,109,101,115,116,97,109,112,90,8,
+    114,97,119,95,115,105,122,101,114,137,0,0,0,218,12,115,
+    111,117,114,99,101,95,109,116,105,109,101,218,11,115,111,117,
+    114,99,101,95,115,105,122,101,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,218,25,95,118,97,108,105,100,97,
+    116,101,95,98,121,116,101,99,111,100,101,95,104,101,97,100,
+    101,114,147,2,0,0,115,76,0,0,0,0,11,6,1,12,
+    1,13,3,6,1,12,1,13,1,16,1,16,1,16,1,12,
+    1,18,1,10,1,18,1,18,1,15,1,10,1,15,1,18,
+    1,15,1,10,1,15,1,12,1,3,1,20,1,13,1,5,
+    2,18,1,15,1,10,1,18,1,3,1,18,1,13,1,5,
+    2,18,1,15,1,15,1,114,201,0,0,0,99,4,0,0,
+    0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,
+    0,115,115,0,0,0,116,0,0,106,1,0,124,0,0,131,
+    1,0,125,4,0,116,2,0,124,4,0,116,3,0,131,2,
+    0,114,78,0,116,4,0,100,1,0,124,2,0,131,2,0,
+    1,124,3,0,100,2,0,107,9,0,114,74,0,116,5,0,
+    106,6,0,124,4,0,124,3,0,131,2,0,1,110,0,0,
+    124,4,0,83,116,7,0,100,3,0,106,8,0,124,2,0,
+    131,1,0,100,4,0,124,1,0,100,5,0,124,2,0,131,
+    1,2,130,1,0,100,2,0,83,41,6,122,60,67,111,109,
+    112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,115,
+    32,114,101,116,117,114,110,101,100,32,98,121,32,95,118,97,
+    108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,95,
+    104,101,97,100,101,114,40,41,46,122,21,99,111,100,101,32,
+    111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125,
+    78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,101,
+    99,116,32,105,110,32,123,33,114,125,114,72,0,0,0,114,
+    35,0,0,0,41,9,218,7,109,97,114,115,104,97,108,90,
+    5,108,111,97,100,115,218,10,105,115,105,110,115,116,97,110,
+    99,101,218,10,95,99,111,100,101,95,116,121,112,101,114,138,
+    0,0,0,114,95,0,0,0,90,16,95,102,105,120,95,99,
+    111,95,102,105,108,101,110,97,109,101,114,158,0,0,0,114,
+    47,0,0,0,41,5,114,53,0,0,0,114,72,0,0,0,
+    114,126,0,0,0,114,127,0,0,0,218,4,99,111,100,101,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,111,
+    100,101,202,2,0,0,115,16,0,0,0,0,2,15,1,15,
+    1,13,1,12,1,19,1,4,2,18,1,114,206,0,0,0,
+    114,68,0,0,0,99,3,0,0,0,0,0,0,0,4,0,
+    0,0,3,0,0,0,67,0,0,0,115,76,0,0,0,116,
+    0,0,116,1,0,131,1,0,125,3,0,124,3,0,106,2,
+    0,116,3,0,124,1,0,131,1,0,131,1,0,1,124,3,
+    0,106,2,0,116,3,0,124,2,0,131,1,0,131,1,0,
+    1,124,3,0,106,2,0,116,4,0,106,5,0,124,0,0,
+    131,1,0,131,1,0,1,124,3,0,83,41,1,122,80,67,
+    111,109,112,105,108,101,32,97,32,99,111,100,101,32,111,98,
+    106,101,99,116,32,105,110,116,111,32,98,121,116,101,99,111,
+    100,101,32,102,111,114,32,119,114,105,116,105,110,103,32,111,
+    117,116,32,116,111,32,97,32,98,121,116,101,45,99,111,109,
+    112,105,108,101,100,10,32,32,32,32,102,105,108,101,46,41,
+    6,218,9,98,121,116,101,97,114,114,97,121,114,196,0,0,
+    0,218,6,101,120,116,101,110,100,114,17,0,0,0,114,202,
+    0,0,0,90,5,100,117,109,112,115,41,4,114,205,0,0,
+    0,114,194,0,0,0,114,200,0,0,0,114,53,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    17,95,99,111,100,101,95,116,111,95,98,121,116,101,99,111,
+    100,101,214,2,0,0,115,10,0,0,0,0,3,12,1,19,
+    1,19,1,22,1,114,209,0,0,0,99,1,0,0,0,0,
+    0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,
+    89,0,0,0,100,1,0,100,2,0,108,0,0,125,1,0,
+    116,1,0,106,2,0,124,0,0,131,1,0,106,3,0,125,
+    2,0,124,1,0,106,4,0,124,2,0,131,1,0,125,3,
+    0,116,1,0,106,5,0,100,2,0,100,3,0,131,2,0,
+    125,4,0,124,4,0,106,6,0,124,0,0,106,6,0,124,
+    3,0,100,1,0,25,131,1,0,131,1,0,83,41,4,122,
+    121,68,101,99,111,100,101,32,98,121,116,101,115,32,114,101,
+    112,114,101,115,101,110,116,105,110,103,32,115,111,117,114,99,
+    101,32,99,111,100,101,32,97,110,100,32,114,101,116,117,114,
+    110,32,116,104,101,32,115,116,114,105,110,103,46,10,10,32,
+    32,32,32,85,110,105,118,101,114,115,97,108,32,110,101,119,
+    108,105,110,101,32,115,117,112,112,111,114,116,32,105,115,32,
+    117,115,101,100,32,105,110,32,116,104,101,32,100,101,99,111,
+    100,105,110,103,46,10,32,32,32,32,114,68,0,0,0,78,
+    84,41,7,218,8,116,111,107,101,110,105,122,101,114,49,0,
+    0,0,90,7,66,121,116,101,115,73,79,90,8,114,101,97,
+    100,108,105,110,101,90,15,100,101,116,101,99,116,95,101,110,
+    99,111,100,105,110,103,90,25,73,110,99,114,101,109,101,110,
+    116,97,108,78,101,119,108,105,110,101,68,101,99,111,100,101,
+    114,218,6,100,101,99,111,100,101,41,5,218,12,115,111,117,
+    114,99,101,95,98,121,116,101,115,114,210,0,0,0,90,21,
     115,111,117,114,99,101,95,98,121,116,101,115,95,114,101,97,
-    100,108,105,110,101,244,8,0,0,0,101,110,99,111,100,105,
-    110,103,116,15,0,0,0,110,101,119,108,105,110,101,95,100,
-    101,99,111,100,101,114,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,244,13,0,0,0,100,101,99,111,100,101,
-    95,115,111,117,114,99,101,212,2,0,0,115,10,0,0,0,
-    0,5,12,1,18,1,15,1,18,1,114,213,0,0,0,99,
-    0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,
-    64,0,0,0,115,169,0,0,0,101,0,0,90,1,0,100,
-    0,0,90,2,0,100,1,0,90,3,0,101,4,0,100,2,
-    0,100,3,0,132,0,0,131,1,0,90,5,0,101,4,0,
-    100,4,0,100,5,0,100,6,0,132,1,0,131,1,0,90,
-    6,0,101,4,0,101,7,0,101,8,0,101,9,0,100,7,
-    0,100,8,0,132,0,0,131,1,0,131,1,0,131,1,0,
-    131,1,0,90,10,0,101,4,0,101,9,0,100,9,0,100,
-    10,0,132,0,0,131,1,0,131,1,0,90,11,0,101,4,
-    0,101,9,0,100,11,0,100,12,0,132,0,0,131,1,0,
-    131,1,0,90,12,0,101,4,0,101,9,0,100,13,0,100,
-    14,0,132,0,0,131,1,0,131,1,0,90,13,0,100,4,
-    0,83,40,15,0,0,0,244,15,0,0,0,66,117,105,108,
-    116,105,110,73,109,112,111,114,116,101,114,117,144,0,0,0,
-    77,101,116,97,32,112,97,116,104,32,105,109,112,111,114,116,
-    32,102,111,114,32,98,117,105,108,116,45,105,110,32,109,111,
-    100,117,108,101,115,46,10,10,32,32,32,32,65,108,108,32,
-    109,101,116,104,111,100,115,32,97,114,101,32,101,105,116,104,
-    101,114,32,99,108,97,115,115,32,111,114,32,115,116,97,116,
-    105,99,32,109,101,116,104,111,100,115,32,116,111,32,97,118,
-    111,105,100,32,116,104,101,32,110,101,101,100,32,116,111,10,
-    32,32,32,32,105,110,115,116,97,110,116,105,97,116,101,32,
-    116,104,101,32,99,108,97,115,115,46,10,10,32,32,32,32,
-    99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,
-    0,67,0,0,0,115,16,0,0,0,100,1,0,106,0,0,
-    124,1,0,106,1,0,131,1,0,83,40,2,0,0,0,78,
-    117,24,0,0,0,60,109,111,100,117,108,101,32,123,33,114,
-    125,32,40,98,117,105,108,116,45,105,110,41,62,40,2,0,
-    0,0,114,46,0,0,0,114,56,0,0,0,40,2,0,0,
-    0,244,3,0,0,0,99,108,115,114,161,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,244,11,0,
-    0,0,109,111,100,117,108,101,95,114,101,112,114,235,2,0,
-    0,115,2,0,0,0,0,2,117,27,0,0,0,66,117,105,
-    108,116,105,110,73,109,112,111,114,116,101,114,46,109,111,100,
-    117,108,101,95,114,101,112,114,78,99,3,0,0,0,0,0,
-    0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,39,
-    0,0,0,124,2,0,100,1,0,107,9,0,114,16,0,100,
-    1,0,83,116,0,0,106,1,0,124,1,0,131,1,0,114,
-    35,0,124,0,0,83,100,1,0,83,40,2,0,0,0,117,
-    113,0,0,0,70,105,110,100,32,116,104,101,32,98,117,105,
-    108,116,45,105,110,32,109,111,100,117,108,101,46,10,10,32,
-    32,32,32,32,32,32,32,73,102,32,39,112,97,116,104,39,
-    32,105,115,32,101,118,101,114,32,115,112,101,99,105,102,105,
-    101,100,32,116,104,101,110,32,116,104,101,32,115,101,97,114,
-    99,104,32,105,115,32,99,111,110,115,105,100,101,114,101,100,
-    32,97,32,102,97,105,108,117,114,101,46,10,10,32,32,32,
-    32,32,32,32,32,78,40,2,0,0,0,114,94,0,0,0,
-    116,10,0,0,0,105,115,95,98,117,105,108,116,105,110,40,
-    3,0,0,0,114,215,0,0,0,114,178,0,0,0,114,35,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,244,11,0,0,0,102,105,110,100,95,109,111,100,117,
-    108,101,239,2,0,0,115,6,0,0,0,0,7,12,1,4,
-    1,117,27,0,0,0,66,117,105,108,116,105,110,73,109,112,
-    111,114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,
-    101,99,2,0,0,0,0,0,0,0,2,0,0,0,10,0,
-    0,0,67,0,0,0,115,39,0,0,0,116,0,0,124,1,
-    0,131,1,0,143,21,0,1,116,1,0,116,2,0,106,3,
-    0,124,1,0,131,2,0,83,87,100,1,0,81,88,100,1,
-    0,83,40,2,0,0,0,117,23,0,0,0,76,111,97,100,
-    32,97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,
-    108,101,46,78,40,4,0,0,0,114,138,0,0,0,114,99,
-    0,0,0,114,94,0,0,0,116,12,0,0,0,105,110,105,
-    116,95,98,117,105,108,116,105,110,40,2,0,0,0,114,215,
-    0,0,0,114,178,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,244,11,0,0,0,108,111,97,100,
-    95,109,111,100,117,108,101,250,2,0,0,115,4,0,0,0,
-    0,6,13,1,117,27,0,0,0,66,117,105,108,116,105,110,
-    73,109,112,111,114,116,101,114,46,108,111,97,100,95,109,111,
-    100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,
-    0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,
-    0,83,40,2,0,0,0,117,57,0,0,0,82,101,116,117,
-    114,110,32,78,111,110,101,32,97,115,32,98,117,105,108,116,
-    45,105,110,32,109,111,100,117,108,101,115,32,100,111,32,110,
-    111,116,32,104,97,118,101,32,99,111,100,101,32,111,98,106,
-    101,99,116,115,46,78,114,4,0,0,0,40,2,0,0,0,
-    114,215,0,0,0,114,178,0,0,0,114,4,0,0,0,114,
-    4,0,0,0,114,5,0,0,0,244,8,0,0,0,103,101,
-    116,95,99,111,100,101,3,3,0,0,115,2,0,0,0,0,
-    4,117,24,0,0,0,66,117,105,108,116,105,110,73,109,112,
+    100,108,105,110,101,218,8,101,110,99,111,100,105,110,103,90,
+    15,110,101,119,108,105,110,101,95,100,101,99,111,100,101,114,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    13,100,101,99,111,100,101,95,115,111,117,114,99,101,224,2,
+    0,0,115,10,0,0,0,0,5,12,1,18,1,15,1,18,
+    1,114,214,0,0,0,99,0,0,0,0,0,0,0,0,0,
+    0,0,0,6,0,0,0,64,0,0,0,115,169,0,0,0,
+    101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,
+    3,0,101,4,0,100,2,0,100,3,0,132,0,0,131,1,
+    0,90,5,0,101,4,0,100,4,0,100,5,0,100,6,0,
+    132,1,0,131,1,0,90,6,0,101,4,0,101,7,0,101,
+    8,0,101,9,0,100,7,0,100,8,0,132,0,0,131,1,
+    0,131,1,0,131,1,0,131,1,0,90,10,0,101,4,0,
+    101,9,0,100,9,0,100,10,0,132,0,0,131,1,0,131,
+    1,0,90,11,0,101,4,0,101,9,0,100,11,0,100,12,
+    0,132,0,0,131,1,0,131,1,0,90,12,0,101,4,0,
+    101,9,0,100,13,0,100,14,0,132,0,0,131,1,0,131,
+    1,0,90,13,0,100,4,0,83,41,15,218,15,66,117,105,
+    108,116,105,110,73,109,112,111,114,116,101,114,122,144,77,101,
+    116,97,32,112,97,116,104,32,105,109,112,111,114,116,32,102,
+    111,114,32,98,117,105,108,116,45,105,110,32,109,111,100,117,
+    108,101,115,46,10,10,32,32,32,32,65,108,108,32,109,101,
+    116,104,111,100,115,32,97,114,101,32,101,105,116,104,101,114,
+    32,99,108,97,115,115,32,111,114,32,115,116,97,116,105,99,
+    32,109,101,116,104,111,100,115,32,116,111,32,97,118,111,105,
+    100,32,116,104,101,32,110,101,101,100,32,116,111,10,32,32,
+    32,32,105,110,115,116,97,110,116,105,97,116,101,32,116,104,
+    101,32,99,108,97,115,115,46,10,10,32,32,32,32,99,2,
+    0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,
+    0,0,0,115,16,0,0,0,100,1,0,106,0,0,124,1,
+    0,106,1,0,131,1,0,83,41,2,78,122,24,60,109,111,
+    100,117,108,101,32,123,33,114,125,32,40,98,117,105,108,116,
+    45,105,110,41,62,41,2,114,47,0,0,0,114,57,0,0,
+    0,41,2,218,3,99,108,115,114,162,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,11,109,111,
+    100,117,108,101,95,114,101,112,114,247,2,0,0,115,2,0,
+    0,0,0,2,122,27,66,117,105,108,116,105,110,73,109,112,
+    111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112,
+    114,78,99,3,0,0,0,0,0,0,0,3,0,0,0,2,
+    0,0,0,67,0,0,0,115,39,0,0,0,124,2,0,100,
+    1,0,107,9,0,114,16,0,100,1,0,83,116,0,0,106,
+    1,0,124,1,0,131,1,0,114,35,0,124,0,0,83,100,
+    1,0,83,41,2,122,113,70,105,110,100,32,116,104,101,32,
+    98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,46,
+    10,10,32,32,32,32,32,32,32,32,73,102,32,39,112,97,
+    116,104,39,32,105,115,32,101,118,101,114,32,115,112,101,99,
+    105,102,105,101,100,32,116,104,101,110,32,116,104,101,32,115,
+    101,97,114,99,104,32,105,115,32,99,111,110,115,105,100,101,
+    114,101,100,32,97,32,102,97,105,108,117,114,101,46,10,10,
+    32,32,32,32,32,32,32,32,78,41,2,114,95,0,0,0,
+    90,10,105,115,95,98,117,105,108,116,105,110,41,3,114,216,
+    0,0,0,114,179,0,0,0,114,35,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,11,102,105,
+    110,100,95,109,111,100,117,108,101,251,2,0,0,115,6,0,
+    0,0,0,7,12,1,4,1,122,27,66,117,105,108,116,105,
+    110,73,109,112,111,114,116,101,114,46,102,105,110,100,95,109,
+    111,100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,
+    0,0,10,0,0,0,67,0,0,0,115,39,0,0,0,116,
+    0,0,124,1,0,131,1,0,143,21,0,1,116,1,0,116,
+    2,0,106,3,0,124,1,0,131,2,0,83,87,100,1,0,
+    81,88,100,1,0,83,41,2,122,23,76,111,97,100,32,97,
+    32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,
+    46,78,41,4,114,139,0,0,0,114,100,0,0,0,114,95,
+    0,0,0,90,12,105,110,105,116,95,98,117,105,108,116,105,
+    110,41,2,114,216,0,0,0,114,179,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,11,108,111,
+    97,100,95,109,111,100,117,108,101,6,3,0,0,115,4,0,
+    0,0,0,6,13,1,122,27,66,117,105,108,116,105,110,73,
+    109,112,111,114,116,101,114,46,108,111,97,100,95,109,111,100,
+    117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,
+    1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,
+    83,41,2,122,57,82,101,116,117,114,110,32,78,111,110,101,
+    32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,100,
+    117,108,101,115,32,100,111,32,110,111,116,32,104,97,118,101,
+    32,99,111,100,101,32,111,98,106,101,99,116,115,46,78,114,
+    4,0,0,0,41,2,114,216,0,0,0,114,179,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    8,103,101,116,95,99,111,100,101,15,3,0,0,115,2,0,
+    0,0,0,4,122,24,66,117,105,108,116,105,110,73,109,112,
     111,114,116,101,114,46,103,101,116,95,99,111,100,101,99,2,
     0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
-    0,0,0,115,4,0,0,0,100,1,0,83,40,2,0,0,
-    0,117,56,0,0,0,82,101,116,117,114,110,32,78,111,110,
-    101,32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,
-    100,117,108,101,115,32,100,111,32,110,111,116,32,104,97,118,
-    101,32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,
-    4,0,0,0,40,2,0,0,0,114,215,0,0,0,114,178,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,244,10,0,0,0,103,101,116,95,115,111,117,114,99,
-    101,9,3,0,0,115,2,0,0,0,0,4,117,26,0,0,
-    0,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,
-    46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,
-    0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,
-    115,4,0,0,0,100,1,0,83,40,2,0,0,0,117,52,
-    0,0,0,82,101,116,117,114,110,32,70,97,108,115,101,32,
-    97,115,32,98,117,105,108,116,45,105,110,32,109,111,100,117,
-    108,101,115,32,97,114,101,32,110,101,118,101,114,32,112,97,
-    99,107,97,103,101,115,46,70,114,4,0,0,0,40,2,0,
-    0,0,114,215,0,0,0,114,178,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,156,0,0,0,
-    15,3,0,0,115,2,0,0,0,0,4,117,26,0,0,0,
-    66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,
-    105,115,95,112,97,99,107,97,103,101,40,14,0,0,0,114,
-    56,0,0,0,114,55,0,0,0,114,57,0,0,0,114,58,
-    0,0,0,244,11,0,0,0,99,108,97,115,115,109,101,116,
-    104,111,100,114,216,0,0,0,114,217,0,0,0,114,170,0,
-    0,0,114,173,0,0,0,114,180,0,0,0,114,218,0,0,
-    0,114,219,0,0,0,114,220,0,0,0,114,156,0,0,0,
-    114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
-    5,0,0,0,114,214,0,0,0,226,2,0,0,115,28,0,
-    0,0,12,7,6,2,18,4,3,1,18,10,3,1,3,1,
-    3,1,27,6,3,1,21,5,3,1,21,5,3,1,114,214,
-    0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,
-    6,0,0,0,64,0,0,0,115,169,0,0,0,101,0,0,
-    90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,101,
-    4,0,100,2,0,100,3,0,132,0,0,131,1,0,90,5,
-    0,101,4,0,100,4,0,100,5,0,100,6,0,132,1,0,
-    131,1,0,90,6,0,101,4,0,101,7,0,101,8,0,101,
-    9,0,100,7,0,100,8,0,132,0,0,131,1,0,131,1,
-    0,131,1,0,131,1,0,90,10,0,101,4,0,101,9,0,
-    100,9,0,100,10,0,132,0,0,131,1,0,131,1,0,90,
-    11,0,101,4,0,101,9,0,100,11,0,100,12,0,132,0,
-    0,131,1,0,131,1,0,90,12,0,101,4,0,101,9,0,
-    100,13,0,100,14,0,132,0,0,131,1,0,131,1,0,90,
-    13,0,100,4,0,83,40,15,0,0,0,244,14,0,0,0,
-    70,114,111,122,101,110,73,109,112,111,114,116,101,114,117,142,
-    0,0,0,77,101,116,97,32,112,97,116,104,32,105,109,112,
-    111,114,116,32,102,111,114,32,102,114,111,122,101,110,32,109,
-    111,100,117,108,101,115,46,10,10,32,32,32,32,65,108,108,
-    32,109,101,116,104,111,100,115,32,97,114,101,32,101,105,116,
-    104,101,114,32,99,108,97,115,115,32,111,114,32,115,116,97,
-    116,105,99,32,109,101,116,104,111,100,115,32,116,111,32,97,
-    118,111,105,100,32,116,104,101,32,110,101,101,100,32,116,111,
-    10,32,32,32,32,105,110,115,116,97,110,116,105,97,116,101,
-    32,116,104,101,32,99,108,97,115,115,46,10,10,32,32,32,
-    32,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,
-    0,0,67,0,0,0,115,16,0,0,0,100,1,0,106,0,
-    0,124,1,0,106,1,0,131,1,0,83,40,2,0,0,0,
-    78,117,22,0,0,0,60,109,111,100,117,108,101,32,123,33,
-    114,125,32,40,102,114,111,122,101,110,41,62,40,2,0,0,
-    0,114,46,0,0,0,114,56,0,0,0,40,2,0,0,0,
-    114,215,0,0,0,244,1,0,0,0,109,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,216,0,0,0,31,
-    3,0,0,115,2,0,0,0,0,2,117,26,0,0,0,70,
-    114,111,122,101,110,73,109,112,111,114,116,101,114,46,109,111,
-    100,117,108,101,95,114,101,112,114,78,99,3,0,0,0,0,
-    0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,
-    23,0,0,0,116,0,0,106,1,0,124,1,0,131,1,0,
-    114,19,0,124,0,0,83,100,1,0,83,40,2,0,0,0,
-    117,21,0,0,0,70,105,110,100,32,97,32,102,114,111,122,
-    101,110,32,109,111,100,117,108,101,46,78,40,2,0,0,0,
-    114,94,0,0,0,114,181,0,0,0,40,3,0,0,0,114,
-    215,0,0,0,114,178,0,0,0,114,35,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,217,0,
-    0,0,35,3,0,0,115,2,0,0,0,0,3,117,26,0,
-    0,0,70,114,111,122,101,110,73,109,112,111,114,116,101,114,
-    46,102,105,110,100,95,109,111,100,117,108,101,99,2,0,0,
-    0,0,0,0,0,3,0,0,0,10,0,0,0,67,0,0,
-    0,115,51,0,0,0,116,0,0,124,1,0,131,1,0,143,
-    33,0,1,116,1,0,116,2,0,106,3,0,124,1,0,131,
-    2,0,125,2,0,124,2,0,96,4,0,124,2,0,83,87,
-    100,1,0,81,88,100,1,0,83,40,2,0,0,0,117,21,
-    0,0,0,76,111,97,100,32,97,32,102,114,111,122,101,110,
-    32,109,111,100,117,108,101,46,78,40,5,0,0,0,114,138,
-    0,0,0,114,99,0,0,0,114,94,0,0,0,116,11,0,
-    0,0,105,110,105,116,95,102,114,111,122,101,110,114,164,0,
-    0,0,40,3,0,0,0,114,215,0,0,0,114,178,0,0,
-    0,114,223,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,218,0,0,0,40,3,0,0,115,8,
-    0,0,0,0,6,13,1,18,2,6,1,117,26,0,0,0,
-    70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,108,
-    111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,
-    0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,
-    13,0,0,0,116,0,0,106,1,0,124,1,0,131,1,0,
-    83,40,1,0,0,0,117,45,0,0,0,82,101,116,117,114,
-    110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99,
-    116,32,102,111,114,32,116,104,101,32,102,114,111,122,101,110,
-    32,109,111,100,117,108,101,46,40,2,0,0,0,114,94,0,
-    0,0,116,17,0,0,0,103,101,116,95,102,114,111,122,101,
-    110,95,111,98,106,101,99,116,40,2,0,0,0,114,215,0,
-    0,0,114,178,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,219,0,0,0,52,3,0,0,115,
-    2,0,0,0,0,4,117,23,0,0,0,70,114,111,122,101,
-    110,73,109,112,111,114,116,101,114,46,103,101,116,95,99,111,
-    100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,
-    0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,
-    40,2,0,0,0,117,54,0,0,0,82,101,116,117,114,110,
-    32,78,111,110,101,32,97,115,32,102,114,111,122,101,110,32,
-    109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104,
-    97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,46,
-    78,114,4,0,0,0,40,2,0,0,0,114,215,0,0,0,
-    114,178,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
-    5,0,0,0,114,220,0,0,0,58,3,0,0,115,2,0,
-    0,0,0,4,117,25,0,0,0,70,114,111,122,101,110,73,
-    109,112,111,114,116,101,114,46,103,101,116,95,115,111,117,114,
-    99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,2,
-    0,0,0,67,0,0,0,115,13,0,0,0,116,0,0,106,
-    1,0,124,1,0,131,1,0,83,40,1,0,0,0,117,46,
-    0,0,0,82,101,116,117,114,110,32,84,114,117,101,32,105,
-    102,32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,
-    117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,
-    46,40,2,0,0,0,114,94,0,0,0,116,17,0,0,0,
-    105,115,95,102,114,111,122,101,110,95,112,97,99,107,97,103,
-    101,40,2,0,0,0,114,215,0,0,0,114,178,0,0,0,
-    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
-    156,0,0,0,64,3,0,0,115,2,0,0,0,0,4,117,
-    25,0,0,0,70,114,111,122,101,110,73,109,112,111,114,116,
-    101,114,46,105,115,95,112,97,99,107,97,103,101,40,14,0,
-    0,0,114,56,0,0,0,114,55,0,0,0,114,57,0,0,
-    0,114,58,0,0,0,114,221,0,0,0,114,216,0,0,0,
-    114,217,0,0,0,114,170,0,0,0,114,173,0,0,0,114,
-    183,0,0,0,114,218,0,0,0,114,219,0,0,0,114,220,
-    0,0,0,114,156,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,114,222,0,0,
-    0,22,3,0,0,115,28,0,0,0,12,7,6,2,18,4,
+    0,0,0,115,4,0,0,0,100,1,0,83,41,2,122,56,
+    82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,98,
+    117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,
+    100,111,32,110,111,116,32,104,97,118,101,32,115,111,117,114,
+    99,101,32,99,111,100,101,46,78,114,4,0,0,0,41,2,
+    114,216,0,0,0,114,179,0,0,0,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,218,10,103,101,116,95,115,
+    111,117,114,99,101,21,3,0,0,115,2,0,0,0,0,4,
+    122,26,66,117,105,108,116,105,110,73,109,112,111,114,116,101,
+    114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,
+    0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,
+    0,115,4,0,0,0,100,1,0,83,41,2,122,52,82,101,
+    116,117,114,110,32,70,97,108,115,101,32,97,115,32,98,117,
+    105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97,
+    114,101,32,110,101,118,101,114,32,112,97,99,107,97,103,101,
+    115,46,70,114,4,0,0,0,41,2,114,216,0,0,0,114,
+    179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,157,0,0,0,27,3,0,0,115,2,0,0,
+    0,0,4,122,26,66,117,105,108,116,105,110,73,109,112,111,
+    114,116,101,114,46,105,115,95,112,97,99,107,97,103,101,41,
+    14,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,
+    114,59,0,0,0,218,11,99,108,97,115,115,109,101,116,104,
+    111,100,114,217,0,0,0,114,218,0,0,0,114,171,0,0,
+    0,114,174,0,0,0,114,181,0,0,0,114,219,0,0,0,
+    114,220,0,0,0,114,221,0,0,0,114,157,0,0,0,114,
+    4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,215,0,0,0,238,2,0,0,115,28,0,0,
+    0,12,7,6,2,18,4,3,1,18,10,3,1,3,1,3,
+    1,27,6,3,1,21,5,3,1,21,5,3,1,114,215,0,
+    0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,6,
+    0,0,0,64,0,0,0,115,169,0,0,0,101,0,0,90,
+    1,0,100,0,0,90,2,0,100,1,0,90,3,0,101,4,
+    0,100,2,0,100,3,0,132,0,0,131,1,0,90,5,0,
+    101,4,0,100,4,0,100,5,0,100,6,0,132,1,0,131,
+    1,0,90,6,0,101,4,0,101,7,0,101,8,0,101,9,
+    0,100,7,0,100,8,0,132,0,0,131,1,0,131,1,0,
+    131,1,0,131,1,0,90,10,0,101,4,0,101,9,0,100,
+    9,0,100,10,0,132,0,0,131,1,0,131,1,0,90,11,
+    0,101,4,0,101,9,0,100,11,0,100,12,0,132,0,0,
+    131,1,0,131,1,0,90,12,0,101,4,0,101,9,0,100,
+    13,0,100,14,0,132,0,0,131,1,0,131,1,0,90,13,
+    0,100,4,0,83,41,15,218,14,70,114,111,122,101,110,73,
+    109,112,111,114,116,101,114,122,142,77,101,116,97,32,112,97,
+    116,104,32,105,109,112,111,114,116,32,102,111,114,32,102,114,
+    111,122,101,110,32,109,111,100,117,108,101,115,46,10,10,32,
+    32,32,32,65,108,108,32,109,101,116,104,111,100,115,32,97,
+    114,101,32,101,105,116,104,101,114,32,99,108,97,115,115,32,
+    111,114,32,115,116,97,116,105,99,32,109,101,116,104,111,100,
+    115,32,116,111,32,97,118,111,105,100,32,116,104,101,32,110,
+    101,101,100,32,116,111,10,32,32,32,32,105,110,115,116,97,
+    110,116,105,97,116,101,32,116,104,101,32,99,108,97,115,115,
+    46,10,10,32,32,32,32,99,2,0,0,0,0,0,0,0,
+    2,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,
+    0,100,1,0,106,0,0,124,1,0,106,1,0,131,1,0,
+    83,41,2,78,122,22,60,109,111,100,117,108,101,32,123,33,
+    114,125,32,40,102,114,111,122,101,110,41,62,41,2,114,47,
+    0,0,0,114,57,0,0,0,41,2,114,216,0,0,0,218,
+    1,109,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,217,0,0,0,43,3,0,0,115,2,0,0,0,0,
+    2,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,
+    114,46,109,111,100,117,108,101,95,114,101,112,114,78,99,3,
+    0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,
+    0,0,0,115,23,0,0,0,116,0,0,106,1,0,124,1,
+    0,131,1,0,114,19,0,124,0,0,83,100,1,0,83,41,
+    2,122,21,70,105,110,100,32,97,32,102,114,111,122,101,110,
+    32,109,111,100,117,108,101,46,78,41,2,114,95,0,0,0,
+    114,182,0,0,0,41,3,114,216,0,0,0,114,179,0,0,
+    0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,218,0,0,0,47,3,0,0,115,2,
+    0,0,0,0,3,122,26,70,114,111,122,101,110,73,109,112,
+    111,114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,
+    101,99,2,0,0,0,0,0,0,0,3,0,0,0,10,0,
+    0,0,67,0,0,0,115,51,0,0,0,116,0,0,124,1,
+    0,131,1,0,143,33,0,1,116,1,0,116,2,0,106,3,
+    0,124,1,0,131,2,0,125,2,0,124,2,0,96,4,0,
+    124,2,0,83,87,100,1,0,81,88,100,1,0,83,41,2,
+    122,21,76,111,97,100,32,97,32,102,114,111,122,101,110,32,
+    109,111,100,117,108,101,46,78,41,5,114,139,0,0,0,114,
+    100,0,0,0,114,95,0,0,0,90,11,105,110,105,116,95,
+    102,114,111,122,101,110,114,165,0,0,0,41,3,114,216,0,
+    0,0,114,179,0,0,0,114,224,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,
+    52,3,0,0,115,8,0,0,0,0,6,13,1,18,2,6,
+    1,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,
+    114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,
+    0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,
+    0,0,115,13,0,0,0,116,0,0,106,1,0,124,1,0,
+    131,1,0,83,41,1,122,45,82,101,116,117,114,110,32,116,
+    104,101,32,99,111,100,101,32,111,98,106,101,99,116,32,102,
+    111,114,32,116,104,101,32,102,114,111,122,101,110,32,109,111,
+    100,117,108,101,46,41,2,114,95,0,0,0,90,17,103,101,
+    116,95,102,114,111,122,101,110,95,111,98,106,101,99,116,41,
+    2,114,216,0,0,0,114,179,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,220,0,0,0,64,
+    3,0,0,115,2,0,0,0,0,4,122,23,70,114,111,122,
+    101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,99,
+    111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,
+    1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,
+    83,41,2,122,54,82,101,116,117,114,110,32,78,111,110,101,
+    32,97,115,32,102,114,111,122,101,110,32,109,111,100,117,108,
+    101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,115,
+    111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,
+    0,41,2,114,216,0,0,0,114,179,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,114,221,0,0,
+    0,70,3,0,0,115,2,0,0,0,0,4,122,25,70,114,
+    111,122,101,110,73,109,112,111,114,116,101,114,46,103,101,116,
+    95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,
+    2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,
+    0,116,0,0,106,1,0,124,1,0,131,1,0,83,41,1,
+    122,46,82,101,116,117,114,110,32,84,114,117,101,32,105,102,
+    32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117,
+    108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,
+    41,2,114,95,0,0,0,90,17,105,115,95,102,114,111,122,
+    101,110,95,112,97,99,107,97,103,101,41,2,114,216,0,0,
+    0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,157,0,0,0,76,3,0,0,115,2,
+    0,0,0,0,4,122,25,70,114,111,122,101,110,73,109,112,
+    111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101,
+    41,14,114,57,0,0,0,114,56,0,0,0,114,58,0,0,
+    0,114,59,0,0,0,114,222,0,0,0,114,217,0,0,0,
+    114,218,0,0,0,114,171,0,0,0,114,174,0,0,0,114,
+    184,0,0,0,114,219,0,0,0,114,220,0,0,0,114,221,
+    0,0,0,114,157,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,114,223,0,0,
+    0,34,3,0,0,115,28,0,0,0,12,7,6,2,18,4,
     3,1,18,4,3,1,3,1,3,1,27,9,3,1,21,5,
-    3,1,21,5,3,1,114,222,0,0,0,99,0,0,0,0,
+    3,1,21,5,3,1,114,223,0,0,0,99,0,0,0,0,
     0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,
     115,97,0,0,0,101,0,0,90,1,0,100,0,0,90,2,
     0,100,1,0,90,3,0,100,2,0,90,4,0,100,3,0,
@@ -1632,242 +1535,228 @@
     6,0,132,0,0,131,1,0,90,8,0,101,7,0,100,7,
     0,100,8,0,132,0,0,131,1,0,90,9,0,101,7,0,
     100,9,0,100,10,0,100,11,0,132,1,0,131,1,0,90,
-    10,0,100,9,0,83,40,12,0,0,0,244,21,0,0,0,
-    87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,
-    105,110,100,101,114,117,67,0,0,0,77,101,116,97,32,112,
-    97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,109,
-    111,100,117,108,101,115,32,100,101,99,108,97,114,101,100,32,
-    105,110,32,116,104,101,32,87,105,110,100,111,119,115,32,114,
-    101,103,105,115,116,114,121,46,10,32,32,32,32,117,59,0,
-    0,0,83,111,102,116,119,97,114,101,92,80,121,116,104,111,
-    110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,121,
-    115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,108,
-    101,115,92,123,102,117,108,108,110,97,109,101,125,117,65,0,
-    0,0,83,111,102,116,119,97,114,101,92,80,121,116,104,111,
-    110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,121,
-    115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,108,
-    101,115,92,123,102,117,108,108,110,97,109,101,125,92,68,101,
-    98,117,103,70,99,2,0,0,0,0,0,0,0,2,0,0,
-    0,11,0,0,0,67,0,0,0,115,67,0,0,0,121,23,
-    0,116,0,0,106,1,0,116,0,0,106,2,0,124,1,0,
-    131,2,0,83,87,110,37,0,4,116,3,0,107,10,0,114,
-    62,0,1,1,1,116,0,0,106,1,0,116,0,0,106,4,
-    0,124,1,0,131,2,0,83,89,110,1,0,88,100,0,0,
-    83,40,1,0,0,0,78,40,5,0,0,0,244,7,0,0,
-    0,95,119,105,110,114,101,103,116,7,0,0,0,79,112,101,
-    110,75,101,121,116,17,0,0,0,72,75,69,89,95,67,85,
-    82,82,69,78,84,95,85,83,69,82,114,40,0,0,0,116,
-    18,0,0,0,72,75,69,89,95,76,79,67,65,76,95,77,
-    65,67,72,73,78,69,40,2,0,0,0,114,215,0,0,0,
-    244,3,0,0,0,107,101,121,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,244,14,0,0,0,95,111,112,101,
-    110,95,114,101,103,105,115,116,114,121,84,3,0,0,115,8,
-    0,0,0,0,2,3,1,23,1,13,1,117,36,0,0,0,
-    87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,
-    105,110,100,101,114,46,95,111,112,101,110,95,114,101,103,105,
-    115,116,114,121,99,2,0,0,0,0,0,0,0,6,0,0,
-    0,16,0,0,0,67,0,0,0,115,142,0,0,0,124,0,
-    0,106,0,0,114,21,0,124,0,0,106,1,0,125,2,0,
-    110,9,0,124,0,0,106,2,0,125,2,0,124,2,0,106,
-    3,0,100,1,0,124,1,0,100,2,0,116,4,0,106,5,
-    0,100,0,0,100,3,0,133,2,0,25,131,0,2,125,3,
-    0,121,46,0,124,0,0,106,6,0,124,3,0,131,1,0,
-    143,25,0,125,4,0,116,7,0,106,8,0,124,4,0,100,
-    4,0,131,2,0,125,5,0,87,100,0,0,81,88,87,110,
-    22,0,4,116,9,0,107,10,0,114,137,0,1,1,1,100,
-    0,0,83,89,110,1,0,88,124,5,0,83,40,5,0,0,
-    0,78,114,178,0,0,0,116,11,0,0,0,115,121,115,95,
-    118,101,114,115,105,111,110,114,121,0,0,0,114,30,0,0,
-    0,40,10,0,0,0,244,11,0,0,0,68,69,66,85,71,
-    95,66,85,73,76,68,244,18,0,0,0,82,69,71,73,83,
-    84,82,89,95,75,69,89,95,68,69,66,85,71,244,12,0,
-    0,0,82,69,71,73,83,84,82,89,95,75,69,89,114,46,
-    0,0,0,114,7,0,0,0,244,7,0,0,0,118,101,114,
-    115,105,111,110,114,227,0,0,0,114,225,0,0,0,116,10,
-    0,0,0,81,117,101,114,121,86,97,108,117,101,114,40,0,
-    0,0,40,6,0,0,0,114,215,0,0,0,114,178,0,0,
-    0,116,12,0,0,0,114,101,103,105,115,116,114,121,95,107,
-    101,121,114,226,0,0,0,116,4,0,0,0,104,107,101,121,
-    244,8,0,0,0,102,105,108,101,112,97,116,104,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,244,16,0,0,
-    0,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114,
-    121,91,3,0,0,115,22,0,0,0,0,2,9,1,12,2,
-    9,1,15,1,22,1,3,1,18,1,28,1,13,1,9,1,
-    117,38,0,0,0,87,105,110,100,111,119,115,82,101,103,105,
-    115,116,114,121,70,105,110,100,101,114,46,95,115,101,97,114,
-    99,104,95,114,101,103,105,115,116,114,121,78,99,3,0,0,
-    0,0,0,0,0,6,0,0,0,12,0,0,0,67,0,0,
-    0,115,137,0,0,0,124,0,0,106,0,0,124,1,0,131,
-    1,0,125,3,0,124,3,0,100,1,0,107,8,0,114,31,
-    0,100,1,0,83,121,17,0,116,1,0,106,2,0,124,3,
-    0,131,1,0,1,87,110,22,0,4,116,3,0,107,10,0,
-    114,72,0,1,1,1,100,1,0,83,89,110,1,0,88,120,
-    57,0,116,4,0,131,0,0,68,93,46,0,92,2,0,125,
-    4,0,125,5,0,124,3,0,106,5,0,116,6,0,124,5,
-    0,131,1,0,131,1,0,114,83,0,124,4,0,124,1,0,
-    124,3,0,131,2,0,83,113,83,0,87,100,1,0,83,40,
-    2,0,0,0,117,34,0,0,0,70,105,110,100,32,109,111,
+    10,0,100,9,0,83,41,12,218,21,87,105,110,100,111,119,
+    115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,122,
+    67,77,101,116,97,32,112,97,116,104,32,102,105,110,100,101,
+    114,32,102,111,114,32,109,111,100,117,108,101,115,32,100,101,
+    99,108,97,114,101,100,32,105,110,32,116,104,101,32,87,105,
+    110,100,111,119,115,32,114,101,103,105,115,116,114,121,46,10,
+    32,32,32,32,122,59,83,111,102,116,119,97,114,101,92,80,
+    121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101,
+    92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77,
+    111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101,
+    125,122,65,83,111,102,116,119,97,114,101,92,80,121,116,104,
+    111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,
+    121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,
+    108,101,115,92,123,102,117,108,108,110,97,109,101,125,92,68,
+    101,98,117,103,70,99,2,0,0,0,0,0,0,0,2,0,
+    0,0,11,0,0,0,67,0,0,0,115,67,0,0,0,121,
+    23,0,116,0,0,106,1,0,116,0,0,106,2,0,124,1,
+    0,131,2,0,83,87,110,37,0,4,116,3,0,107,10,0,
+    114,62,0,1,1,1,116,0,0,106,1,0,116,0,0,106,
+    4,0,124,1,0,131,2,0,83,89,110,1,0,88,100,0,
+    0,83,41,1,78,41,5,218,7,95,119,105,110,114,101,103,
+    90,7,79,112,101,110,75,101,121,90,17,72,75,69,89,95,
+    67,85,82,82,69,78,84,95,85,83,69,82,114,40,0,0,
+    0,90,18,72,75,69,89,95,76,79,67,65,76,95,77,65,
+    67,72,73,78,69,41,2,114,216,0,0,0,218,3,107,101,
+    121,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
+    218,14,95,111,112,101,110,95,114,101,103,105,115,116,114,121,
+    96,3,0,0,115,8,0,0,0,0,2,3,1,23,1,13,
+    1,122,36,87,105,110,100,111,119,115,82,101,103,105,115,116,
+    114,121,70,105,110,100,101,114,46,95,111,112,101,110,95,114,
+    101,103,105,115,116,114,121,99,2,0,0,0,0,0,0,0,
+    6,0,0,0,16,0,0,0,67,0,0,0,115,142,0,0,
+    0,124,0,0,106,0,0,114,21,0,124,0,0,106,1,0,
+    125,2,0,110,9,0,124,0,0,106,2,0,125,2,0,124,
+    2,0,106,3,0,100,1,0,124,1,0,100,2,0,116,4,
+    0,106,5,0,100,0,0,100,3,0,133,2,0,25,131,0,
+    2,125,3,0,121,46,0,124,0,0,106,6,0,124,3,0,
+    131,1,0,143,25,0,125,4,0,116,7,0,106,8,0,124,
+    4,0,100,4,0,131,2,0,125,5,0,87,100,0,0,81,
+    88,87,110,22,0,4,116,9,0,107,10,0,114,137,0,1,
+    1,1,100,0,0,83,89,110,1,0,88,124,5,0,83,41,
+    5,78,114,179,0,0,0,90,11,115,121,115,95,118,101,114,
+    115,105,111,110,114,122,0,0,0,114,30,0,0,0,41,10,
+    218,11,68,69,66,85,71,95,66,85,73,76,68,218,18,82,
+    69,71,73,83,84,82,89,95,75,69,89,95,68,69,66,85,
+    71,218,12,82,69,71,73,83,84,82,89,95,75,69,89,114,
+    47,0,0,0,114,7,0,0,0,218,7,118,101,114,115,105,
+    111,110,114,228,0,0,0,114,226,0,0,0,90,10,81,117,
+    101,114,121,86,97,108,117,101,114,40,0,0,0,41,6,114,
+    216,0,0,0,114,179,0,0,0,90,12,114,101,103,105,115,
+    116,114,121,95,107,101,121,114,227,0,0,0,90,4,104,107,
+    101,121,218,8,102,105,108,101,112,97,116,104,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,218,16,95,115,101,
+    97,114,99,104,95,114,101,103,105,115,116,114,121,103,3,0,
+    0,115,22,0,0,0,0,2,9,1,12,2,9,1,15,1,
+    22,1,3,1,18,1,28,1,13,1,9,1,122,38,87,105,
+    110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,
+    100,101,114,46,95,115,101,97,114,99,104,95,114,101,103,105,
+    115,116,114,121,78,99,3,0,0,0,0,0,0,0,6,0,
+    0,0,12,0,0,0,67,0,0,0,115,134,0,0,0,124,
+    0,0,106,0,0,124,1,0,131,1,0,125,3,0,124,3,
+    0,100,1,0,107,8,0,114,31,0,100,1,0,83,121,14,
+    0,116,1,0,124,3,0,131,1,0,1,87,110,22,0,4,
+    116,2,0,107,10,0,114,69,0,1,1,1,100,1,0,83,
+    89,110,1,0,88,120,57,0,116,3,0,131,0,0,68,93,
+    46,0,92,2,0,125,4,0,125,5,0,124,3,0,106,4,
+    0,116,5,0,124,5,0,131,1,0,131,1,0,114,80,0,
+    124,4,0,124,1,0,124,3,0,131,2,0,83,113,80,0,
+    87,100,1,0,83,41,2,122,34,70,105,110,100,32,109,111,
     100,117,108,101,32,110,97,109,101,100,32,105,110,32,116,104,
-    101,32,114,101,103,105,115,116,114,121,46,78,40,7,0,0,
-    0,114,233,0,0,0,114,3,0,0,0,114,39,0,0,0,
-    114,40,0,0,0,244,27,0,0,0,95,103,101,116,95,115,
-    117,112,112,111,114,116,101,100,95,102,105,108,101,95,108,111,
-    97,100,101,114,115,244,8,0,0,0,101,110,100,115,119,105,
-    116,104,244,5,0,0,0,116,117,112,108,101,40,6,0,0,
-    0,114,215,0,0,0,114,178,0,0,0,114,35,0,0,0,
-    114,232,0,0,0,114,160,0,0,0,114,112,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,217,
-    0,0,0,106,3,0,0,115,20,0,0,0,0,3,15,1,
-    12,1,4,1,3,1,17,1,13,1,9,1,22,1,21,1,
-    117,33,0,0,0,87,105,110,100,111,119,115,82,101,103,105,
-    115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95,
-    109,111,100,117,108,101,40,11,0,0,0,114,56,0,0,0,
-    114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,114,
-    230,0,0,0,114,229,0,0,0,114,228,0,0,0,114,221,
-    0,0,0,114,227,0,0,0,114,233,0,0,0,114,217,0,
-    0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,224,0,0,0,71,3,0,0,115,
-    16,0,0,0,12,3,6,3,6,3,6,2,6,2,18,7,
-    18,15,3,1,114,224,0,0,0,99,0,0,0,0,0,0,
-    0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,58,
-    0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,
-    1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,
-    0,100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,
-    100,7,0,132,0,0,90,6,0,100,8,0,83,40,9,0,
-    0,0,244,13,0,0,0,95,76,111,97,100,101,114,66,97,
-    115,105,99,115,117,83,0,0,0,66,97,115,101,32,99,108,
-    97,115,115,32,111,102,32,99,111,109,109,111,110,32,99,111,
-    100,101,32,110,101,101,100,101,100,32,98,121,32,98,111,116,
-    104,32,83,111,117,114,99,101,76,111,97,100,101,114,32,97,
-    110,100,10,32,32,32,32,83,111,117,114,99,101,108,101,115,
-    115,70,105,108,101,76,111,97,100,101,114,46,99,2,0,0,
-    0,0,0,0,0,5,0,0,0,3,0,0,0,67,0,0,
-    0,115,88,0,0,0,116,0,0,124,0,0,106,1,0,124,
-    1,0,131,1,0,131,1,0,100,1,0,25,125,2,0,124,
-    2,0,106,2,0,100,2,0,100,1,0,131,2,0,100,3,
-    0,25,125,3,0,124,1,0,106,3,0,100,2,0,131,1,
-    0,100,4,0,25,125,4,0,124,3,0,100,5,0,107,2,
-    0,111,87,0,124,4,0,100,5,0,107,3,0,83,40,6,
-    0,0,0,117,141,0,0,0,67,111,110,99,114,101,116,101,
-    32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,
-    111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,
-    46,105,115,95,112,97,99,107,97,103,101,32,98,121,32,99,
-    104,101,99,107,105,110,103,32,105,102,10,32,32,32,32,32,
-    32,32,32,116,104,101,32,112,97,116,104,32,114,101,116,117,
-    114,110,101,100,32,98,121,32,103,101,116,95,102,105,108,101,
-    110,97,109,101,32,104,97,115,32,97,32,102,105,108,101,110,
-    97,109,101,32,111,102,32,39,95,95,105,110,105,116,95,95,
-    46,112,121,39,46,114,29,0,0,0,114,101,0,0,0,114,
-    67,0,0,0,114,100,0,0,0,114,76,0,0,0,40,4,
-    0,0,0,114,38,0,0,0,114,163,0,0,0,114,34,0,
-    0,0,114,32,0,0,0,40,5,0,0,0,114,75,0,0,
-    0,114,178,0,0,0,114,116,0,0,0,116,13,0,0,0,
-    102,105,108,101,110,97,109,101,95,98,97,115,101,116,9,0,
-    0,0,116,97,105,108,95,110,97,109,101,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,156,0,0,0,126,
-    3,0,0,115,8,0,0,0,0,3,25,1,22,1,19,1,
-    117,24,0,0,0,95,76,111,97,100,101,114,66,97,115,105,
-    99,115,46,105,115,95,112,97,99,107,97,103,101,99,2,0,
-    0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,
-    0,0,115,100,0,0,0,124,0,0,124,1,0,95,0,0,
-    116,1,0,124,0,0,124,1,0,131,2,0,1,116,2,0,
-    124,0,0,124,1,0,131,2,0,1,116,3,0,124,1,0,
-    100,1,0,131,2,0,114,96,0,121,22,0,116,4,0,124,
-    1,0,106,5,0,131,1,0,124,1,0,95,6,0,87,113,
-    96,0,4,116,7,0,107,10,0,114,92,0,1,1,1,89,
-    113,96,0,88,110,0,0,100,2,0,83,40,3,0,0,0,
-    117,2,1,0,0,83,101,116,32,118,97,114,105,111,117,115,
-    32,97,116,116,114,105,98,117,116,101,115,32,111,110,32,116,
-    104,101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,
-    32,32,32,32,69,120,101,99,117,116,105,111,110,76,111,97,
-    100,101,114,46,105,110,105,116,95,109,111,100,117,108,101,95,
-    97,116,116,114,115,40,41,32,105,115,32,117,115,101,100,32,
-    116,111,32,115,101,116,32,95,95,108,111,97,100,101,114,95,
-    95,44,10,32,32,32,32,32,32,32,32,95,95,112,97,99,
-    107,97,103,101,95,95,44,32,95,95,102,105,108,101,95,95,
-    44,32,97,110,100,32,111,112,116,105,111,110,97,108,108,121,
-    32,95,95,112,97,116,104,95,95,46,32,84,104,101,32,95,
-    95,99,97,99,104,101,100,95,95,32,97,116,116,114,105,98,
-    117,116,101,10,32,32,32,32,32,32,32,32,105,115,32,115,
-    101,116,32,117,115,105,110,103,32,105,109,112,46,99,97,99,
-    104,101,95,102,114,111,109,95,115,111,117,114,99,101,40,41,
-    32,97,110,100,32,95,95,102,105,108,101,95,95,46,10,32,
-    32,32,32,32,32,32,32,114,164,0,0,0,78,40,8,0,
-    0,0,114,171,0,0,0,114,162,0,0,0,114,166,0,0,
-    0,114,59,0,0,0,114,117,0,0,0,114,164,0,0,0,
-    244,10,0,0,0,95,95,99,97,99,104,101,100,95,95,114,
-    109,0,0,0,40,2,0,0,0,114,75,0,0,0,114,161,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,244,17,0,0,0,105,110,105,116,95,109,111,100,117,
-    108,101,95,97,116,116,114,115,134,3,0,0,115,16,0,0,
-    0,0,7,9,1,13,1,13,1,15,1,3,1,22,1,13,
-    1,117,31,0,0,0,95,76,111,97,100,101,114,66,97,115,
-    105,99,115,46,105,110,105,116,95,109,111,100,117,108,101,95,
-    97,116,116,114,115,99,2,0,0,0,0,0,0,0,4,0,
-    0,0,11,0,0,0,67,0,0,0,115,112,0,0,0,116,
-    0,0,124,1,0,131,1,0,143,94,0,125,2,0,124,0,
-    0,106,1,0,124,2,0,131,1,0,1,124,0,0,106,2,
-    0,124,1,0,131,1,0,125,3,0,124,3,0,100,1,0,
-    107,8,0,114,79,0,116,3,0,100,2,0,106,4,0,124,
-    1,0,131,1,0,131,1,0,130,1,0,110,0,0,116,5,
-    0,116,6,0,124,3,0,124,2,0,106,7,0,131,3,0,
-    1,124,2,0,83,87,100,1,0,81,88,100,1,0,83,40,
-    3,0,0,0,117,57,0,0,0,76,111,97,100,32,116,104,
+    101,32,114,101,103,105,115,116,114,121,46,78,41,6,114,234,
+    0,0,0,114,39,0,0,0,114,40,0,0,0,218,27,95,
+    103,101,116,95,115,117,112,112,111,114,116,101,100,95,102,105,
+    108,101,95,108,111,97,100,101,114,115,218,8,101,110,100,115,
+    119,105,116,104,218,5,116,117,112,108,101,41,6,114,216,0,
+    0,0,114,179,0,0,0,114,35,0,0,0,114,233,0,0,
+    0,114,161,0,0,0,114,113,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,218,0,0,0,118,
+    3,0,0,115,20,0,0,0,0,3,15,1,12,1,4,1,
+    3,1,14,1,13,1,9,1,22,1,21,1,122,33,87,105,
+    110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,
+    100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,
+    11,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,
+    114,59,0,0,0,114,231,0,0,0,114,230,0,0,0,114,
+    229,0,0,0,114,222,0,0,0,114,228,0,0,0,114,234,
+    0,0,0,114,218,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,114,225,0,0,
+    0,83,3,0,0,115,16,0,0,0,12,3,6,3,6,3,
+    6,2,6,2,18,7,18,15,3,1,114,225,0,0,0,99,
+    0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
+    64,0,0,0,115,58,0,0,0,101,0,0,90,1,0,100,
+    0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,
+    0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,
+    90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,
+    8,0,83,41,9,218,13,95,76,111,97,100,101,114,66,97,
+    115,105,99,115,122,83,66,97,115,101,32,99,108,97,115,115,
+    32,111,102,32,99,111,109,109,111,110,32,99,111,100,101,32,
+    110,101,101,100,101,100,32,98,121,32,98,111,116,104,32,83,
+    111,117,114,99,101,76,111,97,100,101,114,32,97,110,100,10,
+    32,32,32,32,83,111,117,114,99,101,108,101,115,115,70,105,
+    108,101,76,111,97,100,101,114,46,99,2,0,0,0,0,0,
+    0,0,5,0,0,0,3,0,0,0,67,0,0,0,115,88,
+    0,0,0,116,0,0,124,0,0,106,1,0,124,1,0,131,
+    1,0,131,1,0,100,1,0,25,125,2,0,124,2,0,106,
+    2,0,100,2,0,100,1,0,131,2,0,100,3,0,25,125,
+    3,0,124,1,0,106,3,0,100,2,0,131,1,0,100,4,
+    0,25,125,4,0,124,3,0,100,5,0,107,2,0,111,87,
+    0,124,4,0,100,5,0,107,3,0,83,41,6,122,141,67,
+    111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110,
+    116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99,
+    116,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97,
+    103,101,32,98,121,32,99,104,101,99,107,105,110,103,32,105,
+    102,10,32,32,32,32,32,32,32,32,116,104,101,32,112,97,
+    116,104,32,114,101,116,117,114,110,101,100,32,98,121,32,103,
+    101,116,95,102,105,108,101,110,97,109,101,32,104,97,115,32,
+    97,32,102,105,108,101,110,97,109,101,32,111,102,32,39,95,
+    95,105,110,105,116,95,95,46,112,121,39,46,114,29,0,0,
+    0,114,102,0,0,0,114,68,0,0,0,114,101,0,0,0,
+    114,77,0,0,0,41,4,114,38,0,0,0,114,164,0,0,
+    0,114,34,0,0,0,114,32,0,0,0,41,5,114,76,0,
+    0,0,114,179,0,0,0,114,117,0,0,0,90,13,102,105,
+    108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,105,
+    108,95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,157,0,0,0,138,3,0,0,115,8,
+    0,0,0,0,3,25,1,22,1,19,1,122,24,95,76,111,
+    97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97,
+    99,107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,
+    0,0,11,0,0,0,67,0,0,0,115,100,0,0,0,124,
+    0,0,124,1,0,95,0,0,116,1,0,124,0,0,124,1,
+    0,131,2,0,1,116,2,0,124,0,0,124,1,0,131,2,
+    0,1,116,3,0,124,1,0,100,1,0,131,2,0,114,96,
+    0,121,22,0,116,4,0,124,1,0,106,5,0,131,1,0,
+    124,1,0,95,6,0,87,113,96,0,4,116,7,0,107,10,
+    0,114,92,0,1,1,1,89,113,96,0,88,110,0,0,100,
+    2,0,83,41,3,97,2,1,0,0,83,101,116,32,118,97,
+    114,105,111,117,115,32,97,116,116,114,105,98,117,116,101,115,
+    32,111,110,32,116,104,101,32,109,111,100,117,108,101,46,10,
+    10,32,32,32,32,32,32,32,32,69,120,101,99,117,116,105,
+    111,110,76,111,97,100,101,114,46,105,110,105,116,95,109,111,
+    100,117,108,101,95,97,116,116,114,115,40,41,32,105,115,32,
+    117,115,101,100,32,116,111,32,115,101,116,32,95,95,108,111,
+    97,100,101,114,95,95,44,10,32,32,32,32,32,32,32,32,
+    95,95,112,97,99,107,97,103,101,95,95,44,32,95,95,102,
+    105,108,101,95,95,44,32,97,110,100,32,111,112,116,105,111,
+    110,97,108,108,121,32,95,95,112,97,116,104,95,95,46,32,
+    84,104,101,32,95,95,99,97,99,104,101,100,95,95,32,97,
+    116,116,114,105,98,117,116,101,10,32,32,32,32,32,32,32,
+    32,105,115,32,115,101,116,32,117,115,105,110,103,32,105,109,
+    112,46,99,97,99,104,101,95,102,114,111,109,95,115,111,117,
+    114,99,101,40,41,32,97,110,100,32,95,95,102,105,108,101,
+    95,95,46,10,32,32,32,32,32,32,32,32,114,165,0,0,
+    0,78,41,8,114,172,0,0,0,114,163,0,0,0,114,167,
+    0,0,0,114,60,0,0,0,114,118,0,0,0,114,165,0,
+    0,0,218,10,95,95,99,97,99,104,101,100,95,95,114,110,
+    0,0,0,41,2,114,76,0,0,0,114,162,0,0,0,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,
+    105,110,105,116,95,109,111,100,117,108,101,95,97,116,116,114,
+    115,146,3,0,0,115,16,0,0,0,0,7,9,1,13,1,
+    13,1,15,1,3,1,22,1,13,1,122,31,95,76,111,97,
+    100,101,114,66,97,115,105,99,115,46,105,110,105,116,95,109,
+    111,100,117,108,101,95,97,116,116,114,115,99,2,0,0,0,
+    0,0,0,0,4,0,0,0,11,0,0,0,67,0,0,0,
+    115,112,0,0,0,116,0,0,124,1,0,131,1,0,143,94,
+    0,125,2,0,124,0,0,106,1,0,124,2,0,131,1,0,
+    1,124,0,0,106,2,0,124,1,0,131,1,0,125,3,0,
+    124,3,0,100,1,0,107,8,0,114,79,0,116,3,0,100,
+    2,0,106,4,0,124,1,0,131,1,0,131,1,0,130,1,
+    0,110,0,0,116,5,0,116,6,0,124,3,0,124,2,0,
+    106,7,0,131,3,0,1,124,2,0,83,87,100,1,0,81,
+    88,100,1,0,83,41,3,122,57,76,111,97,100,32,116,104,
     101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,
     108,101,32,105,110,116,111,32,115,121,115,46,109,111,100,117,
     108,101,115,32,97,110,100,32,114,101,116,117,114,110,32,105,
-    116,46,78,117,52,0,0,0,99,97,110,110,111,116,32,108,
-    111,97,100,32,109,111,100,117,108,101,32,123,33,114,125,32,
-    119,104,101,110,32,103,101,116,95,99,111,100,101,40,41,32,
-    114,101,116,117,114,110,115,32,78,111,110,101,40,8,0,0,
-    0,114,155,0,0,0,114,239,0,0,0,114,219,0,0,0,
-    114,157,0,0,0,114,46,0,0,0,114,99,0,0,0,244,
-    4,0,0,0,101,120,101,99,114,62,0,0,0,40,4,0,
-    0,0,114,75,0,0,0,114,178,0,0,0,114,161,0,0,
-    0,114,204,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,218,0,0,0,150,3,0,0,115,16,
-    0,0,0,0,2,15,1,13,1,15,1,12,1,3,1,21,
-    1,19,1,117,25,0,0,0,95,76,111,97,100,101,114,66,
-    97,115,105,99,115,46,108,111,97,100,95,109,111,100,117,108,
-    101,78,40,7,0,0,0,114,56,0,0,0,114,55,0,0,
-    0,114,57,0,0,0,114,58,0,0,0,114,156,0,0,0,
-    114,239,0,0,0,114,218,0,0,0,114,4,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,237,
-    0,0,0,121,3,0,0,115,8,0,0,0,12,3,6,2,
-    12,8,12,16,114,237,0,0,0,99,0,0,0,0,0,0,
-    0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,106,
-    0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,
-    1,0,100,2,0,132,0,0,90,3,0,100,3,0,100,4,
-    0,132,0,0,90,4,0,100,5,0,100,6,0,132,0,0,
-    90,5,0,100,7,0,100,8,0,132,0,0,90,6,0,100,
-    9,0,100,10,0,132,0,0,90,7,0,100,11,0,100,18,
-    0,100,13,0,100,14,0,132,0,1,90,8,0,100,15,0,
-    100,16,0,132,0,0,90,9,0,100,17,0,83,40,19,0,
-    0,0,244,12,0,0,0,83,111,117,114,99,101,76,111,97,
-    100,101,114,99,2,0,0,0,0,0,0,0,2,0,0,0,
-    1,0,0,0,67,0,0,0,115,10,0,0,0,116,0,0,
-    130,1,0,100,1,0,83,40,2,0,0,0,117,178,0,0,
-    0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,
-    32,116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,
-    101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,
-    105,109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,
-    32,116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,
-    99,105,102,105,101,100,32,112,97,116,104,44,32,119,104,101,
-    114,101,32,112,97,116,104,32,105,115,32,97,32,115,116,114,
-    46,10,10,32,32,32,32,32,32,32,32,82,97,105,115,101,
-    115,32,73,79,69,114,114,111,114,32,119,104,101,110,32,116,
-    104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98,
-    101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32,
-    32,32,32,78,40,1,0,0,0,244,7,0,0,0,73,79,
-    69,114,114,111,114,40,2,0,0,0,114,75,0,0,0,114,
-    35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,244,10,0,0,0,112,97,116,104,95,109,116,105,
-    109,101,164,3,0,0,115,2,0,0,0,0,6,117,23,0,
-    0,0,83,111,117,114,99,101,76,111,97,100,101,114,46,112,
-    97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0,
-    0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,20,
-    0,0,0,105,1,0,124,0,0,106,0,0,124,1,0,131,
-    1,0,100,1,0,54,83,40,2,0,0,0,117,170,1,0,
+    116,46,78,122,52,99,97,110,110,111,116,32,108,111,97,100,
+    32,109,111,100,117,108,101,32,123,33,114,125,32,119,104,101,
+    110,32,103,101,116,95,99,111,100,101,40,41,32,114,101,116,
+    117,114,110,115,32,78,111,110,101,41,8,114,156,0,0,0,
+    114,240,0,0,0,114,220,0,0,0,114,158,0,0,0,114,
+    47,0,0,0,114,100,0,0,0,218,4,101,120,101,99,114,
+    63,0,0,0,41,4,114,76,0,0,0,114,179,0,0,0,
+    114,162,0,0,0,114,205,0,0,0,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,114,219,0,0,0,162,3,
+    0,0,115,16,0,0,0,0,2,15,1,13,1,15,1,12,
+    1,3,1,21,1,19,1,122,25,95,76,111,97,100,101,114,
+    66,97,115,105,99,115,46,108,111,97,100,95,109,111,100,117,
+    108,101,78,41,7,114,57,0,0,0,114,56,0,0,0,114,
+    58,0,0,0,114,59,0,0,0,114,157,0,0,0,114,240,
+    0,0,0,114,219,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,114,238,0,0,
+    0,133,3,0,0,115,8,0,0,0,12,3,6,2,12,8,
+    12,16,114,238,0,0,0,99,0,0,0,0,0,0,0,0,
+    0,0,0,0,4,0,0,0,64,0,0,0,115,106,0,0,
+    0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,
+    100,2,0,132,0,0,90,3,0,100,3,0,100,4,0,132,
+    0,0,90,4,0,100,5,0,100,6,0,132,0,0,90,5,
+    0,100,7,0,100,8,0,132,0,0,90,6,0,100,9,0,
+    100,10,0,132,0,0,90,7,0,100,11,0,100,18,0,100,
+    13,0,100,14,0,132,0,1,90,8,0,100,15,0,100,16,
+    0,132,0,0,90,9,0,100,17,0,83,41,19,218,12,83,
+    111,117,114,99,101,76,111,97,100,101,114,99,2,0,0,0,
+    0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,
+    115,10,0,0,0,116,0,0,130,1,0,100,1,0,83,41,
+    2,122,178,79,112,116,105,111,110,97,108,32,109,101,116,104,
+    111,100,32,116,104,97,116,32,114,101,116,117,114,110,115,32,
+    116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,
+    32,116,105,109,101,32,40,97,110,32,105,110,116,41,32,102,
+    111,114,32,116,104,101,10,32,32,32,32,32,32,32,32,115,
+    112,101,99,105,102,105,101,100,32,112,97,116,104,44,32,119,
+    104,101,114,101,32,112,97,116,104,32,105,115,32,97,32,115,
+    116,114,46,10,10,32,32,32,32,32,32,32,32,82,97,105,
+    115,101,115,32,73,79,69,114,114,111,114,32,119,104,101,110,
+    32,116,104,101,32,112,97,116,104,32,99,97,110,110,111,116,
+    32,98,101,32,104,97,110,100,108,101,100,46,10,32,32,32,
+    32,32,32,32,32,78,41,1,218,7,73,79,69,114,114,111,
+    114,41,2,114,76,0,0,0,114,35,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,10,112,97,
+    116,104,95,109,116,105,109,101,176,3,0,0,115,2,0,0,
+    0,0,6,122,23,83,111,117,114,99,101,76,111,97,100,101,
+    114,46,112,97,116,104,95,109,116,105,109,101,99,2,0,0,
+    0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,
+    0,115,20,0,0,0,105,1,0,124,0,0,106,0,0,124,
+    1,0,131,1,0,100,1,0,54,83,41,2,97,170,1,0,
     0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,
     32,114,101,116,117,114,110,105,110,103,32,97,32,109,101,116,
     97,100,97,116,97,32,100,105,99,116,32,102,111,114,32,116,
@@ -1894,55 +1783,52 @@
     32,32,32,82,97,105,115,101,115,32,73,79,69,114,114,111,
     114,32,119,104,101,110,32,116,104,101,32,112,97,116,104,32,
     99,97,110,110,111,116,32,98,101,32,104,97,110,100,108,101,
-    100,46,10,32,32,32,32,32,32,32,32,114,193,0,0,0,
-    40,1,0,0,0,114,243,0,0,0,40,2,0,0,0,114,
-    75,0,0,0,114,35,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,244,10,0,0,0,112,97,116,
-    104,95,115,116,97,116,115,172,3,0,0,115,2,0,0,0,
-    0,11,117,23,0,0,0,83,111,117,114,99,101,76,111,97,
-    100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4,
-    0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,
-    0,0,0,115,16,0,0,0,124,0,0,106,0,0,124,2,
-    0,124,3,0,131,2,0,83,40,1,0,0,0,117,228,0,
-    0,0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,
-    100,32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,
-    97,116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,
-    32,102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,
-    114,41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,
-    108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,
-    101,116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,
-    32,116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,
-    98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,
-    10,32,32,32,32,32,32,32,32,84,104,101,32,115,111,117,
-    114,99,101,32,112,97,116,104,32,105,115,32,110,101,101,100,
-    101,100,32,105,110,32,111,114,100,101,114,32,116,111,32,99,
-    111,114,114,101,99,116,108,121,32,116,114,97,110,115,102,101,
-    114,32,112,101,114,109,105,115,115,105,111,110,115,10,32,32,
-    32,32,32,32,32,32,40,1,0,0,0,244,8,0,0,0,
-    115,101,116,95,100,97,116,97,40,4,0,0,0,114,75,0,
-    0,0,114,126,0,0,0,116,10,0,0,0,99,97,99,104,
-    101,95,112,97,116,104,114,52,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,244,15,0,0,0,95,
-    99,97,99,104,101,95,98,121,116,101,99,111,100,101,185,3,
-    0,0,115,2,0,0,0,0,8,117,28,0,0,0,83,111,
-    117,114,99,101,76,111,97,100,101,114,46,95,99,97,99,104,
-    101,95,98,121,116,101,99,111,100,101,99,3,0,0,0,0,
-    0,0,0,3,0,0,0,1,0,0,0,67,0,0,0,115,
-    4,0,0,0,100,1,0,83,40,2,0,0,0,117,150,0,
-    0,0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,
-    100,32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,
-    97,116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,
-    32,102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,
-    114,41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,
-    108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,
-    101,116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,
-    32,116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,
-    98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,
-    32,32,32,32,32,32,32,32,78,114,4,0,0,0,40,3,
-    0,0,0,114,75,0,0,0,114,35,0,0,0,114,52,0,
-    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,114,245,0,0,0,195,3,0,0,115,0,0,0,0,117,
-    21,0,0,0,83,111,117,114,99,101,76,111,97,100,101,114,
+    100,46,10,32,32,32,32,32,32,32,32,114,194,0,0,0,
+    41,1,114,244,0,0,0,41,2,114,76,0,0,0,114,35,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,218,10,112,97,116,104,95,115,116,97,116,115,184,3,
+    0,0,115,2,0,0,0,0,11,122,23,83,111,117,114,99,
+    101,76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,
+    116,115,99,4,0,0,0,0,0,0,0,4,0,0,0,3,
+    0,0,0,67,0,0,0,115,16,0,0,0,124,0,0,106,
+    0,0,124,2,0,124,3,0,131,2,0,83,41,1,122,228,
+    79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,
+    119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,116,
+    97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,102,
+    105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,41,
+    46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,
+    109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,
+    104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,116,
+    104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,121,
+    116,101,99,111,100,101,32,102,105,108,101,115,46,10,10,32,
+    32,32,32,32,32,32,32,84,104,101,32,115,111,117,114,99,
+    101,32,112,97,116,104,32,105,115,32,110,101,101,100,101,100,
+    32,105,110,32,111,114,100,101,114,32,116,111,32,99,111,114,
+    114,101,99,116,108,121,32,116,114,97,110,115,102,101,114,32,
+    112,101,114,109,105,115,115,105,111,110,115,10,32,32,32,32,
+    32,32,32,32,41,1,218,8,115,101,116,95,100,97,116,97,
+    41,4,114,76,0,0,0,114,127,0,0,0,90,10,99,97,
+    99,104,101,95,112,97,116,104,114,53,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,15,95,99,
+    97,99,104,101,95,98,121,116,101,99,111,100,101,197,3,0,
+    0,115,2,0,0,0,0,8,122,28,83,111,117,114,99,101,
+    76,111,97,100,101,114,46,95,99,97,99,104,101,95,98,121,
+    116,101,99,111,100,101,99,3,0,0,0,0,0,0,0,3,
+    0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,
+    100,1,0,83,41,2,122,150,79,112,116,105,111,110,97,108,
+    32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,
+    105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,
+    41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,
+    32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,
+    32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,
+    116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,
+    119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,
+    110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,
+    105,108,101,115,46,10,32,32,32,32,32,32,32,32,78,114,
+    4,0,0,0,41,3,114,76,0,0,0,114,35,0,0,0,
+    114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
+    5,0,0,0,114,246,0,0,0,207,3,0,0,115,0,0,
+    0,0,122,21,83,111,117,114,99,101,76,111,97,100,101,114,
     46,115,101,116,95,100,97,116,97,99,2,0,0,0,0,0,
     0,0,5,0,0,0,16,0,0,0,67,0,0,0,115,105,
     0,0,0,124,0,0,106,0,0,124,1,0,131,1,0,125,
@@ -1951,1576 +1837,1495 @@
     94,0,1,125,4,0,1,122,26,0,116,3,0,100,1,0,
     100,2,0,124,1,0,131,1,1,124,4,0,130,2,0,87,
     89,100,3,0,100,3,0,125,4,0,126,4,0,88,110,1,
-    0,88,116,4,0,124,3,0,131,1,0,83,40,4,0,0,
-    0,117,52,0,0,0,67,111,110,99,114,101,116,101,32,105,
-    109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,
-    32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,
-    101,116,95,115,111,117,114,99,101,46,117,39,0,0,0,115,
-    111,117,114,99,101,32,110,111,116,32,97,118,97,105,108,97,
-    98,108,101,32,116,104,114,111,117,103,104,32,103,101,116,95,
-    100,97,116,97,40,41,114,71,0,0,0,78,40,5,0,0,
-    0,114,163,0,0,0,244,8,0,0,0,103,101,116,95,100,
-    97,116,97,114,40,0,0,0,114,157,0,0,0,114,213,0,
-    0,0,40,5,0,0,0,114,75,0,0,0,114,178,0,0,
-    0,114,35,0,0,0,114,211,0,0,0,244,3,0,0,0,
-    101,120,99,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,114,220,0,0,0,202,3,0,0,115,14,0,0,0,
-    0,2,15,1,3,1,19,1,18,1,9,1,31,1,117,23,
-    0,0,0,83,111,117,114,99,101,76,111,97,100,101,114,46,
-    103,101,116,95,115,111,117,114,99,101,244,9,0,0,0,95,
-    111,112,116,105,109,105,122,101,114,29,0,0,0,99,3,0,
-    0,0,1,0,0,0,4,0,0,0,9,0,0,0,67,0,
-    0,0,115,31,0,0,0,116,0,0,116,1,0,124,1,0,
-    124,2,0,100,1,0,100,2,0,100,3,0,100,4,0,124,
-    3,0,131,4,2,83,40,5,0,0,0,117,130,0,0,0,
-    82,101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,
-    111,98,106,101,99,116,32,99,111,109,112,105,108,101,100,32,
-    102,114,111,109,32,115,111,117,114,99,101,46,10,10,32,32,
-    32,32,32,32,32,32,84,104,101,32,39,100,97,116,97,39,
-    32,97,114,103,117,109,101,110,116,32,99,97,110,32,98,101,
-    32,97,110,121,32,111,98,106,101,99,116,32,116,121,112,101,
-    32,116,104,97,116,32,99,111,109,112,105,108,101,40,41,32,
-    115,117,112,112,111,114,116,115,46,10,32,32,32,32,32,32,
-    32,32,114,240,0,0,0,244,12,0,0,0,100,111,110,116,
-    95,105,110,104,101,114,105,116,84,114,103,0,0,0,40,2,
-    0,0,0,114,99,0,0,0,244,7,0,0,0,99,111,109,
-    112,105,108,101,40,4,0,0,0,114,75,0,0,0,114,52,
-    0,0,0,114,35,0,0,0,114,249,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,244,14,0,0,
-    0,115,111,117,114,99,101,95,116,111,95,99,111,100,101,212,
-    3,0,0,115,4,0,0,0,0,5,18,1,117,27,0,0,
-    0,83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,
-    117,114,99,101,95,116,111,95,99,111,100,101,99,2,0,0,
-    0,0,0,0,0,10,0,0,0,45,0,0,0,67,0,0,
-    0,115,177,1,0,0,124,0,0,106,0,0,124,1,0,131,
-    1,0,125,2,0,100,1,0,125,3,0,121,16,0,116,1,
-    0,124,2,0,131,1,0,125,4,0,87,110,24,0,4,116,
-    2,0,107,10,0,114,63,0,1,1,1,100,1,0,125,4,
-    0,89,110,202,0,88,121,19,0,124,0,0,106,3,0,124,
-    2,0,131,1,0,125,5,0,87,110,18,0,4,116,4,0,
-    107,10,0,114,103,0,1,1,1,89,110,162,0,88,116,5,
-    0,124,5,0,100,2,0,25,131,1,0,125,3,0,121,19,
-    0,124,0,0,106,6,0,124,4,0,131,1,0,125,6,0,
-    87,110,18,0,4,116,7,0,107,10,0,114,159,0,1,1,
-    1,89,110,106,0,88,121,34,0,116,8,0,124,6,0,100,
-    3,0,124,5,0,100,4,0,124,1,0,100,5,0,124,4,
-    0,131,1,3,125,7,0,87,110,24,0,4,116,9,0,116,
-    10,0,102,2,0,107,10,0,114,220,0,1,1,1,89,110,
-    45,0,88,116,11,0,100,6,0,124,4,0,124,2,0,131,
-    3,0,1,116,12,0,124,7,0,100,4,0,124,1,0,100,
-    7,0,124,4,0,100,8,0,124,2,0,131,1,3,83,124,
-    0,0,106,6,0,124,2,0,131,1,0,125,8,0,124,0,
-    0,106,13,0,124,8,0,124,2,0,131,2,0,125,9,0,
-    116,11,0,100,9,0,124,2,0,131,2,0,1,116,14,0,
-    106,15,0,12,114,173,1,124,4,0,100,1,0,107,9,0,
-    114,173,1,124,3,0,100,1,0,107,9,0,114,173,1,116,
-    16,0,124,9,0,124,3,0,116,17,0,124,8,0,131,1,
-    0,131,3,0,125,6,0,121,36,0,124,0,0,106,18,0,
-    124,2,0,124,4,0,124,6,0,131,3,0,1,116,11,0,
-    100,10,0,124,4,0,131,2,0,1,87,113,173,1,4,116,
-    2,0,107,10,0,114,169,1,1,1,1,89,113,173,1,88,
-    110,0,0,124,9,0,83,40,11,0,0,0,117,190,0,0,
-    0,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,
-    101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112,
-    101,99,116,76,111,97,100,101,114,46,103,101,116,95,99,111,
-    100,101,46,10,10,32,32,32,32,32,32,32,32,82,101,97,
-    100,105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,
-    32,114,101,113,117,105,114,101,115,32,112,97,116,104,95,115,
-    116,97,116,115,32,116,111,32,98,101,32,105,109,112,108,101,
-    109,101,110,116,101,100,46,32,84,111,32,119,114,105,116,101,
-    10,32,32,32,32,32,32,32,32,98,121,116,101,99,111,100,
-    101,44,32,115,101,116,95,100,97,116,97,32,109,117,115,116,
-    32,97,108,115,111,32,98,101,32,105,109,112,108,101,109,101,
-    110,116,101,100,46,10,10,32,32,32,32,32,32,32,32,78,
-    114,193,0,0,0,114,197,0,0,0,114,71,0,0,0,114,
-    35,0,0,0,117,13,0,0,0,123,125,32,109,97,116,99,
-    104,101,115,32,123,125,114,125,0,0,0,114,126,0,0,0,
-    117,19,0,0,0,99,111,100,101,32,111,98,106,101,99,116,
-    32,102,114,111,109,32,123,125,117,10,0,0,0,119,114,111,
-    116,101,32,123,33,114,125,40,19,0,0,0,114,163,0,0,
-    0,114,117,0,0,0,114,109,0,0,0,114,244,0,0,0,
-    114,242,0,0,0,114,14,0,0,0,114,247,0,0,0,114,
-    40,0,0,0,114,200,0,0,0,114,157,0,0,0,114,196,
-    0,0,0,114,137,0,0,0,114,205,0,0,0,114,252,0,
-    0,0,114,7,0,0,0,244,19,0,0,0,100,111,110,116,
-    95,119,114,105,116,101,95,98,121,116,101,99,111,100,101,114,
-    208,0,0,0,114,31,0,0,0,114,246,0,0,0,40,10,
-    0,0,0,114,75,0,0,0,114,178,0,0,0,114,126,0,
-    0,0,114,198,0,0,0,114,125,0,0,0,244,2,0,0,
-    0,115,116,114,52,0,0,0,244,10,0,0,0,98,121,116,
-    101,115,95,100,97,116,97,114,211,0,0,0,116,11,0,0,
-    0,99,111,100,101,95,111,98,106,101,99,116,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,
-    220,3,0,0,115,78,0,0,0,0,7,15,1,6,1,3,
-    1,16,1,13,1,11,2,3,1,19,1,13,1,5,2,16,
-    1,3,1,19,1,13,1,5,2,3,1,9,1,12,1,13,
-    1,19,1,5,2,9,1,7,1,15,1,6,1,7,1,15,
-    1,18,1,13,1,22,1,12,1,9,1,15,1,3,1,19,
-    1,17,1,13,1,8,1,117,21,0,0,0,83,111,117,114,
-    99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,
-    101,78,114,123,0,0,0,40,10,0,0,0,114,56,0,0,
-    0,114,55,0,0,0,114,57,0,0,0,114,243,0,0,0,
-    114,244,0,0,0,114,246,0,0,0,114,245,0,0,0,114,
-    220,0,0,0,114,252,0,0,0,114,219,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,114,241,0,0,0,162,3,0,0,115,14,0,0,0,
-    12,2,12,8,12,13,12,10,12,7,12,10,18,8,114,241,
-    0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,
-    4,0,0,0,0,0,0,0,115,88,0,0,0,101,0,0,
-    90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,
-    2,0,100,3,0,132,0,0,90,4,0,101,5,0,135,0,
-    0,102,1,0,100,4,0,100,5,0,134,0,0,131,1,0,
-    90,6,0,101,5,0,100,6,0,100,7,0,132,0,0,131,
-    1,0,90,7,0,100,8,0,100,9,0,132,0,0,90,8,
-    0,135,0,0,83,40,10,0,0,0,244,10,0,0,0,70,
-    105,108,101,76,111,97,100,101,114,117,103,0,0,0,66,97,
-    115,101,32,102,105,108,101,32,108,111,97,100,101,114,32,99,
-    108,97,115,115,32,119,104,105,99,104,32,105,109,112,108,101,
-    109,101,110,116,115,32,116,104,101,32,108,111,97,100,101,114,
-    32,112,114,111,116,111,99,111,108,32,109,101,116,104,111,100,
-    115,32,116,104,97,116,10,32,32,32,32,114,101,113,117,105,
-    114,101,32,102,105,108,101,32,115,121,115,116,101,109,32,117,
-    115,97,103,101,46,99,3,0,0,0,0,0,0,0,3,0,
-    0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,124,
-    1,0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,
-    0,100,1,0,83,40,2,0,0,0,117,75,0,0,0,67,
-    97,99,104,101,32,116,104,101,32,109,111,100,117,108,101,32,
-    110,97,109,101,32,97,110,100,32,116,104,101,32,112,97,116,
-    104,32,116,111,32,116,104,101,32,102,105,108,101,32,102,111,
-    117,110,100,32,98,121,32,116,104,101,10,32,32,32,32,32,
-    32,32,32,102,105,110,100,101,114,46,78,40,2,0,0,0,
-    114,71,0,0,0,114,35,0,0,0,40,3,0,0,0,114,
-    75,0,0,0,114,178,0,0,0,114,35,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,76,0,
-    0,0,21,4,0,0,115,4,0,0,0,0,3,9,1,117,
-    19,0,0,0,70,105,108,101,76,111,97,100,101,114,46,95,
-    95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,
-    2,0,0,0,3,0,0,0,3,0,0,0,115,22,0,0,
-    0,116,0,0,116,1,0,124,0,0,131,2,0,106,2,0,
-    124,1,0,131,1,0,83,40,1,0,0,0,117,26,0,0,
-    0,76,111,97,100,32,97,32,109,111,100,117,108,101,32,102,
-    114,111,109,32,97,32,102,105,108,101,46,40,3,0,0,0,
-    114,148,0,0,0,114,0,1,0,0,114,218,0,0,0,40,
-    2,0,0,0,114,75,0,0,0,114,178,0,0,0,40,1,
-    0,0,0,114,150,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,114,218,0,0,0,27,4,0,0,115,2,0,0,0,
-    0,5,117,22,0,0,0,70,105,108,101,76,111,97,100,101,
-    114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,
-    0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,
-    0,0,115,7,0,0,0,124,0,0,106,0,0,83,40,1,
-    0,0,0,117,58,0,0,0,82,101,116,117,114,110,32,116,
-    104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115,
-    111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111,
-    117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101,
-    114,46,40,1,0,0,0,114,35,0,0,0,40,2,0,0,
-    0,114,75,0,0,0,114,178,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,163,0,0,0,34,
-    4,0,0,115,2,0,0,0,0,3,117,23,0,0,0,70,
-    105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105,
-    108,101,110,97,109,101,99,2,0,0,0,0,0,0,0,3,
-    0,0,0,8,0,0,0,67,0,0,0,115,41,0,0,0,
-    116,0,0,106,1,0,124,1,0,100,1,0,131,2,0,143,
-    17,0,125,2,0,124,2,0,106,2,0,131,0,0,83,87,
-    100,2,0,81,88,100,2,0,83,40,3,0,0,0,117,39,
-    0,0,0,82,101,116,117,114,110,32,116,104,101,32,100,97,
-    116,97,32,102,114,111,109,32,112,97,116,104,32,97,115,32,
-    114,97,119,32,98,121,116,101,115,46,244,1,0,0,0,114,
-    78,40,3,0,0,0,114,48,0,0,0,114,49,0,0,0,
-    116,4,0,0,0,114,101,97,100,40,3,0,0,0,114,75,
-    0,0,0,114,35,0,0,0,114,53,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,114,247,0,0,
-    0,39,4,0,0,115,4,0,0,0,0,2,21,1,117,19,
-    0,0,0,70,105,108,101,76,111,97,100,101,114,46,103,101,
-    116,95,100,97,116,97,40,9,0,0,0,114,56,0,0,0,
-    114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,114,
-    76,0,0,0,114,176,0,0,0,114,218,0,0,0,114,163,
-    0,0,0,114,247,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,40,1,0,0,0,114,150,0,0,0,114,5,0,0,
-    0,114,0,1,0,0,16,4,0,0,115,10,0,0,0,12,
-    3,6,2,12,6,24,7,18,5,114,0,1,0,0,99,0,
-    0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,
-    0,0,0,115,64,0,0,0,101,0,0,90,1,0,100,0,
-    0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,
-    132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,
-    5,0,100,6,0,100,7,0,100,8,0,100,9,0,132,0,
-    1,90,6,0,100,10,0,83,40,11,0,0,0,244,16,0,
-    0,0,83,111,117,114,99,101,70,105,108,101,76,111,97,100,
-    101,114,117,62,0,0,0,67,111,110,99,114,101,116,101,32,
-    105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,
-    102,32,83,111,117,114,99,101,76,111,97,100,101,114,32,117,
-    115,105,110,103,32,116,104,101,32,102,105,108,101,32,115,121,
-    115,116,101,109,46,99,2,0,0,0,0,0,0,0,3,0,
-    0,0,3,0,0,0,67,0,0,0,115,39,0,0,0,116,
-    0,0,106,1,0,124,1,0,131,1,0,125,2,0,105,2,
-    0,124,2,0,106,2,0,100,1,0,54,124,2,0,106,3,
-    0,100,2,0,54,83,40,3,0,0,0,117,33,0,0,0,
-    82,101,116,117,114,110,32,116,104,101,32,109,101,116,97,100,
-    97,116,97,32,102,111,114,32,116,104,101,32,112,97,116,104,
-    46,114,193,0,0,0,114,194,0,0,0,40,4,0,0,0,
-    114,3,0,0,0,114,39,0,0,0,244,8,0,0,0,115,
-    116,95,109,116,105,109,101,116,7,0,0,0,115,116,95,115,
-    105,122,101,40,3,0,0,0,114,75,0,0,0,114,35,0,
-    0,0,114,254,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,244,0,0,0,49,4,0,0,115,
-    4,0,0,0,0,2,15,1,117,27,0,0,0,83,111,117,
-    114,99,101,70,105,108,101,76,111,97,100,101,114,46,112,97,
-    116,104,95,115,116,97,116,115,99,4,0,0,0,0,0,0,
-    0,5,0,0,0,5,0,0,0,67,0,0,0,115,34,0,
-    0,0,116,0,0,124,1,0,131,1,0,125,4,0,124,0,
-    0,106,1,0,124,2,0,124,3,0,100,1,0,124,4,0,
-    131,2,1,83,40,2,0,0,0,78,244,5,0,0,0,95,
-    109,111,100,101,40,2,0,0,0,114,129,0,0,0,114,245,
-    0,0,0,40,5,0,0,0,114,75,0,0,0,114,126,0,
-    0,0,114,125,0,0,0,114,52,0,0,0,114,42,0,0,
-    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    114,246,0,0,0,54,4,0,0,115,4,0,0,0,0,2,
-    12,1,117,32,0,0,0,83,111,117,114,99,101,70,105,108,
-    101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,98,
-    121,116,101,99,111,100,101,114,4,1,0,0,105,182,1,0,
-    0,99,3,0,0,0,1,0,0,0,9,0,0,0,18,0,
-    0,0,67,0,0,0,115,53,1,0,0,116,0,0,124,1,
-    0,131,1,0,92,2,0,125,4,0,125,5,0,103,0,0,
-    125,6,0,120,54,0,124,4,0,114,80,0,116,1,0,124,
-    4,0,131,1,0,12,114,80,0,116,0,0,124,4,0,131,
-    1,0,92,2,0,125,4,0,125,7,0,124,6,0,106,2,
-    0,124,7,0,131,1,0,1,113,27,0,87,120,132,0,116,
-    3,0,124,6,0,131,1,0,68,93,118,0,125,7,0,116,
-    4,0,124,4,0,124,7,0,131,2,0,125,4,0,121,17,
-    0,116,5,0,106,6,0,124,4,0,131,1,0,1,87,113,
-    94,0,4,116,7,0,107,10,0,114,155,0,1,1,1,119,
-    94,0,89,113,94,0,4,116,8,0,107,10,0,114,211,0,
-    1,125,8,0,1,122,25,0,116,9,0,100,1,0,124,4,
-    0,124,8,0,131,3,0,1,100,2,0,83,87,89,100,2,
-    0,100,2,0,125,8,0,126,8,0,88,113,94,0,88,113,
-    94,0,87,121,33,0,116,10,0,124,1,0,124,2,0,124,
-    3,0,131,3,0,1,116,9,0,100,3,0,124,1,0,131,
-    2,0,1,87,110,53,0,4,116,8,0,107,10,0,114,48,
-    1,1,125,8,0,1,122,21,0,116,9,0,100,1,0,124,
-    1,0,124,8,0,131,3,0,1,87,89,100,2,0,100,2,
-    0,125,8,0,126,8,0,88,110,1,0,88,100,2,0,83,
-    40,4,0,0,0,117,27,0,0,0,87,114,105,116,101,32,
-    98,121,116,101,115,32,100,97,116,97,32,116,111,32,97,32,
-    102,105,108,101,46,117,27,0,0,0,99,111,117,108,100,32,
-    110,111,116,32,99,114,101,97,116,101,32,123,33,114,125,58,
-    32,123,33,114,125,78,117,12,0,0,0,99,114,101,97,116,
-    101,100,32,123,33,114,125,40,11,0,0,0,114,38,0,0,
-    0,114,45,0,0,0,114,165,0,0,0,114,33,0,0,0,
-    114,28,0,0,0,114,3,0,0,0,116,5,0,0,0,109,
-    107,100,105,114,244,15,0,0,0,70,105,108,101,69,120,105,
-    115,116,115,69,114,114,111,114,114,40,0,0,0,114,137,0,
-    0,0,114,54,0,0,0,40,9,0,0,0,114,75,0,0,
-    0,114,35,0,0,0,114,52,0,0,0,114,4,1,0,0,
-    244,6,0,0,0,112,97,114,101,110,116,114,116,0,0,0,
-    114,27,0,0,0,114,23,0,0,0,114,248,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,245,
-    0,0,0,59,4,0,0,115,38,0,0,0,0,2,18,1,
-    6,2,22,1,18,1,17,2,19,1,15,1,3,1,17,1,
-    13,2,7,1,18,3,16,1,27,1,3,1,16,1,17,1,
-    18,2,117,25,0,0,0,83,111,117,114,99,101,70,105,108,
-    101,76,111,97,100,101,114,46,115,101,116,95,100,97,116,97,
-    78,40,7,0,0,0,114,56,0,0,0,114,55,0,0,0,
-    114,57,0,0,0,114,58,0,0,0,114,244,0,0,0,114,
-    246,0,0,0,114,245,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,2,1,
-    0,0,45,4,0,0,115,8,0,0,0,12,2,6,2,12,
-    5,12,5,114,2,1,0,0,99,0,0,0,0,0,0,0,
-    0,0,0,0,0,3,0,0,0,0,0,0,0,115,64,0,
-    0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,
-    0,90,3,0,135,0,0,102,1,0,100,2,0,100,3,0,
-    134,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,
-    5,0,100,6,0,100,7,0,132,0,0,90,6,0,135,0,
-    0,83,40,8,0,0,0,244,20,0,0,0,83,111,117,114,
-    99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,
-    117,45,0,0,0,76,111,97,100,101,114,32,119,104,105,99,
-    104,32,104,97,110,100,108,101,115,32,115,111,117,114,99,101,
-    108,101,115,115,32,102,105,108,101,32,105,109,112,111,114,116,
-    115,46,99,2,0,0,0,0,0,0,0,2,0,0,0,2,
-    0,0,0,3,0,0,0,115,32,0,0,0,116,0,0,131,
-    0,0,106,1,0,124,1,0,131,1,0,1,124,1,0,106,
-    2,0,124,1,0,95,3,0,100,0,0,83,40,1,0,0,
-    0,78,40,4,0,0,0,114,148,0,0,0,114,239,0,0,
-    0,114,164,0,0,0,114,238,0,0,0,40,2,0,0,0,
-    114,75,0,0,0,114,161,0,0,0,40,1,0,0,0,114,
-    150,0,0,0,114,4,0,0,0,114,5,0,0,0,114,239,
-    0,0,0,92,4,0,0,115,4,0,0,0,0,1,16,1,
-    117,38,0,0,0,83,111,117,114,99,101,108,101,115,115,70,
-    105,108,101,76,111,97,100,101,114,46,105,110,105,116,95,109,
-    111,100,117,108,101,95,97,116,116,114,115,99,2,0,0,0,
-    0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0,
-    115,76,0,0,0,124,0,0,106,0,0,124,1,0,131,1,
-    0,125,2,0,124,0,0,106,1,0,124,2,0,131,1,0,
-    125,3,0,116,2,0,124,3,0,100,1,0,124,1,0,100,
-    2,0,124,2,0,131,1,2,125,4,0,116,3,0,124,4,
-    0,100,1,0,124,1,0,100,3,0,124,2,0,131,1,2,
-    83,40,4,0,0,0,78,114,71,0,0,0,114,35,0,0,
-    0,114,125,0,0,0,40,4,0,0,0,114,163,0,0,0,
-    114,247,0,0,0,114,200,0,0,0,114,205,0,0,0,40,
-    5,0,0,0,114,75,0,0,0,114,178,0,0,0,114,35,
-    0,0,0,114,52,0,0,0,114,255,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,114,219,0,0,
-    0,96,4,0,0,115,8,0,0,0,0,1,15,1,15,1,
-    24,1,117,29,0,0,0,83,111,117,114,99,101,108,101,115,
-    115,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,
-    99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,
-    0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,
-    0,83,40,2,0,0,0,117,39,0,0,0,82,101,116,117,
-    114,110,32,78,111,110,101,32,97,115,32,116,104,101,114,101,
-    32,105,115,32,110,111,32,115,111,117,114,99,101,32,99,111,
-    100,101,46,78,114,4,0,0,0,40,2,0,0,0,114,75,
-    0,0,0,114,178,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,114,220,0,0,0,102,4,0,0,
-    115,2,0,0,0,0,2,117,31,0,0,0,83,111,117,114,
-    99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,
-    46,103,101,116,95,115,111,117,114,99,101,40,7,0,0,0,
-    114,56,0,0,0,114,55,0,0,0,114,57,0,0,0,114,
-    58,0,0,0,114,239,0,0,0,114,219,0,0,0,114,220,
-    0,0,0,114,4,0,0,0,114,4,0,0,0,40,1,0,
-    0,0,114,150,0,0,0,114,5,0,0,0,114,7,1,0,
-    0,88,4,0,0,115,8,0,0,0,12,2,6,2,18,4,
-    12,6,114,7,1,0,0,99,0,0,0,0,0,0,0,0,
-    0,0,0,0,5,0,0,0,64,0,0,0,115,118,0,0,
-    0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,
-    90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,101,
-    5,0,101,6,0,101,7,0,100,4,0,100,5,0,132,0,
-    0,131,1,0,131,1,0,131,1,0,90,8,0,100,6,0,
-    100,7,0,132,0,0,90,9,0,100,8,0,100,9,0,132,
-    0,0,90,10,0,100,10,0,100,11,0,132,0,0,90,11,
-    0,101,5,0,100,12,0,100,13,0,132,0,0,131,1,0,
-    90,12,0,100,14,0,83,40,15,0,0,0,244,19,0,0,
-    0,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
-    97,100,101,114,117,93,0,0,0,76,111,97,100,101,114,32,
-    102,111,114,32,101,120,116,101,110,115,105,111,110,32,109,111,
-    100,117,108,101,115,46,10,10,32,32,32,32,84,104,101,32,
-    99,111,110,115,116,114,117,99,116,111,114,32,105,115,32,100,
-    101,115,105,103,110,101,100,32,116,111,32,119,111,114,107,32,
-    119,105,116,104,32,70,105,108,101,70,105,110,100,101,114,46,
-    10,10,32,32,32,32,99,3,0,0,0,0,0,0,0,3,
-    0,0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,
-    124,1,0,124,0,0,95,0,0,124,2,0,124,0,0,95,
-    1,0,100,0,0,83,40,1,0,0,0,78,40,2,0,0,
-    0,114,71,0,0,0,114,35,0,0,0,40,3,0,0,0,
-    114,75,0,0,0,114,71,0,0,0,114,35,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,76,
-    0,0,0,119,4,0,0,115,4,0,0,0,0,1,9,1,
-    117,28,0,0,0,69,120,116,101,110,115,105,111,110,70,105,
-    108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95,
-    95,99,2,0,0,0,0,0,0,0,3,0,0,0,11,0,
-    0,0,67,0,0,0,115,126,0,0,0,116,0,0,124,1,
-    0,131,1,0,143,108,0,1,116,1,0,116,2,0,106,3,
-    0,124,1,0,124,0,0,106,4,0,131,3,0,125,2,0,
-    116,5,0,100,1,0,124,0,0,106,4,0,131,2,0,1,
-    124,0,0,106,6,0,124,1,0,131,1,0,114,112,0,116,
-    7,0,124,2,0,100,2,0,131,2,0,12,114,112,0,116,
-    8,0,124,0,0,106,4,0,131,1,0,100,3,0,25,103,
-    1,0,124,2,0,95,9,0,110,0,0,124,2,0,83,87,
-    100,4,0,81,88,100,4,0,83,40,5,0,0,0,117,25,
-    0,0,0,76,111,97,100,32,97,110,32,101,120,116,101,110,
-    115,105,111,110,32,109,111,100,117,108,101,46,117,33,0,0,
-    0,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,
-    101,32,108,111,97,100,101,100,32,102,114,111,109,32,123,33,
-    114,125,114,159,0,0,0,114,67,0,0,0,78,40,10,0,
-    0,0,114,138,0,0,0,114,99,0,0,0,114,94,0,0,
-    0,116,12,0,0,0,108,111,97,100,95,100,121,110,97,109,
-    105,99,114,35,0,0,0,114,137,0,0,0,114,156,0,0,
-    0,114,59,0,0,0,114,38,0,0,0,114,159,0,0,0,
-    40,3,0,0,0,114,75,0,0,0,114,178,0,0,0,114,
-    161,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,218,0,0,0,123,4,0,0,115,14,0,0,
-    0,0,5,13,1,9,1,15,1,16,1,31,1,28,1,117,
-    31,0,0,0,69,120,116,101,110,115,105,111,110,70,105,108,
-    101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100,
-    117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,
-    4,0,0,0,3,0,0,0,115,48,0,0,0,116,0,0,
-    124,0,0,106,1,0,131,1,0,100,1,0,25,137,0,0,
-    116,2,0,135,0,0,102,1,0,100,2,0,100,3,0,134,
-    0,0,116,3,0,68,131,1,0,131,1,0,83,40,4,0,
-    0,0,117,49,0,0,0,82,101,116,117,114,110,32,84,114,
-    117,101,32,105,102,32,116,104,101,32,101,120,116,101,110,115,
-    105,111,110,32,109,111,100,117,108,101,32,105,115,32,97,32,
-    112,97,99,107,97,103,101,46,114,29,0,0,0,99,1,0,
-    0,0,0,0,0,0,2,0,0,0,4,0,0,0,51,0,
-    0,0,115,31,0,0,0,124,0,0,93,21,0,125,1,0,
-    136,0,0,100,0,0,124,1,0,23,107,2,0,86,1,113,
-    3,0,100,1,0,83,40,2,0,0,0,114,76,0,0,0,
-    78,114,4,0,0,0,40,2,0,0,0,114,22,0,0,0,
-    244,6,0,0,0,115,117,102,102,105,120,40,1,0,0,0,
-    244,9,0,0,0,102,105,108,101,95,110,97,109,101,114,4,
-    0,0,0,114,5,0,0,0,114,143,0,0,0,139,4,0,
-    0,115,2,0,0,0,6,1,117,49,0,0,0,69,120,116,
-    101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,
-    46,105,115,95,112,97,99,107,97,103,101,46,60,108,111,99,
-    97,108,115,62,46,60,103,101,110,101,120,112,114,62,40,4,
-    0,0,0,114,38,0,0,0,114,35,0,0,0,114,144,0,
-    0,0,244,18,0,0,0,69,88,84,69,78,83,73,79,78,
-    95,83,85,70,70,73,88,69,83,40,2,0,0,0,114,75,
-    0,0,0,114,178,0,0,0,114,4,0,0,0,40,1,0,
-    0,0,114,10,1,0,0,114,5,0,0,0,114,156,0,0,
-    0,136,4,0,0,115,6,0,0,0,0,2,19,1,18,1,
-    117,30,0,0,0,69,120,116,101,110,115,105,111,110,70,105,
-    108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,
-    97,103,101,99,2,0,0,0,0,0,0,0,2,0,0,0,
-    1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,
-    83,40,2,0,0,0,117,63,0,0,0,82,101,116,117,114,
-    110,32,78,111,110,101,32,97,115,32,97,110,32,101,120,116,
-    101,110,115,105,111,110,32,109,111,100,117,108,101,32,99,97,
-    110,110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,
-    100,101,32,111,98,106,101,99,116,46,78,114,4,0,0,0,
-    40,2,0,0,0,114,75,0,0,0,114,178,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,219,
-    0,0,0,142,4,0,0,115,2,0,0,0,0,2,117,28,
-    0,0,0,69,120,116,101,110,115,105,111,110,70,105,108,101,
-    76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,
-    2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,
-    67,0,0,0,115,4,0,0,0,100,1,0,83,40,2,0,
-    0,0,117,53,0,0,0,82,101,116,117,114,110,32,78,111,
-    110,101,32,97,115,32,101,120,116,101,110,115,105,111,110,32,
-    109,111,100,117,108,101,115,32,104,97,118,101,32,110,111,32,
-    115,111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,
-    0,0,40,2,0,0,0,114,75,0,0,0,114,178,0,0,
-    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    114,220,0,0,0,146,4,0,0,115,2,0,0,0,0,2,
-    117,30,0,0,0,69,120,116,101,110,115,105,111,110,70,105,
-    108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,
-    114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,
-    1,0,0,0,67,0,0,0,115,7,0,0,0,124,0,0,
-    106,0,0,83,40,1,0,0,0,117,58,0,0,0,82,101,
+    0,88,116,4,0,124,3,0,131,1,0,83,41,4,122,52,
+    67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,
+    110,116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,
+    99,116,76,111,97,100,101,114,46,103,101,116,95,115,111,117,
+    114,99,101,46,122,39,115,111,117,114,99,101,32,110,111,116,
+    32,97,118,97,105,108,97,98,108,101,32,116,104,114,111,117,
+    103,104,32,103,101,116,95,100,97,116,97,40,41,114,72,0,
+    0,0,78,41,5,114,164,0,0,0,218,8,103,101,116,95,
+    100,97,116,97,114,40,0,0,0,114,158,0,0,0,114,214,
+    0,0,0,41,5,114,76,0,0,0,114,179,0,0,0,114,
+    35,0,0,0,114,212,0,0,0,218,3,101,120,99,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,221,0,
+    0,0,214,3,0,0,115,14,0,0,0,0,2,15,1,3,
+    1,19,1,18,1,9,1,31,1,122,23,83,111,117,114,99,
+    101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,
+    99,101,218,9,95,111,112,116,105,109,105,122,101,114,29,0,
+    0,0,99,3,0,0,0,1,0,0,0,4,0,0,0,9,
+    0,0,0,67,0,0,0,115,31,0,0,0,116,0,0,116,
+    1,0,124,1,0,124,2,0,100,1,0,100,2,0,100,3,
+    0,100,4,0,124,3,0,131,4,2,83,41,5,122,130,82,
+    101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111,
+    98,106,101,99,116,32,99,111,109,112,105,108,101,100,32,102,
+    114,111,109,32,115,111,117,114,99,101,46,10,10,32,32,32,
+    32,32,32,32,32,84,104,101,32,39,100,97,116,97,39,32,
+    97,114,103,117,109,101,110,116,32,99,97,110,32,98,101,32,
+    97,110,121,32,111,98,106,101,99,116,32,116,121,112,101,32,
+    116,104,97,116,32,99,111,109,112,105,108,101,40,41,32,115,
+    117,112,112,111,114,116,115,46,10,32,32,32,32,32,32,32,
+    32,114,241,0,0,0,218,12,100,111,110,116,95,105,110,104,
+    101,114,105,116,84,114,104,0,0,0,41,2,114,100,0,0,
+    0,218,7,99,111,109,112,105,108,101,41,4,114,76,0,0,
+    0,114,53,0,0,0,114,35,0,0,0,114,250,0,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    14,115,111,117,114,99,101,95,116,111,95,99,111,100,101,224,
+    3,0,0,115,4,0,0,0,0,5,18,1,122,27,83,111,
+    117,114,99,101,76,111,97,100,101,114,46,115,111,117,114,99,
+    101,95,116,111,95,99,111,100,101,99,2,0,0,0,0,0,
+    0,0,10,0,0,0,45,0,0,0,67,0,0,0,115,177,
+    1,0,0,124,0,0,106,0,0,124,1,0,131,1,0,125,
+    2,0,100,1,0,125,3,0,121,16,0,116,1,0,124,2,
+    0,131,1,0,125,4,0,87,110,24,0,4,116,2,0,107,
+    10,0,114,63,0,1,1,1,100,1,0,125,4,0,89,110,
+    202,0,88,121,19,0,124,0,0,106,3,0,124,2,0,131,
+    1,0,125,5,0,87,110,18,0,4,116,4,0,107,10,0,
+    114,103,0,1,1,1,89,110,162,0,88,116,5,0,124,5,
+    0,100,2,0,25,131,1,0,125,3,0,121,19,0,124,0,
+    0,106,6,0,124,4,0,131,1,0,125,6,0,87,110,18,
+    0,4,116,7,0,107,10,0,114,159,0,1,1,1,89,110,
+    106,0,88,121,34,0,116,8,0,124,6,0,100,3,0,124,
+    5,0,100,4,0,124,1,0,100,5,0,124,4,0,131,1,
+    3,125,7,0,87,110,24,0,4,116,9,0,116,10,0,102,
+    2,0,107,10,0,114,220,0,1,1,1,89,110,45,0,88,
+    116,11,0,100,6,0,124,4,0,124,2,0,131,3,0,1,
+    116,12,0,124,7,0,100,4,0,124,1,0,100,7,0,124,
+    4,0,100,8,0,124,2,0,131,1,3,83,124,0,0,106,
+    6,0,124,2,0,131,1,0,125,8,0,124,0,0,106,13,
+    0,124,8,0,124,2,0,131,2,0,125,9,0,116,11,0,
+    100,9,0,124,2,0,131,2,0,1,116,14,0,106,15,0,
+    12,114,173,1,124,4,0,100,1,0,107,9,0,114,173,1,
+    124,3,0,100,1,0,107,9,0,114,173,1,116,16,0,124,
+    9,0,124,3,0,116,17,0,124,8,0,131,1,0,131,3,
+    0,125,6,0,121,36,0,124,0,0,106,18,0,124,2,0,
+    124,4,0,124,6,0,131,3,0,1,116,11,0,100,10,0,
+    124,4,0,131,2,0,1,87,113,173,1,4,116,2,0,107,
+    10,0,114,169,1,1,1,1,89,113,173,1,88,110,0,0,
+    124,9,0,83,41,11,122,190,67,111,110,99,114,101,116,101,
+    32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,
+    111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,
+    46,103,101,116,95,99,111,100,101,46,10,10,32,32,32,32,
+    32,32,32,32,82,101,97,100,105,110,103,32,111,102,32,98,
+    121,116,101,99,111,100,101,32,114,101,113,117,105,114,101,115,
+    32,112,97,116,104,95,115,116,97,116,115,32,116,111,32,98,
+    101,32,105,109,112,108,101,109,101,110,116,101,100,46,32,84,
+    111,32,119,114,105,116,101,10,32,32,32,32,32,32,32,32,
+    98,121,116,101,99,111,100,101,44,32,115,101,116,95,100,97,
+    116,97,32,109,117,115,116,32,97,108,115,111,32,98,101,32,
+    105,109,112,108,101,109,101,110,116,101,100,46,10,10,32,32,
+    32,32,32,32,32,32,78,114,194,0,0,0,114,198,0,0,
+    0,114,72,0,0,0,114,35,0,0,0,122,13,123,125,32,
+    109,97,116,99,104,101,115,32,123,125,114,126,0,0,0,114,
+    127,0,0,0,122,19,99,111,100,101,32,111,98,106,101,99,
+    116,32,102,114,111,109,32,123,125,122,10,119,114,111,116,101,
+    32,123,33,114,125,41,19,114,164,0,0,0,114,118,0,0,
+    0,114,110,0,0,0,114,245,0,0,0,114,243,0,0,0,
+    114,14,0,0,0,114,248,0,0,0,114,40,0,0,0,114,
+    201,0,0,0,114,158,0,0,0,114,197,0,0,0,114,138,
+    0,0,0,114,206,0,0,0,114,253,0,0,0,114,7,0,
+    0,0,218,19,100,111,110,116,95,119,114,105,116,101,95,98,
+    121,116,101,99,111,100,101,114,209,0,0,0,114,31,0,0,
+    0,114,247,0,0,0,41,10,114,76,0,0,0,114,179,0,
+    0,0,114,127,0,0,0,114,199,0,0,0,114,126,0,0,
+    0,218,2,115,116,114,53,0,0,0,218,10,98,121,116,101,
+    115,95,100,97,116,97,114,212,0,0,0,90,11,99,111,100,
+    101,95,111,98,106,101,99,116,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,220,0,0,0,232,3,0,0,
+    115,78,0,0,0,0,7,15,1,6,1,3,1,16,1,13,
+    1,11,2,3,1,19,1,13,1,5,2,16,1,3,1,19,
+    1,13,1,5,2,3,1,9,1,12,1,13,1,19,1,5,
+    2,9,1,7,1,15,1,6,1,7,1,15,1,18,1,13,
+    1,22,1,12,1,9,1,15,1,3,1,19,1,17,1,13,
+    1,8,1,122,21,83,111,117,114,99,101,76,111,97,100,101,
+    114,46,103,101,116,95,99,111,100,101,78,114,124,0,0,0,
+    41,10,114,57,0,0,0,114,56,0,0,0,114,58,0,0,
+    0,114,244,0,0,0,114,245,0,0,0,114,247,0,0,0,
+    114,246,0,0,0,114,221,0,0,0,114,253,0,0,0,114,
+    220,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,114,242,0,0,0,174,3,0,
+    0,115,14,0,0,0,12,2,12,8,12,13,12,10,12,7,
+    12,10,18,8,114,242,0,0,0,99,0,0,0,0,0,0,
+    0,0,0,0,0,0,4,0,0,0,0,0,0,0,115,88,
+    0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,
+    1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,
+    0,101,5,0,135,0,0,102,1,0,100,4,0,100,5,0,
+    134,0,0,131,1,0,90,6,0,101,5,0,100,6,0,100,
+    7,0,132,0,0,131,1,0,90,7,0,100,8,0,100,9,
+    0,132,0,0,90,8,0,135,0,0,83,41,10,218,10,70,
+    105,108,101,76,111,97,100,101,114,122,103,66,97,115,101,32,
+    102,105,108,101,32,108,111,97,100,101,114,32,99,108,97,115,
+    115,32,119,104,105,99,104,32,105,109,112,108,101,109,101,110,
+    116,115,32,116,104,101,32,108,111,97,100,101,114,32,112,114,
+    111,116,111,99,111,108,32,109,101,116,104,111,100,115,32,116,
+    104,97,116,10,32,32,32,32,114,101,113,117,105,114,101,32,
+    102,105,108,101,32,115,121,115,116,101,109,32,117,115,97,103,
+    101,46,99,3,0,0,0,0,0,0,0,3,0,0,0,2,
+    0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124,
+    0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,1,
+    0,83,41,2,122,75,67,97,99,104,101,32,116,104,101,32,
+    109,111,100,117,108,101,32,110,97,109,101,32,97,110,100,32,
+    116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,
+    102,105,108,101,32,102,111,117,110,100,32,98,121,32,116,104,
+    101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,114,
+    46,78,41,2,114,72,0,0,0,114,35,0,0,0,41,3,
+    114,76,0,0,0,114,179,0,0,0,114,35,0,0,0,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,77,
+    0,0,0,33,4,0,0,115,4,0,0,0,0,3,9,1,
+    122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,105,
+    110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,
+    0,0,3,0,0,0,3,0,0,0,115,22,0,0,0,116,
+    0,0,116,1,0,124,0,0,131,2,0,106,2,0,124,1,
+    0,131,1,0,83,41,1,122,26,76,111,97,100,32,97,32,
+    109,111,100,117,108,101,32,102,114,111,109,32,97,32,102,105,
+    108,101,46,41,3,114,149,0,0,0,114,1,1,0,0,114,
+    219,0,0,0,41,2,114,76,0,0,0,114,179,0,0,0,
+    41,1,114,151,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,219,0,0,0,39,4,0,0,115,2,0,0,0,0,
+    5,122,22,70,105,108,101,76,111,97,100,101,114,46,108,111,
+    97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,0,
+    0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,7,
+    0,0,0,124,0,0,106,0,0,83,41,1,122,58,82,101,
     116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,
     32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,
     32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,
-    32,102,105,110,100,101,114,46,40,1,0,0,0,114,35,0,
-    0,0,40,2,0,0,0,114,75,0,0,0,114,178,0,0,
+    32,102,105,110,100,101,114,46,41,1,114,35,0,0,0,41,
+    2,114,76,0,0,0,114,179,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,164,0,0,0,46,
+    4,0,0,115,2,0,0,0,0,3,122,23,70,105,108,101,
+    76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,
+    97,109,101,99,2,0,0,0,0,0,0,0,3,0,0,0,
+    8,0,0,0,67,0,0,0,115,41,0,0,0,116,0,0,
+    106,1,0,124,1,0,100,1,0,131,2,0,143,17,0,125,
+    2,0,124,2,0,106,2,0,131,0,0,83,87,100,2,0,
+    81,88,100,2,0,83,41,3,122,39,82,101,116,117,114,110,
+    32,116,104,101,32,100,97,116,97,32,102,114,111,109,32,112,
+    97,116,104,32,97,115,32,114,97,119,32,98,121,116,101,115,
+    46,218,1,114,78,41,3,114,49,0,0,0,114,50,0,0,
+    0,90,4,114,101,97,100,41,3,114,76,0,0,0,114,35,
+    0,0,0,114,54,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,248,0,0,0,51,4,0,0,
+    115,4,0,0,0,0,2,21,1,122,19,70,105,108,101,76,
+    111,97,100,101,114,46,103,101,116,95,100,97,116,97,41,9,
+    114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,
+    59,0,0,0,114,77,0,0,0,114,177,0,0,0,114,219,
+    0,0,0,114,164,0,0,0,114,248,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,41,1,114,151,0,0,0,114,5,
+    0,0,0,114,1,1,0,0,28,4,0,0,115,10,0,0,
+    0,12,3,6,2,12,6,24,7,18,5,114,1,1,0,0,
+    99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
+    0,64,0,0,0,115,64,0,0,0,101,0,0,90,1,0,
+    100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,
+    3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,
+    0,90,5,0,100,6,0,100,7,0,100,8,0,100,9,0,
+    132,0,1,90,6,0,100,10,0,83,41,11,218,16,83,111,
+    117,114,99,101,70,105,108,101,76,111,97,100,101,114,122,62,
+    67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,
+    110,116,97,116,105,111,110,32,111,102,32,83,111,117,114,99,
+    101,76,111,97,100,101,114,32,117,115,105,110,103,32,116,104,
+    101,32,102,105,108,101,32,115,121,115,116,101,109,46,99,2,
+    0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,
+    0,0,0,115,36,0,0,0,116,0,0,124,1,0,131,1,
+    0,125,2,0,105,2,0,124,2,0,106,1,0,100,1,0,
+    54,124,2,0,106,2,0,100,2,0,54,83,41,3,122,33,
+    82,101,116,117,114,110,32,116,104,101,32,109,101,116,97,100,
+    97,116,97,32,102,111,114,32,116,104,101,32,112,97,116,104,
+    46,114,194,0,0,0,114,195,0,0,0,41,3,114,39,0,
+    0,0,218,8,115,116,95,109,116,105,109,101,90,7,115,116,
+    95,115,105,122,101,41,3,114,76,0,0,0,114,35,0,0,
+    0,114,255,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,245,0,0,0,61,4,0,0,115,4,
+    0,0,0,0,2,12,1,122,27,83,111,117,114,99,101,70,
+    105,108,101,76,111,97,100,101,114,46,112,97,116,104,95,115,
+    116,97,116,115,99,4,0,0,0,0,0,0,0,5,0,0,
+    0,5,0,0,0,67,0,0,0,115,34,0,0,0,116,0,
+    0,124,1,0,131,1,0,125,4,0,124,0,0,106,1,0,
+    124,2,0,124,3,0,100,1,0,124,4,0,131,2,1,83,
+    41,2,78,218,5,95,109,111,100,101,41,2,114,130,0,0,
+    0,114,246,0,0,0,41,5,114,76,0,0,0,114,127,0,
+    0,0,114,126,0,0,0,114,53,0,0,0,114,42,0,0,
     0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    114,163,0,0,0,150,4,0,0,115,2,0,0,0,0,3,
-    117,32,0,0,0,69,120,116,101,110,115,105,111,110,70,105,
-    108,101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,
-    101,110,97,109,101,78,40,13,0,0,0,114,56,0,0,0,
-    114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,114,
-    76,0,0,0,114,176,0,0,0,114,170,0,0,0,114,173,
-    0,0,0,114,218,0,0,0,114,156,0,0,0,114,219,0,
-    0,0,114,220,0,0,0,114,163,0,0,0,114,4,0,0,
+    114,247,0,0,0,66,4,0,0,115,4,0,0,0,0,2,
+    12,1,122,32,83,111,117,114,99,101,70,105,108,101,76,111,
+    97,100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,
+    99,111,100,101,114,5,1,0,0,105,182,1,0,0,99,3,
+    0,0,0,1,0,0,0,9,0,0,0,18,0,0,0,67,
+    0,0,0,115,53,1,0,0,116,0,0,124,1,0,131,1,
+    0,92,2,0,125,4,0,125,5,0,103,0,0,125,6,0,
+    120,54,0,124,4,0,114,80,0,116,1,0,124,4,0,131,
+    1,0,12,114,80,0,116,0,0,124,4,0,131,1,0,92,
+    2,0,125,4,0,125,7,0,124,6,0,106,2,0,124,7,
+    0,131,1,0,1,113,27,0,87,120,132,0,116,3,0,124,
+    6,0,131,1,0,68,93,118,0,125,7,0,116,4,0,124,
+    4,0,124,7,0,131,2,0,125,4,0,121,17,0,116,5,
+    0,106,6,0,124,4,0,131,1,0,1,87,113,94,0,4,
+    116,7,0,107,10,0,114,155,0,1,1,1,119,94,0,89,
+    113,94,0,4,116,8,0,107,10,0,114,211,0,1,125,8,
+    0,1,122,25,0,116,9,0,100,1,0,124,4,0,124,8,
+    0,131,3,0,1,100,2,0,83,87,89,100,2,0,100,2,
+    0,125,8,0,126,8,0,88,113,94,0,88,113,94,0,87,
+    121,33,0,116,10,0,124,1,0,124,2,0,124,3,0,131,
+    3,0,1,116,9,0,100,3,0,124,1,0,131,2,0,1,
+    87,110,53,0,4,116,8,0,107,10,0,114,48,1,1,125,
+    8,0,1,122,21,0,116,9,0,100,1,0,124,1,0,124,
+    8,0,131,3,0,1,87,89,100,2,0,100,2,0,125,8,
+    0,126,8,0,88,110,1,0,88,100,2,0,83,41,4,122,
+    27,87,114,105,116,101,32,98,121,116,101,115,32,100,97,116,
+    97,32,116,111,32,97,32,102,105,108,101,46,122,27,99,111,
+    117,108,100,32,110,111,116,32,99,114,101,97,116,101,32,123,
+    33,114,125,58,32,123,33,114,125,78,122,12,99,114,101,97,
+    116,101,100,32,123,33,114,125,41,11,114,38,0,0,0,114,
+    46,0,0,0,114,166,0,0,0,114,33,0,0,0,114,28,
+    0,0,0,114,3,0,0,0,90,5,109,107,100,105,114,218,
+    15,70,105,108,101,69,120,105,115,116,115,69,114,114,111,114,
+    114,40,0,0,0,114,138,0,0,0,114,55,0,0,0,41,
+    9,114,76,0,0,0,114,35,0,0,0,114,53,0,0,0,
+    114,5,1,0,0,218,6,112,97,114,101,110,116,114,117,0,
+    0,0,114,27,0,0,0,114,23,0,0,0,114,249,0,0,
     0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    114,8,1,0,0,111,4,0,0,115,18,0,0,0,12,6,
-    6,2,12,4,3,1,3,1,24,11,12,6,12,4,12,4,
-    114,8,1,0,0,99,0,0,0,0,0,0,0,0,0,0,
-    0,0,2,0,0,0,64,0,0,0,115,130,0,0,0,101,
-    0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,
-    0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,
-    100,5,0,132,0,0,90,5,0,100,6,0,100,7,0,132,
-    0,0,90,6,0,100,8,0,100,9,0,132,0,0,90,7,
-    0,100,10,0,100,11,0,132,0,0,90,8,0,100,12,0,
-    100,13,0,132,0,0,90,9,0,100,14,0,100,15,0,132,
-    0,0,90,10,0,100,16,0,100,17,0,132,0,0,90,11,
-    0,100,18,0,100,19,0,132,0,0,90,12,0,100,20,0,
-    83,40,21,0,0,0,244,14,0,0,0,95,78,97,109,101,
-    115,112,97,99,101,80,97,116,104,117,38,1,0,0,82,101,
-    112,114,101,115,101,110,116,115,32,97,32,110,97,109,101,115,
-    112,97,99,101,32,112,97,99,107,97,103,101,39,115,32,112,
-    97,116,104,46,32,32,73,116,32,117,115,101,115,32,116,104,
-    101,32,109,111,100,117,108,101,32,110,97,109,101,10,32,32,
-    32,32,116,111,32,102,105,110,100,32,105,116,115,32,112,97,
-    114,101,110,116,32,109,111,100,117,108,101,44,32,97,110,100,
-    32,102,114,111,109,32,116,104,101,114,101,32,105,116,32,108,
-    111,111,107,115,32,117,112,32,116,104,101,32,112,97,114,101,
-    110,116,39,115,10,32,32,32,32,95,95,112,97,116,104,95,
-    95,46,32,32,87,104,101,110,32,116,104,105,115,32,99,104,
-    97,110,103,101,115,44,32,116,104,101,32,109,111,100,117,108,
-    101,39,115,32,111,119,110,32,112,97,116,104,32,105,115,32,
-    114,101,99,111,109,112,117,116,101,100,44,10,32,32,32,32,
-    117,115,105,110,103,32,112,97,116,104,95,102,105,110,100,101,
-    114,46,32,32,70,111,114,32,116,111,112,45,108,101,118,101,
-    108,32,109,111,100,117,108,101,115,44,32,116,104,101,32,112,
-    97,114,101,110,116,32,109,111,100,117,108,101,39,115,32,112,
-    97,116,104,10,32,32,32,32,105,115,32,115,121,115,46,112,
-    97,116,104,46,99,4,0,0,0,0,0,0,0,4,0,0,
-    0,2,0,0,0,67,0,0,0,115,52,0,0,0,124,1,
-    0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,
-    116,2,0,124,0,0,106,3,0,131,0,0,131,1,0,124,
-    0,0,95,4,0,124,3,0,124,0,0,95,5,0,100,0,
-    0,83,40,1,0,0,0,78,40,6,0,0,0,114,139,0,
-    0,0,244,5,0,0,0,95,112,97,116,104,114,236,0,0,
-    0,244,16,0,0,0,95,103,101,116,95,112,97,114,101,110,
-    116,95,112,97,116,104,244,17,0,0,0,95,108,97,115,116,
-    95,112,97,114,101,110,116,95,112,97,116,104,244,12,0,0,
-    0,95,112,97,116,104,95,102,105,110,100,101,114,40,4,0,
-    0,0,114,75,0,0,0,114,71,0,0,0,114,35,0,0,
-    0,244,11,0,0,0,112,97,116,104,95,102,105,110,100,101,
-    114,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    114,76,0,0,0,163,4,0,0,115,8,0,0,0,0,1,
-    9,1,9,1,21,1,117,23,0,0,0,95,78,97,109,101,
-    115,112,97,99,101,80,97,116,104,46,95,95,105,110,105,116,
-    95,95,99,1,0,0,0,0,0,0,0,4,0,0,0,3,
-    0,0,0,67,0,0,0,115,53,0,0,0,124,0,0,106,
-    0,0,106,1,0,100,1,0,131,1,0,92,3,0,125,1,
-    0,125,2,0,125,3,0,124,2,0,100,2,0,107,2,0,
-    114,43,0,100,6,0,83,124,1,0,100,5,0,102,2,0,
-    83,40,7,0,0,0,117,62,0,0,0,82,101,116,117,114,
-    110,115,32,97,32,116,117,112,108,101,32,111,102,32,40,112,
-    97,114,101,110,116,45,109,111,100,117,108,101,45,110,97,109,
-    101,44,32,112,97,114,101,110,116,45,112,97,116,104,45,97,
-    116,116,114,45,110,97,109,101,41,114,101,0,0,0,114,30,
-    0,0,0,114,7,0,0,0,114,35,0,0,0,114,159,0,
-    0,0,40,2,0,0,0,117,3,0,0,0,115,121,115,117,
-    4,0,0,0,112,97,116,104,40,2,0,0,0,114,139,0,
-    0,0,114,32,0,0,0,40,4,0,0,0,114,75,0,0,
-    0,114,6,1,0,0,244,3,0,0,0,100,111,116,114,80,
+    114,246,0,0,0,71,4,0,0,115,38,0,0,0,0,2,
+    18,1,6,2,22,1,18,1,17,2,19,1,15,1,3,1,
+    17,1,13,2,7,1,18,3,16,1,27,1,3,1,16,1,
+    17,1,18,2,122,25,83,111,117,114,99,101,70,105,108,101,
+    76,111,97,100,101,114,46,115,101,116,95,100,97,116,97,78,
+    41,7,114,57,0,0,0,114,56,0,0,0,114,58,0,0,
+    0,114,59,0,0,0,114,245,0,0,0,114,247,0,0,0,
+    114,246,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,114,3,1,0,0,57,4,
+    0,0,115,8,0,0,0,12,2,6,2,12,5,12,5,114,
+    3,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
+    0,3,0,0,0,0,0,0,0,115,64,0,0,0,101,0,
+    0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,
+    135,0,0,102,1,0,100,2,0,100,3,0,134,0,0,90,
+    4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6,
+    0,100,7,0,132,0,0,90,6,0,135,0,0,83,41,8,
+    218,20,83,111,117,114,99,101,108,101,115,115,70,105,108,101,
+    76,111,97,100,101,114,122,45,76,111,97,100,101,114,32,119,
+    104,105,99,104,32,104,97,110,100,108,101,115,32,115,111,117,
+    114,99,101,108,101,115,115,32,102,105,108,101,32,105,109,112,
+    111,114,116,115,46,99,2,0,0,0,0,0,0,0,2,0,
+    0,0,2,0,0,0,3,0,0,0,115,32,0,0,0,116,
+    0,0,131,0,0,106,1,0,124,1,0,131,1,0,1,124,
+    1,0,106,2,0,124,1,0,95,3,0,100,0,0,83,41,
+    1,78,41,4,114,149,0,0,0,114,240,0,0,0,114,165,
+    0,0,0,114,239,0,0,0,41,2,114,76,0,0,0,114,
+    162,0,0,0,41,1,114,151,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,240,0,0,0,104,4,0,0,115,4,
+    0,0,0,0,1,16,1,122,38,83,111,117,114,99,101,108,
+    101,115,115,70,105,108,101,76,111,97,100,101,114,46,105,110,
+    105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,99,
+    2,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,
+    67,0,0,0,115,76,0,0,0,124,0,0,106,0,0,124,
+    1,0,131,1,0,125,2,0,124,0,0,106,1,0,124,2,
+    0,131,1,0,125,3,0,116,2,0,124,3,0,100,1,0,
+    124,1,0,100,2,0,124,2,0,131,1,2,125,4,0,116,
+    3,0,124,4,0,100,1,0,124,1,0,100,3,0,124,2,
+    0,131,1,2,83,41,4,78,114,72,0,0,0,114,35,0,
+    0,0,114,126,0,0,0,41,4,114,164,0,0,0,114,248,
+    0,0,0,114,201,0,0,0,114,206,0,0,0,41,5,114,
+    76,0,0,0,114,179,0,0,0,114,35,0,0,0,114,53,
+    0,0,0,114,0,1,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,220,0,0,0,108,4,0,0,
+    115,8,0,0,0,0,1,15,1,15,1,24,1,122,29,83,
+    111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,
+    100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,
+    0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,
+    0,115,4,0,0,0,100,1,0,83,41,2,122,39,82,101,
+    116,117,114,110,32,78,111,110,101,32,97,115,32,116,104,101,
+    114,101,32,105,115,32,110,111,32,115,111,117,114,99,101,32,
+    99,111,100,101,46,78,114,4,0,0,0,41,2,114,76,0,
+    0,0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,5,0,0,0,114,221,0,0,0,114,4,0,0,115,
+    2,0,0,0,0,2,122,31,83,111,117,114,99,101,108,101,
+    115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116,
+    95,115,111,117,114,99,101,41,7,114,57,0,0,0,114,56,
+    0,0,0,114,58,0,0,0,114,59,0,0,0,114,240,0,
+    0,0,114,220,0,0,0,114,221,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,41,1,114,151,0,0,0,114,5,0,
+    0,0,114,8,1,0,0,100,4,0,0,115,8,0,0,0,
+    12,2,6,2,18,4,12,6,114,8,1,0,0,99,0,0,
+    0,0,0,0,0,0,0,0,0,0,5,0,0,0,64,0,
+    0,0,115,118,0,0,0,101,0,0,90,1,0,100,0,0,
+    90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,
+    0,0,90,4,0,101,5,0,101,6,0,101,7,0,100,4,
+    0,100,5,0,132,0,0,131,1,0,131,1,0,131,1,0,
+    90,8,0,100,6,0,100,7,0,132,0,0,90,9,0,100,
+    8,0,100,9,0,132,0,0,90,10,0,100,10,0,100,11,
+    0,132,0,0,90,11,0,101,5,0,100,12,0,100,13,0,
+    132,0,0,131,1,0,90,12,0,100,14,0,83,41,15,218,
+    19,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
+    97,100,101,114,122,93,76,111,97,100,101,114,32,102,111,114,
+    32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,
+    101,115,46,10,10,32,32,32,32,84,104,101,32,99,111,110,
+    115,116,114,117,99,116,111,114,32,105,115,32,100,101,115,105,
+    103,110,101,100,32,116,111,32,119,111,114,107,32,119,105,116,
+    104,32,70,105,108,101,70,105,110,100,101,114,46,10,10,32,
+    32,32,32,99,3,0,0,0,0,0,0,0,3,0,0,0,
+    2,0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,
+    124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,
+    0,0,83,41,1,78,41,2,114,72,0,0,0,114,35,0,
+    0,0,41,3,114,76,0,0,0,114,72,0,0,0,114,35,
     0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,244,23,0,0,0,95,102,105,110,100,95,112,97,114,
-    101,110,116,95,112,97,116,104,95,110,97,109,101,115,169,4,
-    0,0,115,8,0,0,0,0,2,27,1,12,2,4,3,117,
-    38,0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,
-    116,104,46,95,102,105,110,100,95,112,97,114,101,110,116,95,
-    112,97,116,104,95,110,97,109,101,115,99,1,0,0,0,0,
-    0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,
-    38,0,0,0,124,0,0,106,0,0,131,0,0,92,2,0,
-    125,1,0,125,2,0,116,1,0,116,2,0,106,3,0,124,
-    1,0,25,124,2,0,131,2,0,83,40,1,0,0,0,78,
-    40,4,0,0,0,114,19,1,0,0,114,61,0,0,0,114,
-    7,0,0,0,114,140,0,0,0,40,3,0,0,0,114,75,
-    0,0,0,116,18,0,0,0,112,97,114,101,110,116,95,109,
-    111,100,117,108,101,95,110,97,109,101,116,14,0,0,0,112,
-    97,116,104,95,97,116,116,114,95,110,97,109,101,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,114,14,1,0,
-    0,179,4,0,0,115,4,0,0,0,0,1,18,1,117,31,
-    0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,116,
-    104,46,95,103,101,116,95,112,97,114,101,110,116,95,112,97,
-    116,104,99,1,0,0,0,0,0,0,0,4,0,0,0,3,
-    0,0,0,67,0,0,0,115,103,0,0,0,116,0,0,124,
-    0,0,106,1,0,131,0,0,131,1,0,125,1,0,124,1,
-    0,124,0,0,106,2,0,107,3,0,114,96,0,124,0,0,
-    106,3,0,124,0,0,106,4,0,124,1,0,131,2,0,92,
-    2,0,125,2,0,125,3,0,124,2,0,100,0,0,107,8,
-    0,114,84,0,124,3,0,124,0,0,95,5,0,110,0,0,
-    124,1,0,124,0,0,95,2,0,110,0,0,124,0,0,106,
-    5,0,83,40,1,0,0,0,78,40,6,0,0,0,114,236,
-    0,0,0,114,14,1,0,0,114,15,1,0,0,114,16,1,
-    0,0,114,139,0,0,0,114,13,1,0,0,40,4,0,0,
-    0,114,75,0,0,0,116,11,0,0,0,112,97,114,101,110,
-    116,95,112,97,116,104,114,160,0,0,0,116,8,0,0,0,
-    110,101,119,95,112,97,116,104,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,244,12,0,0,0,95,114,101,99,
-    97,108,99,117,108,97,116,101,183,4,0,0,115,14,0,0,
-    0,0,2,18,1,15,1,27,3,12,1,12,1,12,1,117,
-    27,0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,
-    116,104,46,95,114,101,99,97,108,99,117,108,97,116,101,99,
-    1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,
-    67,0,0,0,115,16,0,0,0,116,0,0,124,0,0,106,
-    1,0,131,0,0,131,1,0,83,40,1,0,0,0,78,40,
-    2,0,0,0,244,4,0,0,0,105,116,101,114,114,20,1,
-    0,0,40,1,0,0,0,114,75,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,244,8,0,0,0,
-    95,95,105,116,101,114,95,95,195,4,0,0,115,2,0,0,
-    0,0,1,117,23,0,0,0,95,78,97,109,101,115,112,97,
-    99,101,80,97,116,104,46,95,95,105,116,101,114,95,95,99,
-    1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,
-    67,0,0,0,115,16,0,0,0,116,0,0,124,0,0,106,
-    1,0,131,0,0,131,1,0,83,40,1,0,0,0,78,40,
-    2,0,0,0,114,31,0,0,0,114,20,1,0,0,40,1,
-    0,0,0,114,75,0,0,0,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,244,7,0,0,0,95,95,108,101,
-    110,95,95,198,4,0,0,115,2,0,0,0,0,1,117,22,
-    0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,116,
-    104,46,95,95,108,101,110,95,95,99,1,0,0,0,0,0,
-    0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16,
-    0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131,
-    1,0,83,40,2,0,0,0,78,117,20,0,0,0,95,78,
-    97,109,101,115,112,97,99,101,80,97,116,104,40,123,33,114,
-    125,41,40,2,0,0,0,114,46,0,0,0,114,13,1,0,
-    0,40,1,0,0,0,114,75,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,87,0,0,0,201,
-    4,0,0,115,2,0,0,0,0,1,117,23,0,0,0,95,
-    78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,
-    114,101,112,114,95,95,99,2,0,0,0,0,0,0,0,2,
-    0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,
-    124,1,0,124,0,0,106,0,0,131,0,0,107,6,0,83,
-    40,1,0,0,0,78,40,1,0,0,0,114,20,1,0,0,
-    40,2,0,0,0,114,75,0,0,0,244,4,0,0,0,105,
-    116,101,109,114,4,0,0,0,114,4,0,0,0,114,5,0,
-    0,0,244,12,0,0,0,95,95,99,111,110,116,97,105,110,
-    115,95,95,204,4,0,0,115,2,0,0,0,0,1,117,27,
-    0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,116,
-    104,46,95,95,99,111,110,116,97,105,110,115,95,95,99,2,
-    0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,
-    0,0,0,115,20,0,0,0,124,0,0,106,0,0,106,1,
-    0,124,1,0,131,1,0,1,100,0,0,83,40,1,0,0,
-    0,78,40,2,0,0,0,114,13,1,0,0,114,165,0,0,
-    0,40,2,0,0,0,114,75,0,0,0,114,24,1,0,0,
-    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
-    165,0,0,0,207,4,0,0,115,2,0,0,0,0,1,117,
-    21,0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,
-    116,104,46,97,112,112,101,110,100,78,40,13,0,0,0,114,
-    56,0,0,0,114,55,0,0,0,114,57,0,0,0,114,58,
-    0,0,0,114,76,0,0,0,114,19,1,0,0,114,14,1,
-    0,0,114,20,1,0,0,114,22,1,0,0,114,23,1,0,
-    0,114,87,0,0,0,114,25,1,0,0,114,165,0,0,0,
-    114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
-    5,0,0,0,114,12,1,0,0,156,4,0,0,115,20,0,
-    0,0,12,5,6,2,12,6,12,10,12,4,12,12,12,3,
-    12,3,12,3,12,3,114,12,1,0,0,99,0,0,0,0,
-    0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,
-    115,106,0,0,0,101,0,0,90,1,0,100,0,0,90,2,
-    0,100,1,0,100,2,0,132,0,0,90,3,0,101,4,0,
-    100,3,0,100,4,0,132,0,0,131,1,0,90,5,0,100,
-    5,0,100,6,0,132,0,0,90,6,0,100,7,0,100,8,
-    0,132,0,0,90,7,0,100,9,0,100,10,0,132,0,0,
-    90,8,0,100,11,0,100,12,0,132,0,0,90,9,0,100,
-    13,0,100,14,0,132,0,0,90,10,0,100,15,0,83,40,
-    16,0,0,0,244,15,0,0,0,78,97,109,101,115,112,97,
-    99,101,76,111,97,100,101,114,99,4,0,0,0,0,0,0,
-    0,4,0,0,0,4,0,0,0,67,0,0,0,115,25,0,
-    0,0,116,0,0,124,1,0,124,2,0,124,3,0,131,3,
-    0,124,0,0,95,1,0,100,0,0,83,40,1,0,0,0,
-    78,40,2,0,0,0,114,12,1,0,0,114,13,1,0,0,
-    40,4,0,0,0,114,75,0,0,0,114,71,0,0,0,114,
-    35,0,0,0,114,17,1,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,114,76,0,0,0,212,4,0,
-    0,115,2,0,0,0,0,1,117,24,0,0,0,78,97,109,
-    101,115,112,97,99,101,76,111,97,100,101,114,46,95,95,105,
-    110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,
-    0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,100,
-    1,0,106,0,0,124,1,0,106,1,0,131,1,0,83,40,
-    2,0,0,0,78,117,25,0,0,0,60,109,111,100,117,108,
-    101,32,123,33,114,125,32,40,110,97,109,101,115,112,97,99,
-    101,41,62,40,2,0,0,0,114,46,0,0,0,114,56,0,
-    0,0,40,2,0,0,0,114,215,0,0,0,114,161,0,0,
+    0,0,114,77,0,0,0,131,4,0,0,115,4,0,0,0,
+    0,1,9,1,122,28,69,120,116,101,110,115,105,111,110,70,
+    105,108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,
+    95,95,99,2,0,0,0,0,0,0,0,3,0,0,0,11,
+    0,0,0,67,0,0,0,115,126,0,0,0,116,0,0,124,
+    1,0,131,1,0,143,108,0,1,116,1,0,116,2,0,106,
+    3,0,124,1,0,124,0,0,106,4,0,131,3,0,125,2,
+    0,116,5,0,100,1,0,124,0,0,106,4,0,131,2,0,
+    1,124,0,0,106,6,0,124,1,0,131,1,0,114,112,0,
+    116,7,0,124,2,0,100,2,0,131,2,0,12,114,112,0,
+    116,8,0,124,0,0,106,4,0,131,1,0,100,3,0,25,
+    103,1,0,124,2,0,95,9,0,110,0,0,124,2,0,83,
+    87,100,4,0,81,88,100,4,0,83,41,5,122,25,76,111,
+    97,100,32,97,110,32,101,120,116,101,110,115,105,111,110,32,
+    109,111,100,117,108,101,46,122,33,101,120,116,101,110,115,105,
+    111,110,32,109,111,100,117,108,101,32,108,111,97,100,101,100,
+    32,102,114,111,109,32,123,33,114,125,114,160,0,0,0,114,
+    68,0,0,0,78,41,10,114,139,0,0,0,114,100,0,0,
+    0,114,95,0,0,0,90,12,108,111,97,100,95,100,121,110,
+    97,109,105,99,114,35,0,0,0,114,138,0,0,0,114,157,
+    0,0,0,114,60,0,0,0,114,38,0,0,0,114,160,0,
+    0,0,41,3,114,76,0,0,0,114,179,0,0,0,114,162,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,114,219,0,0,0,135,4,0,0,115,14,0,0,0,
+    0,5,13,1,9,1,15,1,16,1,31,1,28,1,122,31,
+    69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
+    100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,
+    2,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,
+    3,0,0,0,115,48,0,0,0,116,0,0,124,0,0,106,
+    1,0,131,1,0,100,1,0,25,137,0,0,116,2,0,135,
+    0,0,102,1,0,100,2,0,100,3,0,134,0,0,116,3,
+    0,68,131,1,0,131,1,0,83,41,4,122,49,82,101,116,
+    117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,32,
+    101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,
+    32,105,115,32,97,32,112,97,99,107,97,103,101,46,114,29,
+    0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,
+    4,0,0,0,51,0,0,0,115,31,0,0,0,124,0,0,
+    93,21,0,125,1,0,136,0,0,100,0,0,124,1,0,23,
+    107,2,0,86,1,113,3,0,100,1,0,83,41,2,114,77,
+    0,0,0,78,114,4,0,0,0,41,2,114,22,0,0,0,
+    218,6,115,117,102,102,105,120,41,1,218,9,102,105,108,101,
+    95,110,97,109,101,114,4,0,0,0,114,5,0,0,0,114,
+    144,0,0,0,151,4,0,0,115,2,0,0,0,6,1,122,
+    49,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
+    97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,46,
+    60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,
+    114,62,41,4,114,38,0,0,0,114,35,0,0,0,114,145,
+    0,0,0,218,18,69,88,84,69,78,83,73,79,78,95,83,
+    85,70,70,73,88,69,83,41,2,114,76,0,0,0,114,179,
+    0,0,0,114,4,0,0,0,41,1,114,11,1,0,0,114,
+    5,0,0,0,114,157,0,0,0,148,4,0,0,115,6,0,
+    0,0,0,2,19,1,18,1,122,30,69,120,116,101,110,115,
+    105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,
+    95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,
+    0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
+    0,0,100,1,0,83,41,2,122,63,82,101,116,117,114,110,
+    32,78,111,110,101,32,97,115,32,97,110,32,101,120,116,101,
+    110,115,105,111,110,32,109,111,100,117,108,101,32,99,97,110,
+    110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,100,
+    101,32,111,98,106,101,99,116,46,78,114,4,0,0,0,41,
+    2,114,76,0,0,0,114,179,0,0,0,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,114,220,0,0,0,154,
+    4,0,0,115,2,0,0,0,0,2,122,28,69,120,116,101,
+    110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,
+    103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,
+    0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
+    0,0,100,1,0,83,41,2,122,53,82,101,116,117,114,110,
+    32,78,111,110,101,32,97,115,32,101,120,116,101,110,115,105,
+    111,110,32,109,111,100,117,108,101,115,32,104,97,118,101,32,
+    110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78,
+    114,4,0,0,0,41,2,114,76,0,0,0,114,179,0,0,
     0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    114,216,0,0,0,215,4,0,0,115,2,0,0,0,0,2,
-    117,27,0,0,0,78,97,109,101,115,112,97,99,101,76,111,
-    97,100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,
+    114,221,0,0,0,158,4,0,0,115,2,0,0,0,0,2,
+    122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76,
+    111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,
     99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
-    0,67,0,0,0,115,4,0,0,0,100,1,0,83,40,2,
-    0,0,0,78,84,114,4,0,0,0,40,2,0,0,0,114,
-    75,0,0,0,114,178,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,114,156,0,0,0,219,4,0,
-    0,115,2,0,0,0,0,1,117,26,0,0,0,78,97,109,
-    101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,95,
-    112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0,
-    2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,
-    0,100,1,0,83,40,2,0,0,0,78,114,30,0,0,0,
-    114,4,0,0,0,40,2,0,0,0,114,75,0,0,0,114,
-    178,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,220,0,0,0,222,4,0,0,115,2,0,0,
-    0,0,1,117,26,0,0,0,78,97,109,101,115,112,97,99,
-    101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,
-    99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,6,
-    0,0,0,67,0,0,0,115,22,0,0,0,116,0,0,100,
-    1,0,100,2,0,100,3,0,100,4,0,100,5,0,131,3,
-    1,83,40,6,0,0,0,78,114,30,0,0,0,117,8,0,
-    0,0,60,115,116,114,105,110,103,62,114,240,0,0,0,114,
-    250,0,0,0,84,40,1,0,0,0,114,251,0,0,0,40,
-    2,0,0,0,114,75,0,0,0,114,178,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,219,0,
-    0,0,225,4,0,0,115,2,0,0,0,0,1,117,24,0,
-    0,0,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
-    114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,
-    0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,
-    25,0,0,0,124,0,0,124,1,0,95,0,0,124,1,0,
-    106,1,0,124,1,0,95,2,0,100,0,0,83,40,1,0,
-    0,0,78,40,3,0,0,0,114,171,0,0,0,114,56,0,
-    0,0,114,158,0,0,0,40,2,0,0,0,114,75,0,0,
-    0,114,161,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,239,0,0,0,228,4,0,0,115,4,
-    0,0,0,0,1,9,1,117,33,0,0,0,78,97,109,101,
-    115,112,97,99,101,76,111,97,100,101,114,46,105,110,105,116,
-    95,109,111,100,117,108,101,95,97,116,116,114,115,99,2,0,
-    0,0,0,0,0,0,3,0,0,0,9,0,0,0,67,0,
-    0,0,115,70,0,0,0,116,0,0,100,1,0,124,0,0,
-    106,1,0,131,2,0,1,116,2,0,124,1,0,131,1,0,
-    143,36,0,125,2,0,124,0,0,106,3,0,124,2,0,131,
-    1,0,1,124,0,0,106,1,0,124,2,0,95,4,0,124,
-    2,0,83,87,100,2,0,81,88,100,2,0,83,40,3,0,
-    0,0,117,24,0,0,0,76,111,97,100,32,97,32,110,97,
-    109,101,115,112,97,99,101,32,109,111,100,117,108,101,46,117,
-    38,0,0,0,110,97,109,101,115,112,97,99,101,32,109,111,
-    100,117,108,101,32,108,111,97,100,101,100,32,119,105,116,104,
-    32,112,97,116,104,32,123,33,114,125,78,40,5,0,0,0,
-    114,137,0,0,0,114,13,1,0,0,114,155,0,0,0,114,
-    239,0,0,0,114,159,0,0,0,40,3,0,0,0,114,75,
-    0,0,0,114,178,0,0,0,114,161,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,114,218,0,0,
-    0,232,4,0,0,115,10,0,0,0,0,2,16,1,15,1,
-    13,1,12,1,117,27,0,0,0,78,97,109,101,115,112,97,
-    99,101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,
-    100,117,108,101,78,40,11,0,0,0,114,56,0,0,0,114,
-    55,0,0,0,114,57,0,0,0,114,76,0,0,0,114,221,
-    0,0,0,114,216,0,0,0,114,156,0,0,0,114,220,0,
-    0,0,114,219,0,0,0,114,239,0,0,0,114,218,0,0,
-    0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,26,1,0,0,211,4,0,0,115,14,
-    0,0,0,12,1,12,3,18,4,12,3,12,3,12,3,12,
-    4,114,26,1,0,0,99,0,0,0,0,0,0,0,0,0,
-    0,0,0,4,0,0,0,64,0,0,0,115,115,0,0,0,
-    101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,
-    3,0,101,4,0,100,2,0,100,3,0,132,0,0,131,1,
-    0,90,5,0,101,4,0,100,4,0,100,5,0,132,0,0,
-    131,1,0,90,6,0,101,4,0,100,6,0,100,7,0,132,
-    0,0,131,1,0,90,7,0,101,4,0,100,8,0,100,9,
-    0,132,0,0,131,1,0,90,8,0,101,4,0,100,10,0,
-    100,11,0,100,12,0,132,1,0,131,1,0,90,9,0,100,
-    10,0,83,40,13,0,0,0,244,10,0,0,0,80,97,116,
-    104,70,105,110,100,101,114,117,62,0,0,0,77,101,116,97,
-    32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,114,
-    32,115,121,115,46,112,97,116,104,32,97,110,100,32,112,97,
-    99,107,97,103,101,32,95,95,112,97,116,104,95,95,32,97,
-    116,116,114,105,98,117,116,101,115,46,99,1,0,0,0,0,
-    0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,
-    58,0,0,0,120,51,0,116,0,0,106,1,0,106,2,0,
-    131,0,0,68,93,34,0,125,1,0,116,3,0,124,1,0,
-    100,1,0,131,2,0,114,16,0,124,1,0,106,4,0,131,
-    0,0,1,113,16,0,113,16,0,87,100,2,0,83,40,3,
-    0,0,0,117,125,0,0,0,67,97,108,108,32,116,104,101,
-    32,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,
-    101,115,40,41,32,109,101,116,104,111,100,32,111,110,32,97,
-    108,108,32,112,97,116,104,32,101,110,116,114,121,32,102,105,
-    110,100,101,114,115,10,32,32,32,32,32,32,32,32,115,116,
-    111,114,101,100,32,105,110,32,115,121,115,46,112,97,116,104,
-    95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,115,
-    32,40,119,104,101,114,101,32,105,109,112,108,101,109,101,110,
-    116,101,100,41,46,244,17,0,0,0,105,110,118,97,108,105,
-    100,97,116,101,95,99,97,99,104,101,115,78,40,5,0,0,
-    0,114,7,0,0,0,244,19,0,0,0,112,97,116,104,95,
-    105,109,112,111,114,116,101,114,95,99,97,99,104,101,244,6,
-    0,0,0,118,97,108,117,101,115,114,59,0,0,0,114,28,
-    1,0,0,40,2,0,0,0,114,215,0,0,0,244,6,0,
-    0,0,102,105,110,100,101,114,114,4,0,0,0,114,4,0,
-    0,0,114,5,0,0,0,114,28,1,0,0,247,4,0,0,
-    115,6,0,0,0,0,4,22,1,15,1,117,28,0,0,0,
-    80,97,116,104,70,105,110,100,101,114,46,105,110,118,97,108,
-    105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,0,
-    0,0,0,0,0,3,0,0,0,12,0,0,0,67,0,0,
-    0,115,94,0,0,0,116,0,0,106,1,0,115,28,0,116,
-    2,0,106,3,0,100,1,0,116,4,0,131,2,0,1,110,
-    0,0,120,59,0,116,0,0,106,1,0,68,93,44,0,125,
-    2,0,121,14,0,124,2,0,124,1,0,131,1,0,83,87,
-    113,38,0,4,116,5,0,107,10,0,114,81,0,1,1,1,
-    119,38,0,89,113,38,0,88,113,38,0,87,100,2,0,83,
-    100,2,0,83,40,3,0,0,0,117,113,0,0,0,83,101,
-    97,114,99,104,32,115,101,113,117,101,110,99,101,32,111,102,
-    32,104,111,111,107,115,32,102,111,114,32,97,32,102,105,110,
-    100,101,114,32,102,111,114,32,39,112,97,116,104,39,46,10,
-    10,32,32,32,32,32,32,32,32,73,102,32,39,104,111,111,
-    107,115,39,32,105,115,32,102,97,108,115,101,32,116,104,101,
-    110,32,117,115,101,32,115,121,115,46,112,97,116,104,95,104,
-    111,111,107,115,46,10,10,32,32,32,32,32,32,32,32,117,
-    23,0,0,0,115,121,115,46,112,97,116,104,95,104,111,111,
-    107,115,32,105,115,32,101,109,112,116,121,78,40,6,0,0,
-    0,114,7,0,0,0,244,10,0,0,0,112,97,116,104,95,
-    104,111,111,107,115,114,185,0,0,0,114,186,0,0,0,114,
-    187,0,0,0,114,157,0,0,0,40,3,0,0,0,114,215,
-    0,0,0,114,35,0,0,0,116,4,0,0,0,104,111,111,
-    107,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    244,11,0,0,0,95,112,97,116,104,95,104,111,111,107,115,
-    255,4,0,0,115,16,0,0,0,0,7,9,1,19,1,16,
-    1,3,1,14,1,13,1,12,2,117,22,0,0,0,80,97,
-    116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,
-    111,111,107,115,99,2,0,0,0,0,0,0,0,3,0,0,
-    0,11,0,0,0,67,0,0,0,115,91,0,0,0,124,1,
-    0,100,1,0,107,2,0,114,21,0,100,2,0,125,1,0,
-    110,0,0,121,17,0,116,0,0,106,1,0,124,1,0,25,
-    125,2,0,87,110,46,0,4,116,2,0,107,10,0,114,86,
-    0,1,1,1,124,0,0,106,3,0,124,1,0,131,1,0,
-    125,2,0,124,2,0,116,0,0,106,1,0,124,1,0,60,
-    89,110,1,0,88,124,2,0,83,40,3,0,0,0,117,210,
-    0,0,0,71,101,116,32,116,104,101,32,102,105,110,100,101,
-    114,32,102,111,114,32,116,104,101,32,112,97,116,104,32,101,
-    110,116,114,121,32,102,114,111,109,32,115,121,115,46,112,97,
-    116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,
-    101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,116,
-    104,101,32,112,97,116,104,32,101,110,116,114,121,32,105,115,
-    32,110,111,116,32,105,110,32,116,104,101,32,99,97,99,104,
-    101,44,32,102,105,110,100,32,116,104,101,32,97,112,112,114,
-    111,112,114,105,97,116,101,32,102,105,110,100,101,114,10,32,
-    32,32,32,32,32,32,32,97,110,100,32,99,97,99,104,101,
-    32,105,116,46,32,73,102,32,110,111,32,102,105,110,100,101,
-    114,32,105,115,32,97,118,97,105,108,97,98,108,101,44,32,
-    115,116,111,114,101,32,78,111,110,101,46,10,10,32,32,32,
-    32,32,32,32,32,114,30,0,0,0,114,101,0,0,0,40,
-    4,0,0,0,114,7,0,0,0,114,29,1,0,0,114,91,
-    0,0,0,114,33,1,0,0,40,3,0,0,0,114,215,0,
-    0,0,114,35,0,0,0,114,31,1,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,244,20,0,0,0,
-    95,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,
-    97,99,104,101,16,5,0,0,115,16,0,0,0,0,8,12,
-    1,9,1,3,1,17,1,13,1,15,1,18,1,117,31,0,
-    0,0,80,97,116,104,70,105,110,100,101,114,46,95,112,97,
-    116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,
-    101,99,3,0,0,0,0,0,0,0,8,0,0,0,5,0,
-    0,0,67,0,0,0,115,189,0,0,0,103,0,0,125,3,
-    0,120,176,0,124,2,0,68,93,158,0,125,4,0,116,0,
-    0,124,4,0,116,1,0,116,2,0,102,2,0,131,2,0,
-    115,46,0,113,13,0,110,0,0,124,0,0,106,3,0,124,
-    4,0,131,1,0,125,5,0,124,5,0,100,1,0,107,9,
-    0,114,13,0,116,4,0,124,5,0,100,2,0,131,2,0,
-    114,112,0,124,5,0,106,5,0,124,1,0,131,1,0,92,
-    2,0,125,6,0,125,7,0,110,21,0,124,5,0,106,6,
-    0,124,1,0,131,1,0,125,6,0,103,0,0,125,7,0,
-    124,6,0,100,1,0,107,9,0,114,155,0,124,6,0,124,
-    3,0,102,2,0,83,124,3,0,106,7,0,124,7,0,131,
-    1,0,1,113,13,0,113,13,0,87,100,1,0,124,3,0,
-    102,2,0,83,100,1,0,83,40,3,0,0,0,117,63,0,
-    0,0,70,105,110,100,32,116,104,101,32,108,111,97,100,101,
-    114,32,111,114,32,110,97,109,101,115,112,97,99,101,95,112,
-    97,116,104,32,102,111,114,32,116,104,105,115,32,109,111,100,
-    117,108,101,47,112,97,99,107,97,103,101,32,110,97,109,101,
-    46,78,114,184,0,0,0,40,8,0,0,0,114,202,0,0,
-    0,244,3,0,0,0,115,116,114,244,5,0,0,0,98,121,
-    116,101,115,114,34,1,0,0,114,59,0,0,0,114,184,0,
-    0,0,114,217,0,0,0,114,207,0,0,0,40,8,0,0,
-    0,114,215,0,0,0,114,178,0,0,0,114,35,0,0,0,
-    244,14,0,0,0,110,97,109,101,115,112,97,99,101,95,112,
-    97,116,104,116,5,0,0,0,101,110,116,114,121,114,31,1,
-    0,0,114,160,0,0,0,114,188,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,244,11,0,0,0,
-    95,103,101,116,95,108,111,97,100,101,114,33,5,0,0,115,
-    28,0,0,0,0,5,6,1,13,1,21,1,6,1,15,1,
-    12,1,15,1,24,2,15,1,6,1,12,2,10,5,20,2,
-    117,22,0,0,0,80,97,116,104,70,105,110,100,101,114,46,
-    95,103,101,116,95,108,111,97,100,101,114,78,99,3,0,0,
-    0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,
-    0,115,97,0,0,0,124,2,0,100,1,0,107,8,0,114,
-    24,0,116,0,0,106,1,0,125,2,0,110,0,0,124,0,
-    0,106,2,0,124,1,0,124,2,0,131,2,0,92,2,0,
-    125,3,0,125,4,0,124,3,0,100,1,0,107,9,0,114,
-    64,0,124,3,0,83,124,4,0,114,89,0,116,3,0,124,
-    1,0,124,4,0,124,0,0,106,2,0,131,3,0,83,100,
-    1,0,83,100,1,0,83,40,2,0,0,0,117,98,0,0,
-    0,70,105,110,100,32,116,104,101,32,109,111,100,117,108,101,
-    32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32,
-    39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32,
-    115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97,
-    110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112,
-    97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,
-    104,101,46,78,40,4,0,0,0,114,7,0,0,0,114,35,
-    0,0,0,114,38,1,0,0,114,26,1,0,0,40,5,0,
-    0,0,114,215,0,0,0,114,178,0,0,0,114,35,0,0,
-    0,114,160,0,0,0,114,37,1,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,114,217,0,0,0,60,
-    5,0,0,115,16,0,0,0,0,4,12,1,12,1,24,1,
-    12,1,4,2,6,3,19,2,117,22,0,0,0,80,97,116,
-    104,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,
-    117,108,101,40,10,0,0,0,114,56,0,0,0,114,55,0,
-    0,0,114,57,0,0,0,114,58,0,0,0,114,221,0,0,
-    0,114,28,1,0,0,114,33,1,0,0,114,34,1,0,0,
-    114,38,1,0,0,114,217,0,0,0,114,4,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,27,
-    1,0,0,243,4,0,0,115,14,0,0,0,12,2,6,2,
-    18,8,18,17,18,17,18,27,3,1,114,27,1,0,0,99,
+    0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0,
+    83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32,
+    112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114,
+    99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100,
+    32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41,
+    1,114,35,0,0,0,41,2,114,76,0,0,0,114,179,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,164,0,0,0,162,4,0,0,115,2,0,0,0,0,
+    3,122,32,69,120,116,101,110,115,105,111,110,70,105,108,101,
+    76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,
+    97,109,101,78,41,13,114,57,0,0,0,114,56,0,0,0,
+    114,58,0,0,0,114,59,0,0,0,114,77,0,0,0,114,
+    177,0,0,0,114,171,0,0,0,114,174,0,0,0,114,219,
+    0,0,0,114,157,0,0,0,114,220,0,0,0,114,221,0,
+    0,0,114,164,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,114,9,1,0,0,
+    123,4,0,0,115,18,0,0,0,12,6,6,2,12,4,3,
+    1,3,1,24,11,12,6,12,4,12,4,114,9,1,0,0,
+    99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+    0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0,
+    100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,
+    3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,
+    0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,
+    100,8,0,100,9,0,132,0,0,90,7,0,100,10,0,100,
+    11,0,132,0,0,90,8,0,100,12,0,100,13,0,132,0,
+    0,90,9,0,100,14,0,100,15,0,132,0,0,90,10,0,
+    100,16,0,100,17,0,132,0,0,90,11,0,100,18,0,100,
+    19,0,132,0,0,90,12,0,100,20,0,83,41,21,218,14,
+    95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,38,
+    1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,32,
+    110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103,
+    101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,115,
+    101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,
+    109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,105,
+    116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,101,
+    44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,101,
+    32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,101,
+    32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,95,
+    112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,104,
+    105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,32,
+    109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,116,
+    104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,44,
+    10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,95,
+    102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,112,
+    45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,32,
+    116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,108,
+    101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,32,
+    115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,0,
+    0,0,4,0,0,0,2,0,0,0,67,0,0,0,115,52,
+    0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124,
+    0,0,95,1,0,116,2,0,124,0,0,106,3,0,131,0,
+    0,131,1,0,124,0,0,95,4,0,124,3,0,124,0,0,
+    95,5,0,100,0,0,83,41,1,78,41,6,114,140,0,0,
+    0,218,5,95,112,97,116,104,114,237,0,0,0,218,16,95,
+    103,101,116,95,112,97,114,101,110,116,95,112,97,116,104,218,
+    17,95,108,97,115,116,95,112,97,114,101,110,116,95,112,97,
+    116,104,218,12,95,112,97,116,104,95,102,105,110,100,101,114,
+    41,4,114,76,0,0,0,114,72,0,0,0,114,35,0,0,
+    0,218,11,112,97,116,104,95,102,105,110,100,101,114,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,77,0,
+    0,0,175,4,0,0,115,8,0,0,0,0,1,9,1,9,
+    1,21,1,122,23,95,78,97,109,101,115,112,97,99,101,80,
+    97,116,104,46,95,95,105,110,105,116,95,95,99,1,0,0,
+    0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0,
+    0,115,53,0,0,0,124,0,0,106,0,0,106,1,0,100,
+    1,0,131,1,0,92,3,0,125,1,0,125,2,0,125,3,
+    0,124,2,0,100,2,0,107,2,0,114,43,0,100,6,0,
+    83,124,1,0,100,5,0,102,2,0,83,41,7,122,62,82,
+    101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,111,
+    102,32,40,112,97,114,101,110,116,45,109,111,100,117,108,101,
+    45,110,97,109,101,44,32,112,97,114,101,110,116,45,112,97,
+    116,104,45,97,116,116,114,45,110,97,109,101,41,114,102,0,
+    0,0,114,30,0,0,0,114,7,0,0,0,114,35,0,0,
+    0,114,160,0,0,0,41,2,122,3,115,121,115,122,4,112,
+    97,116,104,41,2,114,140,0,0,0,114,32,0,0,0,41,
+    4,114,76,0,0,0,114,7,1,0,0,218,3,100,111,116,
+    114,81,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
+    5,0,0,0,218,23,95,102,105,110,100,95,112,97,114,101,
+    110,116,95,112,97,116,104,95,110,97,109,101,115,181,4,0,
+    0,115,8,0,0,0,0,2,27,1,12,2,4,3,122,38,
+    95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,
+    102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,
+    95,110,97,109,101,115,99,1,0,0,0,0,0,0,0,3,
+    0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,
+    124,0,0,106,0,0,131,0,0,92,2,0,125,1,0,125,
+    2,0,116,1,0,116,2,0,106,3,0,124,1,0,25,124,
+    2,0,131,2,0,83,41,1,78,41,4,114,20,1,0,0,
+    114,62,0,0,0,114,7,0,0,0,114,141,0,0,0,41,
+    3,114,76,0,0,0,90,18,112,97,114,101,110,116,95,109,
+    111,100,117,108,101,95,110,97,109,101,90,14,112,97,116,104,
+    95,97,116,116,114,95,110,97,109,101,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,114,15,1,0,0,191,4,
+    0,0,115,4,0,0,0,0,1,18,1,122,31,95,78,97,
+    109,101,115,112,97,99,101,80,97,116,104,46,95,103,101,116,
+    95,112,97,114,101,110,116,95,112,97,116,104,99,1,0,0,
+    0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0,
+    0,115,103,0,0,0,116,0,0,124,0,0,106,1,0,131,
+    0,0,131,1,0,125,1,0,124,1,0,124,0,0,106,2,
+    0,107,3,0,114,96,0,124,0,0,106,3,0,124,0,0,
+    106,4,0,124,1,0,131,2,0,92,2,0,125,2,0,125,
+    3,0,124,2,0,100,0,0,107,8,0,114,84,0,124,3,
+    0,124,0,0,95,5,0,110,0,0,124,1,0,124,0,0,
+    95,2,0,110,0,0,124,0,0,106,5,0,83,41,1,78,
+    41,6,114,237,0,0,0,114,15,1,0,0,114,16,1,0,
+    0,114,17,1,0,0,114,140,0,0,0,114,14,1,0,0,
+    41,4,114,76,0,0,0,90,11,112,97,114,101,110,116,95,
+    112,97,116,104,114,161,0,0,0,90,8,110,101,119,95,112,
+    97,116,104,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,218,12,95,114,101,99,97,108,99,117,108,97,116,101,
+    195,4,0,0,115,14,0,0,0,0,2,18,1,15,1,27,
+    3,12,1,12,1,12,1,122,27,95,78,97,109,101,115,112,
+    97,99,101,80,97,116,104,46,95,114,101,99,97,108,99,117,
+    108,97,116,101,99,1,0,0,0,0,0,0,0,1,0,0,
+    0,2,0,0,0,67,0,0,0,115,16,0,0,0,116,0,
+    0,124,0,0,106,1,0,131,0,0,131,1,0,83,41,1,
+    78,41,2,218,4,105,116,101,114,114,21,1,0,0,41,1,
+    114,76,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
+    5,0,0,0,218,8,95,95,105,116,101,114,95,95,207,4,
+    0,0,115,2,0,0,0,0,1,122,23,95,78,97,109,101,
+    115,112,97,99,101,80,97,116,104,46,95,95,105,116,101,114,
+    95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2,
+    0,0,0,67,0,0,0,115,16,0,0,0,116,0,0,124,
+    0,0,106,1,0,131,0,0,131,1,0,83,41,1,78,41,
+    2,114,31,0,0,0,114,21,1,0,0,41,1,114,76,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,218,7,95,95,108,101,110,95,95,210,4,0,0,115,2,
+    0,0,0,0,1,122,22,95,78,97,109,101,115,112,97,99,
+    101,80,97,116,104,46,95,95,108,101,110,95,95,99,1,0,
+    0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,
+    0,0,115,16,0,0,0,100,1,0,106,0,0,124,0,0,
+    106,1,0,131,1,0,83,41,2,78,122,20,95,78,97,109,
+    101,115,112,97,99,101,80,97,116,104,40,123,33,114,125,41,
+    41,2,114,47,0,0,0,114,14,1,0,0,41,1,114,76,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,114,88,0,0,0,213,4,0,0,115,2,0,0,0,
+    0,1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,
+    116,104,46,95,95,114,101,112,114,95,95,99,2,0,0,0,
+    0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,
+    115,16,0,0,0,124,1,0,124,0,0,106,0,0,131,0,
+    0,107,6,0,83,41,1,78,41,1,114,21,1,0,0,41,
+    2,114,76,0,0,0,218,4,105,116,101,109,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,218,12,95,95,99,
+    111,110,116,97,105,110,115,95,95,216,4,0,0,115,2,0,
+    0,0,0,1,122,27,95,78,97,109,101,115,112,97,99,101,
+    80,97,116,104,46,95,95,99,111,110,116,97,105,110,115,95,
+    95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,
+    0,0,67,0,0,0,115,20,0,0,0,124,0,0,106,0,
+    0,106,1,0,124,1,0,131,1,0,1,100,0,0,83,41,
+    1,78,41,2,114,14,1,0,0,114,166,0,0,0,41,2,
+    114,76,0,0,0,114,25,1,0,0,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,114,166,0,0,0,219,4,
+    0,0,115,2,0,0,0,0,1,122,21,95,78,97,109,101,
+    115,112,97,99,101,80,97,116,104,46,97,112,112,101,110,100,
+    78,41,13,114,57,0,0,0,114,56,0,0,0,114,58,0,
+    0,0,114,59,0,0,0,114,77,0,0,0,114,20,1,0,
+    0,114,15,1,0,0,114,21,1,0,0,114,23,1,0,0,
+    114,24,1,0,0,114,88,0,0,0,114,26,1,0,0,114,
+    166,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,114,13,1,0,0,168,4,0,
+    0,115,20,0,0,0,12,5,6,2,12,6,12,10,12,4,
+    12,12,12,3,12,3,12,3,12,3,114,13,1,0,0,99,
     0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
     64,0,0,0,115,106,0,0,0,101,0,0,90,1,0,100,
-    0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,
-    0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,
-    90,5,0,101,6,0,90,7,0,100,6,0,100,7,0,132,
-    0,0,90,8,0,100,8,0,100,9,0,132,0,0,90,9,
-    0,101,10,0,100,10,0,100,11,0,132,0,0,131,1,0,
-    90,11,0,100,12,0,100,13,0,132,0,0,90,12,0,100,
-    14,0,83,40,15,0,0,0,244,10,0,0,0,70,105,108,
-    101,70,105,110,100,101,114,117,172,0,0,0,70,105,108,101,
-    45,98,97,115,101,100,32,102,105,110,100,101,114,46,10,10,
-    32,32,32,32,73,110,116,101,114,97,99,116,105,111,110,115,
-    32,119,105,116,104,32,116,104,101,32,102,105,108,101,32,115,
-    121,115,116,101,109,32,97,114,101,32,99,97,99,104,101,100,
-    32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,
-    44,32,98,101,105,110,103,10,32,32,32,32,114,101,102,114,
-    101,115,104,101,100,32,119,104,101,110,32,116,104,101,32,100,
-    105,114,101,99,116,111,114,121,32,116,104,101,32,102,105,110,
-    100,101,114,32,105,115,32,104,97,110,100,108,105,110,103,32,
-    104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,
-    100,46,10,10,32,32,32,32,99,2,0,0,0,0,0,0,
-    0,5,0,0,0,5,0,0,0,7,0,0,0,115,122,0,
-    0,0,103,0,0,125,3,0,120,52,0,124,2,0,68,93,
-    44,0,92,2,0,137,0,0,125,4,0,124,3,0,106,0,
-    0,135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,
-    124,4,0,68,131,1,0,131,1,0,1,113,13,0,87,124,
-    3,0,124,0,0,95,1,0,124,1,0,112,79,0,100,3,
-    0,124,0,0,95,2,0,100,6,0,124,0,0,95,3,0,
-    116,4,0,131,0,0,124,0,0,95,5,0,116,4,0,131,
-    0,0,124,0,0,95,6,0,100,5,0,83,40,7,0,0,
-    0,117,154,0,0,0,73,110,105,116,105,97,108,105,122,101,
-    32,119,105,116,104,32,116,104,101,32,112,97,116,104,32,116,
-    111,32,115,101,97,114,99,104,32,111,110,32,97,110,100,32,
-    97,32,118,97,114,105,97,98,108,101,32,110,117,109,98,101,
-    114,32,111,102,10,32,32,32,32,32,32,32,32,50,45,116,
-    117,112,108,101,115,32,99,111,110,116,97,105,110,105,110,103,
-    32,116,104,101,32,108,111,97,100,101,114,32,97,110,100,32,
-    116,104,101,32,102,105,108,101,32,115,117,102,102,105,120,101,
-    115,32,116,104,101,32,108,111,97,100,101,114,10,32,32,32,
-    32,32,32,32,32,114,101,99,111,103,110,105,122,101,115,46,
-    99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,
-    0,51,0,0,0,115,27,0,0,0,124,0,0,93,17,0,
-    125,1,0,124,1,0,136,0,0,102,2,0,86,1,113,3,
-    0,100,0,0,83,40,1,0,0,0,78,114,4,0,0,0,
-    40,2,0,0,0,114,22,0,0,0,114,9,1,0,0,40,
-    1,0,0,0,114,160,0,0,0,114,4,0,0,0,114,5,
-    0,0,0,114,143,0,0,0,93,5,0,0,115,2,0,0,
-    0,6,0,117,38,0,0,0,70,105,108,101,70,105,110,100,
+    0,0,90,2,0,100,1,0,100,2,0,132,0,0,90,3,
+    0,101,4,0,100,3,0,100,4,0,132,0,0,131,1,0,
+    90,5,0,100,5,0,100,6,0,132,0,0,90,6,0,100,
+    7,0,100,8,0,132,0,0,90,7,0,100,9,0,100,10,
+    0,132,0,0,90,8,0,100,11,0,100,12,0,132,0,0,
+    90,9,0,100,13,0,100,14,0,132,0,0,90,10,0,100,
+    15,0,83,41,16,218,15,78,97,109,101,115,112,97,99,101,
+    76,111,97,100,101,114,99,4,0,0,0,0,0,0,0,4,
+    0,0,0,4,0,0,0,67,0,0,0,115,25,0,0,0,
+    116,0,0,124,1,0,124,2,0,124,3,0,131,3,0,124,
+    0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,13,
+    1,0,0,114,14,1,0,0,41,4,114,76,0,0,0,114,
+    72,0,0,0,114,35,0,0,0,114,18,1,0,0,114,4,
+    0,0,0,114,4,0,0,0,114,5,0,0,0,114,77,0,
+    0,0,224,4,0,0,115,2,0,0,0,0,1,122,24,78,
+    97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,95,
+    95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,
+    2,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,
+    0,100,1,0,106,0,0,124,1,0,106,1,0,131,1,0,
+    83,41,2,78,122,25,60,109,111,100,117,108,101,32,123,33,
+    114,125,32,40,110,97,109,101,115,112,97,99,101,41,62,41,
+    2,114,47,0,0,0,114,57,0,0,0,41,2,114,216,0,
+    0,0,114,162,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,5,0,0,0,114,217,0,0,0,227,4,0,0,115,
+    2,0,0,0,0,2,122,27,78,97,109,101,115,112,97,99,
+    101,76,111,97,100,101,114,46,109,111,100,117,108,101,95,114,
+    101,112,114,99,2,0,0,0,0,0,0,0,2,0,0,0,
+    1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,
+    83,41,2,78,84,114,4,0,0,0,41,2,114,76,0,0,
+    0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,157,0,0,0,231,4,0,0,115,2,
+    0,0,0,0,1,122,26,78,97,109,101,115,112,97,99,101,
+    76,111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,
+    101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,
+    0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,
+    2,78,114,30,0,0,0,114,4,0,0,0,41,2,114,76,
+    0,0,0,114,179,0,0,0,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,221,0,0,0,234,4,0,0,
+    115,2,0,0,0,0,1,122,26,78,97,109,101,115,112,97,
+    99,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,
+    114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,
+    6,0,0,0,67,0,0,0,115,22,0,0,0,116,0,0,
+    100,1,0,100,2,0,100,3,0,100,4,0,100,5,0,131,
+    3,1,83,41,6,78,114,30,0,0,0,122,8,60,115,116,
+    114,105,110,103,62,114,241,0,0,0,114,251,0,0,0,84,
+    41,1,114,252,0,0,0,41,2,114,76,0,0,0,114,179,
+    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,114,220,0,0,0,237,4,0,0,115,2,0,0,0,
+    0,1,122,24,78,97,109,101,115,112,97,99,101,76,111,97,
+    100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,
+    0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,
+    0,115,25,0,0,0,124,0,0,124,1,0,95,0,0,124,
+    1,0,106,1,0,124,1,0,95,2,0,100,0,0,83,41,
+    1,78,41,3,114,172,0,0,0,114,57,0,0,0,114,159,
+    0,0,0,41,2,114,76,0,0,0,114,162,0,0,0,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,240,
+    0,0,0,240,4,0,0,115,4,0,0,0,0,1,9,1,
+    122,33,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
+    114,46,105,110,105,116,95,109,111,100,117,108,101,95,97,116,
+    116,114,115,99,2,0,0,0,0,0,0,0,3,0,0,0,
+    9,0,0,0,67,0,0,0,115,70,0,0,0,116,0,0,
+    100,1,0,124,0,0,106,1,0,131,2,0,1,116,2,0,
+    124,1,0,131,1,0,143,36,0,125,2,0,124,0,0,106,
+    3,0,124,2,0,131,1,0,1,124,0,0,106,1,0,124,
+    2,0,95,4,0,124,2,0,83,87,100,2,0,81,88,100,
+    2,0,83,41,3,122,24,76,111,97,100,32,97,32,110,97,
+    109,101,115,112,97,99,101,32,109,111,100,117,108,101,46,122,
+    38,110,97,109,101,115,112,97,99,101,32,109,111,100,117,108,
+    101,32,108,111,97,100,101,100,32,119,105,116,104,32,112,97,
+    116,104,32,123,33,114,125,78,41,5,114,138,0,0,0,114,
+    14,1,0,0,114,156,0,0,0,114,240,0,0,0,114,160,
+    0,0,0,41,3,114,76,0,0,0,114,179,0,0,0,114,
+    162,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,219,0,0,0,244,4,0,0,115,10,0,0,
+    0,0,2,16,1,15,1,13,1,12,1,122,27,78,97,109,
+    101,115,112,97,99,101,76,111,97,100,101,114,46,108,111,97,
+    100,95,109,111,100,117,108,101,78,41,11,114,57,0,0,0,
+    114,56,0,0,0,114,58,0,0,0,114,77,0,0,0,114,
+    222,0,0,0,114,217,0,0,0,114,157,0,0,0,114,221,
+    0,0,0,114,220,0,0,0,114,240,0,0,0,114,219,0,
+    0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,5,0,0,0,114,27,1,0,0,223,4,0,0,115,
+    14,0,0,0,12,1,12,3,18,4,12,3,12,3,12,3,
+    12,4,114,27,1,0,0,99,0,0,0,0,0,0,0,0,
+    0,0,0,0,4,0,0,0,64,0,0,0,115,115,0,0,
+    0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,
+    90,3,0,101,4,0,100,2,0,100,3,0,132,0,0,131,
+    1,0,90,5,0,101,4,0,100,4,0,100,5,0,132,0,
+    0,131,1,0,90,6,0,101,4,0,100,6,0,100,7,0,
+    132,0,0,131,1,0,90,7,0,101,4,0,100,8,0,100,
+    9,0,132,0,0,131,1,0,90,8,0,101,4,0,100,10,
+    0,100,11,0,100,12,0,132,1,0,131,1,0,90,9,0,
+    100,10,0,83,41,13,218,10,80,97,116,104,70,105,110,100,
+    101,114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,
+    110,100,101,114,32,102,111,114,32,115,121,115,46,112,97,116,
+    104,32,97,110,100,32,112,97,99,107,97,103,101,32,95,95,
+    112,97,116,104,95,95,32,97,116,116,114,105,98,117,116,101,
+    115,46,99,1,0,0,0,0,0,0,0,2,0,0,0,4,
+    0,0,0,67,0,0,0,115,58,0,0,0,120,51,0,116,
+    0,0,106,1,0,106,2,0,131,0,0,68,93,34,0,125,
+    1,0,116,3,0,124,1,0,100,1,0,131,2,0,114,16,
+    0,124,1,0,106,4,0,131,0,0,1,113,16,0,113,16,
+    0,87,100,2,0,83,41,3,122,125,67,97,108,108,32,116,
+    104,101,32,105,110,118,97,108,105,100,97,116,101,95,99,97,
+    99,104,101,115,40,41,32,109,101,116,104,111,100,32,111,110,
+    32,97,108,108,32,112,97,116,104,32,101,110,116,114,121,32,
+    102,105,110,100,101,114,115,10,32,32,32,32,32,32,32,32,
+    115,116,111,114,101,100,32,105,110,32,115,121,115,46,112,97,
+    116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,
+    101,115,32,40,119,104,101,114,101,32,105,109,112,108,101,109,
+    101,110,116,101,100,41,46,218,17,105,110,118,97,108,105,100,
+    97,116,101,95,99,97,99,104,101,115,78,41,5,114,7,0,
+    0,0,218,19,112,97,116,104,95,105,109,112,111,114,116,101,
+    114,95,99,97,99,104,101,218,6,118,97,108,117,101,115,114,
+    60,0,0,0,114,29,1,0,0,41,2,114,216,0,0,0,
+    218,6,102,105,110,100,101,114,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,29,1,0,0,3,5,0,0,
+    115,6,0,0,0,0,4,22,1,15,1,122,28,80,97,116,
+    104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97,
+    116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0,
+    0,0,3,0,0,0,12,0,0,0,67,0,0,0,115,94,
+    0,0,0,116,0,0,106,1,0,115,28,0,116,2,0,106,
+    3,0,100,1,0,116,4,0,131,2,0,1,110,0,0,120,
+    59,0,116,0,0,106,1,0,68,93,44,0,125,2,0,121,
+    14,0,124,2,0,124,1,0,131,1,0,83,87,113,38,0,
+    4,116,5,0,107,10,0,114,81,0,1,1,1,119,38,0,
+    89,113,38,0,88,113,38,0,87,100,2,0,83,100,2,0,
+    83,41,3,122,113,83,101,97,114,99,104,32,115,101,113,117,
+    101,110,99,101,32,111,102,32,104,111,111,107,115,32,102,111,
+    114,32,97,32,102,105,110,100,101,114,32,102,111,114,32,39,
+    112,97,116,104,39,46,10,10,32,32,32,32,32,32,32,32,
+    73,102,32,39,104,111,111,107,115,39,32,105,115,32,102,97,
+    108,115,101,32,116,104,101,110,32,117,115,101,32,115,121,115,
+    46,112,97,116,104,95,104,111,111,107,115,46,10,10,32,32,
+    32,32,32,32,32,32,122,23,115,121,115,46,112,97,116,104,
+    95,104,111,111,107,115,32,105,115,32,101,109,112,116,121,78,
+    41,6,114,7,0,0,0,218,10,112,97,116,104,95,104,111,
+    111,107,115,114,186,0,0,0,114,187,0,0,0,114,188,0,
+    0,0,114,158,0,0,0,41,3,114,216,0,0,0,114,35,
+    0,0,0,90,4,104,111,111,107,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,218,11,95,112,97,116,104,95,
+    104,111,111,107,115,11,5,0,0,115,16,0,0,0,0,7,
+    9,1,19,1,16,1,3,1,14,1,13,1,12,2,122,22,
+    80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,
+    95,104,111,111,107,115,99,2,0,0,0,0,0,0,0,3,
+    0,0,0,11,0,0,0,67,0,0,0,115,97,0,0,0,
+    124,1,0,100,1,0,107,2,0,114,27,0,116,0,0,106,
+    1,0,131,0,0,125,1,0,110,0,0,121,17,0,116,2,
+    0,106,3,0,124,1,0,25,125,2,0,87,110,46,0,4,
+    116,4,0,107,10,0,114,92,0,1,1,1,124,0,0,106,
+    5,0,124,1,0,131,1,0,125,2,0,124,2,0,116,2,
+    0,106,3,0,124,1,0,60,89,110,1,0,88,124,2,0,
+    83,41,2,122,210,71,101,116,32,116,104,101,32,102,105,110,
+    100,101,114,32,102,111,114,32,116,104,101,32,112,97,116,104,
+    32,101,110,116,114,121,32,102,114,111,109,32,115,121,115,46,
+    112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,
+    99,104,101,46,10,10,32,32,32,32,32,32,32,32,73,102,
+    32,116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,
+    105,115,32,110,111,116,32,105,110,32,116,104,101,32,99,97,
+    99,104,101,44,32,102,105,110,100,32,116,104,101,32,97,112,
+    112,114,111,112,114,105,97,116,101,32,102,105,110,100,101,114,
+    10,32,32,32,32,32,32,32,32,97,110,100,32,99,97,99,
+    104,101,32,105,116,46,32,73,102,32,110,111,32,102,105,110,
+    100,101,114,32,105,115,32,97,118,97,105,108,97,98,108,101,
+    44,32,115,116,111,114,101,32,78,111,110,101,46,10,10,32,
+    32,32,32,32,32,32,32,114,30,0,0,0,41,6,114,3,
+    0,0,0,114,45,0,0,0,114,7,0,0,0,114,30,1,
+    0,0,114,92,0,0,0,114,34,1,0,0,41,3,114,216,
+    0,0,0,114,35,0,0,0,114,32,1,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,20,95,112,
+    97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,
+    104,101,28,5,0,0,115,16,0,0,0,0,8,12,1,15,
+    1,3,1,17,1,13,1,15,1,18,1,122,31,80,97,116,
+    104,70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,
+    112,111,114,116,101,114,95,99,97,99,104,101,99,3,0,0,
+    0,0,0,0,0,8,0,0,0,5,0,0,0,67,0,0,
+    0,115,189,0,0,0,103,0,0,125,3,0,120,176,0,124,
+    2,0,68,93,158,0,125,4,0,116,0,0,124,4,0,116,
+    1,0,116,2,0,102,2,0,131,2,0,115,46,0,113,13,
+    0,110,0,0,124,0,0,106,3,0,124,4,0,131,1,0,
+    125,5,0,124,5,0,100,1,0,107,9,0,114,13,0,116,
+    4,0,124,5,0,100,2,0,131,2,0,114,112,0,124,5,
+    0,106,5,0,124,1,0,131,1,0,92,2,0,125,6,0,
+    125,7,0,110,21,0,124,5,0,106,6,0,124,1,0,131,
+    1,0,125,6,0,103,0,0,125,7,0,124,6,0,100,1,
+    0,107,9,0,114,155,0,124,6,0,124,3,0,102,2,0,
+    83,124,3,0,106,7,0,124,7,0,131,1,0,1,113,13,
+    0,113,13,0,87,100,1,0,124,3,0,102,2,0,83,100,
+    1,0,83,41,3,122,63,70,105,110,100,32,116,104,101,32,
+    108,111,97,100,101,114,32,111,114,32,110,97,109,101,115,112,
+    97,99,101,95,112,97,116,104,32,102,111,114,32,116,104,105,
+    115,32,109,111,100,117,108,101,47,112,97,99,107,97,103,101,
+    32,110,97,109,101,46,78,114,185,0,0,0,41,8,114,203,
+    0,0,0,218,3,115,116,114,218,5,98,121,116,101,115,114,
+    35,1,0,0,114,60,0,0,0,114,185,0,0,0,114,218,
+    0,0,0,114,208,0,0,0,41,8,114,216,0,0,0,114,
+    179,0,0,0,114,35,0,0,0,218,14,110,97,109,101,115,
+    112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121,
+    114,32,1,0,0,114,161,0,0,0,114,189,0,0,0,114,
+    4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,11,
+    95,103,101,116,95,108,111,97,100,101,114,45,5,0,0,115,
+    28,0,0,0,0,5,6,1,13,1,21,1,6,1,15,1,
+    12,1,15,1,24,2,15,1,6,1,12,2,10,5,20,2,
+    122,22,80,97,116,104,70,105,110,100,101,114,46,95,103,101,
+    116,95,108,111,97,100,101,114,78,99,3,0,0,0,0,0,
+    0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,97,
+    0,0,0,124,2,0,100,1,0,107,8,0,114,24,0,116,
+    0,0,106,1,0,125,2,0,110,0,0,124,0,0,106,2,
+    0,124,1,0,124,2,0,131,2,0,92,2,0,125,3,0,
+    125,4,0,124,3,0,100,1,0,107,9,0,114,64,0,124,
+    3,0,83,124,4,0,114,89,0,116,3,0,124,1,0,124,
+    4,0,124,0,0,106,2,0,131,3,0,83,100,1,0,83,
+    100,1,0,83,41,2,122,98,70,105,110,100,32,116,104,101,
+    32,109,111,100,117,108,101,32,111,110,32,115,121,115,46,112,
+    97,116,104,32,111,114,32,39,112,97,116,104,39,32,98,97,
+    115,101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,
+    104,111,111,107,115,32,97,110,100,10,32,32,32,32,32,32,
+    32,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,
+    116,101,114,95,99,97,99,104,101,46,78,41,4,114,7,0,
+    0,0,114,35,0,0,0,114,39,1,0,0,114,27,1,0,
+    0,41,5,114,216,0,0,0,114,179,0,0,0,114,35,0,
+    0,0,114,161,0,0,0,114,38,1,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,114,218,0,0,0,
+    72,5,0,0,115,16,0,0,0,0,4,12,1,12,1,24,
+    1,12,1,4,2,6,3,19,2,122,22,80,97,116,104,70,
+    105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,
+    101,41,10,114,57,0,0,0,114,56,0,0,0,114,58,0,
+    0,0,114,59,0,0,0,114,222,0,0,0,114,29,1,0,
+    0,114,34,1,0,0,114,35,1,0,0,114,39,1,0,0,
+    114,218,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,114,28,1,0,0,255,4,
+    0,0,115,14,0,0,0,12,2,6,2,18,8,18,17,18,
+    17,18,27,3,1,114,28,1,0,0,99,0,0,0,0,0,
+    0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,
+    106,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,
+    100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,
+    4,0,100,4,0,100,5,0,132,0,0,90,5,0,101,6,
+    0,90,7,0,100,6,0,100,7,0,132,0,0,90,8,0,
+    100,8,0,100,9,0,132,0,0,90,9,0,101,10,0,100,
+    10,0,100,11,0,132,0,0,131,1,0,90,11,0,100,12,
+    0,100,13,0,132,0,0,90,12,0,100,14,0,83,41,15,
+    218,10,70,105,108,101,70,105,110,100,101,114,122,172,70,105,
+    108,101,45,98,97,115,101,100,32,102,105,110,100,101,114,46,
+    10,10,32,32,32,32,73,110,116,101,114,97,99,116,105,111,
+    110,115,32,119,105,116,104,32,116,104,101,32,102,105,108,101,
+    32,115,121,115,116,101,109,32,97,114,101,32,99,97,99,104,
+    101,100,32,102,111,114,32,112,101,114,102,111,114,109,97,110,
+    99,101,44,32,98,101,105,110,103,10,32,32,32,32,114,101,
+    102,114,101,115,104,101,100,32,119,104,101,110,32,116,104,101,
+    32,100,105,114,101,99,116,111,114,121,32,116,104,101,32,102,
+    105,110,100,101,114,32,105,115,32,104,97,110,100,108,105,110,
+    103,32,104,97,115,32,98,101,101,110,32,109,111,100,105,102,
+    105,101,100,46,10,10,32,32,32,32,99,2,0,0,0,0,
+    0,0,0,5,0,0,0,5,0,0,0,7,0,0,0,115,
+    122,0,0,0,103,0,0,125,3,0,120,52,0,124,2,0,
+    68,93,44,0,92,2,0,137,0,0,125,4,0,124,3,0,
+    106,0,0,135,0,0,102,1,0,100,1,0,100,2,0,134,
+    0,0,124,4,0,68,131,1,0,131,1,0,1,113,13,0,
+    87,124,3,0,124,0,0,95,1,0,124,1,0,112,79,0,
+    100,3,0,124,0,0,95,2,0,100,6,0,124,0,0,95,
+    3,0,116,4,0,131,0,0,124,0,0,95,5,0,116,4,
+    0,131,0,0,124,0,0,95,6,0,100,5,0,83,41,7,
+    122,154,73,110,105,116,105,97,108,105,122,101,32,119,105,116,
+    104,32,116,104,101,32,112,97,116,104,32,116,111,32,115,101,
+    97,114,99,104,32,111,110,32,97,110,100,32,97,32,118,97,
+    114,105,97,98,108,101,32,110,117,109,98,101,114,32,111,102,
+    10,32,32,32,32,32,32,32,32,50,45,116,117,112,108,101,
+    115,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,
+    32,108,111,97,100,101,114,32,97,110,100,32,116,104,101,32,
+    102,105,108,101,32,115,117,102,102,105,120,101,115,32,116,104,
+    101,32,108,111,97,100,101,114,10,32,32,32,32,32,32,32,
+    32,114,101,99,111,103,110,105,122,101,115,46,99,1,0,0,
+    0,0,0,0,0,2,0,0,0,3,0,0,0,51,0,0,
+    0,115,27,0,0,0,124,0,0,93,17,0,125,1,0,124,
+    1,0,136,0,0,102,2,0,86,1,113,3,0,100,0,0,
+    83,41,1,78,114,4,0,0,0,41,2,114,22,0,0,0,
+    114,10,1,0,0,41,1,114,161,0,0,0,114,4,0,0,
+    0,114,5,0,0,0,114,144,0,0,0,105,5,0,0,115,
+    2,0,0,0,6,0,122,38,70,105,108,101,70,105,110,100,
     101,114,46,95,95,105,110,105,116,95,95,46,60,108,111,99,
-    97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,101,
-    0,0,0,114,29,0,0,0,78,114,123,0,0,0,40,7,
-    0,0,0,114,207,0,0,0,244,8,0,0,0,95,108,111,
-    97,100,101,114,115,114,35,0,0,0,244,11,0,0,0,95,
-    112,97,116,104,95,109,116,105,109,101,244,3,0,0,0,115,
-    101,116,244,11,0,0,0,95,112,97,116,104,95,99,97,99,
-    104,101,244,19,0,0,0,95,114,101,108,97,120,101,100,95,
-    112,97,116,104,95,99,97,99,104,101,40,5,0,0,0,114,
-    75,0,0,0,114,35,0,0,0,244,14,0,0,0,108,111,
-    97,100,101,114,95,100,101,116,97,105,108,115,116,7,0,0,
-    0,108,111,97,100,101,114,115,114,112,0,0,0,114,4,0,
-    0,0,40,1,0,0,0,114,160,0,0,0,114,5,0,0,
-    0,114,76,0,0,0,87,5,0,0,115,16,0,0,0,0,
-    4,6,1,19,1,36,1,9,2,15,1,9,1,12,1,117,
-    19,0,0,0,70,105,108,101,70,105,110,100,101,114,46,95,
-    95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,
-    1,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,
-    0,100,3,0,124,0,0,95,0,0,100,2,0,83,40,4,
-    0,0,0,117,31,0,0,0,73,110,118,97,108,105,100,97,
-    116,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,
-    32,109,116,105,109,101,46,114,29,0,0,0,78,114,123,0,
-    0,0,40,1,0,0,0,114,41,1,0,0,40,1,0,0,
-    0,114,75,0,0,0,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,28,1,0,0,101,5,0,0,115,2,
-    0,0,0,0,2,117,28,0,0,0,70,105,108,101,70,105,
+    97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,102,
+    0,0,0,114,29,0,0,0,78,114,124,0,0,0,41,7,
+    114,208,0,0,0,218,8,95,108,111,97,100,101,114,115,114,
+    35,0,0,0,218,11,95,112,97,116,104,95,109,116,105,109,
+    101,218,3,115,101,116,218,11,95,112,97,116,104,95,99,97,
+    99,104,101,218,19,95,114,101,108,97,120,101,100,95,112,97,
+    116,104,95,99,97,99,104,101,41,5,114,76,0,0,0,114,
+    35,0,0,0,218,14,108,111,97,100,101,114,95,100,101,116,
+    97,105,108,115,90,7,108,111,97,100,101,114,115,114,113,0,
+    0,0,114,4,0,0,0,41,1,114,161,0,0,0,114,5,
+    0,0,0,114,77,0,0,0,99,5,0,0,115,16,0,0,
+    0,0,4,6,1,19,1,36,1,9,2,15,1,9,1,12,
+    1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,
+    105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,1,
+    0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,0,
+    100,3,0,124,0,0,95,0,0,100,2,0,83,41,4,122,
+    31,73,110,118,97,108,105,100,97,116,101,32,116,104,101,32,
+    100,105,114,101,99,116,111,114,121,32,109,116,105,109,101,46,
+    114,29,0,0,0,78,114,124,0,0,0,41,1,114,42,1,
+    0,0,41,1,114,76,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,114,29,1,0,0,113,5,0,
+    0,115,2,0,0,0,0,2,122,28,70,105,108,101,70,105,
     110,100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,
     99,97,99,104,101,115,99,2,0,0,0,0,0,0,0,12,
     0,0,0,13,0,0,0,67,0,0,0,115,216,1,0,0,
     100,1,0,125,2,0,124,1,0,106,0,0,100,2,0,131,
-    1,0,100,3,0,25,125,3,0,121,25,0,116,1,0,106,
-    2,0,124,0,0,106,3,0,131,1,0,106,4,0,125,4,
-    0,87,110,24,0,4,116,5,0,107,10,0,114,76,0,1,
-    1,1,100,11,0,125,4,0,89,110,1,0,88,124,4,0,
-    124,0,0,106,6,0,107,3,0,114,114,0,124,0,0,106,
-    7,0,131,0,0,1,124,4,0,124,0,0,95,6,0,110,
-    0,0,116,8,0,131,0,0,114,147,0,124,0,0,106,9,
-    0,125,5,0,124,3,0,106,10,0,131,0,0,125,6,0,
-    110,15,0,124,0,0,106,11,0,125,5,0,124,3,0,125,
-    6,0,124,6,0,124,5,0,107,6,0,114,45,1,116,12,
-    0,124,0,0,106,3,0,124,3,0,131,2,0,125,7,0,
-    116,13,0,124,7,0,131,1,0,114,45,1,120,91,0,124,
-    0,0,106,14,0,68,93,71,0,92,2,0,125,8,0,125,
-    9,0,100,5,0,124,8,0,23,125,10,0,116,12,0,124,
-    7,0,124,10,0,131,2,0,125,11,0,116,15,0,124,11,
-    0,131,1,0,114,214,0,124,9,0,124,1,0,124,11,0,
-    131,2,0,124,7,0,103,1,0,102,2,0,83,113,214,0,
-    87,100,6,0,125,2,0,113,45,1,110,0,0,120,120,0,
+    1,0,100,3,0,25,125,3,0,121,34,0,116,1,0,124,
+    0,0,106,2,0,112,49,0,116,3,0,106,4,0,131,0,
+    0,131,1,0,106,5,0,125,4,0,87,110,24,0,4,116,
+    6,0,107,10,0,114,85,0,1,1,1,100,10,0,125,4,
+    0,89,110,1,0,88,124,4,0,124,0,0,106,7,0,107,
+    3,0,114,123,0,124,0,0,106,8,0,131,0,0,1,124,
+    4,0,124,0,0,95,7,0,110,0,0,116,9,0,131,0,
+    0,114,156,0,124,0,0,106,10,0,125,5,0,124,3,0,
+    106,11,0,131,0,0,125,6,0,110,15,0,124,0,0,106,
+    12,0,125,5,0,124,3,0,125,6,0,124,6,0,124,5,
+    0,107,6,0,114,45,1,116,13,0,124,0,0,106,2,0,
+    124,3,0,131,2,0,125,7,0,120,97,0,124,0,0,106,
+    14,0,68,93,71,0,92,2,0,125,8,0,125,9,0,100,
+    5,0,124,8,0,23,125,10,0,116,13,0,124,7,0,124,
+    10,0,131,2,0,125,11,0,116,15,0,124,11,0,131,1,
+    0,114,211,0,124,9,0,124,1,0,124,11,0,131,2,0,
+    124,7,0,103,1,0,102,2,0,83,113,211,0,87,116,16,
+    0,124,7,0,131,1,0,125,2,0,110,0,0,120,120,0,
     124,0,0,106,14,0,68,93,109,0,92,2,0,125,8,0,
-    125,9,0,116,12,0,124,0,0,106,3,0,124,3,0,124,
-    8,0,23,131,2,0,125,11,0,116,16,0,100,7,0,106,
-    17,0,124,11,0,131,1,0,100,8,0,100,3,0,131,1,
+    125,9,0,116,13,0,124,0,0,106,2,0,124,3,0,124,
+    8,0,23,131,2,0,125,11,0,116,17,0,100,6,0,106,
+    18,0,124,11,0,131,1,0,100,7,0,100,3,0,131,1,
     1,1,124,6,0,124,8,0,23,124,5,0,107,6,0,114,
     55,1,116,15,0,124,11,0,131,1,0,114,164,1,124,9,
     0,124,1,0,124,11,0,131,2,0,103,0,0,102,2,0,
-    83,113,55,1,113,55,1,87,124,2,0,114,206,1,116,16,
-    0,100,9,0,106,17,0,124,7,0,131,1,0,131,1,0,
-    1,100,10,0,124,7,0,103,1,0,102,2,0,83,100,10,
-    0,103,0,0,102,2,0,83,40,12,0,0,0,117,125,0,
-    0,0,84,114,121,32,116,111,32,102,105,110,100,32,97,32,
-    108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,
-    112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,
-    32,111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,
-    101,10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,
-    101,32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,
-    114,110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,
-    116,45,111,102,45,112,111,114,116,105,111,110,115,41,46,70,
-    114,101,0,0,0,114,100,0,0,0,114,29,0,0,0,114,
-    76,0,0,0,84,117,9,0,0,0,116,114,121,105,110,103,
-    32,123,125,114,130,0,0,0,117,25,0,0,0,112,111,115,
-    115,105,98,108,101,32,110,97,109,101,115,112,97,99,101,32,
-    102,111,114,32,123,125,78,114,123,0,0,0,40,18,0,0,
-    0,114,32,0,0,0,114,3,0,0,0,114,39,0,0,0,
-    114,35,0,0,0,114,3,1,0,0,114,40,0,0,0,114,
-    41,1,0,0,244,11,0,0,0,95,102,105,108,108,95,99,
-    97,99,104,101,114,6,0,0,0,114,44,1,0,0,114,124,
-    0,0,0,114,43,1,0,0,114,28,0,0,0,114,45,0,
-    0,0,114,40,1,0,0,114,44,0,0,0,114,137,0,0,
-    0,114,46,0,0,0,40,12,0,0,0,114,75,0,0,0,
-    114,178,0,0,0,116,12,0,0,0,105,115,95,110,97,109,
-    101,115,112,97,99,101,116,11,0,0,0,116,97,105,108,95,
-    109,111,100,117,108,101,114,193,0,0,0,116,5,0,0,0,
-    99,97,99,104,101,116,12,0,0,0,99,97,99,104,101,95,
-    109,111,100,117,108,101,116,9,0,0,0,98,97,115,101,95,
-    112,97,116,104,114,9,1,0,0,114,160,0,0,0,116,13,
-    0,0,0,105,110,105,116,95,102,105,108,101,110,97,109,101,
-    116,9,0,0,0,102,117,108,108,95,112,97,116,104,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,184,0,
-    0,0,107,5,0,0,115,66,0,0,0,0,3,6,1,19,
-    1,3,1,25,1,13,1,11,1,15,1,10,1,12,2,9,
-    1,9,1,15,2,9,1,6,2,12,1,18,1,12,1,22,
-    1,10,1,15,1,12,1,26,4,12,2,22,1,22,1,25,
-    1,16,1,12,1,26,1,6,1,19,1,13,1,117,22,0,
-    0,0,70,105,108,101,70,105,110,100,101,114,46,102,105,110,
-    100,95,108,111,97,100,101,114,99,1,0,0,0,0,0,0,
-    0,9,0,0,0,13,0,0,0,67,0,0,0,115,2,1,
-    0,0,124,0,0,106,0,0,125,1,0,121,19,0,116,1,
-    0,106,2,0,124,1,0,131,1,0,125,2,0,87,110,33,
-    0,4,116,3,0,116,4,0,116,5,0,102,3,0,107,10,
-    0,114,63,0,1,1,1,103,0,0,125,2,0,89,110,1,
-    0,88,116,6,0,106,7,0,106,8,0,100,1,0,131,1,
-    0,115,100,0,116,9,0,124,2,0,131,1,0,124,0,0,
-    95,10,0,110,111,0,116,9,0,131,0,0,125,3,0,120,
-    90,0,124,2,0,68,93,82,0,125,4,0,124,4,0,106,
-    11,0,100,2,0,131,1,0,92,3,0,125,5,0,125,6,
-    0,125,7,0,124,6,0,114,179,0,100,3,0,106,12,0,
-    124,5,0,124,7,0,106,13,0,131,0,0,131,2,0,125,
-    8,0,110,6,0,124,5,0,125,8,0,124,3,0,106,14,
-    0,124,8,0,131,1,0,1,113,116,0,87,124,3,0,124,
-    0,0,95,10,0,116,6,0,106,7,0,106,8,0,116,15,
-    0,131,1,0,114,254,0,100,4,0,100,5,0,132,0,0,
-    124,2,0,68,131,1,0,124,0,0,95,16,0,110,0,0,
-    100,6,0,83,40,7,0,0,0,117,68,0,0,0,70,105,
-    108,108,32,116,104,101,32,99,97,99,104,101,32,111,102,32,
-    112,111,116,101,110,116,105,97,108,32,109,111,100,117,108,101,
-    115,32,97,110,100,32,112,97,99,107,97,103,101,115,32,102,
-    111,114,32,116,104,105,115,32,100,105,114,101,99,116,111,114,
-    121,46,114,0,0,0,0,114,101,0,0,0,117,5,0,0,
-    0,123,125,46,123,125,99,1,0,0,0,0,0,0,0,2,
-    0,0,0,3,0,0,0,83,0,0,0,115,28,0,0,0,
-    104,0,0,124,0,0,93,18,0,125,1,0,124,1,0,106,
-    0,0,131,0,0,146,2,0,113,6,0,83,114,4,0,0,
-    0,40,1,0,0,0,114,124,0,0,0,40,2,0,0,0,
-    114,22,0,0,0,116,2,0,0,0,102,110,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,245,9,0,0,0,
-    60,115,101,116,99,111,109,112,62,180,5,0,0,115,2,0,
-    0,0,9,0,117,41,0,0,0,70,105,108,101,70,105,110,
-    100,101,114,46,95,102,105,108,108,95,99,97,99,104,101,46,
-    60,108,111,99,97,108,115,62,46,60,115,101,116,99,111,109,
-    112,62,78,40,17,0,0,0,114,35,0,0,0,114,3,0,
-    0,0,116,7,0,0,0,108,105,115,116,100,105,114,244,17,
-    0,0,0,70,105,108,101,78,111,116,70,111,117,110,100,69,
-    114,114,111,114,244,15,0,0,0,80,101,114,109,105,115,115,
-    105,111,110,69,114,114,111,114,244,18,0,0,0,78,111,116,
-    65,68,105,114,101,99,116,111,114,121,69,114,114,111,114,114,
-    7,0,0,0,114,8,0,0,0,114,9,0,0,0,114,42,
-    1,0,0,114,43,1,0,0,114,106,0,0,0,114,46,0,
-    0,0,114,124,0,0,0,244,3,0,0,0,97,100,100,114,
-    10,0,0,0,114,44,1,0,0,40,9,0,0,0,114,75,
-    0,0,0,114,35,0,0,0,116,8,0,0,0,99,111,110,
-    116,101,110,116,115,116,21,0,0,0,108,111,119,101,114,95,
-    115,117,102,102,105,120,95,99,111,110,116,101,110,116,115,114,
-    24,1,0,0,114,71,0,0,0,114,18,1,0,0,114,9,
-    1,0,0,116,8,0,0,0,110,101,119,95,110,97,109,101,
+    83,113,55,1,113,55,1,87,124,2,0,114,206,1,116,17,
+    0,100,8,0,106,18,0,124,7,0,131,1,0,131,1,0,
+    1,100,9,0,124,7,0,103,1,0,102,2,0,83,100,9,
+    0,103,0,0,102,2,0,83,41,11,122,125,84,114,121,32,
+    116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,
+    32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,
+    101,100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,
+    101,32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,
+    32,32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,
+    105,111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,
+    111,97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,
+    111,114,116,105,111,110,115,41,46,70,114,102,0,0,0,114,
+    101,0,0,0,114,29,0,0,0,114,77,0,0,0,122,9,
+    116,114,121,105,110,103,32,123,125,114,131,0,0,0,122,25,
+    112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97,
+    99,101,32,102,111,114,32,123,125,78,114,124,0,0,0,41,
+    19,114,32,0,0,0,114,39,0,0,0,114,35,0,0,0,
+    114,3,0,0,0,114,45,0,0,0,114,4,1,0,0,114,
+    40,0,0,0,114,42,1,0,0,218,11,95,102,105,108,108,
+    95,99,97,99,104,101,114,6,0,0,0,114,45,1,0,0,
+    114,125,0,0,0,114,44,1,0,0,114,28,0,0,0,114,
+    41,1,0,0,114,44,0,0,0,114,46,0,0,0,114,138,
+    0,0,0,114,47,0,0,0,41,12,114,76,0,0,0,114,
+    179,0,0,0,90,12,105,115,95,110,97,109,101,115,112,97,
+    99,101,90,11,116,97,105,108,95,109,111,100,117,108,101,114,
+    194,0,0,0,90,5,99,97,99,104,101,90,12,99,97,99,
+    104,101,95,109,111,100,117,108,101,90,9,98,97,115,101,95,
+    112,97,116,104,114,10,1,0,0,114,161,0,0,0,90,13,
+    105,110,105,116,95,102,105,108,101,110,97,109,101,90,9,102,
+    117,108,108,95,112,97,116,104,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,114,185,0,0,0,119,5,0,0,
+    115,64,0,0,0,0,3,6,1,19,1,3,1,34,1,13,
+    1,11,1,15,1,10,1,12,2,9,1,9,1,15,2,9,
+    1,6,2,12,1,18,1,22,1,10,1,15,1,12,1,26,
+    4,15,2,22,1,22,1,25,1,16,1,12,1,26,1,6,
+    1,19,1,13,1,122,22,70,105,108,101,70,105,110,100,101,
+    114,46,102,105,110,100,95,108,111,97,100,101,114,99,1,0,
+    0,0,0,0,0,0,9,0,0,0,13,0,0,0,67,0,
+    0,0,115,14,1,0,0,124,0,0,106,0,0,125,1,0,
+    121,31,0,116,1,0,106,2,0,124,1,0,112,33,0,116,
+    1,0,106,3,0,131,0,0,131,1,0,125,2,0,87,110,
+    33,0,4,116,4,0,116,5,0,116,6,0,102,3,0,107,
+    10,0,114,75,0,1,1,1,103,0,0,125,2,0,89,110,
+    1,0,88,116,7,0,106,8,0,106,9,0,100,1,0,131,
+    1,0,115,112,0,116,10,0,124,2,0,131,1,0,124,0,
+    0,95,11,0,110,111,0,116,10,0,131,0,0,125,3,0,
+    120,90,0,124,2,0,68,93,82,0,125,4,0,124,4,0,
+    106,12,0,100,2,0,131,1,0,92,3,0,125,5,0,125,
+    6,0,125,7,0,124,6,0,114,191,0,100,3,0,106,13,
+    0,124,5,0,124,7,0,106,14,0,131,0,0,131,2,0,
+    125,8,0,110,6,0,124,5,0,125,8,0,124,3,0,106,
+    15,0,124,8,0,131,1,0,1,113,128,0,87,124,3,0,
+    124,0,0,95,11,0,116,7,0,106,8,0,106,9,0,116,
+    16,0,131,1,0,114,10,1,100,4,0,100,5,0,132,0,
+    0,124,2,0,68,131,1,0,124,0,0,95,17,0,110,0,
+    0,100,6,0,83,41,7,122,68,70,105,108,108,32,116,104,
+    101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110,
+    116,105,97,108,32,109,111,100,117,108,101,115,32,97,110,100,
+    32,112,97,99,107,97,103,101,115,32,102,111,114,32,116,104,
+    105,115,32,100,105,114,101,99,116,111,114,121,46,114,0,0,
+    0,0,114,102,0,0,0,122,5,123,125,46,123,125,99,1,
+    0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,83,
+    0,0,0,115,28,0,0,0,104,0,0,124,0,0,93,18,
+    0,125,1,0,124,1,0,106,0,0,131,0,0,146,2,0,
+    113,6,0,83,114,4,0,0,0,41,1,114,125,0,0,0,
+    41,2,114,22,0,0,0,90,2,102,110,114,4,0,0,0,
+    114,4,0,0,0,114,5,0,0,0,250,9,60,115,101,116,
+    99,111,109,112,62,191,5,0,0,115,2,0,0,0,9,0,
+    122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,105,
+    108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,115,
+    62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,35,
+    0,0,0,114,3,0,0,0,90,7,108,105,115,116,100,105,
+    114,114,45,0,0,0,218,17,70,105,108,101,78,111,116,70,
+    111,117,110,100,69,114,114,111,114,218,15,80,101,114,109,105,
+    115,115,105,111,110,69,114,114,111,114,218,18,78,111,116,65,
+    68,105,114,101,99,116,111,114,121,69,114,114,111,114,114,7,
+    0,0,0,114,8,0,0,0,114,9,0,0,0,114,43,1,
+    0,0,114,44,1,0,0,114,107,0,0,0,114,47,0,0,
+    0,114,125,0,0,0,218,3,97,100,100,114,10,0,0,0,
+    114,45,1,0,0,41,9,114,76,0,0,0,114,35,0,0,
+    0,90,8,99,111,110,116,101,110,116,115,90,21,108,111,119,
+    101,114,95,115,117,102,102,105,120,95,99,111,110,116,101,110,
+    116,115,114,25,1,0,0,114,72,0,0,0,114,19,1,0,
+    0,114,10,1,0,0,90,8,110,101,119,95,110,97,109,101,
     114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
-    46,1,0,0,151,5,0,0,115,34,0,0,0,0,2,9,
-    1,3,1,19,1,22,3,11,3,18,1,18,7,9,1,13,
-    1,24,1,6,1,27,2,6,1,17,1,9,1,18,1,117,
-    22,0,0,0,70,105,108,101,70,105,110,100,101,114,46,95,
-    102,105,108,108,95,99,97,99,104,101,99,1,0,0,0,0,
-    0,0,0,3,0,0,0,3,0,0,0,7,0,0,0,115,
-    25,0,0,0,135,0,0,135,1,0,102,2,0,100,1,0,
-    100,2,0,134,0,0,125,2,0,124,2,0,83,40,3,0,
-    0,0,117,20,1,0,0,65,32,99,108,97,115,115,32,109,
-    101,116,104,111,100,32,119,104,105,99,104,32,114,101,116,117,
-    114,110,115,32,97,32,99,108,111,115,117,114,101,32,116,111,
-    32,117,115,101,32,111,110,32,115,121,115,46,112,97,116,104,
-    95,104,111,111,107,10,32,32,32,32,32,32,32,32,119,104,
-    105,99,104,32,119,105,108,108,32,114,101,116,117,114,110,32,
-    97,110,32,105,110,115,116,97,110,99,101,32,117,115,105,110,
-    103,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,
-    108,111,97,100,101,114,115,32,97,110,100,32,116,104,101,32,
-    112,97,116,104,10,32,32,32,32,32,32,32,32,99,97,108,
-    108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,
-    114,101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,
-    116,104,101,32,112,97,116,104,32,99,97,108,108,101,100,32,
-    111,110,32,116,104,101,32,99,108,111,115,117,114,101,32,105,
-    115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,
-    121,44,32,73,109,112,111,114,116,69,114,114,111,114,32,105,
-    115,10,32,32,32,32,32,32,32,32,114,97,105,115,101,100,
-    46,10,10,32,32,32,32,32,32,32,32,99,1,0,0,0,
-    0,0,0,0,1,0,0,0,4,0,0,0,19,0,0,0,
-    115,46,0,0,0,116,0,0,124,0,0,131,1,0,115,33,
-    0,116,1,0,100,1,0,100,2,0,124,0,0,131,1,1,
-    130,1,0,110,0,0,136,0,0,124,0,0,136,1,0,140,
-    1,0,83,40,3,0,0,0,117,45,0,0,0,80,97,116,
-    104,32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,
-    116,108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,
-    105,108,101,70,105,110,100,101,114,46,117,30,0,0,0,111,
-    110,108,121,32,100,105,114,101,99,116,111,114,105,101,115,32,
-    97,114,101,32,115,117,112,112,111,114,116,101,100,114,35,0,
-    0,0,40,2,0,0,0,114,45,0,0,0,114,157,0,0,
-    0,40,1,0,0,0,114,35,0,0,0,40,2,0,0,0,
-    114,215,0,0,0,114,45,1,0,0,114,4,0,0,0,114,
-    5,0,0,0,244,24,0,0,0,112,97,116,104,95,104,111,
-    111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101,
-    114,192,5,0,0,115,6,0,0,0,0,2,12,1,21,1,
-    117,54,0,0,0,70,105,108,101,70,105,110,100,101,114,46,
-    112,97,116,104,95,104,111,111,107,46,60,108,111,99,97,108,
-    115,62,46,112,97,116,104,95,104,111,111,107,95,102,111,114,
-    95,70,105,108,101,70,105,110,100,101,114,114,4,0,0,0,
-    40,3,0,0,0,114,215,0,0,0,114,45,1,0,0,114,
-    52,1,0,0,114,4,0,0,0,40,2,0,0,0,114,215,
-    0,0,0,114,45,1,0,0,114,5,0,0,0,244,9,0,
-    0,0,112,97,116,104,95,104,111,111,107,182,5,0,0,115,
-    4,0,0,0,0,10,21,6,117,20,0,0,0,70,105,108,
-    101,70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,
-    107,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,
-    0,0,67,0,0,0,115,16,0,0,0,100,1,0,106,0,
-    0,124,0,0,106,1,0,131,1,0,83,40,2,0,0,0,
-    78,117,16,0,0,0,70,105,108,101,70,105,110,100,101,114,
-    40,123,33,114,125,41,40,2,0,0,0,114,46,0,0,0,
-    114,35,0,0,0,40,1,0,0,0,114,75,0,0,0,114,
-    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,87,
-    0,0,0,200,5,0,0,115,2,0,0,0,0,1,117,19,
-    0,0,0,70,105,108,101,70,105,110,100,101,114,46,95,95,
-    114,101,112,114,95,95,78,40,13,0,0,0,114,56,0,0,
-    0,114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,
-    114,76,0,0,0,114,28,1,0,0,114,190,0,0,0,114,
-    217,0,0,0,114,184,0,0,0,114,46,1,0,0,114,221,
-    0,0,0,114,53,1,0,0,114,87,0,0,0,114,4,0,
-    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,114,39,1,0,0,78,5,0,0,115,16,0,0,0,12,
-    7,6,2,12,14,12,4,6,2,12,44,12,31,18,18,114,
-    39,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
-    0,2,0,0,0,64,0,0,0,115,46,0,0,0,101,0,
-    0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,
-    100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,
-    5,0,132,0,0,90,5,0,100,6,0,83,40,7,0,0,
-    0,244,18,0,0,0,95,73,109,112,111,114,116,76,111,99,
-    107,67,111,110,116,101,120,116,117,36,0,0,0,67,111,110,
-    116,101,120,116,32,109,97,110,97,103,101,114,32,102,111,114,
-    32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,
-    46,99,1,0,0,0,0,0,0,0,1,0,0,0,1,0,
-    0,0,67,0,0,0,115,14,0,0,0,116,0,0,106,1,
-    0,131,0,0,1,100,1,0,83,40,2,0,0,0,117,24,
-    0,0,0,65,99,113,117,105,114,101,32,116,104,101,32,105,
-    109,112,111,114,116,32,108,111,99,107,46,78,40,2,0,0,
-    0,114,94,0,0,0,244,12,0,0,0,97,99,113,117,105,
-    114,101,95,108,111,99,107,40,1,0,0,0,114,75,0,0,
-    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
-    114,142,0,0,0,210,5,0,0,115,2,0,0,0,0,2,
-    117,28,0,0,0,95,73,109,112,111,114,116,76,111,99,107,
-    67,111,110,116,101,120,116,46,95,95,101,110,116,101,114,95,
-    95,99,4,0,0,0,0,0,0,0,4,0,0,0,1,0,
-    0,0,67,0,0,0,115,14,0,0,0,116,0,0,106,1,
-    0,131,0,0,1,100,1,0,83,40,2,0,0,0,117,60,
-    0,0,0,82,101,108,101,97,115,101,32,116,104,101,32,105,
-    109,112,111,114,116,32,108,111,99,107,32,114,101,103,97,114,
-    100,108,101,115,115,32,111,102,32,97,110,121,32,114,97,105,
-    115,101,100,32,101,120,99,101,112,116,105,111,110,115,46,78,
-    40,2,0,0,0,114,94,0,0,0,114,95,0,0,0,40,
-    4,0,0,0,114,75,0,0,0,116,8,0,0,0,101,120,
-    99,95,116,121,112,101,116,9,0,0,0,101,120,99,95,118,
-    97,108,117,101,116,13,0,0,0,101,120,99,95,116,114,97,
-    99,101,98,97,99,107,114,4,0,0,0,114,4,0,0,0,
-    114,5,0,0,0,114,145,0,0,0,214,5,0,0,115,2,
-    0,0,0,0,2,117,27,0,0,0,95,73,109,112,111,114,
-    116,76,111,99,107,67,111,110,116,101,120,116,46,95,95,101,
-    120,105,116,95,95,78,40,6,0,0,0,114,56,0,0,0,
-    114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,114,
-    142,0,0,0,114,145,0,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,114,54,1,
-    0,0,206,5,0,0,115,6,0,0,0,12,2,6,2,12,
-    4,114,54,1,0,0,99,3,0,0,0,0,0,0,0,5,
-    0,0,0,4,0,0,0,67,0,0,0,115,91,0,0,0,
-    124,1,0,106,0,0,100,1,0,124,2,0,100,2,0,24,
-    131,2,0,125,3,0,116,1,0,124,3,0,131,1,0,124,
-    2,0,107,0,0,114,55,0,116,2,0,100,3,0,131,1,
-    0,130,1,0,110,0,0,124,3,0,100,4,0,25,125,4,
-    0,124,0,0,114,87,0,100,5,0,106,3,0,124,4,0,
-    124,0,0,131,2,0,83,124,4,0,83,40,6,0,0,0,
-    117,50,0,0,0,82,101,115,111,108,118,101,32,97,32,114,
-    101,108,97,116,105,118,101,32,109,111,100,117,108,101,32,110,
-    97,109,101,32,116,111,32,97,110,32,97,98,115,111,108,117,
-    116,101,32,111,110,101,46,114,101,0,0,0,114,29,0,0,
-    0,117,50,0,0,0,97,116,116,101,109,112,116,101,100,32,
-    114,101,108,97,116,105,118,101,32,105,109,112,111,114,116,32,
-    98,101,121,111,110,100,32,116,111,112,45,108,101,118,101,108,
-    32,112,97,99,107,97,103,101,114,67,0,0,0,117,5,0,
-    0,0,123,125,46,123,125,40,4,0,0,0,114,34,0,0,
-    0,114,31,0,0,0,114,118,0,0,0,114,46,0,0,0,
-    40,5,0,0,0,114,71,0,0,0,244,7,0,0,0,112,
-    97,99,107,97,103,101,244,5,0,0,0,108,101,118,101,108,
-    116,4,0,0,0,98,105,116,115,116,4,0,0,0,98,97,
+    47,1,0,0,162,5,0,0,115,34,0,0,0,0,2,9,
+    1,3,1,31,1,22,3,11,3,18,1,18,7,9,1,13,
+    1,24,1,6,1,27,2,6,1,17,1,9,1,18,1,122,
+    22,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,
+    108,95,99,97,99,104,101,99,1,0,0,0,0,0,0,0,
+    3,0,0,0,3,0,0,0,7,0,0,0,115,25,0,0,
+    0,135,0,0,135,1,0,102,2,0,100,1,0,100,2,0,
+    134,0,0,125,2,0,124,2,0,83,41,3,97,20,1,0,
+    0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32,
+    119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32,
+    99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111,
+    110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10,
+    32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105,
+    108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115,
+    116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32,
+    115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114,
+    115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32,
+    32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110,
+    32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32,
+    32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,
+    116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101,
+    32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32,
+    97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112,
+    111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32,
+    32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32,
+    32,32,32,32,32,99,1,0,0,0,0,0,0,0,1,0,
+    0,0,4,0,0,0,19,0,0,0,115,46,0,0,0,116,
+    0,0,124,0,0,131,1,0,115,33,0,116,1,0,100,1,
+    0,100,2,0,124,0,0,131,1,1,130,1,0,110,0,0,
+    136,0,0,124,0,0,136,1,0,140,1,0,83,41,3,122,
+    45,80,97,116,104,32,104,111,111,107,32,102,111,114,32,105,
+    109,112,111,114,116,108,105,98,46,109,97,99,104,105,110,101,
+    114,121,46,70,105,108,101,70,105,110,100,101,114,46,122,30,
+    111,110,108,121,32,100,105,114,101,99,116,111,114,105,101,115,
+    32,97,114,101,32,115,117,112,112,111,114,116,101,100,114,35,
+    0,0,0,41,2,114,46,0,0,0,114,158,0,0,0,41,
+    1,114,35,0,0,0,41,2,114,216,0,0,0,114,46,1,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,24,112,97,
+    116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,
+    70,105,110,100,101,114,203,5,0,0,115,6,0,0,0,0,
+    2,12,1,21,1,122,54,70,105,108,101,70,105,110,100,101,
+    114,46,112,97,116,104,95,104,111,111,107,46,60,108,111,99,
+    97,108,115,62,46,112,97,116,104,95,104,111,111,107,95,102,
+    111,114,95,70,105,108,101,70,105,110,100,101,114,114,4,0,
+    0,0,41,3,114,216,0,0,0,114,46,1,0,0,114,53,
+    1,0,0,114,4,0,0,0,41,2,114,216,0,0,0,114,
+    46,1,0,0,114,5,0,0,0,218,9,112,97,116,104,95,
+    104,111,111,107,193,5,0,0,115,4,0,0,0,0,10,21,
+    6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97,
+    116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0,
+    1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,
+    0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0,
+    83,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114,
+    40,123,33,114,125,41,41,2,114,47,0,0,0,114,35,0,
+    0,0,41,1,114,76,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,114,88,0,0,0,211,5,0,
+    0,115,2,0,0,0,0,1,122,19,70,105,108,101,70,105,
+    110,100,101,114,46,95,95,114,101,112,114,95,95,78,41,13,
+    114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,
+    59,0,0,0,114,77,0,0,0,114,29,1,0,0,114,191,
+    0,0,0,114,218,0,0,0,114,185,0,0,0,114,47,1,
+    0,0,114,222,0,0,0,114,54,1,0,0,114,88,0,0,
+    0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,40,1,0,0,90,5,0,0,115,16,
+    0,0,0,12,7,6,2,12,14,12,4,6,2,12,43,12,
+    31,18,18,114,40,1,0,0,99,0,0,0,0,0,0,0,
+    0,0,0,0,0,2,0,0,0,64,0,0,0,115,46,0,
+    0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,
+    0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,
+    100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,83,
+    41,7,218,18,95,73,109,112,111,114,116,76,111,99,107,67,
+    111,110,116,101,120,116,122,36,67,111,110,116,101,120,116,32,
+    109,97,110,97,103,101,114,32,102,111,114,32,116,104,101,32,
+    105,109,112,111,114,116,32,108,111,99,107,46,99,1,0,0,
+    0,0,0,0,0,1,0,0,0,1,0,0,0,67,0,0,
+    0,115,14,0,0,0,116,0,0,106,1,0,131,0,0,1,
+    100,1,0,83,41,2,122,24,65,99,113,117,105,114,101,32,
+    116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,46,
+    78,41,2,114,95,0,0,0,218,12,97,99,113,117,105,114,
+    101,95,108,111,99,107,41,1,114,76,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,114,143,0,0,
+    0,221,5,0,0,115,2,0,0,0,0,2,122,28,95,73,
+    109,112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,
+    46,95,95,101,110,116,101,114,95,95,99,4,0,0,0,0,
+    0,0,0,4,0,0,0,1,0,0,0,67,0,0,0,115,
+    14,0,0,0,116,0,0,106,1,0,131,0,0,1,100,1,
+    0,83,41,2,122,60,82,101,108,101,97,115,101,32,116,104,
+    101,32,105,109,112,111,114,116,32,108,111,99,107,32,114,101,
+    103,97,114,100,108,101,115,115,32,111,102,32,97,110,121,32,
+    114,97,105,115,101,100,32,101,120,99,101,112,116,105,111,110,
+    115,46,78,41,2,114,95,0,0,0,114,96,0,0,0,41,
+    4,114,76,0,0,0,90,8,101,120,99,95,116,121,112,101,
+    90,9,101,120,99,95,118,97,108,117,101,90,13,101,120,99,
+    95,116,114,97,99,101,98,97,99,107,114,4,0,0,0,114,
+    4,0,0,0,114,5,0,0,0,114,146,0,0,0,225,5,
+    0,0,115,2,0,0,0,0,2,122,27,95,73,109,112,111,
+    114,116,76,111,99,107,67,111,110,116,101,120,116,46,95,95,
+    101,120,105,116,95,95,78,41,6,114,57,0,0,0,114,56,
+    0,0,0,114,58,0,0,0,114,59,0,0,0,114,143,0,
+    0,0,114,146,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,4,0,0,0,114,5,0,0,0,114,55,1,0,0,
+    217,5,0,0,115,6,0,0,0,12,2,6,2,12,4,114,
+    55,1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,
+    0,4,0,0,0,67,0,0,0,115,91,0,0,0,124,1,
+    0,106,0,0,100,1,0,124,2,0,100,2,0,24,131,2,
+    0,125,3,0,116,1,0,124,3,0,131,1,0,124,2,0,
+    107,0,0,114,55,0,116,2,0,100,3,0,131,1,0,130,
+    1,0,110,0,0,124,3,0,100,4,0,25,125,4,0,124,
+    0,0,114,87,0,100,5,0,106,3,0,124,4,0,124,0,
+    0,131,2,0,83,124,4,0,83,41,6,122,50,82,101,115,
+    111,108,118,101,32,97,32,114,101,108,97,116,105,118,101,32,
+    109,111,100,117,108,101,32,110,97,109,101,32,116,111,32,97,
+    110,32,97,98,115,111,108,117,116,101,32,111,110,101,46,114,
+    102,0,0,0,114,29,0,0,0,122,50,97,116,116,101,109,
+    112,116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,
+    112,111,114,116,32,98,101,121,111,110,100,32,116,111,112,45,
+    108,101,118,101,108,32,112,97,99,107,97,103,101,114,68,0,
+    0,0,122,5,123,125,46,123,125,41,4,114,34,0,0,0,
+    114,31,0,0,0,114,119,0,0,0,114,47,0,0,0,41,
+    5,114,72,0,0,0,218,7,112,97,99,107,97,103,101,218,
+    5,108,101,118,101,108,90,4,98,105,116,115,90,4,98,97,
     115,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
-    0,244,13,0,0,0,95,114,101,115,111,108,118,101,95,110,
-    97,109,101,219,5,0,0,115,10,0,0,0,0,2,22,1,
-    18,1,15,1,10,1,114,58,1,0,0,99,2,0,0,0,
-    0,0,0,0,4,0,0,0,11,0,0,0,67,0,0,0,
-    115,138,0,0,0,116,0,0,106,1,0,115,28,0,116,2,
-    0,106,3,0,100,1,0,116,4,0,131,2,0,1,110,0,
-    0,120,103,0,116,0,0,106,1,0,68,93,88,0,125,2,
-    0,116,5,0,131,0,0,143,23,0,1,124,2,0,106,6,
-    0,124,0,0,124,1,0,131,2,0,125,3,0,87,100,2,
-    0,81,88,124,3,0,100,2,0,107,9,0,114,38,0,124,
-    0,0,116,0,0,106,7,0,107,7,0,114,109,0,124,3,
-    0,83,116,0,0,106,7,0,124,0,0,25,106,8,0,83,
-    113,38,0,113,38,0,87,100,2,0,83,100,2,0,83,40,
-    3,0,0,0,117,23,0,0,0,70,105,110,100,32,97,32,
-    109,111,100,117,108,101,39,115,32,108,111,97,100,101,114,46,
-    117,22,0,0,0,115,121,115,46,109,101,116,97,95,112,97,
-    116,104,32,105,115,32,101,109,112,116,121,78,40,9,0,0,
-    0,114,7,0,0,0,244,9,0,0,0,109,101,116,97,95,
-    112,97,116,104,114,185,0,0,0,114,186,0,0,0,114,187,
-    0,0,0,114,54,1,0,0,114,217,0,0,0,114,140,0,
-    0,0,114,171,0,0,0,40,4,0,0,0,114,71,0,0,
-    0,114,35,0,0,0,114,31,1,0,0,114,160,0,0,0,
-    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,
-    12,0,0,0,95,102,105,110,100,95,109,111,100,117,108,101,
-    228,5,0,0,115,20,0,0,0,0,2,9,1,19,1,16,
-    1,10,1,24,1,12,2,15,1,4,2,21,2,114,60,1,
-    0,0,99,3,0,0,0,0,0,0,0,4,0,0,0,4,
-    0,0,0,67,0,0,0,115,194,0,0,0,116,0,0,124,
-    0,0,116,1,0,131,2,0,115,45,0,116,2,0,100,1,
-    0,106,3,0,116,4,0,124,0,0,131,1,0,131,1,0,
-    131,1,0,130,1,0,110,0,0,124,2,0,100,2,0,107,
-    0,0,114,72,0,116,5,0,100,3,0,131,1,0,130,1,
-    0,110,0,0,124,1,0,114,156,0,116,0,0,124,1,0,
-    116,1,0,131,2,0,115,108,0,116,2,0,100,4,0,131,
-    1,0,130,1,0,113,156,0,124,1,0,116,6,0,106,7,
-    0,107,7,0,114,156,0,100,5,0,125,3,0,116,8,0,
-    124,3,0,106,3,0,124,1,0,131,1,0,131,1,0,130,
-    1,0,113,156,0,110,0,0,124,0,0,12,114,190,0,124,
-    2,0,100,2,0,107,2,0,114,190,0,116,5,0,100,6,
-    0,131,1,0,130,1,0,110,0,0,100,7,0,83,40,8,
-    0,0,0,117,28,0,0,0,86,101,114,105,102,121,32,97,
-    114,103,117,109,101,110,116,115,32,97,114,101,32,34,115,97,
-    110,101,34,46,117,31,0,0,0,109,111,100,117,108,101,32,
-    110,97,109,101,32,109,117,115,116,32,98,101,32,115,116,114,
-    44,32,110,111,116,32,123,125,114,67,0,0,0,117,18,0,
-    0,0,108,101,118,101,108,32,109,117,115,116,32,98,101,32,
-    62,61,32,48,117,31,0,0,0,95,95,112,97,99,107,97,
-    103,101,95,95,32,110,111,116,32,115,101,116,32,116,111,32,
-    97,32,115,116,114,105,110,103,117,61,0,0,0,80,97,114,
+    0,218,13,95,114,101,115,111,108,118,101,95,110,97,109,101,
+    230,5,0,0,115,10,0,0,0,0,2,22,1,18,1,15,
+    1,10,1,114,59,1,0,0,99,2,0,0,0,0,0,0,
+    0,5,0,0,0,19,0,0,0,67,0,0,0,115,188,0,
+    0,0,116,0,0,106,1,0,115,28,0,116,2,0,106,3,
+    0,100,1,0,116,4,0,131,2,0,1,110,0,0,124,0,
+    0,116,0,0,106,5,0,107,6,0,125,2,0,120,138,0,
+    116,0,0,106,1,0,68,93,123,0,125,3,0,116,6,0,
+    131,0,0,143,23,0,1,124,3,0,106,7,0,124,0,0,
+    124,1,0,131,2,0,125,4,0,87,100,2,0,81,88,124,
+    4,0,100,2,0,107,9,0,114,53,0,124,2,0,115,126,
+    0,124,0,0,116,0,0,106,5,0,107,7,0,114,130,0,
+    124,4,0,83,121,18,0,116,0,0,106,5,0,124,0,0,
+    25,106,8,0,83,87,113,176,0,4,116,9,0,107,10,0,
+    114,172,0,1,1,1,124,4,0,83,89,113,176,0,88,113,
+    53,0,113,53,0,87,100,2,0,83,100,2,0,83,41,3,
+    122,23,70,105,110,100,32,97,32,109,111,100,117,108,101,39,
+    115,32,108,111,97,100,101,114,46,122,22,115,121,115,46,109,
+    101,116,97,95,112,97,116,104,32,105,115,32,101,109,112,116,
+    121,78,41,10,114,7,0,0,0,218,9,109,101,116,97,95,
+    112,97,116,104,114,186,0,0,0,114,187,0,0,0,114,188,
+    0,0,0,114,141,0,0,0,114,55,1,0,0,114,218,0,
+    0,0,114,172,0,0,0,114,155,0,0,0,41,5,114,72,
+    0,0,0,114,35,0,0,0,90,9,105,115,95,114,101,108,
+    111,97,100,114,32,1,0,0,114,161,0,0,0,114,4,0,
+    0,0,114,4,0,0,0,114,5,0,0,0,218,12,95,102,
+    105,110,100,95,109,111,100,117,108,101,239,5,0,0,115,28,
+    0,0,0,0,2,9,1,19,1,15,1,16,1,10,1,24,
+    1,12,2,21,1,4,2,3,1,18,1,13,1,16,2,114,
+    61,1,0,0,99,3,0,0,0,0,0,0,0,4,0,0,
+    0,4,0,0,0,67,0,0,0,115,194,0,0,0,116,0,
+    0,124,0,0,116,1,0,131,2,0,115,45,0,116,2,0,
+    100,1,0,106,3,0,116,4,0,124,0,0,131,1,0,131,
+    1,0,131,1,0,130,1,0,110,0,0,124,2,0,100,2,
+    0,107,0,0,114,72,0,116,5,0,100,3,0,131,1,0,
+    130,1,0,110,0,0,124,1,0,114,156,0,116,0,0,124,
+    1,0,116,1,0,131,2,0,115,108,0,116,2,0,100,4,
+    0,131,1,0,130,1,0,113,156,0,124,1,0,116,6,0,
+    106,7,0,107,7,0,114,156,0,100,5,0,125,3,0,116,
+    8,0,124,3,0,106,3,0,124,1,0,131,1,0,131,1,
+    0,130,1,0,113,156,0,110,0,0,124,0,0,12,114,190,
+    0,124,2,0,100,2,0,107,2,0,114,190,0,116,5,0,
+    100,6,0,131,1,0,130,1,0,110,0,0,100,7,0,83,
+    41,8,122,28,86,101,114,105,102,121,32,97,114,103,117,109,
+    101,110,116,115,32,97,114,101,32,34,115,97,110,101,34,46,
+    122,31,109,111,100,117,108,101,32,110,97,109,101,32,109,117,
+    115,116,32,98,101,32,115,116,114,44,32,110,111,116,32,123,
+    125,114,68,0,0,0,122,18,108,101,118,101,108,32,109,117,
+    115,116,32,98,101,32,62,61,32,48,122,31,95,95,112,97,
+    99,107,97,103,101,95,95,32,110,111,116,32,115,101,116,32,
+    116,111,32,97,32,115,116,114,105,110,103,122,61,80,97,114,
     101,110,116,32,109,111,100,117,108,101,32,123,33,114,125,32,
     110,111,116,32,108,111,97,100,101,100,44,32,99,97,110,110,
     111,116,32,112,101,114,102,111,114,109,32,114,101,108,97,116,
-    105,118,101,32,105,109,112,111,114,116,117,17,0,0,0,69,
-    109,112,116,121,32,109,111,100,117,108,101,32,110,97,109,101,
-    78,40,9,0,0,0,114,202,0,0,0,114,35,1,0,0,
-    244,9,0,0,0,84,121,112,101,69,114,114,111,114,114,46,
-    0,0,0,114,152,0,0,0,114,118,0,0,0,114,7,0,
-    0,0,114,140,0,0,0,244,11,0,0,0,83,121,115,116,
-    101,109,69,114,114,111,114,40,4,0,0,0,114,71,0,0,
-    0,114,56,1,0,0,114,57,1,0,0,114,189,0,0,0,
-    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,
-    13,0,0,0,95,115,97,110,105,116,121,95,99,104,101,99,
-    107,245,5,0,0,115,24,0,0,0,0,2,15,1,30,1,
-    12,1,15,1,6,1,15,1,15,1,15,1,6,2,27,1,
-    19,1,114,63,1,0,0,117,16,0,0,0,78,111,32,109,
-    111,100,117,108,101,32,110,97,109,101,100,32,117,4,0,0,
-    0,123,33,114,125,99,2,0,0,0,0,0,0,0,8,0,
-    0,0,27,0,0,0,67,0,0,0,115,6,2,0,0,100,
-    0,0,125,2,0,124,0,0,106,0,0,100,1,0,131,1,
-    0,100,2,0,25,125,3,0,124,3,0,114,178,0,124,3,
-    0,116,1,0,106,2,0,107,7,0,114,62,0,116,3,0,
-    124,1,0,124,3,0,131,2,0,1,110,0,0,124,0,0,
-    116,1,0,106,2,0,107,6,0,114,88,0,116,1,0,106,
-    2,0,124,0,0,25,83,116,1,0,106,2,0,124,3,0,
-    25,125,4,0,121,13,0,124,4,0,106,4,0,125,2,0,
-    87,113,178,0,4,116,5,0,107,10,0,114,174,0,1,1,
-    1,116,6,0,100,3,0,23,106,7,0,124,0,0,124,3,
-    0,131,2,0,125,5,0,116,8,0,124,5,0,100,4,0,
-    124,0,0,131,1,1,130,1,0,89,113,178,0,88,110,0,
-    0,116,9,0,124,0,0,124,2,0,131,2,0,125,6,0,
-    124,6,0,100,0,0,107,8,0,114,235,0,116,8,0,116,
-    6,0,106,7,0,124,0,0,131,1,0,100,4,0,124,0,
-    0,131,1,1,130,1,0,110,47,0,124,0,0,116,1,0,
-    106,2,0,107,7,0,114,26,1,124,6,0,106,10,0,124,
-    0,0,131,1,0,1,116,11,0,100,5,0,124,0,0,124,
-    6,0,131,3,0,1,110,0,0,116,1,0,106,2,0,124,
-    0,0,25,125,7,0,124,3,0,114,90,1,116,1,0,106,
-    2,0,124,3,0,25,125,4,0,116,12,0,124,4,0,124,
-    0,0,106,0,0,100,1,0,131,1,0,100,6,0,25,124,
-    7,0,131,3,0,1,110,0,0,116,13,0,124,7,0,100,
-    7,0,100,0,0,131,3,0,100,0,0,107,8,0,114,197,
-    1,121,59,0,124,7,0,106,14,0,124,7,0,95,15,0,
-    116,16,0,124,7,0,100,8,0,131,2,0,115,172,1,124,
-    7,0,106,15,0,106,0,0,100,1,0,131,1,0,100,2,
-    0,25,124,7,0,95,15,0,110,0,0,87,113,197,1,4,
-    116,5,0,107,10,0,114,193,1,1,1,1,89,113,197,1,
-    88,110,0,0,116,13,0,124,7,0,100,9,0,100,0,0,
-    131,3,0,100,0,0,107,8,0,114,2,2,121,13,0,124,
-    6,0,124,7,0,95,17,0,87,113,2,2,4,116,5,0,
-    107,10,0,114,254,1,1,1,1,89,113,2,2,88,110,0,
-    0,124,7,0,83,40,10,0,0,0,78,114,101,0,0,0,
-    114,67,0,0,0,117,21,0,0,0,59,32,123,125,32,105,
-    115,32,110,111,116,32,97,32,112,97,99,107,97,103,101,114,
-    71,0,0,0,117,18,0,0,0,105,109,112,111,114,116,32,
-    123,33,114,125,32,35,32,123,33,114,125,114,100,0,0,0,
-    114,158,0,0,0,114,159,0,0,0,114,171,0,0,0,40,
-    18,0,0,0,114,32,0,0,0,114,7,0,0,0,114,140,
-    0,0,0,114,99,0,0,0,114,159,0,0,0,114,154,0,
-    0,0,244,8,0,0,0,95,69,82,82,95,77,83,71,114,
-    46,0,0,0,114,157,0,0,0,114,60,1,0,0,114,218,
-    0,0,0,114,137,0,0,0,114,60,0,0,0,114,61,0,
-    0,0,114,56,0,0,0,114,158,0,0,0,114,59,0,0,
-    0,114,171,0,0,0,40,8,0,0,0,114,71,0,0,0,
-    244,7,0,0,0,105,109,112,111,114,116,95,114,35,0,0,
-    0,114,6,1,0,0,116,13,0,0,0,112,97,114,101,110,
-    116,95,109,111,100,117,108,101,114,189,0,0,0,114,160,0,
-    0,0,114,161,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,244,23,0,0,0,95,102,105,110,100,
-    95,97,110,100,95,108,111,97,100,95,117,110,108,111,99,107,
-    101,100,9,6,0,0,115,72,0,0,0,0,1,6,1,19,
-    1,6,1,15,1,16,2,15,1,11,2,13,1,3,1,13,
-    1,13,1,22,1,26,1,15,1,12,1,30,1,15,2,13,
-    1,19,2,13,1,6,2,13,1,32,2,24,1,3,1,12,
-    1,15,1,32,1,13,1,8,2,24,1,3,1,13,1,13,
-    1,8,1,114,66,1,0,0,99,2,0,0,0,0,0,0,
-    0,3,0,0,0,18,0,0,0,67,0,0,0,115,75,0,
-    0,0,122,16,0,116,0,0,124,0,0,131,1,0,125,2,
-    0,87,100,1,0,116,1,0,106,2,0,131,0,0,1,88,
-    124,2,0,106,3,0,131,0,0,1,122,17,0,116,4,0,
-    124,0,0,124,1,0,131,2,0,83,87,100,1,0,124,2,
-    0,106,5,0,131,0,0,1,88,100,1,0,83,40,2,0,
-    0,0,117,54,0,0,0,70,105,110,100,32,97,110,100,32,
-    108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,44,
-    32,97,110,100,32,114,101,108,101,97,115,101,32,116,104,101,
-    32,105,109,112,111,114,116,32,108,111,99,107,46,78,40,6,
-    0,0,0,114,93,0,0,0,114,94,0,0,0,114,95,0,
-    0,0,114,83,0,0,0,114,66,1,0,0,114,84,0,0,
-    0,40,3,0,0,0,114,71,0,0,0,114,65,1,0,0,
-    114,69,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
-    5,0,0,0,244,14,0,0,0,95,102,105,110,100,95,97,
-    110,100,95,108,111,97,100,55,6,0,0,115,14,0,0,0,
-    0,2,3,1,16,2,11,1,10,1,3,1,17,2,114,67,
-    1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,0,
-    4,0,0,0,67,0,0,0,115,172,0,0,0,116,0,0,
-    124,0,0,124,1,0,124,2,0,131,3,0,1,124,2,0,
-    100,1,0,107,4,0,114,49,0,116,1,0,124,0,0,124,
-    1,0,124,2,0,131,3,0,125,0,0,110,0,0,116,2,
-    0,106,3,0,131,0,0,1,124,0,0,116,4,0,106,5,
-    0,107,7,0,114,87,0,116,6,0,124,0,0,116,7,0,
-    131,2,0,83,116,4,0,106,5,0,124,0,0,25,125,3,
-    0,124,3,0,100,2,0,107,8,0,114,158,0,116,2,0,
-    106,8,0,131,0,0,1,100,3,0,106,9,0,124,0,0,
-    131,1,0,125,4,0,116,10,0,124,4,0,100,4,0,124,
-    0,0,131,1,1,130,1,0,110,0,0,116,11,0,124,0,
-    0,131,1,0,1,124,3,0,83,40,5,0,0,0,117,50,
-    1,0,0,73,109,112,111,114,116,32,97,110,100,32,114,101,
-    116,117,114,110,32,116,104,101,32,109,111,100,117,108,101,32,
-    98,97,115,101,100,32,111,110,32,105,116,115,32,110,97,109,
-    101,44,32,116,104,101,32,112,97,99,107,97,103,101,32,116,
-    104,101,32,99,97,108,108,32,105,115,10,32,32,32,32,98,
-    101,105,110,103,32,109,97,100,101,32,102,114,111,109,44,32,
-    97,110,100,32,116,104,101,32,108,101,118,101,108,32,97,100,
-    106,117,115,116,109,101,110,116,46,10,10,32,32,32,32,84,
-    104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,112,
-    114,101,115,101,110,116,115,32,116,104,101,32,103,114,101,97,
-    116,101,115,116,32,99,111,109,109,111,110,32,100,101,110,111,
-    109,105,110,97,116,111,114,32,111,102,32,102,117,110,99,116,
-    105,111,110,97,108,105,116,121,10,32,32,32,32,98,101,116,
-    119,101,101,110,32,105,109,112,111,114,116,95,109,111,100,117,
-    108,101,32,97,110,100,32,95,95,105,109,112,111,114,116,95,
-    95,46,32,84,104,105,115,32,105,110,99,108,117,100,101,115,
-    32,115,101,116,116,105,110,103,32,95,95,112,97,99,107,97,
-    103,101,95,95,32,105,102,10,32,32,32,32,116,104,101,32,
-    108,111,97,100,101,114,32,100,105,100,32,110,111,116,46,10,
-    10,32,32,32,32,114,67,0,0,0,78,117,40,0,0,0,
-    105,109,112,111,114,116,32,111,102,32,123,125,32,104,97,108,
-    116,101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,
-    46,109,111,100,117,108,101,115,114,71,0,0,0,40,12,0,
-    0,0,114,63,1,0,0,114,58,1,0,0,114,94,0,0,
-    0,114,55,1,0,0,114,7,0,0,0,114,140,0,0,0,
-    114,67,1,0,0,244,11,0,0,0,95,103,99,100,95,105,
-    109,112,111,114,116,114,95,0,0,0,114,46,0,0,0,114,
-    157,0,0,0,114,96,0,0,0,40,5,0,0,0,114,71,
-    0,0,0,114,56,1,0,0,114,57,1,0,0,114,161,0,
-    0,0,114,136,0,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,68,1,0,0,68,6,0,0,115,
-    26,0,0,0,0,9,16,1,12,1,21,1,10,1,15,1,
-    13,1,13,1,12,1,10,2,15,1,21,1,10,1,114,68,
-    1,0,0,99,3,0,0,0,0,0,0,0,6,0,0,0,
-    17,0,0,0,67,0,0,0,115,1,1,0,0,116,0,0,
-    124,0,0,100,1,0,131,2,0,114,253,0,100,2,0,124,
-    1,0,107,6,0,114,89,0,116,1,0,124,1,0,131,1,
-    0,125,1,0,124,1,0,106,2,0,100,2,0,131,1,0,
-    1,116,0,0,124,0,0,100,3,0,131,2,0,114,89,0,
-    124,1,0,106,3,0,124,0,0,106,4,0,131,1,0,1,
-    113,89,0,110,0,0,120,161,0,124,1,0,68,93,150,0,
-    125,3,0,116,0,0,124,0,0,124,3,0,131,2,0,115,
-    96,0,100,4,0,106,5,0,124,0,0,106,6,0,124,3,
-    0,131,2,0,125,4,0,121,17,0,116,7,0,124,2,0,
-    124,4,0,131,2,0,1,87,113,246,0,4,116,8,0,107,
-    10,0,114,242,0,1,125,5,0,1,122,53,0,116,9,0,
-    124,5,0,131,1,0,106,10,0,116,11,0,131,1,0,114,
-    221,0,124,5,0,106,12,0,124,4,0,107,2,0,114,221,
-    0,119,96,0,113,221,0,110,0,0,130,0,0,87,89,100,
-    5,0,100,5,0,125,5,0,126,5,0,88,113,246,0,88,
-    113,96,0,113,96,0,87,110,0,0,124,0,0,83,40,6,
-    0,0,0,117,238,0,0,0,70,105,103,117,114,101,32,111,
-    117,116,32,119,104,97,116,32,95,95,105,109,112,111,114,116,
-    95,95,32,115,104,111,117,108,100,32,114,101,116,117,114,110,
-    46,10,10,32,32,32,32,84,104,101,32,105,109,112,111,114,
-    116,95,32,112,97,114,97,109,101,116,101,114,32,105,115,32,
-    97,32,99,97,108,108,97,98,108,101,32,119,104,105,99,104,
-    32,116,97,107,101,115,32,116,104,101,32,110,97,109,101,32,
-    111,102,32,109,111,100,117,108,101,32,116,111,10,32,32,32,
-    32,105,109,112,111,114,116,46,32,73,116,32,105,115,32,114,
-    101,113,117,105,114,101,100,32,116,111,32,100,101,99,111,117,
-    112,108,101,32,116,104,101,32,102,117,110,99,116,105,111,110,
-    32,102,114,111,109,32,97,115,115,117,109,105,110,103,32,105,
-    109,112,111,114,116,108,105,98,39,115,10,32,32,32,32,105,
-    109,112,111,114,116,32,105,109,112,108,101,109,101,110,116,97,
-    116,105,111,110,32,105,115,32,100,101,115,105,114,101,100,46,
-    10,10,32,32,32,32,114,159,0,0,0,245,1,0,0,0,
-    42,244,7,0,0,0,95,95,97,108,108,95,95,117,5,0,
-    0,0,123,125,46,123,125,78,40,13,0,0,0,114,59,0,
-    0,0,244,4,0,0,0,108,105,115,116,244,6,0,0,0,
-    114,101,109,111,118,101,114,207,0,0,0,114,70,1,0,0,
-    114,46,0,0,0,114,56,0,0,0,114,99,0,0,0,114,
-    157,0,0,0,114,35,1,0,0,114,9,0,0,0,244,15,
-    0,0,0,95,69,82,82,95,77,83,71,95,80,82,69,70,
-    73,88,114,71,0,0,0,40,6,0,0,0,114,161,0,0,
-    0,244,8,0,0,0,102,114,111,109,108,105,115,116,114,65,
-    1,0,0,114,16,0,0,0,116,9,0,0,0,102,114,111,
-    109,95,110,97,109,101,114,248,0,0,0,114,4,0,0,0,
-    114,4,0,0,0,114,5,0,0,0,244,16,0,0,0,95,
-    104,97,110,100,108,101,95,102,114,111,109,108,105,115,116,92,
-    6,0,0,115,34,0,0,0,0,10,15,1,12,1,12,1,
-    13,1,15,1,22,1,13,1,15,1,21,1,3,1,17,1,
-    18,4,21,1,15,1,9,1,32,1,114,75,1,0,0,99,
-    1,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,
-    67,0,0,0,115,78,0,0,0,124,0,0,106,0,0,100,
-    1,0,131,1,0,125,1,0,124,1,0,100,2,0,107,8,
-    0,114,74,0,124,0,0,100,3,0,25,125,1,0,100,4,
-    0,124,0,0,107,7,0,114,74,0,124,1,0,106,1,0,
-    100,5,0,131,1,0,100,6,0,25,125,1,0,113,74,0,
-    110,0,0,124,1,0,83,40,7,0,0,0,117,167,0,0,
-    0,67,97,108,99,117,108,97,116,101,32,119,104,97,116,32,
-    95,95,112,97,99,107,97,103,101,95,95,32,115,104,111,117,
-    108,100,32,98,101,46,10,10,32,32,32,32,95,95,112,97,
-    99,107,97,103,101,95,95,32,105,115,32,110,111,116,32,103,
-    117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,
-    100,101,102,105,110,101,100,32,111,114,32,99,111,117,108,100,
-    32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,10,
-    32,32,32,32,116,111,32,114,101,112,114,101,115,101,110,116,
-    32,116,104,97,116,32,105,116,115,32,112,114,111,112,101,114,
-    32,118,97,108,117,101,32,105,115,32,117,110,107,110,111,119,
-    110,46,10,10,32,32,32,32,114,158,0,0,0,78,114,56,
-    0,0,0,114,159,0,0,0,114,101,0,0,0,114,67,0,
-    0,0,40,2,0,0,0,114,79,0,0,0,114,32,0,0,
-    0,40,2,0,0,0,244,7,0,0,0,103,108,111,98,97,
-    108,115,114,56,1,0,0,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,244,17,0,0,0,95,99,97,108,99,
-    95,95,95,112,97,99,107,97,103,101,95,95,124,6,0,0,
-    115,12,0,0,0,0,7,15,1,12,1,10,1,12,1,25,
-    1,114,77,1,0,0,99,0,0,0,0,0,0,0,0,3,
-    0,0,0,3,0,0,0,67,0,0,0,115,55,0,0,0,
-    116,0,0,116,1,0,106,2,0,131,0,0,102,2,0,125,
-    0,0,116,3,0,116,4,0,102,2,0,125,1,0,116,5,
-    0,116,6,0,102,2,0,125,2,0,124,0,0,124,1,0,
-    124,2,0,103,3,0,83,40,1,0,0,0,117,95,0,0,
-    0,82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,
+    105,118,101,32,105,109,112,111,114,116,122,17,69,109,112,116,
+    121,32,109,111,100,117,108,101,32,110,97,109,101,78,41,9,
+    114,203,0,0,0,114,36,1,0,0,218,9,84,121,112,101,
+    69,114,114,111,114,114,47,0,0,0,114,153,0,0,0,114,
+    119,0,0,0,114,7,0,0,0,114,141,0,0,0,218,11,
+    83,121,115,116,101,109,69,114,114,111,114,41,4,114,72,0,
+    0,0,114,57,1,0,0,114,58,1,0,0,114,190,0,0,
+    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
+    218,13,95,115,97,110,105,116,121,95,99,104,101,99,107,4,
+    6,0,0,115,24,0,0,0,0,2,15,1,30,1,12,1,
+    15,1,6,1,15,1,15,1,15,1,6,2,27,1,19,1,
+    114,64,1,0,0,122,16,78,111,32,109,111,100,117,108,101,
+    32,110,97,109,101,100,32,122,4,123,33,114,125,99,2,0,
+    0,0,0,0,0,0,8,0,0,0,27,0,0,0,67,0,
+    0,0,115,6,2,0,0,100,0,0,125,2,0,124,0,0,
+    106,0,0,100,1,0,131,1,0,100,2,0,25,125,3,0,
+    124,3,0,114,178,0,124,3,0,116,1,0,106,2,0,107,
+    7,0,114,62,0,116,3,0,124,1,0,124,3,0,131,2,
+    0,1,110,0,0,124,0,0,116,1,0,106,2,0,107,6,
+    0,114,88,0,116,1,0,106,2,0,124,0,0,25,83,116,
+    1,0,106,2,0,124,3,0,25,125,4,0,121,13,0,124,
+    4,0,106,4,0,125,2,0,87,113,178,0,4,116,5,0,
+    107,10,0,114,174,0,1,1,1,116,6,0,100,3,0,23,
+    106,7,0,124,0,0,124,3,0,131,2,0,125,5,0,116,
+    8,0,124,5,0,100,4,0,124,0,0,131,1,1,130,1,
+    0,89,113,178,0,88,110,0,0,116,9,0,124,0,0,124,
+    2,0,131,2,0,125,6,0,124,6,0,100,0,0,107,8,
+    0,114,235,0,116,8,0,116,6,0,106,7,0,124,0,0,
+    131,1,0,100,4,0,124,0,0,131,1,1,130,1,0,110,
+    47,0,124,0,0,116,1,0,106,2,0,107,7,0,114,26,
+    1,124,6,0,106,10,0,124,0,0,131,1,0,1,116,11,
+    0,100,5,0,124,0,0,124,6,0,131,3,0,1,110,0,
+    0,116,1,0,106,2,0,124,0,0,25,125,7,0,124,3,
+    0,114,90,1,116,1,0,106,2,0,124,3,0,25,125,4,
+    0,116,12,0,124,4,0,124,0,0,106,0,0,100,1,0,
+    131,1,0,100,6,0,25,124,7,0,131,3,0,1,110,0,
+    0,116,13,0,124,7,0,100,7,0,100,0,0,131,3,0,
+    100,0,0,107,8,0,114,197,1,121,59,0,124,7,0,106,
+    14,0,124,7,0,95,15,0,116,16,0,124,7,0,100,8,
+    0,131,2,0,115,172,1,124,7,0,106,15,0,106,0,0,
+    100,1,0,131,1,0,100,2,0,25,124,7,0,95,15,0,
+    110,0,0,87,113,197,1,4,116,5,0,107,10,0,114,193,
+    1,1,1,1,89,113,197,1,88,110,0,0,116,13,0,124,
+    7,0,100,9,0,100,0,0,131,3,0,100,0,0,107,8,
+    0,114,2,2,121,13,0,124,6,0,124,7,0,95,17,0,
+    87,113,2,2,4,116,5,0,107,10,0,114,254,1,1,1,
+    1,89,113,2,2,88,110,0,0,124,7,0,83,41,10,78,
+    114,102,0,0,0,114,68,0,0,0,122,21,59,32,123,125,
+    32,105,115,32,110,111,116,32,97,32,112,97,99,107,97,103,
+    101,114,72,0,0,0,122,18,105,109,112,111,114,116,32,123,
+    33,114,125,32,35,32,123,33,114,125,114,101,0,0,0,114,
+    159,0,0,0,114,160,0,0,0,114,172,0,0,0,41,18,
+    114,32,0,0,0,114,7,0,0,0,114,141,0,0,0,114,
+    100,0,0,0,114,160,0,0,0,114,155,0,0,0,218,8,
+    95,69,82,82,95,77,83,71,114,47,0,0,0,114,158,0,
+    0,0,114,61,1,0,0,114,219,0,0,0,114,138,0,0,
+    0,114,61,0,0,0,114,62,0,0,0,114,57,0,0,0,
+    114,159,0,0,0,114,60,0,0,0,114,172,0,0,0,41,
+    8,114,72,0,0,0,218,7,105,109,112,111,114,116,95,114,
+    35,0,0,0,114,7,1,0,0,90,13,112,97,114,101,110,
+    116,95,109,111,100,117,108,101,114,190,0,0,0,114,161,0,
+    0,0,114,162,0,0,0,114,4,0,0,0,114,4,0,0,
+    0,114,5,0,0,0,218,23,95,102,105,110,100,95,97,110,
+    100,95,108,111,97,100,95,117,110,108,111,99,107,101,100,24,
+    6,0,0,115,72,0,0,0,0,1,6,1,19,1,6,1,
+    15,1,16,2,15,1,11,2,13,1,3,1,13,1,13,1,
+    22,1,26,1,15,1,12,1,30,1,15,2,13,1,19,2,
+    13,1,6,2,13,1,32,2,24,1,3,1,12,1,15,1,
+    32,1,13,1,8,2,24,1,3,1,13,1,13,1,8,1,
+    114,67,1,0,0,99,2,0,0,0,0,0,0,0,3,0,
+    0,0,18,0,0,0,67,0,0,0,115,75,0,0,0,122,
+    16,0,116,0,0,124,0,0,131,1,0,125,2,0,87,100,
+    1,0,116,1,0,106,2,0,131,0,0,1,88,124,2,0,
+    106,3,0,131,0,0,1,122,17,0,116,4,0,124,0,0,
+    124,1,0,131,2,0,83,87,100,1,0,124,2,0,106,5,
+    0,131,0,0,1,88,100,1,0,83,41,2,122,54,70,105,
+    110,100,32,97,110,100,32,108,111,97,100,32,116,104,101,32,
+    109,111,100,117,108,101,44,32,97,110,100,32,114,101,108,101,
+    97,115,101,32,116,104,101,32,105,109,112,111,114,116,32,108,
+    111,99,107,46,78,41,6,114,94,0,0,0,114,95,0,0,
+    0,114,96,0,0,0,114,84,0,0,0,114,67,1,0,0,
+    114,85,0,0,0,41,3,114,72,0,0,0,114,66,1,0,
+    0,114,70,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,218,14,95,102,105,110,100,95,97,110,100,
+    95,108,111,97,100,70,6,0,0,115,14,0,0,0,0,2,
+    3,1,16,2,11,1,10,1,3,1,17,2,114,68,1,0,
+    0,99,3,0,0,0,0,0,0,0,5,0,0,0,4,0,
+    0,0,67,0,0,0,115,172,0,0,0,116,0,0,124,0,
+    0,124,1,0,124,2,0,131,3,0,1,124,2,0,100,1,
+    0,107,4,0,114,49,0,116,1,0,124,0,0,124,1,0,
+    124,2,0,131,3,0,125,0,0,110,0,0,116,2,0,106,
+    3,0,131,0,0,1,124,0,0,116,4,0,106,5,0,107,
+    7,0,114,87,0,116,6,0,124,0,0,116,7,0,131,2,
+    0,83,116,4,0,106,5,0,124,0,0,25,125,3,0,124,
+    3,0,100,2,0,107,8,0,114,158,0,116,2,0,106,8,
+    0,131,0,0,1,100,3,0,106,9,0,124,0,0,131,1,
+    0,125,4,0,116,10,0,124,4,0,100,4,0,124,0,0,
+    131,1,1,130,1,0,110,0,0,116,11,0,124,0,0,131,
+    1,0,1,124,3,0,83,41,5,97,50,1,0,0,73,109,
+    112,111,114,116,32,97,110,100,32,114,101,116,117,114,110,32,
+    116,104,101,32,109,111,100,117,108,101,32,98,97,115,101,100,
+    32,111,110,32,105,116,115,32,110,97,109,101,44,32,116,104,
+    101,32,112,97,99,107,97,103,101,32,116,104,101,32,99,97,
+    108,108,32,105,115,10,32,32,32,32,98,101,105,110,103,32,
+    109,97,100,101,32,102,114,111,109,44,32,97,110,100,32,116,
+    104,101,32,108,101,118,101,108,32,97,100,106,117,115,116,109,
+    101,110,116,46,10,10,32,32,32,32,84,104,105,115,32,102,
+    117,110,99,116,105,111,110,32,114,101,112,114,101,115,101,110,
+    116,115,32,116,104,101,32,103,114,101,97,116,101,115,116,32,
+    99,111,109,109,111,110,32,100,101,110,111,109,105,110,97,116,
+    111,114,32,111,102,32,102,117,110,99,116,105,111,110,97,108,
+    105,116,121,10,32,32,32,32,98,101,116,119,101,101,110,32,
+    105,109,112,111,114,116,95,109,111,100,117,108,101,32,97,110,
+    100,32,95,95,105,109,112,111,114,116,95,95,46,32,84,104,
+    105,115,32,105,110,99,108,117,100,101,115,32,115,101,116,116,
+    105,110,103,32,95,95,112,97,99,107,97,103,101,95,95,32,
+    105,102,10,32,32,32,32,116,104,101,32,108,111,97,100,101,
+    114,32,100,105,100,32,110,111,116,46,10,10,32,32,32,32,
+    114,68,0,0,0,78,122,40,105,109,112,111,114,116,32,111,
+    102,32,123,125,32,104,97,108,116,101,100,59,32,78,111,110,
+    101,32,105,110,32,115,121,115,46,109,111,100,117,108,101,115,
+    114,72,0,0,0,41,12,114,64,1,0,0,114,59,1,0,
+    0,114,95,0,0,0,114,56,1,0,0,114,7,0,0,0,
+    114,141,0,0,0,114,68,1,0,0,218,11,95,103,99,100,
+    95,105,109,112,111,114,116,114,96,0,0,0,114,47,0,0,
+    0,114,158,0,0,0,114,97,0,0,0,41,5,114,72,0,
+    0,0,114,57,1,0,0,114,58,1,0,0,114,162,0,0,
+    0,114,137,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,114,69,1,0,0,83,6,0,0,115,26,
+    0,0,0,0,9,16,1,12,1,21,1,10,1,15,1,13,
+    1,13,1,12,1,10,2,15,1,21,1,10,1,114,69,1,
+    0,0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,
+    0,0,0,67,0,0,0,115,1,1,0,0,116,0,0,124,
+    0,0,100,1,0,131,2,0,114,253,0,100,2,0,124,1,
+    0,107,6,0,114,89,0,116,1,0,124,1,0,131,1,0,
+    125,1,0,124,1,0,106,2,0,100,2,0,131,1,0,1,
+    116,0,0,124,0,0,100,3,0,131,2,0,114,89,0,124,
+    1,0,106,3,0,124,0,0,106,4,0,131,1,0,1,113,
+    89,0,110,0,0,120,161,0,124,1,0,68,93,150,0,125,
+    3,0,116,0,0,124,0,0,124,3,0,131,2,0,115,96,
+    0,100,4,0,106,5,0,124,0,0,106,6,0,124,3,0,
+    131,2,0,125,4,0,121,17,0,116,7,0,124,2,0,124,
+    4,0,131,2,0,1,87,113,246,0,4,116,8,0,107,10,
+    0,114,242,0,1,125,5,0,1,122,53,0,116,9,0,124,
+    5,0,131,1,0,106,10,0,116,11,0,131,1,0,114,221,
+    0,124,5,0,106,12,0,124,4,0,107,2,0,114,221,0,
+    119,96,0,113,221,0,110,0,0,130,0,0,87,89,100,5,
+    0,100,5,0,125,5,0,126,5,0,88,113,246,0,88,113,
+    96,0,113,96,0,87,110,0,0,124,0,0,83,41,6,122,
+    238,70,105,103,117,114,101,32,111,117,116,32,119,104,97,116,
+    32,95,95,105,109,112,111,114,116,95,95,32,115,104,111,117,
+    108,100,32,114,101,116,117,114,110,46,10,10,32,32,32,32,
+    84,104,101,32,105,109,112,111,114,116,95,32,112,97,114,97,
+    109,101,116,101,114,32,105,115,32,97,32,99,97,108,108,97,
+    98,108,101,32,119,104,105,99,104,32,116,97,107,101,115,32,
+    116,104,101,32,110,97,109,101,32,111,102,32,109,111,100,117,
+    108,101,32,116,111,10,32,32,32,32,105,109,112,111,114,116,
+    46,32,73,116,32,105,115,32,114,101,113,117,105,114,101,100,
+    32,116,111,32,100,101,99,111,117,112,108,101,32,116,104,101,
+    32,102,117,110,99,116,105,111,110,32,102,114,111,109,32,97,
+    115,115,117,109,105,110,103,32,105,109,112,111,114,116,108,105,
+    98,39,115,10,32,32,32,32,105,109,112,111,114,116,32,105,
+    109,112,108,101,109,101,110,116,97,116,105,111,110,32,105,115,
+    32,100,101,115,105,114,101,100,46,10,10,32,32,32,32,114,
+    160,0,0,0,250,1,42,218,7,95,95,97,108,108,95,95,
+    122,5,123,125,46,123,125,78,41,13,114,60,0,0,0,218,
+    4,108,105,115,116,218,6,114,101,109,111,118,101,114,208,0,
+    0,0,114,71,1,0,0,114,47,0,0,0,114,57,0,0,
+    0,114,100,0,0,0,114,158,0,0,0,114,36,1,0,0,
+    114,9,0,0,0,218,15,95,69,82,82,95,77,83,71,95,
+    80,82,69,70,73,88,114,72,0,0,0,41,6,114,162,0,
+    0,0,218,8,102,114,111,109,108,105,115,116,114,66,1,0,
+    0,114,16,0,0,0,90,9,102,114,111,109,95,110,97,109,
+    101,114,249,0,0,0,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,218,16,95,104,97,110,100,108,101,95,102,
+    114,111,109,108,105,115,116,107,6,0,0,115,34,0,0,0,
+    0,10,15,1,12,1,12,1,13,1,15,1,22,1,13,1,
+    15,1,21,1,3,1,17,1,18,4,21,1,15,1,9,1,
+    32,1,114,76,1,0,0,99,1,0,0,0,0,0,0,0,
+    2,0,0,0,2,0,0,0,67,0,0,0,115,78,0,0,
+    0,124,0,0,106,0,0,100,1,0,131,1,0,125,1,0,
+    124,1,0,100,2,0,107,8,0,114,74,0,124,0,0,100,
+    3,0,25,125,1,0,100,4,0,124,0,0,107,7,0,114,
+    74,0,124,1,0,106,1,0,100,5,0,131,1,0,100,6,
+    0,25,125,1,0,113,74,0,110,0,0,124,1,0,83,41,
+    7,122,167,67,97,108,99,117,108,97,116,101,32,119,104,97,
+    116,32,95,95,112,97,99,107,97,103,101,95,95,32,115,104,
+    111,117,108,100,32,98,101,46,10,10,32,32,32,32,95,95,
+    112,97,99,107,97,103,101,95,95,32,105,115,32,110,111,116,
+    32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,
+    101,32,100,101,102,105,110,101,100,32,111,114,32,99,111,117,
+    108,100,32,98,101,32,115,101,116,32,116,111,32,78,111,110,
+    101,10,32,32,32,32,116,111,32,114,101,112,114,101,115,101,
+    110,116,32,116,104,97,116,32,105,116,115,32,112,114,111,112,
+    101,114,32,118,97,108,117,101,32,105,115,32,117,110,107,110,
+    111,119,110,46,10,10,32,32,32,32,114,159,0,0,0,78,
+    114,57,0,0,0,114,160,0,0,0,114,102,0,0,0,114,
+    68,0,0,0,41,2,114,80,0,0,0,114,32,0,0,0,
+    41,2,218,7,103,108,111,98,97,108,115,114,57,1,0,0,
+    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
+    17,95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,
+    95,95,139,6,0,0,115,12,0,0,0,0,7,15,1,12,
+    1,10,1,12,1,25,1,114,78,1,0,0,99,0,0,0,
+    0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,
+    0,115,55,0,0,0,116,0,0,116,1,0,106,2,0,131,
+    0,0,102,2,0,125,0,0,116,3,0,116,4,0,102,2,
+    0,125,1,0,116,5,0,116,6,0,102,2,0,125,2,0,
+    124,0,0,124,1,0,124,2,0,103,3,0,83,41,1,122,
+    95,82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,
     111,102,32,102,105,108,101,45,98,97,115,101,100,32,109,111,
     100,117,108,101,32,108,111,97,100,101,114,115,46,10,10,32,
     32,32,32,69,97,99,104,32,105,116,101,109,32,105,115,32,
     97,32,116,117,112,108,101,32,40,108,111,97,100,101,114,44,
     32,115,117,102,102,105,120,101,115,41,46,10,32,32,32,32,
-    40,7,0,0,0,114,8,1,0,0,114,94,0,0,0,244,
-    18,0,0,0,101,120,116,101,110,115,105,111,110,95,115,117,
-    102,102,105,120,101,115,114,2,1,0,0,114,119,0,0,0,
-    114,7,1,0,0,244,17,0,0,0,66,89,84,69,67,79,
-    68,69,95,83,85,70,70,73,88,69,83,40,3,0,0,0,
-    116,10,0,0,0,101,120,116,101,110,115,105,111,110,115,116,
-    6,0,0,0,115,111,117,114,99,101,116,8,0,0,0,98,
-    121,116,101,99,111,100,101,114,4,0,0,0,114,4,0,0,
-    0,114,5,0,0,0,114,234,0,0,0,139,6,0,0,115,
-    8,0,0,0,0,5,18,1,12,1,12,1,114,234,0,0,
-    0,99,5,0,0,0,0,0,0,0,9,0,0,0,5,0,
-    0,0,67,0,0,0,115,227,0,0,0,124,4,0,100,1,
-    0,107,2,0,114,27,0,116,0,0,124,0,0,131,1,0,
-    125,5,0,110,54,0,124,1,0,100,2,0,107,9,0,114,
-    45,0,124,1,0,110,3,0,105,0,0,125,6,0,116,1,
-    0,124,6,0,131,1,0,125,7,0,116,0,0,124,0,0,
-    124,7,0,124,4,0,131,3,0,125,5,0,124,3,0,115,
-    207,0,124,4,0,100,1,0,107,2,0,114,122,0,116,0,
-    0,124,0,0,106,2,0,100,3,0,131,1,0,100,1,0,
-    25,131,1,0,83,124,0,0,115,132,0,124,5,0,83,116,
-    3,0,124,0,0,131,1,0,116,3,0,124,0,0,106,2,
-    0,100,3,0,131,1,0,100,1,0,25,131,1,0,24,125,
-    8,0,116,4,0,106,5,0,124,5,0,106,6,0,100,2,
-    0,116,3,0,124,5,0,106,6,0,131,1,0,124,8,0,
-    24,133,2,0,25,25,83,110,16,0,116,7,0,124,5,0,
-    124,3,0,116,0,0,131,3,0,83,100,2,0,83,40,4,
-    0,0,0,117,214,1,0,0,73,109,112,111,114,116,32,97,
-    32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,104,
-    101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,117,
-    109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,32,
-    105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,32,
-    105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,105,
-    110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,104,
-    97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,105,
-    109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,99,
-    97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115,
-    32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,32,
-    32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,103,
-    117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,32,
-    119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,115,
-    116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,32,
-    111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,32,
-    32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100,
-    32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,111,
-    100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,111,
-    109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,32,
-    39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,117,
-    109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32,
-    116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,97,
-    116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,102,
-    114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,118,
-    101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,46,
-    103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,32,
-    105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,117,
-    108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,108,
-    39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,67,
-    0,0,0,78,114,101,0,0,0,40,8,0,0,0,114,68,
-    1,0,0,114,77,1,0,0,114,106,0,0,0,114,31,0,
-    0,0,114,7,0,0,0,114,140,0,0,0,114,56,0,0,
-    0,114,75,1,0,0,40,9,0,0,0,114,71,0,0,0,
-    114,76,1,0,0,244,6,0,0,0,108,111,99,97,108,115,
-    114,74,1,0,0,114,57,1,0,0,114,161,0,0,0,116,
-    8,0,0,0,103,108,111,98,97,108,115,95,114,56,1,0,
-    0,116,7,0,0,0,99,117,116,95,111,102,102,114,4,0,
-    0,0,114,4,0,0,0,114,5,0,0,0,244,10,0,0,
-    0,95,95,105,109,112,111,114,116,95,95,150,6,0,0,115,
-    26,0,0,0,0,11,12,1,15,2,24,1,12,1,18,1,
-    6,3,12,1,23,1,6,1,4,4,35,3,40,2,114,81,
-    1,0,0,99,2,0,0,0,0,0,0,0,16,0,0,0,
-    13,0,0,0,67,0,0,0,115,237,2,0,0,124,1,0,
-    97,0,0,124,0,0,97,1,0,116,1,0,106,2,0,106,
-    3,0,114,33,0,116,4,0,97,5,0,110,6,0,116,6,
-    0,97,5,0,116,7,0,116,1,0,131,1,0,125,2,0,
-    120,128,0,116,1,0,106,8,0,106,9,0,131,0,0,68,
-    93,111,0,92,2,0,125,3,0,125,4,0,116,10,0,124,
-    4,0,124,2,0,131,2,0,114,67,0,116,11,0,124,4,
-    0,100,1,0,100,2,0,131,3,0,100,2,0,107,8,0,
-    114,178,0,124,3,0,116,1,0,106,12,0,107,6,0,114,
-    145,0,116,13,0,124,4,0,95,14,0,113,175,0,116,0,
-    0,106,15,0,124,3,0,131,1,0,114,175,0,116,16,0,
-    124,4,0,95,14,0,113,175,0,113,178,0,113,67,0,113,
-    67,0,87,116,1,0,106,8,0,116,17,0,25,125,5,0,
-    120,76,0,100,27,0,68,93,68,0,125,6,0,124,6,0,
-    116,1,0,106,8,0,107,7,0,114,241,0,116,13,0,106,
-    18,0,124,6,0,131,1,0,125,7,0,110,13,0,116,1,
-    0,106,8,0,124,6,0,25,125,7,0,116,19,0,124,5,
-    0,124,6,0,124,7,0,131,3,0,1,113,202,0,87,100,
-    7,0,100,8,0,103,1,0,102,2,0,100,9,0,100,10,
-    0,100,8,0,103,2,0,102,2,0,102,2,0,125,8,0,
-    120,149,0,124,8,0,68,93,129,0,92,2,0,125,9,0,
-    125,10,0,116,20,0,100,11,0,100,12,0,132,0,0,124,
-    10,0,68,131,1,0,131,1,0,115,101,1,116,21,0,130,
-    1,0,124,10,0,100,13,0,25,125,11,0,124,9,0,116,
-    1,0,106,8,0,107,6,0,114,143,1,116,1,0,106,8,
-    0,124,9,0,25,125,12,0,80,113,58,1,121,20,0,116,
-    13,0,106,18,0,124,9,0,131,1,0,125,12,0,80,87,
-    113,58,1,4,116,22,0,107,10,0,114,186,1,1,1,1,
-    119,58,1,89,113,58,1,88,113,58,1,87,116,22,0,100,
-    14,0,131,1,0,130,1,0,121,19,0,116,13,0,106,18,
-    0,100,15,0,131,1,0,125,13,0,87,110,24,0,4,116,
-    22,0,107,10,0,114,248,1,1,1,1,100,2,0,125,13,
-    0,89,110,1,0,88,116,13,0,106,18,0,100,16,0,131,
-    1,0,125,14,0,124,9,0,100,9,0,107,2,0,114,54,
-    2,116,13,0,106,18,0,100,17,0,131,1,0,125,15,0,
-    116,19,0,124,5,0,100,18,0,124,15,0,131,3,0,1,
-    110,0,0,116,19,0,124,5,0,100,19,0,124,12,0,131,
-    3,0,1,116,19,0,124,5,0,100,15,0,124,13,0,131,
-    3,0,1,116,19,0,124,5,0,100,16,0,124,14,0,131,
-    3,0,1,116,19,0,124,5,0,100,20,0,124,11,0,131,
-    3,0,1,116,19,0,124,5,0,100,21,0,100,22,0,106,
-    23,0,124,10,0,131,1,0,131,3,0,1,116,19,0,124,
-    5,0,100,23,0,116,24,0,131,0,0,131,3,0,1,116,
-    25,0,106,26,0,116,0,0,106,27,0,131,0,0,131,1,
-    0,1,124,9,0,100,9,0,107,2,0,114,233,2,116,28,
-    0,106,29,0,100,24,0,131,1,0,1,100,25,0,116,25,
-    0,107,6,0,114,233,2,100,26,0,116,30,0,95,31,0,
-    113,233,2,110,0,0,100,2,0,83,40,28,0,0,0,117,
-    250,0,0,0,83,101,116,117,112,32,105,109,112,111,114,116,
+    41,7,114,9,1,0,0,114,95,0,0,0,218,18,101,120,
+    116,101,110,115,105,111,110,95,115,117,102,102,105,120,101,115,
+    114,3,1,0,0,114,120,0,0,0,114,8,1,0,0,218,
+    17,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,
+    69,83,41,3,90,10,101,120,116,101,110,115,105,111,110,115,
+    90,6,115,111,117,114,99,101,90,8,98,121,116,101,99,111,
+    100,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
+    0,114,235,0,0,0,154,6,0,0,115,8,0,0,0,0,
+    5,18,1,12,1,12,1,114,235,0,0,0,99,5,0,0,
+    0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,0,
+    0,115,227,0,0,0,124,4,0,100,1,0,107,2,0,114,
+    27,0,116,0,0,124,0,0,131,1,0,125,5,0,110,54,
+    0,124,1,0,100,2,0,107,9,0,114,45,0,124,1,0,
+    110,3,0,105,0,0,125,6,0,116,1,0,124,6,0,131,
+    1,0,125,7,0,116,0,0,124,0,0,124,7,0,124,4,
+    0,131,3,0,125,5,0,124,3,0,115,207,0,124,4,0,
+    100,1,0,107,2,0,114,122,0,116,0,0,124,0,0,106,
+    2,0,100,3,0,131,1,0,100,1,0,25,131,1,0,83,
+    124,0,0,115,132,0,124,5,0,83,116,3,0,124,0,0,
+    131,1,0,116,3,0,124,0,0,106,2,0,100,3,0,131,
+    1,0,100,1,0,25,131,1,0,24,125,8,0,116,4,0,
+    106,5,0,124,5,0,106,6,0,100,2,0,116,3,0,124,
+    5,0,106,6,0,131,1,0,124,8,0,24,133,2,0,25,
+    25,83,110,16,0,116,7,0,124,5,0,124,3,0,116,0,
+    0,131,3,0,83,100,2,0,83,41,4,97,214,1,0,0,
+    73,109,112,111,114,116,32,97,32,109,111,100,117,108,101,46,
+    10,10,32,32,32,32,84,104,101,32,39,103,108,111,98,97,
+    108,115,39,32,97,114,103,117,109,101,110,116,32,105,115,32,
+    117,115,101,100,32,116,111,32,105,110,102,101,114,32,119,104,
+    101,114,101,32,116,104,101,32,105,109,112,111,114,116,32,105,
+    115,32,111,99,99,117,114,105,110,103,32,102,114,111,109,10,
+    32,32,32,32,116,111,32,104,97,110,100,108,101,32,114,101,
+    108,97,116,105,118,101,32,105,109,112,111,114,116,115,46,32,
+    84,104,101,32,39,108,111,99,97,108,115,39,32,97,114,103,
+    117,109,101,110,116,32,105,115,32,105,103,110,111,114,101,100,
+    46,32,84,104,101,10,32,32,32,32,39,102,114,111,109,108,
+    105,115,116,39,32,97,114,103,117,109,101,110,116,32,115,112,
+    101,99,105,102,105,101,115,32,119,104,97,116,32,115,104,111,
+    117,108,100,32,101,120,105,115,116,32,97,115,32,97,116,116,
+    114,105,98,117,116,101,115,32,111,110,32,116,104,101,32,109,
+    111,100,117,108,101,10,32,32,32,32,98,101,105,110,103,32,
+    105,109,112,111,114,116,101,100,32,40,101,46,103,46,32,96,
+    96,102,114,111,109,32,109,111,100,117,108,101,32,105,109,112,
+    111,114,116,32,60,102,114,111,109,108,105,115,116,62,96,96,
+    41,46,32,32,84,104,101,32,39,108,101,118,101,108,39,10,
+    32,32,32,32,97,114,103,117,109,101,110,116,32,114,101,112,
+    114,101,115,101,110,116,115,32,116,104,101,32,112,97,99,107,
+    97,103,101,32,108,111,99,97,116,105,111,110,32,116,111,32,
+    105,109,112,111,114,116,32,102,114,111,109,32,105,110,32,97,
+    32,114,101,108,97,116,105,118,101,10,32,32,32,32,105,109,
+    112,111,114,116,32,40,101,46,103,46,32,96,96,102,114,111,
+    109,32,46,46,112,107,103,32,105,109,112,111,114,116,32,109,
+    111,100,96,96,32,119,111,117,108,100,32,104,97,118,101,32,
+    97,32,39,108,101,118,101,108,39,32,111,102,32,50,41,46,
+    10,10,32,32,32,32,114,68,0,0,0,78,114,102,0,0,
+    0,41,8,114,69,1,0,0,114,78,1,0,0,114,107,0,
+    0,0,114,31,0,0,0,114,7,0,0,0,114,141,0,0,
+    0,114,57,0,0,0,114,76,1,0,0,41,9,114,72,0,
+    0,0,114,77,1,0,0,218,6,108,111,99,97,108,115,114,
+    75,1,0,0,114,58,1,0,0,114,162,0,0,0,90,8,
+    103,108,111,98,97,108,115,95,114,57,1,0,0,90,7,99,
+    117,116,95,111,102,102,114,4,0,0,0,114,4,0,0,0,
+    114,5,0,0,0,218,10,95,95,105,109,112,111,114,116,95,
+    95,165,6,0,0,115,26,0,0,0,0,11,12,1,15,2,
+    24,1,12,1,18,1,6,3,12,1,23,1,6,1,4,4,
+    35,3,40,2,114,82,1,0,0,99,2,0,0,0,0,0,
+    0,0,16,0,0,0,13,0,0,0,67,0,0,0,115,237,
+    2,0,0,124,1,0,97,0,0,124,0,0,97,1,0,116,
+    1,0,106,2,0,106,3,0,114,33,0,116,4,0,97,5,
+    0,110,6,0,116,6,0,97,5,0,116,7,0,116,1,0,
+    131,1,0,125,2,0,120,128,0,116,1,0,106,8,0,106,
+    9,0,131,0,0,68,93,111,0,92,2,0,125,3,0,125,
+    4,0,116,10,0,124,4,0,124,2,0,131,2,0,114,67,
+    0,116,11,0,124,4,0,100,1,0,100,2,0,131,3,0,
+    100,2,0,107,8,0,114,178,0,124,3,0,116,1,0,106,
+    12,0,107,6,0,114,145,0,116,13,0,124,4,0,95,14,
+    0,113,175,0,116,0,0,106,15,0,124,3,0,131,1,0,
+    114,175,0,116,16,0,124,4,0,95,14,0,113,175,0,113,
+    178,0,113,67,0,113,67,0,87,116,1,0,106,8,0,116,
+    17,0,25,125,5,0,120,76,0,100,27,0,68,93,68,0,
+    125,6,0,124,6,0,116,1,0,106,8,0,107,7,0,114,
+    241,0,116,13,0,106,18,0,124,6,0,131,1,0,125,7,
+    0,110,13,0,116,1,0,106,8,0,124,6,0,25,125,7,
+    0,116,19,0,124,5,0,124,6,0,124,7,0,131,3,0,
+    1,113,202,0,87,100,7,0,100,8,0,103,1,0,102,2,
+    0,100,9,0,100,10,0,100,8,0,103,2,0,102,2,0,
+    102,2,0,125,8,0,120,149,0,124,8,0,68,93,129,0,
+    92,2,0,125,9,0,125,10,0,116,20,0,100,11,0,100,
+    12,0,132,0,0,124,10,0,68,131,1,0,131,1,0,115,
+    101,1,116,21,0,130,1,0,124,10,0,100,13,0,25,125,
+    11,0,124,9,0,116,1,0,106,8,0,107,6,0,114,143,
+    1,116,1,0,106,8,0,124,9,0,25,125,12,0,80,113,
+    58,1,121,20,0,116,13,0,106,18,0,124,9,0,131,1,
+    0,125,12,0,80,87,113,58,1,4,116,22,0,107,10,0,
+    114,186,1,1,1,1,119,58,1,89,113,58,1,88,113,58,
+    1,87,116,22,0,100,14,0,131,1,0,130,1,0,121,19,
+    0,116,13,0,106,18,0,100,15,0,131,1,0,125,13,0,
+    87,110,24,0,4,116,22,0,107,10,0,114,248,1,1,1,
+    1,100,2,0,125,13,0,89,110,1,0,88,116,13,0,106,
+    18,0,100,16,0,131,1,0,125,14,0,124,9,0,100,9,
+    0,107,2,0,114,54,2,116,13,0,106,18,0,100,17,0,
+    131,1,0,125,15,0,116,19,0,124,5,0,100,18,0,124,
+    15,0,131,3,0,1,110,0,0,116,19,0,124,5,0,100,
+    19,0,124,12,0,131,3,0,1,116,19,0,124,5,0,100,
+    15,0,124,13,0,131,3,0,1,116,19,0,124,5,0,100,
+    16,0,124,14,0,131,3,0,1,116,19,0,124,5,0,100,
+    20,0,124,11,0,131,3,0,1,116,19,0,124,5,0,100,
+    21,0,100,22,0,106,23,0,124,10,0,131,1,0,131,3,
+    0,1,116,19,0,124,5,0,100,23,0,116,24,0,131,0,
+    0,131,3,0,1,116,25,0,106,26,0,116,0,0,106,27,
+    0,131,0,0,131,1,0,1,124,9,0,100,9,0,107,2,
+    0,114,233,2,116,28,0,106,29,0,100,24,0,131,1,0,
+    1,100,25,0,116,25,0,107,6,0,114,233,2,100,26,0,
+    116,30,0,95,31,0,113,233,2,110,0,0,100,2,0,83,
+    41,28,122,250,83,101,116,117,112,32,105,109,112,111,114,116,
     108,105,98,32,98,121,32,105,109,112,111,114,116,105,110,103,
     32,110,101,101,100,101,100,32,98,117,105,108,116,45,105,110,
     32,109,111,100,117,108,101,115,32,97,110,100,32,105,110,106,
@@ -3535,129 +3340,121 @@
     109,111,100,117,108,101,115,44,32,116,104,111,115,101,32,116,
     119,111,32,109,111,100,117,108,101,115,32,109,117,115,116,32,
     98,101,32,101,120,112,108,105,99,105,116,108,121,32,112,97,
-    115,115,101,100,32,105,110,46,10,10,32,32,32,32,114,171,
-    0,0,0,78,114,48,0,0,0,114,185,0,0,0,244,8,
-    0,0,0,98,117,105,108,116,105,110,115,114,201,0,0,0,
-    116,5,0,0,0,112,111,115,105,120,245,1,0,0,0,47,
-    244,2,0,0,0,110,116,245,1,0,0,0,92,99,1,0,
-    0,0,0,0,0,0,2,0,0,0,3,0,0,0,115,0,
-    0,0,115,33,0,0,0,124,0,0,93,23,0,125,1,0,
-    116,0,0,124,1,0,131,1,0,100,0,0,107,2,0,86,
-    1,113,3,0,100,1,0,83,40,2,0,0,0,114,29,0,
-    0,0,78,40,1,0,0,0,114,31,0,0,0,40,2,0,
-    0,0,114,22,0,0,0,114,115,0,0,0,114,4,0,0,
-    0,114,4,0,0,0,114,5,0,0,0,114,143,0,0,0,
-    223,6,0,0,115,2,0,0,0,6,0,117,25,0,0,0,
-    95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46,
-    60,103,101,110,101,120,112,114,62,114,67,0,0,0,117,30,
-    0,0,0,105,109,112,111,114,116,108,105,98,32,114,101,113,
-    117,105,114,101,115,32,112,111,115,105,120,32,111,114,32,110,
-    116,114,68,0,0,0,114,92,0,0,0,116,6,0,0,0,
-    119,105,110,114,101,103,114,225,0,0,0,114,3,0,0,0,
-    114,25,0,0,0,114,21,0,0,0,114,30,0,0,0,114,
-    6,0,0,0,117,4,0,0,0,46,112,121,119,117,6,0,
-    0,0,95,100,46,112,121,100,84,40,4,0,0,0,117,3,
-    0,0,0,95,105,111,117,9,0,0,0,95,119,97,114,110,
-    105,110,103,115,117,8,0,0,0,98,117,105,108,116,105,110,
-    115,117,7,0,0,0,109,97,114,115,104,97,108,40,32,0,
-    0,0,114,94,0,0,0,114,7,0,0,0,114,102,0,0,
-    0,114,103,0,0,0,114,105,0,0,0,114,79,1,0,0,
-    114,104,0,0,0,114,152,0,0,0,114,140,0,0,0,244,
-    5,0,0,0,105,116,101,109,115,114,202,0,0,0,114,61,
-    0,0,0,114,177,0,0,0,114,214,0,0,0,114,171,0,
-    0,0,114,181,0,0,0,114,222,0,0,0,114,56,0,0,
-    0,114,218,0,0,0,114,60,0,0,0,244,3,0,0,0,
-    97,108,108,114,86,0,0,0,114,157,0,0,0,114,26,0,
-    0,0,114,11,0,0,0,114,11,1,0,0,114,207,0,0,
-    0,114,78,1,0,0,114,119,0,0,0,114,165,0,0,0,
-    114,224,0,0,0,114,228,0,0,0,40,16,0,0,0,244,
-    10,0,0,0,115,121,115,95,109,111,100,117,108,101,244,11,
-    0,0,0,95,105,109,112,95,109,111,100,117,108,101,116,11,
-    0,0,0,109,111,100,117,108,101,95,116,121,112,101,114,71,
-    0,0,0,114,161,0,0,0,116,11,0,0,0,115,101,108,
-    102,95,109,111,100,117,108,101,116,12,0,0,0,98,117,105,
-    108,116,105,110,95,110,97,109,101,116,14,0,0,0,98,117,
-    105,108,116,105,110,95,109,111,100,117,108,101,116,10,0,0,
-    0,111,115,95,100,101,116,97,105,108,115,116,10,0,0,0,
-    98,117,105,108,116,105,110,95,111,115,114,21,0,0,0,114,
-    25,0,0,0,116,9,0,0,0,111,115,95,109,111,100,117,
-    108,101,116,13,0,0,0,116,104,114,101,97,100,95,109,111,
-    100,117,108,101,116,14,0,0,0,119,101,97,107,114,101,102,
-    95,109,111,100,117,108,101,116,13,0,0,0,119,105,110,114,
-    101,103,95,109,111,100,117,108,101,114,4,0,0,0,114,4,
-    0,0,0,114,5,0,0,0,244,6,0,0,0,95,115,101,
-    116,117,112,186,6,0,0,115,102,0,0,0,0,9,6,1,
-    6,2,12,1,9,2,6,2,12,1,28,1,15,1,24,1,
-    15,1,12,1,15,1,22,2,13,1,13,1,15,1,18,2,
-    13,1,20,2,33,1,19,2,31,1,10,1,15,1,13,1,
-    4,2,3,1,15,1,5,1,13,1,12,2,12,2,3,1,
-    19,1,13,2,11,1,15,2,12,1,15,1,19,2,16,1,
-    16,1,16,1,16,1,25,2,19,1,19,1,12,1,13,1,
-    12,1,114,90,1,0,0,99,2,0,0,0,0,0,0,0,
-    3,0,0,0,3,0,0,0,67,0,0,0,115,136,0,0,
-    0,116,0,0,124,0,0,124,1,0,131,2,0,1,116,1,
-    0,131,0,0,125,2,0,116,2,0,106,3,0,106,4,0,
-    116,5,0,106,6,0,124,2,0,140,0,0,103,1,0,131,
-    1,0,1,116,2,0,106,7,0,106,8,0,116,9,0,131,
-    1,0,1,116,2,0,106,7,0,106,8,0,116,10,0,131,
-    1,0,1,116,11,0,106,12,0,100,1,0,107,2,0,114,
-    116,0,116,2,0,106,7,0,106,8,0,116,13,0,131,1,
-    0,1,110,0,0,116,2,0,106,7,0,106,8,0,116,14,
-    0,131,1,0,1,100,2,0,83,40,3,0,0,0,117,50,
-    0,0,0,73,110,115,116,97,108,108,32,105,109,112,111,114,
-    116,108,105,98,32,97,115,32,116,104,101,32,105,109,112,108,
-    101,109,101,110,116,97,116,105,111,110,32,111,102,32,105,109,
-    112,111,114,116,46,114,84,1,0,0,78,40,15,0,0,0,
-    114,90,1,0,0,114,234,0,0,0,114,7,0,0,0,114,
-    32,1,0,0,114,207,0,0,0,114,39,1,0,0,114,53,
-    1,0,0,114,59,1,0,0,114,165,0,0,0,114,214,0,
-    0,0,114,222,0,0,0,114,3,0,0,0,114,56,0,0,
-    0,114,224,0,0,0,114,27,1,0,0,40,3,0,0,0,
-    114,88,1,0,0,114,89,1,0,0,116,17,0,0,0,115,
-    117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,115,
-    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,
-    8,0,0,0,95,105,110,115,116,97,108,108,6,7,0,0,
-    115,16,0,0,0,0,2,13,1,9,1,28,1,16,1,16,
-    1,15,1,19,1,114,91,1,0,0,40,3,0,0,0,117,
-    3,0,0,0,119,105,110,114,1,0,0,0,114,2,0,0,
-    0,40,82,0,0,0,114,58,0,0,0,114,10,0,0,0,
-    114,11,0,0,0,114,17,0,0,0,114,19,0,0,0,114,
-    28,0,0,0,114,38,0,0,0,114,43,0,0,0,114,44,
-    0,0,0,114,45,0,0,0,114,54,0,0,0,114,64,0,
-    0,0,114,152,0,0,0,244,8,0,0,0,95,95,99,111,
-    100,101,95,95,114,203,0,0,0,114,89,0,0,0,114,78,
-    0,0,0,114,85,0,0,0,114,65,0,0,0,114,66,0,
-    0,0,114,88,0,0,0,114,93,0,0,0,114,96,0,0,
-    0,114,99,0,0,0,114,15,0,0,0,114,195,0,0,0,
-    114,14,0,0,0,114,18,0,0,0,116,17,0,0,0,95,
-    82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,
-    114,110,0,0,0,114,119,0,0,0,114,104,0,0,0,114,
-    105,0,0,0,114,117,0,0,0,114,120,0,0,0,114,127,
-    0,0,0,114,129,0,0,0,114,137,0,0,0,114,138,0,
-    0,0,114,146,0,0,0,114,155,0,0,0,114,162,0,0,
-    0,114,166,0,0,0,114,170,0,0,0,114,173,0,0,0,
-    114,176,0,0,0,114,180,0,0,0,114,183,0,0,0,114,
-    190,0,0,0,114,200,0,0,0,114,205,0,0,0,114,208,
-    0,0,0,114,213,0,0,0,114,214,0,0,0,114,222,0,
-    0,0,114,224,0,0,0,114,237,0,0,0,114,241,0,0,
-    0,114,0,1,0,0,114,2,1,0,0,114,7,1,0,0,
-    114,11,1,0,0,114,8,1,0,0,114,12,1,0,0,114,
-    26,1,0,0,114,27,1,0,0,114,39,1,0,0,114,54,
-    1,0,0,114,58,1,0,0,114,60,1,0,0,114,63,1,
-    0,0,114,73,1,0,0,114,64,1,0,0,114,66,1,0,
-    0,114,67,1,0,0,114,68,1,0,0,114,75,1,0,0,
-    114,77,1,0,0,114,234,0,0,0,114,81,1,0,0,114,
-    90,1,0,0,114,91,1,0,0,114,4,0,0,0,114,4,
-    0,0,0,114,4,0,0,0,114,5,0,0,0,244,8,0,
-    0,0,60,109,111,100,117,108,101,62,8,0,0,0,115,150,
-    0,0,0,6,17,6,3,12,12,12,5,12,5,12,6,12,
-    12,12,10,12,6,12,7,15,22,12,8,15,6,6,2,6,
-    3,22,4,19,68,19,23,12,19,12,20,12,111,22,1,18,
-    2,6,2,9,2,9,1,9,2,15,27,12,23,12,19,12,
-    12,18,8,19,17,22,42,18,9,12,15,12,11,12,13,12,
-    11,12,18,12,11,12,11,12,13,21,55,21,12,18,10,12,
-    14,19,52,19,49,19,50,19,41,22,110,19,29,25,43,25,
-    20,6,3,19,45,19,55,19,32,19,91,19,128,19,13,12,
-    9,12,17,12,17,6,1,10,2,12,46,12,13,18,24,12,
-    32,12,15,12,11,24,36,12,76,
+    115,115,101,100,32,105,110,46,10,10,32,32,32,32,114,172,
+    0,0,0,78,114,49,0,0,0,114,186,0,0,0,218,8,
+    98,117,105,108,116,105,110,115,114,202,0,0,0,90,5,112,
+    111,115,105,120,250,1,47,218,2,110,116,250,1,92,99,1,
+    0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115,
+    0,0,0,115,33,0,0,0,124,0,0,93,23,0,125,1,
+    0,116,0,0,124,1,0,131,1,0,100,0,0,107,2,0,
+    86,1,113,3,0,100,1,0,83,41,2,114,29,0,0,0,
+    78,41,1,114,31,0,0,0,41,2,114,22,0,0,0,114,
+    116,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
+    0,0,0,114,144,0,0,0,238,6,0,0,115,2,0,0,
+    0,6,0,122,25,95,115,101,116,117,112,46,60,108,111,99,
+    97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,68,
+    0,0,0,122,30,105,109,112,111,114,116,108,105,98,32,114,
+    101,113,117,105,114,101,115,32,112,111,115,105,120,32,111,114,
+    32,110,116,114,69,0,0,0,114,93,0,0,0,90,6,119,
+    105,110,114,101,103,114,226,0,0,0,114,3,0,0,0,114,
+    25,0,0,0,114,21,0,0,0,114,30,0,0,0,114,6,
+    0,0,0,122,4,46,112,121,119,122,6,95,100,46,112,121,
+    100,84,41,4,122,3,95,105,111,122,9,95,119,97,114,110,
+    105,110,103,115,122,8,98,117,105,108,116,105,110,115,122,7,
+    109,97,114,115,104,97,108,41,32,114,95,0,0,0,114,7,
+    0,0,0,114,103,0,0,0,114,104,0,0,0,114,106,0,
+    0,0,114,80,1,0,0,114,105,0,0,0,114,153,0,0,
+    0,114,141,0,0,0,218,5,105,116,101,109,115,114,203,0,
+    0,0,114,62,0,0,0,114,178,0,0,0,114,215,0,0,
+    0,114,172,0,0,0,114,182,0,0,0,114,223,0,0,0,
+    114,57,0,0,0,114,219,0,0,0,114,61,0,0,0,218,
+    3,97,108,108,114,87,0,0,0,114,158,0,0,0,114,26,
+    0,0,0,114,11,0,0,0,114,12,1,0,0,114,208,0,
+    0,0,114,79,1,0,0,114,120,0,0,0,114,166,0,0,
+    0,114,225,0,0,0,114,229,0,0,0,41,16,218,10,115,
+    121,115,95,109,111,100,117,108,101,218,11,95,105,109,112,95,
+    109,111,100,117,108,101,90,11,109,111,100,117,108,101,95,116,
+    121,112,101,114,72,0,0,0,114,162,0,0,0,90,11,115,
+    101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108,
+    116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105,
+    110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116,
+    97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115,
+    114,21,0,0,0,114,25,0,0,0,90,9,111,115,95,109,
+    111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111,
+    100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111,
+    100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100,
+    117,108,101,114,4,0,0,0,114,4,0,0,0,114,5,0,
+    0,0,218,6,95,115,101,116,117,112,201,6,0,0,115,102,
+    0,0,0,0,9,6,1,6,2,12,1,9,2,6,2,12,
+    1,28,1,15,1,24,1,15,1,12,1,15,1,22,2,13,
+    1,13,1,15,1,18,2,13,1,20,2,33,1,19,2,31,
+    1,10,1,15,1,13,1,4,2,3,1,15,1,5,1,13,
+    1,12,2,12,2,3,1,19,1,13,2,11,1,15,2,12,
+    1,15,1,19,2,16,1,16,1,16,1,16,1,25,2,19,
+    1,19,1,12,1,13,1,12,1,114,91,1,0,0,99,2,
+    0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,
+    0,0,0,115,136,0,0,0,116,0,0,124,0,0,124,1,
+    0,131,2,0,1,116,1,0,131,0,0,125,2,0,116,2,
+    0,106,3,0,106,4,0,116,5,0,106,6,0,124,2,0,
+    140,0,0,103,1,0,131,1,0,1,116,2,0,106,7,0,
+    106,8,0,116,9,0,131,1,0,1,116,2,0,106,7,0,
+    106,8,0,116,10,0,131,1,0,1,116,11,0,106,12,0,
+    100,1,0,107,2,0,114,116,0,116,2,0,106,7,0,106,
+    8,0,116,13,0,131,1,0,1,110,0,0,116,2,0,106,
+    7,0,106,8,0,116,14,0,131,1,0,1,100,2,0,83,
+    41,3,122,50,73,110,115,116,97,108,108,32,105,109,112,111,
+    114,116,108,105,98,32,97,115,32,116,104,101,32,105,109,112,
+    108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,105,
+    109,112,111,114,116,46,114,85,1,0,0,78,41,15,114,91,
+    1,0,0,114,235,0,0,0,114,7,0,0,0,114,33,1,
+    0,0,114,208,0,0,0,114,40,1,0,0,114,54,1,0,
+    0,114,60,1,0,0,114,166,0,0,0,114,215,0,0,0,
+    114,223,0,0,0,114,3,0,0,0,114,57,0,0,0,114,
+    225,0,0,0,114,28,1,0,0,41,3,114,89,1,0,0,
+    114,90,1,0,0,90,17,115,117,112,112,111,114,116,101,100,
+    95,108,111,97,100,101,114,115,114,4,0,0,0,114,4,0,
+    0,0,114,5,0,0,0,218,8,95,105,110,115,116,97,108,
+    108,21,7,0,0,115,16,0,0,0,0,2,13,1,9,1,
+    28,1,16,1,16,1,15,1,19,1,114,92,1,0,0,41,
+    3,122,3,119,105,110,114,1,0,0,0,114,2,0,0,0,
+    41,83,114,59,0,0,0,114,10,0,0,0,114,11,0,0,
+    0,114,17,0,0,0,114,19,0,0,0,114,28,0,0,0,
+    114,38,0,0,0,114,39,0,0,0,114,43,0,0,0,114,
+    44,0,0,0,114,46,0,0,0,114,55,0,0,0,114,65,
+    0,0,0,114,153,0,0,0,218,8,95,95,99,111,100,101,
+    95,95,114,204,0,0,0,114,90,0,0,0,114,79,0,0,
+    0,114,86,0,0,0,114,66,0,0,0,114,67,0,0,0,
+    114,89,0,0,0,114,94,0,0,0,114,97,0,0,0,114,
+    100,0,0,0,114,15,0,0,0,114,196,0,0,0,114,14,
+    0,0,0,114,18,0,0,0,90,17,95,82,65,87,95,77,
+    65,71,73,67,95,78,85,77,66,69,82,114,111,0,0,0,
+    114,120,0,0,0,114,105,0,0,0,114,106,0,0,0,114,
+    118,0,0,0,114,121,0,0,0,114,128,0,0,0,114,130,
+    0,0,0,114,138,0,0,0,114,139,0,0,0,114,147,0,
+    0,0,114,156,0,0,0,114,163,0,0,0,114,167,0,0,
+    0,114,171,0,0,0,114,174,0,0,0,114,177,0,0,0,
+    114,181,0,0,0,114,184,0,0,0,114,191,0,0,0,114,
+    201,0,0,0,114,206,0,0,0,114,209,0,0,0,114,214,
+    0,0,0,114,215,0,0,0,114,223,0,0,0,114,225,0,
+    0,0,114,238,0,0,0,114,242,0,0,0,114,1,1,0,
+    0,114,3,1,0,0,114,8,1,0,0,114,12,1,0,0,
+    114,9,1,0,0,114,13,1,0,0,114,27,1,0,0,114,
+    28,1,0,0,114,40,1,0,0,114,55,1,0,0,114,59,
+    1,0,0,114,61,1,0,0,114,64,1,0,0,114,74,1,
+    0,0,114,65,1,0,0,114,67,1,0,0,114,68,1,0,
+    0,114,69,1,0,0,114,76,1,0,0,114,78,1,0,0,
+    114,235,0,0,0,114,82,1,0,0,114,91,1,0,0,114,
+    92,1,0,0,114,4,0,0,0,114,4,0,0,0,114,4,
+    0,0,0,114,5,0,0,0,218,8,60,109,111,100,117,108,
+    101,62,8,0,0,0,115,152,0,0,0,6,17,6,3,12,
+    12,12,5,12,5,12,6,12,12,12,10,12,10,12,6,12,
+    7,15,22,12,8,15,6,6,2,6,3,22,4,19,68,19,
+    23,12,19,12,20,12,113,22,1,18,2,6,2,9,2,9,
+    1,9,2,15,27,12,23,12,19,12,12,18,8,19,17,22,
+    42,18,9,12,15,12,11,12,13,12,11,12,18,12,11,12,
+    11,12,13,21,55,21,12,18,10,12,14,19,52,19,49,19,
+    50,19,41,22,110,19,29,25,43,25,20,6,3,19,45,19,
+    55,19,32,19,91,19,127,19,13,12,9,12,21,12,17,6,
+    1,10,2,12,46,12,13,18,24,12,32,12,15,12,11,24,
+    36,12,76,
 };
diff --git a/Python/marshal.c b/Python/marshal.c
index 727605a..e211a0f 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -51,6 +51,12 @@
 #define TYPE_FROZENSET          '>'
 #define FLAG_REF                '\x80' /* with a type, add obj to index */
 
+#define TYPE_ASCII              'a'
+#define TYPE_ASCII_INTERNED     'A'
+#define TYPE_SMALL_TUPLE        ')'
+#define TYPE_SHORT_ASCII        'z'
+#define TYPE_SHORT_ASCII_INTERNED 'Z'
+
 #define WFERR_OK 0
 #define WFERR_UNMARSHALLABLE 1
 #define WFERR_NESTEDTOODEEP 2
@@ -66,6 +72,8 @@
     PyObject *current_filename;
     char *ptr;
     char *end;
+    char *buf;
+    Py_ssize_t buf_size;
     PyObject *refs; /* dict on marshal, list on unmarshal */
     int version;
 } WFILE;
@@ -75,7 +83,7 @@
                            else w_more(c, p)
 
 static void
-w_more(int c, WFILE *p)
+w_more(char c, WFILE *p)
 {
     Py_ssize_t size, newsize;
     if (p->str == NULL)
@@ -92,7 +100,7 @@
         p->ptr = PyBytes_AS_STRING((PyBytesObject *)p->str) + size;
         p->end =
             PyBytes_AS_STRING((PyBytesObject *)p->str) + newsize;
-        *p->ptr++ = Py_SAFE_DOWNCAST(c, int, char);
+        *p->ptr++ = c;
     }
 }
 
@@ -148,6 +156,13 @@
         w_string(s, n, p);
 }
 
+static void
+w_short_pstring(const char *s, Py_ssize_t n, WFILE *p)
+{
+    w_byte(Py_SAFE_DOWNCAST(n, Py_ssize_t, unsigned char), p);
+    w_string(s, n, p);
+}
+
 /* We assume that Python ints are stored internally in base some power of
    2**15; for the sake of portability we'll always read and write them in base
    exactly 2**15. */
@@ -394,24 +409,51 @@
         w_pstring(PyBytes_AS_STRING(v), PyBytes_GET_SIZE(v), p);
     }
     else if (PyUnicode_CheckExact(v)) {
-        PyObject *utf8;
-        utf8 = PyUnicode_AsEncodedString(v, "utf8", "surrogatepass");
-        if (utf8 == NULL) {
-            p->depth--;
-            p->error = WFERR_UNMARSHALLABLE;
-            return;
+        if (p->version >= 4 && PyUnicode_IS_ASCII(v)) {
+            int is_short = PyUnicode_GET_LENGTH(v) < 256;
+            if (is_short) {
+                if (PyUnicode_CHECK_INTERNED(v))
+                    W_TYPE(TYPE_SHORT_ASCII_INTERNED, p);
+                else
+                    W_TYPE(TYPE_SHORT_ASCII, p);
+                w_short_pstring((char *) PyUnicode_1BYTE_DATA(v),
+                                PyUnicode_GET_LENGTH(v), p);
+            }
+            else {
+                if (PyUnicode_CHECK_INTERNED(v))
+                    W_TYPE(TYPE_ASCII_INTERNED, p);
+                else
+                    W_TYPE(TYPE_ASCII, p);
+                w_pstring((char *) PyUnicode_1BYTE_DATA(v),
+                          PyUnicode_GET_LENGTH(v), p);
+            }
         }
-        if (p->version >= 3 &&  PyUnicode_CHECK_INTERNED(v))
-            W_TYPE(TYPE_INTERNED, p);
-        else
-            W_TYPE(TYPE_UNICODE, p);
-        w_pstring(PyBytes_AS_STRING(utf8), PyBytes_GET_SIZE(utf8), p);
-        Py_DECREF(utf8);
+        else {
+            PyObject *utf8;
+            utf8 = PyUnicode_AsEncodedString(v, "utf8", "surrogatepass");
+            if (utf8 == NULL) {
+                p->depth--;
+                p->error = WFERR_UNMARSHALLABLE;
+                return;
+            }
+            if (p->version >= 3 &&  PyUnicode_CHECK_INTERNED(v))
+                W_TYPE(TYPE_INTERNED, p);
+            else
+                W_TYPE(TYPE_UNICODE, p);
+            w_pstring(PyBytes_AS_STRING(utf8), PyBytes_GET_SIZE(utf8), p);
+            Py_DECREF(utf8);
+        }
     }
     else if (PyTuple_CheckExact(v)) {
-        W_TYPE(TYPE_TUPLE, p);
         n = PyTuple_Size(v);
-        W_SIZE(n, p);
+        if (p->version >= 4 && n < 256) {
+            W_TYPE(TYPE_SMALL_TUPLE, p);
+            w_byte(n, p);
+        }
+        else {
+            W_TYPE(TYPE_TUPLE, p);
+            W_SIZE(n, p);
+        }
         for (i = 0; i < n; i++) {
             w_object(PyTuple_GET_ITEM(v, i), p);
         }
@@ -537,75 +579,95 @@
 
 typedef WFILE RFILE; /* Same struct with different invariants */
 
-#define rs_byte(p) (((p)->ptr < (p)->end) ? (unsigned char)*(p)->ptr++ : EOF)
-
-static Py_ssize_t
-r_string(char *s, Py_ssize_t n, RFILE *p)
+static char *
+r_string(Py_ssize_t n, RFILE *p)
 {
-    char *ptr;
-    Py_ssize_t read, left;
+    Py_ssize_t read = -1;
+
+    if (p->ptr != NULL) {
+        /* Fast path for loads() */
+        char *res = p->ptr;
+        Py_ssize_t left = p->end - p->ptr;
+        if (left < n) {
+            PyErr_SetString(PyExc_EOFError,
+                            "marshal data too short");
+            return NULL;
+        }
+        p->ptr += n;
+        return res;
+    }
+    if (p->buf == NULL) {
+        p->buf = PyMem_MALLOC(n);
+        if (p->buf == NULL) {
+            PyErr_NoMemory();
+            return NULL;
+        }
+        p->buf_size = n;
+    }
+    else if (p->buf_size < n) {
+        p->buf = PyMem_REALLOC(p->buf, n);
+        if (p->buf == NULL) {
+            PyErr_NoMemory();
+            return NULL;
+        }
+        p->buf_size = n;
+    }
 
     if (!p->readable) {
-        if (p->fp != NULL)
-            /* The result fits into int because it must be <=n. */
-            read = fread(s, 1, n, p->fp);
-        else {
-            left = p->end - p->ptr;
-            read = (left < n) ? left : n;
-            memcpy(s, p->ptr, read);
-            p->ptr += read;
-        }
+        assert(p->fp != NULL);
+        read = fread(p->buf, 1, n, p->fp);
     }
     else {
-        _Py_IDENTIFIER(read);
+        _Py_IDENTIFIER(readinto);
+        PyObject *res, *mview;
+        Py_buffer buf;
 
-        PyObject *data = _PyObject_CallMethodId(p->readable, &PyId_read, "n", n);
-        read = 0;
-        if (data != NULL) {
-            if (!PyBytes_Check(data)) {
-                PyErr_Format(PyExc_TypeError,
-                             "f.read() returned not bytes but %.100s",
-                             data->ob_type->tp_name);
-            }
-            else {
-                read = (int)PyBytes_GET_SIZE(data);
-                if (read > 0) {
-                    if (read > n) {
-                        PyErr_Format(PyExc_ValueError,
-                                    "read() returned too much data: "
-                                    "%zd bytes requested, %zd returned",
-                                    n, read);
-                        read = -1;
-                    }
-                    else {
-                        ptr = PyBytes_AS_STRING(data);
-                        memcpy(s, ptr, read);
-                    }
-                }
-            }
-            Py_DECREF(data);
+        if (PyBuffer_FillInfo(&buf, NULL, p->buf, n, 0, PyBUF_CONTIG) == -1)
+            return NULL;
+        mview = PyMemoryView_FromBuffer(&buf);
+        if (mview == NULL)
+            return NULL;
+
+        res = _PyObject_CallMethodId(p->readable, &PyId_readinto, "N", mview);
+        if (res != NULL) {
+            read = PyNumber_AsSsize_t(res, PyExc_ValueError);
+            Py_DECREF(res);
         }
     }
-    if (!PyErr_Occurred() && (read < n)) {
-        PyErr_SetString(PyExc_EOFError, "EOF read where not expected");
+    if (read != n) {
+        if (!PyErr_Occurred()) {
+            if (read > n)
+                PyErr_Format(PyExc_ValueError,
+                             "read() returned too much data: "
+                             "%zd bytes requested, %zd returned",
+                             n, read);
+            else
+                PyErr_SetString(PyExc_EOFError,
+                                "EOF read where not expected");
+        }
+        return NULL;
     }
-    return read;
+    return p->buf;
 }
 
-
 static int
 r_byte(RFILE *p)
 {
     int c = EOF;
-    unsigned char ch;
-    Py_ssize_t n;
 
-    if (!p->readable)
-        c = p->fp ? getc(p->fp) : rs_byte(p);
+    if (p->ptr != NULL) {
+        if (p->ptr < p->end)
+            c = (unsigned char) *p->ptr++;
+        return c;
+    }
+    if (!p->readable) {
+        assert(p->fp);
+        c = getc(p->fp);
+    }
     else {
-        n = r_string((char *) &ch, 1, p);
-        if (n > 0)
-            c = ch;
+        char *ptr = r_string(1, p);
+        if (ptr != NULL)
+            c = *(unsigned char *) ptr;
     }
     return c;
 }
@@ -613,32 +675,36 @@
 static int
 r_short(RFILE *p)
 {
-    short x;
-    unsigned char buffer[2];
+    short x = -1;
+    unsigned char *buffer;
 
-    r_string((char *) buffer, 2, p);
-    x = buffer[0];
-    x |= buffer[1] << 8;
-    /* Sign-extension, in case short greater than 16 bits */
-    x |= -(x & 0x8000);
+    buffer = (unsigned char *) r_string(2, p);
+    if (buffer != NULL) {
+        x = buffer[0];
+        x |= buffer[1] << 8;
+        /* Sign-extension, in case short greater than 16 bits */
+        x |= -(x & 0x8000);
+    }
     return x;
 }
 
 static long
 r_long(RFILE *p)
 {
-    long x;
-    unsigned char buffer[4];
+    long x = -1;
+    unsigned char *buffer;
 
-    r_string((char *) buffer, 4, p);
-    x = buffer[0];
-    x |= (long)buffer[1] << 8;
-    x |= (long)buffer[2] << 16;
-    x |= (long)buffer[3] << 24;
+    buffer = (unsigned char *) r_string(4, p);
+    if (buffer != NULL) {
+        x = buffer[0];
+        x |= (long)buffer[1] << 8;
+        x |= (long)buffer[2] << 16;
+        x |= (long)buffer[3] << 24;
 #if SIZEOF_LONG > 4
-    /* Sign extension for 64-bit machines */
-    x |= -(x & 0x80000000L);
+        /* Sign extension for 64-bit machines */
+        x |= -(x & 0x80000000L);
 #endif
+    }
     return x;
 }
 
@@ -666,25 +732,31 @@
     ob = _PyLong_New(size);
     if (ob == NULL)
         return NULL;
+
     Py_SIZE(ob) = n > 0 ? size : -size;
 
     for (i = 0; i < size-1; i++) {
         d = 0;
         for (j=0; j < PyLong_MARSHAL_RATIO; j++) {
             md = r_short(p);
-            if (PyErr_Occurred())
-                break;
+            if (PyErr_Occurred()) {
+                Py_DECREF(ob);
+                return NULL;
+            }
             if (md < 0 || md > PyLong_MARSHAL_BASE)
                 goto bad_digit;
             d += (digit)md << j*PyLong_MARSHAL_SHIFT;
         }
         ob->ob_digit[i] = d;
     }
+
     d = 0;
     for (j=0; j < shorts_in_top_digit; j++) {
         md = r_short(p);
-        if (PyErr_Occurred())
-            break;
+        if (PyErr_Occurred()) {
+            Py_DECREF(ob);
+            return NULL;
+        }
         if (md < 0 || md > PyLong_MARSHAL_BASE)
             goto bad_digit;
         /* topmost marshal digit should be nonzero */
@@ -716,9 +788,7 @@
 r_ref_reserve(int flag, RFILE *p)
 {
     if (flag) { /* currently only FLAG_REF is defined */
-        Py_ssize_t idx = PyList_Size(p->refs);
-        if (idx < 0)
-            return -1;
+        Py_ssize_t idx = PyList_GET_SIZE(p->refs);
         if (idx >= 0x7ffffffe) {
             PyErr_SetString(PyExc_ValueError, "bad marshal data (index list too large)");
             return -1;
@@ -742,12 +812,10 @@
 r_ref_insert(PyObject *o, Py_ssize_t idx, int flag, RFILE *p)
 {
     if (o != NULL && flag) { /* currently only FLAG_REF is defined */
-        if (PyList_SetItem(p->refs, idx, o) < 0) {
-            Py_DECREF(o); /* release the new object */
-            return NULL;
-        } else {
-            Py_INCREF(o); /* a reference for the list */
-        }
+        PyObject *tmp = PyList_GET_ITEM(p->refs, idx);
+        Py_INCREF(o);
+        PyList_SET_ITEM(p->refs, idx, o);
+        Py_DECREF(tmp);
     }
     return o;
 }
@@ -759,11 +827,12 @@
 static PyObject *
 r_ref(PyObject *o, int flag, RFILE *p)
 {
-    if (o != NULL && flag) { /* currently only FLAG_REF is defined */
-        if (PyList_Append(p->refs, o) < 0) {
-            Py_DECREF(o); /* release the new object */
-            return NULL;
-        }
+    assert(flag & FLAG_REF);
+    if (o == NULL)
+        return NULL;
+    if (PyList_Append(p->refs, o) < 0) {
+        Py_DECREF(o); /* release the new object */
+        return NULL;
     }
     return o;
 }
@@ -777,8 +846,8 @@
     Py_ssize_t idx = 0;
     long i, n;
     int type, code = r_byte(p);
-    int flag;
-    PyObject *retval;
+    int flag, is_interned = 0;
+    PyObject *retval = NULL;
 
     if (code == EOF) {
         PyErr_SetString(PyExc_EOFError,
@@ -805,7 +874,6 @@
     switch (type) {
 
     case TYPE_NULL:
-        retval = NULL;
         break;
 
     case TYPE_NONE:
@@ -846,17 +914,18 @@
 
     case TYPE_FLOAT:
         {
-            char buf[256];
+            char buf[256], *ptr;
             double dx;
-            retval = NULL;
             n = r_byte(p);
             if (n == EOF) {
                 PyErr_SetString(PyExc_EOFError,
                     "EOF read where object expected");
                 break;
             }
-            if (r_string(buf, n, p) != n)
+            ptr = r_string(n, p);
+            if (ptr == NULL)
                 break;
+            memcpy(buf, ptr, n);
             buf[n] = '\0';
             dx = PyOS_string_to_double(buf, NULL, NULL);
             if (dx == -1.0 && PyErr_Occurred())
@@ -868,17 +937,14 @@
 
     case TYPE_BINARY_FLOAT:
         {
-            unsigned char buf[8];
+            unsigned char *buf;
             double x;
-            if (r_string((char*)buf, 8, p) != 8) {
-                retval = NULL;
+            buf = (unsigned char *) r_string(8, p);
+            if (buf == NULL)
                 break;
-            }
             x = _PyFloat_Unpack8(buf, 1);
-            if (x == -1.0 && PyErr_Occurred()) {
-                retval = NULL;
+            if (x == -1.0 && PyErr_Occurred())
                 break;
-            }
             retval = PyFloat_FromDouble(x);
             R_REF(retval);
             break;
@@ -886,17 +952,18 @@
 
     case TYPE_COMPLEX:
         {
-            char buf[256];
+            char buf[256], *ptr;
             Py_complex c;
-            retval = NULL;
             n = r_byte(p);
             if (n == EOF) {
                 PyErr_SetString(PyExc_EOFError,
                     "EOF read where object expected");
                 break;
             }
-            if (r_string(buf, n, p) != n)
+            ptr = r_string(n, p);
+            if (ptr == NULL)
                 break;
+            memcpy(buf, ptr, n);
             buf[n] = '\0';
             c.real = PyOS_string_to_double(buf, NULL, NULL);
             if (c.real == -1.0 && PyErr_Occurred())
@@ -907,8 +974,10 @@
                     "EOF read where object expected");
                 break;
             }
-            if (r_string(buf, n, p) != n)
+            ptr = r_string(n, p);
+            if (ptr == NULL)
                 break;
+            memcpy(buf, ptr, n);
             buf[n] = '\0';
             c.imag = PyOS_string_to_double(buf, NULL, NULL);
             if (c.imag == -1.0 && PyErr_Occurred())
@@ -920,116 +989,136 @@
 
     case TYPE_BINARY_COMPLEX:
         {
-            unsigned char buf[8];
+            unsigned char *buf;
             Py_complex c;
-            if (r_string((char*)buf, 8, p) != 8) {
-                retval = NULL;
+            buf = (unsigned char *) r_string(8, p);
+            if (buf == NULL)
                 break;
-            }
             c.real = _PyFloat_Unpack8(buf, 1);
-            if (c.real == -1.0 && PyErr_Occurred()) {
-                retval = NULL;
+            if (c.real == -1.0 && PyErr_Occurred())
                 break;
-            }
-            if (r_string((char*)buf, 8, p) != 8) {
-                retval = NULL;
+            buf = (unsigned char *) r_string(8, p);
+            if (buf == NULL)
                 break;
-            }
             c.imag = _PyFloat_Unpack8(buf, 1);
-            if (c.imag == -1.0 && PyErr_Occurred()) {
-                retval = NULL;
+            if (c.imag == -1.0 && PyErr_Occurred())
                 break;
-            }
             retval = PyComplex_FromCComplex(c);
             R_REF(retval);
             break;
         }
 
     case TYPE_STRING:
-        n = r_long(p);
-        if (PyErr_Occurred()) {
-            retval = NULL;
+        {
+            char *ptr;
+            n = r_long(p);
+            if (PyErr_Occurred())
+                break;
+            if (n < 0 || n > SIZE32_MAX) {
+                PyErr_SetString(PyExc_ValueError, "bad marshal data (string size out of range)");
+                break;
+            }
+            v = PyBytes_FromStringAndSize((char *)NULL, n);
+            if (v == NULL)
+                break;
+            ptr = r_string(n, p);
+            if (ptr == NULL) {
+                Py_DECREF(v);
+                break;
+            }
+            memcpy(PyBytes_AS_STRING(v), ptr, n);
+            retval = v;
+            R_REF(retval);
             break;
         }
-        if (n < 0 || n > SIZE32_MAX) {
-            PyErr_SetString(PyExc_ValueError, "bad marshal data (string size out of range)");
-            retval = NULL;
-            break;
-        }
-        v = PyBytes_FromStringAndSize((char *)NULL, n);
-        if (v == NULL) {
-            retval = NULL;
-            break;
-        }
-        if (r_string(PyBytes_AS_STRING(v), n, p) != n) {
-            Py_DECREF(v);
-            retval = NULL;
-            break;
-        }
-        retval = v;
-        R_REF(retval);
-        break;
 
-    case TYPE_UNICODE:
+    case TYPE_ASCII_INTERNED:
+        is_interned = 1;
+    case TYPE_ASCII:
+        n = r_long(p);
+        if (PyErr_Occurred())
+            break;
+        if (n < 0 || n > SIZE32_MAX) {
+            PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)");
+            break;
+        }
+        goto _read_ascii;
+
+    case TYPE_SHORT_ASCII_INTERNED:
+        is_interned = 1;
+    case TYPE_SHORT_ASCII:
+        n = r_byte(p);
+        if (n == EOF) {
+            PyErr_SetString(PyExc_EOFError,
+                "EOF read where object expected");
+            break;
+        }
+    _read_ascii:
+        {
+            char *ptr;
+            ptr = r_string(n, p);
+            if (ptr == NULL)
+                break;
+            v = PyUnicode_FromKindAndData(PyUnicode_1BYTE_KIND, ptr, n);
+            if (v == NULL)
+                break;
+            if (is_interned)
+                PyUnicode_InternInPlace(&v);
+            retval = v;
+            R_REF(retval);
+            break;
+        }
+
     case TYPE_INTERNED:
+        is_interned = 1;
+    case TYPE_UNICODE:
         {
         char *buffer;
 
         n = r_long(p);
-        if (PyErr_Occurred()) {
-            retval = NULL;
+        if (PyErr_Occurred())
             break;
-        }
         if (n < 0 || n > SIZE32_MAX) {
             PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)");
-            retval = NULL;
             break;
         }
         if (n != 0) {
-            buffer = PyMem_NEW(char, n);
-            if (buffer == NULL) {
-                retval = PyErr_NoMemory();
+            buffer = r_string(n, p);
+            if (buffer == NULL)
                 break;
-            }
-            if (r_string(buffer, n, p) != n) {
-                PyMem_DEL(buffer);
-                retval = NULL;
-                break;
-            }
             v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass");
-            PyMem_DEL(buffer);
         }
         else {
             v = PyUnicode_New(0, 0);
         }
-        if (v == NULL) {
-            retval = NULL;
+        if (v == NULL)
             break;
-        }
-        if (type == TYPE_INTERNED)
+        if (is_interned)
             PyUnicode_InternInPlace(&v);
         retval = v;
         R_REF(retval);
         break;
         }
 
+    case TYPE_SMALL_TUPLE:
+        n = (unsigned char) r_byte(p);
+        if (PyErr_Occurred())
+            break;
+        goto _read_tuple;
     case TYPE_TUPLE:
         n = r_long(p);
-        if (PyErr_Occurred()) {
-            retval = NULL;
+        if (PyErr_Occurred())
             break;
-        }
         if (n < 0 || n > SIZE32_MAX) {
             PyErr_SetString(PyExc_ValueError, "bad marshal data (tuple size out of range)");
-            retval = NULL;
             break;
         }
+    _read_tuple:
         v = PyTuple_New(n);
         R_REF(v);
-        if (v == NULL) {
-            retval = NULL;
+        if (v == NULL)
             break;
-        }
+
         for (i = 0; i < n; i++) {
             v2 = r_object(p);
             if ( v2 == NULL ) {
@@ -1047,21 +1136,16 @@
 
     case TYPE_LIST:
         n = r_long(p);
-        if (PyErr_Occurred()) {
-            retval = NULL;
+        if (PyErr_Occurred())
             break;
-        }
         if (n < 0 || n > SIZE32_MAX) {
             PyErr_SetString(PyExc_ValueError, "bad marshal data (list size out of range)");
-            retval = NULL;
             break;
         }
         v = PyList_New(n);
         R_REF(v);
-        if (v == NULL) {
-            retval = NULL;
+        if (v == NULL)
             break;
-        }
         for (i = 0; i < n; i++) {
             v2 = r_object(p);
             if ( v2 == NULL ) {
@@ -1080,20 +1164,25 @@
     case TYPE_DICT:
         v = PyDict_New();
         R_REF(v);
-        if (v == NULL) {
-            retval = NULL;
+        if (v == NULL)
             break;
-        }
         for (;;) {
             PyObject *key, *val;
             key = r_object(p);
             if (key == NULL)
                 break;
             val = r_object(p);
-            if (val != NULL)
-                PyDict_SetItem(v, key, val);
+            if (val == NULL) {
+                Py_DECREF(key);
+                break;
+            }
+            if (PyDict_SetItem(v, key, val) < 0) {
+                Py_DECREF(key);
+                Py_DECREF(val);
+                break;
+            }
             Py_DECREF(key);
-            Py_XDECREF(val);
+            Py_DECREF(val);
         }
         if (PyErr_Occurred()) {
             Py_DECREF(v);
@@ -1105,13 +1194,10 @@
     case TYPE_SET:
     case TYPE_FROZENSET:
         n = r_long(p);
-        if (PyErr_Occurred()) {
-            retval = NULL;
+        if (PyErr_Occurred())
             break;
-        }
         if (n < 0 || n > SIZE32_MAX) {
             PyErr_SetString(PyExc_ValueError, "bad marshal data (set size out of range)");
-            retval = NULL;
             break;
         }
         v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL);
@@ -1125,10 +1211,9 @@
             if (idx < 0)
                 Py_CLEAR(v); /* signal error */
         }
-        if (v == NULL) {
-            retval = NULL;
+        if (v == NULL)
             break;
-        }
+
         for (i = 0; i < n; i++) {
             v2 = r_object(p);
             if ( v2 == NULL ) {
@@ -1171,10 +1256,8 @@
             PyObject *lnotab = NULL;
 
             idx = r_ref_reserve(flag, p);
-            if (idx < 0) {
-                retval = NULL;
+            if (idx < 0)
                 break;
-            }
 
             v = NULL;
 
@@ -1231,6 +1314,8 @@
             if (name == NULL)
                 goto code_error;
             firstlineno = (int)r_long(p);
+            if (firstlineno == -1 && PyErr_Occurred())
+                break;
             lnotab = r_object(p);
             if (lnotab == NULL)
                 goto code_error;
@@ -1260,14 +1345,14 @@
     case TYPE_REF:
         n = r_long(p);
         if (n < 0 || n >= PyList_GET_SIZE(p->refs)) {
+            if (n == -1 && PyErr_Occurred())
+                break;
             PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)");
-            retval = NULL;
             break;
         }
         v = PyList_GET_ITEM(p->refs, n);
         if (v == Py_None) {
             PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)");
-            retval = NULL;
             break;
         }
         Py_INCREF(v);
@@ -1278,7 +1363,6 @@
         /* Bogus data got written, which isn't ideal.
            This will let you keep working and recover. */
         PyErr_SetString(PyExc_ValueError, "bad marshal data (unknown type code)");
-        retval = NULL;
         break;
 
     }
@@ -1304,23 +1388,33 @@
 PyMarshal_ReadShortFromFile(FILE *fp)
 {
     RFILE rf;
+    int res;
     assert(fp);
     rf.readable = NULL;
     rf.fp = fp;
     rf.current_filename = NULL;
     rf.end = rf.ptr = NULL;
-    return r_short(&rf);
+    rf.buf = NULL;
+    res = r_short(&rf);
+    if (rf.buf != NULL)
+        PyMem_FREE(rf.buf);
+    return res;
 }
 
 long
 PyMarshal_ReadLongFromFile(FILE *fp)
 {
     RFILE rf;
+    long res;
     rf.fp = fp;
     rf.readable = NULL;
     rf.current_filename = NULL;
     rf.ptr = rf.end = NULL;
-    return r_long(&rf);
+    rf.buf = NULL;
+    res = r_long(&rf);
+    if (rf.buf != NULL)
+        PyMem_FREE(rf.buf);
+    return res;
 }
 
 #ifdef HAVE_FSTAT
@@ -1379,30 +1473,36 @@
     rf.current_filename = NULL;
     rf.depth = 0;
     rf.ptr = rf.end = NULL;
+    rf.buf = NULL;
     rf.refs = PyList_New(0);
     if (rf.refs == NULL)
         return NULL;
     result = r_object(&rf);
     Py_DECREF(rf.refs);
+    if (rf.buf != NULL)
+        PyMem_FREE(rf.buf);
     return result;
 }
 
 PyObject *
-PyMarshal_ReadObjectFromString(char *str, Py_ssize_t len)
+PyMarshal_ReadObjectFromString(const char *str, Py_ssize_t len)
 {
     RFILE rf;
     PyObject *result;
     rf.fp = NULL;
     rf.readable = NULL;
     rf.current_filename = NULL;
-    rf.ptr = str;
-    rf.end = str + len;
+    rf.ptr = (char *)str;
+    rf.end = (char *)str + len;
+    rf.buf = NULL;
     rf.depth = 0;
     rf.refs = PyList_New(0);
     if (rf.refs == NULL)
         return NULL;
     result = r_object(&rf);
     Py_DECREF(rf.refs);
+    if (rf.buf != NULL)
+        PyMem_FREE(rf.buf);
     return result;
 }
 
@@ -1516,9 +1616,13 @@
         rf.fp = NULL;
         rf.readable = f;
         rf.current_filename = NULL;
+        rf.ptr = rf.end = NULL;
+        rf.buf = NULL;
         if ((rf.refs = PyList_New(0)) != NULL) {
             result = read_object(&rf);
             Py_DECREF(rf.refs);
+            if (rf.buf != NULL)
+                PyMem_FREE(rf.buf);
         } else
             result = NULL;
     }
diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c
index 725f07c..98429d4 100644
--- a/Python/mystrtoul.c
+++ b/Python/mystrtoul.c
@@ -92,7 +92,7 @@
 **              exceptions - we don't check for them.
 */
 unsigned long
-PyOS_strtoul(char *str, char **ptr, int base)
+PyOS_strtoul(const char *str, char **ptr, int base)
 {
     unsigned long result = 0; /* return value of the function */
     int c;             /* current input character */
@@ -111,7 +111,7 @@
                 /* there must be at least one digit after 0x */
                 if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) {
                     if (ptr)
-                        *ptr = str;
+                        *ptr = (char *)str;
                     return 0;
                 }
                 ++str;
@@ -120,7 +120,7 @@
                 /* there must be at least one digit after 0o */
                 if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) {
                     if (ptr)
-                        *ptr = str;
+                        *ptr = (char *)str;
                     return 0;
                 }
                 ++str;
@@ -129,7 +129,7 @@
                 /* there must be at least one digit after 0b */
                 if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) {
                     if (ptr)
-                        *ptr = str;
+                        *ptr = (char *)str;
                     return 0;
                 }
                 ++str;
@@ -141,7 +141,7 @@
                 while (Py_ISSPACE(Py_CHARMASK(*str)))
                     ++str;
                 if (ptr)
-                    *ptr = str;
+                    *ptr = (char *)str;
                 return 0;
             }
         }
@@ -157,7 +157,7 @@
                 /* there must be at least one digit after 0x */
                 if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) {
                     if (ptr)
-                        *ptr = str;
+                        *ptr = (char *)str;
                     return 0;
                 }
                 ++str;
@@ -171,7 +171,7 @@
                 /* there must be at least one digit after 0o */
                 if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) {
                     if (ptr)
-                        *ptr = str;
+                        *ptr = (char *)str;
                     return 0;
                 }
                 ++str;
@@ -185,7 +185,7 @@
                 /* there must be at least one digit after 0b */
                 if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) {
                     if (ptr)
-                        *ptr = str;
+                        *ptr = (char *)str;
                     return 0;
                 }
                 ++str;
@@ -197,7 +197,7 @@
     /* catch silly bases */
     if (base < 2 || base > 36) {
         if (ptr)
-            *ptr = str;
+            *ptr = (char *)str;
         return 0;
     }
 
@@ -239,7 +239,7 @@
 
     /* set pointer to point to the last character scanned */
     if (ptr)
-        *ptr = str;
+        *ptr = (char *)str;
 
     return result;
 
@@ -248,7 +248,7 @@
         /* spool through remaining digit characters */
         while (_PyLong_DigitValue[Py_CHARMASK(*str)] < base)
             ++str;
-        *ptr = str;
+        *ptr = (char *)str;
     }
     errno = ERANGE;
     return (unsigned long)-1;
@@ -260,7 +260,7 @@
 #define PY_ABS_LONG_MIN         (0-(unsigned long)LONG_MIN)
 
 long
-PyOS_strtol(char *str, char **ptr, int base)
+PyOS_strtol(const char *str, char **ptr, int base)
 {
     long result;
     unsigned long uresult;
diff --git a/Python/pystate.c b/Python/pystate.c
index ecd00ce..6be71de 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -182,7 +182,6 @@
         tstate->recursion_critical = 0;
         tstate->tracing = 0;
         tstate->use_tracing = 0;
-        tstate->tick_counter = 0;
         tstate->gilstate_counter = 0;
         tstate->async_exc = NULL;
 #ifdef WITH_THREAD
diff --git a/Python/pystrtod.c b/Python/pystrtod.c
index f8d3b35..b8dd919 100644
--- a/Python/pystrtod.c
+++ b/Python/pystrtod.c
@@ -164,7 +164,7 @@
 _PyOS_ascii_strtod(const char *nptr, char **endptr)
 {
     char *fail_pos;
-    double val = -1.0;
+    double val;
     struct lconv *locale_data;
     const char *decimal_point;
     size_t decimal_point_len;
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index c2ca563..8ccf70d 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -35,18 +35,30 @@
 #define PATH_MAX MAXPATHLEN
 #endif
 
+_Py_IDENTIFIER(builtins);
+_Py_IDENTIFIER(excepthook);
+_Py_IDENTIFIER(flush);
+_Py_IDENTIFIER(last_traceback);
+_Py_IDENTIFIER(last_type);
+_Py_IDENTIFIER(last_value);
+_Py_IDENTIFIER(name);
+_Py_IDENTIFIER(ps1);
+_Py_IDENTIFIER(ps2);
+_Py_IDENTIFIER(stdin);
+_Py_IDENTIFIER(stdout);
+_Py_IDENTIFIER(stderr);
+_Py_static_string(PyId_string, "<string>");
+
 #ifdef Py_REF_DEBUG
 static
 void _print_total_refs(void) {
-    PyObject *xoptions, *key, *value;
+    PyObject *xoptions, *value;
+    _Py_IDENTIFIER(showrefcount);
+
     xoptions = PySys_GetXOptions();
     if (xoptions == NULL)
         return;
-    key = PyUnicode_FromString("showrefcount");
-    if (key == NULL)
-        return;
-    value = PyDict_GetItem(xoptions, key);
-    Py_DECREF(key);
+    value = _PyDict_GetItemId(xoptions, &PyId_showrefcount);
     if (value == Py_True)
         fprintf(stderr,
                 "[%" PY_FORMAT_SIZE_T "d refs, "
@@ -75,7 +87,7 @@
 static void initsite(void);
 static int initstdio(void);
 static void flush_io(void);
-static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
+static PyObject *run_mod(mod_ty, PyObject *, PyObject *, PyObject *,
                           PyCompilerFlags *, PyArena *);
 static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
                               PyCompilerFlags *);
@@ -116,6 +128,10 @@
 
 PyThreadState *_Py_Finalizing = NULL;
 
+/* Hack to force loading of object files */
+int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
+    PyOS_mystrnicmp; /* Python/pystrcmp.o */
+
 /* PyModule_GetWarningsModule is no longer necessary as of 2.6
 since _warnings is builtin.  This API should not be used. */
 PyObject *
@@ -134,6 +150,45 @@
     return initialized;
 }
 
+/* Helper to allow an embedding application to override the normal
+ * mechanism that attempts to figure out an appropriate IO encoding
+ */
+
+static char *_Py_StandardStreamEncoding = NULL;
+static char *_Py_StandardStreamErrors = NULL;
+
+int
+Py_SetStandardStreamEncoding(const char *encoding, const char *errors)
+{
+    if (Py_IsInitialized()) {
+        /* This is too late to have any effect */
+        return -1;
+    }
+    /* Can't call PyErr_NoMemory() on errors, as Python hasn't been
+     * initialised yet.
+     *
+     * However, the raw memory allocators are initialised appropriately
+     * as C static variables, so _PyMem_RawStrdup is OK even though
+     * Py_Initialize hasn't been called yet.
+     */
+    if (encoding) {
+        _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding);
+        if (!_Py_StandardStreamEncoding) {
+            return -2;
+        }
+    }
+    if (errors) {
+        _Py_StandardStreamErrors = _PyMem_RawStrdup(errors);
+        if (!_Py_StandardStreamErrors) {
+            if (_Py_StandardStreamEncoding) {
+                PyMem_RawFree(_Py_StandardStreamEncoding);
+            }
+            return -3;
+        }
+    }
+    return 0;
+}
+
 /* Global initializations.  Can be undone by Py_Finalize().  Don't
    call this twice without an intervening Py_Finalize() call.  When
    initializations fail, a fatal error is issued and the function does
@@ -162,7 +217,6 @@
 {
     char *name_utf8, *name_str;
     PyObject *codec, *name = NULL;
-    _Py_IDENTIFIER(name);
 
     codec = _PyCodec_Lookup(encoding);
     if (!codec)
@@ -371,7 +425,7 @@
     pstderr = PyFile_NewStdPrinter(fileno(stderr));
     if (pstderr == NULL)
         Py_FatalError("Py_Initialize: can't set preliminary stderr");
-    PySys_SetObject("stderr", pstderr);
+    _PySys_SetObjectId(&PyId_stderr, pstderr);
     PySys_SetObject("__stderr__", pstderr);
     Py_DECREF(pstderr);
 
@@ -456,10 +510,9 @@
 static void
 flush_std_files(void)
 {
-    PyObject *fout = PySys_GetObject("stdout");
-    PyObject *ferr = PySys_GetObject("stderr");
+    PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
+    PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
     PyObject *tmp;
-    _Py_IDENTIFIER(flush);
 
     if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
         tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
@@ -523,11 +576,13 @@
     _Py_Finalizing = tstate;
     initialized = 0;
 
-    /* Flush stdout+stderr */
-    flush_std_files();
-
-    /* Disable signal handling */
-    PyOS_FiniInterrupts();
+    /* Destroy the state of all threads except of the current thread: in
+       practice, only daemon threads should still be alive. Clear frames of
+       other threads to call objects destructor. Destructors will be called in
+       the current Python thread. Since _Py_Finalizing has been set, no other
+       Python threads can lock the GIL at this point (if they try, they will
+       exit immediately). */
+    _PyThreadState_DeleteExcept(tstate);
 
     /* Collect garbage.  This may call finalizers; it's nice to call these
      * before all modules are destroyed.
@@ -542,6 +597,7 @@
      * XXX I haven't seen a real-life report of either of these.
      */
     PyGC_Collect();
+
 #ifdef COUNT_ALLOCS
     /* With COUNT_ALLOCS, it helps to run GC multiple times:
        each collection might release some types from the type
@@ -549,6 +605,13 @@
     while (PyGC_Collect() > 0)
         /* nothing */;
 #endif
+
+    /* Flush stdout+stderr */
+    flush_std_files();
+
+    /* Disable signal handling */
+    PyOS_FiniInterrupts();
+
     /* Destroy all modules */
     PyImport_Cleanup();
 
@@ -735,7 +798,7 @@
         pstderr = PyFile_NewStdPrinter(fileno(stderr));
         if (pstderr == NULL)
             Py_FatalError("Py_Initialize: can't set preliminary stderr");
-        PySys_SetObject("stderr", pstderr);
+        _PySys_SetObjectId(&PyId_stderr, pstderr);
         PySys_SetObject("__stderr__", pstderr);
         Py_DECREF(pstderr);
 
@@ -946,7 +1009,6 @@
     _Py_IDENTIFIER(open);
     _Py_IDENTIFIER(isatty);
     _Py_IDENTIFIER(TextIOWrapper);
-    _Py_IDENTIFIER(name);
     _Py_IDENTIFIER(mode);
 
     /* stdin is always opened in buffered mode, first because it shouldn't
@@ -1088,23 +1150,29 @@
     }
     Py_DECREF(wrapper);
 
-    pythonioencoding = Py_GETENV("PYTHONIOENCODING");
-    encoding = errors = NULL;
-    if (pythonioencoding) {
-        pythonioencoding = _PyMem_Strdup(pythonioencoding);
-        if (pythonioencoding == NULL) {
-            PyErr_NoMemory();
-            goto error;
+    encoding = _Py_StandardStreamEncoding;
+    errors = _Py_StandardStreamErrors;
+    if (!encoding || !errors) {
+        pythonioencoding = Py_GETENV("PYTHONIOENCODING");
+        if (pythonioencoding) {
+            char *err;
+            pythonioencoding = _PyMem_Strdup(pythonioencoding);
+            if (pythonioencoding == NULL) {
+                PyErr_NoMemory();
+                goto error;
+            }
+            err = strchr(pythonioencoding, ':');
+            if (err) {
+                *err = '\0';
+                err++;
+                if (*err && !errors) {
+                    errors = err;
+                }
+            }
+            if (*pythonioencoding && !encoding) {
+                encoding = pythonioencoding;
+            }
         }
-        errors = strchr(pythonioencoding, ':');
-        if (errors) {
-            *errors = '\0';
-            errors++;
-            if (!*errors)
-                errors = NULL;
-        }
-        if (*pythonioencoding)
-            encoding = pythonioencoding;
     }
 
     /* Set sys.stdin */
@@ -1123,7 +1191,7 @@
             goto error;
     } /* if (fd < 0) */
     PySys_SetObject("__stdin__", std);
-    PySys_SetObject("stdin", std);
+    _PySys_SetObjectId(&PyId_stdin, std);
     Py_DECREF(std);
 
     /* Set sys.stdout */
@@ -1138,7 +1206,7 @@
             goto error;
     } /* if (fd < 0) */
     PySys_SetObject("__stdout__", std);
-    PySys_SetObject("stdout", std);
+    _PySys_SetObjectId(&PyId_stdout, std);
     Py_DECREF(std);
 
 #if 1 /* Disable this if you have trouble debugging bootstrap stuff */
@@ -1172,7 +1240,7 @@
         Py_DECREF(std);
         goto error;
     }
-    if (PySys_SetObject("stderr", std) < 0) {
+    if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
         Py_DECREF(std);
         goto error;
     }
@@ -1184,6 +1252,15 @@
         status = -1;
     }
 
+    /* We won't need them anymore. */
+    if (_Py_StandardStreamEncoding) {
+        PyMem_RawFree(_Py_StandardStreamEncoding);
+        _Py_StandardStreamEncoding = NULL;
+    }
+    if (_Py_StandardStreamErrors) {
+        PyMem_RawFree(_Py_StandardStreamErrors);
+        _Py_StandardStreamErrors = NULL;
+    }
     PyMem_Free(pythonioencoding);
     Py_XDECREF(bimod);
     Py_XDECREF(iomod);
@@ -1209,36 +1286,47 @@
 }
 
 int
-PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
+PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags)
 {
-    PyObject *v;
-    int ret;
+    PyObject *filename, *v;
+    int ret, err;
     PyCompilerFlags local_flags;
 
+    filename = PyUnicode_DecodeFSDefault(filename_str);
+    if (filename == NULL) {
+        PyErr_Print();
+        return -1;
+    }
+
     if (flags == NULL) {
         flags = &local_flags;
         local_flags.cf_flags = 0;
     }
-    v = PySys_GetObject("ps1");
+    v = _PySys_GetObjectId(&PyId_ps1);
     if (v == NULL) {
-        PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
+        _PySys_SetObjectId(&PyId_ps1, v = PyUnicode_FromString(">>> "));
         Py_XDECREF(v);
     }
-    v = PySys_GetObject("ps2");
+    v = _PySys_GetObjectId(&PyId_ps2);
     if (v == NULL) {
-        PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
+        _PySys_SetObjectId(&PyId_ps2, v = PyUnicode_FromString("... "));
         Py_XDECREF(v);
     }
+    err = -1;
     for (;;) {
-        ret = PyRun_InteractiveOneFlags(fp, filename, flags);
+        ret = PyRun_InteractiveOneObject(fp, filename, flags);
         PRINT_TOTAL_REFS();
-        if (ret == E_EOF)
-            return 0;
+        if (ret == E_EOF) {
+            err = 0;
+            break;
+        }
         /*
         if (ret == E_NOMEM)
-            return -1;
+            break;
         */
     }
+    Py_DECREF(filename);
+    return err;
 }
 
 /* compute parser flags based on compiler flags */
@@ -1266,18 +1354,25 @@
 #endif
 
 int
-PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
+PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags)
 {
-    PyObject *m, *d, *v, *w, *oenc = NULL;
+    PyObject *m, *d, *v, *w, *oenc = NULL, *mod_name;
     mod_ty mod;
     PyArena *arena;
     char *ps1 = "", *ps2 = "", *enc = NULL;
     int errcode = 0;
     _Py_IDENTIFIER(encoding);
+    _Py_IDENTIFIER(__main__);
+
+    mod_name = _PyUnicode_FromId(&PyId___main__); /* borrowed */
+    if (mod_name == NULL) {
+        PyErr_Print();
+        return -1;
+    }
 
     if (fp == stdin) {
         /* Fetch encoding from sys.stdin if possible. */
-        v = PySys_GetObject("stdin");
+        v = _PySys_GetObjectId(&PyId_stdin);
         if (v && v != Py_None) {
             oenc = _PyObject_GetAttrId(v, &PyId_encoding);
             if (oenc)
@@ -1286,7 +1381,7 @@
                 PyErr_Clear();
         }
     }
-    v = PySys_GetObject("ps1");
+    v = _PySys_GetObjectId(&PyId_ps1);
     if (v != NULL) {
         v = PyObject_Str(v);
         if (v == NULL)
@@ -1299,7 +1394,7 @@
             }
         }
     }
-    w = PySys_GetObject("ps2");
+    w = _PySys_GetObjectId(&PyId_ps2);
     if (w != NULL) {
         w = PyObject_Str(w);
         if (w == NULL)
@@ -1319,9 +1414,9 @@
         Py_XDECREF(oenc);
         return -1;
     }
-    mod = PyParser_ASTFromFile(fp, filename, enc,
-                               Py_single_input, ps1, ps2,
-                               flags, &errcode, arena);
+    mod = PyParser_ASTFromFileObject(fp, filename, enc,
+                                     Py_single_input, ps1, ps2,
+                                     flags, &errcode, arena);
     Py_XDECREF(v);
     Py_XDECREF(w);
     Py_XDECREF(oenc);
@@ -1334,7 +1429,7 @@
         PyErr_Print();
         return -1;
     }
-    m = PyImport_AddModule("__main__");
+    m = PyImport_AddModuleObject(mod_name);
     if (m == NULL) {
         PyArena_Free(arena);
         return -1;
@@ -1351,6 +1446,23 @@
     return 0;
 }
 
+int
+PyRun_InteractiveOneFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags)
+{
+    PyObject *filename;
+    int res;
+
+    filename = PyUnicode_DecodeFSDefault(filename_str);
+    if (filename == NULL) {
+        PyErr_Print();
+        return -1;
+    }
+    res = PyRun_InteractiveOneObject(fp, filename, flags);
+    Py_DECREF(filename);
+    return res;
+}
+
+
 /* Check whether a file maybe a pyc file: Look at the extension,
    the file type, and, if we may close it, at the first few bytes. */
 
@@ -1518,8 +1630,8 @@
 }
 
 static int
-parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
-                   int *lineno, int *offset, const char **text)
+parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename,
+                   int *lineno, int *offset, PyObject **text)
 {
     long hold;
     PyObject *v;
@@ -1530,6 +1642,7 @@
     _Py_IDENTIFIER(text);
 
     *message = NULL;
+    *filename = NULL;
 
     /* new style errors.  `err' is an instance */
     *message = _PyObject_GetAttrId(err, &PyId_msg);
@@ -1541,13 +1654,13 @@
         goto finally;
     if (v == Py_None) {
         Py_DECREF(v);
-        *filename = NULL;
+        *filename = _PyUnicode_FromId(&PyId_string);
+        if (*filename == NULL)
+            goto finally;
+        Py_INCREF(*filename);
     }
     else {
-        *filename = _PyUnicode_AsString(v);
-        Py_DECREF(v);
-        if (!*filename)
-            goto finally;
+        *filename = v;
     }
 
     v = _PyObject_GetAttrId(err, &PyId_lineno);
@@ -1581,15 +1694,13 @@
         *text = NULL;
     }
     else {
-        *text = _PyUnicode_AsString(v);
-        Py_DECREF(v);
-        if (!*text)
-            goto finally;
+        *text = v;
     }
     return 1;
 
 finally:
     Py_XDECREF(*message);
+    Py_XDECREF(*filename);
     return 0;
 }
 
@@ -1600,9 +1711,15 @@
 }
 
 static void
-print_error_text(PyObject *f, int offset, const char *text)
+print_error_text(PyObject *f, int offset, PyObject *text_obj)
 {
+    char *text;
     char *nl;
+
+    text = _PyUnicode_AsString(text_obj);
+    if (text == NULL)
+        return;
+
     if (offset >= 0) {
         if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
             offset--;
@@ -1661,7 +1778,7 @@
     if (PyLong_Check(value))
         exitcode = (int)PyLong_AsLong(value);
     else {
-        PyObject *sys_stderr = PySys_GetObject("stderr");
+        PyObject *sys_stderr = _PySys_GetObjectId(&PyId_stderr);
         if (sys_stderr != NULL && sys_stderr != Py_None) {
             PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
         } else {
@@ -1704,11 +1821,11 @@
         return;
     /* Now we know v != NULL too */
     if (set_sys_last_vars) {
-        PySys_SetObject("last_type", exception);
-        PySys_SetObject("last_value", v);
-        PySys_SetObject("last_traceback", tb);
+        _PySys_SetObjectId(&PyId_last_type, exception);
+        _PySys_SetObjectId(&PyId_last_value, v);
+        _PySys_SetObjectId(&PyId_last_traceback, tb);
     }
-    hook = PySys_GetObject("excepthook");
+    hook = _PySys_GetObjectId(&PyId_excepthook);
     if (hook) {
         PyObject *args = PyTuple_Pack(3, exception, v, tb);
         PyObject *result = PyEval_CallObject(hook, args);
@@ -1773,27 +1890,30 @@
     if (err == 0 &&
         _PyObject_HasAttrId(value, &PyId_print_file_and_line))
     {
-        PyObject *message;
-        const char *filename, *text;
+        PyObject *message, *filename, *text;
         int lineno, offset;
         if (!parse_syntax_error(value, &message, &filename,
                                 &lineno, &offset, &text))
             PyErr_Clear();
         else {
-            char buf[10];
-            PyFile_WriteString("  File \"", f);
-            if (filename == NULL)
-                PyFile_WriteString("<string>", f);
-            else
-                PyFile_WriteString(filename, f);
-            PyFile_WriteString("\", line ", f);
-            PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
-            PyFile_WriteString(buf, f);
-            PyFile_WriteString("\n", f);
-            if (text != NULL)
-                print_error_text(f, offset, text);
+            PyObject *line;
+
             Py_DECREF(value);
             value = message;
+
+            line = PyUnicode_FromFormat("  File \"%U\", line %d\n",
+                                          filename, lineno);
+            Py_DECREF(filename);
+            if (line != NULL) {
+                PyFile_WriteObject(line, f, Py_PRINT_RAW);
+                Py_DECREF(line);
+            }
+
+            if (text != NULL) {
+                print_error_text(f, offset, text);
+                Py_DECREF(text);
+            }
+
             /* Can't be bothered to check all those
                PyFile_WriteString() calls */
             if (PyErr_Occurred())
@@ -1822,10 +1942,9 @@
             err = PyFile_WriteString("<unknown>", f);
         }
         else {
-            char* modstr = _PyUnicode_AsString(moduleName);
-            if (modstr && strcmp(modstr, "builtins"))
+            if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0)
             {
-                err = PyFile_WriteString(modstr, f);
+                err = PyFile_WriteObject(moduleName, f, Py_PRINT_RAW);
                 err += PyFile_WriteString(".", f);
             }
             Py_DECREF(moduleName);
@@ -1918,7 +2037,17 @@
 PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
 {
     PyObject *seen;
-    PyObject *f = PySys_GetObject("stderr");
+    PyObject *f = _PySys_GetObjectId(&PyId_stderr);
+    if (PyExceptionInstance_Check(value)
+        && tb != NULL && PyTraceBack_Check(tb)) {
+        /* Put the traceback on the exception, otherwise it won't get
+           displayed.  See issue #18776. */
+        PyObject *cur_tb = PyException_GetTraceback(value);
+        if (cur_tb == NULL)
+            PyException_SetTraceback(value, tb);
+        else
+            Py_DECREF(cur_tb);
+    }
     if (f == Py_None) {
         /* pass */
     }
@@ -1944,37 +2073,54 @@
 {
     PyObject *ret = NULL;
     mod_ty mod;
-    PyArena *arena = PyArena_New();
+    PyArena *arena;
+    PyObject *filename;
+
+    filename = _PyUnicode_FromId(&PyId_string); /* borrowed */
+    if (filename == NULL)
+        return NULL;
+
+    arena = PyArena_New();
     if (arena == NULL)
         return NULL;
 
-    mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
+    mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
     if (mod != NULL)
-        ret = run_mod(mod, "<string>", globals, locals, flags, arena);
+        ret = run_mod(mod, filename, globals, locals, flags, arena);
     PyArena_Free(arena);
     return ret;
 }
 
 PyObject *
-PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
+PyRun_FileExFlags(FILE *fp, const char *filename_str, int start, PyObject *globals,
                   PyObject *locals, int closeit, PyCompilerFlags *flags)
 {
-    PyObject *ret;
+    PyObject *ret = NULL;
     mod_ty mod;
-    PyArena *arena = PyArena_New();
-    if (arena == NULL)
-        return NULL;
+    PyArena *arena = NULL;
+    PyObject *filename;
 
-    mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
-                               flags, NULL, arena);
+    filename = PyUnicode_DecodeFSDefault(filename_str);
+    if (filename == NULL)
+        goto exit;
+
+    arena = PyArena_New();
+    if (arena == NULL)
+        goto exit;
+
+    mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0,
+                                     flags, NULL, arena);
     if (closeit)
         fclose(fp);
     if (mod == NULL) {
-        PyArena_Free(arena);
-        return NULL;
+        goto exit;
     }
     ret = run_mod(mod, filename, globals, locals, flags, arena);
-    PyArena_Free(arena);
+
+exit:
+    Py_XDECREF(filename);
+    if (arena != NULL)
+        PyArena_Free(arena);
     return ret;
 }
 
@@ -1983,12 +2129,11 @@
 {
     PyObject *f, *r;
     PyObject *type, *value, *traceback;
-    _Py_IDENTIFIER(flush);
 
     /* Save the current exception */
     PyErr_Fetch(&type, &value, &traceback);
 
-    f = PySys_GetObject("stderr");
+    f = _PySys_GetObjectId(&PyId_stderr);
     if (f != NULL) {
         r = _PyObject_CallMethodId(f, &PyId_flush, "");
         if (r)
@@ -1996,7 +2141,7 @@
         else
             PyErr_Clear();
     }
-    f = PySys_GetObject("stdout");
+    f = _PySys_GetObjectId(&PyId_stdout);
     if (f != NULL) {
         r = _PyObject_CallMethodId(f, &PyId_flush, "");
         if (r)
@@ -2009,12 +2154,12 @@
 }
 
 static PyObject *
-run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
-         PyCompilerFlags *flags, PyArena *arena)
+run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
+            PyCompilerFlags *flags, PyArena *arena)
 {
     PyCodeObject *co;
     PyObject *v;
-    co = PyAST_Compile(mod, filename, flags, arena);
+    co = PyAST_CompileObject(mod, filename, flags, -1, arena);
     if (co == NULL)
         return NULL;
     v = PyEval_EvalCode((PyObject*)co, globals, locals);
diff --git a/Python/random.c b/Python/random.c
index 1d470c7..9c9370c 100644
--- a/Python/random.c
+++ b/Python/random.c
@@ -218,8 +218,9 @@
     }
 }
 
-/* Fill buffer with size pseudo-random bytes, not suitable for cryptographic
-   use, from the operating random number generator (RNG).
+/* Fill buffer with size pseudo-random bytes from the operating system random
+   number generator (RNG). It is suitable for for most cryptographic purposes
+   except long living private keys for asymmetric encryption.
 
    Return 0 on success, raise an exception and return -1 on error. */
 int
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 2d7e01b..3ebb6c9 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -41,6 +41,26 @@
 #include <langinfo.h>
 #endif
 
+_Py_IDENTIFIER(_);
+_Py_IDENTIFIER(__sizeof__);
+_Py_IDENTIFIER(buffer);
+_Py_IDENTIFIER(builtins);
+_Py_IDENTIFIER(encoding);
+_Py_IDENTIFIER(path);
+_Py_IDENTIFIER(stdout);
+_Py_IDENTIFIER(stderr);
+_Py_IDENTIFIER(write);
+
+PyObject *
+_PySys_GetObjectId(_Py_Identifier *key)
+{
+    PyThreadState *tstate = PyThreadState_GET();
+    PyObject *sd = tstate->interp->sysdict;
+    if (sd == NULL)
+        return NULL;
+    return _PyDict_GetItemId(sd, key);
+}
+
 PyObject *
 PySys_GetObject(const char *name)
 {
@@ -52,6 +72,21 @@
 }
 
 int
+_PySys_SetObjectId(_Py_Identifier *key, PyObject *v)
+{
+    PyThreadState *tstate = PyThreadState_GET();
+    PyObject *sd = tstate->interp->sysdict;
+    if (v == NULL) {
+        if (_PyDict_GetItemId(sd, key) == NULL)
+            return 0;
+        else
+            return _PyDict_DelItemId(sd, key);
+    }
+    else
+        return _PyDict_SetItemId(sd, key, v);
+}
+
+int
 PySys_SetObject(const char *name, PyObject *v)
 {
     PyThreadState *tstate = PyThreadState_GET();
@@ -79,8 +114,6 @@
     PyObject *encoded, *escaped_str, *repr_str, *buffer, *result;
     char *stdout_encoding_str;
     int ret;
-    _Py_IDENTIFIER(encoding);
-    _Py_IDENTIFIER(buffer);
 
     stdout_encoding = _PyObject_GetAttrId(outf, &PyId_encoding);
     if (stdout_encoding == NULL)
@@ -101,7 +134,6 @@
 
     buffer = _PyObject_GetAttrId(outf, &PyId_buffer);
     if (buffer) {
-        _Py_IDENTIFIER(write);
         result = _PyObject_CallMethodId(buffer, &PyId_write, "(O)", encoded);
         Py_DECREF(buffer);
         Py_DECREF(encoded);
@@ -137,10 +169,11 @@
     PyObject *outf;
     PyInterpreterState *interp = PyThreadState_GET()->interp;
     PyObject *modules = interp->modules;
-    PyObject *builtins = PyDict_GetItemString(modules, "builtins");
+    PyObject *builtins;
+    static PyObject *newline = NULL;
     int err;
-    _Py_IDENTIFIER(_);
 
+    builtins = _PyDict_GetItemId(modules, &PyId_builtins);
     if (builtins == NULL) {
         PyErr_SetString(PyExc_RuntimeError, "lost builtins module");
         return NULL;
@@ -155,7 +188,7 @@
     }
     if (_PyObject_SetAttrId(builtins, &PyId__, Py_None) != 0)
         return NULL;
-    outf = PySys_GetObject("stdout");
+    outf = _PySys_GetObjectId(&PyId_stdout);
     if (outf == NULL || outf == Py_None) {
         PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
         return NULL;
@@ -173,7 +206,12 @@
             return NULL;
         }
     }
-    if (PyFile_WriteString("\n", outf) != 0)
+    if (newline == NULL) {
+        newline = PyUnicode_FromString("\n");
+        if (newline == NULL)
+            return NULL;
+    }
+    if (PyFile_WriteObject(newline, outf, Py_PRINT_RAW) != 0)
         return NULL;
     if (_PyObject_SetAttrId(builtins, &PyId__, o) != 0)
         return NULL;
@@ -332,12 +370,16 @@
 call_trampoline(PyThreadState *tstate, PyObject* callback,
                 PyFrameObject *frame, int what, PyObject *arg)
 {
-    PyObject *args = PyTuple_New(3);
+    PyObject *args;
     PyObject *whatstr;
     PyObject *result;
 
+    args = PyTuple_New(3);
     if (args == NULL)
         return NULL;
+    if (PyFrame_FastToLocalsWithError(frame) < 0)
+        return NULL;
+
     Py_INCREF(frame);
     whatstr = whatstrings[what];
     Py_INCREF(whatstr);
@@ -349,7 +391,6 @@
     PyTuple_SET_ITEM(args, 2, arg);
 
     /* call the Python-level function */
-    PyFrame_FastToLocals(frame);
     result = PyEval_CallObject(callback, args);
     PyFrame_LocalsToFast(frame, 1);
     if (result == NULL)
@@ -818,7 +859,6 @@
     static char *kwlist[] = {"object", "default", 0};
     PyObject *o, *dflt = NULL;
     PyObject *method;
-    _Py_IDENTIFIER(__sizeof__);
 
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:getsizeof",
                                      kwlist, &o, &dflt))
@@ -1573,7 +1613,7 @@
     if (m == NULL)
         return NULL;
     sysdict = PyModule_GetDict(m);
-#define SET_SYS_FROM_STRING(key, value)                    \
+#define SET_SYS_FROM_STRING_BORROW(key, value)             \
     do {                                                   \
         int res;                                           \
         PyObject *v = (value);                             \
@@ -1581,7 +1621,18 @@
             return NULL;                                   \
         res = PyDict_SetItemString(sysdict, key, v);       \
         if (res < 0) {                                     \
-            Py_DECREF(v);                                  \
+            return NULL;                                   \
+        }                                                  \
+    } while (0)
+#define SET_SYS_FROM_STRING(key, value)                    \
+    do {                                                   \
+        int res;                                           \
+        PyObject *v = (value);                             \
+        if (v == NULL)                                     \
+            return NULL;                                   \
+        res = PyDict_SetItemString(sysdict, key, v);       \
+        Py_DECREF(v);                                      \
+        if (res < 0) {                                     \
             return NULL;                                   \
         }                                                  \
     } while (0)
@@ -1606,10 +1657,10 @@
 
     /* stdin/stdout/stderr are now set by pythonrun.c */
 
-    SET_SYS_FROM_STRING("__displayhook__",
-                        PyDict_GetItemString(sysdict, "displayhook"));
-    SET_SYS_FROM_STRING("__excepthook__",
-                        PyDict_GetItemString(sysdict, "excepthook"));
+    SET_SYS_FROM_STRING_BORROW("__displayhook__",
+                               PyDict_GetItemString(sysdict, "displayhook"));
+    SET_SYS_FROM_STRING_BORROW("__excepthook__",
+                               PyDict_GetItemString(sysdict, "excepthook"));
     SET_SYS_FROM_STRING("version",
                          PyUnicode_FromString(Py_GetVersion()));
     SET_SYS_FROM_STRING("hexversion",
@@ -1679,9 +1730,9 @@
     else {
         Py_INCREF(warnoptions);
     }
-    SET_SYS_FROM_STRING("warnoptions", warnoptions);
+    SET_SYS_FROM_STRING_BORROW("warnoptions", warnoptions);
 
-    SET_SYS_FROM_STRING("_xoptions", get_xoptions());
+    SET_SYS_FROM_STRING_BORROW("_xoptions", get_xoptions());
 
     /* version_info */
     if (VersionInfoType.tp_name == NULL) {
@@ -1778,7 +1829,7 @@
     PyObject *v;
     if ((v = makepathobject(path, DELIM)) == NULL)
         Py_FatalError("can't create sys.path");
-    if (PySys_SetObject("path", v) != 0)
+    if (_PySys_SetObjectId(&PyId_path, v) != 0)
         Py_FatalError("can't assign sys.path");
     Py_DECREF(v);
 }
@@ -1847,7 +1898,7 @@
     wchar_t fullpath[MAX_PATH];
 #endif
 
-    path = PySys_GetObject("path");
+    path = _PySys_GetObjectId(&PyId_path);
     if (path == NULL)
         return;
 
@@ -1957,7 +2008,6 @@
 {
     PyObject *writer = NULL, *args = NULL, *result = NULL;
     int err;
-    _Py_IDENTIFIER(write);
 
     if (file == NULL)
         return -1;
@@ -2034,7 +2084,7 @@
  */
 
 static void
-sys_write(char *name, FILE *fp, const char *format, va_list va)
+sys_write(_Py_Identifier *key, FILE *fp, const char *format, va_list va)
 {
     PyObject *file;
     PyObject *error_type, *error_value, *error_traceback;
@@ -2042,7 +2092,7 @@
     int written;
 
     PyErr_Fetch(&error_type, &error_value, &error_traceback);
-    file = PySys_GetObject(name);
+    file = _PySys_GetObjectId(key);
     written = PyOS_vsnprintf(buffer, sizeof(buffer), format, va);
     if (sys_pyfile_write(buffer, file) != 0) {
         PyErr_Clear();
@@ -2062,7 +2112,7 @@
     va_list va;
 
     va_start(va, format);
-    sys_write("stdout", stdout, format, va);
+    sys_write(&PyId_stdout, stdout, format, va);
     va_end(va);
 }
 
@@ -2072,19 +2122,19 @@
     va_list va;
 
     va_start(va, format);
-    sys_write("stderr", stderr, format, va);
+    sys_write(&PyId_stderr, stderr, format, va);
     va_end(va);
 }
 
 static void
-sys_format(char *name, FILE *fp, const char *format, va_list va)
+sys_format(_Py_Identifier *key, FILE *fp, const char *format, va_list va)
 {
     PyObject *file, *message;
     PyObject *error_type, *error_value, *error_traceback;
     char *utf8;
 
     PyErr_Fetch(&error_type, &error_value, &error_traceback);
-    file = PySys_GetObject(name);
+    file = _PySys_GetObjectId(key);
     message = PyUnicode_FromFormatV(format, va);
     if (message != NULL) {
         if (sys_pyfile_write_unicode(message, file) != 0) {
@@ -2104,7 +2154,7 @@
     va_list va;
 
     va_start(va, format);
-    sys_format("stdout", stdout, format, va);
+    sys_format(&PyId_stdout, stdout, format, va);
     va_end(va);
 }
 
@@ -2114,6 +2164,6 @@
     va_list va;
 
     va_start(va, format);
-    sys_format("stderr", stderr, format, va);
+    sys_format(&PyId_stderr, stderr, format, va);
     va_end(va);
 }
diff --git a/Python/traceback.c b/Python/traceback.c
index 4f2e732..e9169ce 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -21,6 +21,11 @@
 /* Function from Parser/tokenizer.c */
 extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
 
+_Py_IDENTIFIER(TextIOWrapper);
+_Py_IDENTIFIER(close);
+_Py_IDENTIFIER(open);
+_Py_IDENTIFIER(path);
+
 static PyObject *
 tb_dir(PyTracebackObject *self)
 {
@@ -152,7 +157,6 @@
     const char* filepath;
     Py_ssize_t len;
     PyObject* result;
-    _Py_IDENTIFIER(open);
 
     filebytes = PyUnicode_EncodeFSDefault(filename);
     if (filebytes == NULL) {
@@ -169,7 +173,7 @@
         tail++;
     taillen = strlen(tail);
 
-    syspath = PySys_GetObject("path");
+    syspath = _PySys_GetObjectId(&PyId_path);
     if (syspath == NULL || !PyList_Check(syspath))
         goto error;
     npath = PyList_Size(syspath);
@@ -232,9 +236,6 @@
     char buf[MAXPATHLEN+1];
     int kind;
     void *data;
-    _Py_IDENTIFIER(close);
-    _Py_IDENTIFIER(open);
-    _Py_IDENTIFIER(TextIOWrapper);
 
     /* open the file */
     if (filename == NULL)
@@ -471,13 +472,13 @@
     write(fd, buffer, len);
 }
 
-/* Format an integer in range [0; 0xffffffff] to hexdecimal of 'width' digits,
+/* Format an integer in range [0; 0xffffffff] to hexadecimal of 'width' digits,
    and write it into the file fd.
 
    This function is signal safe. */
 
 static void
-dump_hexadecimal(int width, unsigned long value, int fd)
+dump_hexadecimal(int fd, unsigned long value, int width)
 {
     int len;
     char buffer[sizeof(unsigned long) * 2 + 1];
@@ -544,15 +545,15 @@
         }
         else if (ch < 0xff) {
             PUTS(fd, "\\x");
-            dump_hexadecimal(2, ch, fd);
+            dump_hexadecimal(fd, ch, 2);
         }
         else if (ch < 0xffff) {
             PUTS(fd, "\\u");
-            dump_hexadecimal(4, ch, fd);
+            dump_hexadecimal(fd, ch, 4);
         }
         else {
             PUTS(fd, "\\U");
-            dump_hexadecimal(8, ch, fd);
+            dump_hexadecimal(fd, ch, 8);
         }
     }
     if (truncated)
@@ -603,7 +604,7 @@
     unsigned int depth;
 
     if (write_header)
-        PUTS(fd, "Traceback (most recent call first):\n");
+        PUTS(fd, "Stack (most recent call first):\n");
 
     frame = _PyThreadState_GetFrame(tstate);
     if (frame == NULL)
@@ -641,8 +642,8 @@
         PUTS(fd, "Current thread 0x");
     else
         PUTS(fd, "Thread 0x");
-    dump_hexadecimal(sizeof(long)*2, (unsigned long)tstate->thread_id, fd);
-    PUTS(fd, ":\n");
+    dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(long)*2);
+    PUTS(fd, " (most recent call first):\n");
 }
 
 const char*
diff --git a/README b/README
index b39f235..002656e 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-This is Python version 3.4.0 alpha 3
+This is Python version 3.4.0 alpha 4
 ====================================
 
 Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
new file mode 100755
index 0000000..cb4d6ab
--- /dev/null
+++ b/Tools/clinic/clinic.py
@@ -0,0 +1,2490 @@
+#!/usr/bin/env python3
+#
+# Argument Clinic
+# Copyright 2012-2013 by Larry Hastings.
+# Licensed to the PSF under a contributor agreement.
+#
+
+import abc
+import ast
+import atexit
+import clinic
+import collections
+import contextlib
+import functools
+import hashlib
+import inspect
+import io
+import itertools
+import os
+import re
+import shlex
+import sys
+import tempfile
+import textwrap
+
+
+# TODO:
+# converters for
+#
+#       es
+#       es#
+#       et
+#       et#
+#       s#
+#       u#
+#       y#
+#       z#
+#       Z#
+#
+# soon:
+#
+# * allow mixing any two of {positional-only, positional-or-keyword,
+#   keyword-only}
+#       * dict constructor uses positional-only and keyword-only
+#       * max and min use positional only with an optional group
+#         and keyword-only
+#
+# * Generate forward slash for docstring first line
+#   (if I get positional-only syntax pep accepted)
+#
+# * Add "version" directive, so we can complain if the file
+#   is too new for us.
+#
+
+_empty = inspect._empty
+_void = inspect._void
+
+
+class Unspecified:
+    def __repr__(self):
+        return '<Unspecified>'
+
+unspecified = Unspecified()
+
+
+class Null:
+    def __repr__(self):
+        return '<Null>'
+
+NULL = Null()
+
+
+def _text_accumulator():
+    text = []
+    def output():
+        s = ''.join(text)
+        text.clear()
+        return s
+    return text, text.append, output
+
+
+def text_accumulator():
+    """
+    Creates a simple text accumulator / joiner.
+
+    Returns a pair of callables:
+        append, output
+    "append" appends a string to the accumulator.
+    "output" returns the contents of the accumulator
+       joined together (''.join(accumulator)) and
+       empties the accumulator.
+    """
+    text, append, output = _text_accumulator()
+    return append, output
+
+
+def fail(*args, filename=None, line_number=None):
+    joined = " ".join([str(a) for a in args])
+    add, output = text_accumulator()
+    add("Error")
+    if clinic:
+        if filename is None:
+            filename = clinic.filename
+        if clinic.block_parser and (line_number is None):
+            line_number = clinic.block_parser.line_number
+    if filename is not None:
+        add(' in file "' + filename + '"')
+    if line_number is not None:
+        add(" on line " + str(line_number))
+    add(':\n')
+    add(joined)
+    print(output())
+    sys.exit(-1)
+
+
+
+def quoted_for_c_string(s):
+    for old, new in (
+        ('"', '\\"'),
+        ("'", "\\'"),
+        ):
+        s = s.replace(old, new)
+    return s
+
+is_legal_c_identifier = re.compile('^[A-Za-z_][A-Za-z0-9_]*$').match
+
+def is_legal_py_identifier(s):
+    return all(is_legal_c_identifier(field) for field in s.split('.'))
+
+# added "self", "cls", and "null" just to be safe
+# (clinic will generate variables with these names)
+c_keywords = set("""
+asm auto break case char cls const continue default do double
+else enum extern float for goto if inline int long null register
+return self short signed sizeof static struct switch typedef
+typeof union unsigned void volatile while
+""".strip().split())
+
+def ensure_legal_c_identifier(s):
+    # for now, just complain if what we're given isn't legal
+    if not is_legal_c_identifier(s):
+        fail("Illegal C identifier: {}".format(s))
+    # but if we picked a C keyword, pick something else
+    if s in c_keywords:
+        return s + "_value"
+    return s
+
+def rstrip_lines(s):
+    text, add, output = _text_accumulator()
+    for line in s.split('\n'):
+        add(line.rstrip())
+        add('\n')
+    text.pop()
+    return output()
+
+def linear_format(s, **kwargs):
+    """
+    Perform str.format-like substitution, except:
+      * The strings substituted must be on lines by
+        themselves.  (This line is the "source line".)
+      * If the substitution text is empty, the source line
+        is removed in the output.
+      * If the substitution text is not empty:
+          * Each line of the substituted text is indented
+            by the indent of the source line.
+          * A newline will be added to the end.
+    """
+
+    add, output = text_accumulator()
+    for line in s.split('\n'):
+        indent, curly, trailing = line.partition('{')
+        if not curly:
+            add(line)
+            add('\n')
+            continue
+
+        name, curl, trailing = trailing.partition('}')
+        if not curly or name not in kwargs:
+            add(line)
+            add('\n')
+            continue
+
+        if trailing:
+            fail("Text found after {" + name + "} block marker!  It must be on a line by itself.")
+        if indent.strip():
+            fail("Non-whitespace characters found before {" + name + "} block marker!  It must be on a line by itself.")
+
+        value = kwargs[name]
+        if not value:
+            continue
+
+        value = textwrap.indent(rstrip_lines(value), indent)
+        add(value)
+        add('\n')
+
+    return output()[:-1]
+
+
+class CRenderData:
+    def __init__(self):
+
+        # The C statements to declare variables.
+        # Should be full lines with \n eol characters.
+        self.declarations = []
+
+        # The C statements required to initialize the variables before the parse call.
+        # Should be full lines with \n eol characters.
+        self.initializers = []
+
+        # The entries for the "keywords" array for PyArg_ParseTuple.
+        # Should be individual strings representing the names.
+        self.keywords = []
+
+        # The "format units" for PyArg_ParseTuple.
+        # Should be individual strings that will get
+        self.format_units = []
+
+        # The varargs arguments for PyArg_ParseTuple.
+        self.parse_arguments = []
+
+        # The parameter declarations for the impl function.
+        self.impl_parameters = []
+
+        # The arguments to the impl function at the time it's called.
+        self.impl_arguments = []
+
+        # For return converters: the name of the variable that
+        # should receive the value returned by the impl.
+        self.return_value = "return_value"
+
+        # For return converters: the code to convert the return
+        # value from the parse function.  This is also where
+        # you should check the _return_value for errors, and
+        # "goto exit" if there are any.
+        self.return_conversion = []
+
+        # The C statements required to clean up after the impl call.
+        self.cleanup = []
+
+
+class Language(metaclass=abc.ABCMeta):
+
+    start_line = ""
+    body_prefix = ""
+    stop_line = ""
+    checksum_line = ""
+
+    @abc.abstractmethod
+    def render(self, block):
+        pass
+
+    def validate(self):
+        def assert_only_one(field, token='dsl_name'):
+            line = getattr(self, field)
+            token = '{' + token + '}'
+            if len(line.split(token)) != 2:
+                fail(self.__class__.__name__ + " " + field + " must contain " + token + " exactly once!")
+        assert_only_one('start_line')
+        assert_only_one('stop_line')
+        assert_only_one('checksum_line')
+        assert_only_one('checksum_line', 'checksum')
+
+        if len(self.body_prefix.split('{dsl_name}')) >= 3:
+            fail(self.__class__.__name__ + " body_prefix may contain " + token + " once at most!")
+
+
+
+class PythonLanguage(Language):
+
+    language      = 'Python'
+    start_line    = "#/*[{dsl_name}]"
+    body_prefix   = "#"
+    stop_line     = "#[{dsl_name}]*/"
+    checksum_line = "#/*[{dsl_name} checksum: {checksum}]*/"
+
+
+def permute_left_option_groups(l):
+    """
+    Given [1, 2, 3], should yield:
+       ()
+       (3,)
+       (2, 3)
+       (1, 2, 3)
+    """
+    yield tuple()
+    accumulator = []
+    for group in reversed(l):
+        accumulator = list(group) + accumulator
+        yield tuple(accumulator)
+
+
+def permute_right_option_groups(l):
+    """
+    Given [1, 2, 3], should yield:
+      ()
+      (1,)
+      (1, 2)
+      (1, 2, 3)
+    """
+    yield tuple()
+    accumulator = []
+    for group in l:
+        accumulator.extend(group)
+        yield tuple(accumulator)
+
+
+def permute_optional_groups(left, required, right):
+    """
+    Generator function that computes the set of acceptable
+    argument lists for the provided iterables of
+    argument groups.  (Actually it generates a tuple of tuples.)
+
+    Algorithm: prefer left options over right options.
+
+    If required is empty, left must also be empty.
+    """
+    required = tuple(required)
+    result = []
+
+    if not required:
+        assert not left
+
+    accumulator = []
+    counts = set()
+    for r in permute_right_option_groups(right):
+        for l in permute_left_option_groups(left):
+            t = l + required + r
+            if len(t) in counts:
+                continue
+            counts.add(len(t))
+            accumulator.append(t)
+
+    accumulator.sort(key=len)
+    return tuple(accumulator)
+
+
+class CLanguage(Language):
+
+    language      = 'C'
+    start_line    = "/*[{dsl_name}]"
+    body_prefix   = ""
+    stop_line     = "[{dsl_name}]*/"
+    checksum_line = "/*[{dsl_name} checksum: {checksum}]*/"
+
+    def render(self, signatures):
+        function = None
+        for o in signatures:
+            if isinstance(o, Function):
+                if function:
+                    fail("You may specify at most one function per block.\nFound a block containing at least two:\n\t" + repr(function) + " and " + repr(o))
+                function = o
+        return self.render_function(function)
+
+    def docstring_for_c_string(self, f):
+        text, add, output = _text_accumulator()
+        # turn docstring into a properly quoted C string
+        for line in f.docstring.split('\n'):
+            add('"')
+            add(quoted_for_c_string(line))
+            add('\\n"\n')
+
+        text.pop()
+        add('"')
+        return ''.join(text)
+
+    impl_prototype_template = "{c_basename}_impl({impl_parameters})"
+
+    @staticmethod
+    def template_base(*args):
+        flags = '|'.join(f for f in args if f)
+        return """
+PyDoc_STRVAR({c_basename}__doc__,
+{docstring});
+
+#define {methoddef_name}    \\
+    {{"{name}", (PyCFunction){c_basename}, {meth_flags}, {c_basename}__doc__}},
+""".replace('{meth_flags}', flags)
+
+    def meth_noargs_pyobject_template(self, meth_flags=""):
+        return self.template_base("METH_NOARGS", meth_flags) + """
+static PyObject *
+{c_basename}(PyObject *{self_name})
+"""
+
+    def meth_noargs_template(self, meth_flags=""):
+        return self.template_base("METH_NOARGS", meth_flags) + """
+static {impl_return_type}
+{impl_prototype};
+
+static PyObject *
+{c_basename}(PyObject *{self_name})
+{{
+    PyObject *return_value = NULL;
+    {declarations}
+    {initializers}
+
+    {return_value} = {c_basename}_impl({impl_arguments});
+    {return_conversion}
+
+{exit_label}
+    {cleanup}
+    return return_value;
+}}
+
+static {impl_return_type}
+{impl_prototype}
+"""
+
+    def meth_o_template(self, meth_flags=""):
+        return self.template_base("METH_O", meth_flags) + """
+static PyObject *
+{c_basename}({impl_parameters})
+"""
+
+    def meth_o_return_converter_template(self, meth_flags=""):
+        return self.template_base("METH_O", meth_flags) + """
+static {impl_return_type}
+{impl_prototype};
+
+static PyObject *
+{c_basename}({impl_parameters})
+{{
+    PyObject *return_value = NULL;
+    {declarations}
+    {initializers}
+    _return_value = {c_basename}_impl({impl_arguments});
+    {return_conversion}
+
+{exit_label}
+    {cleanup}
+    return return_value;
+}}
+
+static {impl_return_type}
+{impl_prototype}
+"""
+
+    def option_group_template(self, meth_flags=""):
+        return self.template_base("METH_VARARGS", meth_flags) + """
+static {impl_return_type}
+{impl_prototype};
+
+static PyObject *
+{c_basename}(PyObject *{self_name}, PyObject *args)
+{{
+    PyObject *return_value = NULL;
+    {declarations}
+    {initializers}
+
+    {option_group_parsing}
+    {return_value} = {c_basename}_impl({impl_arguments});
+    {return_conversion}
+
+{exit_label}
+    {cleanup}
+    return return_value;
+}}
+
+static {impl_return_type}
+{impl_prototype}
+"""
+
+    def keywords_template(self, meth_flags=""):
+        return self.template_base("METH_VARARGS|METH_KEYWORDS", meth_flags) + """
+static {impl_return_type}
+{impl_prototype};
+
+static PyObject *
+{c_basename}(PyObject *{self_name}, PyObject *args, PyObject *kwargs)
+{{
+    PyObject *return_value = NULL;
+    static char *_keywords[] = {{{keywords}, NULL}};
+    {declarations}
+    {initializers}
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+        "{format_units}:{name}", _keywords,
+        {parse_arguments}))
+        goto exit;
+    {return_value} = {c_basename}_impl({impl_arguments});
+    {return_conversion}
+
+{exit_label}
+    {cleanup}
+    return return_value;
+}}
+
+static {impl_return_type}
+{impl_prototype}
+"""
+
+    def positional_only_template(self, meth_flags=""):
+        return self.template_base("METH_VARARGS", meth_flags) + """
+static {impl_return_type}
+{impl_prototype};
+
+static PyObject *
+{c_basename}(PyObject *{self_name}, PyObject *args)
+{{
+    PyObject *return_value = NULL;
+    {declarations}
+    {initializers}
+
+    if (!PyArg_ParseTuple(args,
+        "{format_units}:{name}",
+        {parse_arguments}))
+        goto exit;
+    {return_value} = {c_basename}_impl({impl_arguments});
+    {return_conversion}
+
+{exit_label}
+    {cleanup}
+    return return_value;
+}}
+
+static {impl_return_type}
+{impl_prototype}
+"""
+
+    @staticmethod
+    def group_to_variable_name(group):
+        adjective = "left_" if group < 0 else "right_"
+        return "group_" + adjective + str(abs(group))
+
+    def render_option_group_parsing(self, f, template_dict):
+        # positional only, grouped, optional arguments!
+        # can be optional on the left or right.
+        # here's an example:
+        #
+        # [ [ [ A1 A2 ] B1 B2 B3 ] C1 C2 ] D1 D2 D3 [ E1 E2 E3 [ F1 F2 F3 ] ]
+        #
+        # Here group D are required, and all other groups are optional.
+        # (Group D's "group" is actually None.)
+        # We can figure out which sets of arguments we have based on
+        # how many arguments are in the tuple.
+        #
+        # Note that you need to count up on both sides.  For example,
+        # you could have groups C+D, or C+D+E, or C+D+E+F.
+        #
+        # What if the number of arguments leads us to an ambiguous result?
+        # Clinic prefers groups on the left.  So in the above example,
+        # five arguments would map to B+C, not C+D.
+
+        add, output = text_accumulator()
+        parameters = list(f.parameters.values())
+
+        groups = []
+        group = None
+        left = []
+        right = []
+        required = []
+        last = unspecified
+
+        for p in parameters:
+            group_id = p.group
+            if group_id != last:
+                last = group_id
+                group = []
+                if group_id < 0:
+                    left.append(group)
+                elif group_id == 0:
+                    group = required
+                else:
+                    right.append(group)
+            group.append(p)
+
+        count_min = sys.maxsize
+        count_max = -1
+
+        add("switch (PyTuple_Size(args)) {{\n")
+        for subset in permute_optional_groups(left, required, right):
+            count = len(subset)
+            count_min = min(count_min, count)
+            count_max = max(count_max, count)
+
+            group_ids = {p.group for p in subset}  # eliminate duplicates
+            d = {}
+            d['count'] = count
+            d['name'] = f.name
+            d['groups'] = sorted(group_ids)
+            d['format_units'] = "".join(p.converter.format_unit for p in subset)
+
+            parse_arguments = []
+            for p in subset:
+                p.converter.parse_argument(parse_arguments)
+            d['parse_arguments'] = ", ".join(parse_arguments)
+
+            group_ids.discard(0)
+            lines = [self.group_to_variable_name(g) + " = 1;" for g in group_ids]
+            lines = "\n".join(lines)
+
+            s = """
+    case {count}:
+        if (!PyArg_ParseTuple(args, "{format_units}:{name}", {parse_arguments}))
+            return NULL;
+        {group_booleans}
+        break;
+"""[1:]
+            s = linear_format(s, group_booleans=lines)
+            s = s.format_map(d)
+            add(s)
+
+        add("    default:\n")
+        s = '        PyErr_SetString(PyExc_TypeError, "{} requires {} to {} arguments");\n'
+        add(s.format(f.full_name, count_min, count_max))
+        add('        return NULL;\n')
+        add("}}")
+        template_dict['option_group_parsing'] = output()
+
+    def render_function(self, f):
+        if not f:
+            return ""
+
+        add, output = text_accumulator()
+        data = CRenderData()
+
+        if f.kind == STATIC_METHOD:
+            meth_flags = 'METH_STATIC'
+            self_name = "null"
+        else:
+            if f.kind == CALLABLE:
+                meth_flags = ''
+                self_name = "self"
+            elif f.kind == CLASS_METHOD:
+                meth_flags = 'METH_CLASS'
+                self_name = "cls"
+            else:
+                fail("Unrecognized 'kind' " + repr(f.kind) + " for function " + f.name)
+
+            data.impl_parameters.append("PyObject *" + self_name)
+            data.impl_arguments.append(self_name)
+
+        if f.coexist:
+            if meth_flags:
+                meth_flags += '|'
+            meth_flags += 'METH_COEXIST'
+
+        parameters = list(f.parameters.values())
+        converters = [p.converter for p in parameters]
+
+        template_dict = {}
+
+        full_name = f.full_name
+        template_dict['full_name'] = full_name
+
+        name = full_name.rpartition('.')[2]
+        template_dict['name'] = name
+
+        c_basename = f.c_basename or full_name.replace(".", "_")
+        template_dict['c_basename'] = c_basename
+
+        methoddef_name = "{}_METHODDEF".format(c_basename.upper())
+        template_dict['methoddef_name'] = methoddef_name
+
+        template_dict['docstring'] = self.docstring_for_c_string(f)
+
+        template_dict['self_name'] = self_name
+
+        positional = has_option_groups =  False
+
+        if parameters:
+            last_group = 0
+
+            for p in parameters:
+                c = p.converter
+
+                # insert group variable
+                group = p.group
+                if last_group != group:
+                    last_group = group
+                    if group:
+                        group_name = self.group_to_variable_name(group)
+                        data.impl_arguments.append(group_name)
+                        data.declarations.append("int " + group_name + " = 0;")
+                        data.impl_parameters.append("int " + group_name)
+                        has_option_groups = True
+                c.render(p, data)
+
+            positional = parameters[-1].kind == inspect.Parameter.POSITIONAL_ONLY
+            if has_option_groups:
+                assert positional
+
+        f.return_converter.render(f, data)
+        template_dict['impl_return_type'] = f.return_converter.type
+
+        template_dict['declarations'] = "\n".join(data.declarations)
+        template_dict['initializers'] = "\n\n".join(data.initializers)
+        template_dict['keywords'] = '"' + '", "'.join(data.keywords) + '"'
+        template_dict['format_units'] = ''.join(data.format_units)
+        template_dict['parse_arguments'] = ', '.join(data.parse_arguments)
+        template_dict['impl_parameters'] = ", ".join(data.impl_parameters)
+        template_dict['impl_arguments'] = ", ".join(data.impl_arguments)
+        template_dict['return_conversion'] = "".join(data.return_conversion).rstrip()
+        template_dict['cleanup'] = "".join(data.cleanup)
+        template_dict['return_value'] = data.return_value
+
+        template_dict['impl_prototype'] = self.impl_prototype_template.format_map(template_dict)
+
+        default_return_converter = (not f.return_converter or
+            f.return_converter.type == 'PyObject *')
+
+        if not parameters:
+            if default_return_converter:
+                template = self.meth_noargs_pyobject_template(meth_flags)
+            else:
+                template = self.meth_noargs_template(meth_flags)
+        elif (len(parameters) == 1 and
+              parameters[0].kind == inspect.Parameter.POSITIONAL_ONLY and
+              not converters[0].is_optional() and
+              isinstance(converters[0], object_converter) and
+              converters[0].format_unit == 'O'):
+            if default_return_converter:
+                template = self.meth_o_template(meth_flags)
+            else:
+                # HACK
+                # we're using "impl_parameters" for the
+                # non-impl function, because that works
+                # better for METH_O.  but that means we
+                # must surpress actually declaring the
+                # impl's parameters as variables in the
+                # non-impl.  but since it's METH_O, we
+                # only have one anyway, and it's the first one.
+                declarations_copy = list(data.declarations)
+                before, pyobject, after = declarations_copy[0].partition('PyObject *')
+                assert not before, "hack failed, see comment"
+                assert pyobject, "hack failed, see comment"
+                assert after and after[0].isalpha(), "hack failed, see comment"
+                del declarations_copy[0]
+                template_dict['declarations'] = "\n".join(declarations_copy)
+                template = self.meth_o_return_converter_template(meth_flags)
+        elif has_option_groups:
+            self.render_option_group_parsing(f, template_dict)
+            template = self.option_group_template(meth_flags)
+            template = linear_format(template,
+                option_group_parsing=template_dict['option_group_parsing'])
+        elif positional:
+            template = self.positional_only_template(meth_flags)
+        else:
+            template = self.keywords_template(meth_flags)
+
+        template = linear_format(template,
+            declarations=template_dict['declarations'],
+            return_conversion=template_dict['return_conversion'],
+            initializers=template_dict['initializers'],
+            cleanup=template_dict['cleanup'],
+            )
+
+        # Only generate the "exit:" label
+        # if we have any gotos
+        need_exit_label = "goto exit;" in template
+        template = linear_format(template,
+            exit_label="exit:" if need_exit_label else ''
+            )
+
+        return template.format_map(template_dict)
+
+
+@contextlib.contextmanager
+def OverrideStdioWith(stdout):
+    saved_stdout = sys.stdout
+    sys.stdout = stdout
+    try:
+        yield
+    finally:
+        assert sys.stdout is stdout
+        sys.stdout = saved_stdout
+
+
+def create_regex(before, after):
+    """Create an re object for matching marker lines."""
+    pattern = r'^{}(\w+){}$'
+    return re.compile(pattern.format(re.escape(before), re.escape(after)))
+
+
+class Block:
+    r"""
+    Represents a single block of text embedded in
+    another file.  If dsl_name is None, the block represents
+    verbatim text, raw original text from the file, in
+    which case "input" will be the only non-false member.
+    If dsl_name is not None, the block represents a Clinic
+    block.
+
+    input is always str, with embedded \n characters.
+    input represents the original text from the file;
+    if it's a Clinic block, it is the original text with
+    the body_prefix and redundant leading whitespace removed.
+
+    dsl_name is either str or None.  If str, it's the text
+    found on the start line of the block between the square
+    brackets.
+
+    signatures is either list or None.  If it's a list,
+    it may only contain clinic.Module, clinic.Class, and
+    clinic.Function objects.  At the moment it should
+    contain at most one of each.
+
+    output is either str or None.  If str, it's the output
+    from this block, with embedded '\n' characters.
+
+    indent is either str or None.  It's the leading whitespace
+    that was found on every line of input.  (If body_prefix is
+    not empty, this is the indent *after* removing the
+    body_prefix.)
+
+    preindent is either str or None.  It's the whitespace that
+    was found in front of every line of input *before* the
+    "body_prefix" (see the Language object).  If body_prefix
+    is empty, preindent must always be empty too.
+
+    To illustrate indent and preindent: Assume that '_'
+    represents whitespace.  If the block processed was in a
+    Python file, and looked like this:
+      ____#/*[python]
+      ____#__for a in range(20):
+      ____#____print(a)
+      ____#[python]*/
+    "preindent" would be "____" and "indent" would be "__".
+
+    """
+    def __init__(self, input, dsl_name=None, signatures=None, output=None, indent='', preindent=''):
+        assert isinstance(input, str)
+        self.input = input
+        self.dsl_name = dsl_name
+        self.signatures = signatures or []
+        self.output = output
+        self.indent = indent
+        self.preindent = preindent
+
+
+class BlockParser:
+    """
+    Block-oriented parser for Argument Clinic.
+    Iterator, yields Block objects.
+    """
+
+    def __init__(self, input, language, *, verify=True):
+        """
+        "input" should be a str object
+        with embedded \n characters.
+
+        "language" should be a Language object.
+        """
+        language.validate()
+
+        self.input = collections.deque(reversed(input.splitlines(keepends=True)))
+        self.block_start_line_number = self.line_number = 0
+
+        self.language = language
+        before, _, after = language.start_line.partition('{dsl_name}')
+        assert _ == '{dsl_name}'
+        self.start_re = create_regex(before, after)
+        self.verify = verify
+        self.last_checksum_re = None
+        self.last_dsl_name = None
+        self.dsl_name = None
+
+    def __iter__(self):
+        return self
+
+    def __next__(self):
+        if not self.input:
+            raise StopIteration
+
+        if self.dsl_name:
+            return_value = self.parse_clinic_block(self.dsl_name)
+            self.dsl_name = None
+            return return_value
+        return self.parse_verbatim_block()
+
+    def is_start_line(self, line):
+        match = self.start_re.match(line.lstrip())
+        return match.group(1) if match else None
+
+    def _line(self):
+        self.line_number += 1
+        return self.input.pop()
+
+    def parse_verbatim_block(self):
+        add, output = text_accumulator()
+        self.block_start_line_number = self.line_number
+
+        while self.input:
+            line = self._line()
+            dsl_name = self.is_start_line(line)
+            if dsl_name:
+                self.dsl_name = dsl_name
+                break
+            add(line)
+
+        return Block(output())
+
+    def parse_clinic_block(self, dsl_name):
+        input_add, input_output = text_accumulator()
+        self.block_start_line_number = self.line_number + 1
+        stop_line = self.language.stop_line.format(dsl_name=dsl_name) + '\n'
+        body_prefix = self.language.body_prefix.format(dsl_name=dsl_name)
+
+        # consume body of program
+        while self.input:
+            line = self._line()
+            if line == stop_line or self.is_start_line(line):
+                break
+            if body_prefix:
+                line = line.lstrip()
+                assert line.startswith(body_prefix)
+                line = line[len(body_prefix):]
+            input_add(line)
+
+        # consume output and checksum line, if present.
+        if self.last_dsl_name == dsl_name:
+            checksum_re = self.last_checksum_re
+        else:
+            before, _, after = self.language.checksum_line.format(dsl_name=dsl_name, checksum='{checksum}').partition('{checksum}')
+            assert _ == '{checksum}'
+            checksum_re = create_regex(before, after)
+            self.last_dsl_name = dsl_name
+            self.last_checksum_re = checksum_re
+
+        # scan forward for checksum line
+        output_add, output_output = text_accumulator()
+        checksum = None
+        while self.input:
+            line = self._line()
+            match = checksum_re.match(line.lstrip())
+            checksum = match.group(1) if match else None
+            if checksum:
+                break
+            output_add(line)
+            if self.is_start_line(line):
+                break
+
+        output = output_output()
+        if checksum:
+            if self.verify:
+                computed = compute_checksum(output)
+                if checksum != computed:
+                    fail("Checksum mismatch!\nExpected: {}\nComputed: {}".format(checksum, computed))
+        else:
+            # put back output
+            self.input.extend(reversed(output.splitlines(keepends=True)))
+            self.line_number -= len(output)
+            output = None
+
+        return Block(input_output(), dsl_name, output=output)
+
+
+class BlockPrinter:
+
+    def __init__(self, language, f=None):
+        self.language = language
+        self.f = f or io.StringIO()
+
+    def print_block(self, block):
+        input = block.input
+        output = block.output
+        dsl_name = block.dsl_name
+        write = self.f.write
+
+        assert (not input) or (input.endswith('\n'))
+        assert not ((dsl_name == None) ^ (output == None)), "you must specify dsl_name and output together, dsl_name " + repr(dsl_name)
+
+        if not dsl_name:
+            write(input)
+            return
+
+        write(self.language.start_line.format(dsl_name=dsl_name))
+        write("\n")
+
+        body_prefix = self.language.body_prefix.format(dsl_name=dsl_name)
+        if not body_prefix:
+            write(input)
+        else:
+            for line in input.split('\n'):
+                write(body_prefix)
+                write(line)
+                write("\n")
+
+        write(self.language.stop_line.format(dsl_name=dsl_name))
+        write("\n")
+
+        output = block.output
+        if output:
+            write(output)
+            if not output.endswith('\n'):
+                write('\n')
+
+        write(self.language.checksum_line.format(dsl_name=dsl_name, checksum=compute_checksum(output)))
+        write("\n")
+
+
+# maps strings to Language objects.
+# "languages" maps the name of the language ("C", "Python").
+# "extensions" maps the file extension ("c", "py").
+languages = { 'C': CLanguage, 'Python': PythonLanguage }
+extensions = { 'c': CLanguage, 'h': CLanguage, 'py': PythonLanguage }
+
+
+# maps strings to callables.
+# these callables must be of the form:
+#   def foo(name, default, *, ...)
+# The callable may have any number of keyword-only parameters.
+# The callable must return a CConverter object.
+# The callable should not call builtins.print.
+converters = {}
+
+# maps strings to callables.
+# these callables follow the same rules as those for "converters" above.
+# note however that they will never be called with keyword-only parameters.
+legacy_converters = {}
+
+
+# maps strings to callables.
+# these callables must be of the form:
+#   def foo(*, ...)
+# The callable may have any number of keyword-only parameters.
+# The callable must return a CConverter object.
+# The callable should not call builtins.print.
+return_converters = {}
+
+class Clinic:
+    def __init__(self, language, printer=None, *, verify=True, filename=None):
+        # maps strings to Parser objects.
+        # (instantiated from the "parsers" global.)
+        self.parsers = {}
+        self.language = language
+        self.printer = printer or BlockPrinter(language)
+        self.verify = verify
+        self.filename = filename
+        self.modules = collections.OrderedDict()
+
+        global clinic
+        clinic = self
+
+    def parse(self, input):
+        printer = self.printer
+        self.block_parser = BlockParser(input, self.language, verify=self.verify)
+        for block in self.block_parser:
+            dsl_name = block.dsl_name
+            if dsl_name:
+                if dsl_name not in self.parsers:
+                    assert dsl_name in parsers, "No parser to handle {!r} block.".format(dsl_name)
+                    self.parsers[dsl_name] = parsers[dsl_name](self)
+                parser = self.parsers[dsl_name]
+                parser.parse(block)
+            printer.print_block(block)
+        return printer.f.getvalue()
+
+    def _module_and_class(self, fields):
+        """
+        fields should be an iterable of field names.
+        returns a tuple of (module, class).
+        the module object could actually be self (a clinic object).
+        this function is only ever used to find the parent of where
+        a new class/module should go.
+        """
+        in_classes = False
+        parent = module = self
+        cls = None
+        so_far = []
+
+        for field in fields:
+            so_far.append(field)
+            if not in_classes:
+                child = parent.modules.get(field)
+                if child:
+                    module = child
+                    continue
+                in_classes = True
+            if not hasattr(parent, 'classes'):
+                return module, cls
+            child = parent.classes.get(field)
+            if not child:
+                fail('Parent class or module ' + '.'.join(so_far) + " does not exist.")
+            cls = parent = child
+
+        return module, cls
+
+
+def parse_file(filename, *, verify=True, output=None, encoding='utf-8'):
+    extension = os.path.splitext(filename)[1][1:]
+    if not extension:
+        fail("Can't extract file type for file " + repr(filename))
+
+    try:
+        language = extensions[extension]()
+    except KeyError:
+        fail("Can't identify file type for file " + repr(filename))
+
+    clinic = Clinic(language, verify=verify, filename=filename)
+
+    with open(filename, 'r', encoding=encoding) as f:
+        text = clinic.parse(f.read())
+
+    directory = os.path.dirname(filename) or '.'
+
+    with tempfile.TemporaryDirectory(prefix="clinic", dir=directory) as tmpdir:
+        bytes = text.encode(encoding)
+        tmpfilename = os.path.join(tmpdir, os.path.basename(filename))
+        with open(tmpfilename, "wb") as f:
+            f.write(bytes)
+        os.replace(tmpfilename, output or filename)
+
+
+def compute_checksum(input):
+    input = input or ''
+    return hashlib.sha1(input.encode('utf-8')).hexdigest()
+
+
+
+
+class PythonParser:
+    def __init__(self, clinic):
+        pass
+
+    def parse(self, block):
+        s = io.StringIO()
+        with OverrideStdioWith(s):
+            exec(block.input)
+        block.output = s.getvalue()
+
+
+class Module:
+    def __init__(self, name, module=None):
+        self.name = name
+        self.module = self.parent = module
+
+        self.modules = collections.OrderedDict()
+        self.classes = collections.OrderedDict()
+        self.functions = []
+
+class Class:
+    def __init__(self, name, module=None, cls=None):
+        self.name = name
+        self.module = module
+        self.cls = cls
+        self.parent = cls or module
+
+        self.classes = collections.OrderedDict()
+        self.functions = []
+
+DATA, CALLABLE, METHOD, STATIC_METHOD, CLASS_METHOD = range(5)
+
+class Function:
+    """
+    Mutable duck type for inspect.Function.
+
+    docstring - a str containing
+        * embedded line breaks
+        * text outdented to the left margin
+        * no trailing whitespace.
+        It will always be true that
+            (not docstring) or ((not docstring[0].isspace()) and (docstring.rstrip() == docstring))
+    """
+
+    def __init__(self, parameters=None, *, name,
+                 module, cls=None, c_basename=None,
+                 full_name=None,
+                 return_converter, return_annotation=_empty,
+                 docstring=None, kind=CALLABLE, coexist=False):
+        self.parameters = parameters or collections.OrderedDict()
+        self.return_annotation = return_annotation
+        self.name = name
+        self.full_name = full_name
+        self.module = module
+        self.cls = cls
+        self.parent = cls or module
+        self.c_basename = c_basename
+        self.return_converter = return_converter
+        self.docstring = docstring or ''
+        self.kind = kind
+        self.coexist = coexist
+
+    def __repr__(self):
+        return '<clinic.Function ' + self.name + '>'
+
+
+class Parameter:
+    """
+    Mutable duck type of inspect.Parameter.
+    """
+
+    def __init__(self, name, kind, *, default=_empty,
+                 function, converter, annotation=_empty,
+                 docstring=None, group=0):
+        self.name = name
+        self.kind = kind
+        self.default = default
+        self.function = function
+        self.converter = converter
+        self.annotation = annotation
+        self.docstring = docstring or ''
+        self.group = group
+
+    def __repr__(self):
+        return '<clinic.Parameter ' + self.name + '>'
+
+    def is_keyword_only(self):
+        return self.kind == inspect.Parameter.KEYWORD_ONLY
+
+py_special_values = {
+    NULL: "None",
+}
+
+def py_repr(o):
+    special = py_special_values.get(o)
+    if special:
+        return special
+    return repr(o)
+
+
+c_special_values = {
+    NULL: "NULL",
+    None: "Py_None",
+}
+
+def c_repr(o):
+    special = c_special_values.get(o)
+    if special:
+        return special
+    if isinstance(o, str):
+        return '"' + quoted_for_c_string(o) + '"'
+    return repr(o)
+
+def add_c_converter(f, name=None):
+    if not name:
+        name = f.__name__
+        if not name.endswith('_converter'):
+            return f
+        name = name[:-len('_converter')]
+    converters[name] = f
+    return f
+
+def add_default_legacy_c_converter(cls):
+    # automatically add converter for default format unit
+    # (but without stomping on the existing one if it's already
+    # set, in case you subclass)
+    if ((cls.format_unit != 'O&') and
+        (cls.format_unit not in legacy_converters)):
+        legacy_converters[cls.format_unit] = cls
+    return cls
+
+def add_legacy_c_converter(format_unit, **kwargs):
+    """
+    Adds a legacy converter.
+    """
+    def closure(f):
+        if not kwargs:
+            added_f = f
+        else:
+            added_f = functools.partial(f, **kwargs)
+        legacy_converters[format_unit] = added_f
+        return f
+    return closure
+
+class CConverterAutoRegister(type):
+    def __init__(cls, name, bases, classdict):
+        add_c_converter(cls)
+        add_default_legacy_c_converter(cls)
+
+class CConverter(metaclass=CConverterAutoRegister):
+    """
+    For the init function, self, name, function, and default
+    must be keyword-or-positional parameters.  All other
+    parameters (including "required" and "doc_default")
+    must be keyword-only.
+    """
+
+    type = None
+    format_unit = 'O&'
+
+    # The Python default value for this parameter, as a Python value.
+    # Or "unspecified" if there is no default.
+    default = unspecified
+
+    # "default" converted into a str for rendering into Python code.
+    py_default = None
+
+    # "default" as it should appear in the documentation, as a string.
+    # Or None if there is no default.
+    doc_default = None
+
+    # "default" converted into a C value, as a string.
+    # Or None if there is no default.
+    c_default = None
+
+    # The C converter *function* to be used, if any.
+    # (If this is not None, format_unit must be 'O&'.)
+    converter = None
+    encoding = None
+    impl_by_reference = False
+    parse_by_reference = True
+    length = False
+
+    def __init__(self, name, function, default=unspecified, *, doc_default=None, required=False, annotation=unspecified, **kwargs):
+        self.function = function
+        self.name = name
+
+        if default is not unspecified:
+            self.default = default
+            self.py_default = py_repr(default)
+            self.doc_default = doc_default if doc_default is not None else self.py_default
+            self.c_default = c_repr(default)
+        elif doc_default is not None:
+            fail(function.fullname + " argument " + name + " specified a 'doc_default' without having a 'default'")
+        if annotation != unspecified:
+            fail("The 'annotation' parameter is not currently permitted.")
+        self.required = required
+        self.converter_init(**kwargs)
+
+    def converter_init(self):
+        pass
+
+    def is_optional(self):
+        return (self.default is not unspecified) and (not self.required)
+
+    def render(self, parameter, data):
+        """
+        parameter is a clinic.Parameter instance.
+        data is a CRenderData instance.
+        """
+        name = ensure_legal_c_identifier(self.name)
+
+        # declarations
+        d = self.declaration()
+        data.declarations.append(d)
+
+        # initializers
+        initializers = self.initialize()
+        if initializers:
+            data.initializers.append('/* initializers for ' + name + ' */\n' + initializers.rstrip())
+
+        # impl_arguments
+        s = ("&" if self.impl_by_reference else "") + name
+        data.impl_arguments.append(s)
+
+        # keywords
+        data.keywords.append(name)
+
+        # format_units
+        if self.is_optional() and '|' not in data.format_units:
+            data.format_units.append('|')
+        if parameter.is_keyword_only() and '$' not in data.format_units:
+            data.format_units.append('$')
+        data.format_units.append(self.format_unit)
+
+        # parse_arguments
+        self.parse_argument(data.parse_arguments)
+
+        # impl_parameters
+        data.impl_parameters.append(self.simple_declaration(by_reference=self.impl_by_reference))
+
+        # cleanup
+        cleanup = self.cleanup()
+        if cleanup:
+            data.cleanup.append('/* Cleanup for ' + name + ' */\n' + cleanup.rstrip() + "\n")
+
+    # Why is this one broken out separately?
+    # For "positional-only" function parsing,
+    # which generates a bunch of PyArg_ParseTuple calls.
+    def parse_argument(self, list):
+        assert not (self.converter and self.encoding)
+        if self.format_unit == 'O&':
+            assert self.converter
+            list.append(self.converter)
+
+        if self.encoding:
+            list.append(self.encoding)
+
+        s = ("&" if self.parse_by_reference else "") + ensure_legal_c_identifier(self.name)
+        list.append(s)
+
+    #
+    # All the functions after here are intended as extension points.
+    #
+
+    def simple_declaration(self, by_reference=False):
+        """
+        Computes the basic declaration of the variable.
+        Used in computing the prototype declaration and the
+        variable declaration.
+        """
+        prototype = [self.type]
+        if by_reference or not self.type.endswith('*'):
+            prototype.append(" ")
+        if by_reference:
+            prototype.append('*')
+        prototype.append(ensure_legal_c_identifier(self.name))
+        return "".join(prototype)
+
+    def declaration(self):
+        """
+        The C statement to declare this variable.
+        """
+        declaration = [self.simple_declaration()]
+        if self.c_default:
+            declaration.append(" = ")
+            declaration.append(self.c_default)
+        declaration.append(";")
+        return "".join(declaration)
+
+    def initialize(self):
+        """
+        The C statements required to set up this variable before parsing.
+        Returns a string containing this code indented at column 0.
+        If no initialization is necessary, returns an empty string.
+        """
+        return ""
+
+    def cleanup(self):
+        """
+        The C statements required to clean up after this variable.
+        Returns a string containing this code indented at column 0.
+        If no cleanup is necessary, returns an empty string.
+        """
+        return ""
+
+
+class bool_converter(CConverter):
+    type = 'int'
+    format_unit = 'p'
+
+    def converter_init(self):
+        self.default = bool(self.default)
+        self.c_default = str(int(self.default))
+
+class char_converter(CConverter):
+    type = 'char'
+    format_unit = 'c'
+
+@add_legacy_c_converter('B', bitwise=True)
+class byte_converter(CConverter):
+    type = 'byte'
+    format_unit = 'b'
+
+    def converter_init(self, *, bitwise=False):
+        if bitwise:
+            format_unit = 'B'
+
+class short_converter(CConverter):
+    type = 'short'
+    format_unit = 'h'
+
+class unsigned_short_converter(CConverter):
+    type = 'unsigned short'
+    format_unit = 'H'
+
+    def converter_init(self, *, bitwise=False):
+        if not bitwise:
+            fail("Unsigned shorts must be bitwise (for now).")
+
+@add_legacy_c_converter('C', from_str=True)
+class int_converter(CConverter):
+    type = 'int'
+    format_unit = 'i'
+
+    def converter_init(self, *, from_str=False):
+        if from_str:
+            format_unit = 'C'
+
+class unsigned_int_converter(CConverter):
+    type = 'unsigned int'
+    format_unit = 'I'
+
+    def converter_init(self, *, bitwise=False):
+        if not bitwise:
+            fail("Unsigned ints must be bitwise (for now).")
+
+class long_converter(CConverter):
+    type = 'long'
+    format_unit = 'l'
+
+class unsigned_long_converter(CConverter):
+    type = 'unsigned long'
+    format_unit = 'k'
+
+    def converter_init(self, *, bitwise=False):
+        if not bitwise:
+            fail("Unsigned longs must be bitwise (for now).")
+
+class PY_LONG_LONG_converter(CConverter):
+    type = 'PY_LONG_LONG'
+    format_unit = 'L'
+
+class unsigned_PY_LONG_LONG_converter(CConverter):
+    type = 'unsigned PY_LONG_LONG'
+    format_unit = 'K'
+
+    def converter_init(self, *, bitwise=False):
+        if not bitwise:
+            fail("Unsigned PY_LONG_LONGs must be bitwise (for now).")
+
+class Py_ssize_t_converter(CConverter):
+    type = 'Py_ssize_t'
+    format_unit = 'n'
+
+
+class float_converter(CConverter):
+    type = 'float'
+    format_unit = 'f'
+
+class double_converter(CConverter):
+    type = 'double'
+    format_unit = 'd'
+
+
+class Py_complex_converter(CConverter):
+    type = 'Py_complex'
+    format_unit = 'D'
+
+
+class object_converter(CConverter):
+    type = 'PyObject *'
+    format_unit = 'O'
+
+    def converter_init(self, *, type=None):
+        if type:
+            assert isinstance(type, str)
+            assert type.isidentifier()
+            try:
+                type = eval(type)
+                # need more of these!
+                type = {
+                    str: '&PyUnicode_Type',
+                    }[type]
+            except NameError:
+                type = type
+            self.format_unit = 'O!'
+            self.encoding = type
+
+
+@add_legacy_c_converter('y', from_bytes=True)
+@add_legacy_c_converter('z', nullable=True)
+class str_converter(CConverter):
+    type = 'const char *'
+    format_unit = 's'
+
+    def converter_init(self, *, nullable=False, from_bytes=False):
+        if from_bytes:
+            assert not nullable
+            format_unit = 'y'
+        if nullable:
+            format_unit = 'z'
+
+
+class PyBytesObject_converter(CConverter):
+    type = 'PyBytesObject *'
+    format_unit = 'S'
+
+class PyByteArrayObject_converter(CConverter):
+    type = 'PyByteArrayObject *'
+    format_unit = 'Y'
+
+class unicode_converter(CConverter):
+    type = 'PyObject *'
+    format_unit = 'U'
+
+@add_legacy_c_converter('Z', nullable=True)
+class Py_UNICODE_converter(CConverter):
+    type = 'Py_UNICODE *'
+    format_unit = 'u'
+
+    def converter_init(self, *, nullable=False):
+        if nullable:
+            format_unit = 'Z'
+
+@add_legacy_c_converter('s*', zeroes=True)
+@add_legacy_c_converter('w*', read_write=True)
+@add_legacy_c_converter('z*', zeroes=True, nullable=True)
+class Py_buffer_converter(CConverter):
+    type = 'Py_buffer'
+    format_unit = 'y*'
+    impl_by_reference = True
+
+    def converter_init(self, *, str=False, zeroes=False, nullable=False, read_write=False):
+        if not str:
+            assert not (zeroes or nullable or read_write)
+        elif read_write:
+            assert not (zeroes or nullable)
+            self.format_unit = 'w*'
+        else:
+            assert zeroes
+            self.format_unit = 'z*' if nullable else 's*'
+
+    def cleanup(self):
+        return "PyBuffer_Release(&" + ensure_legal_c_identifier(self.name) + ");\n"
+
+
+def add_c_return_converter(f, name=None):
+    if not name:
+        name = f.__name__
+        if not name.endswith('_return_converter'):
+            return f
+        name = name[:-len('_return_converter')]
+    return_converters[name] = f
+    return f
+
+
+class CReturnConverterAutoRegister(type):
+    def __init__(cls, name, bases, classdict):
+        add_c_return_converter(cls)
+
+class CReturnConverter(metaclass=CReturnConverterAutoRegister):
+
+    type = 'PyObject *'
+    default = None
+
+    def __init__(self, *, doc_default=None, **kwargs):
+        self.doc_default = doc_default
+        try:
+            self.return_converter_init(**kwargs)
+        except TypeError as e:
+            s = ', '.join(name + '=' + repr(value) for name, value in kwargs.items())
+            sys.exit(self.__class__.__name__ + '(' + s + ')\n' + str(e))
+
+    def return_converter_init(self):
+        pass
+
+    def declare(self, data, name="_return_value"):
+        line = []
+        add = line.append
+        add(self.type)
+        if not self.type.endswith('*'):
+            add(' ')
+        add(name + ';')
+        data.declarations.append(''.join(line))
+        data.return_value = name
+
+    def err_occurred_if(self, expr, data):
+        data.return_conversion.append('if (({}) && PyErr_Occurred())\n    goto exit;\n'.format(expr))
+
+    def err_occurred_if_null_pointer(self, variable, data):
+        data.return_conversion.append('if ({} == NULL)\n    goto exit;\n'.format(variable))
+
+    def render(self, function, data):
+        """
+        function is a clinic.Function instance.
+        data is a CRenderData instance.
+        """
+        pass
+
+add_c_return_converter(CReturnConverter, 'object')
+
+class int_return_converter(CReturnConverter):
+    type = 'int'
+
+    def render(self, function, data):
+        self.declare(data)
+        self.err_occurred_if("_return_value == -1", data)
+        data.return_conversion.append(
+            'return_value = PyLong_FromLong((long)_return_value);\n')
+
+
+class long_return_converter(CReturnConverter):
+    type = 'long'
+
+    def render(self, function, data):
+        self.declare(data)
+        self.err_occurred_if("_return_value == -1", data)
+        data.return_conversion.append(
+            'return_value = PyLong_FromLong(_return_value);\n')
+
+
+class Py_ssize_t_return_converter(CReturnConverter):
+    type = 'Py_ssize_t'
+
+    def render(self, function, data):
+        self.declare(data)
+        self.err_occurred_if("_return_value == -1", data)
+        data.return_conversion.append(
+            'return_value = PyLong_FromSsize_t(_return_value);\n')
+
+
+class DecodeFSDefault_return_converter(CReturnConverter):
+    type = 'char *'
+
+    def render(self, function, data):
+        self.declare(data)
+        self.err_occurred_if_null_pointer("_return_value", data)
+        data.return_conversion.append(
+            'return_value = PyUnicode_DecodeFSDefault(_return_value);\n')
+
+
+class IndentStack:
+    def __init__(self):
+        self.indents = []
+        self.margin = None
+
+    def _ensure(self):
+        if not self.indents:
+            fail('IndentStack expected indents, but none are defined.')
+
+    def measure(self, line):
+        """
+        Returns the length of the line's margin.
+        """
+        if '\t' in line:
+            fail('Tab characters are illegal in the Clinic DSL.')
+        stripped = line.lstrip()
+        if not len(stripped):
+            # we can't tell anything from an empty line
+            # so just pretend it's indented like our current indent
+            self._ensure()
+            return self.indents[-1]
+        return len(line) - len(stripped)
+
+    def infer(self, line):
+        """
+        Infer what is now the current margin based on this line.
+        Returns:
+            1 if we have indented (or this is the first margin)
+            0 if the margin has not changed
+           -N if we have dedented N times
+        """
+        indent = self.measure(line)
+        margin = ' ' * indent
+        if not self.indents:
+            self.indents.append(indent)
+            self.margin = margin
+            return 1
+        current = self.indents[-1]
+        if indent == current:
+            return 0
+        if indent > current:
+            self.indents.append(indent)
+            self.margin = margin
+            return 1
+        # indent < current
+        if indent not in self.indents:
+            fail("Illegal outdent.")
+        outdent_count = 0
+        while indent != current:
+            self.indents.pop()
+            current = self.indents[-1]
+            outdent_count -= 1
+        self.margin = margin
+        return outdent_count
+
+    @property
+    def depth(self):
+        """
+        Returns how many margins are currently defined.
+        """
+        return len(self.indents)
+
+    def indent(self, line):
+        """
+        Indents a line by the currently defined margin.
+        """
+        return self.margin + line
+
+    def dedent(self, line):
+        """
+        Dedents a line by the currently defined margin.
+        (The inverse of 'indent'.)
+        """
+        margin = self.margin
+        indent = self.indents[-1]
+        if not line.startswith(margin):
+            fail('Cannot dedent, line does not start with the previous margin:')
+        return line[indent:]
+
+
+class DSLParser:
+    def __init__(self, clinic):
+        self.clinic = clinic
+
+        self.directives = {}
+        for name in dir(self):
+            # functions that start with directive_ are added to directives
+            _, s, key = name.partition("directive_")
+            if s:
+                self.directives[key] = getattr(self, name)
+
+            # functions that start with at_ are too, with an @ in front
+            _, s, key = name.partition("at_")
+            if s:
+                self.directives['@' + key] = getattr(self, name)
+
+        self.reset()
+
+    def reset(self):
+        self.function = None
+        self.state = self.state_dsl_start
+        self.parameter_indent = None
+        self.keyword_only = False
+        self.group = 0
+        self.parameter_state = self.ps_start
+        self.indent = IndentStack()
+        self.kind = CALLABLE
+        self.coexist = False
+
+    def directive_module(self, name):
+        fields = name.split('.')
+        new = fields.pop()
+        module, cls = self.clinic._module_and_class(fields)
+        if cls:
+            fail("Can't nest a module inside a class!")
+        m = Module(name, module)
+        module.modules[name] = m
+        self.block.signatures.append(m)
+
+    def directive_class(self, name):
+        fields = name.split('.')
+        in_classes = False
+        parent = self
+        name = fields.pop()
+        so_far = []
+        module, cls = self.clinic._module_and_class(fields)
+
+        if not module:
+            fail("You must explicitly specify the module for the class.")
+
+        c = Class(name, module, cls)
+        module.classes[name] = c
+        if cls:
+            cls.classes[name] = c
+        self.block.signatures.append(c)
+
+    def at_classmethod(self):
+        assert self.kind is CALLABLE
+        self.kind = CLASS_METHOD
+
+    def at_staticmethod(self):
+        assert self.kind is CALLABLE
+        self.kind = STATIC_METHOD
+
+    def at_coexist(self):
+        assert self.coexist == False
+        self.coexist = True
+
+    def parse(self, block):
+        self.reset()
+        self.block = block
+        block_start = self.clinic.block_parser.line_number
+        lines = block.input.split('\n')
+        for line_number, line in enumerate(lines, self.clinic.block_parser.block_start_line_number):
+            if '\t' in line:
+                fail('Tab characters are illegal in the Clinic DSL.\n\t' + repr(line), line_number=block_start)
+            self.state(line)
+
+        self.next(self.state_terminal)
+        self.state(None)
+
+        block.output = self.clinic.language.render(block.signatures)
+
+    @staticmethod
+    def ignore_line(line):
+        # ignore comment-only lines
+        if line.lstrip().startswith('#'):
+            return True
+
+        # Ignore empty lines too
+        # (but not in docstring sections!)
+        if not line.strip():
+            return True
+
+        return False
+
+    @staticmethod
+    def calculate_indent(line):
+        return len(line) - len(line.strip())
+
+    def next(self, state, line=None):
+        # real_print(self.state.__name__, "->", state.__name__, ", line=", line)
+        self.state = state
+        if line is not None:
+            self.state(line)
+
+    def state_dsl_start(self, line):
+        # self.block = self.ClinicOutputBlock(self)
+        if self.ignore_line(line):
+            return
+        self.next(self.state_modulename_name, line)
+
+    def state_modulename_name(self, line):
+        # looking for declaration, which establishes the leftmost column
+        # line should be
+        #     modulename.fnname [as c_basename] [-> return annotation]
+        # square brackets denote optional syntax.
+        #
+        # (but we might find a directive first!)
+        #
+        # this line is permitted to start with whitespace.
+        # we'll call this number of spaces F (for "function").
+
+        if not line.strip():
+            return
+
+        self.indent.infer(line)
+
+        # is it a directive?
+        fields = shlex.split(line)
+        directive_name = fields[0]
+        directive = self.directives.get(directive_name, None)
+        if directive:
+            directive(*fields[1:])
+            return
+
+        line, _, returns = line.partition('->')
+
+        full_name, _, c_basename = line.partition(' as ')
+        full_name = full_name.strip()
+        c_basename = c_basename.strip() or None
+
+        if not is_legal_py_identifier(full_name):
+            fail("Illegal function name: {}".format(full_name))
+        if c_basename and not is_legal_c_identifier(c_basename):
+            fail("Illegal C basename: {}".format(c_basename))
+
+        if not returns:
+            return_converter = CReturnConverter()
+        else:
+            ast_input = "def x() -> {}: pass".format(returns)
+            module = None
+            try:
+                module = ast.parse(ast_input)
+            except SyntaxError:
+                pass
+            if not module:
+                fail("Badly-formed annotation for " + full_name + ": " + returns)
+            try:
+                name, legacy, kwargs = self.parse_converter(module.body[0].returns)
+                assert not legacy
+                if name not in return_converters:
+                    fail("Error: No available return converter called " + repr(name))
+                return_converter = return_converters[name](**kwargs)
+            except ValueError:
+                fail("Badly-formed annotation for " + full_name + ": " + returns)
+
+        fields = [x.strip() for x in full_name.split('.')]
+        function_name = fields.pop()
+        module, cls = self.clinic._module_and_class(fields)
+
+        if not module:
+            fail("Undefined module used in declaration of " + repr(full_name.strip()) + ".")
+        self.function = Function(name=function_name, full_name=full_name, module=module, cls=cls, c_basename=c_basename,
+                                 return_converter=return_converter, kind=self.kind, coexist=self.coexist)
+        self.block.signatures.append(self.function)
+        self.next(self.state_parameters_start)
+
+    # Now entering the parameters section.  The rules, formally stated:
+    #
+    #   * All lines must be indented with spaces only.
+    #   * The first line must be a parameter declaration.
+    #   * The first line must be indented.
+    #       * This first line establishes the indent for parameters.
+    #       * We'll call this number of spaces P (for "parameter").
+    #   * Thenceforth:
+    #       * Lines indented with P spaces specify a parameter.
+    #       * Lines indented with > P spaces are docstrings for the previous
+    #         parameter.
+    #           * We'll call this number of spaces D (for "docstring").
+    #           * All subsequent lines indented with >= D spaces are stored as
+    #             part of the per-parameter docstring.
+    #           * All lines will have the first D spaces of the indent stripped
+    #             before they are stored.
+    #           * It's illegal to have a line starting with a number of spaces X
+    #             such that P < X < D.
+    #       * A line with < P spaces is the first line of the function
+    #         docstring, which ends processing for parameters and per-parameter
+    #         docstrings.
+    #           * The first line of the function docstring must be at the same
+    #             indent as the function declaration.
+    #       * It's illegal to have any line in the parameters section starting
+    #         with X spaces such that F < X < P.  (As before, F is the indent
+    #         of the function declaration.)
+    #
+    ##############
+    #
+    # Also, currently Argument Clinic places the following restrictions on groups:
+    #   * Each group must contain at least one parameter.
+    #   * Each group may contain at most one group, which must be the furthest
+    #     thing in the group from the required parameters.  (The nested group
+    #     must be the first in the group when it's before the required
+    #     parameters, and the last thing in the group when after the required
+    #     parameters.)
+    #   * There may be at most one (top-level) group to the left or right of
+    #     the required parameters.
+    #   * You must specify a slash, and it must be after all parameters.
+    #     (In other words: either all parameters are positional-only,
+    #      or none are.)
+    #
+    #  Said another way:
+    #   * Each group must contain at least one parameter.
+    #   * All left square brackets before the required parameters must be
+    #     consecutive.  (You can't have a left square bracket followed
+    #     by a parameter, then another left square bracket.  You can't
+    #     have a left square bracket, a parameter, a right square bracket,
+    #     and then a left square bracket.)
+    #   * All right square brackets after the required parameters must be
+    #     consecutive.
+    #
+    # These rules are enforced with a single state variable:
+    # "parameter_state".  (Previously the code was a miasma of ifs and
+    # separate boolean state variables.)  The states are:
+    #
+    #  [ [ a, b, ] c, ] d, e, f, [ g, h, [ i ] ] /   <- line
+    # 01   2          3          4           5   6   <- state transitions
+    #
+    # 0: ps_start.  before we've seen anything.  legal transitions are to 1 or 3.
+    # 1: ps_left_square_before.  left square brackets before required parameters.
+    # 2: ps_group_before.  in a group, before required parameters.
+    # 3: ps_required.  required parameters.  (renumber left groups!)
+    # 4: ps_group_after.  in a group, after required parameters.
+    # 5: ps_right_square_after.  right square brackets after required parameters.
+    # 6: ps_seen_slash.  seen slash.
+    ps_start, ps_left_square_before, ps_group_before, ps_required, \
+    ps_group_after, ps_right_square_after, ps_seen_slash = range(7)
+
+    def state_parameters_start(self, line):
+        if self.ignore_line(line):
+            return
+
+        # if this line is not indented, we have no parameters
+        if not self.indent.infer(line):
+            return self.next(self.state_function_docstring, line)
+
+        return self.next(self.state_parameter, line)
+
+
+    def to_required(self):
+        """
+        Transition to the "required" parameter state.
+        """
+        if self.parameter_state != self.ps_required:
+            self.parameter_state = self.ps_required
+            for p in self.function.parameters.values():
+                p.group = -p.group
+
+    def state_parameter(self, line):
+        if self.ignore_line(line):
+            return
+
+        assert self.indent.depth == 2
+        indent = self.indent.infer(line)
+        if indent == -1:
+            # we outdented, must be to definition column
+            return self.next(self.state_function_docstring, line)
+
+        if indent == 1:
+            # we indented, must be to new parameter docstring column
+            return self.next(self.state_parameter_docstring_start, line)
+
+        line = line.lstrip()
+
+        if line in ('*', '/', '[', ']'):
+            self.parse_special_symbol(line)
+            return
+
+        if self.parameter_state in (self.ps_start, self.ps_required):
+            self.to_required()
+        elif self.parameter_state == self.ps_left_square_before:
+            self.parameter_state = self.ps_group_before
+        elif self.parameter_state == self.ps_group_before:
+            if not self.group:
+                self.to_required()
+        elif self.parameter_state == self.ps_group_after:
+            pass
+        else:
+            fail("Function " + self.function.name + " has an unsupported group configuration. (Unexpected state " + str(self.parameter_state) + ")")
+
+        ast_input = "def x({}): pass".format(line)
+        module = None
+        try:
+            module = ast.parse(ast_input)
+        except SyntaxError:
+            pass
+        if not module:
+            fail("Function " + self.function.name + " has an invalid parameter declaration:\n\t" + line)
+
+        function_args = module.body[0].args
+        parameter = function_args.args[0]
+
+        if function_args.defaults:
+            expr = function_args.defaults[0]
+            # mild hack: explicitly support NULL as a default value
+            if isinstance(expr, ast.Name) and expr.id == 'NULL':
+                value = NULL
+            else:
+                value = ast.literal_eval(expr)
+        else:
+            value = unspecified
+
+        parameter_name = parameter.arg
+        name, legacy, kwargs = self.parse_converter(parameter.annotation)
+        dict = legacy_converters if legacy else converters
+        legacy_str = "legacy " if legacy else ""
+        if name not in dict:
+            fail('{} is not a valid {}converter'.format(name, legacy_str))
+        converter = dict[name](parameter_name, self.function, value, **kwargs)
+
+        kind = inspect.Parameter.KEYWORD_ONLY if self.keyword_only else inspect.Parameter.POSITIONAL_OR_KEYWORD
+        p = Parameter(parameter_name, kind, function=self.function, converter=converter, default=value, group=self.group)
+        self.function.parameters[parameter_name] = p
+
+    def parse_converter(self, annotation):
+        if isinstance(annotation, ast.Str):
+            return annotation.s, True, {}
+
+        if isinstance(annotation, ast.Name):
+            return annotation.id, False, {}
+
+        assert isinstance(annotation, ast.Call)
+
+        name = annotation.func.id
+        kwargs = {node.arg: ast.literal_eval(node.value) for node in annotation.keywords}
+        return name, False, kwargs
+
+    def parse_special_symbol(self, symbol):
+        if self.parameter_state == self.ps_seen_slash:
+            fail("Function " + self.function.name + " specifies " + symbol + " after /, which is unsupported.")
+
+        if symbol == '*':
+            if self.keyword_only:
+                fail("Function " + self.function.name + " uses '*' more than once.")
+            self.keyword_only = True
+        elif symbol == '[':
+            if self.parameter_state in (self.ps_start, self.ps_left_square_before):
+                self.parameter_state = self.ps_left_square_before
+            elif self.parameter_state in (self.ps_required, self.ps_group_after):
+                self.parameter_state = self.ps_group_after
+            else:
+                fail("Function " + self.function.name + " has an unsupported group configuration. (Unexpected state " + str(self.parameter_state) + ")")
+            self.group += 1
+        elif symbol == ']':
+            if not self.group:
+                fail("Function " + self.function.name + " has a ] without a matching [.")
+            if not any(p.group == self.group for p in self.function.parameters.values()):
+                fail("Function " + self.function.name + " has an empty group.\nAll groups must contain at least one parameter.")
+            self.group -= 1
+            if self.parameter_state in (self.ps_left_square_before, self.ps_group_before):
+                self.parameter_state = self.ps_group_before
+            elif self.parameter_state in (self.ps_group_after, self.ps_right_square_after):
+                self.parameter_state = self.ps_right_square_after
+            else:
+                fail("Function " + self.function.name + " has an unsupported group configuration. (Unexpected state " + str(self.parameter_state) + ")")
+        elif symbol == '/':
+            # ps_required is allowed here, that allows positional-only without option groups
+            # to work (and have default values!)
+            if (self.parameter_state not in (self.ps_required, self.ps_right_square_after, self.ps_group_before)) or self.group:
+                fail("Function " + self.function.name + " has an unsupported group configuration. (Unexpected state " + str(self.parameter_state) + ")")
+            if self.keyword_only:
+                fail("Function " + self.function.name + " mixes keyword-only and positional-only parameters, which is unsupported.")
+            self.parameter_state = self.ps_seen_slash
+            # fixup preceeding parameters
+            for p in self.function.parameters.values():
+                if p.kind != inspect.Parameter.POSITIONAL_OR_KEYWORD:
+                    fail("Function " + self.function.name + " mixes keyword-only and positional-only parameters, which is unsupported.")
+                p.kind = inspect.Parameter.POSITIONAL_ONLY
+
+    def state_parameter_docstring_start(self, line):
+        self.parameter_docstring_indent = len(self.indent.margin)
+        assert self.indent.depth == 3
+        return self.next(self.state_parameter_docstring, line)
+
+    # every line of the docstring must start with at least F spaces,
+    # where F > P.
+    # these F spaces will be stripped.
+    def state_parameter_docstring(self, line):
+        stripped = line.strip()
+        if stripped.startswith('#'):
+            return
+
+        indent = self.indent.measure(line)
+        if indent < self.parameter_docstring_indent:
+            self.indent.infer(line)
+            assert self.indent.depth < 3
+            if self.indent.depth == 2:
+                # back to a parameter
+                return self.next(self.state_parameter, line)
+            assert self.indent.depth == 1
+            return self.next(self.state_function_docstring, line)
+
+        assert self.function.parameters
+        last_parameter = next(reversed(list(self.function.parameters.values())))
+
+        new_docstring = last_parameter.docstring
+
+        if new_docstring:
+            new_docstring += '\n'
+        if stripped:
+            new_docstring += self.indent.dedent(line)
+
+        last_parameter.docstring = new_docstring
+
+    # the final stanza of the DSL is the docstring.
+    def state_function_docstring(self, line):
+        if self.group:
+            fail("Function " + self.function.name + " has a ] without a matching [.")
+
+        stripped = line.strip()
+        if stripped.startswith('#'):
+            return
+
+        new_docstring = self.function.docstring
+        if new_docstring:
+            new_docstring += "\n"
+        if stripped:
+            line = self.indent.dedent(line).rstrip()
+        else:
+            line = ''
+        new_docstring += line
+        self.function.docstring = new_docstring
+
+    def format_docstring(self):
+        f = self.function
+
+        add, output = text_accumulator()
+        parameters = list(f.parameters.values())
+
+        ##
+        ## docstring first line
+        ##
+
+        add(f.full_name)
+        add('(')
+
+        # populate "right_bracket_count" field for every parameter
+        if parameters:
+            # for now, the only way Clinic supports positional-only parameters
+            # is if all of them are positional-only.
+            positional_only_parameters = [p.kind == inspect.Parameter.POSITIONAL_ONLY for p in parameters]
+            if parameters[0].kind == inspect.Parameter.POSITIONAL_ONLY:
+                assert all(positional_only_parameters)
+                for p in parameters:
+                    p.right_bracket_count = abs(p.group)
+            else:
+                # don't put any right brackets around non-positional-only parameters, ever.
+                for p in parameters:
+                    p.right_bracket_count = 0
+
+        right_bracket_count = 0
+
+        def fix_right_bracket_count(desired):
+            nonlocal right_bracket_count
+            s = ''
+            while right_bracket_count < desired:
+                s += '['
+                right_bracket_count += 1
+            while right_bracket_count > desired:
+                s += ']'
+                right_bracket_count -= 1
+            return s
+
+        added_star = False
+        add_comma = False
+
+        for p in parameters:
+            assert p.name
+
+            if p.is_keyword_only() and not added_star:
+                added_star = True
+                if add_comma:
+                    add(', ')
+                add('*')
+
+            a = [p.name]
+            if p.converter.is_optional():
+                a.append('=')
+                value = p.converter.default
+                a.append(p.converter.doc_default)
+            s = fix_right_bracket_count(p.right_bracket_count)
+            s += "".join(a)
+            if add_comma:
+                add(', ')
+            add(s)
+            add_comma = True
+
+        add(fix_right_bracket_count(0))
+        add(')')
+
+        if f.return_converter.doc_default:
+            add(' -> ')
+            add(f.return_converter.doc_default)
+
+        docstring_first_line = output()
+
+        # now fix up the places where the brackets look wrong
+        docstring_first_line = docstring_first_line.replace(', ]', ',] ')
+
+        # okay.  now we're officially building the
+        # "prototype" section.
+        add(docstring_first_line)
+
+        # create substitution text for {parameters}
+        for p in parameters:
+            if not p.docstring.strip():
+                continue
+            add('\n')
+            add("  ")
+            add(p.name)
+            add('\n')
+            add(textwrap.indent(rstrip_lines(p.docstring.rstrip()), "    "))
+        prototype = output()
+
+        ##
+        ## docstring body
+        ##
+
+        docstring = f.docstring.rstrip()
+        lines = [line.rstrip() for line in docstring.split('\n')]
+
+        # Enforce the summary line!
+        # The first line of a docstring should be a summary of the function.
+        # It should fit on one line (80 columns? 79 maybe?) and be a paragraph
+        # by itself.
+        #
+        # Argument Clinic enforces the following rule:
+        #  * either the docstring is empty,
+        #  * or it must have a summary line.
+        #
+        # Guido said Clinic should enforce this:
+        # http://mail.python.org/pipermail/python-dev/2013-June/127110.html
+
+        if len(lines) >= 2:
+            if lines[1]:
+                fail("Docstring for " + f.full_name + " does not have a summary line!\n" +
+                    "Every non-blank function docstring must start with\n" +
+                    "a single line summary followed by an empty line.")
+        elif len(lines) == 1:
+            # the docstring is only one line right now--the summary line.
+            # add an empty line after the summary line so we have space
+            # between it and the {prototype} we're about to add.
+            lines.append('')
+
+        prototype_marker_count = len(docstring.split('{prototype}')) - 1
+        if prototype_marker_count:
+            fail('You may not specify {prototype} in a docstring!')
+        # insert *after* the summary line
+        lines.insert(2, '{prototype}\n')
+
+        docstring = "\n".join(lines)
+
+        add(docstring)
+        docstring = output()
+
+        docstring = linear_format(docstring, prototype=prototype)
+        docstring = docstring.rstrip()
+
+        return docstring
+
+    def state_terminal(self, line):
+        """
+        Called when processing the block is done.
+        """
+        assert not line
+
+        if not self.function:
+            return
+
+        if self.keyword_only:
+            values = self.function.parameters.values()
+            if not values:
+                no_parameter_after_star = True
+            else:
+                last_parameter = next(reversed(list(values)))
+                no_parameter_after_star = last_parameter.kind != inspect.Parameter.KEYWORD_ONLY
+            if no_parameter_after_star:
+                fail("Function " + self.function.name + " specifies '*' without any parameters afterwards.")
+
+        # remove trailing whitespace from all parameter docstrings
+        for name, value in self.function.parameters.items():
+            if not value:
+                continue
+            value.docstring = value.docstring.rstrip()
+
+        self.function.docstring = self.format_docstring()
+
+
+# maps strings to callables.
+# the callable should return an object
+# that implements the clinic parser
+# interface (__init__ and parse).
+#
+# example parsers:
+#   "clinic", handles the Clinic DSL
+#   "python", handles running Python code
+#
+parsers = {'clinic' : DSLParser, 'python': PythonParser}
+
+
+clinic = None
+
+
+def main(argv):
+    import sys
+
+    if sys.version_info.major < 3 or sys.version_info.minor < 3:
+        sys.exit("Error: clinic.py requires Python 3.3 or greater.")
+
+    import argparse
+    cmdline = argparse.ArgumentParser()
+    cmdline.add_argument("-f", "--force", action='store_true')
+    cmdline.add_argument("-o", "--output", type=str)
+    cmdline.add_argument("--converters", action='store_true')
+    cmdline.add_argument("filename", type=str, nargs="*")
+    ns = cmdline.parse_args(argv)
+
+    if ns.converters:
+        if ns.filename:
+            print("Usage error: can't specify --converters and a filename at the same time.")
+            print()
+            cmdline.print_usage()
+            sys.exit(-1)
+        converters = []
+        return_converters = []
+        ignored = set("""
+            add_c_converter
+            add_c_return_converter
+            add_default_legacy_c_converter
+            add_legacy_c_converter
+            """.strip().split())
+        module = globals()
+        for name in module:
+            for suffix, ids in (
+                ("_return_converter", return_converters),
+                ("_converter", converters),
+            ):
+                if name in ignored:
+                    continue
+                if name.endswith(suffix):
+                    ids.append((name, name[:-len(suffix)]))
+                    break
+        print()
+
+        print("Legacy converters:")
+        legacy = sorted(legacy_converters)
+        print('    ' + ' '.join(c for c in legacy if c[0].isupper()))
+        print('    ' + ' '.join(c for c in legacy if c[0].islower()))
+        print()
+
+        for title, attribute, ids in (
+            ("Converters", 'converter_init', converters),
+            ("Return converters", 'return_converter_init', return_converters),
+        ):
+            print(title + ":")
+            longest = -1
+            for name, short_name in ids:
+                longest = max(longest, len(short_name))
+            for name, short_name in sorted(ids, key=lambda x: x[1].lower()):
+                cls = module[name]
+                callable = getattr(cls, attribute, None)
+                if not callable:
+                    continue
+                signature = inspect.signature(callable)
+                parameters = []
+                for parameter_name, parameter in signature.parameters.items():
+                    if parameter.kind == inspect.Parameter.KEYWORD_ONLY:
+                        if parameter.default != inspect.Parameter.empty:
+                            s = '{}={!r}'.format(parameter_name, parameter.default)
+                        else:
+                            s = parameter_name
+                        parameters.append(s)
+                print('    {}({})'.format(short_name, ', '.join(parameters)))
+                # add_comma = False
+                # for parameter_name, parameter in signature.parameters.items():
+                #     if parameter.kind == inspect.Parameter.KEYWORD_ONLY:
+                #         if add_comma:
+                #             parameters.append(', ')
+                #         else:
+                #             add_comma = True
+                #         s = parameter_name
+                #         if parameter.default != inspect.Parameter.empty:
+                #             s += '=' + repr(parameter.default)
+                #         parameters.append(s)
+                # parameters.append(')')
+
+                # print("   ", short_name + "".join(parameters))
+            print()
+        print("All converters also accept (doc_default=None, required=False).")
+        print("All return converters also accept (doc_default=None).")
+        sys.exit(0)
+
+    if not ns.filename:
+        cmdline.print_usage()
+        sys.exit(-1)
+
+    if ns.output and len(ns.filename) > 1:
+        print("Usage error: can't use -o with multiple filenames.")
+        print()
+        cmdline.print_usage()
+        sys.exit(-1)
+
+    for filename in ns.filename:
+        parse_file(filename, output=ns.output, verify=not ns.force)
+
+
+if __name__ == "__main__":
+    sys.exit(main(sys.argv[1:]))
diff --git a/Tools/clinic/clinic_test.py b/Tools/clinic/clinic_test.py
new file mode 100644
index 0000000..7baf380
--- /dev/null
+++ b/Tools/clinic/clinic_test.py
@@ -0,0 +1,713 @@
+#!/usr/bin/env python3
+#
+# Argument Clinic
+# Copyright 2012-2013 by Larry Hastings.
+# Licensed to the PSF under a contributor agreement.
+#
+
+import builtins
+import clinic
+from clinic import DSLParser
+import collections
+import inspect
+from test import support
+import unittest
+from unittest import TestCase
+
+class FakeConverter:
+    def __init__(self, name, args):
+        self.name = name
+        self.args = args
+
+
+class FakeConverterFactory:
+    def __init__(self, name):
+        self.name = name
+
+    def __call__(self, name, default, **kwargs):
+        return FakeConverter(self.name, kwargs)
+
+
+class FakeConvertersDict:
+    def __init__(self):
+        self.used_converters = {}
+
+    def get(self, name, default):
+        return self.used_converters.setdefault(name, FakeConverterFactory(name))
+
+class FakeClinic:
+    def __init__(self):
+        self.converters = FakeConvertersDict()
+        self.legacy_converters = FakeConvertersDict()
+        self.language = clinic.CLanguage()
+        self.filename = None
+        self.block_parser = clinic.BlockParser('', self.language)
+        self.modules = collections.OrderedDict()
+        clinic.clinic = self
+        self.name = "FakeClinic"
+
+    def is_directive(self, name):
+        return name == "module"
+
+    def directive(self, name, args):
+        self.called_directives[name] = args
+
+    _module_and_class = clinic.Clinic._module_and_class
+
+
+
+class ClinicGroupPermuterTest(TestCase):
+    def _test(self, l, m, r, output):
+        computed = clinic.permute_optional_groups(l, m, r)
+        self.assertEqual(output, computed)
+
+    def test_range(self):
+        self._test([['start']], ['stop'], [['step']],
+          (
+            ('stop',),
+            ('start', 'stop',),
+            ('start', 'stop', 'step',),
+          ))
+
+    def test_add_window(self):
+        self._test([['x', 'y']], ['ch'], [['attr']],
+          (
+            ('ch',),
+            ('ch', 'attr'),
+            ('x', 'y', 'ch',),
+            ('x', 'y', 'ch', 'attr'),
+          ))
+
+    def test_ludicrous(self):
+        self._test([['a1', 'a2', 'a3'], ['b1', 'b2']], ['c1'], [['d1', 'd2'], ['e1', 'e2', 'e3']],
+          (
+          ('c1',),
+          ('b1', 'b2', 'c1'),
+          ('b1', 'b2', 'c1', 'd1', 'd2'),
+          ('a1', 'a2', 'a3', 'b1', 'b2', 'c1'),
+          ('a1', 'a2', 'a3', 'b1', 'b2', 'c1', 'd1', 'd2'),
+          ('a1', 'a2', 'a3', 'b1', 'b2', 'c1', 'd1', 'd2', 'e1', 'e2', 'e3'),
+          ))
+
+    def test_right_only(self):
+        self._test([], [], [['a'],['b'],['c']],
+          (
+          (),
+          ('a',),
+          ('a', 'b'),
+          ('a', 'b', 'c')
+          ))
+
+    def test_have_left_options_but_required_is_empty(self):
+        def fn():
+            clinic.permute_optional_groups(['a'], [], [])
+        self.assertRaises(AssertionError, fn)
+
+
+class ClinicLinearFormatTest(TestCase):
+    def _test(self, input, output, **kwargs):
+        computed = clinic.linear_format(input, **kwargs)
+        self.assertEqual(output, computed)
+
+    def test_empty_strings(self):
+        self._test('', '')
+
+    def test_solo_newline(self):
+        self._test('\n', '\n')
+
+    def test_no_substitution(self):
+        self._test("""
+          abc
+          """, """
+          abc
+          """)
+
+    def test_empty_substitution(self):
+        self._test("""
+          abc
+          {name}
+          def
+          """, """
+          abc
+          def
+          """, name='')
+
+    def test_single_line_substitution(self):
+        self._test("""
+          abc
+          {name}
+          def
+          """, """
+          abc
+          GARGLE
+          def
+          """, name='GARGLE')
+
+    def test_multiline_substitution(self):
+        self._test("""
+          abc
+          {name}
+          def
+          """, """
+          abc
+          bingle
+          bungle
+
+          def
+          """, name='bingle\nbungle\n')
+
+class InertParser:
+    def __init__(self, clinic):
+        pass
+
+    def parse(self, block):
+        pass
+
+class CopyParser:
+    def __init__(self, clinic):
+        pass
+
+    def parse(self, block):
+        block.output = block.input
+
+
+class ClinicBlockParserTest(TestCase):
+    def _test(self, input, output):
+        language = clinic.CLanguage()
+
+        blocks = list(clinic.BlockParser(input, language))
+        writer = clinic.BlockPrinter(language)
+        for block in blocks:
+            writer.print_block(block)
+        output = writer.f.getvalue()
+        assert output == input, "output != input!\n\noutput " + repr(output) + "\n\n input " + repr(input)
+
+    def round_trip(self, input):
+        return self._test(input, input)
+
+    def test_round_trip_1(self):
+        self.round_trip("""
+    verbatim text here
+    lah dee dah
+""")
+    def test_round_trip_2(self):
+        self.round_trip("""
+    verbatim text here
+    lah dee dah
+/*[inert]
+abc
+[inert]*/
+def
+/*[inert checksum: 7b18d017f89f61cf17d47f92749ea6930a3f1deb]*/
+xyz
+""")
+
+    def _test_clinic(self, input, output):
+        language = clinic.CLanguage()
+        c = clinic.Clinic(language)
+        c.parsers['inert'] = InertParser(c)
+        c.parsers['copy'] = CopyParser(c)
+        computed = c.parse(input)
+        self.assertEqual(output, computed)
+
+    def test_clinic_1(self):
+        self._test_clinic("""
+    verbatim text here
+    lah dee dah
+/*[copy]
+def
+[copy]*/
+abc
+/*[copy checksum: 03cfd743661f07975fa2f1220c5194cbaff48451]*/
+xyz
+""", """
+    verbatim text here
+    lah dee dah
+/*[copy]
+def
+[copy]*/
+def
+/*[copy checksum: 7b18d017f89f61cf17d47f92749ea6930a3f1deb]*/
+xyz
+""")
+
+
+class ClinicParserTest(TestCase):
+    def test_trivial(self):
+        parser = DSLParser(FakeClinic())
+        block = clinic.Block("module os\nos.access")
+        parser.parse(block)
+        module, function = block.signatures
+        self.assertEqual("access", function.name)
+        self.assertEqual("os", module.name)
+
+    def test_ignore_line(self):
+        block = self.parse("#\nmodule os\nos.access")
+        module, function = block.signatures
+        self.assertEqual("access", function.name)
+        self.assertEqual("os", module.name)
+
+    def test_param(self):
+        function = self.parse_function("module os\nos.access\n   path: int")
+        self.assertEqual("access", function.name)
+        self.assertEqual(1, len(function.parameters))
+        p = function.parameters['path']
+        self.assertEqual('path', p.name)
+        self.assertIsInstance(p.converter, clinic.int_converter)
+
+    def test_param_default(self):
+        function = self.parse_function("module os\nos.access\n    follow_symlinks: bool = True")
+        p = function.parameters['follow_symlinks']
+        self.assertEqual(True, p.default)
+
+    def test_param_no_docstring(self):
+        function = self.parse_function("""
+module os
+os.access
+    follow_symlinks: bool = True
+    something_else: str""")
+        p = function.parameters['follow_symlinks']
+        self.assertEqual(2, len(function.parameters))
+        self.assertIsInstance(function.parameters['something_else'].converter, clinic.str_converter)
+
+    def disabled_test_converter_arguments(self):
+        function = self.parse_function("module os\nos.access\n    path: path_t(allow_fd=1)")
+        p = function.parameters['path']
+        self.assertEqual(1, p.converter.args['allow_fd'])
+
+    def test_param_docstring(self):
+        function = self.parse_function("""
+module os
+os.stat as os_stat_fn -> object(doc_default='stat_result')
+
+   path: str
+       Path to be examined""")
+        p = function.parameters['path']
+        self.assertEqual("Path to be examined", p.docstring)
+        self.assertEqual(function.return_converter.doc_default, 'stat_result')
+
+    def test_function_docstring(self):
+        function = self.parse_function("""
+module os
+os.stat as os_stat_fn
+
+   path: str
+       Path to be examined
+
+Perform a stat system call on the given path.""")
+        self.assertEqual("""
+Perform a stat system call on the given path.
+
+os.stat(path)
+  path
+    Path to be examined
+""".strip(), function.docstring)
+
+    def test_explicit_parameters_in_docstring(self):
+        function = self.parse_function("""
+module foo
+foo.bar
+  x: int
+     Documentation for x.
+  y: int
+
+This is the documentation for foo.
+
+Okay, we're done here.
+""")
+        self.assertEqual("""
+This is the documentation for foo.
+
+foo.bar(x, y)
+  x
+    Documentation for x.
+
+Okay, we're done here.
+""".strip(), function.docstring)
+
+    def test_parser_regression_special_character_in_parameter_column_of_docstring_first_line(self):
+        function = self.parse_function("""
+module os
+os.stat
+    path: str
+This/used to break Clinic!
+""")
+        self.assertEqual("os.stat(path)\n\nThis/used to break Clinic!", function.docstring)
+
+    def test_c_name(self):
+        function = self.parse_function("module os\nos.stat as os_stat_fn")
+        self.assertEqual("os_stat_fn", function.c_basename)
+
+    def test_return_converter(self):
+        function = self.parse_function("module os\nos.stat -> int")
+        self.assertIsInstance(function.return_converter, clinic.int_return_converter)
+
+    def test_star(self):
+        function = self.parse_function("module os\nos.access\n    *\n    follow_symlinks: bool = True")
+        p = function.parameters['follow_symlinks']
+        self.assertEqual(inspect.Parameter.KEYWORD_ONLY, p.kind)
+        self.assertEqual(0, p.group)
+
+    def test_group(self):
+        function = self.parse_function("module window\nwindow.border\n [\n ls : int\n ]\n /\n")
+        p = function.parameters['ls']
+        self.assertEqual(1, p.group)
+
+    def test_left_group(self):
+        function = self.parse_function("""
+module curses
+curses.window.addch
+   [
+   y: int
+     Y-coordinate.
+   x: int
+     X-coordinate.
+   ]
+   ch: char
+     Character to add.
+   [
+   attr: long
+     Attributes for the character.
+   ]
+   /
+""")
+        for name, group in (
+            ('y', -1), ('x', -1),
+            ('ch', 0),
+            ('attr', 1),
+            ):
+            p = function.parameters[name]
+            self.assertEqual(p.group, group)
+            self.assertEqual(p.kind, inspect.Parameter.POSITIONAL_ONLY)
+        self.assertEqual(function.docstring.strip(), """
+curses.window.addch([y, x,] ch, [attr])
+  y
+    Y-coordinate.
+  x
+    X-coordinate.
+  ch
+    Character to add.
+  attr
+    Attributes for the character.
+            """.strip())
+
+    def test_nested_groups(self):
+        function = self.parse_function("""
+module curses
+curses.window.imaginary
+   [
+   [
+   y1: int
+     Y-coordinate.
+   y2: int
+     Y-coordinate.
+   ]
+   x1: int
+     X-coordinate.
+   x2: int
+     X-coordinate.
+   ]
+   ch: char
+     Character to add.
+   [
+   attr1: long
+     Attributes for the character.
+   attr2: long
+     Attributes for the character.
+   attr3: long
+     Attributes for the character.
+   [
+   attr4: long
+     Attributes for the character.
+   attr5: long
+     Attributes for the character.
+   attr6: long
+     Attributes for the character.
+   ]
+   ]
+   /
+""")
+        for name, group in (
+            ('y1', -2), ('y2', -2),
+            ('x1', -1), ('x2', -1),
+            ('ch', 0),
+            ('attr1', 1), ('attr2', 1), ('attr3', 1),
+            ('attr4', 2), ('attr5', 2), ('attr6', 2),
+            ):
+            p = function.parameters[name]
+            self.assertEqual(p.group, group)
+            self.assertEqual(p.kind, inspect.Parameter.POSITIONAL_ONLY)
+
+        self.assertEqual(function.docstring.strip(), """
+curses.window.imaginary([[y1, y2,] x1, x2,] ch, [attr1, attr2, attr3, [attr4, attr5, attr6]])
+  y1
+    Y-coordinate.
+  y2
+    Y-coordinate.
+  x1
+    X-coordinate.
+  x2
+    X-coordinate.
+  ch
+    Character to add.
+  attr1
+    Attributes for the character.
+  attr2
+    Attributes for the character.
+  attr3
+    Attributes for the character.
+  attr4
+    Attributes for the character.
+  attr5
+    Attributes for the character.
+  attr6
+    Attributes for the character.
+                """.strip())
+
+    def parse_function_should_fail(self, s):
+        with support.captured_stdout() as stdout:
+            with self.assertRaises(SystemExit):
+                self.parse_function(s)
+        return stdout.getvalue()
+
+    def test_disallowed_grouping__two_top_groups_on_left(self):
+        s = self.parse_function_should_fail("""
+module foo
+foo.two_top_groups_on_left
+    [
+    group1 : int
+    ]
+    [
+    group2 : int
+    ]
+    param: int
+            """)
+        self.assertEqual(s,
+            ('Error on line 0:\n'
+            'Function two_top_groups_on_left has an unsupported group configuration. (Unexpected state 2)\n'))
+
+    def test_disallowed_grouping__two_top_groups_on_right(self):
+        self.parse_function_should_fail("""
+module foo
+foo.two_top_groups_on_right
+    param: int
+    [
+    group1 : int
+    ]
+    [
+    group2 : int
+    ]
+            """)
+
+    def test_disallowed_grouping__parameter_after_group_on_right(self):
+        self.parse_function_should_fail("""
+module foo
+foo.parameter_after_group_on_right
+    param: int
+    [
+    [
+    group1 : int
+    ]
+    group2 : int
+    ]
+            """)
+
+    def test_disallowed_grouping__group_after_parameter_on_left(self):
+        self.parse_function_should_fail("""
+module foo
+foo.group_after_parameter_on_left
+    [
+    group2 : int
+    [
+    group1 : int
+    ]
+    ]
+    param: int
+            """)
+
+    def test_disallowed_grouping__empty_group_on_left(self):
+        self.parse_function_should_fail("""
+module foo
+foo.empty_group
+    [
+    [
+    ]
+    group2 : int
+    ]
+    param: int
+            """)
+
+    def test_disallowed_grouping__empty_group_on_right(self):
+        self.parse_function_should_fail("""
+module foo
+foo.empty_group
+    param: int
+    [
+    [
+    ]
+    group2 : int
+    ]
+            """)
+
+    def test_no_parameters(self):
+        function = self.parse_function("""
+module foo
+foo.bar
+
+Docstring
+
+""")
+        self.assertEqual("Docstring\n\nfoo.bar()", function.docstring)
+        self.assertEqual(0, len(function.parameters))
+
+    def test_illegal_module_line(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar => int
+    /
+""")
+
+    def test_illegal_c_basename(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar as 935
+    /
+""")
+
+    def test_single_star(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar
+    *
+    *
+""")
+
+    def test_parameters_required_after_star_without_initial_parameters_or_docstring(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar
+    *
+""")
+
+    def test_parameters_required_after_star_without_initial_parameters_with_docstring(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar
+    *
+Docstring here.
+""")
+
+    def test_parameters_required_after_star_with_initial_parameters_without_docstring(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar
+    this: int
+    *
+""")
+
+    def test_parameters_required_after_star_with_initial_parameters_and_docstring(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar
+    this: int
+    *
+Docstring.
+""")
+
+    def test_single_slash(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar
+    /
+    /
+""")
+
+    def test_mix_star_and_slash(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar
+   x: int
+   y: int
+   *
+   z: int
+   /
+""")
+
+    def test_parameters_not_permitted_after_slash_for_now(self):
+        self.parse_function_should_fail("""
+module foo
+foo.bar
+    /
+    x: int
+""")
+
+    def test_function_not_at_column_0(self):
+        function = self.parse_function("""
+  module foo
+  foo.bar
+    x: int
+      Nested docstring here, goeth.
+    *
+    y: str
+  Not at column 0!
+""")
+        self.assertEqual("""
+Not at column 0!
+
+foo.bar(x, *, y)
+  x
+    Nested docstring here, goeth.
+""".strip(), function.docstring)
+
+    def test_parser_regression_special_character_in_parameter_column_of_docstring_first_line(self):
+        function = self.parse_function("""
+module os
+os.stat
+    path: str
+This/used to break Clinic!
+""")
+        self.assertEqual("This/used to break Clinic!\n\nos.stat(path)", function.docstring)
+
+    def test_directive(self):
+        c = FakeClinic()
+        parser = DSLParser(c)
+        parser.flag = False
+        parser.directives['setflag'] = lambda : setattr(parser, 'flag', True)
+        block = clinic.Block("setflag")
+        parser.parse(block)
+        self.assertTrue(parser.flag)
+
+    def test_legacy_converters(self):
+        block = self.parse('module os\nos.access\n   path: "s"')
+        module, function = block.signatures
+        self.assertIsInstance((function.parameters['path']).converter, clinic.str_converter)
+
+    def parse(self, text):
+        c = FakeClinic()
+        parser = DSLParser(c)
+        block = clinic.Block(text)
+        parser.parse(block)
+        return block
+
+    def parse_function(self, text):
+        block = self.parse(text)
+        s = block.signatures
+        assert len(s) == 2
+        assert isinstance(s[0], clinic.Module)
+        assert isinstance(s[1], clinic.Function)
+        return s[1]
+
+    def test_scaffolding(self):
+        # test repr on special values
+        self.assertEqual(repr(clinic.unspecified), '<Unspecified>')
+        self.assertEqual(repr(clinic.NULL), '<Null>')
+
+        # test that fail fails
+        with support.captured_stdout() as stdout:
+            with self.assertRaises(SystemExit):
+                clinic.fail('The igloos are melting!', filename='clown.txt', line_number=69)
+        self.assertEqual(stdout.getvalue(), 'Error in file "clown.txt" on line 69:\nThe igloos are melting!\n')
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/Tools/scripts/checkpip.py b/Tools/scripts/checkpip.py
new file mode 100644
index 0000000..835101e
--- /dev/null
+++ b/Tools/scripts/checkpip.py
@@ -0,0 +1,32 @@
+#/usr/bin/env python3
+"""
+Checks that the version of the projects bundled in ensurepip are the latest
+versions available.
+"""
+import ensurepip
+import json
+import urllib.request
+import sys
+
+
+def main():
+    outofdate = False
+
+    for project, version in ensurepip._PROJECTS:
+        data = json.loads(urllib.request.urlopen(
+            "https://pypi.python.org/pypi/{}/json".format(project),
+            cadefault=True,
+        ).read().decode("utf8"))
+        upstream_version = data["info"]["version"]
+
+        if version != upstream_version:
+            outofdate = True
+            print("The latest version of {} on PyPI is {}, but ensurepip "
+                  "has {}".format(project, upstream_version, version))
+
+    if outofdate:
+        sys.exit(1)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/unicode/gencodec.py b/Tools/unicode/gencodec.py
index f5a1af3..f4c7c03 100644
--- a/Tools/unicode/gencodec.py
+++ b/Tools/unicode/gencodec.py
@@ -290,27 +290,27 @@
 
 class Codec(codecs.Codec):
 
-    def encode(self,input,errors='strict'):
-        return codecs.charmap_encode(input,errors,encoding_%s)
+    def encode(self, input, errors='strict'):
+        return codecs.charmap_encode(input, errors, encoding_%s)
 
-    def decode(self,input,errors='strict'):
-        return codecs.charmap_decode(input,errors,decoding_%s)
+    def decode(self, input, errors='strict'):
+        return codecs.charmap_decode(input, errors, decoding_%s)
 ''' % (encodingname, name, suffix, suffix)]
     l.append('''\
 class IncrementalEncoder(codecs.IncrementalEncoder):
     def encode(self, input, final=False):
-        return codecs.charmap_encode(input,self.errors,encoding_%s)[0]
+        return codecs.charmap_encode(input, self.errors, encoding_%s)[0]
 
 class IncrementalDecoder(codecs.IncrementalDecoder):
     def decode(self, input, final=False):
-        return codecs.charmap_decode(input,self.errors,decoding_%s)[0]''' %
+        return codecs.charmap_decode(input, self.errors, decoding_%s)[0]''' %
         (suffix, suffix))
 
     l.append('''
-class StreamWriter(Codec,codecs.StreamWriter):
+class StreamWriter(Codec, codecs.StreamWriter):
     pass
 
-class StreamReader(Codec,codecs.StreamReader):
+class StreamReader(Codec, codecs.StreamReader):
     pass
 
 ### encodings module API
@@ -343,7 +343,7 @@
     if decoding_table_code:
         l.append('''
 ### Encoding table
-encoding_table=codecs.charmap_build(decoding_table)
+encoding_table = codecs.charmap_build(decoding_table)
 ''')
     else:
         l.append('''
diff --git a/Tools/unicode/makeunicodedata.py b/Tools/unicode/makeunicodedata.py
index ea43c0e..0942508 100644
--- a/Tools/unicode/makeunicodedata.py
+++ b/Tools/unicode/makeunicodedata.py
@@ -37,7 +37,7 @@
 VERSION = "3.2"
 
 # The Unicode Database
-UNIDATA_VERSION = "6.2.0"
+UNIDATA_VERSION = "6.3.0"
 UNICODE_DATA = "UnicodeData%s.txt"
 COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt"
 EASTASIAN_WIDTH = "EastAsianWidth%s.txt"
@@ -68,7 +68,7 @@
 
 BIDIRECTIONAL_NAMES = [ "", "L", "LRE", "LRO", "R", "AL", "RLE", "RLO",
     "PDF", "EN", "ES", "ET", "AN", "CS", "NSM", "BN", "B", "S", "WS",
-    "ON" ]
+    "ON", "LRI", "RLI", "FSI", "PDI" ]
 
 EASTASIANWIDTH_NAMES = [ "F", "H", "W", "Na", "A", "N" ]
 
diff --git a/Tools/unicode/python-mappings/CP273.TXT b/Tools/unicode/python-mappings/CP273.TXT
new file mode 100644
index 0000000..7bb5e18
--- /dev/null
+++ b/Tools/unicode/python-mappings/CP273.TXT
@@ -0,0 +1,258 @@
+0x00	0x0000	#NULL (NUL)
+0x01	0x0001	#START OF HEADING (SOH)
+0x02	0x0002	#START OF TEXT (STX)
+0x03	0x0003	#END OF TEXT (ETX)
+0x04	0x009C	#STRING TERMINATOR (ST)
+0x05	0x0009	#CHARACTER TABULATION (HT)
+0x06	0x0086	#START OF SELECTED AREA (SSA)
+0x07	0x007F	#DELETE (DEL)
+0x08	0x0097	#END OF GUARDED AREA (EPA)
+0x09	0x008D	#REVERSE LINE FEED (RI)
+0x0A	0x008E	#SINGLE-SHIFT TWO (SS2)
+0x0B	0x000B	#LINE TABULATION (VT)
+0x0C	0x000C	#FORM FEED (FF)
+0x0D	0x000D	#CARRIAGE RETURN (CR)
+0x0E	0x000E	#SHIFT OUT (SO)
+0x0F	0x000F	#SHIFT IN (SI)
+0x10	0x0010	#DATALINK ESCAPE (DLE)
+0x11	0x0011	#DEVICE CONTROL ONE (DC1)
+0x12	0x0012	#DEVICE CONTROL TWO (DC2)
+0x13	0x0013	#DEVICE CONTROL THREE (DC3)
+0x14	0x009D	#OPERATING SYSTEM COMMAND (OSC)
+0x15	0x0085	#NEXT LINE (NEL)
+0x16	0x0008	#BACKSPACE (BS)
+0x17	0x0087	#END OF SELECTED AREA (ESA)
+0x18	0x0018	#CANCEL (CAN)
+0x19	0x0019	#END OF MEDIUM (EM)
+0x1A	0x0092	#PRIVATE USE TWO (PU2)
+0x1B	0x008F	#SINGLE-SHIFT THREE (SS3)
+0x1C	0x001C	#FILE SEPARATOR (IS4)
+0x1D	0x001D	#GROUP SEPARATOR (IS3)
+0x1E	0x001E	#RECORD SEPARATOR (IS2)
+0x1F	0x001F	#UNIT SEPARATOR (IS1)
+0x20	0x0080	#PADDING CHARACTER (PAD)
+0x21	0x0081	#HIGH OCTET PRESET (HOP)
+0x22	0x0082	#BREAK PERMITTED HERE (BPH)
+0x23	0x0083	#NO BREAK HERE (NBH)
+0x24	0x0084	#INDEX (IND)
+0x25	0x000A	#LINE FEED (LF)
+0x26	0x0017	#END OF TRANSMISSION BLOCK (ETB)
+0x27	0x001B	#ESCAPE (ESC)
+0x28	0x0088	#CHARACTER TABULATION SET (HTS)
+0x29	0x0089	#CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
+0x2A	0x008A	#LINE TABULATION SET (VTS)
+0x2B	0x008B	#PARTIAL LINE FORWARD (PLD)
+0x2C	0x008C	#PARTIAL LINE BACKWARD (PLU)
+0x2D	0x0005	#ENQUIRY (ENQ)
+0x2E	0x0006	#ACKNOWLEDGE (ACK)
+0x2F	0x0007	#BELL (BEL)
+0x30	0x0090	#DEVICE CONTROL STRING (DCS)
+0x31	0x0091	#PRIVATE USE ONE (PU1)
+0x32	0x0016	#SYNCHRONOUS IDLE (SYN)
+0x33	0x0093	#SET TRANSMIT STATE (STS)
+0x34	0x0094	#CANCEL CHARACTER (CCH)
+0x35	0x0095	#MESSAGE WAITING (MW)
+0x36	0x0096	#START OF GUARDED AREA (SPA)
+0x37	0x0004	#END OF TRANSMISSION (EOT)
+0x38	0x0098	#START OF STRING (SOS)
+0x39	0x0099	#SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
+0x3A	0x009A	#SINGLE CHARACTER INTRODUCER (SCI)
+0x3B	0x009B	#CONTROL SEQUENCE INTRODUCER (CSI)
+0x3C	0x0014	#DEVICE CONTROL FOUR (DC4)
+0x3D	0x0015	#NEGATIVE ACKNOWLEDGE (NAK)
+0x3E	0x009E	#PRIVACY MESSAGE (PM)
+0x3F	0x001A	#SUBSTITUTE (SUB)
+0x40	0x0020	#SPACE
+0x41	0x00A0	#NO-BREAK SPACE
+0x42	0x00E2	#LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x43	0x007B	#LEFT CURLY BRACKET
+0x44	0x00E0	#LATIN SMALL LETTER A WITH GRAVE
+0x45	0x00E1	#LATIN SMALL LETTER A WITH ACUTE
+0x46	0x00E3	#LATIN SMALL LETTER A WITH TILDE
+0x47	0x00E5	#LATIN SMALL LETTER A WITH RING ABOVE
+0x48	0x00E7	#LATIN SMALL LETTER C WITH CEDILLA
+0x49	0x00F1	#LATIN SMALL LETTER N WITH TILDE
+0x4A	0x00C4	#LATIN CAPITAL LETTER A WITH DIAERESIS
+0x4B	0x002E	#FULL STOP
+0x4C	0x003C	#LESS-THAN SIGN
+0x4D	0x0028	#LEFT PARENTHESIS
+0x4E	0x002B	#PLUS SIGN
+0x4F	0x0021	#EXCLAMATION MARK
+0x50	0x0026	#AMPERSAND
+0x51	0x00E9	#LATIN SMALL LETTER E WITH ACUTE
+0x52	0x00EA	#LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x53	0x00EB	#LATIN SMALL LETTER E WITH DIAERESIS
+0x54	0x00E8	#LATIN SMALL LETTER E WITH GRAVE
+0x55	0x00ED	#LATIN SMALL LETTER I WITH ACUTE
+0x56	0x00EE	#LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x57	0x00EF	#LATIN SMALL LETTER I WITH DIAERESIS
+0x58	0x00EC	#LATIN SMALL LETTER I WITH GRAVE
+0x59	0x007E	#TILDE
+0x5A	0x00DC	#LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5B	0x0024	#DOLLAR SIGN
+0x5C	0x002A	#ASTERISK
+0x5D	0x0029	#RIGHT PARENTHESIS
+0x5E	0x003B	#SEMICOLON
+0x5F	0x005E	#CIRCUMFLEX ACCENT
+0x60	0x002D	#HYPHEN-MINUS
+0x61	0x002F	#SOLIDUS
+0x62	0x00C2	#LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0x63	0x005B	#LEFT SQUARE BRACKET
+0x64	0x00C0	#LATIN CAPITAL LETTER A WITH GRAVE
+0x65	0x00C1	#LATIN CAPITAL LETTER A WITH ACUTE
+0x66	0x00C3	#LATIN CAPITAL LETTER A WITH TILDE
+0x67	0x00C5	#LATIN CAPITAL LETTER A WITH RING ABOVE
+0x68	0x00C7	#LATIN CAPITAL LETTER C WITH CEDILLA
+0x69	0x00D1	#LATIN CAPITAL LETTER N WITH TILDE
+0x6A	0x00F6	#LATIN SMALL LETTER O WITH DIAERESIS
+0x6B	0x002C	#COMMA
+0x6C	0x0025	#PERCENT SIGN
+0x6D	0x005F	#LOW LINE
+0x6E	0x003E	#GREATER-THAN SIGN
+0x6F	0x003F	#QUESTION MARK
+0x70	0x00F8	#LATIN SMALL LETTER O WITH STROKE
+0x71	0x00C9	#LATIN CAPITAL LETTER E WITH ACUTE
+0x72	0x00CA	#LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0x73	0x00CB	#LATIN CAPITAL LETTER E WITH DIAERESIS
+0x74	0x00C8	#LATIN CAPITAL LETTER E WITH GRAVE
+0x75	0x00CD	#LATIN CAPITAL LETTER I WITH ACUTE
+0x76	0x00CE	#LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0x77	0x00CF	#LATIN CAPITAL LETTER I WITH DIAERESIS
+0x78	0x00CC	#LATIN CAPITAL LETTER I WITH GRAVE
+0x79	0x0060	#GRAVE ACCENT
+0x7A	0x003A	#COLON
+0x7B	0x0023	#NUMBER SIGN
+0x7C	0x00A7	#SECTION SIGN
+0x7D	0x0027	#APOSTROPHE
+0x7E	0x003D	#EQUALS SIGN
+0x7F	0x0022	#QUOTATION MARK
+0x80	0x00D8	#LATIN CAPITAL LETTER O WITH STROKE
+0x81	0x0061	#LATIN SMALL LETTER A
+0x82	0x0062	#LATIN SMALL LETTER B
+0x83	0x0063	#LATIN SMALL LETTER C
+0x84	0x0064	#LATIN SMALL LETTER D
+0x85	0x0065	#LATIN SMALL LETTER E
+0x86	0x0066	#LATIN SMALL LETTER F
+0x87	0x0067	#LATIN SMALL LETTER G
+0x88	0x0068	#LATIN SMALL LETTER H
+0x89	0x0069	#LATIN SMALL LETTER I
+0x8A	0x00AB	#LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0x8B	0x00BB	#RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0x8C	0x00F0	#LATIN SMALL LETTER ETH (Icelandic)
+0x8D	0x00FD	#LATIN SMALL LETTER Y WITH ACUTE
+0x8E	0x00FE	#LATIN SMALL LETTER THORN (Icelandic)
+0x8F	0x00B1	#PLUS-MINUS SIGN
+0x90	0x00B0	#DEGREE SIGN
+0x91	0x006A	#LATIN SMALL LETTER J
+0x92	0x006B	#LATIN SMALL LETTER K
+0x93	0x006C	#LATIN SMALL LETTER L
+0x94	0x006D	#LATIN SMALL LETTER M
+0x95	0x006E	#LATIN SMALL LETTER N
+0x96	0x006F	#LATIN SMALL LETTER O
+0x97	0x0070	#LATIN SMALL LETTER P
+0x98	0x0071	#LATIN SMALL LETTER Q
+0x99	0x0072	#LATIN SMALL LETTER R
+0x9A	0x00AA	#FEMININE ORDINAL INDICATOR
+0x9B	0x00BA	#MASCULINE ORDINAL INDICATOR
+0x9C	0x00E6	#LATIN SMALL LETTER AE
+0x9D	0x00B8	#CEDILLA
+0x9E	0x00C6	#LATIN CAPITAL LETTER AE
+0x9F	0x00A4	#CURRENCY SIGN
+0xA0	0x00B5	#MICRO SIGN
+0xA1	0x00DF	#LATIN SMALL LETTER SHARP S (German)
+0xA2	0x0073	#LATIN SMALL LETTER S
+0xA3	0x0074	#LATIN SMALL LETTER T
+0xA4	0x0075	#LATIN SMALL LETTER U
+0xA5	0x0076	#LATIN SMALL LETTER V
+0xA6	0x0077	#LATIN SMALL LETTER W
+0xA7	0x0078	#LATIN SMALL LETTER X
+0xA8	0x0079	#LATIN SMALL LETTER Y
+0xA9	0x007A	#LATIN SMALL LETTER Z
+0xAA	0x00A1	#INVERTED EXCLAMATION MARK
+0xAB	0x00BF	#INVERTED QUESTION MARK
+0xAC	0x00D0	#LATIN CAPITAL LETTER ETH (Icelandic)
+0xAD	0x00DD	#LATIN CAPITAL LETTER Y WITH ACUTE
+0xAE	0x00DE	#LATIN CAPITAL LETTER THORN (Icelandic)
+0xAF	0x00AE	#REGISTERED SIGN
+0xB0	0x00A2	#CENT SIGN
+0xB1	0x00A3	#POUND SIGN
+0xB2	0x00A5	#YEN SIGN
+0xB3	0x00B7	#MIDDLE DOT
+0xB4	0x00A9	#COPYRIGHT SIGN
+0xB5	0x0040	#COMMERCIAL AT
+0xB6	0x00B6	#PILCROW SIGN
+0xB7	0x00BC	#VULGAR FRACTION ONE QUARTER
+0xB8	0x00BD	#VULGAR FRACTION ONE HALF
+0xB9	0x00BE	#VULGAR FRACTION THREE QUARTERS
+0xBA	0x00AC	#NOT SIGN
+0xBB	0x007C	#VERTICAL LINE
+0xBC	0x203E	#OVERLINE
+0xBD	0x00A8	#DIAERESIS
+0xBE	0x00B4	#ACUTE ACCENT
+0xBF	0x00D7	#MULTIPLICATION SIGN
+0xC0	0x00E4	#LATIN SMALL LETTER A WITH DIAERESIS
+0xC1	0x0041	#LATIN CAPITAL LETTER A
+0xC2	0x0042	#LATIN CAPITAL LETTER B
+0xC3	0x0043	#LATIN CAPITAL LETTER C
+0xC4	0x0044	#LATIN CAPITAL LETTER D
+0xC5	0x0045	#LATIN CAPITAL LETTER E
+0xC6	0x0046	#LATIN CAPITAL LETTER F
+0xC7	0x0047	#LATIN CAPITAL LETTER G
+0xC8	0x0048	#LATIN CAPITAL LETTER H
+0xC9	0x0049	#LATIN CAPITAL LETTER I
+0xCA	0x00AD	#SOFT HYPHEN
+0xCB	0x00F4	#LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xCC	0x00A6	#BROKEN BAR
+0xCD	0x00F2	#LATIN SMALL LETTER O WITH GRAVE
+0xCE	0x00F3	#LATIN SMALL LETTER O WITH ACUTE
+0xCF	0x00F5	#LATIN SMALL LETTER O WITH TILDE
+0xD0	0x00FC	#LATIN SMALL LETTER U WITH DIAERESIS
+0xD1	0x004A	#LATIN CAPITAL LETTER J
+0xD2	0x004B	#LATIN CAPITAL LETTER K
+0xD3	0x004C	#LATIN CAPITAL LETTER L
+0xD4	0x004D	#LATIN CAPITAL LETTER M
+0xD5	0x004E	#LATIN CAPITAL LETTER N
+0xD6	0x004F	#LATIN CAPITAL LETTER O
+0xD7	0x0050	#LATIN CAPITAL LETTER P
+0xD8	0x0051	#LATIN CAPITAL LETTER Q
+0xD9	0x0052	#LATIN CAPITAL LETTER R
+0xDA	0x00B9	#SUPERSCRIPT ONE
+0xDB	0x00FB	#LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xDC	0x007D	#RIGHT CURLY BRACKET
+0xDD	0x00F9	#LATIN SMALL LETTER U WITH GRAVE
+0xDE	0x00FA	#LATIN SMALL LETTER U WITH ACUTE
+0xDF	0x00FF	#LATIN SMALL LETTER Y WITH DIAERESIS
+0xE0	0x00D6	#LATIN CAPITAL LETTER O WITH DIAERESIS
+0xE1	0x00F7	#DIVISION SIGN
+0xE2	0x0053	#LATIN CAPITAL LETTER S
+0xE3	0x0054	#LATIN CAPITAL LETTER T
+0xE4	0x0055	#LATIN CAPITAL LETTER U
+0xE5	0x0056	#LATIN CAPITAL LETTER V
+0xE6	0x0057	#LATIN CAPITAL LETTER W
+0xE7	0x0058	#LATIN CAPITAL LETTER X
+0xE8	0x0059	#LATIN CAPITAL LETTER Y
+0xE9	0x005A	#LATIN CAPITAL LETTER Z
+0xEA	0x00B2	#SUPERSCRIPT TWO
+0xEB	0x00D4	#LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xEC	0x005C	#REVERSE SOLIDUS
+0xED	0x00D2	#LATIN CAPITAL LETTER O WITH GRAVE
+0xEE	0x00D3	#LATIN CAPITAL LETTER O WITH ACUTE
+0xEF	0x00D5	#LATIN CAPITAL LETTER O WITH TILDE
+0xF0	0x0030	#DIGIT ZERO
+0xF1	0x0031	#DIGIT ONE
+0xF2	0x0032	#DIGIT TWO
+0xF3	0x0033	#DIGIT THREE
+0xF4	0x0034	#DIGIT FOUR
+0xF5	0x0035	#DIGIT FIVE
+0xF6	0x0036	#DIGIT SIX
+0xF7	0x0037	#DIGIT SEVEN
+0xF8	0x0038	#DIGIT EIGHT
+0xF9	0x0039	#DIGIT NINE
+0xFA	0x00B3	#SUPERSCRIPT THREE
+0xFB	0x00DB	#LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xFC	0x005D	#RIGHT SQUARE BRACKET
+0xFD	0x00D9	#LATIN CAPITAL LETTER U WITH GRAVE
+0xFE	0x00DA	#LATIN CAPITAL LETTER U WITH ACUTE
+0xFF	0x009F	#APPLICATION PROGRAM COMMAND (APC)
+
+ 	  	 
diff --git a/configure b/configure
index 7d00e4d..fb1404f 100755
--- a/configure
+++ b/configure
@@ -1455,7 +1455,7 @@
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-universal-archs=ARCH
                           select architectures for universal build ("32-bit",
-                          "64-bit", "3-way", "intel" or "all")
+                          "64-bit", "3-way", "intel", "intel-32", or "all")
   --with-framework-name=FRAMEWORK
                           specify an alternate name of the framework built
                           with --enable-framework
@@ -3037,7 +3037,7 @@
 		# Locate the best usable SDK, see Mac/README.txt for more
 		# information
 		enableval="`/usr/bin/xcodebuild -version -sdk macosx Path 2>/dev/null`"
-		if test -z "${enableval}"
+		if ! ( echo $enableval | grep -E '\.sdk' 1>/dev/null )
 		then
 			enableval=/Developer/SDKs/MacOSX10.4u.sdk
 			if test ! -d "${enableval}"
@@ -3080,6 +3080,7 @@
 
 
 
+ARCH_RUN_32BIT=""
 
 # For backward compatibility reasons we prefer to select '32-bit' if available,
 # otherwise use 'intel'
@@ -3088,7 +3089,7 @@
 then
 	if test -n "${UNIVERSALSDK}"
 	then
-		if test -z "`/usr/bin/file "${UNIVERSALSDK}/usr/lib/libSystem.dylib" | grep ppc`"
+		if test -z "`/usr/bin/file -L "${UNIVERSALSDK}/usr/lib/libSystem.dylib" | grep ppc`"
 		then
 			UNIVERSAL_ARCHS="intel"
 		fi
@@ -3102,19 +3103,18 @@
 # Check whether --with-universal-archs was given.
 if test "${with_universal_archs+set}" = set; then :
   withval=$with_universal_archs;
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5
-$as_echo "$withval" >&6; }
 	UNIVERSAL_ARCHS="$withval"
 
-else
-
- 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSAL_ARCHS}" >&5
-$as_echo "${UNIVERSAL_ARCHS}" >&6; }
-
 fi
 
-
-
+if test -n "${UNIVERSALSDK}"
+then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${UNIVERSAL_ARCHS}" >&5
+$as_echo "${UNIVERSAL_ARCHS}" >&6; }
+else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
 
 # Check whether --with-framework-name was given.
@@ -6441,113 +6441,124 @@
 	SCO_SV*)
 	    BASECFLAGS="$BASECFLAGS -m486 -DSCO5"
 	    ;;
-	# is there any other compiler on Darwin besides gcc?
-	Darwin*)
-	    # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd
-	    # used to be here, but non-Apple gcc doesn't accept them.
-            if test "${CC}" = gcc
-	    then
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5
+
+    # is there any other compiler on Darwin besides gcc?
+    Darwin*)
+        # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd
+        # used to be here, but non-Apple gcc doesn't accept them.
+        if test "${CC}" = gcc
+        then
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5
 $as_echo_n "checking which compiler should be used... " >&6; }
-		case "${UNIVERSALSDK}" in
-		*/MacOSX10.4u.sdk)
-			# Build using 10.4 SDK, force usage of gcc when the
-			# compiler is gcc, otherwise the user will get very
-			# confusing error messages when building on OSX 10.6
-			CC=gcc-4.0
-			CPP=cpp-4.0
-			;;
-		esac
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+            case "${UNIVERSALSDK}" in
+            */MacOSX10.4u.sdk)
+                # Build using 10.4 SDK, force usage of gcc when the
+                # compiler is gcc, otherwise the user will get very
+                # confusing error messages when building on OSX 10.6
+                CC=gcc-4.0
+                CPP=cpp-4.0
+                ;;
+            esac
+            { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
-	    fi
+        fi
 
+        if test "${enable_universalsdk}"
+        then
+            case "$UNIVERSAL_ARCHS" in
+            32-bit)
+               UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            64-bit)
+               UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT="true"
+               ;;
+            all)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+               ;;
+            intel)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386"
+               ;;
+            intel-32)
+               UNIVERSAL_ARCH_FLAGS="-arch i386"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            3-way)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+               ;;
+            *)
+               as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5
+               ;;
+            esac
 
-	    if test "${enable_universalsdk}"; then
-		UNIVERSAL_ARCH_FLAGS=""
-	        if test "$UNIVERSAL_ARCHS" = "32-bit" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
-		   ARCH_RUN_32BIT=""
-		   LIPO_32BIT_FLAGS=""
-	         elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
-		   LIPO_32BIT_FLAGS=""
-		   ARCH_RUN_32BIT="true"
+            CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}"
+            LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}"
+            if test "${UNIVERSALSDK}" != "/"
+            then
+                CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}"
+            fi
+        fi
 
-	         elif test "$UNIVERSAL_ARCHS" = "all" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+        # Calculate an appropriate deployment target for this build:
+        # The deployment target value is used explicitly to enable certain
+        # features are enabled (such as builtin libedit support for readline)
+        # through the use of Apple's Availabiliy Macros and is used as a
+        # component of the string returned by distutils.get_platform().
+        #
+        # Use the value from:
+        # 1. the MACOSX_DEPLOYMENT_TARGET environment variable if specified
+        # 2. the operating system version of the build machine if >= 10.6
+        # 3. If running on OS X 10.3 through 10.5, use the legacy tests
+        #       below to pick either 10.3, 10.4, or 10.5 as the target.
+        # 4. If we are running on OS X 10.2 or earlier, good luck!
 
-	         elif test "$UNIVERSAL_ARCHS" = "intel" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking which MACOSX_DEPLOYMENT_TARGET to use" >&5
+$as_echo_n "checking which MACOSX_DEPLOYMENT_TARGET to use... " >&6; }
+        cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'`
+        if test ${cur_target} '>' 10.2 && \
+           test ${cur_target} '<' 10.6
+        then
+            cur_target=10.3
+            if test ${enable_universalsdk}
+            then
+                case "$UNIVERSAL_ARCHS" in
+                all|3-way|intel|64-bit)
+                    # These configurations were first supported in 10.5
+                    cur_target='10.5'
+                    ;;
+                esac
+            else
+                if test `/usr/bin/arch` = "i386"
+                then
+                    # 10.4 was the first release to support Intel archs
+                    cur_target="10.4"
+                fi
+            fi
+        fi
+        CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
 
-	         elif test "$UNIVERSAL_ARCHS" = "3-way" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+        # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the
+        # environment with a value that is the same as what we'll use
+        # in the Makefile to ensure that we'll get the same compiler
+        # environment during configure and build time.
+        MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET"
+        export MACOSX_DEPLOYMENT_TARGET
+        EXPORT_MACOSX_DEPLOYMENT_TARGET=''
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MACOSX_DEPLOYMENT_TARGET" >&5
+$as_echo "$MACOSX_DEPLOYMENT_TARGET" >&6; }
 
-		 else
-	           as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5
-
-		 fi
-
-
-		CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}"
-		if test "${UNIVERSALSDK}" != "/"
-		then
-			CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}"
-			LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}"
-			CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}"
-		fi
-	    fi
-
-	    # Calculate the right deployment target for this build.
-	    #
-	    cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'`
-	    if test ${cur_target} '>' 10.2 && \
-	       test ${cur_target} '<' 10.6
-	    then
-		    cur_target=10.3
-		    if test ${enable_universalsdk}; then
-			    if test "${UNIVERSAL_ARCHS}" = "all"; then
-				    # Ensure that the default platform for a
-				    # 4-way universal build is OSX 10.5,
-				    # that's the first OS release where
-				    # 4-way builds make sense.
-				    cur_target='10.5'
-
-			    elif test "${UNIVERSAL_ARCHS}" = "3-way"; then
-				    cur_target='10.5'
-
-			    elif test "${UNIVERSAL_ARCHS}" = "intel"; then
-				    cur_target='10.5'
-
-			    elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then
-				    cur_target='10.5'
-			    fi
-		    else
-			    if test `/usr/bin/arch` = "i386"; then
-				    # On Intel macs default to a deployment
-				    # target of 10.4, that's the first OSX
-				    # release with Intel support.
-				    cur_target="10.4"
-			    fi
-		    fi
-	    fi
-	    CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
-
-	    # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the
-	    # environment with a value that is the same as what we'll use
-	    # in the Makefile to ensure that we'll get the same compiler
-	    # environment during configure and build time.
-	    MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET"
-	    export MACOSX_DEPLOYMENT_TARGET
-	    EXPORT_MACOSX_DEPLOYMENT_TARGET=''
-
-	    ;;
+        # end of Darwin* tests
+        ;;
     esac
     ;;
 
@@ -8285,7 +8296,6 @@
 esac
 
 
-ARCH_RUN_32BIT=""
 
 case $ac_sys_system/$ac_sys_release in
   Darwin/[01567]\..*)
@@ -8357,14 +8367,12 @@
     		;;
     	esac
 
-	#ARCH_RUN_32BIT="true"
     fi
 
     LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only ${MACOSX_DEFAULT_ARCH}"
     LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
     LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';;
 esac
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-framework" >&5
 $as_echo_n "checking for --enable-framework... " >&6; }
 if test "$enable_framework"
@@ -8492,9 +8500,6 @@
 
 		if test ${MACOSX_DEPLOYMENT_TARGET} '>' 10.2
 		then
-			if test "${enable_universalsdk}"; then
-				LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}"
-			fi
 			LDSHARED='$(CC) -bundle -undefined dynamic_lookup'
 			LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup'
 			BLDSHARED="$LDSHARED"
@@ -10596,6 +10601,35 @@
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for prlimit" >&5
+$as_echo_n "checking for prlimit... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/time.h>
+#include <sys/resource.h>
+
+int
+main ()
+{
+void *x=prlimit
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_PRLIMIT 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 # On some systems (eg. FreeBSD 5), we would find a definition of the
 # functions ctermid_r, setgroups in the library, but no prototype
 # (e.g. because we use _XOPEN_SOURCE). See whether we can take their
diff --git a/configure.ac b/configure.ac
index c63e34b..d814581 100644
--- a/configure.ac
+++ b/configure.ac
@@ -152,7 +152,7 @@
 		# Locate the best usable SDK, see Mac/README.txt for more
 		# information
 		enableval="`/usr/bin/xcodebuild -version -sdk macosx Path 2>/dev/null`"
-		if test -z "${enableval}"
+		if ! ( echo $enableval | grep -E '\.sdk' 1>/dev/null )
 		then
 			enableval=/Developer/SDKs/MacOSX10.4u.sdk
 			if test ! -d "${enableval}"
@@ -189,6 +189,7 @@
 AC_SUBST(UNIVERSALSDK)
 
 AC_SUBST(ARCH_RUN_32BIT)
+ARCH_RUN_32BIT=""
 
 # For backward compatibility reasons we prefer to select '32-bit' if available,
 # otherwise use 'intel'
@@ -197,7 +198,7 @@
 then
 	if test -n "${UNIVERSALSDK}"
 	then
-		if test -z "`/usr/bin/file "${UNIVERSALSDK}/usr/lib/libSystem.dylib" | grep ppc`"
+		if test -z "`/usr/bin/file -L "${UNIVERSALSDK}/usr/lib/libSystem.dylib" | grep ppc`"
 		then
 			UNIVERSAL_ARCHS="intel"
 		fi
@@ -207,16 +208,17 @@
 AC_SUBST(LIPO_32BIT_FLAGS)
 AC_MSG_CHECKING(for --with-universal-archs)
 AC_ARG_WITH(universal-archs,
-    AS_HELP_STRING([--with-universal-archs=ARCH], [select architectures for universal build ("32-bit", "64-bit", "3-way", "intel" or "all")]),
+    AS_HELP_STRING([--with-universal-archs=ARCH], [select architectures for universal build ("32-bit", "64-bit", "3-way", "intel", "intel-32", or "all")]),
 [
-	AC_MSG_RESULT($withval)
 	UNIVERSAL_ARCHS="$withval"
 ],
-[
- 	AC_MSG_RESULT(${UNIVERSAL_ARCHS})
-])
-
-
+[])
+if test -n "${UNIVERSALSDK}"
+then
+	AC_MSG_RESULT(${UNIVERSAL_ARCHS})
+else
+	AC_MSG_RESULT(no)
+fi
 
 AC_ARG_WITH(framework-name,
               AS_HELP_STRING([--with-framework-name=FRAMEWORK],
@@ -1219,111 +1221,120 @@
 	SCO_SV*)
 	    BASECFLAGS="$BASECFLAGS -m486 -DSCO5"
 	    ;;
-	# is there any other compiler on Darwin besides gcc?
-	Darwin*)
-	    # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd
-	    # used to be here, but non-Apple gcc doesn't accept them.
-            if test "${CC}" = gcc
-	    then
-		AC_MSG_CHECKING(which compiler should be used)
-		case "${UNIVERSALSDK}" in
-		*/MacOSX10.4u.sdk)
-			# Build using 10.4 SDK, force usage of gcc when the 
-			# compiler is gcc, otherwise the user will get very
-			# confusing error messages when building on OSX 10.6
-			CC=gcc-4.0
-			CPP=cpp-4.0
-			;;
-		esac
-		AC_MSG_RESULT($CC)
-	    fi
 
+    # is there any other compiler on Darwin besides gcc?
+    Darwin*)
+        # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd
+        # used to be here, but non-Apple gcc doesn't accept them.
+        if test "${CC}" = gcc
+        then
+            AC_MSG_CHECKING(which compiler should be used)
+            case "${UNIVERSALSDK}" in
+            */MacOSX10.4u.sdk)
+                # Build using 10.4 SDK, force usage of gcc when the
+                # compiler is gcc, otherwise the user will get very
+                # confusing error messages when building on OSX 10.6
+                CC=gcc-4.0
+                CPP=cpp-4.0
+                ;;
+            esac
+            AC_MSG_RESULT($CC)
+        fi
 
-	    if test "${enable_universalsdk}"; then
-		UNIVERSAL_ARCH_FLAGS=""
-	        if test "$UNIVERSAL_ARCHS" = "32-bit" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
-		   ARCH_RUN_32BIT=""
-		   LIPO_32BIT_FLAGS=""
-	         elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
-		   LIPO_32BIT_FLAGS=""
-		   ARCH_RUN_32BIT="true"
+        if test "${enable_universalsdk}"
+        then
+            case "$UNIVERSAL_ARCHS" in
+            32-bit)
+               UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            64-bit)
+               UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT="true"
+               ;;
+            all)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+               ;;
+            intel)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386"
+               ;;
+            intel-32)
+               UNIVERSAL_ARCH_FLAGS="-arch i386"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT=""
+               ;;
+            3-way)
+               UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
+               LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
+               ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+               ;;
+            *)
+               AC_MSG_ERROR([proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way])
+               ;;
+            esac
 
-	         elif test "$UNIVERSAL_ARCHS" = "all" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+            CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}"
+            LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}"
+            if test "${UNIVERSALSDK}" != "/"
+            then
+                CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}"
+            fi
+        fi
 
-	         elif test "$UNIVERSAL_ARCHS" = "intel" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386"
+        # Calculate an appropriate deployment target for this build:
+        # The deployment target value is used explicitly to enable certain
+        # features are enabled (such as builtin libedit support for readline)
+        # through the use of Apple's Availabiliy Macros and is used as a
+        # component of the string returned by distutils.get_platform().
+        #
+        # Use the value from:
+        # 1. the MACOSX_DEPLOYMENT_TARGET environment variable if specified
+        # 2. the operating system version of the build machine if >= 10.6
+        # 3. If running on OS X 10.3 through 10.5, use the legacy tests
+        #       below to pick either 10.3, 10.4, or 10.5 as the target.
+        # 4. If we are running on OS X 10.2 or earlier, good luck!
 
-	         elif test "$UNIVERSAL_ARCHS" = "3-way" ; then
-		   UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
-		   LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
-		   ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
+        AC_MSG_CHECKING(which MACOSX_DEPLOYMENT_TARGET to use)
+        cur_target=`sw_vers -productVersion | sed 's/\(10\.[[0-9]]*\).*/\1/'`
+        if test ${cur_target} '>' 10.2 && \
+           test ${cur_target} '<' 10.6
+        then
+            cur_target=10.3
+            if test ${enable_universalsdk}
+            then
+                case "$UNIVERSAL_ARCHS" in
+                all|3-way|intel|64-bit)
+                    # These configurations were first supported in 10.5
+                    cur_target='10.5'
+                    ;;
+                esac
+            else
+                if test `/usr/bin/arch` = "i386"
+                then
+                    # 10.4 was the first release to support Intel archs
+                    cur_target="10.4"
+                fi
+            fi
+        fi
+        CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
 
-		 else
-	           AC_MSG_ERROR([proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way])
+        # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the
+        # environment with a value that is the same as what we'll use
+        # in the Makefile to ensure that we'll get the same compiler
+        # environment during configure and build time.
+        MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET"
+        export MACOSX_DEPLOYMENT_TARGET
+        EXPORT_MACOSX_DEPLOYMENT_TARGET=''
+        AC_MSG_RESULT($MACOSX_DEPLOYMENT_TARGET)
 
-		 fi
-
-
-		CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}"
-		if test "${UNIVERSALSDK}" != "/"
-		then
-			CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}"
-			LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}"
-			CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}"
-		fi
-	    fi
-
-	    # Calculate the right deployment target for this build.
-	    #
-	    cur_target=`sw_vers -productVersion | sed 's/\(10\.[[0-9]]*\).*/\1/'`
-	    if test ${cur_target} '>' 10.2 && \
-	       test ${cur_target} '<' 10.6
-	    then
-		    cur_target=10.3
-		    if test ${enable_universalsdk}; then
-			    if test "${UNIVERSAL_ARCHS}" = "all"; then
-				    # Ensure that the default platform for a 
-				    # 4-way universal build is OSX 10.5, 
-				    # that's the first OS release where 
-				    # 4-way builds make sense.
-				    cur_target='10.5'
-
-			    elif test "${UNIVERSAL_ARCHS}" = "3-way"; then
-				    cur_target='10.5'
-
-			    elif test "${UNIVERSAL_ARCHS}" = "intel"; then
-				    cur_target='10.5'
-
-			    elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then
-				    cur_target='10.5'
-			    fi
-		    else
-			    if test `/usr/bin/arch` = "i386"; then
-				    # On Intel macs default to a deployment
-				    # target of 10.4, that's the first OSX
-				    # release with Intel support.
-				    cur_target="10.4"
-			    fi
-		    fi
-	    fi
-	    CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
-	    
-	    # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the 
-	    # environment with a value that is the same as what we'll use
-	    # in the Makefile to ensure that we'll get the same compiler
-	    # environment during configure and build time.
-	    MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET"
-	    export MACOSX_DEPLOYMENT_TARGET
-	    EXPORT_MACOSX_DEPLOYMENT_TARGET=''
-
-	    ;;
+        # end of Darwin* tests
+        ;;
     esac
     ;;
 
@@ -1804,7 +1815,6 @@
 esac
 
 
-ARCH_RUN_32BIT=""
 AC_SUBST(LIBTOOL_CRUFT)
 case $ac_sys_system/$ac_sys_release in
   Darwin/@<:@01567@:>@\..*) 
@@ -1861,14 +1871,12 @@
     		;;
     	esac
 
-	#ARCH_RUN_32BIT="true"
     fi
 
     LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only ${MACOSX_DEFAULT_ARCH}"
     LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
     LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';;
 esac
-
 AC_MSG_CHECKING(for --enable-framework)
 if test "$enable_framework"
 then
@@ -1988,9 +1996,6 @@
 
 		if test ${MACOSX_DEPLOYMENT_TARGET} '>' 10.2
 		then
-			if test "${enable_universalsdk}"; then
-				LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}"
-			fi
 			LDSHARED='$(CC) -bundle -undefined dynamic_lookup'
 			LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup'
 			BLDSHARED="$LDSHARED"
@@ -2922,6 +2927,16 @@
    AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)
 ])
+AC_MSG_CHECKING(for prlimit)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/time.h>
+#include <sys/resource.h>
+    ]], [[void *x=prlimit]])],
+  [AC_DEFINE(HAVE_PRLIMIT, 1, Define if you have the 'prlimit' functions.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)
+])
+
 # On some systems (eg. FreeBSD 5), we would find a definition of the
 # functions ctermid_r, setgroups in the library, but no prototype
 # (e.g. because we use _XOPEN_SOURCE). See whether we can take their
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 65205e4..13979fc 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -627,6 +627,9 @@
 /* Define to 1 if you have the `pread' function. */
 #undef HAVE_PREAD
 
+/* Define if you have the 'prlimit' functions. */
+#undef HAVE_PRLIMIT
+
 /* Define to 1 if you have the <process.h> header file. */
 #undef HAVE_PROCESS_H
 
diff --git a/setup.py b/setup.py
index ad7e320..c6ae1b2 100644
--- a/setup.py
+++ b/setup.py
@@ -1326,6 +1326,8 @@
             zlib_h = zlib_inc[0] + '/zlib.h'
             version = '"0.0.0"'
             version_req = '"1.1.3"'
+            if host_platform == 'darwin' and is_macosx_sdk_path(zlib_h):
+                zlib_h = os.path.join(macosx_sdk_root(), zlib_h[1:])
             with open(zlib_h) as fp:
                 while 1:
                     line = fp.readline()